<?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-08" 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-08"/>
    <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="20"/>
    <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 COSE_Sign or a COSE_MAC, the recipient 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.</t>
      <t>In some applications, such as remote signing procedures, conveyance of hashes instead of original payload content reduces 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.
The term payload is defined in <xref section="4.1" sectionFormat="of" target="RFC9052"/> for COSE_Sign, and in <xref section="6.1" sectionFormat="of" target="RFC9052"/> for COSE_Mac.
The term preimage refers to the set of input values to a function that produce a given output, called the image.
A hash function applied to a message (preimage) produces a digest value (image).</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" markers="true"><![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 that 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>For example, when the actual content is a bstr, a Verifier appraising a content-type bstr has to decicde if that bstr describes the digest bytes or the preimage bytes. Setting preimage-content-type to bstr, makes it clear that the preimage bytes themselves were a bstr.</t>
      <section anchor="envelope-extended-diagnostic-notation-appendix-g-of-rfc8610">
        <name>Envelope Extended Diagnostic Notation (<xref section="G" sectionFormat="of" target="RFC8610"/>).</name>
        <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>
    <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.</t>
      </section>
      <section anchor="coseencrypt">
        <name>COSE_Encrypt</name>
        <t>Only COSE_Sign/COSE_Sign1 and COSE_Mac/COSE_Mac0 are in scope for this document. COSE_Encrypt/COSE_Encrypt0 is out of the scope of this document.</t>
      </section>
      <section anchor="payload-verification">
        <name>Payload Verification</name>
        <t>If a payload-location is specified, a verifier can choose to fetch the content, and confirm that the digest of it, produced with the function defined by payload-hash-alg, matches the payload bytes. Verifiers that not have access to the internet and obtain the preimage via other means will not be able to perform that check, nor to derive utility from it.</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 225?>

<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, Antoine Delignat-Lavaud, Cedric Fournet.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
4H8AKgW3IFA5AAA=

-->

</rfc>
