<?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.19 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cose-hash-envelope-07" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title>COSE Hash Envelope</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cose-hash-envelope-07"/>
    <author fullname="Orie Steele">
      <organization/>
      <address>
        <email>orie@or13.io</email>
      </address>
    </author>
    <author fullname="Steve Lasker">
      <organization/>
      <address>
        <email>stevenlasker@hotmail.com</email>
      </address>
    </author>
    <author initials="H." surname="Birkholz" fullname="Henk Birkholz">
      <organization abbrev="Fraunhofer SIT">Fraunhofer SIT</organization>
      <address>
        <postal>
          <street>Rheinstrasse 75</street>
          <city>Darmstadt</city>
          <code>64295</code>
          <country>Germany</country>
        </postal>
        <email>henk.birkholz@ietf.contact</email>
      </address>
    </author>
    <date year="2025" month="October" day="15"/>
    <area>Security</area>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 54?>

<t>This document defines new COSE header parameters for signaling a payload as an output of a hash function.
This mechanism enables faster validation, as access to the original payload is not required for signature validation.
Additionally, hints of the detached payload's content format and availability are defined, providing references to optional discovery mechanisms that can help to find original payload content.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://cose-wg.github.io/draft-ietf-cose-hash-envelope/draft-ietf-cose-hash-envelope.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-cose-hash-envelope/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        CBOR Object Signing and Encryption 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/cose-wg/draft-ietf-cose-hash-envelope"/>.</t>
    </note>
  </front>
  <middle>
    <?line 60?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>COSE defined detached payloads in <xref section="2" sectionFormat="of" target="RFC9052"/>, using <tt>nil</tt> as the payload.
In order to verify a signature over a COSE_Sign1, the signature checker requires access to the payload content.
Hashes are already used on a regular basis as identifiers for payload data, such as documents or software components.
As hashes typically are smaller than the payload data they represent, they are simpler to transport.
Additional hints in the protected header ensure cryptographic agility for the hashing and signing algorithms.
Hashes and other identifiers are commonly used as hints to discover and distinguish resources.
Using a hash as an identifier for a resource has the advantage of enabling integrity checking.
In some applications, such as remote signing procedures, conveyance of hashes instead original payload content reduce transmission time and costs.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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.</t>
      <?line -18?>

<t>The terms COSE and CDDL are defined in <xref target="RFC9052"/> and <xref target="RFC8610"/> respectively.</t>
    </section>
    <section anchor="param-spec">
      <name>Header Parameters</name>
      <t>This document specifies the following new header parameters commonly used alongside hashes to identify resources:</t>
      <dl>
        <dt>258:</dt>
        <dd>
          <t>the hash algorithm used to produce the payload.</t>
        </dd>
        <dt>259:</dt>
        <dd>
          <t>the content type of the bytes that were hashed (preimage) to produce the payload, given as a content-format number (<xref section="12.3" sectionFormat="of" target="RFC7252"/>) or as a media-type name optionally with parameters (<xref section="8.3" sectionFormat="of" target="RFC9110"/>).</t>
        </dd>
        <dt>260:</dt>
        <dd>
          <t>an identifier enabling retrieval of the original resource (preimage) identified by the payload.</t>
        </dd>
      </dl>
    </section>
    <section anchor="hash-envelope-cddl">
      <name>Hash Envelope CDDL</name>
      <sourcecode type="cddl"><![CDATA[
Hash_Envelope = #6.18(Hash_Envelope_as_COSE_Sign1)

Hash_Envelope_as_COSE_Sign1 = [
    protected: bstr .cbor Hash_Envelope_Protected_Header,
    unprotected: Hash_Envelope_Unprotected_Header,
    payload: bstr / nil,
    signature: bstr
]

Hash_Envelope_Protected_Header = {
    ? &(alg: 1) => int,
    &(payload_hash_alg: 258) => int
    ? &(payload_preimage_content_type: 259) => uint / tstr
    ? &(payload_location: 260) => tstr
    * (int / tstr) => any
}

Hash_Envelope_Unprotected_Header = {
    * (int / tstr) => any
}
]]></sourcecode>
      <ul spacing="normal">
        <li>
          <t>Label <tt>1</tt> (alg) Cryptographic algorithm to use</t>
        </li>
        <li>
          <t>Label <tt>258</tt> (payload hash alg) <bcp14>MUST</bcp14> be present in the protected header and <bcp14>MUST NOT</bcp14> be present in the unprotected header.</t>
        </li>
        <li>
          <t>Label <tt>259</tt> (content type of the preimage of the payload) <bcp14>MAY</bcp14> be present in the protected header and <bcp14>MUST NOT</bcp14> be present in the unprotected header.</t>
        </li>
        <li>
          <t>Label <tt>260</tt> (payload_location) <bcp14>MAY</bcp14> be present in the protected header and <bcp14>MUST NOT</bcp14> be present in the unprotected header.</t>
        </li>
        <li>
          <t>Label <tt>3</tt> (content_type) <bcp14>MUST NOT</bcp14> be present in the protected or unprotected headers.</t>
        </li>
      </ul>
      <t>Label <tt>3</tt> is easily confused with label <tt>259</tt> payload_preimage_content_type.
The difference between content_type (3) and payload_preimage_content_type (259) is content_type is used to identify the content format associated with payload, whereas payload_preimage_content_type is used to identify the content format of the bytes which are hashed to produce the payload.</t>
      <t>Profiles that rely on this specification <bcp14>MAY</bcp14> choose to mark 258, 259, 260 (or other header parameters) critical, see <xref section="C.1.3" sectionFormat="of" target="RFC9052"/> for more details.</t>
      <t>Envelope Extended Diagnostic Notation (<xref section="G" sectionFormat="of" target="RFC8610"/>).</t>
      <t>The following informative example demonstrates how to construct a hash envelope for a resource already commonly referenced by its hash.</t>
      <sourcecode type="cbor-diag"><![CDATA[
18([ # COSE_Sign1
  <<{
    / signature alg   / 1: -35, # ES384
    / key identifier  / 4: h'75726e3a...32636573',
    / COSE_Sign1 type / 16: "application/example+cose",
    / hash algorithm  / 258: -16, # sha256
    / media type      / 259: "application/spdx+json",
    / location        /
         260: "https://sbom.example/.../manifest.spdx.json"
  }>>
  / unprotected / {},
  / payload     / h'935b5a91...e18a588a',
         # As seen in manifest.spdx.json.sha256
  / signature   / h'15280897...93ef39e5'
         # ECDSA Signature with SHA 384 and P-384
])
]]></sourcecode>
      <t>In this example, an <xref target="SPDX"/> software bill of materials (SBOM) in JSON format is already commonly identified by its SHA256 hash.
For example, some tooling generates a file, such as <tt>manifest.spdx.json.sha256</tt>, which contains the SHA256 hash of the corresponding <tt>manifest.spdx.json</tt> file.</t>
      <t>The content type for <tt>manifest.spdx.json</tt> is already well known as <tt>application/spdx+json</tt>, and is <eref target="https://www.iana.org/assignments/media-types/application/spdx+json">registered with IANA</eref>.</t>
      <t>The full JSON SBOM is available at a URL, such as <tt>https://sbom.example/.../manifest.spdx.json</tt>.</t>
      <t>The payload of this COSE_Sign1 is the SHA256 hash of the <tt>manifest.spdx.json</tt>, which is typically found in an adjacent file (<tt>manifest.spdx.json.sha256</tt>).</t>
      <t>The type of this COSE_Sign1 is <tt>application/example+cose</tt>, but other types may be used to establish more specific media types for signatures of hashes.</t>
      <t>The signature is produced using ES384, as defined in <xref section="3.4" sectionFormat="of" target="RFC7518"/>, which means using ECDSA with the SHA384 hash function and P-384 elliptic curve.</t>
      <t>This example is chosen to highlight that an existing system may use a hash algorithm such as SHA256.
This hash becomes the payload of a COSE_Sign1.
When signed with a signature algorithm that is parameterized via a hash function, such as ECDSA with SHA384, the to be signed structure is as described in Section 4.4 of RFC9052.</t>
      <t>The resulting signature is computed over the protected header and payload, providing integrity and authenticity for the hash algorithm, content type and location of the associated resource, in this case a software bill of materials.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="choice-of-hash-function">
        <name>Choice of Hash Function</name>
        <t>It is <bcp14>RECOMMENDED</bcp14> to align the strength of the chosen hash function to the strength of the chosen signature algorithm.
For example, when signing with ECDSA using P-256 and SHA-256, use SHA-256 to hash the payload.
Note that when using a pre-hash algorithm, the algorithm <bcp14>SHOULD</bcp14> be registered in the IANA COSE Algorithms registry, and should be distinguishable from non-pre hash variants that may also be present.
The approach this specification takes is just one way to perform application-agnostic pre-hashing, meaning the pre hashing is not done with binding or consideration for a specific application context, while performing application (COSE) specific signing, meaning the to be signed bytes include the COSE structures necessary to distinguish a COSE signature from other digital signature formats.</t>
      </section>
      <section anchor="encrypted-hashes">
        <name>Encrypted Hashes</name>
        <t>When present in COSE_Encrypt, the header parameters registered in this document leak information about the ciphertext.
These parameters <bcp14>SHOULD NOT</bcp14> be present in COSE_Encrypt headers unless this disclosure is acceptable.</t>
        <t>When present in a protected header, the semantics are the same as for a COSE_Sign1: decrypted payload is expected to be the output of the hash function specified in the protected header.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="cose-header-parameters">
        <name>COSE Header Parameters</name>
        <t>IANA is requested to add the COSE header parameters defined in <xref target="param-spec"/>, as listed in <xref target="iana-header-params"/>, to the "COSE Header Parameters" registry <xref target="IANA.cose_header-parameters"/>, in the 'Integer values from 256 to 65535' range ('Specification Required' Registration Procedure).</t>
        <table anchor="iana-header-params">
          <name>Newly registered COSE Header Parameters  (1): Value Registry  (2): https://www.iana.org/assignments/cose/cose.xhtml#algorithms  (3): https://www.iana.org/assignments/core-parameters/core-parameters.xhtml#content-formats</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Label</th>
              <th align="left">Value Type</th>
              <th align="left">(1)</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>payload-hash-alg</tt></td>
              <td align="left">258</td>
              <td align="left">int</td>
              <td align="left">(2)</td>
              <td align="left">The hash algorithm used to produce the payload of a COSE_Sign1</td>
              <td align="left">RFCthis, <xref target="param-spec"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>preimage-content-type</tt></td>
              <td align="left">259</td>
              <td align="left">uint / tstr</td>
              <td align="left">(3)</td>
              <td align="left">The content-format number or content-type (media-type name) of data that has been hashed to produce the payload of the COSE_Sign1</td>
              <td align="left">RFCthis, <xref target="param-spec"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>payload-location</tt></td>
              <td align="left">260</td>
              <td align="left">tstr</td>
              <td align="left">(none)</td>
              <td align="left">The string or URI hint for the location of the data hashed to produce the payload of a COSE_Sign1</td>
              <td align="left">RFCthis, <xref target="param-spec"/></td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </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="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="IANA.cose_header-parameters" target="https://www.iana.org/assignments/cose">
          <front>
            <title>COSE Header Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <referencegroup anchor="BCP205" target="https://www.rfc-editor.org/info/bcp205">
          <reference anchor="RFC7942" target="https://www.rfc-editor.org/info/rfc7942">
            <front>
              <title>Improving Awareness of Running Code: The Implementation Status Section</title>
              <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
              <author fullname="A. Farrel" initials="A." surname="Farrel"/>
              <date month="July" year="2016"/>
              <abstract>
                <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
                <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="205"/>
            <seriesInfo name="RFC" value="7942"/>
            <seriesInfo name="DOI" value="10.17487/RFC7942"/>
          </reference>
        </referencegroup>
        <reference anchor="SPDX" target="https://spdx.dev/use/specifications/">
          <front>
            <title>SPDX Specification</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC7518">
          <front>
            <title>JSON Web Algorithms (JWA)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification registers cryptographic algorithms and identifiers to be used with the JSON Web Signature (JWS), JSON Web Encryption (JWE), and JSON Web Key (JWK) specifications. It defines several IANA registries for these identifiers.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7518"/>
          <seriesInfo name="DOI" value="10.17487/RFC7518"/>
        </reference>
      </references>
    </references>
    <?line 220?>

<section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>Note to RFC Editor: Please remove this section as well as references to <xref target="BCP205"/> before AUTH48.</t>
      <t>This section records the status of known implementations of the protocol defined by this specification at the time of posting of this Internet-Draft, and is based on a proposal described in <xref target="BCP205"/>.
The description of implementations in this section is intended to assist the IETF in its decision processes in progressing drafts to RFCs.
Please note that the listing of any individual implementation here does not imply endorsement by the IETF.
Furthermore, no effort has been spent to verify the information presented here that was supplied by IETF contributors.
This is not intended as, and must not be construed to be, a catalog of available implementations or their features.
Readers are advised to note that other implementations may exist.</t>
      <t>According to <xref target="BCP205"/>, "this will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.
It is up to the individual working groups to use this information as they see fit".</t>
      <section anchor="transmute-prototype">
        <name>Transmute Prototype</name>
        <t>Organization: Transmute Industries Inc</t>
        <t>Name: https://github.com/transmute-industries/transmute</t>
        <t>Description: A command line tool and GitHub action for securing software artifacts in GitHub workflows.</t>
        <t>Maturity: Prototype</t>
        <t>Coverage: The current version ('main') implements this specification and demonstrates hash envelope signing with Azure Key Vault and Google Cloud KMS in addition to supporting local keys.</t>
        <t>License: Apache-2.0</t>
        <t>Implementation Experience: No interop testing has been done yet.
The code works as proof of concept, but is not yet production ready.</t>
        <t>Contact: Orie Steele (orie@or13.io)</t>
      </section>
      <section anchor="datatrails-preview">
        <name>DataTrails Preview</name>
        <t>Organization: DataTrails</t>
        <t>Name: https://github.com/datatrails/scitt-action</t>
        <t>Description: A GitHub Action for registering statements about artifacts on a transparency service.</t>
        <t>Maturity: Preview</t>
        <t>Coverage: The current version ('main') implements this specification and demonstrates hash envelope signing with DataTrails implementation of SCITT.</t>
        <t>License: MIT</t>
        <t>Implementation Experience: Interop testing has been performed between DigiCert and DataTrails.
The code works as proof of concept, but is not yet production ready.</t>
        <t>Contact: Steve Lasker (stevenlasker@hotmail.com)</t>
      </section>
      <section anchor="digicert-preview">
        <name>DigiCert Preview</name>
        <t>Organization: DigiCert</t>
        <t>Name: https://github.com/digicert/scitt-action</t>
        <t>Description: A GitHub Action for remote signing and registering statements about artifacts on a transparency service.</t>
        <t>Maturity: Preview</t>
        <t>Coverage: The current version ('main') implements this specification and demonstrates hash envelope signing with DigiCert Software Trust Manager.</t>
        <t>License: MIT</t>
        <t>Implementation Experience: Interop testing has been performed between DigiCert and DataTrails.
The code works as proof of concept, but is not yet production ready.</t>
        <t>Contact: Corey Bonnell (Corey.Bonnell@digicert.com)</t>
      </section>
      <section anchor="microsoft-cosesigntool">
        <name>Microsoft CoseSignTool</name>
        <t>Organization: Microsoft</t>
        <t>Name: https://github.com/microsoft/CoseSignTool</t>
        <t>Description: A platform-agnostic command line application to create and validate COSE signatures.</t>
        <t>Maturity: This is an alpha release.</t>
        <t>Coverage: The current version (1.6.5) implements this specification through the 'indirect-sign' and 'indirect-verify' plugins.</t>
        <t>License: MIT</t>
        <t>Implementation Experience: Tests are run with CDDL schema-validated inputs and outputs.
No direct interoperability testing with other implementations has been performed so far.</t>
        <t>Contact: The COSE Sign Tool team, via GitHub Issues (https://github.com/microsoft/CoseSignTool/issues)</t>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The following individuals provided input into the final form of the document: Carsten Bormann, Henk Birkholz, Antoine Delignat-Lavaud, Cedric Fournet.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA91b63IbN5b+30+BlasiaYYXUbJkiZObLMmxdmxLa8kzk0ql
LLAbJBE3G9xGN2nGVp5lnmWebL9zAPSFuiSpmk3VLsuW2Gjg4OCcD+cGqNvt
Rouh2IsKXaRqKDZOLq7OxEtpp+IsW6jUzNVGFMtiKGyRRImJMzlDtySX46Kr
VTHuxsaq7hQDusoP6O48i2yRKzkbivOz6xdRVs5GKh9Gscmsymxph6LISxVJ
9MGUVyouc12sNqIParU0eYJhWaHyTBXdU5ooWqisVMNIiEluyjlx+fzirbgY
/aTiQlzpSaaziZBZAp7jfDUvtMk20LtYzWlJfzf5B+rwHQ2m9pnUKdqJ829p
DT2TT6hd5vEU7dOimNthv0/dqEkvVC9061NDf5SbpVV9ItCngRNdTMuRJ9ld
TvqPyodGpLJQtmhM5kf2HKmeNo/TePxtb1rM0o0okmUxNRB81BXjMk2d7i5y
rcRVoVSqwIhywjBo/Nbkgz3M3O6OngslXkn7QeV1f0utWcqt305NQa292Mxo
rM6g4Jc98VznH6Ym/RmjHKmXKvvQbIU8h+JFLstsasYqF1fn16SF0ShXi3te
+KmnoNIbeSpOfwBWIeMCfQh3CnJ9O1Vgo8iltUo828eb2CRgYfPg6e7R/iY9
A3FDcSrzmS1kUnCPMityNH6n8pnMVlGUGXwpoH/C3tsXJ89293eH4uTi+NI9
Hx4MdvB8evrKPR/tuPdXZ/55QO9fXl9fdq/AfVbo2EaRzsZNus9PLnd39unb
1eXpP+g3kCvzCS0joMPOk4+9RC36JRBn5yrWY41dCZzbvhvgti9REFfN957x
/cEhYKDAAVZNU529egH04VUx1ZYQOcrx/MWTj7s7u4d/AXa63S5UQSKEYKNr
9BLY/uUMNESixjpTVmRqyauFTmQCPc1lDkVj61qBJQqLnSlT3pt4tUqNTIS0
2KjClMW8LIQZ4w0hF3jLYmK352aaqXgqM21nQmVylGKqsQTkcrEAvYQX1mFS
caysFYURxVQRiCcaM1aTgVJmCpGr/y51rpKaqaLMVYNWLzpOEk3fZJquOmKq
s8ISd0Q1UcDWFKM91U0rCG8kB6dHtjxyQdZipFMIGIZEeRklHTHPzUInJIVc
AcwqA8vEsZm7CUWibWwWKl/Vy0aHKQjHENVUpXPqDmrJ3RV6TnpOXzOdJNjV
0RMyoLlJSpZpFLGOPEN31mOxYcWnT7DC1Fns0ro9lm9vO6K0xPpNptMbkjhJ
xA/sRefQZE6KB39YgB5j6Q0B06LQQLO/Jys96PDwugPYiGFAgoLW9XlnkeSX
qBeGyhTOI1mBPawEbEsQmZSw12IkLfQOVnVCeB/rAMdADjqXHWHLeEq9Aqih
b4DDjIslkYcpm5uMmoENyxglra3m2FaACLNgZ/hKi4fOWvzSBNSwAk9zLAtk
Ou6Zh+nZPHUyw+bK7NzkRROAHn3a08xNAc1gkX6PkQMlBsnPmUku51MdCzlx
wKNl0ijiN/hEG/xjOgF8iunM1oIkSKF/3pKVX//MZKmXL8TkmALPAa08GA8F
aJcaWxgLNWUO/fWid9Ztet7absfXEzCTsupOnZhnmSxgIeVEEQB52xMRTKsm
FB04sKCJYWfNDCPm8zSYwVqhuZpBZNWyIcBYJRAZugBIC7WS2IE0h1cq+QmI
9sG9BYLYSMopa6atpV1SaJo/o06WMIItdw2voTOTmsmK7KUSiGYEhTNWbLx+
d3W90XG/xZsL/v727L/enb89O6XvVy+PX72qvkS+x9XLi3evTutv9ciTi9ev
z96cusFoFa2maOP18fd4Q/xtXFxen1+8OX614RDVNOOkaGh0pFjKOaBasLKj
RNk41yM8YAz807/+OXgKE/EfMAu7g8HR7a1/OBw8e4qHJVyym40h4x4J7xE0
pLAlQQVbBeZsrguZWjbddmqWZN1yBen96QeSzI9D8eUong+efu0baMGtxiCz
ViPL7G7LncFOiPc03TNNJc1W+5qk2/wef996DnJvNH75DSCtRHdw+M3XkcMI
xA5jz/aZ5EehRNN7ONPcpfeQM/WgJ3TCExA9J5uNkG/FAHzpDMRl7YQ/PWGP
3KWOt+tO3IcRyu2+sUlTs6QNQ079rj9fMwipySYWe7qyjCbs8FVtCBBx7O4f
UrgxrKxSbYYcJQycs6dSbdeCkUf1yLAVKaIPfnm0KpT3k0ugyHGSiC3AWM9g
RrYfoN1BuI7Yle1SINz1ntxlKmKrdoeD3d6e94gU/d3ebpOf4LEzlWjZZZYo
vq0cOm0BLLApvQbBw4oeRYegR2s92HFrbRvKyghiYyI+R7wS1l7ZqsqKNpZd
UUggozWpPmnndi52jX755RcRI3Rgv/C+evmVeHLQGxxutVrfS/u+9ujbUfTI
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
XvQ/kdh6Xq84AAA=

-->

</rfc>
