<?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.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-lamps-cms-composite-kem-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="Composite ML-KEM CMS">Composite ML-KEM for use in Cryptographic Message Syntax (CMS)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-cms-composite-kem-02"/>
    <author initials="D." surname="Van Geest" fullname="Daniel Van Geest">
      <organization>CryptoNext Security</organization>
      <address>
        <postal>
          <street>16, Boulevard Saint-Germain</street>
          <city>Paris</city>
          <code>75007</code>
          <country>France</country>
        </postal>
        <email>daniel.vangeest@cryptonext-security.com</email>
      </address>
    </author>
    <author initials="M." surname="Ounsworth" fullname="Mike Ounsworth">
      <organization abbrev="Entrust">Entrust Limited</organization>
      <address>
        <postal>
          <street>2500 Solandt Road – Suite 100</street>
          <city>Ottawa, Ontario</city>
          <code>K2K 3G5</code>
          <country>Canada</country>
        </postal>
        <email>mike.ounsworth@entrust.com</email>
      </address>
    </author>
    <author initials="J." surname="Gray" fullname="John Gray">
      <organization abbrev="Entrust">Entrust Limited</organization>
      <address>
        <postal>
          <street>2500 Solandt Road – Suite 100</street>
          <city>Ottawa, Ontario</city>
          <code>K2K 3G5</code>
          <country>Canada</country>
        </postal>
        <email>john.gray@entrust.com</email>
      </address>
    </author>
    <author initials="J." surname="Klaussner" fullname="Jan Klaussner">
      <organization>Bundesdruckerei GmbH</organization>
      <address>
        <postal>
          <street>Kommandantenstr. 18</street>
          <city>Berlin</city>
          <code>10969</code>
          <country>Germany</country>
        </postal>
        <email>jan.klaussner@bdr.de</email>
      </address>
    </author>
    <date year="2026" month="September" day="18"/>
    <area>Security</area>
    <workgroup>LAMPS</workgroup>
    <keyword>X.509</keyword>
    <keyword>CMS</keyword>
    <keyword>Post-Quantum</keyword>
    <keyword>KEM</keyword>
    <keyword>Composite ML-KEM</keyword>
    <abstract>
      <?line 111?>

<t>Composite ML-KEM defines combinations of Module-Lattice-based Key Encapsulation Mechanism (ML-KEM) with RSA-OAEP, ECDH, X25519, and X448.
This document specifies the conventions for using Composite ML-KEM algorithms with the Cryptographic Message Syntax (CMS) using the KEMRecipientInfo structure defined in “Using Key Encapsulation
Mechanism (KEM) Algorithms in the Cryptographic Message Syntax (CMS)” (RFC 9629).</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://lamps-wg.github.io/cms-composite-kem/draft-ietf-lamps-cms-composite-kem.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-lamps-cms-composite-kem/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        LAMPS Working Group mailing list (<eref target="mailto:spams@ietf.org"/>),
        which is archived at <eref target="https://datatracker.ietf.org/wg/lamps/about/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/spams/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/lamps-wg/cms-composite-kem"/>.</t>
    </note>
  </front>
  <middle>
    <?line 118?>

<section anchor="sec-intro">
      <name>Introduction</name>
      <t><xref target="I-D.ietf-lamps-pq-composite-kem"/> defines a collection of Key Encapsulation Mechanism (KEM) algorithms, referred to as Composite ML-KEM, which combine Module-Lattice-based Key Encapsulation Mechanism (ML-KEM) <xref target="FIPS203"/> with traditional algorithms RSA-OAEP, ECDH, X25519, and X448.
<xref target="RFC9629"/> defines the KEMRecipientInfo structure for the use of KEM algorithms for the Cryptographic Message Syntax (CMS) <xref target="RFC5652"/> enveloped-data content type, the CMS authenticated-data content type, and the CMS authenticated-enveloped-data content type.
This document acts as a companion to <xref target="I-D.ietf-lamps-pq-composite-kem"/> by providing conventions for using Composite ML-KEM algorithms with the KEMRecipientInfo structure within the CMS.</t>
      <section anchor="asn1">
        <name>ASN.1</name>
        <t>CMS values are generated using ASN.1 <xref target="X680"/>, using the Basic Encoding Rules (BER) and the Distinguished Encoding Rules (DER) <xref target="X690"/>.</t>
      </section>
      <section anchor="sec-terminology">
        <name>Conventions and Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.
These words may also appear in this document in
lower case as plain English words, absent their normative meanings.
<?line -8?>
        </t>
      </section>
      <section anchor="composite-ml-kem">
        <name>Composite ML-KEM</name>
        <t>ML-KEM is a lattice-based KEM using Module Learning with Errors as its underlying primitive.
It was standardized in <xref target="FIPS203"/> with three parameter sets: ML-KEM-512, ML-KEM-768, and ML-KEM-1024.
Composite ML-KEM pairs ML-KEM-768 or ML-KEM-1024 with RSA-OAEP, ECDH, X25519, or X448 at similar security levels such that the shared secret key from each component algorithm is combined into a single shared secret key.
Composite ML-KEM does not provide pairings based on ML-KEM-512.</t>
        <t>All KEM algorithms provide three functions: KeyGen(), Encapsulate(), and Decapsulate().
The names KeyGen(), Encapsulate(), and Decapsulate() are taken from <xref section="2" sectionFormat="of" target="RFC9629"/>, the specification of the KEMRecipientInfo structure.</t>
        <t><xref target="I-D.ietf-lamps-pq-composite-kem"/> defines the same three operations for Composite ML-KEM under the names KeyGen(), Encaps(), and Decaps().
The two naming conventions refer to the same operations: Encapsulate() in this document and in <xref target="RFC9629"/> is Encaps() in <xref target="I-D.ietf-lamps-pq-composite-kem"/>; Decapsulate() is Decaps().
This document uses the <xref target="RFC9629"/> names throughout, since it defines the CMS-specific KEMRecipientInfo processing.</t>
        <t>The parameter names also differ between the two documents, though they denote the same values.
This document, following <xref target="RFC9629"/>, uses pk for the public encapsulation key, sk for the private decapsulation key, and ct for the ciphertext; <xref target="I-D.ietf-lamps-pq-composite-kem"/> uses pk, sk, and ct for the same three values.
Both documents use ss for the shared secret.</t>
        <t>The parameter order matches between the two documents for KeyGen() and for Decapsulate()/Decaps(), but not for Encapsulate()/Encaps(): this document's Encapsulate(pk) -&gt; (ct, ss) returns the ciphertext before the shared secret, while <xref target="I-D.ietf-lamps-pq-composite-kem"/>'s Encaps(pk) -&gt; (ss, ct) returns the shared secret before the ciphertext.
Implementers referencing both documents should not assume positional correspondence between the two encapsulation functions' return values.</t>
        <t>The following summarizes these three functions for Composite ML-KEM:</t>
        <dl>
          <dt>KeyGen() -&gt; (pk, sk):</dt>
          <dd>
            <t>Generate the public encapsulation key (pk) and a private decapsulation key (sk).
<xref section="3.1" sectionFormat="of" target="I-D.ietf-lamps-pq-composite-kem"/> specifies the KeyGen() algorithm for Composite ML-KEM.</t>
          </dd>
          <dt>Encapsulate(pk) -&gt; (ct, ss):</dt>
          <dd>
            <t>Given the recipient's public key (pk), produce both a ciphertext (ct) to be passed to the recipient and a shared secret (ss) for use by the originator.
<xref section="3.2" sectionFormat="of" target="I-D.ietf-lamps-pq-composite-kem"/> specifies the Encaps() algorithm for Composite ML-KEM.</t>
          </dd>
          <dt>Decapsulate(sk, ct) -&gt; ss:</dt>
          <dd>
            <t>Given the private key (sk) and the ciphertext (ct), produce the shared secret (ss) for the recipient.
<xref section="3.3" sectionFormat="of" target="I-D.ietf-lamps-pq-composite-kem"/> specifies the Decaps() algorithm for Composite ML-KEM.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="use-of-composite-ml-kem-in-the-cms">
      <name>Use of Composite ML-KEM in the CMS</name>
      <t>Composite ML-KEM algorithms MAY be employed for one or more recipients in the CMS enveloped-data content type <xref target="RFC5652"/>, the CMS authenticated-data content type <xref target="RFC5652"/>, or the CMS authenticated-enveloped-data content type <xref target="RFC5083"/>.
In each case, the KEMRecipientInfo <xref target="RFC9629"/> type is used with the Composite ML-KEM algorithm to securely transfer the content-encryption key or the content-authenticated-encryption key from the originator to the recipient.</t>
      <t>Processing a Composite ML-KEM algorithm with KEMRecipientInfo follows the same steps as <xref section="2" sectionFormat="of" target="RFC9629"/>.
To support the Composite ML-KEM algorithm, a CMS originator MUST implement the Encapsulate() function and a CMS recipient MUST implement the Decapsulate() function.</t>
      <section anchor="sec-using-recipientInfo">
        <name>RecipientInfo Conventions</name>
        <t>When a Composite ML-KEM algorithm is employed for a recipient, the RecipientInfo alternative for that recipient MUST be OtherRecipientInfo using the KEMRecipientInfo structure as defined in <xref target="RFC9629"/>.</t>
        <t>The fields of the KEMRecipientInfo have the following meanings:</t>
        <dl newline="true">
          <dt>version</dt>
          <dd>
            <t>The syntax version number; it MUST be 0.</t>
          </dd>
          <dt>rid</dt>
          <dd>
            <t>Identifies the recipient's certificate or public key.</t>
          </dd>
          <dt>kem</dt>
          <dd>
            <t>Identifies the KEM algorithm; it MUST contain one of the Composite ML-KEM OIDs in <xref target="sec-identifiers"/>.</t>
          </dd>
          <dt>kemct</dt>
          <dd>
            <t>The ciphertext produced for this recipient.</t>
          </dd>
          <dt>kdf</dt>
          <dd>
            <t>Identifies the key derivation algorithm.
Note that the Key Derivation Function (KDF) used for CMS RecipientInfo process MAY be different than the KDF used within the Composite ML-KEM algorithm.
Implementations MUST support the HMAC-based Key Derivation Function (HKDF) <xref target="RFC5869"/> with SHA-256 <xref target="FIPS180"/>, using the id-alg-hkdf-with-sha256 KDF object identifier (OID) <xref target="RFC8619"/>.
As specified in <xref target="RFC8619"/>, the parameter field MUST be absent when this OID appears within the ASN.1 type AlgorithmIdentifier.
Implementations MAY support other KDFs as well.</t>
          </dd>
          <dt>kekLength</dt>
          <dd>
            <t>The size of the key-encryption key in octets.</t>
          </dd>
          <dt>ukm</dt>
          <dd>
            <t>Optional input to the KDF.
The secure use of Composite ML-KEM in CMS does not depend on the use of a ukm value, so this document does not place any requirements on this value.
See <xref section="3" sectionFormat="of" target="RFC9629"/> for more information about the ukm parameter.</t>
          </dd>
          <dt>wrap</dt>
          <dd>
            <t>Identifies a key-encryption algorithm used to encrypt the content-encryption key or the content-authenticated-encryption key.
Implementations MUST support the AES-Wrap-256 <xref target="RFC3394"/> key-encryption algorithm using the id-aes256-wrap key-encryption algorithm OID <xref target="RFC3565"/>.
Implementations MAY support other key-encryption algorithms as well.</t>
          </dd>
          <dt>encryptedKey</dt>
          <dd>
            <t>The result of encrypting the content-encryption key or the content-authenticated-encryption key with the key-encryption key.</t>
          </dd>
        </dl>
        <t><xref target="example"/> contains an example of establishing a content-encryption key using Composite ML-KEM in the KEMRecipientInfo type.</t>
      </section>
      <section anchor="underlying-components">
        <name>Underlying Components</name>
        <t>When Composite ML-KEM is employed in the CMS, the underlying components used within the KEMRecipientInfo structure SHOULD provide a security strength (as defined in <xref target="SP.800-57pt1r5"/>) of at least the security level of the ML-KEM variant used, as summarized in the table below.</t>
        <t>If underlying components other than those specified in <xref target="sec-using-recipientInfo"/> are used, then the following table gives the minimum requirements on the components used with Composite ML-KEM in the KEMRecipientInfo type in order to satisfy the KDF and key wrapping algorithm requirements from <xref section="7" sectionFormat="of" target="RFC9629"/>.
The components are chosen based on the ML-KEM variant used within the Composite ML-KEM algorithm.</t>
        <table anchor="tab-strong">
          <name>Composite ML-KEM KEMRecipientInfo Component Security Levels</name>
          <thead>
            <tr>
              <th align="left">Security Strength</th>
              <th align="left">ML-KEM Variant</th>
              <th align="left">KDF Preimage Strength</th>
              <th align="left">Symmetric Key-Encryption Strength</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">192-bit</td>
              <td align="left">ML-KEM-768</td>
              <td align="left">192-bit</td>
              <td align="left">192-bit (*)</td>
            </tr>
            <tr>
              <td align="left">256-bit</td>
              <td align="left">ML-KEM-1024</td>
              <td align="left">256-bit</td>
              <td align="left">256-bit</td>
            </tr>
          </tbody>
        </table>
        <t>(*) In the case of AES Key Wrap, a 256-bit key is typically used because AES-192 is not as commonly deployed.</t>
        <section anchor="use-of-the-hkdf-based-key-derivation-function">
          <name>Use of the HKDF-Based Key Derivation Function</name>
          <t>The HKDF function is a composition of the HKDF-Extract and HKDF-Expand functions.</t>
          <sourcecode type="pseudocode"><![CDATA[
HKDF(salt, IKM, info, L)
  = HKDF-Expand(HKDF-Extract(salt, IKM), info, L)
]]></sourcecode>
          <t>When used with KEMRecipientInfo, the salt parameter is unused; that is, it is the zero-length string "".
The IKM, info, and L parameters correspond to the same KDF inputs from <xref section="5" sectionFormat="of" target="RFC9629"/>.
The info parameter is independently generated by the originator and recipient.
Implementations MUST confirm that L is consistent with the key size of the key-encryption algorithm.</t>
        </section>
      </section>
      <section anchor="sec-using-certs">
        <name>Certificate Conventions</name>
        <t><xref target="RFC5280"/> specifies the profile for using X.509 certificates in Internet applications.
A recipient static public key is needed for Composite ML-KEM and the originator obtains that public key from the recipient's certificate.
The conventions for carrying Composite ML-KEM public keys are specified in <xref target="I-D.ietf-lamps-pq-composite-kem"/>.</t>
      </section>
      <section anchor="sec-using-smime-caps">
        <name>SMIME Capabilities Attribute Conventions</name>
        <t><xref section="2.5.2" sectionFormat="of" target="RFC8551"/> defines the SMIMECapabilities attribute to announce a partial list of algorithms that an S/MIME implementation can support.
When constructing a CMS signed-data content type <xref target="RFC5652"/>, a compliant implementation MAY include the SMIMECapabilities attribute that announces support for one or more of the Composite ML-KEM algorithm identifiers.</t>
        <t>The SMIMECapability SEQUENCE representing the Composite ML-KEM algorithm MUST include one of the Composite ML-KEM OIDs in the capabilityID field.
When one of the Composite ML-KEM OIDs appears in the capabilityID field, the parameters MUST NOT be present.</t>
      </section>
    </section>
    <section anchor="sec-identifiers">
      <name>Identifiers</name>
      <t>All identifiers used to indicate Composite ML-KEM within the CMS are defined in <xref target="I-D.ietf-lamps-pq-composite-kem"/>, <xref target="RFC8619"/>, and <xref target="RFC3565"/>; they are reproduced here for convenience:</t>
      <sourcecode type="asn.1"><![CDATA[
  -- Composite ML-KEM OIDs

  id-MLKEM768-RSA2048-SHA3-256 OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) alg(6) 55 }

  id-MLKEM768-RSA3072-SHA3-256 OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) alg(6) 56 }

  id-MLKEM768-RSA4096-SHA3-256 OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) alg(6) 57 }

  id-MLKEM768-X25519-SHA3-256 OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) alg(6) 58 }

  id-MLKEM768-ECDH-P256-SHA3-256 OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) alg(6) 59 }

  id-MLKEM768-ECDH-P384-SHA3-256 OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) alg(6) 60 }

  id-MLKEM768-ECDH-brainpoolP256r1-SHA3-256 OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) alg(6) 61 }

  id-MLKEM1024-RSA3072-SHA3-256 OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) alg(6) 62 }

  id-MLKEM1024-ECDH-P384-SHA3-256 OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) alg(6) 63 }

  id-MLKEM1024-ECDH-brainpoolP384r1-SHA3-256 OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) alg(6) 64 }

  id-MLKEM1024-X448-SHA3-256 OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) alg(6) 65 }

  id-MLKEM1024-ECDH-P521-SHA3-256 OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) alg(6) 66 }

  -- KEMRecipientInfo.kdf OIDs

  id-alg-hkdf-with-sha256 OBJECT IDENTIFIER ::= { iso(1)
      member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9)
      smime(16) alg(3) 28 }

  -- KEMRecipientInfo.wrap OIDs

  aes OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) us(840)
      organization(1) gov(101) csor(3) nistAlgorithms(4) 1 }

  id-aes256-wrap OBJECT IDENTIFIER ::= { aes 45 }
]]></sourcecode>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The Security Considerations sections of <xref target="I-D.ietf-lamps-pq-composite-kem"/> and <xref target="RFC9629"/> apply to this specification as well.</t>
      <t>Implementations MUST protect the Composite ML-KEM private key, the key-encryption key, the content-encryption key, message-authentication key, and the content-authenticated-encryption key.
Of these keys, all but the private key are ephemeral and MUST be wiped after use.
Disclosure of the Composite ML-KEM private key could result in the compromise of all messages protected with that key.
Disclosure of the key-encryption key, the content-encryption key, or the content-authenticated-encryption key could result in the compromise of the associated encrypted content.
Disclosure of the key-encryption key, the message-authentication key, or the content-authenticated-encryption key could allow modification of the associated authenticated content.</t>
      <t>Additional considerations related to key management may be found in <xref target="SP.800-57pt1r5"/>.</t>
      <t>The generation of private keys relies on random numbers, as does the encapsulation function of Composite ML-KEM.
The use of inadequate pseudorandom number generators (PRNGs) to generate these values can result in little or no security.
If the random value is weakly chosen, then an attacker may find it much easier to reproduce the PRNG environment that produced the keys or ciphertext, searching the resulting small set of possibilities for a matching public key or ciphertext value, rather than performing a more complex algorithmic attack against the components of Composite ML-KEM.
During encapsulation, the ML-KEM component draws the encapsulation randomness from a random bit generator.
While Composite ML-KEM passes this randomness through a KDF before using it, the peer holding the decapsulation key has still received this randomness in the ML-KEM component of the ciphertext.
Any information that this randomness provides about other outputs of the generator is available to that peer, therefore it is important to follow the RNG guidance in <xref target="FIPS203"/>.</t>
      <t>Composite ML-KEM encapsulation and decapsulation only outputs a shared secret and ciphertext.
Implementations MUST NOT use intermediate values directly for any purpose.</t>
      <t>Implementations SHOULD NOT reveal information about intermediate values or calculations, whether by timing or other "side channels"; otherwise an opponent may be able to determine information about the keying data and/or the recipient's private key.
Although not all intermediate information may be useful to an opponent, it is preferable to conceal as much information as is practical, unless analysis specifically indicates that the information would not be useful to an opponent.</t>
      <t>Generally, good cryptographic practice employs a given Composite ML-KEM key pair in only one scheme.
This practice avoids the risk that vulnerability in one scheme may compromise the security of the other and may be essential to maintain provable security.</t>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <t>IANA is requested to allocate a value from the "SMI Security for S/MIME Module Identifier (1.2.840.113549.1.9.16.0)" registry for the ASN.1 module in <xref target="sec-asn1-module"/>.</t>
      <ul spacing="normal">
        <li>
          <t>Decimal: IANA Assigned - <strong>Replace TBDMOD</strong></t>
        </li>
        <li>
          <t>Description: Composite-MLKEM-CMS-2026 - id-mod-composite-mlkem-cms-2026</t>
        </li>
        <li>
          <t>References: This Document</t>
        </li>
      </ul>
      <aside>
        <t>RFC EDITOR: Please replace TBDCompositeMOD in the ASN.1 module with the module number assigned to id-mod-composite-mlkem-2025 in <xref target="I-D.ietf-lamps-pq-composite-kem"/>.</t>
      </aside>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="FIPS180">
          <front>
            <title>Secure hash standard</title>
            <author>
              <organization/>
            </author>
            <date year="2015"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.180-4"/>
          <refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
        </reference>
        <reference anchor="X680" target="https://www.itu.int/rec/T-REC-X.680">
          <front>
            <title>Information technology - Abstract Syntax Notation One (ASN.1): Specification of basic notation</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2021" month="February"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.680"/>
          <seriesInfo name="ISO/IEC" value="8824-1:2021"/>
        </reference>
        <reference anchor="X690" target="https://www.itu.int/rec/T-REC-X.690">
          <front>
            <title>Information technology - Abstract Syntax Notation One (ASN.1): ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2021" month="February"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.690"/>
          <seriesInfo name="ISO/IEC" value="8825-1:2021"/>
        </reference>
        <reference anchor="RFC5911">
          <front>
            <title>New ASN.1 Modules for Cryptographic Message Syntax (CMS) and S/MIME</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="June" year="2010"/>
            <abstract>
              <t>The Cryptographic Message Syntax (CMS) format, and many associated formats, are expressed using ASN.1. The current ASN.1 modules conform to the 1988 version of ASN.1. This document updates those ASN.1 modules to conform to the 2002 version of ASN.1. There are no bits-on-the-wire changes to any of the formats; this is simply a change to the syntax. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5911"/>
          <seriesInfo name="DOI" value="10.17487/RFC5911"/>
        </reference>
        <reference anchor="RFC8551">
          <front>
            <title>Secure/Multipurpose Internet Mail Extensions (S/MIME) Version 4.0 Message Specification</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <author fullname="B. Ramsdell" initials="B." surname="Ramsdell"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="April" year="2019"/>
            <abstract>
              <t>This document defines Secure/Multipurpose Internet Mail Extensions (S/MIME) version 4.0. S/MIME provides a consistent way to send and receive secure MIME data. Digital signatures provide authentication, message integrity, and non-repudiation with proof of origin. Encryption provides data confidentiality. Compression can be used to reduce data size. This document obsoletes RFC 5751.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8551"/>
          <seriesInfo name="DOI" value="10.17487/RFC8551"/>
        </reference>
        <reference anchor="I-D.ietf-lamps-pq-composite-kem">
          <front>
            <title>Composite ML-KEM for use in X.509 Public Key Infrastructure</title>
            <author fullname="Mike Ounsworth" initials="M." surname="Ounsworth">
              <organization>Entrust Limited</organization>
            </author>
            <author fullname="John Gray" initials="J." surname="Gray">
              <organization>Entrust Limited</organization>
            </author>
            <author fullname="Massimiliano Pala" initials="M." surname="Pala">
              <organization>OpenCA Labs</organization>
            </author>
            <author fullname="Jan Klaußner" initials="J." surname="Klaußner">
              <organization>Bundesdruckerei GmbH</organization>
            </author>
            <author fullname="Scott Fluhrer" initials="S." surname="Fluhrer">
              <organization>Cisco Systems</organization>
            </author>
            <date day="1" month="September" year="2026"/>
            <abstract>
              <t>   This document defines combinations of US NIST ML-KEM in hybrid with
   traditional algorithms RSA-OAEP, ECDH, X25519, and X448.  These
   combinations are tailored to meet security best practices and
   regulatory guidelines.  Composite ML-KEM is applicable in any
   application that uses X.509 or PKIX data structures that accept ML-
   KEM, but where the operator wants extra protection against breaks or
   catastrophic bugs in ML-KEM.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-pq-composite-kem-21"/>
        </reference>
        <reference anchor="RFC9629">
          <front>
            <title>Using Key Encapsulation Mechanism (KEM) Algorithms in the Cryptographic Message Syntax (CMS)</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="J. Gray" initials="J." surname="Gray"/>
            <author fullname="T. Okubo" initials="T." surname="Okubo"/>
            <date month="August" year="2024"/>
            <abstract>
              <t>The Cryptographic Message Syntax (CMS) supports key transport and key agreement algorithms. In recent years, cryptographers have been specifying Key Encapsulation Mechanism (KEM) algorithms, including quantum-secure KEM algorithms. This document defines conventions for the use of KEM algorithms by the originator and recipients to encrypt and decrypt CMS content. This document updates RFC 5652.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9629"/>
          <seriesInfo name="DOI" value="10.17487/RFC9629"/>
        </reference>
        <reference anchor="RFC5652">
          <front>
            <title>Cryptographic Message Syntax (CMS)</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="September" year="2009"/>
            <abstract>
              <t>This document describes the Cryptographic Message Syntax (CMS). This syntax is used to digitally sign, digest, authenticate, or encrypt arbitrary message content. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="70"/>
          <seriesInfo name="RFC" value="5652"/>
          <seriesInfo name="DOI" value="10.17487/RFC5652"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC5083">
          <front>
            <title>Cryptographic Message Syntax (CMS) Authenticated-Enveloped-Data Content Type</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="November" year="2007"/>
            <abstract>
              <t>This document describes an additional content type for the Cryptographic Message Syntax (CMS). The authenticated-enveloped-data content type is intended for use with authenticated encryption modes. All of the various key management techniques that are supported in the CMS enveloped-data content type are also supported by the CMS authenticated-enveloped-data content type. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5083"/>
          <seriesInfo name="DOI" value="10.17487/RFC5083"/>
        </reference>
        <reference anchor="RFC5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="RFC8619">
          <front>
            <title>Algorithm Identifiers for the HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>RFC 5869 specifies the HMAC-based Extract-and-Expand Key Derivation Function (HKDF) algorithm. This document assigns algorithm identifiers to the HKDF algorithm when used with three common one-way hash functions.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8619"/>
          <seriesInfo name="DOI" value="10.17487/RFC8619"/>
        </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="October" year="2002"/>
            <abstract>
              <t>The purpose of this document is to make the AES Key Wrap algorithm 
conveniently available to the Internet community. The United States 
of America has adopted AES as the new encryption standard. The AES 
Key Wrap algorithm will probably be adopted by the USA for 
encryption of AES keys. The authors took most of the text in this 
document from the draft AES Key Wrap posted by NIST.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3394"/>
          <seriesInfo name="DOI" value="10.17487/RFC3394"/>
        </reference>
        <reference anchor="RFC3565">
          <front>
            <title>Use of the Advanced Encryption Standard (AES) Encryption Algorithm in Cryptographic Message Syntax (CMS)</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="July" year="2003"/>
            <abstract>
              <t>This document specifies the conventions for using the Advanced Encryption Standard (AES) algorithm for encryption with the Cryptographic Message Syntax (CMS). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3565"/>
          <seriesInfo name="DOI" value="10.17487/RFC3565"/>
        </reference>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="FIPS203">
          <front>
            <title>Module-lattice-based key-encapsulation mechanism standard</title>
            <author>
              <organization/>
            </author>
            <date month="August" year="2024"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.203"/>
          <refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
        </reference>
        <reference anchor="SP.800-57pt1r5" target="https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57pt1r5.pdf">
          <front>
            <title>Recommendation for Key Management: Part 1 – General</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2020" month="May"/>
          </front>
        </reference>
        <reference anchor="RFC9690">
          <front>
            <title>Use of the RSA-KEM Algorithm in the Cryptographic Message Syntax (CMS)</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="February" year="2025"/>
            <abstract>
              <t>The RSA Key Encapsulation Mechanism (RSA-KEM) algorithm is a one-pass (store-and-forward) cryptographic mechanism for an originator to securely send keying material to a recipient using the recipient's RSA public key. The RSA-KEM algorithm is specified in Clause 11.5 of ISO/IEC: 18033-2:2006. This document specifies the conventions for using the RSA-KEM algorithm as a standalone KEM algorithm and the conventions for using the RSA-KEM algorithm with the Cryptographic Message Syntax (CMS) using KEMRecipientInfo as specified in RFC 9629. This document obsoletes RFC 5990.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9690"/>
          <seriesInfo name="DOI" value="10.17487/RFC9690"/>
        </reference>
        <reference anchor="RFC9936">
          <front>
            <title>Use of ML-KEM in the Cryptographic Message Syntax (CMS)</title>
            <author fullname="J. Prat" initials="J." surname="Prat"/>
            <author fullname="M. Ounsworth" initials="M." surname="Ounsworth"/>
            <author fullname="D. Van Geest" initials="D." surname="Van Geest"/>
            <date month="March" year="2026"/>
            <abstract>
              <t>Module-Lattice-Based Key-Encapsulation Mechanism (ML-KEM) is a quantum-resistant Key Encapsulation Mechanism (KEM). Three parameter sets for the ML-KEM algorithm are specified by the US National Institute of Standards and Technology (NIST) in FIPS 203. In order of increasing security strength (and decreasing performance), these parameter sets are ML-KEM-512, ML-KEM-768, and ML-KEM-1024. This document specifies the conventions for using ML-KEM with the Cryptographic Message Syntax (CMS) using the KEMRecipientInfo structure defined in "Using Key Encapsulation Mechanism (KEM) Algorithms in the Cryptographic Message Syntax (CMS)" (RFC 9629).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9936"/>
          <seriesInfo name="DOI" value="10.17487/RFC9936"/>
        </reference>
      </references>
    </references>
    <?line 395?>

<section anchor="sec-asn1-module">
      <name>ASN.1 Module</name>
      <t>This appendix includes the ASN.1 module <xref target="X680"/> for Composite ML-KEM.
This module imports objects from <xref target="RFC5911"/>, <xref target="RFC9629"/>, <xref target="RFC8619"/>, <xref target="I-D.ietf-lamps-pq-composite-kem"/>.</t>
      <sourcecode type="asn.1"><![CDATA[
<CODE BEGINS>
Composite-MLKEM-CMS-2026
  { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9)
        id-smime(16) id-mod(0)
        id-mod-composite-mlkem-cms-2026(TBDMOD) }

DEFINITIONS IMPLICIT TAGS ::= BEGIN

EXPORTS ALL;

IMPORTS

SMIME-CAPS
  FROM AlgorithmInformation-2009  -- [RFC5911]
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-algorithmInformation-02(58) }

KEM-ALGORITHM
  FROM KEMAlgorithmInformation-2023  -- [RFC9629]
      { iso(1) identified-organization(3) dod(6) internet(1)
        security(5) mechanisms(5) pkix(7) id-mod(0)
        id-mod-kemAlgorithmInformation-2023(109) }

kda-hkdf-with-sha256
  FROM HKDF-OID-2019  -- [RFC8619]
      { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
        pkcs-9(9) smime(16) modules(0) id-mod-hkdf-oid-2019(68) }

kwa-aes256-wrap
  FROM CMSAesRsaesOaep-2009  -- [RFC5911]
      { iso(1) member-body(2) us(840) rsadsi(113549)
      pkcs(1) pkcs-9(9) smime(16) modules(0)
      id-mod-cms-aes-02(38) }

kema-MLKEM768-RSA2048-SHA3-256, kema-MLKEM768-RSA3072-SHA3-256,
kema-MLKEM768-RSA4096-SHA3-256, kema-MLKEM768-X25519-SHA3-256,
kema-MLKEM768-ECDH-P256-SHA3-256, kema-MLKEM768-ECDH-P384-SHA3-256,
kema-MLKEM768-ECDH-brainpoolP256r1-SHA3-256,
kema-MLKEM1024-RSA3072-SHA3-256, kema-MLKEM1024-ECDH-P384-SHA3-256,
kema-MLKEM1024-ECDH-brainpoolP384r1-SHA3-256, kema-MLKEM1024-X448,
kema-MLKEM1024-ECDH-P521-SHA3-256
  FROM Composite-MLKEM-2025  -- [I-D.ietf-lamps-pq-composite-kem]
      { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-composite-mlkem-2025(TBDCompositeMOD) }
;

-- Updates for the SMIME-CAPS Set from RFC 5911

SMimeCapsSet SMIME-CAPS ::=
   { kema-MLKEM768-RSA2048-SHA3-256.&smimeCaps |
     kema-MLKEM768-RSA3072-SHA3-256.&smimeCaps |
     kema-MLKEM768-RSA4096-SHA3-256.&smimeCaps |
     kema-MLKEM768-X25519-SHA3-256.&smimeCaps |
     kema-MLKEM768-ECDH-P256-SHA3-256.&smimeCaps |
     kema-MLKEM768-ECDH-P384-SHA3-256.&smimeCaps |
     kema-MLKEM768-ECDH-brainpoolP256r1-SHA3-256.&smimeCaps |
     kema-MLKEM1024-RSA3072-SHA3-256.&smimeCaps |
     kema-MLKEM1024-ECDH-P384-SHA3-256.&smimeCaps |
     kema-MLKEM1024-ECDH-brainpoolP384r1-SHA3-256.&smimeCaps |
     kema-MLKEM1024-X448.&smimeCaps |
     kema-MLKEM1024-ECDH-P521-SHA3-256.&smimeCaps |
     kda-hkdf-with-sha256.&smimeCaps |
     kwa-aes256-wrap.&smimeCaps,
     ... }

END
<CODE ENDS>
]]></sourcecode>
    </section>
    <section anchor="example">
      <name>Composite ML-KEM CMS Authenticated-Enveloped-Data Example</name>
      <t>This example shows the establishment of an AES-256 content-encryption
key using:</t>
      <ul spacing="normal">
        <li>
          <t>id-MLKEM768-ECDH-P256-SHA3-256;</t>
        </li>
        <li>
          <t>KEMRecipientInfo key derivation using HKDF with SHA-256; and</t>
        </li>
        <li>
          <t>KEMRecipientInfo key wrap using AES-256-KEYWRAP.</t>
        </li>
      </ul>
      <t>In real-world use, the originator would encrypt the content-
encryption key in a manner that would allow decryption with their own
private key as well as the recipient's private key.
This is omitted in an attempt to simplify the example.</t>
      <section anchor="originator-cms-processing">
        <name>Originator CMS Processing</name>
        <t>Alice obtains Bob's id-MLKEM768-ECDH-P256-SHA3-256 public key:</t>
        <sourcecode type="test-vectors"><![CDATA[
-----BEGIN PUBLIC KEY-----
MIIE8jAKBggrBgEFBQcGOwOCBOIAjssyhemrdzqTE5MNKmCruyoBancRo6y8A5Aw
uDSZ2AwdyWZCWnG6R2sP0vlXCNglq7BvHQTF6BObo+tT+ZmJSnsy1YaSKuyf8yw3
vxyr1ScErsY0r2s1gfprFhYLUQNNoQd+YViNTAedvTBeQGJLgJOozEIFKiwHbvcu
ddc2qnVGqNW0SSjF5QoE/lcwgvpYpZosHRePTYhm87hCdQJldwB6PZmgxZqfyeh0
vXsB+KGw+XLJaOgb2vtl+Nmbm5cyUvOgHItyxQIadhO8iHEIubYzKdlOcDGiP1qE
lCiMNslC+TGcl4Ij2SBQgyfLGpw2jpd3xJxyqjFZeeGrgidfRdVRtUyqUbCGHsLH
ITFJz/h9vqe+S5N6vJmHMFCTHtu0CSiz5pK/RepjWKZiWhYdz1k9u8GWo4q3h8SH
MnQKoSJq3Fx84Kl/ghUNxXB//2w+a/ekHuUzK8QbyWIqm2RSHkOj91hApCMG0tMn
I0xoEqm/ewo3xZA5MJUZEdIkmoN+d5fLwVlUOHS0TWVrrCWAvttq4HySFMBU3vGd
qGQPv2ZLd+NgjzmRMwc3unQh4KIXBspNK+lJgyU57QaDWtVq/yoXjhw5YQlYmckb
NuIeTjpNDqfNxFSuziVQwZQ6VPm/63tjcxy9uMtxw5wTyqfAkyZVKdTLUdcMsJVF
8XE0r6xtCQrNsmWzqhK1kvOUQcITlZEonyN4uXdFweFwXImg/NSK6QUcjKi6iQeI
Gmiy2bKbUIgrIbhyUOZU1ad/vrF+dkBzrPei5BanHBLF5hYVoJcQ+hmg3cVsR1Ke
XaduFdh0UXPNPMiTrClLz/FMdfcbzbe2xdSXHqCsdIBKxGagT3p0H/uTW1WwheFr
DJKBDYBaZxVOwRqP16M7QIOTo8AqeXTOQMSxAdCAx7NR4SttZbQDrjwj1qCj5LQ9
0TW4vUmNsWkaTeQP0LC6f/J5vlEQeIu0vUuggkqmDdaKPwx35SOixjwEwiweXgi1
3bdn68py4/VVYPwXHZaDhakUurZcNEU91nwkrdG03DmbyBlIrwwIClgMwhmSbSGj
Mql2lCPPE/zBJAvL9lfDP3mpoEMB0iCZm6t2IfAN7NLOwFeBOUomqxcvs0OkdxFG
1Gk0hVEis4LHcje/1rBAX8i2Ige6H0AqY5e9X2OHHjVFNzoM8Mavo5trYEksanbG
aJmpADcX8wxjDPhq+VBethWo5Ik0aLW16qGY/jAX6ROrpeRobOiSYNnDLFWI38Mf
cZJuHbBajBe2gwQbTdadu0elr7fMuHd7OOB35vgH7qq0lgOg7LcB8rVgXBeHLsJp
AGS2XTYlKFRNieIo5NSRdkXNkIoHyFZWU9dNUwbKD0CYtxxlj3cKp4AFFHdzCTot
bFIfhoQQxIsZhbPOFCZKjtEQ+UVnjQN1y0E9uym1N7ZjW9OkjeCs0YaooyooNpu6
TOMKu3GjVsqmKvgxk3cIztUouTC2+BC0iYANMUxRbZIiqLGWTsa6rBulSqm5Hpu8
R/LBY0gljpYLFDQJiuYRNvOOIUYEO3ubd8fKY8swLGLNi/LoNwtb+HoJ8szpDsXh
TIalQ0MEsdePvv0LCZ+0N55b1MaFJZieRuCMVPkbeJGWGzb4WVohn4jrsslaNC6y
eZxiXOnPS7EDyzLv2PL/zhedCEbC4A==
-----END PUBLIC KEY-----
]]></sourcecode>
        <t>Bob's id-MLKEM768-ECDH-P256-SHA3-256 public key has the following key identifier:</t>
        <sourcecode type="test-vectors"><![CDATA[
14F1D8FED21F6103676C752C97D0949537A96AB2
]]></sourcecode>
        <t>Alice generates a shared secret and ciphertext using Bob's id-MLKEM768-ECDH-P256-SHA3-256 public key:</t>
        <t>Shared secret:</t>
        <sourcecode type="test-vectors"><![CDATA[
9bd51d44ba390ff68176b763cee113007f112aac3c2ddbdde916e713762a389c
]]></sourcecode>
        <t>Ciphertext:</t>
        <sourcecode type="test-vectors"><![CDATA[
54b75c945ff83194fbf312214749b114bf6838878b49403f5235be774ae6719d
90531da9ab013a0f8a81dbd6510592f5fbcbe3b1bcf393793f517e758bbdd104
67c1a72b14165233e386ea6b027e482824d33244cc7f810bf7d21cd28e007c84
19087698be0dd7934653f35c8b0164c218dcbcbe28302a813e47a334c9565349
0cf57602c798d63d393e9e6ebc219265aa6562632a618d4c3e4052b20c89f2f0
4ea45554673d1be8911f83ca4a20ce86b59cf0a8c964e5b04707875d56011d48
9291abf2370838dc608fe2e26e617d0ec2c2c643e51caf6716e64c2cc5a185c7
2770ec4185487589156bb47e414180c6cedeacd8dad07ffa9091441fdaced553
c482bd0c41d5b77649f0ed803d07d29682dc2c41d2047d18fddab96529b9f8a2
f0ddd5e4b302fffd8ccbec03d9917ffa6b8d249117146c58fd89a135a96ece67
0c58a559628a68012d4c9a43e5fffb427f0df30da745bb0e4eb334716bb82175
10467b8b58e1be54b30c857522654cbb5787813cb1b2fb957a725f51612187b5
8bb83353f8e56aa6af89c94edd656d92bf66913022fce8f85730617d8a166bbb
24515559915cc472435950bce8c25219fef507a6527a6a3920c2deada7732902
e2d2ae8c60bda518a65da66f93581b7e37042a10464675ab326f603be14e5b55
25634adeb956512a84fdb809af2f37d20a9fd23f67eca7741b49d5b7d74f947a
8b6dac68888b3e3802994c98cccb68c2a0e7927f15e5e7be1400983e22a4c9ef
2babdf244525adde3b4d91e778e21e2bd32c5221f5433f28390128eabf3b181b
85c2c1efd7fae946399bb8fe21de2aed0a3e72cab34d305509547df33a45d17d
013a3ac08f0db69dbff0bae5a4b9c15ee8bdc4e2525b49e6865aeb752051935f
8e2fb5daea912d118671102b8fb4675c3937b389a7c7068cb697b3798fffe9d6
e64156493bb808d067a3eac418a7bf5819e25a740c8349914e5008340c381a07
d870b14b9be9939d306bc702d46a58216df932d2bcb45a3f181bd84f4b9ba992
f3a5f12a5db615ae0598a9c432cf5c0095187a849a93ca0d2d7deedb2db1ced5
3c0d4ae5d2b37eb25e07992452e0188e2d72682f46f0167f0f6a680243eff2c4
b5fcf0235852f99defa4d535a479176fa3a22587511581b3649fe410e302ec1b
9061cb535c492ae57ac126cb49ea47de12a9097c5f8a869d84d4aae903f0bc6f
53a60514cebe02fdc9a204a6be2a66567d589fcbaca36565a3e02d10b16920ea
26b05c50be805d06ece3c9ee7db7eb207c33c1d4ac92ca294f1a0f8fac839fea
0389fae43384a2daa7a4c1f5e92d622f8eb37ac0c55eb9df8d9713de03a0ef8b
2d9306c8530f607d898ba88adb6ad982becd3b05cac32b7dfe767c826e5e8bdf
40120f1a49e84cd11c4c09b07c27591a6032b372a7bd468b09ece07ee6eca6e9
4559f14843dd9a97931e0c06d105aa2237e67a3c128d33ab61dc47986fdafb79
7e60cb44453b4dfbcf7afdfe02f686c720fd65d5381827be62f3322acbc37213
0443d6690e3ae3b17f263f9345998ca26317f757b86d0ad41531b114f5d57fa8
2e5023e5176227d087f765e1421cef31be9c315866838017bb2aa58955bf52ce
6e
]]></sourcecode>
        <t>Alice encodes the CMSORIforKEMOtherInfo:</t>
        <sourcecode type="test-vectors"><![CDATA[
3010300b060960864801650304012d020120
]]></sourcecode>
        <t>Alice derives the key-encryption key from the shared secret and CMSORIforKEMOtherInfo using HKDF with SHA-256:</t>
        <sourcecode type="test-vectors"><![CDATA[
0555324e4703e672404e2272c555438bd7d04feac1321e05ebae6c0a2336d529
]]></sourcecode>
        <t>Alice randomly generates a 256-bit content-encryption key:</t>
        <sourcecode type="test-vectors"><![CDATA[
3424cef0cbc2b67f58351abd1e87b3507a11c90adef7e1cdab8d20b0331b8105
]]></sourcecode>
        <t>Alice uses AES-256-KEYWRAP to encrypt the content-encryption key with the key-encryption key:</t>
        <sourcecode type="test-vectors"><![CDATA[
5d13ae00d914a29158a8ef32b23ae5f27b8c293387e3be65fc3dfc19b99d8fdc
552527fd42154b37
]]></sourcecode>
        <t>Alice encrypts the padded content using AES-256-GCM with the content-encryption key and encodes the AuthEnvelopedData (using KEMRecipientInfo) and ContentInfo, and then sends the result to Bob.</t>
        <t>The Base64-encoded result is:</t>
        <sourcecode type="test-vectors"><![CDATA[
-----BEGIN CMS-----
MIIFcgYLKoZIhvcNAQkQARegggVhMIIFXQIBADGCBQikggUEBgsqhkiG9w0BCRAN
AzCCBPMCAQCAFBTx2P7SH2EDZ2x1LJfQlJU3qWqyMAoGCCsGAQUFBwY7BIIEgVS3
XJRf+DGU+/MSIUdJsRS/aDiHi0lAP1I1vndK5nGdkFMdqasBOg+KgdvWUQWS9fvL
47G885N5P1F+dYu90QRnwacrFBZSM+OG6msCfkgoJNMyRMx/gQv30hzSjgB8hBkI
dpi+DdeTRlPzXIsBZMIY3Ly+KDAqgT5HozTJVlNJDPV2AseY1j05Pp5uvCGSZapl
YmMqYY1MPkBSsgyJ8vBOpFVUZz0b6JEfg8pKIM6GtZzwqMlk5bBHB4ddVgEdSJKR
q/I3CDjcYI/i4m5hfQ7CwsZD5RyvZxbmTCzFoYXHJ3DsQYVIdYkVa7R+QUGAxs7e
rNja0H/6kJFEH9rO1VPEgr0MQdW3dknw7YA9B9KWgtwsQdIEfRj92rllKbn4ovDd
1eSzAv/9jMvsA9mRf/prjSSRFxRsWP2JoTWpbs5nDFilWWKKaAEtTJpD5f/7Qn8N
8w2nRbsOTrM0cWu4IXUQRnuLWOG+VLMMhXUiZUy7V4eBPLGy+5V6cl9RYSGHtYu4
M1P45Wqmr4nJTt1lbZK/ZpEwIvzo+FcwYX2KFmu7JFFVWZFcxHJDWVC86MJSGf71
B6ZSemo5IMLeradzKQLi0q6MYL2lGKZdpm+TWBt+NwQqEEZGdasyb2A74U5bVSVj
St65VlEqhP24Ca8vN9IKn9I/Z+yndBtJ1bfXT5R6i22saIiLPjgCmUyYzMtowqDn
kn8V5ee+FACYPiKkye8rq98kRSWt3jtNked44h4r0yxSIfVDPyg5ASjqvzsYG4XC
we/X+ulGOZu4/iHeKu0KPnLKs00wVQlUffM6RdF9ATo6wI8Ntp2/8LrlpLnBXui9
xOJSW0nmhlrrdSBRk1+OL7Xa6pEtEYZxECuPtGdcOTeziafHBoy2l7N5j//p1uZB
Vkk7uAjQZ6PqxBinv1gZ4lp0DINJkU5QCDQMOBoH2HCxS5vpk50wa8cC1GpYIW35
MtK8tFo/GBvYT0ubqZLzpfEqXbYVrgWYqcQyz1wAlRh6hJqTyg0tfe7bLbHO1TwN
SuXSs36yXgeZJFLgGI4tcmgvRvAWfw9qaAJD7/LEtfzwI1hS+Z3vpNU1pHkXb6Oi
JYdRFYGzZJ/kEOMC7BuQYctTXEkq5XrBJstJ6kfeEqkJfF+Khp2E1KrpA/C8b1Om
BRTOvgL9yaIEpr4qZlZ9WJ/LrKNlZaPgLRCxaSDqJrBcUL6AXQbs48nufbfrIHwz
wdSsksopTxoPj6yDn+oDifrkM4Si2qekwfXpLWIvjrN6wMVeud+NlxPeA6Dviy2T
BshTD2B9iYuoittq2YK+zTsFysMrff52fIJuXovfQBIPGknoTNEcTAmwfCdZGmAy
s3KnvUaLCezgfubspulFWfFIQ92al5MeDAbRBaoiN+Z6PBKNM6th3EeYb9r7eX5g
y0RFO037z3r9/gL2hscg/WXVOBgnvmLzMirLw3ITBEPWaQ4647F/Jj+TRZmMomMX
91e4bQrUFTGxFPXVf6guUCPlF2In0If3ZeFCHO8xvpwxWGaDgBe7KqWJVb9Szm4w
DQYLKoZIhvcNAQkQAxwCASAwCwYJYIZIAWUDBAEtBChdE64A2RSikVio7zKyOuXy
e4wpM4fjvmX8PfwZuZ2P3FUlJ/1CFUs3MDoGCSqGSIb3DQEHATAeBglghkgBZQME
AS4wEQQMhrwH+8PcSlmdkPPoAgEQgA0g+U8GH3sF+VsyV//ABBBfKmBjryzwX+Hi
l6KLp6sQ
-----END CMS-----
]]></sourcecode>
        <t>This result decodes to:</t>
        <sourcecode type="test-vectors"><![CDATA[
   0 1394: SEQUENCE {
   4   11:  OBJECT IDENTIFIER
         :   authEnvelopedData (1 2 840 113549 1 9 16 1 23)
  17 1377:  [0] {
  21 1373:   SEQUENCE {
  25    1:    INTEGER 0
  28 1288:    SET {
  32 1284:     [4] {
  36   11:      OBJECT IDENTIFIER '1 2 840 113549 1 9 16 13 3'
  49 1267:      SEQUENCE {
  53    1:       INTEGER 0
  56   20:       [0]
         :   14 F1 D8 FE D2 1F 61 03 67 6C 75 2C 97 D0 94 95
         :   37 A9 6A B2
  78   10:       SEQUENCE {
  80    8:        OBJECT IDENTIFIER '1 3 6 1 5 5 7 6 59'
         :         }
  90 1153:       OCTET STRING
         :   54 B7 5C 94 5F F8 31 94 FB F3 12 21 47 49 B1 14
         :   BF 68 38 87 8B 49 40 3F 52 35 BE 77 4A E6 71 9D
         :   90 53 1D A9 AB 01 3A 0F 8A 81 DB D6 51 05 92 F5
         :   FB CB E3 B1 BC F3 93 79 3F 51 7E 75 8B BD D1 04
         :   67 C1 A7 2B 14 16 52 33 E3 86 EA 6B 02 7E 48 28
         :   24 D3 32 44 CC 7F 81 0B F7 D2 1C D2 8E 00 7C 84
         :   19 08 76 98 BE 0D D7 93 46 53 F3 5C 8B 01 64 C2
         :   18 DC BC BE 28 30 2A 81 3E 47 A3 34 C9 56 53 49
         :   0C F5 76 02 C7 98 D6 3D 39 3E 9E 6E BC 21 92 65
         :   AA 65 62 63 2A 61 8D 4C 3E 40 52 B2 0C 89 F2 F0
         :   4E A4 55 54 67 3D 1B E8 91 1F 83 CA 4A 20 CE 86
         :   B5 9C F0 A8 C9 64 E5 B0 47 07 87 5D 56 01 1D 48
         :   92 91 AB F2 37 08 38 DC 60 8F E2 E2 6E 61 7D 0E
         :   C2 C2 C6 43 E5 1C AF 67 16 E6 4C 2C C5 A1 85 C7
         :   27 70 EC 41 85 48 75 89 15 6B B4 7E 41 41 80 C6
         :   CE DE AC D8 DA D0 7F FA 90 91 44 1F DA CE D5 53
         :   C4 82 BD 0C 41 D5 B7 76 49 F0 ED 80 3D 07 D2 96
         :   82 DC 2C 41 D2 04 7D 18 FD DA B9 65 29 B9 F8 A2
         :   F0 DD D5 E4 B3 02 FF FD 8C CB EC 03 D9 91 7F FA
         :   6B 8D 24 91 17 14 6C 58 FD 89 A1 35 A9 6E CE 67
         :   0C 58 A5 59 62 8A 68 01 2D 4C 9A 43 E5 FF FB 42
         :   7F 0D F3 0D A7 45 BB 0E 4E B3 34 71 6B B8 21 75
         :   10 46 7B 8B 58 E1 BE 54 B3 0C 85 75 22 65 4C BB
         :   57 87 81 3C B1 B2 FB 95 7A 72 5F 51 61 21 87 B5
         :   8B B8 33 53 F8 E5 6A A6 AF 89 C9 4E DD 65 6D 92
         :   BF 66 91 30 22 FC E8 F8 57 30 61 7D 8A 16 6B BB
         :   24 51 55 59 91 5C C4 72 43 59 50 BC E8 C2 52 19
         :   FE F5 07 A6 52 7A 6A 39 20 C2 DE AD A7 73 29 02
         :   E2 D2 AE 8C 60 BD A5 18 A6 5D A6 6F 93 58 1B 7E
         :   37 04 2A 10 46 46 75 AB 32 6F 60 3B E1 4E 5B 55
         :   25 63 4A DE B9 56 51 2A 84 FD B8 09 AF 2F 37 D2
         :   0A 9F D2 3F 67 EC A7 74 1B 49 D5 B7 D7 4F 94 7A
         :   8B 6D AC 68 88 8B 3E 38 02 99 4C 98 CC CB 68 C2
         :   A0 E7 92 7F 15 E5 E7 BE 14 00 98 3E 22 A4 C9 EF
         :   2B AB DF 24 45 25 AD DE 3B 4D 91 E7 78 E2 1E 2B
         :   D3 2C 52 21 F5 43 3F 28 39 01 28 EA BF 3B 18 1B
         :   85 C2 C1 EF D7 FA E9 46 39 9B B8 FE 21 DE 2A ED
         :   0A 3E 72 CA B3 4D 30 55 09 54 7D F3 3A 45 D1 7D
         :   01 3A 3A C0 8F 0D B6 9D BF F0 BA E5 A4 B9 C1 5E
         :   E8 BD C4 E2 52 5B 49 E6 86 5A EB 75 20 51 93 5F
         :   8E 2F B5 DA EA 91 2D 11 86 71 10 2B 8F B4 67 5C
         :   39 37 B3 89 A7 C7 06 8C B6 97 B3 79 8F FF E9 D6
         :   E6 41 56 49 3B B8 08 D0 67 A3 EA C4 18 A7 BF 58
         :   19 E2 5A 74 0C 83 49 91 4E 50 08 34 0C 38 1A 07
         :   D8 70 B1 4B 9B E9 93 9D 30 6B C7 02 D4 6A 58 21
         :   6D F9 32 D2 BC B4 5A 3F 18 1B D8 4F 4B 9B A9 92
         :   F3 A5 F1 2A 5D B6 15 AE 05 98 A9 C4 32 CF 5C 00
         :   95 18 7A 84 9A 93 CA 0D 2D 7D EE DB 2D B1 CE D5
         :   3C 0D 4A E5 D2 B3 7E B2 5E 07 99 24 52 E0 18 8E
         :   2D 72 68 2F 46 F0 16 7F 0F 6A 68 02 43 EF F2 C4
         :   B5 FC F0 23 58 52 F9 9D EF A4 D5 35 A4 79 17 6F
         :   A3 A2 25 87 51 15 81 B3 64 9F E4 10 E3 02 EC 1B
         :   90 61 CB 53 5C 49 2A E5 7A C1 26 CB 49 EA 47 DE
         :   12 A9 09 7C 5F 8A 86 9D 84 D4 AA E9 03 F0 BC 6F
         :   53 A6 05 14 CE BE 02 FD C9 A2 04 A6 BE 2A 66 56
         :   7D 58 9F CB AC A3 65 65 A3 E0 2D 10 B1 69 20 EA
         :   26 B0 5C 50 BE 80 5D 06 EC E3 C9 EE 7D B7 EB 20
         :   7C 33 C1 D4 AC 92 CA 29 4F 1A 0F 8F AC 83 9F EA
         :   03 89 FA E4 33 84 A2 DA A7 A4 C1 F5 E9 2D 62 2F
         :   8E B3 7A C0 C5 5E B9 DF 8D 97 13 DE 03 A0 EF 8B
         :   2D 93 06 C8 53 0F 60 7D 89 8B A8 8A DB 6A D9 82
         :   BE CD 3B 05 CA C3 2B 7D FE 76 7C 82 6E 5E 8B DF
         :   40 12 0F 1A 49 E8 4C D1 1C 4C 09 B0 7C 27 59 1A
         :   60 32 B3 72 A7 BD 46 8B 09 EC E0 7E E6 EC A6 E9
         :   45 59 F1 48 43 DD 9A 97 93 1E 0C 06 D1 05 AA 22
         :   37 E6 7A 3C 12 8D 33 AB 61 DC 47 98 6F DA FB 79
         :   7E 60 CB 44 45 3B 4D FB CF 7A FD FE 02 F6 86 C7
         :   20 FD 65 D5 38 18 27 BE 62 F3 32 2A CB C3 72 13
         :   04 43 D6 69 0E 3A E3 B1 7F 26 3F 93 45 99 8C A2
         :   63 17 F7 57 B8 6D 0A D4 15 31 B1 14 F5 D5 7F A8
         :   2E 50 23 E5 17 62 27 D0 87 F7 65 E1 42 1C EF 31
         :   BE 9C 31 58 66 83 80 17 BB 2A A5 89 55 BF 52 CE
         :   6E
1247   13:       SEQUENCE {
1249   11:        OBJECT IDENTIFIER
         :         hkdfWithSha256 (1 2 840 113549 1 9 16 3 28)
         :         }
1262    1:       INTEGER 32
1265   11:       SEQUENCE {
1267    9:        OBJECT IDENTIFIER
         :         aes256-wrap (2 16 840 1 101 3 4 1 45)
         :         }
1278   40:       OCTET STRING
         :   5D 13 AE 00 D9 14 A2 91 58 A8 EF 32 B2 3A E5 F2
         :   7B 8C 29 33 87 E3 BE 65 FC 3D FC 19 B9 9D 8F DC
         :   55 25 27 FD 42 15 4B 37
         :        }
         :       }
         :      }
1320   58:    SEQUENCE {
1322    9:     OBJECT IDENTIFIER data (1 2 840 113549 1 7 1)
1333   30:     SEQUENCE {
1335    9:      OBJECT IDENTIFIER
         :       aes256-GCM (2 16 840 1 101 3 4 1 46)
1346   17:      SEQUENCE {
1348   12:       OCTET STRING 86 BC 07 FB C3 DC 4A 59 9D 90 F3 E8
1362    1:       INTEGER 16
         :        }
         :       }
1365   13:     [0] 20 F9 4F 06 1F 7B 05 F9 5B 32 57 FF C0
         :      }
1380   16:    OCTET STRING
         :   5F 2A 60 63 AF 2C F0 5F E1 E2 97 A2 8B A7 AB 10
         :     }
         :    }
         :   }
]]></sourcecode>
      </section>
      <section anchor="recipient-cms-processing">
        <name>Recipient CMS Processing</name>
        <t>Bob's id-MLKEM768-ECDH-P256-SHA3-256 private key:</t>
        <sourcecode type="test-vectors"><![CDATA[
-----BEGIN PRIVATE KEY-----
MIGEAgEAMAoGCCsGAQUFBwY7BHOImiTrgVkiRNnS3EmMdxHUrh+EHeflRSSQaMrG
7NAvf0DDSVt58hvzJz/RuCOE4/8REOs/DZVr5gWO2jOyldClMDECAQEEIM/ctKyh
CrQyBNhBbpwS5ZkEO1mklf14j5NRtwj3obB+oAoGCCqGSM49AwEH
-----END PRIVATE KEY-----
]]></sourcecode>
        <t>Bob decapsulates the ciphertext in the KEMRecipientInfo to get the MLKEM768-ECDH-P256-SHA3-256 shared secret, encodes the CMSORIforKEMOtherInfo, derives the key-encryption key from the shared secret and the DER-encoded CMSORIforKEMOtherInfo using HKDF with SHA-256, uses AES-256-KEYWRAP to decrypt the content-encryption key with the key-encryption key, and decrypts the encrypted contents with the content-encryption key, revealing the plaintext content:</t>
        <sourcecode type="test-vectors"><![CDATA[
Hello, world!
]]></sourcecode>
      </section>
    </section>
    <section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This document borrows heavily from <xref target="RFC9690"/> and <xref target="RFC9936"/>.
Thanks go to the authors of those documents.
"Copying always makes things easier and less error prone" - RFC8411.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
W/d5pOXQ0DO/KNSr1ZL1mrvL9/txvl8q59tepblsFvLNau41SVYDNo79j7de
Sa837saFeL6K8s7E60TGysrpuaUwL3ZflNzSXz2+FB4nFaOjJC1pMXoqNPqj
NzO/uGn3yka+6Ubns975y/i2O0lW8rPTvZuvAmu1VIXF+yqWu14pTp6lWEnk
fjCNy4Pn2n270Yja/vnzQ9jo5Zi/6OVZu3Jb6982o49StXwXLm/chTcXfN9T
3iYPlbfGo9Ttvpb1dlS6HnnL/mL6PH2JkpsOa/WeB2PLHBT89u3IX+aN1su4
//7yFqzYQBIWT0n+/K6yPH+q3TrNvqssZqPzxtgd697qftHs31Rnq/d21fEH
TSu8KVXn7vPHnT9qesVK2JLfSsKoENYbyahw3qt4I636qnTz7f4qqFWmS+V1
6qvvt++rt9fyC2OVuB/6Qcd/6MzuV2/3bqFyk9RuhGqvfPtxPbAXb+y8qzeM
xe34pl4u9G5mc6nQDT/06d11h01fH+9ewsfBs/8hD+25VXmMtDd1YHVvhPqk
fRd1b9/U8rul3Y2u+4P7xvtT/vpaWZ4712x4M7//uLPa7uqx+jZWOt2bYfPV
lge5aaFekWb1iVCV3qPS2/iaLSP1/SWn12/vX0p+dTiOGue+HtSWD6P75k1X
6j0+xHHhMbeYzd60m1W3XM/fq4uKL7xV2q2F8lLzzxv9149xp7701PmkPdDu
qk/5ZNq4Ox/d9lf3utl2io+zh7frVfT0Oljqz+3R89gbukJjXmW912mj+BY0
3svd+Uf40F6+tI2H1vjaUGev3vvKntdn70t92Vu9Bbnh6uXhzu/V7n2vntw+
lAXrqSTFxvus0I4byfjx421wJw8Xzfu2V+2NXkrRZNXQ5k9+ecnKy6fquH/d
6N4Z7Xvv9S40wjarCpVxuFLcO/e+2o+r7mB133y5lx3/ehGXz/1h/iNusVAH
+m/ytbI+eH6Ibr32+WDcV72HpCPfMeHJ8edlfyDdP7UarXrYiwuj2sd1ue4H
nvvhMuXd7z7dvBUSv5q/e684/Z46lW6u571H+XE5YOVYKN7e5YvPeefl/aG5
7Ly1ZKNutqvNXmTl3thTr9mud99zfiH3bjY6Wnc2e3Hbxfh1+Sq/FV71WtsW
oB9tcT9uJI9Dp8faLalWMILrW30xKoHDubS4n/f7w7dx0XfuWst3Ve82w/fX
ZWkZLtlTP5QF1fUnhjVdadcPD8+t5dPNi1McOMP7efziNUr3tjxZDmO/IqnF
sbvKj6rxclktjPr15WDcdbuVV6H+NlJGhVardP2Rv80tavYoKLZUxMNSPS+F
hZexMVOqQa5hNmrNZZnlm/fR+O3dWyRSc+i/lyuCXBlKg4dSmGi1G++VXctx
PvdkhUq1z4wbKff2rDP7SWne3Lw+lBsfUd2qO4tIn8XPpWHiTNyK4NyOp7mi
92Qt31+LrcHb+UOezQaPkV4dSk7tUTbeKs/Xr7kno9OMp6wTuc2w+9yYFGvl
x6pq1QPBe7md37h55zXPlP6y7fZ86FVio9gM6vMb32w286q+6N+Yb2/SqN/s
mzUvb8UP/ac8u6klt1MhV+kqT73n0V250whZNdIb3Y4/fGoMq9HNqvzyeG/7
jfule1eUCs+z9/fRq+rdTbVcuXzjfxR60Uxwy9VgELXb79XkZeC2muXCy93r
rNQ+v3+YvLYb8koq2fPVWG6YL6+PdnP4ygqJ9OxE0SqKGtO5IfSa9bu5Wnl9
SN7Gd4v++1D1qh+z+2jeKyjn+YIUPuca9fv3jvtSDd9qlcde4hhxfj7qvo31
m+ncEjrXtfyz1B+9Tp9r5WL7Npw/dxqLZrN6/1xqqnPXt4K7ZytZ1iq1Rnhd
ixrLmXt+E91ayce0mDwNhF7VGbWleinxWWuxAA5fzqWGrrty3SnfvoSsMy/U
H1pDl91WHisfrvb4EA0m2mucJCOnUTBWAnt5D5+ak1bXLBVXH7WF0qpdfwyY
Xyi5BS3317+mUQ2J11FM42nYHwybfKNs/4k2nktsKsen4qqsleWiVS4VFbls
yJJqmEbB1JWCbRYlW7N11czZRi6vpBSlYX29EfyjraUsVfrj0b+7O+gpqm3X
12Vf01xHtaUgMCzZNFzTUD3GZFmVJDOQZcVxPNVTfN/1fWbLBjNl1TQUR7Vs
L+WmsKH01By65pq6Z2t6EFiqbGuBG6iyosiaqdmuLGsuplUty7RczdYkNdAV
VXeZaWoOM0zZ9gVb0lXZd2zHlWTVkQLLsWQQY+iypNtKoAeu5zLVlV0vUG3V
tDGEbDJTt1xQLEuaYJie7JiKK2uygdFVploGcwxXUkymWYqlaL6qKprmeWZg
yZIbmL4ie75iMUjAszRBtiXLNGzLZZLvYwLN0NVA1T0LFBmap8iW7xERiqVK
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
xRflXa7dBu3R7b369vi2queiSqGQVHLt+3J++Wzmq9VS/6GrCk+3neC8WLk/
v653q/f+bdLpXjvF8CaURrmWXJUXE/9On1T8YbnuvzlJvtk/v+v7i8f79mPX
DhY1QTMrlqU39JZcPvef57bU7kyWjheX8y/d+nmzYoyTQjDsR7eN+qpTf7/u
txeqNPjovvbz1iA/rAr+NDwv+qzXGbU+nqpJ/qVefVZrq/O7Yu6t39Nvoo/e
7cOocVtsPSi5hD3Lr5LemurzRaHSfXGmI+F5XH97fpbrrWG+m/RXt9Yi35yW
H+5fPiTXuC0FfWt6V60bldnLx/KtPhrqbv4mr/n+Q7/kd2/vOsLbdVUtFF+9
5+p1qI31QdA2C8vkpah3VouXd3fcK3yUo+enm1u1mLSfH6r+8/DBMTvn7ftK
7j0xmRA3Xh3p5toY3pZLN3bclB9apX4s1dv+o+oPJ0vzOWfn7bvH/myZtP1q
Kei82ko8Gt25Ey1aFH1BZt2P3OLafq0vkpw97gTX0/i12+2U3zvJY0u5jXqP
UzfRJ8VyOHp8vLtzcqVZ73Za1INrsz2xGoK1VCYdN2n24rrkPc616tM99DCv
PTYr5w+1en3wdB++3K/MB43lW7XK6lx/MLyR3XnuVm5mz3NNqMstTX98G8fa
5LY3k0fuy931y7S0rC4+ovOyt3x+Uu7K47l5Wy4/PL6Uvfeb2+LjQ8Ey6rfd
SmDKQt546bJxpFfrNThJ/+OuXQulN6P+XFNGlbsXfzo+7z3mZ+eNZfutVHqp
+E6ycpWcqd3r7kP34VXozgz9YVR6G7QUreBYi4ZdvZvY1euX89XEz89uZTd4
6ukdI1SUxKmGtdZrvzC+Xz1/1GfR8q04EYYT6wGJ8Xk5V3huhXfDFbPiN9sa
drqPM/V11hgyX9MGWiyt3rvV4KHYWvX1XPf1bfGRPFe0p4KwZNdP5/NRpfky
167DG3Y3l+5ak9pdIknLh/boPgjqRscv27leZCyrVmM2Va6tWjya1ib5p3lo
C+/N2+6jNBkPRnHsd/OdoXzerJlPjjEtzUrPL++lwrw1q/hes8c+Qie4yUcr
ZWQ29Nfr66k8f8kLD8OhOc+9tl+M1tt7Ppws5P6LNppKxWrjdnivtwvFdr2Z
j26Um8J7V19Mh7q0xIq8IFemz9VHVRfqsztrVo6uK/nFc0+au28vtY9pUHp7
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

-->

</rfc>
