<?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.23 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-lundberg-cose-two-party-signing-algs-00" category="std" consensus="true" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.27.0 -->
  <front>
    <title abbrev="COSE Algs for Two-Party Signing">COSE Algorithms for Two-Party Signing</title>
    <seriesInfo name="Internet-Draft" value="draft-lundberg-cose-two-party-signing-algs-00"/>
    <author fullname="Emil Lundberg" role="editor">
      <organization>Yubico</organization>
      <address>
        <postal>
          <street>Kungsgatan 44</street>
          <city>Stockholm</city>
          <country>SE</country>
        </postal>
        <email>emil@emlun.se</email>
      </address>
    </author>
    <author initials="M. B." surname="Jones" fullname="Michael B. Jones">
      <organization>Self-Issued Consulting</organization>
      <address>
        <postal>
          <country>United States</country>
        </postal>
        <email>michael_b_jones@hotmail.com</email>
        <uri>https://self-issued.info/</uri>
      </address>
    </author>
    <date year="2025" month="February" day="18"/>
    <area>Security</area>
    <workgroup>COSE</workgroup>
    <keyword>COSE</keyword>
    <keyword>Signing</keyword>
    <keyword>Two-Party</keyword>
    <keyword>Algorithms</keyword>
    <abstract>
      <?line 143?>

<t>This specification defines COSE algorithm identifiers used when the signing operation
is performed cooperatively between two parties.
When performing two-party signing,
the first party typically hashes the data to be signed
and the second party signs the hashed data computed by the first party.
This can be useful when communication with the party holding the signing private key
occurs over a limited-bandwidth channel, such as NFC or Bluetooth Low Energy (BLE),
in which it is infeasible to send the complete set of data to be signed.
The resulting signatures are identical in structure to those computed by a single party,
and can be verified using the same verification procedure
without additional steps to preprocess the signed data.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-lundberg-cose-two-party-signing-algs/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        COSE Working Group mailing list (<eref target="mailto:cose@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cose/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cose/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/YubicoLabs/cose-two-party-signing-algs-rfc"/>.</t>
    </note>
  </front>
  <middle>
    <?line 157?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>CBOR Object Signing and Encryption (COSE) <xref target="RFC9052"/>
algorithm identifiers are used to specify the cryptographic operations
performed when creating cryptographic data structures,
but do not record all the details of how the cryptography was performed,
since those details are typically irrelevant for the recipient.
The algorithm identifiers defined by this specification facilitate the
cooperation of two parties to perform COSE signing operations together.
They are used to specify the division of responsibilities between the two parties.
Consumers of the cryptographic data structures thus cooperatively produced
do not use these algorithm identifiers;
rather, consumers use the normal COSE algorithm identifiers that correspond
to the cryptographic operation cooperatively performed together by the two parties.</t>
      <t>A use case for this is performing a signature operation split between two parties,
such as a software application and a discrete hardware security module (HSM) holding the private key.
In particular, since the data link between them may have limited bandwidth,
it may not be practical to send the entire original message to the HSM.
Instead, since most signature algorithms begin with digesting the message
into a fixed-length intermediate input, this initial digest can be computed by the software application
while the HSM computes the rest of the signature algorithm on the digest.</t>
      <t>Since different signature algorithms digest the message in different ways
and at different stages of the algorithm,
there is no generally-applicable way to define such a division point
for every possible signature algorithm.
Therefore, this document defines algorithm identifiers encoding,
for a specific set of signature algorithms,
which steps of the signature algorithm are performed by the <em>digester</em> (e.g., software application)
and which are performed by the <em>signer</em> (e.g., HSM).
In general, the <em>signer</em> holds exclusive control of the signing private key.</t>
      <t>Note that these algorithm identifiers do not define new "pre-hashed" variants of the base signature algorithm,
nor an intermediate "hash envelope" data structure, such as that defined in <xref target="COSE-Hash-Envelope"/>.
Rather, these identifiers correspond to existing signature algorithms
that would typically be executed by a single party,
but split into two stages.
The resulting signatures are identical to those computed by a single party,
and can be verified using the same verification procedures
without additional special steps to process the signed data.</t>
      <t>However some signature algorithms,
for example, PureEdDSA <xref target="RFC8032"/> and ML-DSA <xref target="FIPS-204"/>,
cannot be split in this way and therefore cannot be assigned two-party signing algorithm identifiers.
However, if such a signature algorithm defines a "pre-hashed" variant,
such as Ed25519ph <xref target="RFC8032"/> or HashML-DSA <xref target="FIPS-204"/>,
that "pre-hashed" algorithm can also be assigned a two-party signing algorithm identifier,
enabling the hashing step to be performed by the <em>digester</em>
and the signing step to be executed by the <em>signer</em>.</t>
      <section anchor="requirements-notation-and-conventions">
        <name>Requirements Notation and Conventions</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="RFC8174">RFC2119</xref> when, and only when, they appear in all capitals, as shown here.</t>
      </section>
    </section>
    <section anchor="two-party-signing-algorithms">
      <name>Two-Party Signing Algorithms</name>
      <t>This section defines divisions of signing algorithm steps between a <em>digester</em> and a <em>signer</em>
in a two-party signing protocol,
and assigns algorithm identifiers to these algorithm divisions.
The <em>digester</em> performs the first part of the divided algorithm and does not have access to the signing private key,
while the <em>signer</em> performs the second part of the divided algorithm and has access to the signing private key.
For signing algorithms that format the message to insert domain separation tags,
as described in Section 2.2.5 of <xref target="RFC9380"/>,
this message formatting is also performed by the <em>signer</em>.</t>
      <t>The algorithm identifiers defined in this document MUST NOT appear in COSE structures
other than COSE_Key_Ref (see <xref target="cose-key-refs"/>).
They are meant only for coordination between the <em>digester</em> and the <em>signer</em> in a two-party signing protocol.
Representations of the keys used and the resulting signatures
MUST use the corresponding conventional algorithm identifiers instead.
These are listed in the "Base algorithm" column in the tables defining two-party signing algorithm identifiers.</t>
      <section anchor="ecdsa-2p">
        <name>ECDSA</name>
        <t>Two-party ECDSA <xref target="FIPS-186-5"/> uses the following division between the <em>digester</em> and the <em>signer</em>
of the steps of the ECDSA signature generation algorithm <xref target="FIPS-186-5"/>:</t>
        <ul spacing="normal">
          <li>
            <t>The signing procedure is defined in Section 6.4.1 of <xref target="FIPS-186-5"/>.</t>
          </li>
          <li>
            <t>The <em>digester</em> performs Step 1 of the signing procedure - hashing the message, producing the value <em>H</em>.</t>
          </li>
          <li>
            <t>The message input to the <em>signer</em> is the value <em>H</em> defined in the signing procedure.</t>
          </li>
          <li>
            <t>The <em>signer</em> resumes the signing procedure from Step 2.</t>
          </li>
        </ul>
        <t>The following algorithm identifiers are defined:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">COSE Value</th>
              <th align="left">Base algorithm</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ESP256-2p</td>
              <td align="left">TBD</td>
              <td align="left">ESP256</td>
              <td align="left">ESP256 <xref target="fully-spec-algs"/> divided as defined in <xref target="ecdsa-2p"/> of this document</td>
            </tr>
            <tr>
              <td align="left">ESP384-2p</td>
              <td align="left">TBD</td>
              <td align="left">ESP384</td>
              <td align="left">ESP384 <xref target="fully-spec-algs"/> divided as defined in <xref target="ecdsa-2p"/> of this document</td>
            </tr>
            <tr>
              <td align="left">ESP512-2p</td>
              <td align="left">TBD</td>
              <td align="left">ESP512</td>
              <td align="left">ESP512 <xref target="fully-spec-algs"/> divided as defined in <xref target="ecdsa-2p"/> of this document</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="eddsa-2p">
        <name>HashEdDSA</name>
        <t>Two-party HashEdDSA <xref target="RFC8032"/> uses the following division between the <em>digester</em> and the <em>signer</em>
of the steps of the HashEdDSA signing algorithm <xref target="RFC8032"/>:</t>
        <ul spacing="normal">
          <li>
            <t>HashEdDSA is a combination of the EdDSA signing procedure and the PureEdDSA signing procedure.
The EdDSA signing procedure is defined in the first paragraph of <xref section="3.3" sectionFormat="of" target="RFC8032"/>.
The PureEdDSA signing procedure is defined in the second paragraph of <xref section="3.3" sectionFormat="of" target="RFC8032"/>.</t>
          </li>
          <li>
            <t>The <em>digester</em> computes the value <tt>PH(M)</tt> defined in the EdDSA signing procedure.</t>
          </li>
          <li>
            <t>The message input to the <em>signer</em> is the value <tt>PH(M)</tt> defined in the EdDSA signing procedure.
This value is represented as <tt>M</tt> in the PureEdDSA signing procedure.</t>
          </li>
          <li>
            <t>The <em>signer</em> executes the PureEdDSA signing procedure,
where the value denoted <tt>M</tt> in the PureEdDSA signing procedure
takes the value denoted <tt>PH(M)</tt> in the EdDSA signing procedure.</t>
          </li>
        </ul>
        <t>PureEdDSA <xref target="RFC8032"/> cannot be divided in this way
since such a division would require that the <em>digester</em> has access to the private key.</t>
        <t>The following algorithm identifiers are defined:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">COSE Value</th>
              <th align="left">Base algorithm</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Ed25519ph-2p</td>
              <td align="left">TBD</td>
              <td align="left">Ed25519ph</td>
              <td align="left">Ed25519ph <xref target="fully-spec-algs"/> divided as defined in <xref target="eddsa-2p"/> of this document (NOTE: Ed25519ph not yet registered)</td>
            </tr>
            <tr>
              <td align="left">Ed448ph-2p</td>
              <td align="left">TBD</td>
              <td align="left">Ed448ph</td>
              <td align="left">Ed448ph <xref target="fully-spec-algs"/> divided as defined in <xref target="eddsa-2p"/> of this document (NOTE: Ed448ph not yet registered)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="ml-dsa-2p">
        <name>HashML-DSA</name>
        <t>Two-party HashML-DSA <xref target="FIPS-204"/> uses the following division between the <em>digester</em> and the <em>signer</em>
of the steps of the HashML-DSA.Sign algorithm:</t>
        <ul spacing="normal">
          <li>
            <t>The signing procedure is defined in Section 5.4.1 of <xref target="FIPS-204"/>.</t>
          </li>
          <li>
            <t>The <em>digester</em> computes the value PH<sub><em>M</em></sub> defined in Steps 10 to 22 of the signing procedure.</t>
          </li>
          <li>
            <t>The message input to the <em>signer</em> is the value PH<sub><em>M</em></sub> defined in the signing procedure.
The additional <em>ctx</em> input must also be transmitted to the <em>signer</em>.
This may, for example, be done using the <tt>ctx (-1)</tt> parameter of a <tt>COSE_Key_Ref</tt> with <tt>kty (1): Ref-ML-DSA (TBD)</tt>
(see <xref target="cose-key-types-reg"/> and <xref target="cose-key-type-params-reg"/>).</t>
          </li>
          <li>
            <t>The <em>signer</em> executes all steps of the signing procedure
except the Steps 13, 16, 19 or similar that compute the value PH<sub><em>M</em></sub>.
Note in particular, that the <em>signer</em> generates the value <em>rnd</em> in Steps 5-8
and constructs the value <em>M'</em> in Step 23.</t>
          </li>
        </ul>
        <t>The "pure" ML-DSA version <xref target="FIPS-204"/> cannot be divided in this way
because of how the embedding of the <em>ctx</em> and <em>tr</em> values is constructed
in <tt>ML-DSA.Sign</tt> and <tt>ML-DSA.Sign_Internal</tt>.
A division like the one above for HashML-DSA would move control of this embedding from the <em>signer</em> to the <em>digester</em>.
This would break the domain separation enforced by the embedding
and possibly enable signature malleability attacks or protocol confusion attacks.</t>
        <t>The following algorithm identifiers are defined:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">COSE Value</th>
              <th align="left">Base algorithm</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">HashML-DSA-44-2p</td>
              <td align="left">TBD</td>
              <td align="left">HashML-DSA-44</td>
              <td align="left">HashML-DSA-44 TODO: divided as defined in <xref target="ml-dsa-2p"/> of this document (NOTE: HashML-DSA-44 not yet registered)</td>
            </tr>
            <tr>
              <td align="left">HashML-DSA-65-2p</td>
              <td align="left">TBD</td>
              <td align="left">HashML-DSA-65</td>
              <td align="left">HashML-DSA-65 TODO: divided as defined in <xref target="ml-dsa-2p"/> of this document (NOTE: HashML-DSA-65 not yet registered)</td>
            </tr>
            <tr>
              <td align="left">HashML-DSA-87-2p</td>
              <td align="left">TBD</td>
              <td align="left">HashML-DSA-87</td>
              <td align="left">HashML-DSA-87 TODO: divided as defined in <xref target="ml-dsa-2p"/> of this document (NOTE: HashML-DSA-87 not yet registered)</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="cose-key-refs">
      <name>COSE Key Reference Types</name>
      <t>While keys used by many other algorithms can usually be referenced by a single atomic identifier,
such as that used in the <tt>kid</tt> parameter in a COSE_Key object or in the unprotected header of a COSE_Recipient,
some signature algorithms use additional parameters to the signature generation
beyond the signing private key and message to be signed.
For example, ML-DSA <xref target="FIPS-204"/> has the additional parameter <em>ctx</em>
and <tt>ARKG-Derive-Secret-Key</tt> <xref target="ARKG"/> has the parameters <tt>kh</tt> and <tt>info</tt>, in addition to the private key.</t>
      <t>While these additional parameters are simple to provide to the API of the signing procedure
in a single-party context,
in a two-party context these additional parameters also need to be conveyed from the <em>digester</em> to the <em>signer</em>.
For this purpose, we define new COSE key types, collectively called "COSE key reference types".
This enables defining a unified, algorithm-agnostic protocol between the <em>digester</em> and the <em>signer</em>,
rather than requiring a distinct protocol for each signature algorithm for the sake of conveying algorithm-specific parameters.</t>
      <t>A COSE key reference is a COSE_Key object whose <tt>kty</tt> value is defined to represent a reference to a key.
The <tt>kid</tt> parameter MUST be present when <tt>kty</tt> is a key reference type.
These requirements are encoded in the CDDL <xref target="RFC8610"/> type <tt>COSE_Key_Ref</tt>:</t>
      <sourcecode type="cddl"><![CDATA[
COSE_Key_Ref = COSE_Key .within {
  1 ^ => $COSE_kty_ref   ; kty: Any reference type
  2 ^ => any,            ; kid is required
  any => any,            ; Any other entries allowed by COSE_Key
}
]]></sourcecode>
      <t>The following CDDL example represents a reference to an ML-DSA-65 key,
which uses the <tt>AKP</tt> key type <xref target="COSE-ML-DSA"/>,
along with the value of the <em>ctx</em> parameter to ML-DSA.Sign <xref target="FIPS-204"/>:</t>
      <sourcecode type="cddl"><![CDATA[
{
  1: TBD,      ; kty: Ref-AKP
               ; kid: Opaque identifier of the AKP key
  2: h'92bc2bfa738f5bb07803fb9c0c58020791acd29fbe253baa7a03ac84f4b26d44',

  3: TBD,      ; alg: ML-DSA-65

               ; ctx argument to ML-DSA.Sign
  -1: 'Example application info',
}
]]></sourcecode>
      <t>The following CDDL example represents a reference to a key derived by <tt>ARKG-P256ADD-ECDH</tt> <xref target="ARKG"/>
and restricted for use with the ESP256 <xref target="fully-spec-algs"/> signature algorithm:</t>
      <sourcecode type="cddl"><![CDATA[
{
  1: -65538,   ; kty: Ref-ARKG-derived
               ; kid: Opaque identifier of ARKG-pub
  2: h'60b6dfddd31659598ae5de49acb220d8
       704949e84d484b68344340e2565337d2',
  3: -9,       ; alg: ESP256

               ; ARKG-P256ADD-ECDH key handle
               ; (HMAC-SHA-256-128 followed by
                  SEC1 uncompressed ECDH public key)
  -1: h'ae079e9c52212860678a7cee25b6a6d4
        048219d973768f8e1adb8eb84b220b0ee3
          a2532828b9aa65254fe3717a29499e9b
          aee70cea75b5c8a2ec2eb737834f7467
          e37b3254776f65f4cfc81e2bc4747a84',

               ; info argument to ARKG-Derive-Private-Key
  -2: 'Example application info',
}
]]></sourcecode>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <section anchor="cose-key-types-reg">
        <name>COSE Key Types Registrations</name>
        <t>This section registers the following values in the IANA "COSE Key Types" registry <xref target="IANA.COSE"/>:</t>
        <ul spacing="normal">
          <li>
            <t>Name: Ref-OKP
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (Requested assignment -1)</t>
              </li>
              <li>
                <t>Description: Reference to a key pair of key type "OKP"</t>
              </li>
              <li>
                <t>Capabilities: [kty(-1), crv]</t>
              </li>
              <li>
                <t>Reference: <xref target="cose-key-refs"/> of this specification</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: Ref-EC2
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (Requested assignment -2)</t>
              </li>
              <li>
                <t>Description: Reference to a key pair of key type "EC2"</t>
              </li>
              <li>
                <t>Capabilities: [kty(-2), crv]</t>
              </li>
              <li>
                <t>Reference: <xref target="cose-key-refs"/> of this specification</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: Ref-AKP
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (Requested assignment -7)</t>
              </li>
              <li>
                <t>Description: Reference to a key pair of key type "AKP"</t>
              </li>
              <li>
                <t>Capabilities: [kty(TBD), ctx]</t>
              </li>
              <li>
                <t>Reference: <xref target="cose-key-refs"/> of this specification</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>These registrations add the following choices to the CDDL <xref target="RFC8610"/> type socket <tt>$COSE_kty_ref</tt>:</t>
        <sourcecode type="cddl"><![CDATA[
$COSE_kty_ref /= -1       ; Value TBD
$COSE_kty_ref /= -2       ; Value TBD
$COSE_kty_ref /= TBD      ; Value TBD
]]></sourcecode>
      </section>
      <section anchor="cose-key-type-params-reg">
        <name>COSE Key Type Parameters Registrations</name>
        <t>This section registers the following values in the IANA "COSE Key Type Parameters" registry <xref target="IANA.COSE"/>:</t>
        <ul spacing="normal">
          <li>
            <t>Key Type: TBD (Ref-AKP)
            </t>
            <ul spacing="normal">
              <li>
                <t>Name: ctx</t>
              </li>
              <li>
                <t>Label: -1</t>
              </li>
              <li>
                <t>CBOR Type: bstr</t>
              </li>
              <li>
                <t>Description: ctx argument to ML-DSA.Sign or HashML-DSA.Sign</t>
              </li>
              <li>
                <t>Reference: <xref target="cose-key-refs"/> of this specification</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="COSE-ML-DSA" target="https://datatracker.ietf.org/doc/draft-ietf-cose-dilithium/">
          <front>
            <title>ML-DSA for JOSE and COSE</title>
            <author initials="M." surname="Prorock" fullname="Michael Prorock">
              <organization>mesur.io</organization>
            </author>
            <author initials="O." surname="Steele" fullname="Orie Steele">
              <organization>Transmute</organization>
            </author>
            <author initials="R." surname="Misoczki" fullname="Rafael Misoczki">
              <organization>Google</organization>
            </author>
            <author initials="M." surname="Osborne" fullname="Michael Osborne">
              <organization>IBM</organization>
            </author>
            <author initials="C." surname="Cloostermans" fullname="Christine Cloostermans">
              <organization>NXP</organization>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="fully-spec-algs" target="https://datatracker.ietf.org/doc/draft-ietf-jose-fully-specified-algorithms/">
          <front>
            <title>Fully-Specified Algorithms for JOSE and COSE</title>
            <author initials="M. B." surname="Jones" fullname="Michael B. Jones">
              <organization>Self-Issued Consulting</organization>
            </author>
            <author initials="O." surname="Steele" fullname="Orie Steele">
              <organization>Transmute</organization>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="IANA.COSE" target="https://www.iana.org/assignments/cose/">
          <front>
            <title>CBOR Object Signing and Encryption (COSE)</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC9052">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
              <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9052"/>
          <seriesInfo name="DOI" value="10.17487/RFC9052"/>
        </reference>
        <reference anchor="RFC9380">
          <front>
            <title>Hashing to Elliptic Curves</title>
            <author fullname="A. Faz-Hernandez" initials="A." surname="Faz-Hernandez"/>
            <author fullname="S. Scott" initials="S." surname="Scott"/>
            <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
            <author fullname="R. S. Wahby" initials="R. S." surname="Wahby"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="August" year="2023"/>
            <abstract>
              <t>This document specifies a number of algorithms for encoding or hashing an arbitrary string to a point on an elliptic curve. This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9380"/>
          <seriesInfo name="DOI" value="10.17487/RFC9380"/>
        </reference>
        <reference anchor="SEC1" target="https://www.secg.org/sec1-v2.pdf">
          <front>
            <title>SEC 1: Elliptic Curve Cryptography</title>
            <author>
              <organization>Certicom Research</organization>
            </author>
            <date year="2009" month="May"/>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <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</organization>
            </author>
            <date year="2024" month="August"/>
          </front>
        </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</organization>
            </author>
            <date year="2023" month="February"/>
          </front>
        </reference>
        <reference anchor="ARKG" target="https://datatracker.ietf.org/doc/draft-bradleylundberg-cfrg-arkg/">
          <front>
            <title>The Asynchronous Remote Key Generation (ARKG) algorithm</title>
            <author initials="E." surname="Lundberg" fullname="Emil Lundberg">
              <organization>Yubico</organization>
            </author>
            <author initials="J." surname="Bradley" fullname="John Bradley">
              <organization>Yubico</organization>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="COSE-Hash-Envelope" target="https://datatracker.ietf.org/doc/draft-ietf-cose-hash-envelope/">
          <front>
            <title>COSE Hash Envelope</title>
            <author initials="O." surname="Steele" fullname="Orie Steele">
              <organization>Transmute</organization>
            </author>
            <author initials="S." surname="Lasker" fullname="Steve Lasker">
              <organization>DataTrails</organization>
            </author>
            <author initials="H." surname="Birkholz" fullname="Henk Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date year="2024"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 429?>

<section numbered="false" anchor="document-history">
      <name>Document History</name>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>Initial individual draft</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA71c+3PbRpL+HX/FFH1VlrdIik+R4m62LEtypESydJJyuS2v
TxoAQxIRCHAxgGTGcf72+3oeeJCgrDjeVVUiCpjp7unH190zQ7daLUemPPJv
eRhHYsLSJBNOsEzUJ5n2Op39Ts9x0iAN8bZxeHF9zA7CWZwE6Xwh2TRO2M1j
3LrkSbpi18EsCqJZw+Gum4iH0vitI0MezSZMRI7HUwGyqwmTqe84fuxFfAGW
fsKnaSvMIt8VyazlxVK0UtBZEp2W1HRaHCxanY4jM3cRSBnEUbpaYvbp8c1b
xl4wHsoY4gSRL5YC/4vSRpM1hB+kWAkP6Y/Tgzf4BSkbp1c3bxtOlC3AceL4
EGzieHEkRSQzaVSExfUdnggOqtfCy6CPVcN5jJP7WRJnS7P0hnMvVnjoTxzW
YvSEfpvF08dcI/RHoVfHeRBRBraMVckxptfV+BmcQIN9T6/p+YIHIZ6Tfl4H
Ip2242RGz3nizfF8nqZLOdndpWH0KHgQbTtslx7sukn8KMUuEdiliTNIkrmY
+o/MDbz4jLty9yntJ1Ov4TgOz9J5DLW1WBKTy2gdg940C0Nt0uNFELIzY1G8
gQg8Cn7lKcw2YZodHss0ESKdsB+zaCZnHF7KBgM896DqCbtOY+9+HocLehJn
UUquQ/plQqtCgMtrsYDntKVwIE8hwHngzbkI2Zs2+wFeLzEpiGDZ83bpSVWq
axFOW6dSZsJnh/CFLEyVCS23hSZ5697+QvNfz+OUXrS9mASEe0yYNYEkUoEi
1Q6iabxbXsFPUZCCxXUKr4MbRHGygAQPyhXIBVrnZ62j6wP6E76go1I/UhH2
A8Ubwtn4Go3hyYy0aLnDnXmacO9eJIUDINp2daDRIx1kfhDCA4JssavoWLvS
5xar6vEyiRNYQ71TioM+hMzAIDbPrJaWeuTrymtL7iIJBFYuRCjMNGWVi3b1
oaJ/k/BILrJUVBkgfsTr1L6Den2AGJ7JCqMrPiWxzwMZe7/eB2W638fxLFwj
mqjhCzP69UwNMZbdVMaFdOMkqgh7+uZ8TUzpvv4VTuHN24G72CB1OE8CCf8S
7DCMY5kKOEEkyxTf/e9llaJnp7S90pTX0cdlTl0BGet1egMTjQjgpfBU9Fb8
6a16d413wTSAM67h/bfxsV/IxwopFCcSxXD6stOVQjV3lUoA58raGrtlz3wy
funnizH8H3TkiilPD94dtMkWk1pjPD4+tgMecY30kjB7gfynwXy3bPfDNxdX
7ML9RXipzVHKzseRl6yWhINsh/i8qrGN9nNIgr+v3h72ut39if447vR79mN3
NLAf97od83G/M7QD9vtj9fT6+LC7fTVSeDO1Gnzoth567aU/3SbSoUhSpJMF
uxJSUJ4r6e+crxgVOGUdNMCadZGjwjDAkj12mCUPiENSQDxL+HKONO+QyUvA
/Pb08rrV6wzqRY4ewmXmynaEAG3P4odd+kBPdmne7rvT65s2fWqDQr4UC+2x
n4WidcZTyCJab7iEDx8FyM08VDbiaZaQr8FOPPG3aeGdymKYchoBJFJ4FIun
+SyprHwjvHkUh/FsVVLRQTaD31lPU+vsjvdawz+5UkVjfa3bl8V2jq6vt3rd
Vy/urXCTjCfkBL0+nh9c/fh9/cK+AGhuwv1QrIoidYr/cZSClfC6mQt2IFcR
oDqO4kzCJRcxhP1RrNj3IhIJ1yFGYrxiORRuBcL1MspASl0pVQKWallUpvdD
PI/YG72UZ5N7EKNfUve1/lWfalTZcsLlvHUcPYgwXopKtlEtAr1m9vWfq1vm
xEkYUtvTyH+s2AA5AMgZl5C8TPQICwLhIJRVqpLGt0M1/rVZNQa1eVAheyKi
e/YmSKgG/rVM923Cs2geT0XCrk9vqrTnmNR2zSTdJqCxSbmXrpsNBXOrxVDz
k85Tx7mZB5KZRO1pR/XFFPWG1AbM3ZUF1F1ROk8kywiuHsGVpXB+0y4w2EX7
ugOa+ExYinFebF7AdCvmivRR0MTHmFG3AbW2nZ+JlJlBlPJWxNJuOsRoGiQA
Lf0C/RIERpnByDEgLg0gtbI0BhM1UfgOgYSSUUAhPiuI6glqrq/nwcmXGRXp
7oqtcWtrPXloVUAaq0eBo9ePSYsssqp7hKbUXM0H1vDVckpKWibBA8zB0EA6
sYcGU7L4ATblLAwW1CO0XMj8GPighNIlikTYZDLz5oxL9u7tIXWyb8JMpHGM
EWfxI8ILOLFiO2/Ojl81kcIgGIoeFqQMIiOjCS4DNxSkF7S6Wh201lCkpJeU
UHVDcbRiwRJhiir1VIE3cBcIrp0B+gcDaugyTwE7KCAipajokmNyhMpaK6Wp
TGI0iYXrUjSTuZ4QBea5USp6C0/4IO+QeuMsZdxH86lzA6JqKYnvMhFqoJS5
uo1h29rnF4EPBHScTxOFkgjIOEs88V2D8Lbx2XFeINGkCRKzp3zYeXbZxN6b
aueDUx8upDEVMmQCFWvaw7yi+kBFkoePdIrg0U6WCK6sUJ2gjJYrXzYdF7rx
YxbFKSznxUiwCBAdGCIlsCFTz+Eya8xX7JGXIrbpwBqeMKa0U2kRRdAFSQIw
feBRqnqHVDmLFywDrFr7Tr0qNLiYGNuAnin3qDul+ABFJ0cOvILkJchQFtfy
apzawCAagkQzR1ohcVZbjeAHD4E0HKDFJaYGLklBbHK0wsAKYql+Y0ErIsE2
bLlmGoxAXVAFwqVyNUCUsRhkI0Jyi+b+6mAmVtNkXs7aTGFqNyF8CrDTOU8x
MdEL9B0VqFsdcF3S3ButSi1EVlTiHCiBPNSyxicIf2QZ13mBIyVucglt1yUG
OKIBPkyMp+kj2ZAvMdz4C4UjhwUlIiQlNE98NUaanTu2UHU22zm5Pn9VgeMS
DLed00hz9LKQQ8HW+00+CQNk5JIjLNiCU9ZB9jeQzXLIBv6m6jVZ1CU2yLIK
J8voS3YhDSSojAnEFkAtPjPwKRiEJZkAbdy30izQ+5eUVzTU4DILTObxg5mQ
qV2ioYqMALoc6ewjkksoohlG4pkgiwakgyACVjeNvSI4PkTSpCxOr6fGOmM4
SDuhsAuwU6SBBpnaQKlZBIsjE4rEFJ50rdbsB1NUO1BW/cKNiKWlUjIqJj3y
lVTJBq5fIpViYB61OTlVYFBikzAdm6mynfYwzAIpf4IeWUgjmEnJBXosY+jU
Ib9HmYfeYxlLnXZrZFeIlAgMFkbtKHgz6t7z4qs+jEXkxb4qh4gRz9HTpvE6
PTUdXQ/oTPmEEcieRagbS99qLYvklu2I9qzdrLX9K6VnzaeejMrHBRGKRxV3
RtPN6iiKVKz2oxeiMHgg/6PMHJalX6ul4DTvYpU2ePoUjNr8aKwYiUfWQOnQ
0oVggz3wJEBSyxXlEprVaKtJW7jAn2okNYgMs01KYy0NFHWcktKmQjjt+81e
6kPbuTKAr5dTXkSB5OSR4mMgq0VayfyO4vUYZ6FfSt+IafERILmlRKNCQqOy
Ag+CZB03zy4L/72VoKwtBSkYqiXhtnrwJH6kKIUvL2qtK3WAiY+cyuQmu8Tb
Y58249+bna8PKveYHfr3dqPoQ9PBegz2WwXqCCf0MM2IjnxWjNS7d5Rf1/ue
eidu2wU0WTC1SFQX0jma1Dp5kV6P/d5w2N1fzkvrw/rJIWuWqDyqQrDgSOak
Q7nKsvgzF9Z0RASotQ5A1JWTwaCmOXkCn4pWz3AoTSv7ehlo4AovXrAr8a8M
+VjtnjKgSFFboMp7IOGoJleeD6RhdO4nWeP8p+sbOl+k3+zdhfp8dfzfP51e
HR/R5+uTg7Oz/IMdcX1y8dPZUfGpmHl4cX5+/O5IT8ZTtvbo/OAf+EVSNS4u
b04v3h2cNXLvyvMH112YKzQwLaku8snEvkCRFLgab94cXrLuQBmbdnQ/aLN3
R4MPquHQbOIIQKH/TFUBvVwKntB06io8vqRdPdkk4hJNRcTIs0mjm+fBlSNQ
veUgvMpmg82j0qaxqo/omLZFGC+nJV0DWotS/1vnbsCCNPbiUIOO9sxtWVaX
YZUMkounAbDE3nikXNsysPmDJvpkgSLNgr8fC6nSkKoiuadhKt6W3Jql2irP
kRXGpe2NpznPqZj+Er+28xbRv2EFk7f0Fnml7gKpIJIiofZzwWlLQEAUHUfI
G4DTdQ+8NvbvtXvtIYn83hwTKHyBg1jSmptKNoHU0LK1umg7z+g8N0LGBnDJ
wXVLmbdvTqyaHqxev7r9Uaxur8SU7Ugh2KdPan8SemsB2eXnz69KHedCUIus
QokyChqrBAWc1ky5uVxz6Iqlv+DSKBQE4hzdRWo6X+MBkMhs1VmSdYnbUeu3
rWRRWaj9hhz/kFfr1RroPkUtmUImoa5IplbRqInocKOY3ADRMFtE9nVKtbWx
Tu3W37YUqKD7+JCS06cXwvMlb/WWn+EBOQH98n1xuvGBlmkiNQ7D+JHI5xX8
M83h2CK0XE9rVkUKnhX7/oX4ZUkmdHPhphJ+prYhNy/5qg2Uvfag3VWBUqLS
NkTq8Oia0l93s2S2bFp5fi1FctNsS9jHDzzMQP7k1nIqOi1UdRZCCk+V1VnV
oKuRIl+ApUAeuhByi8zTJF7ohfVMrBd23L71ZoSAyn9j76ioVD+/6Sj/HyXr
b6zqpXhwpOBK7/P9hpkt+8NKn6t/bD5QM4+vL3vDPXgn3t28OWLMCqBfsI0H
79dO8T8UYF7xjU+fcr//rA1dxjXDuj8e1LPGC7bx4JuyHnZ79azxgm08+Fas
FTBQ6aordoCDXwMOxYCi5P13oUPBaxPTcu4KEYqRlOyoeXJttrBIU6FThIYV
pGhVaoKNqWDbRiKQ6/Ga1zNc7RGSDJ8+WUTqt/v0wMj/+bMl/4QENSyKyuV5
PDYAr7LRpJHn7vJk5/zV3TqrrWr5w9D2RxmQYkBAT8aHxCZs7dx353eWxJPm
W8NK09XIL01sgv+j2t0qVgCIjIn781jT/UR+X9FxTsCo4ksqcOp66KIFtqFe
apfNKcT6Rpveykh0z5bv95Q9YrPGrW4U/bm88WdSx1dlD9ub10Fp3rdvPPgD
aOpvR9Md1MXHkxJZMtdK0PnSjKq8RPivjJSDwVjLyDalVO82H3xjGTXRegnz
pGD2Mz69WIStLWlhY8vj35oYNLc2dcqFE/3h8nBYLQ9J6udh5eXJ32Tm/v32
/PZvu/ShQlzJ2u1QGPV6W0vJrwDQp7hu4aGTS2m/79ZLP94aZgu6zWT3nfTV
jSBN9WFftUM0ULzgqyar7PERCMWRKG1A3oEB22l1gW6UnhYCOiQlcHZX7gLv
9OHL3T3cZ6f7asLwzFznZTsIhFd3YLreKdJ1b4l+cQaPJldZe9VSDM2AV9uR
n3ZiNjb216FbfPTEUqOksWi/ybp7+G+fqT5/QXfH7Rmh8pAnTEUqVFvtQfXU
rEBiK6VpgirudptE/m3hW8PWmO6y0z4wGlfVcFdGn7/MB7Ne32B3Y4l1Nezm
6wPgmiKgFK5PpxVXeJza3dJZuFi4QBh1fqzVqH2L5LpNsRIljTrMzMUUPm01
3ZWi906NLz+5PaU9OPjqXds5KBAjDO61gsnduBs/6PPSEvToHLeI148+IEAh
qmqGKgq3zp4HvLm3osm5ieD3emtoY5NG0MVHr9hRybmo7TJzlrVianu2vGO+
gAMKro7LV4ynKffuJfmU3Zsg8aeZWrV5+y3y75/NwV+VhwvztAZ1HVXl/eaD
m4uji8nW/FYko+0JrkpvWyIujdobPi3m3nDzwTcVE/SeIeZ49LSY49Hmg28q
JuhtLRq0l9FVTqA6nSCjIr0h7EYFUd32c5yf1SZtseuGWFrwaMX07mFpG5UO
STKZ2ZO4xFKuHpLxNF4EXuV4pHJ+qHiYfHl3H/jlLKW2DG2SYrG+xBQndngW
UYAKQjE2F9y3eU3NuLL3eMBv2/mY2i8s5eKcc2VbeX0vDNC7itdOaUqlucLP
0pZy6TLa23Km3qzP5lxnjTqJNJYrHLujK7itIwGWooXKKRFpC/q5Y+/pRUGm
tJq7+7nBdbobftdUmjVc6ruLn+1W/VYNqRsqAa3FnFKSF1tiB5en23O5Mqt2
D1OvUnoQH9Pm+rmHef60HFQvRUJXSeqWR/QgVvizyCxF6bhRSL21V3yQjZEg
YJdHUT5WV4FDVlWlDl1bQqrwzJUiOoUGo0Y+KI8BPbxhMpdOOKXtYQ7fVQfF
zcIbW3wWxZIu9edp55lFedNcqtJb+7qn1Fx8daSOoMlJqmKR00WKmoNWewdO
oksm82lVVtJbK7+sUZhAXZqq0YHa/FkP30d1nk5l5l2xk2BxD+bJNxUwt6RO
uvujPPOmBifU3r+6p6RnquuGmoWSYdM0dqM/KR+akkeruykFIh0eHZ3pTn+v
2/mgpq6Vzcjrv//+u+f7oVM5VPmuWHmbKmuCdBSJXfZ/7Lu/s/9SLyHhLeRC
qvgru6evDR5E64JiSk9PAQY3y6UDpgS+3oZRa/BVCbqqH3qQAzhWSpfAqeaO
HzVWW0Gdz7SU9cpGqcCgVmEduWGeiBX50p72wc/ypvPu4MfLuzyUzGURPeVD
06Ev+M6Km8faMyplbGFucCu3mwWClmyhdD2hbNzM1UUapq4Ggjis+qOUOWEX
S/6vrHxJxYqAKequM6wxYfOX+z3X67lTPuqPp0PX7YzGnf7U3fc63nDc6XVG
+13u+b39qSt6w77L+Yh3+twbD6YDt7eHDv9l0wGpflU+xNik0KGzKSI1cjyZ
6QKgqgQMbmG5L4+NncrXCwnywdAY9yutqwznq5yjfEYnIdrnPzg6ah0fHp3Y
/KNyFF2VSwKVmQlUKM/mtt16PFADSZsWhWqG/XFzzaIkjJHuj5hWzVtmrrXr
Xsfd86e+7/e7e8P94f6Yi6EvBvvcc3u9jj+2tEedwf5gX4wH/mA8cPfG/cGg
P+jA2HvDfn/k9142tXlb+81cCmVevfYa226oUykceO7nX/Yojd45OT84bF2f
HLToSKbbGxuLKtusD2f6G2tIOdQWwzJUcSkWWDm8hDi9Mg40f8kF3Ffse8Ne
D3T3OnujMR95Amtz9zh8N6feGYx73X1/f9Qf7Y2nY9HlvjsWLvQBVbkdIfol
QTjioDfujd19zveGveFgKvqj7oj3oEZwc8tDhRh1PMFHQ3fojXlPeD3hggmU
PB0N9kaloaDh9kFsNNqb7g2nA2/qjbsCsTkYDUZ8bMJsTXcUDpUwKpdTl7oI
onqKNNJ7Xki9UN8tVN/ehH/Zm9ufXtDTz2rPLq+/ddV9pQr0YmDNhsraDRNb
0q9v4NmeXqcrJUajyqxh5iYr9j7/MqY+p3mnv2+MALpQkNjSjaiCJbZDF4qE
1Jv79nuZcBLlKuXGdFJqKnKoWPJARViO9w2waKiph3zJ7dX0Cfvne0QxbU+h
tkoe/vlBDckJTjbvJeS9UOXSfXU5x4e9Zy6n97XLAYsnltP7pss5eLZ1Rl+7
nIOnrEPbf01KP39iPbbeKjs+Cvo1d/bmceCJvP2qK79k7N2jx72rlFDlMqxa
W+1+B5/Ng19vtGA9NaN6zxmVt/flUQYF1sKcXRZNypMBX94m/VZhX2L+BADY
0blPKV/TPqTdD0ZXf51xV4RIaF3tJPSlIj2RvoO36XNPlCrVK5l59fJVTqW+
EuVy754w+MjujZxgsXGycj5NmP5nUoT/XWOKPlHQF6ToH2Jx/sJOzVcEgkjt
v2T0bQH6rqbz/4Bl3St1RgAA

-->

</rfc>
