<?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.24 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-lamps-pq-composite-sigs-04" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title abbrev="Composite ML-DSA">Composite ML-DSA for use in X.509 Public Key Infrastructure and CMS</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-pq-composite-sigs-04"/>
    <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="M." surname="Pala" fullname="Massimiliano Pala">
      <organization>OpenCA Labs</organization>
      <address>
        <postal>
          <city>New York City, New York</city>
          <country>United States of America</country>
        </postal>
        <email>director@openca.org</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>
    <author initials="S." surname="Fluhrer" fullname="Scott Fluhrer">
      <organization>Cisco Systems</organization>
      <address>
        <email>sfluhrer@cisco.com</email>
      </address>
    </author>
    <date year="2025" month="March" day="03"/>
    <area>Security</area>
    <workgroup>LAMPS</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 157?>

<t>This document defines combinations of ML-DSA <xref target="FIPS.204"/> in hybrid with traditional algorithms RSASSA-PKCS1-v1_5, RSASSA-PSS, ECDSA, Ed25519, and Ed448. These combinations are tailored to meet security best practices and regulatory requirements. Composite ML-DSA is applicable in any application that uses X.509, PKIX, and CMS data structures and protocols that accept ML-DSA, but where the operator wants extra protection against breaks or catastrophic bugs in ML-DSA.</t>
      <!-- End of Abstract -->



    </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/draft-composite-sigs/draft-ietf-lamps-pq-composite-sigs.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-lamps-pq-composite-sigs/"/>.
      </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/draft-composite-sigs"/>.</t>
    </note>
  </front>
  <middle>
    <?line 164?>

<section anchor="changes-in-04">
      <name>Changes in -04</name>
      <t>Interop-affecting changes:</t>
      <ul spacing="normal">
        <li>
          <t>Remove the ASN.1 SEQUENCE Wrapping around the Public Keys, Private Keys and Composite Signature Value</t>
        </li>
        <li>
          <t>Added a prefix into the message format to allow traditional verifiers to detect if a composite signature has been stripped</t>
        </li>
        <li>
          <t>Added a fixed 4-byte length value to identify the length of the first ML-DSA component so keys and signatures can be separated</t>
        </li>
        <li>
          <t>Issued new prototype OIDs for testing purposes since the above changes break backwards compatiblity with version -03</t>
        </li>
        <li>
          <t>Added support for a MLDSA65-ECDSA-P256 combination because P256 is a widely supported EC algorithm</t>
        </li>
        <li>
          <t>Added support for a MLDSA87-RSA4096-PSS combination at the request of Microsoft and because we want a RSA combination complaint with CNSA 2.0</t>
        </li>
        <li>
          <t>When used in CMS, all composite combinations make use of the SHA-512 digest algorithm</t>
        </li>
      </ul>
      <t>Editorial changes:
* Added normative language to make it clear that key reuse is prohibited
* Updated the security considerations section
* Added Message format examples
* Additional editing changes as needed</t>
    </section>
    <section anchor="sec-intro">
      <name>Introduction</name>
      <t>The advent of quantum computing poses a significant threat to current cryptographic systems. Traditional cryptographic algorithms such as RSA, Diffie-Hellman, DSA, and their elliptic curve variants are vulnerable to quantum attacks. During the transition to post-quantum cryptography (PQC), there is considerable uncertainty regarding the robustness of both existing and new cryptographic algorithms. While we can no longer fully trust traditional cryptography, we also cannot immediately place complete trust in post-quantum replacements until they have undergone extensive scrutiny and real-world testing to uncover and rectify potential implementation flaws.</t>
      <t>Unlike previous migrations between cryptographic algorithms, the decision of when to migrate and which algorithms to adopt is far from straightforward. Even after the migration period, it may be advantageous for an entity's cryptographic identity to incorporate multiple public-key algorithms to enhance security.</t>
      <t>Cautious implementers may opt to combine cryptographic algorithms in such a way that an attacker would need to break all of them simultaneously to compromise the protected data. These mechanisms are referred to as Post-Quantum/Traditional (PQ/T) Hybrids <xref target="I-D.ietf-pquip-pqt-hybrid-terminology"/>.</t>
      <t>Certain jurisdictions are already recommending or mandating that PQC lattice schemes be used exclusively within a PQ/T hybrid framework. The use of Composite scheme provides a straightforward implementation of hybrid solutions compatible with (and advocated by) some governments and cybersecurity agencies <xref target="BSI2021"/>.</t>
      <t>Composite ML-DSA is applicable in any application that would otherwise use ML-DSA, but wants the protection against breaks or catastrophic bugs in ML-DSA.</t>
      <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>
        <t>This document is consistent with the terminology defined in <xref target="I-D.ietf-pquip-pqt-hybrid-terminology"/>. In addition, the following terminology is used throughout this document:</t>
        <t><strong>ALGORITHM</strong>:
          The usage of the term "algorithm" within this
          document generally refers to any function which
          has a registered Object Identifier (OID) for
          use within an ASN.1 AlgorithmIdentifier. This
          loosely, but not precisely, aligns with the
          definitions of "cryptographic algorithm" and
          "cryptographic scheme" given in <xref target="I-D.ietf-pquip-pqt-hybrid-terminology"/>.</t>
        <t><strong>BER</strong>:
          Basic Encoding Rules (BER) as defined in <xref target="X.690"/>.</t>
        <t><strong>CLIENT</strong>:
          Any software that is making use of a cryptographic key.
          This includes a signer, verifier, encrypter, decrypter.
          This is not meant to imply any sort of client-server
          relationship between the communicating parties.</t>
        <t><strong>DER</strong>:
          Distinguished Encoding Rules as defined in <xref target="X.690"/>.</t>
        <t><strong>PKI</strong>:
          Public Key Infrastructure, as defined in <xref target="RFC5280"/>.</t>
        <t><strong>PUBLIC / PRIVATE KEY</strong>:
          The public and private portion of an asymmetric cryptographic
          key, making no assumptions about which algorithm.</t>
        <t><strong>SIGNATURE</strong>:
          A digital cryptographic signature, making no assumptions
            about which algorithm.</t>
      </section>
      <section anchor="composite-design-philosophy">
        <name>Composite Design Philosophy</name>
        <t><xref target="I-D.ietf-pquip-pqt-hybrid-terminology"/> defines composites as:</t>
        <ul empty="true">
          <li>
            <t><em>Composite Cryptographic Element</em>:  A cryptographic element that
     incorporates multiple component cryptographic elements of the same
     type in a multi-algorithm scheme.</t>
          </li>
        </ul>
        <t>Composite keys, as defined here, follow this definition and should be regarded as a single key that performs a single cryptographic operation such as key generation, signing, verifying, encapsulating, or decapsulating -- using its internal sequence of component keys as if they form a single key. This generally means that the complexity of combining algorithms can and should be handled by the cryptographic library or cryptographic module, and the single composite public key, private key, ciphertext and signature can be carried in existing fields in protocols such as PKCS#10 <xref target="RFC2986"/>, CMP <xref target="RFC4210"/>, X.509 <xref target="RFC5280"/>, CMS <xref target="RFC5652"/>, and the Trust Anchor Format <xref target="RFC5914"/>. In this way, composites achieve "protocol backwards-compatibility" in that they will drop cleanly into any protocol that accepts an analogous single-algorithm cryptographic scheme without requiring any modification of the protocol to handle multiple algorithms.</t>
      </section>
    </section>
    <section anchor="overview-of-the-composite-ml-dsa-signature-scheme">
      <name>Overview of the Composite ML-DSA Signature Scheme</name>
      <t>Composite schemes are defined as cryptographic primitives that consist of three algorithms:</t>
      <ul spacing="normal">
        <li>
          <t><tt>KeyGen() -&gt; (pk, sk)</tt>: A probabilistic key generation algorithm,
which generates a public key pk and a secret key sk.</t>
        </li>
        <li>
          <t><tt>Sign(sk, Message) -&gt; (signature)</tt>: A signing algorithm which takes
as input a secret key sk and a Message, and outputs a signature</t>
        </li>
        <li>
          <t><tt>Verify(pk, Message, signature) -&gt; true or false</tt>: A verification algorithm
which takes as input a public key, a Message, and a signature and outputs true
if the signature verifies correctly.  Thus it proves the Message was signed
with the secret key associated with the public key and verifies the integrity
of the Message.  If the signature and public key cannot verify the Message,
it returns false.</t>
        </li>
      </ul>
      <t>We define the following algorithms which we use to serialize and deserialize the public and private keys</t>
      <ul spacing="normal">
        <li>
          <t><tt>SerializeKey(key) -&gt; bytes</tt>: Produce a byte string encoding the public or private key.</t>
        </li>
        <li>
          <t><tt>DeserializeKey(bytes) -&gt; pk</tt>: Parse a byte string to recover a public or private key. This function can fail if the input byte string is malformed.</t>
        </li>
      </ul>
      <t>We define the following algorithms which are used to serialize and deseralize the composite signature value</t>
      <ul spacing="normal">
        <li>
          <t><tt>SerializeSignatureValue(CompositeSignatureValue) -&gt; bytes</tt>: Produce a byte string encoding the CompositeSignatureValue.</t>
        </li>
        <li>
          <t><tt>DeserializeSignatureValue(bytes) -&gt; pk</tt>: Parse a byte string to recover a CompositeSignatureValue. This function can fail if the input byte string is malformed.</t>
        </li>
      </ul>
      <t>A composite signature allows the security properties of the two underlying algorithms to be combined via standard signature operations <tt>Sign()</tt> and <tt>Verify()</tt>.</t>
      <t>This specification uses the Post-Quantum signature scheme ML-DSA as specified in <xref target="FIPS.204"/> and <xref target="I-D.ietf-lamps-dilithium-certificates"/>. For Traditional signature schemes, this document uses the RSASSA-PKCS1-v1_5 and RSASSA-PSS algorithms defined in <xref target="RFC8017"/>, the Elliptic Curve Digital Signature Algorithm ECDSA scheme defined in section 6 of <xref target="FIPS.186-5"/>, and Ed25519 / Ed448 which are defined in <xref target="RFC8410"/>. A simple "signature combiner"function which prepends a domain separator value specific to the composite algorithm is used to bind the two component signatures to the composite algorithm and achieve weak non-separability.</t>
      <section anchor="pure-vs-pre-hashed-modes">
        <name>Pure vs Pre-hashed modes</name>
        <t>In <xref target="FIPS.204"/> NIST defined ML-DSA to have both pure and pre-hashed signing modes, referred to as "ML-DSA" and "HashML-DSA" respectively. Following this, this document defines "Composite-ML-DSA" and "HashComposite-ML-DSA" which mirror the external functions defined in <xref target="FIPS.204"/>.</t>
      </section>
    </section>
    <section anchor="sec-sigs">
      <name>Composite ML-DSA Functions</name>
      <section anchor="key-generation">
        <name>Key Generation</name>
        <t>To generate a new keypair for Composite schemes, the <tt>KeyGen() -&gt; (pk, sk)</tt> function is used. The KeyGen() function calls the two key generation functions of the component algorithms for the Composite keypair in no particular order. Multi-process or multi-threaded applications might choose to execute the key generation functions in parallel for better key generation performance.</t>
        <t>The following process is used to generate composite keypair values:</t>
        <figure anchor="alg-composite-keygen">
          <name>Composite KeyGen(pk, sk)</name>
          <artwork><![CDATA[
KeyGen() -> (pk, sk)

Explicit inputs:

  None

Implicit inputs:

  ML-DSA     A placeholder for the specific ML-DSA algorithm and
             parameter set to use, for example, could be "ML-DSA-65".

  Trad       A placeholder for the specific traditional algorithm and
             parameter set to use, for example "RSASSA-PSS"
             or "Ed25519".

Output:

  (pk, sk)   The composite keypair.

Key Generation Process:

  1. Generate component keys

      (mldsaPK, mldsaSK) = ML-DSA.KeyGen()
      (tradPK, tradSK)   = Trad.KeyGen()

  2. Check for component key gen failure

      if NOT (mldsaPK, mldsaSK) or NOT (tradPK, tradSK):
        output "Key generation error"

  3. Encode the component keys into composite structures

      pk = CompositeSignaturePublicKey(mldsaPK, tradPK)
      sk = CompositeSignaturePrivateKey(mldsaSK, tradSK)

  4. Output the composite keys

      return (pk, sk)

]]></artwork>
        </figure>
        <t>The structures CompositeSignaturePublicKey and CompositeSignaturePrivateKey are described in <xref target="sec-composite-pub-keys"/> and <xref target="sec-priv-key"/> respectively and are used here as placeholders since implementations MAY use their own internal key representations in cases where interoperability is not required.</t>
        <t>In order to ensure fresh keys, the key generation functions MUST be executed for both component algorithms. Compliant parties MUST NOT use, import or export component keys that are used in other contexts, combinations, or by themselves as keys for standalone algorithm use. For more details on the security considerations around key reuse, see section <xref target="sec-cons-key-reuse"/>.</t>
        <t>Note that in step 2 above, both component key generation processes are invoked, and no indication is given about which one failed. This SHOULD be done in a timing-invariant way to prevent side-channel attackers from learning which component algorithm failed.</t>
      </section>
      <section anchor="sec-comp-sig-gen">
        <name>Pure Signature Mode</name>
        <t>This mode mirrors <tt>ML-DSA</tt> defined in Sections 5.2 and 5.3 of <xref target="FIPS.204"/>.</t>
        <t>In the pure mode the Domain separator value is concatenated with the length of the context in bytes, the context, and the message to be signed.  After that, the signature process for each component algorithm is invoked and the values are then placed in the CompositeSignatureValue structure defined in <xref target="sec-composite-sig-structs"/>.</t>
        <t>A composite signature's value MUST include two signature components and MUST be in the same order as the components from the corresponding signing key.</t>
        <section anchor="composite-ml-dsasign">
          <name>Composite-ML-DSA.Sign</name>
          <t>This mode mirrors <tt>ML-DSA.Sign(sk, M, ctx)</tt> defined in Algorithm 2 in Section 5.2 of <xref target="FIPS.204"/>.</t>
          <figure>
            <name>Composite-ML-DSA.Sign(sk, M, ctx)</name>
            <artwork><![CDATA[
Composite-ML-DSA.Sign (sk, M, ctx) -> (signature)

Explicit inputs:

  sk    Composite private key consisting of signing private keys for
        each component.

  M     The Message to be signed, an octet string.

  ctx   The Message context string used in the composite signature
        combiner, which defaults to the empty string.



Implicit inputs:

  ML-DSA   A placeholder for the specific ML-DSA algorithm and
           parameter set to use, for example, could be "ML-DSA-65".

  Trad     A placeholder for the specific traditional algorithm and
           parameter set to use, for example "RSASSA-PSS with id-sha256"
           or "Ed25519".

  Domain   Domain separator value for binding the signature to the
           Composite OID. See section on Domain Separators below.

  Prefix   The prefix String which is the byte encoding of the String
           "CompositeAlgorithmSignatures2025" which in hex is
           436F6D706F73697465416C676F726974686D5369676E61747572657332303235

Output:

  signature   The composite signature, a CompositeSignatureValue.

Signature Generation Process:

  1. If len(ctx) > 255:
      return error

  2. Compute the Message M'.

      M' = Prefix || Domain || len(ctx) || ctx || M

  3. Separate the private key into component keys.

      (mldsaSK, tradSK) = sk

  4. Generate the 2 component signatures independently, by calculating
     the signature over M' according to their algorithm specifications.

      mldsaSig = ML-DSA.Sign( mldsaSK, M', ctx=Domain )
      tradSig = Trad.Sign( tradSK, M' )

  5. If either ML-DSA.Sign() or Trad.Sign() return an error, then this
     process must return an error.

      if NOT mldsaSig or NOT tradSig:
        output "Signature generation error"

   6. Encode each component signature into a CompositeSignatureValue.

      signature = CompositeSignatureValue(mldsaSig, tradSig)

  7. Output signature

      return signature
]]></artwork>
          </figure>
          <t>It is possible to use component private keys stored in separate software or hardware keystores. Variations in the process to accommodate particular private key storage mechanisms are considered to be conformant to this document so long as it produces the same output and error handling as the process sketched above.</t>
          <t>Note that in step 5 above, both component signature processes are invoked, and no indication is given about which one failed. This SHOULD be done in a timing-invariant way to prevent side-channel attackers from learning which component algorithm failed.</t>
          <t>Note that there are two different context strings <tt>ctx</tt> here: the first is the application context that is passed in to <tt>Composite-ML-DSA.Sign</tt> and bound to the composite signature combiner. The second is the <tt>ctx</tt> that is passed down into the underlying <tt>ML-DSA.Sign</tt> and here Composite-ML-DSA itself is the application that we wish to bind, and outer <tt>ctx</tt> is already contained within the <tt>M'</tt> message.</t>
        </section>
        <section anchor="sec-comp-sig-verify">
          <name>Composite-ML-DSA.Verify</name>
          <t>This mode mirrors <tt>ML-DSA.Verify(pk, M, signature, ctx)</tt> defined in Algorithm 3 in Section 5.3 of <xref target="FIPS.204"/>.</t>
          <t>Compliant applications MUST output "Valid signature" (true) if and only if all component signatures were successfully validated, and "Invalid signature" (false) otherwise.</t>
          <figure anchor="alg-composite-verify">
            <name>Composite-ML-DSA.Verify(pk, Message, signature, Context)</name>
            <artwork><![CDATA[
Composite-ML-DSA.Verify(pk, M, signature, ctx)

Explicit inputs:

  pk          Composite public key consisting of verification public keys
              for each component.

  M           Message whose signature is to be verified,
              an octet string.

  signature   CompositeSignatureValue containing the component
              signature values (mldsaSig and tradSig) to be verified.

  ctx         The Message context string used in the composite signature
              combiner, which defaults to the empty string.

Implicit inputs:

  ML-DSA   A placeholder for the specific ML-DSA algorithm and
           parameter set to use, for example, could be "ML-DSA-65".

  Trad     A placeholder for the specific traditional algorithm and
           parameter set to use, for example "RSASSA-PSS with id-sha256"
           or "Ed25519".

  Domain   Domain separator value for binding the signature to the
           Composite OID. See section on Domain Separators below.

  Prefix   The prefix String which is the byte encoding of the String
           "CompositeAlgorithmSignatures2025" which in hex is
           436F6D706F73697465416C676F726974686D5369676E61747572657332303235


Output:
    Validity (bool)    "Valid signature" (true) if the composite
                        signature is valid, "Invalid signature"
                        (false) otherwise.

Signature Verification Process:

  1. If len(ctx) > 255
      return error

  2. Separate the keys and signatures

        (pk1, pk2) = pk
        (s1, s2)   = signature

    If Error during Desequencing, or if any of the component
    keys or signature values are not of the correct key type or
    length for the given component algorithm then output
    "Invalid signature" and stop.

  3. Compute the Message M'.

        M' = Prefix || Domain || len(ctx) || ctx || M

  4. Check each component signature individually, according to its
     algorithm specification.
     If any fail, then the entire signature validation fails.

        if not ML-DSA.Verify( pk1, M', s1, ctx=Domain) then
          output "Invalid signature"

        if not Trad.Verify( pk2, M', s2) then
          output "Invalid signature"

        if all succeeded, then
          output "Valid signature"
]]></artwork>
          </figure>
          <t>Note that in step 4 above, the function fails early if the first component fails to verify. Since no private keys are involved in a signature verification, there are no timing attacks to consider, so this is ok.</t>
        </section>
      </section>
      <section anchor="sec-comp-sig-gen-prehash">
        <name>PreHash-Signature Mode</name>
        <t>This mode mirrors <tt>HashML-DSA</tt> defined in Section 5.4 of <xref target="FIPS.204"/>.</t>
        <t>In the pre-hash mode the Domain separator <xref target="sec-domsep-values"/> is concatenated with the length of the context in bytes, the context, an additional DER encoded value that represents the OID of the Hash function and finally the hash of the message to be signed.  After that, the signature process for each component algorithm is invoked and the values are then placed in the CompositeSignatureValue structure defined in <xref target="sec-composite-sig-structs"/>.</t>
        <t>A composite signature's value MUST include two signature components and MUST be in the same order as the components from the corresponding signing key.</t>
        <t>Note that there are two different context strings <tt>ctx</tt> here: the first is the application context that is passed in to <tt>Composite-ML-DSA.Sign</tt> and bound to the composite signature combiner. The second is the <tt>ctx</tt> that is passed down into the underlying <tt>ML-DSA.Sign</tt> and here Composite-ML-DSA itself is the application that we wish to bind, and outer <tt>ctx</tt> is already contained within the <tt>M'</tt> message.</t>
        <section anchor="sec-hash-comp-sig-sign">
          <name>HashComposite-ML-DSA-Sign signature mode</name>
          <t>This mode mirrors <tt>HashML-DSA.Sign(sk, M, ctx, PH)</tt> defined in Algorithm 4 Section 5.4.1 of <xref target="FIPS.204"/>.</t>
          <t>In the pre-hash mode the Domain separator (see <xref target="sec-domsep-values"/>) is concatenated with the length of the context in bytes, the context, an additional DER encoded value that indicates which Hash function was used for the pre-hash and finally the pre-hashed message <tt>PH(M)</tt>.</t>
          <figure anchor="alg-hash-composite-sign">
            <name>HashComposite-ML-DSA.Sign(sk, M, ctx, PH)</name>
            <artwork><![CDATA[
HashComposite-ML-DSA.Sign (sk, M, ctx, PH) -> (signature)

Explicit inputs:

  sk    Composite private key consisting of signing private keys for
        each component.

  M     The Message to be signed, an octet string.

  ctx   The Message context string used in the composite signature
        combiner, which defaults to the empty string.

  PH    The Message Digest Algorithm for pre-hashing.  See
        section on pre-hashing the message below.

Implicit inputs:

  ML-DSA   A placeholder for the specific ML-DSA algorithm and
           parameter set to use, for example, could be "ML-DSA-65".

  Trad     A placeholder for the specific traditional algorithm and
           parameter set to use, for example "RSASSA-PSS with id-sha256"
           or "Ed25519".

 Prefix    The prefix String which is the byte encoding of the String
           "CompositeAlgorithmSignatures2025" which in hex is
           436F6D706F73697465416C676F726974686D5369676E61747572657332303235

 Domain    Domain separator value for binding the signature to the
           Composite OID. See section on Domain Separators below.

 HashOID   The DER Encoding of the Object Identifier of the
           PreHash algorithm (PH) which is passed into the function.

Output:
  signature   The composite signature, a CompositeSignatureValue.

Signature Generation Process:

  1. If len(ctx) > 255:
      return error

  2. Compute the Message format M'.

        M' :=  Prefix || Domain || len(ctx) || ctx || HashOID || PH(M)

  3. Separate the private key into component keys.

       (mldsaSK, tradSK) = sk

  4. Generate the 2 component signatures independently, by calculating
     the signature over M' according to their algorithm specifications.

       mldsaSig = ML-DSA.Sign( mldsaSK, M', ctx=Domain )
       tradSig = Trad.Sign( tradSK, M' )

  5. If either ML-DSA.Sign() or Trad.Sign() return an error, then this
     process must return an error.

      if NOT mldsaSig or NOT tradSig:
        output "Signature generation error"

  6. Encode each component signature into a CompositeSignatureValue.

      signature := CompositeSignatureValue(mldsaSig, tradSig)

  7. Output signature

      return signature
]]></artwork>
          </figure>
          <t>It is possible to use component private keys stored in separate software or hardware keystores. Variations in the process to accommodate particular private key storage mechanisms are considered to be conformant to this document so long as it produces the same output and error handling as the process sketched above.</t>
          <t>Note that in step 5 above, both component signature processes are invoked, and no indication is given about which one failed. This SHOULD be done in a timing-invariant way to prevent side-channel attackers from learning which component algorithm failed.</t>
          <t>Note that there are two different context strings <tt>ctx</tt> here: the first is the application context that is passed in to <tt>Composite-ML-DSA.Sign</tt> and bound to the composite signature combiner. The second is the <tt>ctx</tt> that is passed down into the underlying <tt>ML-DSA.Sign</tt> and here Composite-ML-DSA itself is the application that we wish to bind, and outer <tt>ctx</tt> is already contained within the <tt>M'</tt> message.</t>
        </section>
        <section anchor="sec-hash-comp-sig-verify">
          <name>HashComposite-ML-DSA-Verify</name>
          <t>This mode mirrors <tt>HashML-DSA.Verify(pk, M, signature, ctx, PH)</tt> defined in Section 5.4.1 of <xref target="FIPS.204"/>.</t>
          <t>Compliant applications MUST output "Valid signature" (true) if and only if all component signatures were successfully validated, and "Invalid signature" (false) otherwise.</t>
          <figure anchor="alg-hash-composite-verify">
            <name>HashComposite-ML-DSA.Verify(pk, M, signature, ctx, PH)</name>
            <artwork><![CDATA[
HashComposite-ML-DSA.Verify(pk, M, signature, ctx, PH)

Explicit inputs:

  pk          Composite public key consisting of verification public
              keys for each component.

  M           Message whose signature is to be verified, an octet
              string.

  signature   CompositeSignatureValue containing the component
              signature values (mldsaSig and tradSig) to be verified.

  ctx         The Message context string used in the composite signature
              combiner, which defaults to the empty string.

  PH          The Message Digest Algorithm for pre-hashing. See
              section on pre-hashing the message below.

Implicit inputs:

  ML-DSA    A placeholder for the specific ML-DSA algorithm and
            parameter set to use, for example, could be "ML-DSA-65".

  Trad      A placeholder for the specific traditional algorithm and
            parameter set to use, for example "RSASSA-PSS with id-sha256"
            or "Ed25519".

  Prefix    The prefix String which is the byte encoding of the String
            "CompositeAlgorithmSignatures2025" which in hex is
            436F6D706F73697465416C676F726974686D5369676E61747572657332303235

  Domain    Domain separator value for binding the signature to the
            Composite OID. See section on Domain Separators below.

  HashOID   The DER Encoding of the Object Identifier of the
            PreHash algorithm (PH) which is passed into the function.

Output:

  Validity (bool)   "Valid signature" (true) if the composite
                    signature is valid, "Invalid signature"
                    (false) otherwise.

Signature Verification Process:

  1. If len(ctx) > 255
       return error

  2. Separate the keys and signatures

     (pk1, pk2) = pk
      (s1, s2) = signature

   If Error during Desequencing, or if any of the component
   keys or signature values are not of the correct key type or
   length for the given component algorithm then output
   "Invalid signature" and stop.

  3. Compute a Hash of the Message.

      M' = Prefix || Domain || len(ctx) || ctx || HashOID || PH(M)

  4. Check each component signature individually, according to its
     algorithm specification.
     If any fail, then the entire signature validation fails.

      if not ML-DSA.Verify( pk1, M', s1, ctx=Domain ) then
          output "Invalid signature"

      if not Trad.Verify( pk2, M', s2 ) then
          output "Invalid signature"

      if all succeeded, then
         output "Valid signature"
]]></artwork>
          </figure>
          <t>Note that in step 4 above, the function fails early if the first component fails to verify. Since no private keys are involved in a signature verification, there are no timing attacks to consider, so this is ok.</t>
          <t>Note that there are two different context strings <tt>ctx</tt> here: the first is the application context that is passed in to <tt>Composite-ML-DSA.Sign</tt> and bound to the composite signature combiner. The second is the <tt>ctx</tt> that is passed down into the underlying <tt>ML-DSA.Sign</tt> and here Composite-ML-DSA itself is the application that we wish to bind, and outer <tt>ctx</tt> is already contained within the <tt>M'</tt> message.</t>
        </section>
      </section>
      <section anchor="serializekey-and-deserializekey">
        <name>SerializeKey and DeserializeKey</name>
        <t>Each component key is serialized according to their respective standard as shown in <xref target="appdx_components"/> and concatenated together using a fixed 4-byte length field denoting the length in bytes of the first component key, as shown below.</t>
        <figure anchor="alg-composite-serialize">
          <name>Composite SerializeKey(pk)</name>
          <artwork><![CDATA[
Composite-ML-DSA.SerializeKey(key) -> bytes

Explicit Input:

  key    Composite ML-DSA public key or private key

Implicit inputs:

  ML-DSA   A placeholder for the specific ML-DSA algorithm and
           parameter set to use, for example, could be "ML-DSA-65".

  Trad     A placeholder for the specific traditional algorithm and
           parameter set to use, for example "RSA" or "ECDSA".

  IntegerToBytes  A function that takes an Integer and converts it to
           a byte representation of size byteLength.  See definition in
           [FIPS.204]

Output:

  bytes   The encoded public key or private key

Serialization Process:

  1. Separate the  keys

     (mldsaKey, tradKey) = key

  2. Serialize each of the constituent public keys
        The component keys are serialized according to their respective standard
        as shown in the component algorithm appendix.

     mldsaEncodedKey = MLDSA.SerializeKey(mldsaKey)
     tradEncodedKey = Trad.SerializeKey(tradKey)

  3. Calculate the length encoding of the mldsaEncodedPK

     If (mldsaEncodeKey.length) > 2^32
         then output "message too long" and stop.

     encodedLength = IntegerToBytes(mldsaEncodeKey.length, 4)

  4. Combine and output the encoded public key

     bytes = encodedLength || mldsaEncodedPK || tradEncodedPK
     output bytes
]]></artwork>
        </figure>
        <t>Deserialization reverses this process, raising an error in the event that the input is malformed.  Each component
key is deserialized according to their respective standard as shown in <xref target="appdx_components"/>.</t>
        <figure anchor="alg-composite-deserialize">
          <name>Composite DeserializeKey(bytes)</name>
          <artwork><![CDATA[
Composite-ML-DSA.DeserializeKey(bytes) -> pk

Explicit Input:

  bytes   An encoded public key or private key

Implicit inputs:

  ML-DSA   A placeholder for the specific ML-DSA algorithm and
           parameter set to use, for example, could be "ML-DSA-65".

  Trad     A placeholder for the specific traditional algorithm and
           parameter set to use, for example "RSA" or "ECDSA".

Output:

  key     The composite ML-DSA public key or private key

Deserialization Process:

  1. Validate the length of the the input byte string

     if bytes is not the correct length:
      output "Deserialization error"

  2. Parse each constituent encoded key.
       The first 4 bytes encodes the length of mldsaEncodedKey, which MAY
       be used to separate the mldsaEncodedKey and tradEncodedKey, and then
       is to be discarded.  This length SHOULD be checked against the
       expected length value as per ML-DSA.

     (mldsaEncodedKey, tradEncodedKey) = bytes

  3. Deserialize the constituent public or private keys
        The component keys are deserialized according to their respective standard
        as shown in the component algorithm appendix.

     mldsaKey = MLDSA.DeserializeKey(mldsaEncodedKey)
     tradKey = Trad.DeserializeKey(tradEncodedKey)

  4. If either ML-DSA.DeserializeKey() or
     Trad.DeserializeKey() return an error,
     then this process must return an error.

      if NOT mldsaKey or NOT tradKey:
        output "Deserialization error"

  5. Output the composite ML-DSA key

     output (mldsaPK, tradPK)
]]></artwork>
        </figure>
      </section>
      <section anchor="serializesignaturevalue-and-deserializesignaturevalue">
        <name>SerializeSignatureValue and DeSerializeSignatureValue</name>
        <t>Each component signature is serialized according to their respective standard as shown in <xref target="appdx_components"/> and concatenated together using a fixed 4-byte length field denoting the length in bytes of the first component signature, as shown below.</t>
        <figure anchor="alg-composite-serialize-sig">
          <name>Composite SerializeSignatureValue(CompositeSignatureValue)</name>
          <artwork><![CDATA[
Composite-ML-DSA.SerializeSignatureValue(CompositeSignatureValue) -> bytes

Explicit Input:

  CompositeSignatureValue    The Composite Signature Value obtained from Composite-ML-DSA.Sign()

Implicit inputs:

  ML-DSA   A placeholder for the specific ML-DSA algorithm and
           parameter set to use, for example, could be "ML-DSA-65".

  Trad     A placeholder for the specific traditional algorithm and
           parameter set to use, for example "RSA" or "ECDSA".

  IntegerToBytes  A function that takes an Integer and converts it to
           a byte representation of size byteLength.  See definition in
           [FIPS.204]

Output:

  bytes   The encoded CompositeSignatureValue

Serialization Process:

  1. Separate the signatures

     (mldsaSig, tradSig) = CompositeSignatureValue

  2. Serialize each of the constituent signatures
       The component signatures are serialized according to their respective standard
       as shown in the component algorithm appendix.

     mldsaEncodedSignature = ML-DSA.SerializeSignature(mldsaSig)
     tradEncodedSignature = Trad.SerializeSignature(tradSig)

  3. Calculate the length encoding of the mldsaEncodedSignature

     If (mldsaEncodeKey.length) > 2^32
         then output "message too long" and stop.

     encodedLength = IntegerToBytes(mldsaEncodeKey.length, 4)
     encodedLength = IntegerToBytes(mldsaEncodedSignature.length, 4)

  4. Combine and output the encoded composite signature

     bytes = encodedLength || mldsaEncodedSignature || tradEncodedSignature
     output bytes
]]></artwork>
        </figure>
        <t>Deserialization reverses this process, raising an error in the event that the input is malformed.  Each component
signature is deserialized according to their respective standard as shown in <xref target="appdx_components"/>.</t>
        <figure anchor="alg-composite-deserialize-sig">
          <name>Composite DeserializeSignatureValue(bytes)</name>
          <artwork><![CDATA[
Composite-ML-DSA.DeserializeSignatureValue(bytes) -> CompositeSignatureValue

Explicit Input:

  bytes   An encoded CompositeSignatureValue

Implicit inputs:

  ML-DSA   A placeholder for the specific ML-DSA algorithm and
           parameter set to use, for example, could be "ML-DSA-65".

  Trad     A placeholder for the specific traditional algorithm and
           parameter set to use, for example "RSA" or "ECDSA".

Output:

  CompositeSignatureValue  The CompositeSignatureValue

Deserialization Process:

  1. Validate the length of the the input byte string

     if bytes is not the correct length:
      output "Deserialization error"

  2. Parse each constituent encoded signature.
       The first 4 bytes encodes the length of mldsaEncodedSignature, which MAY
       be used to separate the mldsaEncodedSignature and tradEncodedSignature,
       and then is to be discarded.  The mldsaEncodedSignature length SHOULD
       be checked against the expected length value as per ML-DSA.

     (mldsaEncodedSignature, tradEncodedSignature) = bytes

  3. Deserialize the constituent signature values
        The component signatures are deserialized according to their respective standard
        as shown in the component algorithm appendix.

     mldsaSig = ML-DSA.DeserializeSignature(mldsaEncodedSignature)
     tradSig = Trad.DeserializeSignature(tradEncodedSignature)

  4. If either ML-DSA.DeserializeSignature() or
     Trad.DeserializeSignature() return an error,
     then this process must return an error.

      if NOT mldsaSig or NOT tradSig:
        output "Deserialization error"

  5. Output the CompositeSignatureValue

     output (mldsaSig, tradSig)
]]></artwork>
        </figure>
      </section>
      <section anchor="ml-dsa-public-key-private-key-and-signature-sizes-for-serialization-and-deserialization">
        <name>ML-DSA public key, private key and signature sizes for serialization and deserialization</name>
        <t>As noted above, the composite public key, composite private key and composite signature value
serialization and deserialization methods use a fixed 4-byte length value to indicate the size of
the first component.  This is to allow the separation of the first component from the second
component.  It is RECOMMENDED that the length specified for the first component be checked against
the values from the table below to ensure the encoding has been done propertly.</t>
        <t>If future composite combinations make use of algorithms where the first component uses variable
length keys or signatures, then this fixed 4-byte length value can be used to ensure the components
are correctly deserialized.</t>
        <t>The following table shows the possible length values in bytes for the public, private and signature
sizes for ML-DSA which can be used to deserialzie the components.</t>
        <table anchor="tab-mldsa-sizes">
          <name>ML-DSA Key and Signature Sizes in bytes</name>
          <thead>
            <tr>
              <th align="left">Algorithm</th>
              <th align="left">Public key</th>
              <th align="left">Private key</th>
              <th align="left">Signature</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ML-DSA-44</td>
              <td align="left">1312</td>
              <td align="left">32 or 2560 or 2592</td>
              <td align="left">2420</td>
            </tr>
            <tr>
              <td align="left">ML-DSA-65</td>
              <td align="left">1952</td>
              <td align="left">32 or 4032 or 4064</td>
              <td align="left">3309</td>
            </tr>
            <tr>
              <td align="left">ML-DSA-87</td>
              <td align="left">2592</td>
              <td align="left">32 or 4896 or 4928</td>
              <td align="left">4627</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="sec-composite-structs">
      <name>Composite Key Structures</name>
      <t>In order to form composite public keys and signature values, we define ASN.1-based composite encodings such that these structures can be used as a drop-in replacement for existing public key and signature fields such as those found in PKCS#10 <xref target="RFC2986"/>, CMP <xref target="RFC4210"/>, X.509 <xref target="RFC5280"/>, CMS <xref target="RFC5652"/>.</t>
      <section anchor="sec-composite-pub-keys">
        <name>CompositeMLDSAPublicKey</name>
        <t>The wire encoding of a Composite ML-DSA public key is:</t>
        <sourcecode type="ASN.1" name="CompositeMLDSAPublicKey-asn.1-structures"><![CDATA[
CompositeMLDSAPublicKey ::= BIT STRING
]]></sourcecode>
        <t>Since RSA and ECDSA component public keys are themselves in a DER encoding, the following show the internal structure of the various public key types used in this specification:</t>
        <t>When a CompositeMLDSAPublicKey is used with an RSA public key, the BIT STRING is generated by the concatenation of a raw ML-DSA key according to <xref target="I-D.ietf-lamps-dilithium-certificates"/>, and an RSAPublicKey (which is a DER encoded RSAPublicKey).</t>
        <t>When a CompositeMLDSAPublicKey is used with an EC public key, the BIT STRING is generated by the concatenation of a raw ML-DSA key according to <xref target="I-D.ietf-lamps-dilithium-certificates"/> and an ECDSAPublicKey (which is a DER encoded ECPoint).</t>
        <t>When a CompositeMLDSAPublicKey is used with an Edwards public key, the BIT STRING is generated by the concatenation of a raw ML-DSA key according to <xref target="I-D.ietf-lamps-dilithium-certificates"/> and a raw Edwards public key according to <xref target="RFC8410"/>.</t>
        <t>Some applications may need to reconstruct the <tt>SubjectPublicKeyInfo</tt> objects corresponding to each component public key. <xref target="tab-sig-algs"/> or <xref target="tab-hash-sig-algs"/> in <xref target="sec-alg-ids"/> provides the necessary mapping between composite and their component algorithms for doing this reconstruction.</t>
        <t>When the CompositeMLDSAPublicKey must be provided in octet string or bit string format, the data structure is encoded as specified in <xref target="sec-encoding-rules"/>.</t>
        <t>Component keys of a CompositeMLDSAPublicKey MUST NOT be used in any other type of key or as a standalone key. For more details on the security considerations around key reuse, see section <xref target="sec-cons-key-reuse"/>.</t>
        <t>The following ASN.1 Information Object Class is defined to allow for compact definitions of each composite algorithm, leading to a smaller overall ASN.1 module.</t>
        <sourcecode type="ASN.1"><![CDATA[
pk-CompositeSignature {OBJECT IDENTIFIER:id, PublicKeyType}
    PUBLIC-KEY ::= {
      IDENTIFIER id
      KEY PublicKeyType
      PARAMS ARE absent
      CERT-KEY-USAGE { digitalSignature, nonRepudiation, keyCertSign, cRLSign}
    }
]]></sourcecode>
        <t>As an example, the public key type <tt>id-MLDSA44-ECDSA-P256</tt> is defined as:</t>
        <artwork><![CDATA[
id-MLDSA44-ECDSA-P256 PUBLIC-KEY ::=
  pk-CompositeSignature{
    id-MLDSA44-ECDSA-P256,
    CompositeMLDSAPublicKey }
]]></artwork>
        <t>The full set of key types defined by this specification can be found in the ASN.1 Module in <xref target="sec-asn1-module"/>.</t>
      </section>
      <section anchor="sec-priv-key">
        <name>CompositeMLDSAPrivateKey</name>
        <t>When a Composite ML-DSA private key is to be exported from a cryptographic module, it uses an analogous definition to the public keys:</t>
        <sourcecode type="ASN.1" name="CompositeMLDSAPrivateKey-asn.1-structures"><![CDATA[
CompositeMLDSAPrivateKey ::= OCTET STRING
]]></sourcecode>
        <t>Each element of the <tt>CompositeMLDSAPrivateKey</tt> is an <tt>OCTET STRING</tt> according to the encoding of the underlying algorithm specification and will decode into the respective private key structures in an analogous way to the public key structures defined in <xref target="sec-composite-pub-keys"/>. The ASN.1 module in this document does not provide helper classes for private keys.  The PrivateKey for each component algorithm MUST be in the same order as defined in <xref target="sec-composite-pub-keys"/>.</t>
        <t>Use cases that require an interoperable encoding for composite private keys will often need to place a <tt>CompositeMLDSAPrivateKey</tt> inside a <tt>OneAsymmetricKey</tt> structure defined in <xref target="RFC5958"/>, such as when private keys are carried in PKCS #12 <xref target="RFC7292"/>, CMP <xref target="RFC4210"/> or CRMF <xref target="RFC4211"/>. The definition of <tt>OneAsymmetricKey</tt> is copied here for convenience:</t>
        <sourcecode type="ASN.1" name="RFC5958-OneAsymmetricKey-asn.1-structure"><![CDATA[
 OneAsymmetricKey ::= SEQUENCE {
       version                   Version,
       privateKeyAlgorithm       PrivateKeyAlgorithmIdentifier,
       privateKey                PrivateKey,
       attributes            [0] Attributes OPTIONAL,
       ...,
       [[2: publicKey        [1] PublicKey OPTIONAL ]],
       ...
     }
  ...
  PrivateKey ::= OCTET STRING
                        -- Content varies based on type of key.  The
                        -- algorithm identifier dictates the format of
                        -- the key.
]]></sourcecode>
        <t>When a <tt>CompositeMLDSAPrivateKey</tt> is conveyed inside a OneAsymmetricKey structure (version 1 of which is also known as PrivateKeyInfo) <xref target="RFC5958"/>, the privateKeyAlgorithm field SHALL be set to the corresponding composite algorithm identifier defined according to <xref target="sec-alg-ids"/> and its parameters field MUST be absent. The privateKey field SHALL contain the <tt>CompositeMLDSAPrivateKey</tt>, and the <tt>publicKey</tt> field remains OPTIONAL.  If the <tt>publicKey</tt> field is present, it MUST be a <tt>CompositeMLDSAPublicKey</tt>.</t>
        <t>Some applications may need to reconstruct the <tt>OneAsymmetricKey</tt> objects corresponding to each component private key. <xref target="sec-alg-ids"/> provides the necessary mapping between composite and their component algorithms for doing this reconstruction.</t>
        <t>Component keys of a CompositeMLDSAPrivateKey MUST NOT be used in any other type of key or as a standalone key.  For more details on the security considerations around key reuse, see section <xref target="sec-cons-key-reuse"/>.</t>
      </section>
      <section anchor="sec-encoding-rules">
        <name>Encoding Rules</name>
        <!-- EDNOTE 7: Examples of how other specifications specify how a data structure is converted to a bit string can be found in RFC 2313, section 10.1.4, 3279 section 2.3.5, and RFC 4055, section 3.2. -->

<t>Many protocol specifications will require that the composite public key and composite private key data structures be represented by an octet string or bit string.</t>
        <t>When an octet string is required, the DER encoding of the composite data structure SHALL be used directly.</t>
        <t>When a bit string is required, the octets of the DER encoded composite data structure SHALL be used as the bits of the bit string, with the most significant bit of the first octet becoming the first bit, and so on, ending with the least significant bit of the last octet becoming the last bit of the bit string.</t>
        <t>In the interests of simplicity and avoiding compatibility issues, implementations that parse these structures MAY accept both BER and DER.</t>
      </section>
      <section anchor="key-usage-bits">
        <name>Key Usage Bits</name>
        <t>When any of the Composite ML-DSA <tt>AlgorithmIdentifier</tt> appears in the <tt>SubjectPublicKeyInfo</tt> field of an X.509 certificate <xref target="RFC5280"/>, the key usage certificate extension MUST only contain only signing-type key usages.</t>
        <t>The normal keyUsage rules for signing-type keys from <xref target="RFC5280"/> apply, and are reproduced here for completeness.</t>
        <t>For Certification Authority (CA) certificates that carry a composite public key, any combination of the following values MAY be present and any other values MUST NOT be present:</t>
        <artwork><![CDATA[
digitalSignature;
nonRepudiation;
keyCertSign; and
cRLSign.
]]></artwork>
        <t>For End Entity certificates, any combination of the following values MAY be present and any other values MUST NOT be present:</t>
        <artwork><![CDATA[
digitalSignature; and
nonRepudiation;
]]></artwork>
        <t>Composite ML-DSA keys MUST NOT be used in a "dual usage" mode because even if the
traditional component key supports both signing and encryption,
the post-quantum algorithms do not and therefore the overall composite algorithm does not.</t>
      </section>
    </section>
    <section anchor="composite-signature-structures">
      <name>Composite Signature Structures</name>
      <section anchor="sec-composite-sig-structs">
        <name>sa-CompositeSignature</name>
        <t>The ASN.1 algorithm object for a composite signature is:</t>
        <sourcecode type="asn.1"><![CDATA[
sa-CompositeSignature{OBJECT IDENTIFIER:id,
   PUBLIC-KEY:publicKeyType }
      SIGNATURE-ALGORITHM ::=  {
         IDENTIFIER id
         VALUE CompositeSignatureValue
         PARAMS ARE absent
         PUBLIC-KEYS {publicKeyType}
      }
]]></sourcecode>
      </section>
      <section anchor="sec-compositeSignatureValue">
        <name>CompositeSignatureValue</name>
        <t>The output of a Composite ML-DSA algorithm is the DER encoding of the following structure:</t>
        <t>The <tt>CompositeSignatureValue</tt> is the DER encoding of a concatenation of the signature values from the
underlying component algorithms.  It is represented in ASN.1 as follows:</t>
        <sourcecode type="asn.1" name="composite-sig-asn.1"><![CDATA[
CompositeSignatureValue ::= BIT STRING
]]></sourcecode>
        <t>The order of the component signature values is the same as the order defined in <xref target="sec-composite-pub-keys"/>.</t>
      </section>
    </section>
    <section anchor="sec-alg-ids">
      <name>Algorithm Identifiers</name>
      <t>This table summarizes the list of Composite ML-DSA algorithms and lists the OID and the two component algorithms. Domain separator values are defined below in <xref target="sec-domsep-values"/>.</t>
      <t>EDNOTE: these are prototyping OIDs to be replaced by IANA.</t>
      <t>&lt;CompSig&gt;.1 is equal to 2.16.840.1.114027.80.8.1.1</t>
      <section anchor="purecomposite-ml-dsa-algorithm-identifiers">
        <name>PureComposite-ML-DSA Algorithm Identifiers</name>
        <t>Pure Composite-ML-DSA Signature public key types:</t>
        <table anchor="tab-sig-algs">
          <name>Pure ML-DSA Composite Signature Algorithms</name>
          <thead>
            <tr>
              <th align="left">Composite Signature Algorithm</th>
              <th align="left">OID</th>
              <th align="left">First Algorithm</th>
              <th align="left">Second Algorithm</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">id-MLDSA44-RSA2048-PSS</td>
              <td align="left">&lt;CompSig&gt;.60</td>
              <td align="left">id-ML-DSA-44</td>
              <td align="left">id-RSASSA-PSS with id-sha256</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA44-RSA2048-PKCS15</td>
              <td align="left">&lt;CompSig&gt;.61</td>
              <td align="left">id-ML-DSA-44</td>
              <td align="left">sha256WithRSAEncryption</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA44-Ed25519</td>
              <td align="left">&lt;CompSig&gt;.62</td>
              <td align="left">id-ML-DSA-44</td>
              <td align="left">id-Ed25519</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA44-ECDSA-P256</td>
              <td align="left">&lt;CompSig&gt;.63</td>
              <td align="left">id-ML-DSA-44</td>
              <td align="left">ecdsa-with-SHA256 with secp256r1</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-RSA3072-PSS</td>
              <td align="left">&lt;CompSig&gt;.64</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">id-RSASSA-PSS with id-sha256</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-RSA3072-PKCS15</td>
              <td align="left">&lt;CompSig&gt;.65</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">sha256WithRSAEncryption</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-RSA4096-PSS</td>
              <td align="left">&lt;CompSig&gt;.66</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">id-RSASSA-PSS with id-sha384</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-RSA4096-PKCS15</td>
              <td align="left">&lt;CompSig&gt;.67</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">sha384WithRSAEncryption</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-ECDSA-P256</td>
              <td align="left">&lt;CompSig&gt;.68</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">ecdsa-with-SHA256 with secp256r1</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-ECDSA-P384</td>
              <td align="left">&lt;CompSig&gt;.69</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">ecdsa-with-SHA384 with secp384r1</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-ECDSA-brainpoolP256r1</td>
              <td align="left">&lt;CompSig&gt;.70</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">ecdsa-with-SHA256 with brainpoolP256r1</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-Ed25519</td>
              <td align="left">&lt;CompSig&gt;.71</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">id-Ed25519</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA87-ECDSA-P384</td>
              <td align="left">&lt;CompSig&gt;.72</td>
              <td align="left">id-ML-DSA-87</td>
              <td align="left">ecdsa-with-SHA384 with secp384r1</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA87-ECDSA-brainpoolP384r1</td>
              <td align="left">&lt;CompSig&gt;.73</td>
              <td align="left">id-ML-DSA-87</td>
              <td align="left">ecdsa-with-SHA384 with brainpoolP384r1</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA87-Ed448</td>
              <td align="left">&lt;CompSig&gt;.74</td>
              <td align="left">id-ML-DSA-87</td>
              <td align="left">id-Ed448</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA87-RSA4096-PSS</td>
              <td align="left">&lt;CompSig&gt;.75</td>
              <td align="left">id-ML-DSA-87</td>
              <td align="left">id-RSASSA-PSS with id-sha384</td>
            </tr>
          </tbody>
        </table>
        <t>See the ASN.1 module in section <xref target="sec-asn1-module"/> for the explicit definitions of the above Composite ML-DSA algorithms.</t>
        <t>Full specifications for the referenced algorithms can be found in <xref target="appdx_components"/>.</t>
      </section>
      <section anchor="hashcomposite-ml-dsa-algorithm-identifiers">
        <name>HashComposite-ML-DSA Algorithm Identifiers</name>
        <t>HashComposite-ML-DSA Signature public key types:</t>
        <table anchor="tab-hash-sig-algs">
          <name>Hash ML-DSA Composite Signature Algorithms</name>
          <thead>
            <tr>
              <th align="left">Composite Signature Algorithm</th>
              <th align="left">OID</th>
              <th align="left">First Algorithm</th>
              <th align="left">Second Algorithm</th>
              <th align="left">Pre-Hash</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">id-HashMLDSA44-RSA2048-PSS-SHA256</td>
              <td align="left">&lt;CompSig&gt;.80</td>
              <td align="left">id-ML-DSA-44</td>
              <td align="left">id-RSASSA-PSS with id-sha256</td>
              <td align="left">id-sha256</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA44-RSA2048-PKCS15-SHA256</td>
              <td align="left">&lt;CompSig&gt;.81</td>
              <td align="left">id-ML-DSA-44</td>
              <td align="left">sha256WithRSAEncryption</td>
              <td align="left">id-sha256</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA44-Ed25519-SHA512</td>
              <td align="left">&lt;CompSig&gt;.82</td>
              <td align="left">id-ML-DSA-44</td>
              <td align="left">id-Ed25519</td>
              <td align="left">id-sha512</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA44-ECDSA-P256-SHA256</td>
              <td align="left">&lt;CompSig&gt;.83</td>
              <td align="left">id-ML-DSA-44</td>
              <td align="left">ecdsa-with-SHA256 with secp256r1</td>
              <td align="left">id-sha256</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-RSA3072-PSS-SHA512</td>
              <td align="left">&lt;CompSig&gt;.84</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">id-RSASSA-PSS with id-sha256</td>
              <td align="left">id-sha512</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-RSA3072-PKCS15-SHA512</td>
              <td align="left">&lt;CompSig&gt;.85</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">sha256WithRSAEncryption</td>
              <td align="left">id-sha512</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-RSA4096-PSS-SHA512</td>
              <td align="left">&lt;CompSig&gt;.86</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">id-RSASSA-PSS with id-sha384</td>
              <td align="left">id-sha512</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-RSA4096-PKCS15-SHA512</td>
              <td align="left">&lt;CompSig&gt;.87</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">sha384WithRSAEncryption</td>
              <td align="left">id-sha512</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-ECDSA-P256-SHA512</td>
              <td align="left">&lt;CompSig&gt;.88</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">ecdsa-with-SHA256 with secp256r1</td>
              <td align="left">id-sha512</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-ECDSA-P384-SHA512</td>
              <td align="left">&lt;CompSig&gt;.89</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">ecdsa-with-SHA384 with secp384r1</td>
              <td align="left">id-sha512</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512</td>
              <td align="left">&lt;CompSig&gt;.90</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">ecdsa-with-SHA256 with brainpoolP256r1</td>
              <td align="left">id-sha512</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-Ed25519-SHA512</td>
              <td align="left">&lt;CompSig&gt;.91</td>
              <td align="left">id-ML-DSA-65</td>
              <td align="left">id-Ed25519</td>
              <td align="left">id-sha512</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA87-ECDSA-P384-SHA512</td>
              <td align="left">&lt;CompSig&gt;.92</td>
              <td align="left">id-ML-DSA-87</td>
              <td align="left">ecdsa-with-SHA384 with secp384r1</td>
              <td align="left">id-sha512</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512</td>
              <td align="left">&lt;CompSig&gt;.93</td>
              <td align="left">id-ML-DSA-87</td>
              <td align="left">ecdsa-with-SHA384 with brainpoolP384r1</td>
              <td align="left">id-sha512</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA87-Ed448-SHA512</td>
              <td align="left">&lt;CompSig&gt;.94</td>
              <td align="left">id-ML-DSA-87</td>
              <td align="left">id-Ed448</td>
              <td align="left">id-sha512</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA87-RSA4096-PSS-SHA512</td>
              <td align="left">&lt;CompSig&gt;.95</td>
              <td align="left">id-ML-DSA-87</td>
              <td align="left">id-RSASSA-PSS with id-sha384</td>
              <td align="left">id-sha512</td>
            </tr>
          </tbody>
        </table>
        <t>See the ASN.1 module in <xref target="sec-asn1-module"/> for the explicit definitions of the above Composite ML-DSA algorithms.</t>
        <t>The Pre-Hash algorithm is used as the PH algorithm and the DER Encoded OID value of this Hash is used as HashOID for the Message format in step 2 of <tt>HashComposite-ML-DSA.Sign</tt> in section <xref target="sec-hash-comp-sig-sign"/> and <tt>HashComposite-ML-DSA.Verify</tt> in <xref target="sec-hash-comp-sig-verify"/>.</t>
        <t>Full specifications for the referenced algorithms can be found in <xref target="appdx_components"/>.</t>
      </section>
      <section anchor="sec-domsep-values">
        <name>Domain Separators</name>
        <t>As mentioned above, the OID input value is used as a domain separator for the Composite Signature Generation and verification process and is the DER encoding of the OID. The following table shows the HEX encoding for each Signature Algorithm.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Composite Signature Algorithm</th>
              <th align="left">Domain Separator (in Hex encoding)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">id-MLDSA44-RSA2048-PSS</td>
              <td align="left">060B6086480186FA6B5008013C</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA44-RSA2048-PKCS15</td>
              <td align="left">060B6086480186FA6B5008013D</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA44-Ed25519</td>
              <td align="left">060B6086480186FA6B5008013E</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA44-ECDSA-P256</td>
              <td align="left">060B6086480186FA6B5008013F</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-RSA3072-PSS</td>
              <td align="left">060B6086480186FA6B50080140</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-RSA3072-PKCS15</td>
              <td align="left">060B6086480186FA6B50080141</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-RSA4096-PSS</td>
              <td align="left">060B6086480186FA6B50080142</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-RSA4096-PKCS15</td>
              <td align="left">060B6086480186FA6B50080143</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-ECDSA-P256</td>
              <td align="left">060B6086480186FA6B50080144</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-ECDSA-P384</td>
              <td align="left">060B6086480186FA6B50080145</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-ECDSA-brainpoolP256r1</td>
              <td align="left">060B6086480186FA6B50080146</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA65-Ed25519</td>
              <td align="left">060B6086480186FA6B50080147</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA87-ECDSA-P384</td>
              <td align="left">060B6086480186FA6B50080148</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA87-ECDSA-brainpoolP384r1</td>
              <td align="left">060B6086480186FA6B50080149</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA87-Ed448</td>
              <td align="left">060B6086480186FA6B5008014A</td>
            </tr>
            <tr>
              <td align="left">id-MLDSA87-RSA4096-PSS</td>
              <td align="left">060B6086480186FA6B5008014B</td>
            </tr>
          </tbody>
        </table>
        <table anchor="tab-hash-sig-alg-oids">
          <name>Hash ML-DSA Composite Signature Domain Separators</name>
          <thead>
            <tr>
              <th align="left">Composite Signature Algorithm</th>
              <th align="left">Domain Separator (in Hex encoding)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">id-HashMLDSA44-RSA2048-PSS-SHA256</td>
              <td align="left">060B6086480186FA6B50080150</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA44-RSA2048-PKCS15-SHA256</td>
              <td align="left">060B6086480186FA6B50080151</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA44-Ed25519-SHA512</td>
              <td align="left">060B6086480186FA6B50080152</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA44-ECDSA-P256-SHA256</td>
              <td align="left">060B6086480186FA6B50080153</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-RSA3072-PSS-SHA512</td>
              <td align="left">060B6086480186FA6B50080154</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-RSA3072-PKCS15-SHA512</td>
              <td align="left">060B6086480186FA6B50080155</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-RSA4096-PSS-SHA512</td>
              <td align="left">060B6086480186FA6B50080156</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-RSA4096-PKCS15-SHA512</td>
              <td align="left">060B6086480186FA6B50080157</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-ECDSA-P256-SHA512</td>
              <td align="left">060B6086480186FA6B50080158</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-ECDSA-P384-SHA512</td>
              <td align="left">060B6086480186FA6B50080159</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512</td>
              <td align="left">060B6086480186FA6B5008015A</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA65-Ed25519-SHA512</td>
              <td align="left">060B6086480186FA6B5008015B</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA87-ECDSA-P384-SHA512</td>
              <td align="left">060B6086480186FA6B5008015C</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512</td>
              <td align="left">060B6086480186FA6B5008015D</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA87-Ed448-SHA512</td>
              <td align="left">060B6086480186FA6B5008015E</td>
            </tr>
            <tr>
              <td align="left">id-HashMLDSA87-RSA4096-PSS-SHA512</td>
              <td align="left">060B6086480186FA6B5008015F</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="rationale-for-choices">
        <name>Rationale for choices</name>
        <t>In generating the list of Composite algorithms, the following general guidance was used, however during development of this specification several algorithms were added by direct request even though they do not fit this guidance.</t>
        <ul spacing="normal">
          <li>
            <t>Pair equivalent levels.</t>
          </li>
          <li>
            <t>NIST-P-384 is CNSA approved [CNSA2.0] for all classification levels.</t>
          </li>
          <li>
            <t>521 bit curve not widely used.</t>
          </li>
        </ul>
        <t>SHA2 is used throughout in order to facilitate implementations that do not have easy access to SHA3 outside of the ML-DSA function.</t>
        <t>At the higher security levels of pre-hashed Composite ML-DSA, for example <tt>id-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512</tt>, the 384-bit elliptic curve component is used with SHA2-384 which is its pre-hash (ie the pre-hash that is considered to be internal to the ECDSA component), yet SHA2-512 is used as the pre-hash for the overall composite because in this case the pre-hash must not weaken the ML-DSA-87 component against a collision attack.</t>
      </section>
      <section anchor="rsassa-pss">
        <name>RSASSA-PSS</name>
        <t>Use of RSASSA-PSS <xref target="RFC8017"/> requires extra parameters to be specified, which differ for each security level.</t>
        <t>Also note that this specification fixes the Public Key OID of RSASSA-PSS to id-RSASSA-PSS (1.2.840.113549.1.1.10), although most implementations also would accept rsaEncryption (1.2.840.113549.1.1.1).</t>
        <section anchor="rsa2048-pss">
          <name>RSA2048-PSS</name>
          <t>The RSA component keys MUST be generated at the 2048-bit security level in order to match that of ML-DSA-44.</t>
          <t>As with the other composite signature algorithms, when <tt>id-MLDSA44-RSA2048-PSS</tt> and <tt>id-HashMLDSA44-RSA2048-PSS-SHA256</tt> is used in an AlgorithmIdentifier, the parameters MUST be absent. <tt>id-MLDSA44-RSA2048-PSS</tt> and <tt>id-HashMLDSA44-RSA2048-PSS-SHA256</tt> SHALL instantiate RSASSA-PSS with the following parameters:</t>
          <table anchor="rsa-pss-params2048">
            <name>RSASSA-PSS 2048 Parameters</name>
            <thead>
              <tr>
                <th align="left">RSASSA-PSS Parameter</th>
                <th align="left">Value</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Mask Generation Function</td>
                <td align="left">mgf1</td>
              </tr>
              <tr>
                <td align="left">Mask Generation params</td>
                <td align="left">SHA-256</td>
              </tr>
              <tr>
                <td align="left">Message Digest Algorithm</td>
                <td align="left">SHA-256</td>
              </tr>
              <tr>
                <td align="left">Salt Length in bits</td>
                <td align="left">256</td>
              </tr>
            </tbody>
          </table>
          <t>where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>Mask Generation Function (mgf1)</tt> is defined in <xref target="RFC8017"/></t>
            </li>
            <li>
              <t><tt>SHA-256</tt> is defined in <xref target="RFC6234"/>.</t>
            </li>
          </ul>
        </section>
        <section anchor="rsa3072-pss">
          <name>RSA3072-PSS</name>
          <t>The RSA component keys MUST be generated at the 3072-bit security level in order to match that of ML-DSA-65.</t>
          <t>As with the other composite signature algorithms, when <tt>id-MLDSA65-RSA3072-PSS</tt> or <tt>id-HashMLDSA65-RSA3072-PSS-SHA512</tt>  is used in an AlgorithmIdentifier, the parameters MUST be absent. <tt>id-MLDSA65-RSA3072-PSS</tt> or <tt>id-HashMLDSA65-RSA3072-PSS-SHA512</tt> SHALL instantiate RSASSA-PSS with the following parameters:</t>
          <table anchor="rsa-pss-params3072">
            <name>RSASSA-PSS 3072 Parameters</name>
            <thead>
              <tr>
                <th align="left">RSASSA-PSS Parameter</th>
                <th align="left">Value</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Mask Generation Function</td>
                <td align="left">mgf1</td>
              </tr>
              <tr>
                <td align="left">Mask Generation params</td>
                <td align="left">SHA-256</td>
              </tr>
              <tr>
                <td align="left">Message Digest Algorithm</td>
                <td align="left">SHA-256</td>
              </tr>
              <tr>
                <td align="left">Salt Length in bits</td>
                <td align="left">256</td>
              </tr>
            </tbody>
          </table>
          <t>where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>Mask Generation Function (mgf1)</tt> is defined in <xref target="RFC8017"/></t>
            </li>
            <li>
              <t><tt>SHA-256</tt> is defined in <xref target="RFC6234"/>.</t>
            </li>
          </ul>
        </section>
        <section anchor="rsa4096-pss">
          <name>RSA4096-PSS</name>
          <t>The RSA component keys MUST be generated at the 4096-bit security level in order to match that of ML-DSA-65.</t>
          <t>As with the other composite signature algorithms, when <tt>id-MLDSA65-RSA4096-PSS</tt> or <tt>id-HashMLDSA65-RSA4096-PSS-SHA384</tt>  is used in an AlgorithmIdentifier, the parameters MUST be absent. <tt>id-MLDSA65-RSA4096-PSS</tt> or <tt>id-HashMLDSA65-RSA4096-PSS-SHA384</tt> SHALL instantiate RSASSA-PSS with the following parameters:</t>
          <table anchor="rsa-pss-params4096">
            <name>RSASSA-PSS 4096 Parameters</name>
            <thead>
              <tr>
                <th align="left">RSASSA-PSS Parameter</th>
                <th align="left">Value</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Mask Generation Function</td>
                <td align="left">mgf1</td>
              </tr>
              <tr>
                <td align="left">Mask Generation params</td>
                <td align="left">SHA-384</td>
              </tr>
              <tr>
                <td align="left">Message Digest Algorithm</td>
                <td align="left">SHA-384</td>
              </tr>
              <tr>
                <td align="left">Salt Length in bits</td>
                <td align="left">384</td>
              </tr>
            </tbody>
          </table>
          <t>where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>Mask Generation Function (mgf1)</tt> is defined in <xref target="RFC8017"/></t>
            </li>
            <li>
              <t><tt>SHA-384</tt> is defined in <xref target="RFC6234"/>.</t>
            </li>
          </ul>
          <!-- End of Composite Signature Algorithm section -->

</section>
      </section>
    </section>
    <section anchor="use-in-cms">
      <name>Use in CMS</name>
      <t>[EDNOTE: The convention in LAMPS is to specify algorithms and their CMS conventions in separate documents. Here we have presented them in the same document, but this section has been written so that it can easily be moved to a stand-alone document.]</t>
      <t>Composite Signature algorithms MAY be employed for one or more recipients in the CMS signed-data content type <xref target="RFC5652"/>.</t>
      <t>All recommendations for using Composite ML-DSA in CMS are fully aligned with the use of ML-DSA in CMS <xref target="I-D.ietf-lamps-cms-ml-dsa"/>.</t>
      <section anchor="cms-underlying-components">
        <name>Underlying Components</name>
        <t>A compliant implementation MUST support SHA-512 [FIPS180] for all composite variants in this document. Implementations MAY also support other algorithms for the SignerInfo <tt>digestAlgorithm</tt> and SHOULD use algorithms that produce a hash value of a size that is at least twice the collision strength of the internal commitment hash used by ML-DSA.</t>
        <t>Note: The Hash ML-DSA Composite identifiers are relevant here because this algorithm operation mode is not provided in CMS, which is consistent with [I-D.ietf-lamps-cms-ml-dsa].</t>
      </section>
      <section anchor="signeddata-conventions">
        <name>SignedData Conventions</name>
        <t>As specified in CMS <xref target="RFC5652"/>, the digital signature is produced from the message digest and the signer's private key. The signature is computed over different values depending on whether signed attributes are absent or present.</t>
        <t>When signed attributes are absent, the composite signature is computed over the content of the signed-data. The "content" of a signed-data is the value of the encapContentInfo eContent OCTET STRING. The tag and length octets are not included.
When signed attributes are present, a hash is computed over the content using the hash function specified in <xref target="cms-underlying-components"/>, and then a message-digest attribute is constructed to contain the resulting hash value, and then the result of DER encoding the set of signed attributes, which MUST include a content-type attribute and a message-digest attribute, and then the composite signature is computed over the DER-encoded output. In summary:</t>
        <artwork><![CDATA[
IF (signed attributes are absent)
   THEN Composite-ML-DSA.Sign(content)
ELSE message-digest attribute = Hash(content);
   Composite-ML-DSA.Sign(DER(SignedAttributes))
]]></artwork>
        <t>When using Composite Signatures, the fields in the SignerInfo are used as follows:</t>
        <t>digestAlgorithm:
    Per Section 5.3 of <xref target="RFC5652"/>, the digestAlgorithm contains the one-way hash function used by the CMS signer.
    To ensure collision resistance, the identified message digest algorithm SHOULD produce a hash
    value of a size that is at least twice the collision strength of the internal commitment hash used by ML-DSA
    component algorithm of the Composite Signature.</t>
        <t>signatureAlgorithm:
    The signatureAlgorithm MUST contain one of the the Composite Signature algorithm identifiers as specified in <xref target="cms-underlying-components"/>}</t>
        <t>signature:
    The signature field contains the signature value resulting from the composite signing operation of the specified signatureAlgorithm.</t>
      </section>
      <section anchor="signature-generation-and-verification">
        <name>Signature generation and verification</name>
        <t>Composite signatures have a context string input that can be used to ensure that different signatures are generated for different application contexts.  When using composite signatures for CMS, the context string is the empty string.</t>
      </section>
      <section anchor="certificate-conventions">
        <name>Certificate Conventions</name>
        <t>The conventions specified in this section augment RFC 5280 <xref target="RFC5280"/>.</t>
        <t>The willingness to accept a composite Signature Algorithm MAY be signaled by the use of the SMIMECapabilities Attribute as specified in Section 2.5.2. of <xref target="RFC8551"/> or the SMIMECapabilities certificate extension as specified in [RFC4262].</t>
        <t>The intended application for the public key MAY be indicated in the key usage certificate extension as specified in Section 4.2.1.3 of <xref target="RFC5280"/>. If the keyUsage extension is present in a certificate that conveys a composite Signature public key, then the key usage extension MUST contain only the following value:</t>
        <artwork><![CDATA[
digitalSignature
nonRepudiation
keyCertSign
cRLSign
]]></artwork>
        <t>The keyEncipherment and dataEncipherment values MUST NOT be present. That is, a public key intended to be employed only with a composite signature algorithm MUST NOT also be employed for data encryption. This requirement does not carry any particular security consideration; only the convention that signature keys be identified with 'digitalSignature','nonRepudiation','keyCertSign' or 'cRLSign' key usages.</t>
      </section>
      <section anchor="smimecapabilities-attribute-conventions">
        <name>SMIMECapabilities Attribute Conventions</name>
        <t>Section 2.5.2 of <xref 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.</t>
        <t>The SMIMECapability SEQUENCE representing a composite signature Algorithm MUST include the appropriate object identifier as per <xref target="cms-underlying-components"/> in the capabilityID field.</t>
      </section>
    </section>
    <section anchor="sec-asn1-module">
      <name>ASN.1 Module</name>
      <sourcecode type="asn.1"><![CDATA[
<CODE STARTS>

Composite-MLDSA-2025
  { iso(1) identified-organization(3) dod(6) internet(1)
        security(5) mechanisms(5) pkix(7) id-mod(0)
        id-mod-composite-mldsa-2025(TBDMOD) }


DEFINITIONS IMPLICIT TAGS ::= BEGIN

EXPORTS ALL;

IMPORTS
  PUBLIC-KEY, SIGNATURE-ALGORITHM, SMIME-CAPS, AlgorithmIdentifier{}
    FROM AlgorithmInformation-2009  -- RFC 5912 [X509ASN1]
      { iso(1) identified-organization(3) dod(6) internet(1)
        security(5) mechanisms(5) pkix(7) id-mod(0)
        id-mod-algorithmInformation-02(58) }
;

--
-- Object Identifiers
--

-- Defined in ITU-T X.690
der OBJECT IDENTIFIER ::=
  {joint-iso-itu-t asn1(1) ber-derived(2) distinguished-encoding(1)}

--
-- Signature Algorithm
--

--
-- Composite Signature basic structures
--

--
-- When a CompositeMLDSAPublicKey is used with an RSA public key, the BIT STRING is generated
-- by the concatenation of a raw ML-DSA key according to {{I-D.ietf-lamps-dilithium-certificates}},
-- and an RSAPublicKey (which is a DER encoded RSAPublicKey).

-- When a CompositeMLDSAPublicKey is used with an EC public key, the BIT STRING is generated
-- by the concatenation of a raw ML-DSA key according to {{I-D.ietf-lamps-dilithium-certificates}}
-- and an ECDSAPublicKey according to [RFC5480].

-- When a CompositeMLDSAPublicKey is used with an Edwards public key, the BIT STRING is generated
-- by the concatenation of a raw ML-DSA key according to {{I-D.ietf-lamps-dilithium-certificates}}
-- and a raw Edwards public key according to [RFC8410].

CompositeMLDSAPublicKey ::= BIT STRING

--
-- When a CompositeMLDSAPrivateKey is used with an RSA public key, the OCTET STRING is generated
-- by the concatenation of an ML-DSA private key according to {{I-D.ietf-lamps-dilithium-certificates}},
-- and an RSAPrivateKey (which is a DER encoded RSAPrivateKey).

-- When a CompositeMLDSAPrivateKey is used with an EC public key, the OCTET STRING is generated
-- by the concatenation of an ML-DSA private key according to {{I-D.ietf-lamps-dilithium-certificates}},
-- and an ECDSAPrivateKey according to [RFC5915].

-- When a CompositeMLDSAPrivateKey is used with an Edwards public key, the OCTET STRING is generated
-- by the concatenation of an ML-DSA private key according to {{I-D.ietf-lamps-dilithium-certificates}},
-- and a raw Edwards private key according to [RFC8410].

CompositeMLDSAPrivateKey ::= OCTET STRING

-- Composite Signature Value is just an BIT STRING and is a concatenation of the component signature
-- algorithms.

CompositeSignatureValue ::= BIT STRING


--
-- Information Object Classes
--

pk-CompositeSignature {OBJECT IDENTIFIER:id, PublicKeyType}
    PUBLIC-KEY ::= {
      IDENTIFIER id
      KEY PublicKeyType
      PARAMS ARE absent
      CERT-KEY-USAGE { digitalSignature, nonRepudiation, keyCertSign, cRLSign}
    }

sa-CompositeSignature{OBJECT IDENTIFIER:id,
   PUBLIC-KEY:publicKeyType }
      SIGNATURE-ALGORITHM ::=  {
         IDENTIFIER id
         VALUE CompositeSignatureValue
         PARAMS ARE absent
         PUBLIC-KEYS {publicKeyType}
      }

-- PURE Version of OIDS

-- TODO: OID to be replaced by IANA
id-MLDSA44-RSA2048-PSS OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 60 }

pk-MLDSA44-RSA2048-PSS PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA44-RSA2048-PSS,
  CompositeMLDSAPublicKey}

sa-MLDSA44-RSA2048-PSS SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA44-RSA2048-PSS,
       pk-MLDSA44-RSA2048-PSS }

-- TODO: OID to be replaced by IANA
id-MLDSA44-RSA2048-PKCS15 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 61 }

pk-MLDSA44-RSA2048-PKCS15 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA44-RSA2048-PKCS15,
  CompositeMLDSAPublicKey}

sa-MLDSA44-RSA2048-PKCS15 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA44-RSA2048-PKCS15,
       pk-MLDSA44-RSA2048-PKCS15 }


-- TODO: OID to be replaced by IANA
id-MLDSA44-Ed25519 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 62 }

pk-MLDSA44-Ed25519 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA44-Ed25519,
  CompositeMLDSAPublicKey}

sa-MLDSA44-Ed25519 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA44-Ed25519,
       pk-MLDSA44-Ed25519 }


-- TODO: OID to be replaced by IANA
id-MLDSA44-ECDSA-P256 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 63 }

pk-MLDSA44-ECDSA-P256 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA44-ECDSA-P256,
  CompositeMLDSAPublicKey}

sa-MLDSA44-ECDSA-P256 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA44-ECDSA-P256,
       pk-MLDSA44-ECDSA-P256 }


-- TODO: OID to be replaced by IANA
id-MLDSA65-RSA3072-PSS OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 64 }

pk-MLDSA65-RSA3072-PSS PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA65-RSA3072-PSS,
  CompositeMLDSAPublicKey}

sa-MLDSA65-RSA3072-PSS SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA65-RSA3072-PSS,
       pk-MLDSA65-RSA3072-PSS }


-- TODO: OID to be replaced by IANA
id-MLDSA65-RSA3072-PKCS15 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 65 }

pk-MLDSA65-RSA3072-PKCS15 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA65-RSA3072-PKCS15,
  CompositeMLDSAPublicKey}

sa-MLDSA65-RSA3072-PKCS15 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA65-RSA3072-PKCS15,
       pk-MLDSA65-RSA3072-PKCS15 }

-- TODO: OID to be replaced by IANA
id-MLDSA65-RSA4096-PSS OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 66 }

pk-MLDSA65-RSA4096-PSS PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA65-RSA4096-PSS,
  CompositeMLDSAPublicKey}

sa-MLDSA65-RSA4096-PSS SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA65-RSA4096-PSS,
       pk-MLDSA65-RSA4096-PSS }


-- TODO: OID to be replaced by IANA
id-MLDSA65-RSA4096-PKCS15 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 67 }

pk-MLDSA65-RSA4096-PKCS15 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA65-RSA4096-PKCS15,
  CompositeMLDSAPublicKey}

sa-MLDSA65-RSA4096-PKCS15 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA65-RSA4096-PKCS15,
       pk-MLDSA65-RSA4096-PKCS15 }


-- TODO: OID to be replaced by IANA
id-MLDSA65-ECDSA-P256 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 68 }

pk-MLDSA65-ECDSA-P256 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA65-ECDSA-P256,
  CompositeMLDSAPublicKey}

sa-MLDSA65-ECDSA-P256 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA65-ECDSA-P256,
       pk-MLDSA65-ECDSA-P256 }


-- TODO: OID to be replaced by IANA
id-MLDSA65-ECDSA-P384 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 69 }

pk-MLDSA65-ECDSA-P384 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA65-ECDSA-P384,
  CompositeMLDSAPublicKey}

sa-MLDSA65-ECDSA-P384 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA65-ECDSA-P384,
       pk-MLDSA65-ECDSA-P384 }


-- TODO: OID to be replaced by IANA
id-MLDSA65-ECDSA-brainpoolP256r1 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 70 }

pk-MLDSA65-ECDSA-brainpoolP256r1 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA65-ECDSA-brainpoolP256r1,
  CompositeMLDSAPublicKey}

sa-MLDSA65-ECDSA-brainpoolP256r1 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA65-ECDSA-brainpoolP256r1,
       pk-MLDSA65-ECDSA-brainpoolP256r1 }


-- TODO: OID to be replaced by IANA
id-MLDSA65-Ed25519 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 71 }

pk-MLDSA65-Ed25519 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA65-Ed25519,
  CompositeMLDSAPublicKey}

sa-MLDSA65-Ed25519 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA65-Ed25519,
       pk-MLDSA65-Ed25519 }

-- TODO: OID to be replaced by IANA
id-MLDSA87-ECDSA-P384 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 72 }

pk-MLDSA87-ECDSA-P384 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA87-ECDSA-P384,
  CompositeMLDSAPublicKey}

sa-MLDSA87-ECDSA-P384 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA87-ECDSA-P384,
       pk-MLDSA87-ECDSA-P384 }


-- TODO: OID to be replaced by IANA
id-MLDSA87-ECDSA-brainpoolP384r1 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 73 }

pk-MLDSA87-ECDSA-brainpoolP384r1 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA87-ECDSA-brainpoolP384r1,
  CompositeMLDSAPublicKey}

sa-MLDSA87-ECDSA-brainpoolP384r1 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA87-ECDSA-brainpoolP384r1,
       pk-MLDSA87-ECDSA-brainpoolP384r1 }


-- TODO: OID to be replaced by IANA
id-MLDSA87-Ed448 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 74 }

pk-MLDSA87-Ed448 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA87-Ed448,
  CompositeMLDSAPublicKey}

sa-MLDSA87-Ed448 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA87-Ed448,
       pk-MLDSA87-Ed448 }

-- TODO: OID to be replaced by IANA
id-MLDSA87- OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 75 }

pk-MLDSA87-RSA4096-PSS PUBLIC-KEY ::=
  pk-CompositeSignature{ id-MLDSA87-RSA4096-PSS,
  CompositeMLDSAPublicKey}

sa-MLDSA87-RSA4096-PSS SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-MLDSA87-RSA4096-PSS,
       pk-MLDSA87-RSA4096-PSS }

-- PreHash Version of the OIDs

-- TODO: OID to be replaced by IANA
id-HashMLDSA44-RSA2048-PSS-SHA256 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 80 }

pk-HashMLDSA44-RSA2048-PSS-SHA256 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA44-RSA2048-PSS-SHA256,
  CompositeMLDSAPublicKey}

sa-HashMLDSA44-RSA2048-PSS-SHA256 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA44-RSA2048-PSS-SHA256,
       pk-HashMLDSA44-RSA2048-PSS-SHA256 }

-- TODO: OID to be replaced by IANA
id-HashMLDSA44-RSA2048-PKCS15-SHA256 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 81 }

pk-HashMLDSA44-RSA2048-PKCS15-SHA256 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA44-RSA2048-PKCS15-SHA256,
  CompositeMLDSAPublicKey}

sa-HashMLDSA44-RSA2048-PKCS15-SHA256 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA44-RSA2048-PKCS15-SHA256,
       pk-HashMLDSA44-RSA2048-PKCS15-SHA256 }


-- TODO: OID to be replaced by IANA
id-HashMLDSA44-Ed25519-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 82 }

pk-HashMLDSA44-Ed25519-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA44-Ed25519-SHA512,
  CompositeMLDSAPublicKey}

sa-HashMLDSA44-Ed25519-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA44-Ed25519-SHA512,
       pk-HashMLDSA44-Ed25519-SHA512 }


-- TODO: OID to be replaced by IANA
id-HashMLDSA44-ECDSA-P256-SHA256 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 83 }

pk-HashMLDSA44-ECDSA-P256-SHA256 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA44-ECDSA-P256-SHA256,
  CompositeMLDSAPublicKey}

sa-HashMLDSA44-ECDSA-P256-SHA256 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA44-ECDSA-P256-SHA256,
       pk-HashMLDSA44-ECDSA-P256-SHA256 }


-- TODO: OID to be replaced by IANA
id-HashMLDSA65-RSA3072-PSS-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 84 }

pk-HashMLDSA65-RSA3072-PSS-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA65-RSA3072-PSS-SHA512,
  CompositeMLDSAPublicKey}

sa-HashMLDSA65-RSA3072-PSS-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA65-RSA3072-PSS-SHA512,
       pk-HashMLDSA65-RSA3072-PSS-SHA512 }


-- TODO: OID to be replaced by IANA
id-HashMLDSA65-RSA3072-PKCS15-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 85 }

pk-HashMLDSA65-RSA3072-PKCS15-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA65-RSA3072-PKCS15-SHA512,
  CompositeMLDSAPublicKey}

sa-HashMLDSA65-RSA3072-PKCS15-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA65-RSA3072-PKCS15-SHA512,
       pk-HashMLDSA65-RSA3072-PKCS15-SHA512 }

-- TODO: OID to be replaced by IANA
id-HashMLDSA65-RSA4096-PSS-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 86 }

pk-HashMLDSA65-RSA4096-PSS-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA65-RSA4096-PSS-SHA512,
  CompositeMLDSAPublicKey}

sa-HashMLDSA65-RSA4096-PSS-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA65-RSA4096-PSS-SHA512,
       pk-HashMLDSA65-RSA4096-PSS-SHA512 }


-- TODO: OID to be replaced by IANA
id-HashMLDSA65-RSA4096-PKCS15-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 87 }

pk-HashMLDSA65-RSA4096-PKCS15-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA65-RSA4096-PKCS15-SHA512,
  CompositeMLDSAPublicKey}

sa-HashMLDSA65-RSA4096-PKCS15-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA65-RSA4096-PKCS15-SHA512,
       pk-HashMLDSA65-RSA4096-PKCS15-SHA512 }


-- TODO: OID to be replaced by IANA
id-HashMLDSA65-ECDSA-P256-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 88 }

pk-HashMLDSA65-ECDSA-P256-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA65-ECDSA-P256-SHA512,
  CompositeMLDSAPublicKey}

sa-HashMLDSA65-ECDSA-P256-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA65-ECDSA-P256-SHA512,
       pk-HashMLDSA65-ECDSA-P256-SHA512 }




-- TODO: OID to be replaced by IANA
id-HashMLDSA65-ECDSA-P384-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 89 }

pk-HashMLDSA65-ECDSA-P384-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA65-ECDSA-P384-SHA512,
  CompositeMLDSAPublicKey}

sa-HashMLDSA65-ECDSA-P384-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA65-ECDSA-P384-SHA512,
       pk-HashMLDSA65-ECDSA-P384-SHA512 }


-- TODO: OID to be replaced by IANA
id-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 90 }

pk-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512,
  CompositeMLDSAPublicKey}

sa-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512,
       pk-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512 }


-- TODO: OID to be replaced by IANA
id-HashMLDSA65-Ed25519-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 91 }

pk-HashMLDSA65-Ed25519-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA65-Ed25519-SHA512,
  CompositeMLDSAPublicKey}

sa-HashMLDSA65-Ed25519-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA65-Ed25519-SHA512,
       pk-HashMLDSA65-Ed25519-SHA512 }


-- TODO: OID to be replaced by IANA
id-HashMLDSA87-ECDSA-P384-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 92 }

pk-HashMLDSA87-ECDSA-P384-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA87-ECDSA-P384-SHA512,
  CompositeMLDSAPublicKey}

sa-HashMLDSA87-ECDSA-P384-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA87-ECDSA-P384-SHA512,
       pk-HashMLDSA87-ECDSA-P384-SHA512 }


-- TODO: OID to be replaced by IANA
id-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 93 }

pk-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512,
  CompositeMLDSAPublicKey}

sa-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512,
       pk-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512 }


-- TODO: OID to be replaced by IANA
id-HashMLDSA87-Ed448-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 94 }

pk-HashMLDSA87-Ed448-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA87-Ed448-SHA512,
  CompositeMLDSAPublicKey}

sa-HashMLDSA87-Ed448-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA87-Ed448-SHA512,
       pk-HashMLDSA87-Ed448-SHA512 }


-- TODO: OID to be replaced by IANA
id-HashMLDSA87-RSA4096-PSS-SHA512 OBJECT IDENTIFIER ::= {
   joint-iso-itu-t(2) country(16) us(840) organization(1)
   entrust(114027) algorithm(80) composite(8) signature(1) 95 }

pk-HashMLDSA87-RSA4096-PSS-SHA512 PUBLIC-KEY ::=
  pk-CompositeSignature{ id-HashMLDSA87-RSA4096-PSS-SHA512,
  CompositeMLDSAPublicKey}

sa-HashMLDSA87-RSA4096-PSS-SHA512 SIGNATURE-ALGORITHM ::=
    sa-CompositeSignature{
       id-HashMLDSA87-RSA4096-PSS-SHA512,
       pk-HashMLDSA87-RSA4096-PSS-SHA512 }
           

SignatureAlgorithmSet SIGNATURE-ALGORITHM ::= {
  sa-MLDSA44-RSA2048-PSS |
  sa-MLDSA44-RSA2048-PKCS15 |
  sa-MLDSA44-Ed25519 |
  sa-MLDSA44-ECDSA-P256 |
  sa-MLDSA65-RSA3072-PSS |
  sa-MLDSA65-RSA3072-PKCS15 |
  sa-MLDSA65-RSA4096-PSS |
  sa-MLDSA65-RSA4096-PKCS15 |
  sa-MLDSA65-ECDSA-P256 |
  sa-MLDSA65-ECDSA-P384 |
  sa-MLDSA65-ECDSA-brainpoolP256r1 |
  sa-MLDSA65-Ed25519 |
  sa-MLDSA87-ECDSA-P384 |
  sa-MLDSA87-ECDSA-brainpoolP384r1 |
  sa-MLDSA87-Ed448 |
  sa-MLDSA87-RSA4096-PSS |  
  sa-HashMLDSA44-RSA2048-PSS-SHA256 |
  sa-HashMLDSA44-RSA2048-PKCS15-SHA256 |
  sa-HashMLDSA44-Ed25519-SHA512 |
  sa-HashMLDSA44-ECDSA-P256-SHA256 |
  sa-HashMLDSA65-RSA3072-PSS-SHA512 |
  sa-HashMLDSA65-RSA3072-PKCS15-SHA512 |
  sa-HashMLDSA65-RSA4096-PSS-SHA512 |
  sa-HashMLDSA65-RSA4096-PKCS15-SHA512 |
  sa-HashMLDSA65-ECDSA-P256-SHA512 |
  sa-HashMLDSA65-ECDSA-P384-SHA512 |
  sa-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512 |
  sa-HashMLDSA65-Ed25519-SHA512 |
  sa-HashMLDSA87-ECDSA-P384-SHA512 |
  sa-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512 |
  sa-HashMLDSA87-Ed448-SHA512 |
  sa-HashMLDSA87-RSA4096-PSS-SHA512,
  ... }


--
-- Expand the S/MIME capabilities set used by CMS [RFC5911]
--

-- TODO: this doesn't compile, error:
-- "The referenced object in the 'ValueFromObject' 
-- syntax with the field '&smimeCaps' is invalid or does not exist."
-- We need help from an SMIME expert

SMimeCaps SMIME-CAPS ::= {
  sa-MLDSA44-RSA2048-PSS.&smimeCaps |
  sa-MLDSA44-RSA2048-PKCS15.&smimeCaps |
  sa-MLDSA44-Ed25519.&smimeCaps |
  sa-MLDSA44-ECDSA-P256.&smimeCaps |
  sa-MLDSA65-RSA3072-PSS.&smimeCaps |
  sa-MLDSA65-RSA3072-PKCS15.&smimeCaps |
  sa-MLDSA65-RSA4096-PSS.&smimeCaps |
  sa-MLDSA65-RSA4096-PKCS15.&smimeCaps |
  sa-MLDSA65-ECDSA-P256.&smimeCaps |
  sa-MLDSA65-ECDSA-P384.&smimeCaps |
  sa-MLDSA65-ECDSA-brainpoolP256r1.&smimeCaps |
  sa-MLDSA65-Ed25519.&smimeCaps |
  sa-MLDSA87-ECDSA-P384.&smimeCaps |
  sa-MLDSA87-ECDSA-brainpoolP384r1.&smimeCaps |
  sa-MLDSA87-Ed448.&smimeCaps |
  sa-MLDSA87-RSA4096-PSS.&smimeCaps |  
  sa-HashMLDSA44-RSA2048-PSS-SHA256.&smimeCaps |
  sa-HashMLDSA44-RSA2048-PKCS15-SHA256.&smimeCaps |
  sa-HashMLDSA44-Ed25519-SHA512.&smimeCaps |
  sa-HashMLDSA44-ECDSA-P256-SHA256.&smimeCaps |
  sa-HashMLDSA65-RSA3072-PSS-SHA512.&smimeCaps |
  sa-HashMLDSA65-RSA3072-PKCS15-SHA512.&smimeCaps |
  sa-HashMLDSA65-RSA4096-PSS-SHA512.&smimeCaps |
  sa-HashMLDSA65-RSA4096-PKCS15-SHA512.&smimeCaps |
  sa-HashMLDSA65-ECDSA-P256-SHA512.&smimeCaps |
  sa-HashMLDSA65-ECDSA-P384-SHA512.&smimeCaps |
  sa-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512.&smimeCaps |
  sa-HashMLDSA65-Ed25519-SHA512.&smimeCaps |
  sa-HashMLDSA87-ECDSA-P384-SHA512.&smimeCaps |
  sa-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512.&smimeCaps |
  sa-HashMLDSA87-Ed448-SHA512.&smimeCaps |
  sa-HashMLDSA87-RSA4096-PSS-SHA512.&smimeCaps,
  ... }

END

<CODE ENDS>

]]></sourcecode>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <t>IANA is requested to allocate a value from the "SMI Security for PKIX Module Identifier" registry <xref target="RFC7299"/> for the included ASN.1 module, and allocate values from "SMI Security for PKIX Algorithms" to identify the fourteen Algorithms defined within.</t>
      <section anchor="object-identifier-allocations">
        <name>Object Identifier Allocations</name>
        <t>EDNOTE to IANA: OIDs will need to be replaced in both the ASN.1 module and in <xref target="tab-sig-algs"/> and <xref target="tab-hash-sig-algs"/>.</t>
        <section anchor="module-registration-smi-security-for-pkix-module-identifier">
          <name>Module Registration - SMI Security for PKIX Module Identifier</name>
          <ul spacing="normal">
            <li>
              <t>Decimal: IANA Assigned - <strong>Replace TBDMOD</strong></t>
            </li>
            <li>
              <t>Description: Composite-Signatures-2023 - id-mod-composite-signatures</t>
            </li>
            <li>
              <t>References: This Document</t>
            </li>
          </ul>
        </section>
        <section anchor="object-identifier-registrations-smi-security-for-pkix-algorithms">
          <name>Object Identifier Registrations - SMI Security for PKIX Algorithms</name>
          <ul spacing="normal">
            <li>
              <t>id-MLDSA44-RSA2048-PSS
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-MLDSA44-RSA2048-PSS</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLDSA44-RSA2048-PKCS15
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-MLDSA44-RSA2048-PKCS15</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLDSA44-Ed25519
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-MLDSA44-Ed25519</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLDSA44-ECDSA-P256
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-MLDSA44-ECDSA-P256</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLDSA65-RSA3072-PSS
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-MLDSA65-RSA3072-PSS</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLDSA65-RSA3072-PKCS15
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-MLDSA65-RSA3072-PKCS15</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLDSA65-RSA4096-PSS
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-MLDSA65-RSA4096-PSS</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLDSA65-RSA4096-PKCS15
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-MLDSA65-RSA4096-PKCS15</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLDSA65-ECDSA-P256
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-MLDSA65-ECDSA-P256</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLDSA65-ECDSA-P384
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-MLDSA65-ECDSA-P384</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLDSA65-ECDSA-brainpoolP256r1
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-MLDSA65-ECDSA-brainpoolP256r1</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLDSA65-Ed25519
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-MLDSA65-Ed25519</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLDSA87-ECDSA-P384
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-MLDSA87-ECDSA-P384</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLDSA87-ECDSA-brainpoolP384r1
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-MLDSA87-ECDSA-brainpoolP384r1</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLDSA87-Ed448
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-MLDSA87-Ed448</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-MLDSA87-RSA4096-PSS
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-MLDSA87-RSA4096-PSS</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-HashMLDSA44-RSA2048-PSS-SHA256
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-HashMLDSA44-RSA2048-PSS-SHA256</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-HashMLDSA44-RSA2048-PKCS15-SHA256
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-HashMLDSA44-RSA2048-PKCS15-SHA256</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-HashMLDSA44-Ed25519-SHA512
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-HashMLDSA44-Ed25519-SHA512</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-HashMLDSA44-ECDSA-P256-SHA256
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-HashMLDSA44-ECDSA-P256-SHA256</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-HashMLDSA65-RSA3072-PSS-SHA512
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-HashMLDSA65-RSA3072-PSS-SHA512</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-HashMLDSA65-RSA3072-PKCS15-SHA512
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-HashMLDSA65-RSA3072-PKCS15-SHA512</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-HashMLDSA65-RSA4096-PSS-SHA512
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-HashMLDSA65-RSA4096-PSS-SHA512</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-HashMLDSA65-RSA4096-PKCS15-SHA512
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-HashMLDSA65-RSA4096-PKCS15-SHA512</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-HashMLDSA65-ECDSA-P256-SHA512
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-HashMLDSA65-ECDSA-P256-SHA512</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-HashMLDSA65-ECDSA-P384-SHA512
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-HashMLDSA65-ECDSA-P384-SHA512</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-HashMLDSA65-ECDSA-brainpoolP256r1-SHA512</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-HashMLDSA65-Ed25519-SHA512
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-HashMLDSA65-Ed25519-SHA512</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-HashMLDSA87-ECDSA-P384-SHA512
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-HashMLDSA87-ECDSA-P384-SHA512</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-HashMLDSA87-ECDSA-brainpoolP384r1-SHA512</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-HashMLDSA87-Ed448-SHA512
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-HashMLDSA87-Ed448-SHA512</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
            <li>
              <t>id-HashMLDSA87-RSA4096-PSS-SHA512
              </t>
              <ul spacing="normal">
                <li>
                  <t>Decimal: IANA Assigned</t>
                </li>
                <li>
                  <t>Description:  id-HashMLDSA87-RSA4096-PSS-SHA512</t>
                </li>
                <li>
                  <t>References: This Document</t>
                </li>
              </ul>
            </li>
          </ul>
          <!-- End of IANA Considerations section -->

</section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="why-hybrids">
        <name>Why Hybrids?</name>
        <t>In broad terms, a PQ/T Hybrid can be used either to provide dual-algorithm security or to provide migration flexibility. Let's quickly explore both.</t>
        <t>Dual-algorithm security. The general idea is that the data is proctected by two algorithms such that an attacker would need to break both in order to compromise the data. As with most of cryptography, this property is easy to state in general terms, but becomes more complicated when expressed in formalisms. <xref target="sec-cons-non-separability"/> goes into more detail here. One common counter-argument against PQ/T hybrid signatures is that if an attacker can forge one of the component algorithms, then why attack the hybrid-signed message at all when they could simply forge a completely new message? The answer to this question must be found outside the cryptographic primitives themselves, and instead in policy; once an algorithm is known to be broken it ought to be disallowed for single-algorithm use by cryptographic policy, while hybrids involving that algorithm may continue to be used and to provide value.</t>
        <t>Migration flexibility. Some PQ/T hybrids exist to provide a sort of "OR" mode where the client can choose to use one algorithm or the other or both. The intention is that the PQ/T hybrid mechanism builds in backwards compatibility to allow legacy and upgraded clients to co-exist and communicate. The Composites presented in this specification do not provide this since they operate in a strict "AND" mode, but they do provide codebase migration flexibility. Consider that an organization has today a mature, validated, certified, hardened implementation of RSA or ECC. Composites allow them to add to this an ML-DSA implementation which immediately starts providing benefits against long-term document integrity attacks even if that ML-DSA implemtation is still experimental, non-validated, non-certified, non-hardened implementation. More details of obtaining FIPS certification of a composite algorithm can be found in <xref target="sec-fips"/>.</t>
      </section>
      <section anchor="sec-cons-non-separability">
        <name>Non-separability, EUF-CMA and SUF</name>
        <t>The signature combiner defined in this document is Weakly Non-Separable (WNS), as defined in <xref target="I-D.ietf-pquip-hybrid-signature-spectrums"/>, since the forged message <tt>M’</tt> will include the composite domain separator as evidence. The prohibition on key reuse between composite and single-algorithm contexts discussed in <xref target="sec-cons-key-reuse"/> further strengthens the non-separability in practice, but does not achieve Strong Non-Separability (SNS) since policy mechanisms such as this are outside the definition of SNS.</t>
        <t>Unforgeability properties are somewhat more nuanced. We recall first the definitions of Exitential Unforgeability under Chosen Message Attack (EUF-CMA) and Strong Unforgeability (SUF).The classic EUF-CMA game is in reference to a pair of algorithms <tt>( Sign(), Verify() )</tt> where the attacker has access to a signing oracle using the <tt>Sign()</tt> and must produce a message-signature pair <tt>(m', s')</tt> that is accepted by the verifier using <tt>Verify()</tt> and where <tt>m</tt> was never signed by the oracle. SUF requires that the attacker cannot construct a new signature to an already-signed message.</t>
        <t>The pair <tt>( CompositeML-DSA.Sign(), CompositeML-DSA.Verify() )</tt> is EUF-CMA secure so long as at least one component algorithm is EUF-CMA secure since any attempt to modify the message would cause the EUF-CMA secure component to fail its <tt>Verify()</tt> which in turn will cause <tt>CompositeML-DSA.Verify()</tt> to fail.</t>
        <t>CompositeML-DSA only achieves SUF security if both components are SUF secure, which is not a useful property; the argument is that if the first component algorithm is not SUF secure then by definition it admits at least one <tt>(m, s1*)</tt> pair where <tt>s1*</tt> was not produced by the honest signer and it then can be combined with an honestly-signed <tt>(m, s2)</tt> signature over the same message <tt>m</tt> to create <tt>(m, (s1*, s2))</tt> which violates SUF for the composite algorithm. Of the traditional signature component algorithms used in this specification, only Ed25519 and Ed448 are SUF secure and therefore applications that require SUF security to be maintained even in the event that ML-DSA is broken SHOULD use it in composite with Ed25519 or Ed448.</t>
        <t>In addition to the classic EUF-CMA game, we should also consider a “cross-protocol” version of the EUF-CMA game that is relevant to hybrids. Specifically, we want to consider a modified version of the EUF-CMA game where the attacker has access to either a signing oracle over the two component algorithms in isolation, <tt>Trad.Sign()</tt> and <tt>ML-DSA.Sign()</tt>, and attempts to fraudulently present them as a composite, or where the attacker has access to a composite oracle for signing and then attempts to split the signature back into components and present them to either <tt>ML-DSA.Verify()</tt> or <tt>Trad.Verify()</tt>.</t>
        <t>In the case of CompositeML-DSA, a specific message forgery exists for a cross-protocol EUF-CMA attack, namely introduced by the prefix construction added to M. This applies to use of individual component signing oracles with fraudulent presentation of the signature to a composite verification oracle, and use of a composite signing oracle with fraudulent splitting of the signature for presentation to component verification oracle(s) of either ML-DSA.Verify() or Trad.Verify(). In the first case, an attacker with access to signing oracles for the two component algorithms can sign <tt>M’</tt> and then trivially assemble a composite. In the second case, the message <tt>M’</tt> (containing the composite domain separator) can be presented as having been signed by a standalone component algorithm. However, use of the context string for domain separation enables Weak Non-Separability and auditable checks on hybrid use, which is deemed a reasonable trade-off. Moreover and very importantly, the cross-protocol EUF-CMA attack in either direction is foiled if implementors strictly follow the prohibition on key reuse presented in <xref target="sec-cons-key-reuse"/> since there cannot exist simultaneously composite and non-composite signers and verifiers for the same keys.</t>
      </section>
      <section anchor="sec-cons-key-reuse">
        <name>Key Reuse</name>
        <t>When using single-algorithm cryptography, the best practice is to always generate fresh key material for each purpose, for example when renewing a certificate, or obtaining both a TLS and S/MIME certificate for the same device, however in practice key reuse in such scenarios is not always catastrophic to security and therefore often tolerated, despite cross-protocol attacks having been shown. (citation needed here)</t>
        <t>Within the broader context of PQ / Traditional hybrids, we need to consider new attack surfaces that arise due to the hybrid constructions that did not exist in single-algorithm contexts. One of these is key reuse where the component keys within a hybrid are also used by themselves within a single-algorithm context. For example, it might be tempting for an operator to take an already-deployed RSA key pair and combine it with an ML-DSA key pair to form a hybrid key pair for use in a hybrid algorithm. Within a hybrid signature context this leads to a class of attacks referred to as "stripping attacks" discussed in <xref target="sec-cons-non-separability"/> and may also open up risks from further cross-protocol attacks. Despite the weak non-separability property offered by the composite signature combiner, key reuse MUST be avoided to prevent the introduction of EUF-CMA vulnerabilities.</t>
        <t>In addition, there is a further implication to key reuse regarding certificate revocation. Upon receiving a new certificate enrollment request, many certification authorities will check if the requested public key has been previously revoked due to key compromise. Often a CA will perform this check by using the public key hash. Therefore, even if both components of a composite have been previously revoked, the CA may only check the hash of the combined composite key and not find the revocations. Therefore, because the possibilty of key reuse exists even though forbidden in this specification, CAs performing revocation checks on a composite key SHOULD also check both component keys independently to verify that the component keys have not been revoked.</t>
      </section>
      <section anchor="policy-for-deprecated-and-acceptable-algorithms">
        <name>Policy for Deprecated and Acceptable Algorithms</name>
        <t>Traditionally, a public key, certificate, or signature contains a single cryptographic algorithm. If and when an algorithm becomes deprecated (for example, RSA-512, or SHA1), then clients performing signatures or verifications should be updated to adhere to appropriate policies.</t>
        <t>In the composite model this is less obvious since implementers may decide that certain cryptographic algorithms have complementary security properties and are acceptable in combination even though one or both algorithms are deprecated for individual use. As such, a single composite public key or certificate may contain a mixture of deprecated and non-deprecated algorithms.</t>
        <t>Since composite algorithms are registered independently of their component algorithms, their deprecation can be handled independently from that of their component algorithms. For example a cryptographic policy might continue to allow <tt>id-MLDSA65-ECDSA-P256-SHA512</tt> even after ECDSA-P256 is deprecated.</t>
        <t>When considering stripping attacks, one need consider the case where an attacker has fully compromised one of the component algorithms to the point that they can produce forged signatures that appear valid under one of the component public keys, and thus fool a victim verifier into accepting a forged signature. The protection against this attack relies on the victim verifier trusting the pair of public keys as a single composite key, and not trusting the individual component keys by themselves.</t>
        <t>Specifically, in order to achieve this non-separability property, this specification makes two assumptions about how the verifier will establish trust in a composite public key:</t>
        <ol spacing="normal" type="1"><li>
            <t>This specification assumes that all of the component keys within a composite key are freshly generated for the composite; ie a given public key MUST NOT appear as a component within a composite key and also within single-algorithm constructions.</t>
          </li>
          <li>
            <t>This specification assumes that composite public keys will be bound in a structure that contains a signature over the public key (for example, an X.509 Certificate <xref target="RFC5280"/>), which is chained back to a trust anchor, and where that signature algorithm is at least as strong as the composite public key that it is protecting.</t>
          </li>
        </ol>
        <t>There are mechanisms within Internet PKI where trusted public keys do not appear within signed structures -- such as the Trust Anchor format defined in <xref target="RFC5914"/>. In such cases, it is the responsibility of implementers to ensure that trusted composite keys are distributed in a way that is tamper-resistant and does not allow the component keys to be trusted independently.</t>
      </section>
      <section anchor="use-of-prefix-to-for-attack-mitigation">
        <name>Use of Prefix to for attack mitigation</name>
        <t>The Prefix value specified in the message format calculated in <xref target="sec-sigs"/> can be used by a traditional verifier to detect if the composite signature has been stripped apart.  An attacker would need to compute <tt>M' = Prefix || Domain || len(ctx) || ctx || M</tt>  or  <tt>M' :=  Prefix || Domain || len(ctx) || ctx || HashOID || PH(M)</tt>.  Since the Prefix is the constant String "CompositeAlgorithmSignatures2025" (Byte encoding 436F6D706F73697465416C676F726974686D5369676E61747572657332303235 ) a traditional verifier can check if the Message starts with this prefix and reject the message.</t>
        <!-- End of Security Considerations section -->

<!-- Start of Appendices -->

</section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <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="RFC2986" target="https://www.rfc-editor.org/info/rfc2986" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2986.xml">
          <front>
            <title>PKCS #10: Certification Request Syntax Specification Version 1.7</title>
            <author fullname="M. Nystrom" initials="M." surname="Nystrom"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <date month="November" year="2000"/>
            <abstract>
              <t>This memo represents a republication of PKCS #10 v1.7 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series, and change control is retained within the PKCS process. The body of this document, except for the security considerations section, is taken directly from the PKCS #9 v2.0 or the PKCS #10 v1.7 document. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2986"/>
          <seriesInfo name="DOI" value="10.17487/RFC2986"/>
        </reference>
        <reference anchor="RFC4210" target="https://www.rfc-editor.org/info/rfc4210" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4210.xml">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate Management Protocol (CMP)</title>
            <author fullname="C. Adams" initials="C." surname="Adams"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="T. Kause" initials="T." surname="Kause"/>
            <author fullname="T. Mononen" initials="T." surname="Mononen"/>
            <date month="September" year="2005"/>
            <abstract>
              <t>This document describes the Internet X.509 Public Key Infrastructure (PKI) Certificate Management Protocol (CMP). Protocol messages are defined for X.509v3 certificate creation and management. CMP provides on-line interactions between PKI components, including an exchange between a Certification Authority (CA) and a client system. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4210"/>
          <seriesInfo name="DOI" value="10.17487/RFC4210"/>
        </reference>
        <reference anchor="RFC4211" target="https://www.rfc-editor.org/info/rfc4211" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4211.xml">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate Request Message Format (CRMF)</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="September" year="2005"/>
            <abstract>
              <t>This document describes the Certificate Request Message Format (CRMF) syntax and semantics. This syntax is used to convey a request for a certificate to a Certification Authority (CA), possibly via a Registration Authority (RA), for the purposes of X.509 certificate production. The request will typically include a public key and the associated registration information. This document does not define a certificate request protocol. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4211"/>
          <seriesInfo name="DOI" value="10.17487/RFC4211"/>
        </reference>
        <reference anchor="RFC5280" target="https://www.rfc-editor.org/info/rfc5280" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5280.xml">
          <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>
        <reference anchor="RFC5480" target="https://www.rfc-editor.org/info/rfc5480" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5480.xml">
          <front>
            <title>Elliptic Curve Cryptography Subject Public Key Information</title>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <author fullname="D. Brown" initials="D." surname="Brown"/>
            <author fullname="K. Yiu" initials="K." surname="Yiu"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="T. Polk" initials="T." surname="Polk"/>
            <date month="March" year="2009"/>
            <abstract>
              <t>This document specifies the syntax and semantics for the Subject Public Key Information field in certificates that support Elliptic Curve Cryptography. This document updates Sections 2.3.5 and 5, and the ASN.1 module of "Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile", RFC 3279. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5480"/>
          <seriesInfo name="DOI" value="10.17487/RFC5480"/>
        </reference>
        <reference anchor="RFC5639" target="https://www.rfc-editor.org/info/rfc5639" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5639.xml">
          <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="RFC5652" target="https://www.rfc-editor.org/info/rfc5652" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5652.xml">
          <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="RFC5758" target="https://www.rfc-editor.org/info/rfc5758" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5758.xml">
          <front>
            <title>Internet X.509 Public Key Infrastructure: Additional Algorithms and Identifiers for DSA and ECDSA</title>
            <author fullname="Q. Dang" initials="Q." surname="Dang"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="K. Moriarty" initials="K." surname="Moriarty"/>
            <author fullname="D. Brown" initials="D." surname="Brown"/>
            <author fullname="T. Polk" initials="T." surname="Polk"/>
            <date month="January" year="2010"/>
            <abstract>
              <t>This document updates RFC 3279 to specify algorithm identifiers and ASN.1 encoding rules for the Digital Signature Algorithm (DSA) and Elliptic Curve Digital Signature Algorithm (ECDSA) digital signatures when using SHA-224, SHA-256, SHA-384, or SHA-512 as the hashing algorithm. This specification applies to the Internet X.509 Public Key infrastructure (PKI) when digital signatures are used to sign certificates and certificate revocation lists (CRLs). This document also identifies all four SHA2 hash algorithms for use in the Internet X.509 PKI. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5758"/>
          <seriesInfo name="DOI" value="10.17487/RFC5758"/>
        </reference>
        <reference anchor="RFC5958" target="https://www.rfc-editor.org/info/rfc5958" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5958.xml">
          <front>
            <title>Asymmetric Key Packages</title>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>This document defines the syntax for private-key information and a content type for it. Private-key information includes a private key for a specified public-key algorithm and a set of attributes. The Cryptographic Message Syntax (CMS), as defined in RFC 5652, can be used to digitally sign, digest, authenticate, or encrypt the asymmetric key format content type. This document obsoletes RFC 5208. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5958"/>
          <seriesInfo name="DOI" value="10.17487/RFC5958"/>
        </reference>
        <reference anchor="RFC6090" target="https://www.rfc-editor.org/info/rfc6090" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6090.xml">
          <front>
            <title>Fundamental Elliptic Curve Cryptography Algorithms</title>
            <author fullname="D. McGrew" initials="D." surname="McGrew"/>
            <author fullname="K. Igoe" initials="K." surname="Igoe"/>
            <author fullname="M. Salter" initials="M." surname="Salter"/>
            <date month="February" year="2011"/>
            <abstract>
              <t>This note describes the fundamental algorithms of Elliptic Curve Cryptography (ECC) as they were defined in some seminal references from 1994 and earlier. These descriptions may be useful for implementing the fundamental algorithms without using any of the specialized methods that were developed in following years. Only elliptic curves defined over fields of characteristic greater than three are in scope; these curves are those used in Suite B. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6090"/>
          <seriesInfo name="DOI" value="10.17487/RFC6090"/>
        </reference>
        <reference anchor="RFC6234" target="https://www.rfc-editor.org/info/rfc6234" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6234.xml">
          <front>
            <title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="May" year="2011"/>
            <abstract>
              <t>Federal Information Processing Standard, FIPS</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6234"/>
          <seriesInfo name="DOI" value="10.17487/RFC6234"/>
        </reference>
        <reference anchor="RFC7748" target="https://www.rfc-editor.org/info/rfc7748" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7748.xml">
          <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" target="https://www.rfc-editor.org/info/rfc8032" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8032.xml">
          <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="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <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="RFC8410" target="https://www.rfc-editor.org/info/rfc8410" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8410.xml">
          <front>
            <title>Algorithm Identifiers for Ed25519, Ed448, X25519, and X448 for Use in the Internet X.509 Public Key Infrastructure</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies algorithm identifiers and ASN.1 encoding formats for elliptic curve constructs using the curve25519 and curve448 curves. The signature algorithms covered are Ed25519 and Ed448. The key agreement algorithms covered are X25519 and X448. The encoding for public key, private key, and Edwards-curve Digital Signature Algorithm (EdDSA) structures is provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8410"/>
          <seriesInfo name="DOI" value="10.17487/RFC8410"/>
        </reference>
        <reference anchor="RFC8411" target="https://www.rfc-editor.org/info/rfc8411" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8411.xml">
          <front>
            <title>IANA Registration for the Cryptographic Algorithm Object Identifier Range</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <author fullname="R. Andrews" initials="R." surname="Andrews"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>When the Curdle Security Working Group was chartered, a range of object identifiers was donated by DigiCert, Inc. for the purpose of registering the Edwards Elliptic Curve key agreement and signature algorithms. This donated set of OIDs allowed for shorter values than would be possible using the existing S/MIME or PKIX arcs. This document describes the donated range and the identifiers that were assigned from that range, transfers control of that range to IANA, and establishes IANA allocation policies for any future assignments within that range.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8411"/>
          <seriesInfo name="DOI" value="10.17487/RFC8411"/>
        </reference>
        <reference anchor="X.690">
          <front>
            <title>Information technology - 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="2015" month="November"/>
          </front>
          <seriesInfo name="ISO/IEC" value="8825-1:2015"/>
        </reference>
        <reference anchor="FIPS.186-5" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf">
          <front>
            <title>Digital Signature Standard (DSS)</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2023" month="February"/>
          </front>
        </reference>
        <reference anchor="FIPS.204" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.204.pdf">
          <front>
            <title>Module-Lattice-Based Digital Signature Standard</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2024" month="August"/>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC3279" target="https://www.rfc-editor.org/info/rfc3279" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3279.xml">
          <front>
            <title>Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="L. Bassham" initials="L." surname="Bassham"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="April" year="2002"/>
            <abstract>
              <t>This document specifies algorithm identifiers and ASN.1 encoding formats for digital signatures and subject public keys used in the Internet X.509 Public Key Infrastructure (PKI). Digital signatures are used to sign certificates and certificate revocation list (CRLs). Certificates include the public key of the named subject. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3279"/>
          <seriesInfo name="DOI" value="10.17487/RFC3279"/>
        </reference>
        <reference anchor="RFC5914" target="https://www.rfc-editor.org/info/rfc5914" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5914.xml">
          <front>
            <title>Trust Anchor Format</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="S. Ashmore" initials="S." surname="Ashmore"/>
            <author fullname="C. Wallace" initials="C." surname="Wallace"/>
            <date month="June" year="2010"/>
            <abstract>
              <t>This document describes a structure for representing trust anchor information. A trust anchor is an authoritative entity represented by a public key and associated data. The public key is used to verify digital signatures, and the associated data is used to constrain the types of information or actions for which the trust anchor is authoritative. The structures defined in this document are intended to satisfy the format-related requirements defined in Trust Anchor Management Requirements. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5914"/>
          <seriesInfo name="DOI" value="10.17487/RFC5914"/>
        </reference>
        <reference anchor="RFC7292" target="https://www.rfc-editor.org/info/rfc7292" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7292.xml">
          <front>
            <title>PKCS #12: Personal Information Exchange Syntax v1.1</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
            <author fullname="M. Nystrom" initials="M." surname="Nystrom"/>
            <author fullname="S. Parkinson" initials="S." surname="Parkinson"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <author fullname="M. Scott" initials="M." surname="Scott"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>PKCS #12 v1.1 describes a transfer syntax for personal identity information, including private keys, certificates, miscellaneous secrets, and extensions. Machines, applications, browsers, Internet kiosks, and so on, that support this standard will allow a user to import, export, and exercise a single set of personal identity information. This standard supports direct transfer of personal information under several privacy and integrity modes.</t>
              <t>This document represents a republication of PKCS #12 v1.1 from RSA Laboratories' Public Key Cryptography Standard (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7292"/>
          <seriesInfo name="DOI" value="10.17487/RFC7292"/>
        </reference>
        <reference anchor="RFC7296" target="https://www.rfc-editor.org/info/rfc7296" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7296.xml">
          <front>
            <title>Internet Key Exchange Protocol Version 2 (IKEv2)</title>
            <author fullname="C. Kaufman" initials="C." surname="Kaufman"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="Y. Nir" initials="Y." surname="Nir"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <author fullname="T. Kivinen" initials="T." surname="Kivinen"/>
            <date month="October" year="2014"/>
            <abstract>
              <t>This document describes version 2 of the Internet Key Exchange (IKE) protocol. IKE is a component of IPsec used for performing mutual authentication and establishing and maintaining Security Associations (SAs). This document obsoletes RFC 5996, and includes all of the errata for it. It advances IKEv2 to be an Internet Standard.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="79"/>
          <seriesInfo name="RFC" value="7296"/>
          <seriesInfo name="DOI" value="10.17487/RFC7296"/>
        </reference>
        <reference anchor="RFC7299" target="https://www.rfc-editor.org/info/rfc7299" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7299.xml">
          <front>
            <title>Object Identifier Registry for the PKIX Working Group</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>When the Public-Key Infrastructure using X.509 (PKIX) Working Group was chartered, an object identifier arc was allocated by IANA for use by that working group. This document describes the object identifiers that were assigned in that arc, returns control of that arc to IANA, and establishes IANA allocation policies for any future assignments within that arc.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7299"/>
          <seriesInfo name="DOI" value="10.17487/RFC7299"/>
        </reference>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8446.xml">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8551" target="https://www.rfc-editor.org/info/rfc8551" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8551.xml">
          <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="RFC8017" target="https://www.rfc-editor.org/info/rfc8017" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8017.xml">
          <front>
            <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="J. Jonsson" initials="J." surname="Jonsson"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
              <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
              <t>This document also obsoletes RFC 3447.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8017"/>
          <seriesInfo name="DOI" value="10.17487/RFC8017"/>
        </reference>
        <reference anchor="I-D.ietf-pquip-hybrid-signature-spectrums" target="https://datatracker.ietf.org/doc/html/draft-ietf-pquip-hybrid-signature-spectrums-00" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-pquip-hybrid-signature-spectrums-00.xml">
          <front>
            <title>Hybrid signature spectrums</title>
            <author fullname="Nina Bindel" initials="N." surname="Bindel">
              <organization>SandboxAQ</organization>
            </author>
            <author fullname="Britta Hale" initials="B." surname="Hale">
              <organization>Naval Postgraduate School</organization>
            </author>
            <author fullname="Deirdre Connolly" initials="D." surname="Connolly">
              <organization>SandboxAQ</organization>
            </author>
            <author fullname="Florence D" initials="F." surname="D">
              <organization>UK National Cyber Security Centre</organization>
            </author>
            <date day="24" month="May" year="2024"/>
            <abstract>
              <t>This document describes classification of design goals and security considerations for hybrid digital signature schemes, including proof composability, non-separability of the component signatures given a hybrid signature, backwards/forwards compatiblity, hybrid generality, and simultaneous verification. Discussion of this work is encouraged to happen on the IETF PQUIP mailing list pqc@ietf.org or on the GitHub repository which contains the draft: https://github.com/dconnolly/draft-ietf-pquip-hybrid- signature-spectrums</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-pquip-hybrid-signature-spectrums-00"/>
        </reference>
        <reference anchor="I-D.pala-klaussner-composite-kofn" target="https://datatracker.ietf.org/doc/html/draft-pala-klaussner-composite-kofn-00" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-pala-klaussner-composite-kofn-00.xml">
          <front>
            <title>K-threshold Composite Signatures for the Internet PKI</title>
            <author fullname="Massimiliano Pala" initials="M." surname="Pala">
              <organization>CableLabs Inc.</organization>
            </author>
            <author fullname="Jan Klaußner" initials="J." surname="Klaußner">
              <organization>D-Trust GmbH</organization>
            </author>
            <date day="15" month="November" year="2022"/>
            <abstract>
              <t>With the need to evolve the cryptography used in today applications, devices, and networks, there might be many scenarios where the use of a single-key certificate is not sufficient. For example, there might be the need for migrating between two existing algorithms (e.g., from classic to post-quantum) or there might be the need to test the capabilities of devices via test drivers and/or non-standard algorithms. Differently from the situation where algorithms are not yet (or no more) trusted to be used by themselves, this document addresses the use of multiple keys and signatures that can be individually trusted to implement a generic 1-threshold and K-threshold signature validation procedures. This document provides the definition of a new type of multi- algorithm public key and relies on the definition of CompositePrivateKey, and CompositeSignature which are sequences of the respective structure for each component algorithm as defined in [I-D.ounsworth-pq-composite-sigs] and [I-D.ounsworth-pq-composite-sigs].</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-pala-klaussner-composite-kofn-00"/>
        </reference>
        <reference anchor="I-D.ietf-pquip-pqt-hybrid-terminology" target="https://datatracker.ietf.org/doc/html/draft-ietf-pquip-pqt-hybrid-terminology-04" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-pquip-pqt-hybrid-terminology-04.xml">
          <front>
            <title>Terminology for Post-Quantum Traditional Hybrid Schemes</title>
            <author fullname="Florence D" initials="F." surname="D">
              <organization>UK National Cyber Security Centre</organization>
            </author>
            <author fullname="Michael P" initials="M." surname="P">
              <organization>UK National Cyber Security Centre</organization>
            </author>
            <author fullname="Britta Hale" initials="B." surname="Hale">
              <organization>Naval Postgraduate School</organization>
            </author>
            <date day="10" month="September" year="2024"/>
            <abstract>
              <t>One aspect of the transition to post-quantum algorithms in cryptographic protocols is the development of hybrid schemes that incorporate both post-quantum and traditional asymmetric algorithms. This document defines terminology for such schemes. It is intended to be used as a reference and, hopefully, to ensure consistency and clarity across different protocols, standards, and organisations.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-pquip-pqt-hybrid-terminology-04"/>
        </reference>
        <reference anchor="I-D.ietf-lamps-dilithium-certificates" target="https://datatracker.ietf.org/doc/html/draft-ietf-lamps-dilithium-certificates-04" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-lamps-dilithium-certificates-04.xml">
          <front>
            <title>Internet X.509 Public Key Infrastructure: Algorithm Identifiers for ML-DSA</title>
            <author fullname="Jake Massimo" initials="J." surname="Massimo">
              <organization>AWS</organization>
            </author>
            <author fullname="Panos Kampanakis" initials="P." surname="Kampanakis">
              <organization>AWS</organization>
            </author>
            <author fullname="Sean Turner" initials="S." surname="Turner">
              <organization>sn3rd</organization>
            </author>
            <author fullname="Bas Westerbaan" initials="B." surname="Westerbaan">
              <organization>Cloudflare</organization>
            </author>
            <date day="22" month="July" year="2024"/>
            <abstract>
              <t>Digital signatures are used within X.509 certificates, Certificate Revocation Lists (CRLs), and to sign messages. This document describes the conventions for using the Module-Lattice-Based Digital Signature Algorithm (ML-DSA) in Internet X.509 certificates and certificate revocation lists. The conventions for the associated signatures, subject public keys, and private key are also described.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-dilithium-certificates-04"/>
        </reference>
        <reference anchor="I-D.ietf-lamps-cms-ml-dsa" target="https://datatracker.ietf.org/doc/html/draft-ietf-lamps-cms-ml-dsa-02" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-lamps-cms-ml-dsa-02.xml">
          <front>
            <title>Use of the ML-DSA Signature Algorithm in the Cryptographic Message Syntax (CMS)</title>
            <author fullname="Ben S" initials="B." surname="S">
              <organization>UK National Cyber Security Centre</organization>
            </author>
            <author fullname="Adam R" initials="A." surname="R">
              <organization>UK National Cyber Security Centre</organization>
            </author>
            <author fullname="Daniel Van Geest" initials="D." surname="Van Geest">
              <organization>CryptoNext Security</organization>
            </author>
            <date day="17" month="January" year="2025"/>
            <abstract>
              <t>The Module-Lattice-Based Digital Signature Algorithm (ML-DSA), as defined in FIPS 204, is a post-quantum digital signature scheme that aims to be secure against an adversary in possession of a Cryptographically Relevant Quantum Computer (CRQC). This document specifies the conventions for using the ML-DSA signature algorithm with the Cryptographic Message Syntax (CMS). In addition, the algorithm identifier and public key syntax are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-cms-ml-dsa-02"/>
        </reference>
        <reference anchor="Bindel2017" target="https://link.springer.com/chapter/10.1007/978-3-319-59879-6_22">
          <front>
            <title>Transitioning to a quantum-resistant public key infrastructure</title>
            <author initials="N." surname="Bindel" fullname="Nina Bindel">
              <organization/>
            </author>
            <author initials="U." surname="Herath" fullname="Udyani Herath">
              <organization/>
            </author>
            <author initials="M." surname="McKague" fullname="Matthew McKague">
              <organization/>
            </author>
            <author initials="D." surname="Stebila" fullname="Douglas Stebila">
              <organization/>
            </author>
            <date year="2017"/>
          </front>
        </reference>
        <reference anchor="BSI2021" target="https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/Brochure/quantum-safe-cryptography.pdf">
          <front>
            <title>Quantum-safe cryptography - fundamentals, current developments and recommendations</title>
            <author>
              <organization>Federal Office for Information Security (BSI)</organization>
            </author>
            <date year="2021" month="October"/>
          </front>
        </reference>
        <reference anchor="ANSSI2024" target="https://cyber.gouv.fr/sites/default/files/document/Quantum_Key_Distribution_Position_Paper.pdf">
          <front>
            <title>Position Paper on Quantum Key Distribution</title>
            <author>
              <organization>French Cybersecurity Agency (ANSSI)</organization>
            </author>
            <author>
              <organization>Federal Office for Information Security (BSI)</organization>
            </author>
            <author>
              <organization>Netherlands National Communications Security Agency (NLNCSA)</organization>
            </author>
            <author>
              <organization>Swedish National Communications Security Authority, Swedish Armed Forces</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 2280?>

<section anchor="appdx-samples">
      <name>Samples</name>
      <section anchor="appdx-messageFormat-examples">
        <name>Message Format Examples</name>
        <section anchor="example-of-mldsa44-ecdsa-p256-with-context">
          <name>Example of MLDSA44-ECDSA-P256 with Context:</name>
          <artwork><![CDATA[
M' = Prefix || Domain || len(ctx) || ctx || M

M = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }
ctx = new byte[] { 8, 13, 6, 12, 5, 16, 25, 23 }

Message encoded:
43:6F:6D:70:6F:73:69:74:65:41:6C:67:6F:72:69:74:68:6D:53:69:67:6E:61:74:75:72:65:73:32:30:32:35:06:0B:60:86:48:01:86:FA:6B:50:08:01:3F:08:08:0D:06:0C:05:10:19:17:00:01:02:03:04:05:06:07:08:09

Prefix: 43:6F:6D:70:6F:73:69:74:65:41:6C:67:6F:72:69:74:68:6D:53:69:67:6E:61:74:75:72:65:73:32:30:32:35:
Domain: 06:0B:60:86:48:01:86:FA:6B:50:08:01:3F:
len(ctx): 08:
ctx: 08:0D:06:0C:05:10:19:17:
M: 00:01:02:03:04:05:06:07:08:09
]]></artwork>
        </section>
        <section anchor="example-of-mldsa44-ecdsa-p256-without-a-context">
          <name>Example of MLDSA44-ECDSA-P256 without a Context</name>
          <artwork><![CDATA[
M' = Prefix || Domain || len(ctx) || ctx || M

M = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }
ctx = not used

Message Encoded:
43:6F:6D:70:6F:73:69:74:65:41:6C:67:6F:72:69:74:68:6D:53:69:67:6E:61:74:75:72:65:73:32:30:32:35:06:0B:60:86:48:01:86:FA:6B:50:08:01:3F:00:00:01:02:03:04:05:06:07:08:09

Prefix: 43:6F:6D:70:6F:73:69:74:65:41:6C:67:6F:72:69:74:68:6D:53:69:67:6E:61:74:75:72:65:73:32:30:32:35:
Domain: :06:0B:60:86:48:01:86:FA:6B:50:08:01:3F:
len(ctx): 00:
ctx: empty
M: 00:01:02:03:04:05:06:07:08:09
]]></artwork>
        </section>
        <section anchor="example-of-hashmldsa44-ecdsa-p256-sha256-with-context">
          <name>Example of HashMLDSA44-ECDSA-P256-SHA256 with Context</name>
          <artwork><![CDATA[
M' = Prefix || Domain || len(ctx) || ctx || HashOID || PH(M)

M = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }
ctx = new byte[] { 8, 13, 6, 12, 5, 16, 25, 23 }

Encoded Message:
43:6F:6D:70:6F:73:69:74:65:41:6C:67:6F:72:69:74:68:6D:53:69:67:6E:61:74:75:72:65:73:32:30:32:35:06:0B:60:86:48:01:86:FA:6B:50:08:01:53:08:08:0D:06:0C:05:10:19:17:06:09:60:86:48:01:65:03:04:02:01:1F:82:5A:A2:F0:02:0E:F7:CF:91:DF:A3:0D:A4:66:8D:79:1C:5D:48:24:FC:8E:41:35:4B:89:EC:05:79:5A:B3

Prefix: 43:6F:6D:70:6F:73:69:74:65:41:6C:67:6F:72:69:74:68:6D:53:69:67:6E:61:74:75:72:65:73:32:30:32:35:
Domain: :06:0B:60:86:48:01:86:FA:6B:50:08:01:53:
len(ctx): 08:
ctx: 08:0D:06:0C:05:10:19:17:
HashOID: 06:09:60:86:48:01:65:03:04:02:01:
PH(M): 1F:82:5A:A2:F0:02:0E:F7:CF:91:DF:A3:0D:A4:66:8D:79:1C:5D:48:24:FC:8E:41:35:4B:89:EC:05:79:5A:B3
]]></artwork>
        </section>
        <section anchor="example-of-hashmldsa44-ecdsa-p256-sha256-without-context">
          <name>Example of HashMLDSA44-ECDSA-P256-SHA256 without Context</name>
          <artwork><![CDATA[
M' = Prefix || Domain || len(ctx) || ctx || HashOID || PH(M)

M = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }
ctx = not used

Encoded Message:
43:6F:6D:70:6F:73:69:74:65:41:6C:67:6F:72:69:74:68:6D:53:69:67:6E:61:74:75:72:65:73:32:30:32:35:06:0B:60:86:48:01:86:FA:6B:50:08:01:53:00:06:09:60:86:48:01:65:03:04:02:01:1F:82:5A:A2:F0:02:0E:F7:CF:91:DF:A3:0D:A4:66:8D:79:1C:5D:48:24:FC:8E:41:35:4B:89:EC:05:79:5A:B3

Prefix: 43:6F:6D:70:6F:73:69:74:65:41:6C:67:6F:72:69:74:68:6D:53:69:67:6E:61:74:75:72:65:73:32:30:32:35:
Domain: :06:0B:60:86:48:01:86:FA:6B:50:08:01:53
len(ctx): 00:
ctx: empty
HashOID: 06:09:60:86:48:01:65:03:04:02:01:
PH(M): 1F:82:5A:A2:F0:02:0E:F7:CF:91:DF:A3:0D:A4:66:8D:79:1C:5D:48:24:FC:8E:41:35:4B:89:EC:05:79:5A:B3
]]></artwork>
        </section>
      </section>
      <section anchor="appdx-expComposite-examples">
        <name>Composite Signature Examples</name>
        <t>TODO - Need Samples</t>
      </section>
    </section>
    <section anchor="appdx_components">
      <name>Component Algorithm Reference</name>
      <t>This section provides references to the full specification of the algorithms used in the composite constructions.</t>
      <table anchor="tab-component-sig-algs">
        <name>Component Signature Algorithms used in Composite Constructions</name>
        <thead>
          <tr>
            <th align="left">Component Signature Algorithm ID</th>
            <th align="left">OID</th>
            <th align="left">Specification</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">id-ML-DSA-44</td>
            <td align="left">2.16.840.1.101.3.4.3.17</td>
            <td align="left">
              <xref target="FIPS.204"/></td>
          </tr>
          <tr>
            <td align="left">id-ML-DSA-65</td>
            <td align="left">2.16.840.1.101.3.4.3.18</td>
            <td align="left">
              <xref target="FIPS.204"/></td>
          </tr>
          <tr>
            <td align="left">id-ML-DSA-87</td>
            <td align="left">2.16.840.1.101.3.4.3.19</td>
            <td align="left">
              <xref target="FIPS.204"/></td>
          </tr>
          <tr>
            <td align="left">id-Ed25519</td>
            <td align="left">1.3.101.112</td>
            <td align="left">
              <xref target="RFC8410"/></td>
          </tr>
          <tr>
            <td align="left">id-Ed448</td>
            <td align="left">1.3.101.113</td>
            <td align="left">
              <xref target="RFC8410"/></td>
          </tr>
          <tr>
            <td align="left">ecdsa-with-SHA256</td>
            <td align="left">1.2.840.10045.4.3.2</td>
            <td align="left">
              <xref target="RFC5758"/></td>
          </tr>
          <tr>
            <td align="left">ecdsa-with-SHA512</td>
            <td align="left">1.2.840.10045.4.3.4</td>
            <td align="left">
              <xref target="RFC5758"/></td>
          </tr>
          <tr>
            <td align="left">sha256WithRSAEncryption</td>
            <td align="left">1.2.840.113549.1.1.11</td>
            <td align="left">
              <xref target="RFC8017"/></td>
          </tr>
          <tr>
            <td align="left">sha512WithRSAEncryption</td>
            <td align="left">1.2.840.113549.1.1.13</td>
            <td align="left">
              <xref target="RFC8017"/></td>
          </tr>
          <tr>
            <td align="left">id-RSASSA-PSS</td>
            <td align="left">1.2.840.113549.1.1.10</td>
            <td align="left">
              <xref target="RFC8017"/></td>
          </tr>
        </tbody>
      </table>
      <table anchor="tab-component-curve-algs">
        <name>Elliptic Curves used in Composite Constructions</name>
        <thead>
          <tr>
            <th align="left">Elliptic CurveID</th>
            <th align="left">OID</th>
            <th align="left">Specification</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">secp256r1</td>
            <td align="left">1.2.840.10045.3.1.7</td>
            <td align="left">
              <xref target="RFC6090"/></td>
          </tr>
          <tr>
            <td align="left">secp384r1</td>
            <td align="left">1.3.132.0.34</td>
            <td align="left">
              <xref target="RFC6090"/></td>
          </tr>
          <tr>
            <td align="left">brainpoolP256r1</td>
            <td align="left">1.3.36.3.3.2.8.1.1.7</td>
            <td align="left">
              <xref target="RFC5639"/></td>
          </tr>
          <tr>
            <td align="left">brainpoolP384r1</td>
            <td align="left">1.3.36.3.3.2.8.1.1.11</td>
            <td align="left">
              <xref target="RFC5639"/></td>
          </tr>
        </tbody>
      </table>
      <table anchor="tab-component-hash">
        <name>Hash algorithms used in Composite Constructions</name>
        <thead>
          <tr>
            <th align="left">HashID</th>
            <th align="left">OID</th>
            <th align="left">Specification</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">id-sha256</td>
            <td align="left">2.16.840.1.101.3.4.2.1</td>
            <td align="left">
              <xref target="RFC6234"/></td>
          </tr>
          <tr>
            <td align="left">id-sha512</td>
            <td align="left">2.16.840.1..101.3.4.2.3</td>
            <td align="left">
              <xref target="RFC6234"/></td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="component-algorithmidentifiers-for-public-keys-and-signatures">
      <name>Component AlgorithmIdentifiers for Public Keys and Signatures</name>
      <t>To ease implementing Composite Signatures this section specifies the Algorithms Identifiers for each component algorithm. They are provided as ASN.1 value notation and copy and paste DER encoding to avoid any ambiguity. Developers may use this information to reconstruct non hybrid public keys and signatures from each component that can be fed to crypto APIs to create or verify a single component signature.</t>
      <t>For newer Algorithms like Ed25519 or ML-DSA the AlgorithmIdentifiers are the same for Public Key and Signature. Older Algorithms have different AlgorithmIdentifiers for keys and signatures and are specified separately here for each component.</t>
      <t><strong>ML-DSA-44 -- AlgorithmIdentifier of Public Key and Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-ML-DSA-44   -- (2 16 840 1 101 3 4 3 17)
   }

DER:
  30 0B 06 09 60 86 48 01 65 03 04 03 11
]]></artwork>
      <t><strong>ML-DSA-65 -- AlgorithmIdentifier of Public Key and Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-ML-DSA-65   -- (2 16 840 1 101 3 4 3 18)
   }

DER:
  30 0B 06 09 60 86 48 01 65 03 04 03 12
]]></artwork>
      <t><strong>ML-DSA-87 -- AlgorithmIdentifier of Public Key and Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-ML-DSA-87   -- (2 16 840 1 101 3 4 3 19)
   }

DER:
  30 0B 06 09 60 86 48 01 65 03 04 03 13
]]></artwork>
      <t><strong>RSASSA-PSS 2048 -- AlgorithmIdentifier of Public Key</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-RSASSA-PSS   -- (1.2.840.113549.1.1.10)
    }

DER:
  30 0B 06 09 2A 86 48 86 F7 0D 01 01 0A
]]></artwork>
      <t><strong>RSASSA-PSS 2048 -- AlgorithmIdentifier of Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  signatureAlgorithm AlgorithmIdentifier ::= {
    algorithm id-RSASSA-PSS,   -- (1.2.840.113549.1.1.10)
    parameters ANY ::= {
      AlgorithmIdentifier ::= {
        algorithm id-sha256,   -- (2.16.840.1.101.3.4.2.1)
        parameters NULL
        },
      AlgorithmIdentifier ::= {
        algorithm id-mgf1,       -- (1.2.840.113549.1.1.8)
        parameters AlgorithmIdentifier ::= {
          algorithm id-sha256,   -- (2.16.840.1.101.3.4.2.1)
          parameters NULL
          }
        },
      saltLength 32
      }
    }

DER:
  30 41 06 09 2A 86 48 86 F7 0D 01 01 0A 30 34 A0 0F 30 0D 06 09 60 86
  48 01 65 03 04 02 01 05 00 A1 1C 30 1A 06 09 2A 86 48 86 F7 0D 01 01
  08 30 0D 06 09 60 86 48 01 65 03 04 02 01 05 00 A2 03 02 01 20
]]></artwork>
      <t><strong>RSASSA-PSS 3072 &amp; 4096 -- AlgorithmIdentifier of Public Key</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-RSASSA-PSS   -- (1.2.840.113549.1.1.10)
    }

DER:
  30 0B 06 09 2A 86 48 86 F7 0D 01 01 0A
]]></artwork>
      <t><strong>RSASSA-PSS 3072 &amp; 4096 -- AlgorithmIdentifier of Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  signatureAlgorithm AlgorithmIdentifier ::= {
    algorithm id-RSASSA-PSS,   -- (1.2.840.113549.1.1.10)
    parameters ANY ::= {
      AlgorithmIdentifier ::= {
        algorithm id-sha512,   -- (2.16.840.1.101.3.4.2.3)
        parameters NULL
        },
      AlgorithmIdentifier ::= {
        algorithm id-mgf1,       -- (1.2.840.113549.1.1.8)
        parameters AlgorithmIdentifier ::= {
          algorithm id-sha512,   -- (2.16.840.1.101.3.4.2.3)
          parameters NULL
          }
        },
      saltLength 64
      }
    }

DER:
  30 41 06 09 2A 86 48 86 F7 0D 01 01 0A 30 34 A0 0F 30 0D 06 09 60 86
  48 01 65 03 04 02 03 05 00 A1 1C 30 1A 06 09 2A 86 48 86 F7 0D 01 01
  08 30 0D 06 09 60 86 48 01 65 03 04 02 03 05 00 A2 03 02 01 40
]]></artwork>
      <t><strong>RSASSA-PKCS1-v1_5 2048 -- AlgorithmIdentifier of Public Key</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm rsaEncryption,   -- (1.2.840.113549.1.1.1)
    parameters NULL
    }

DER:
  30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00
]]></artwork>
      <t><strong>RSASSA-PKCS1-v1_5 2048 -- AlgorithmIdentifier of Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  signatureAlgorithm AlgorithmIdentifier ::= {
    algorithm sha256WithRSAEncryption,   -- (1.2.840.113549.1.1.11)
    parameters NULL
    }

DER:
  30 0D 06 09 2A 86 48 86 F7 0D 01 01 0D 05 00
]]></artwork>
      <t><strong>RSASSA-PKCS1-v1_5 3072 &amp; 4096 -- AlgorithmIdentifier of Public Key</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm rsaEncryption,   -- (1.2.840.113549.1.1.1)
    parameters NULL
    }

DER:
  30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00
]]></artwork>
      <t><strong>RSASSA-PKCS1-v1_5 3072 &amp; 4096 -- AlgorithmIdentifier of Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  signatureAlgorithm AlgorithmIdentifier ::= {
    algorithm sha512WithRSAEncryption,   -- (1.2.840.113549.1.1.13)
    parameters NULL
    }

DER:
  30 0D 06 09 2A 86 48 86 F7 0D 01 01 0D 05 00
]]></artwork>
      <t><strong>ECDSA NIST 256 -- AlgorithmIdentifier of Public Key</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-ecPublicKey   -- (1.2.840.10045.2.1)
    parameters ANY ::= {
      AlgorithmIdentifier ::= {
        algorithm secp256r1   -- (1.2.840.10045.3.1.7)
        }
      }
    }

DER:
  30 13 06 07 2A 86 48 CE 3D 02 01 06 08 2A 86 48 CE 3D 03 01 07
]]></artwork>
      <t><strong>ECDSA NIST 256 -- AlgorithmIdentifier of Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  signature AlgorithmIdentifier ::= {
    algorithm ecdsa-with-SHA256   -- (1.2.840.10045.4.3.2)
    }

DER:
  30 0A 06 08 2A 86 48 CE 3D 04 03 02
]]></artwork>
      <t><strong>ECDSA NIST-384 -- AlgorithmIdentifier of Public Key</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-ecPublicKey   -- (1.2.840.10045.2.1)
    parameters ANY ::= {
      AlgorithmIdentifier ::= {
        algorithm secp384r1   -- (1.3.132.0.34)
        }
      }
    }

DER:
  30 10 06 07 2A 86 48 CE 3D 02 01 06 05 2B 81 04 00 22
]]></artwork>
      <t><strong>ECDSA NIST-384 -- AlgorithmIdentifier of Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  signature AlgorithmIdentifier ::= {
    algorithm ecdsa-with-SHA384   -- (1.2.840.10045.4.3.3)
    }

DER:
  30 0A 06 08 2A 86 48 CE 3D 04 03 03
]]></artwork>
      <t><strong>ECDSA Brainpool-256 -- AlgorithmIdentifier of Public Key</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-ecPublicKey   -- (1.2.840.10045.2.1)
    parameters ANY ::= {
      AlgorithmIdentifier ::= {
        algorithm brainpoolP256r1   -- (1.3.36.3.3.2.8.1.1.7)
        }
      }
    }

DER:
  30 14 06 07 2A 86 48 CE 3D 02 01 06 09 2B 24 03 03 02 08 01 01 07
]]></artwork>
      <t><strong>ECDSA Brainpool-256 -- AlgorithmIdentifier of Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  signature AlgorithmIdentifier ::= {
    algorithm ecdsa-with-SHA256   -- (1.2.840.10045.4.3.2)
    }

DER:
  30 0A 06 08 2A 86 48 CE 3D 04 03 02
]]></artwork>
      <t><strong>ECDSA Brainpool-384 -- AlgorithmIdentifier of Public Key</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-ecPublicKey   -- (1.2.840.10045.2.1)
    parameters ANY ::= {
      AlgorithmIdentifier ::= {
        algorithm brainpoolP384r1   -- (1.3.36.3.3.2.8.1.1.11)
        }
      }
    }

DER:
  30 14 06 07 2A 86 48 CE 3D 02 01 06 09 2B 24 03 03 02 08 01 01 0B
]]></artwork>
      <t><strong>ECDSA Brainpool-384 -- AlgorithmIdentifier of Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  signature AlgorithmIdentifier ::= {
    algorithm ecdsa-with-SHA384   -- (1.2.840.10045.4.3.3)
    }

DER:
  30 0A 06 08 2A 86 48 CE 3D 04 03 03
]]></artwork>
      <t><strong>Ed25519 -- AlgorithmIdentifier of Public Key and Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-Ed25519   -- (1.3.101.112)
    }

DER:
  30 05 06 03 2B 65 70
]]></artwork>
      <t><strong>Ed448 -- AlgorithmIdentifier of Public Key and Signature</strong></t>
      <artwork><![CDATA[
ASN.1:
  algorithm AlgorithmIdentifier ::= {
    algorithm id-Ed448   -- (1.3.101.113)
    }

DER:
  30 05 06 03 2B 65 71
]]></artwork>
    </section>
    <section anchor="sec-imp-considers">
      <name>Implementation Considerations</name>
      <section anchor="sec-fips">
        <name>FIPS certification</name>
        <t>One of the primary design goals of this specification is for the overall composite algorithm to be able to be considered FIPS-approved even when one of the component algorithms is not.</t>
        <t>Implementors seeking FIPS certification of a composite Signature algorithm where only one of the component algorithms has been FIPS-validated or FIPS-approved should credit the FIPS-validated component algorithm with full security strength, the non-FIPS-validated component algorithm with zero security, and the overall composite should be considered at least as strong and thus FIPS-approved.</t>
        <t>The authors wish to note that this gives composite algorithms great future utility both for future cryptographic migrations as well as bridging across jurisdictions, for example defining composite algorithms which combine FIPS cryptography with cryptography from a different national standards body.</t>
      </section>
      <section anchor="sec-backwards-compat">
        <name>Backwards Compatibility</name>
        <t>The term "backwards compatibility" is used here to mean something more specific; that existing systems as they are deployed today can interoperate with the upgraded systems of the future.  This draft explicitly does not provide backwards compatibility, only upgraded systems will understand the OIDs defined in this document.</t>
        <t>If backwards compatibility is required, then additional mechanisms will be needed.  Migration and interoperability concerns need to be thought about in the context of various types of protocols that make use of X.509 and PKIX with relation to digital signature objects, from online negotiated protocols such as TLS 1.3 <xref target="RFC8446"/> and IKEv2 <xref target="RFC7296"/>, to non-negotiated asynchronous protocols such as S/MIME signed email <xref target="RFC8551"/>, document signing such as in the context of the European eIDAS regulations [eIDAS2014], and publicly trusted code signing [codeSigningBRsv2.8], as well as myriad other standardized and proprietary protocols and applications that leverage CMS <xref target="RFC5652"/> signed structures.  Composite simplifies the protocol design work because it can be implemented as a signature algorithm that fits into existing systems.</t>
        <section anchor="hybrid-extensions-keys-and-signatures">
          <name>Hybrid Extensions (Keys and Signatures)</name>
          <t>The use of Composite Crypto provides the possibility to process multiple algorithms without changing the logic of applications but updating the cryptographic libraries: one-time change across the whole system. However, when it is not possible to upgrade the crypto engines/libraries, it is possible to leverage X.509 extensions to encode the additional keys and signatures. When the custom extensions are not marked critical, although this approach provides the most backward-compatible approach where clients can simply ignore the post-quantum (or extra) keys and signatures, it also requires all applications to be updated for correctly processing multiple algorithms together.</t>
          <!-- End of Implementation Considerations section -->

</section>
      </section>
    </section>
    <section anchor="intellectual-property-considerations">
      <name>Intellectual Property Considerations</name>
      <t>The following IPR Disclosure relates to this draft:</t>
      <t>https://datatracker.ietf.org/ipr/3588/</t>
    </section>
    <section anchor="contributors-and-acknowledgements">
      <name>Contributors and Acknowledgements</name>
      <t>This document incorporates contributions and comments from a large group of experts. The Editors would especially like to acknowledge the expertise and tireless dedication of the following people, who attended many long meetings and generated millions of bytes of electronic mail and VOIP traffic over the past few years in pursuit of this document:</t>
      <t>Daniel Van Geest (CryptoNext),
Dr. Britta Hale (Naval Postgraduade School),
Tim Hollebeek (Digicert),
Panos Kampanakis (Cisco Systems),
Richard Kisley (IBM),
Serge Mister (Entrust),
Piotr Popis,
François Rousseau,
Falko Strenzke,
Felipe Ventura (Entrust),
Alexander Ralien (Siemens),
José Ignacio Escribano,
Jan Oupický,
陳志華 (Abel C. H. Chen, Chunghwa Telecom),
林邦曄 (Austin Lin, Chunghwa Telecom) and
Mojtaba Bisheh-Niasar</t>
      <t>We especially want to recognize the contributions of Dr. Britta Hale who has helped immensely with strengthening the signature combiner construction, and with analyzing the scheme with respect to EUF-CMA and Non-Separability properties.</t>
      <t>We are grateful to all who have given feedback over the years, formally or informally, on mailing lists or in person, including any contributors who may have been inadvertently omitted from this list.</t>
      <t>This document borrows text from similar documents, including those referenced below. Thanks go to the authors of those
   documents.  "Copying always makes things easier and less error prone" - <xref target="RFC8411"/>.</t>
      <section anchor="making-contributions">
        <name>Making contributions</name>
        <t>Additional contributions to this draft are welcome. Please see the working copy of this draft at, as well as open issues at:</t>
        <t>https://github.com/lamps-wg/draft-composite-sigs</t>
        <!-- End of Contributors section -->

</section>
    </section>
  </back>
  <!-- ##markdown-source:
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
9ra24XuHvu9s7ffgF3hysNXe7m734Hlve3Ozs9mC//fERhUyOPrPsmVV5IeM
9ZJ5cGhf05yQPBOfLphbxNF0o6QrQqDdSGlqMMRhsMlghgQcjGgr/xaT/DSI
hVGehSFxQcytAGxg/KmR8vfPROkK4tdMnwefci9LEPnnhuSo3PYL9TZCUJJ1
jGa/xw6gPqd9WIm2arUjeBt9DheAz+8+iu9Fqy7adQEW0mZddOuiVxdbdbFd
Fzt1gVm0sWWuBfzS3qTX0LCCBm342IF/O5QbU02fiMUf92vdzf7W6/7Wfn+7
hR+24etuf7vb3+r1u+3+1l5/a5ued9TzHXy5R6/hTwf9rTY+3+7ROz3sYbPT
32zRf3v91la/9aq/1ervbPW7O/1WGz+8HvS3XvV7rX6Lnmy+pg/wv316f6/f
6vXbrX57t9/e7rda+E6r029t9ltd/Anf2ab3d2s1Xt2++LEnUmPk9cWSM6op
FEOLnT6iij6UTrF2BL8tnCblEFmOBFGd8xQd/pRkGHMaLkNkB8+NyFrPjpiW
Bd2mppakJnST3z2MdBZn1bMZ2eoElBd2PwVbk5SmuPvzoDjobRFbgye7Tg8w
ikRgB7+2X/d3Ov3eoD/o9F+36OFB//V2f+91f7fd33/dH2xizwMAfqu/AzOF
bvf6vX3srdPtv97r7xzgZAHa7qv+zm7/gACA16DPV5vPldih35VYpyQ35ssL
F7RG5NgXP/bCPmzDIdv++fec5uHPdke1ft05latTLSWe7S4xYV5CmzVFrdz/
NDMpsCylHDN7ioY4RptOqv1oAexp81fbTObKpur0T+aci65SBMbikDd0UhOB
rh2g6DnNeXqkS6s0HtS2V/N+ox8sOM3cDcS4nynl9g8m2JEG/AGaNsyfWPgN
3iU3NB59N7pd+LnTbG81d7qtZrvZbrWbm80u/L+9Db98h/dbmp1W92Ou3Vav
st3OonY725XtdkvbqchTAb/iq9igjZljyQmz0223rFcxjlbkXt0svOqPxqnX
QBarswbD+x2GqNXq9ggeNURvu7dT1o7S15a06xbapRMPBsEQgdPhANgonhgQ
1kzr9mavu4vLAR8VvK32tm4Pgy3bfrPQHpYGGg5RxFDm5rJWrVyr7/viC8x9
p7eEToAnsiAL/a/WFpKqoXizm/dsal/7jOR+EIZ4z3ok9ubJjf9k5A27diaT
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
aXApuYcrRx2RZIvN/x9Y/RbO/NYBAA==

-->

</rfc>
