<?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-09" 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-09"/>
    <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="21"/>
    <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 decide 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>The hash/signature algorithm combination is <bcp14>RECOMMENDED</bcp14> to be equal or stronger to that of the payload hash algorithm.
For example, if the payload was produced with SHA-256, and is signed with ECDSA, use at least P-256 and SHA-256.
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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
tO5r5Atl3BEnKs4B2pdZSUljGPwbFwk1imE5AAA=

-->

</rfc>
