<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.24 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cose-hash-envelope-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title>COSE Hash Envelope</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cose-hash-envelope-03"/>
    <author fullname="Orie Steele">
      <organization>Transmute</organization>
      <address>
        <email>orie@transmute.industries</email>
      </address>
    </author>
    <author fullname="Steve Lasker">
      <organization>DataTrails</organization>
      <address>
        <email>steve.lasker@datatrails.ai</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="March" day="03"/>
    <area>Security</area>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 53?>

<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 59?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>COSE defined detached payloads in Section 2 of <xref 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, CDDL, and EDN are defined in <xref target="RFC9052"/>, <xref target="RFC8610"/>, <xref target="I-D.draft-ietf-cbor-edn-literals"/> 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>TBD_1:</dt>
        <dd>
          <t>the hash algorithm used to produce the payload.</t>
        </dd>
        <dt>TBD_2:</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>TBD_3:</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_Protected_Header = {
    ? &(alg: 1) => int,
    &(payload_hash_alg: TBD_1) => int
    &(payload_preimage_content_type: TBD_2) => uint / tstr
    ? &(payload_location: TBD_3) => tstr
    * int / tstr => any
}

Hash_Envelope_Unprotected_Header = {
    * int / tstr => any
}

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

Hash_Envelope = #6.18(Hash_Envelope_as_COSE_Sign1)
]]></sourcecode>
      <ul spacing="normal">
        <li>
          <t>Label <tt>1</tt> (alg) Cryptographic algorithm to use</t>
        </li>
        <li>
          <t>Label <tt>TBD_1</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>TBD_2</tt> (content type of the preimage of the payload) <bcp14>MAY</bcp14> be present in the protected header or unprotected header.</t>
        </li>
        <li>
          <t>Label <tt>TBD_3</tt> (payload_location) <bcp14>MAY</bcp14> be added to the protected header and <bcp14>MUST NOT</bcp14> be presented 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>TBD_2</tt> payload_preimage_content_type.
The difference between content_type (3) and payload_preimage_content_type (TBD2) 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 TBD_1, TBD_2, TBD_3 (or other header parameters) critical, see <xref section="C.1.3" sectionFormat="of" target="RFC9052"/> for more details.</t>
    </section>
    <section anchor="envelope-edn">
      <name>Envelope EDN</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  / TBD_1: -16, # sha256
    / media type      / TBD_2: "application/spdx+json",
    / location        /
         TBD_3: "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 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 which means using ECDSA with 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 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 preforming 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">TBD_1</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">TBD_2</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">TBD_3</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>
        <reference anchor="I-D.draft-ietf-cbor-edn-literals">
          <front>
            <title>CBOR Extended Diagnostic Notation (EDN)</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="8" month="January" year="2025"/>
            <abstract>
              <t>   This document formalizes and consolidates the definition of the
   Extended Diagnostic Notation (EDN) of the Concise Binary Object
   Representation (CBOR), addressing implementer experience.

   Replacing EDN's previous informal descriptions, it updates RFC 8949,
   obsoleting its Section 8, and RFC 8610, obsoleting its Appendix G.

   It also specifies and uses registry-based extension points, using one
   to support text representations of epoch-based dates/times and of IP
   addresses and prefixes.


   // (This cref will be removed by the RFC editor:) The present
   // revision (–16) addresses the first half of the WGLC comments,
   // except for the issues around the specific way how to best achieve
   // pluggable ABNF grammars for application-extensions.  It is
   // intended for use as a reference document for the mid-WGLC CBOR WG
   // interim meeting on 2025-01-08.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-16"/>
        </reference>
        <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>
      </references>
    </references>
    <?line 219?>

<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@transmute.industries)</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 (steve.lasker@datatrails.ai)</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>
    <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:
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

-->

</rfc>
