<?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.35 (Ruby 3.3.5) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-scitt-receipts-ccf-profile-04" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.32.0 -->
  <front>
    <title abbrev="CCF Profile for COSE Receipts">CCF Profile for COSE Receipts</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-scitt-receipts-ccf-profile-04"/>
    <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>
    <author initials="A." surname="Delignat-Lavaud" fullname="Antoine Delignat-Lavaud">
      <organization>Microsoft Research</organization>
      <address>
        <postal>
          <street>21 Station Road</street>
          <city>Cambridge</city>
          <code>CB1 2FB</code>
          <country>UK</country>
        </postal>
        <email>antdl@microsoft.com</email>
      </address>
    </author>
    <author initials="C." surname="Fournet" fullname="Cedric Fournet">
      <organization>Microsoft Research</organization>
      <address>
        <postal>
          <street>21 Station Road</street>
          <city>Cambridge</city>
          <code>CB1 2FB</code>
          <country>UK</country>
        </postal>
        <email>fournet@microsoft.com</email>
      </address>
    </author>
    <author initials="A." surname="Chamayou" fullname="Amaury Chamayou">
      <organization>Microsoft Research</organization>
      <address>
        <postal>
          <street>21 Station Road</street>
          <city>Cambridge</city>
          <code>CB1 2FB</code>
          <country>UK</country>
        </postal>
        <email>amaury.chamayou@microsoft.com</email>
      </address>
    </author>
    <date year="2026" month="June" day="24"/>
    <area>Security</area>
    <workgroup>SCITT</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 79?>

<t>This document defines a new verifiable data structure (VDS) type for COSE Receipts and inclusion proofs specifically designed for append-only logs produced by the Confidential Consortium Framework (CCF) to provide stronger tamper-evidence guarantees.</t>
    </abstract>
  </front>
  <middle>
    <?line 83?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The COSE Receipts document <xref target="I-D.ietf-cose-merkle-tree-proofs"/> defines a common framework for expressing different types of proofs about verifiable data structures (VDS), providing a standardized way to convey trust-relevant evidence. For instance, inclusion proofs guarantee to a verifier that a given serializable element is recorded at a given state of the VDS, while consistency proofs are used to establish that an inclusion proof is still consistent with the new state of the VDS at a later time.</t>
      <t>In this document, we define a new type of VDS and inclusion proof associated with an application of the Confidential Consortium Framework (CCF) ledger that implements the SCITT Architecture defined in <xref target="I-D.ietf-scitt-architecture"/>. This VDS carries indexed transaction information in a binary Merkle Tree, where new transactions are appended to the right, so that the binary decomposition of the index of a transaction can be interpreted as the position in the tree if 0 represents the left branch and 1 the right branch.
Compared to <xref target="RFC9162"/>, the leaves of CCF trees carry additional internal information for the following purposes:</t>
      <ol spacing="normal" type="1"><li>
          <t>To bind the full details of the transaction executed, which is a superset of what is exposed in the proof and captures internal details useful for detailed system audit, but not for application purposes.</t>
        </li>
        <li>
          <t>To allow the distributed system executing the application logic in Trusted Execution Environments (TEEs) to persist signatures to storage early. Receipt production is only enabled once transactions are fully committed by the consensus protocol.</t>
        </li>
      </ol>
      <section anchor="requirements-notation">
        <name>Requirements Notation</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?>

</section>
    </section>
    <section anchor="description-of-the-confidential-consortium-framework-ledger-verifiable-data-structure">
      <name>Description of the Confidential Consortium Framework Ledger Verifiable Data Structure</name>
      <t>This document extends the "COSE Verifiable Data Structure Algorithms" registry of <xref target="I-D.ietf-cose-merkle-tree-proofs"/> with the following value:</t>
      <table align="left" anchor="verifiable-data-structure-values">
        <name>COSE Verifiable Data Structure Algorithms</name>
        <thead>
          <tr>
            <th align="left">Name</th>
            <th align="left">Value</th>
            <th align="left">Description</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">CCF_LEDGER_SHA256</td>
            <td align="left">TBD_1 (requested assignment 2)</td>
            <td align="left">Historical transaction ledgers, such as the CCF ledger</td>
            <td align="left">RFCthis</td>
          </tr>
        </tbody>
      </table>
      <section anchor="merkle-tree-shape">
        <name>Merkle Tree Shape</name>
        <t>A CCF ledger is a binary Merkle Tree constructed from a hash function H, which is defined from the log type. For instance, the hash function for <tt>CCF_LEDGER_SHA256</tt> is <tt>SHA256</tt>, whose <tt>HASH_SIZE</tt> is 32 bytes.</t>
        <t>The Merkle Tree encodes an ordered list of <tt>n</tt> transactions T_n = {T[0], T[1], ..., T[n-1]}. We define the Merkle Tree Hash (MTH) function, which takes as input a list of serialized transactions (as byte strings), and outputs a single HASH_SIZE byte string called the Merkle root hash, by induction on the list.</t>
        <t>This function is defined as follows:</t>
        <t>The hash of an empty list is the hash of an empty string:</t>
        <figure anchor="empty-list-merkle-tree-hash">
          <name>Merkle Tree Hash of Empty List</name>
          <artwork><![CDATA[
MTH({}) = HASH().
]]></artwork>
        </figure>
        <t>The hash of a list with one entry (also known as a leaf hash) is:</t>
        <figure anchor="single-entry-merkle-tree-hash">
          <name>Merkle Tree Hash of a Single Entry</name>
          <artwork><![CDATA[
MTH({d[0]}) = HASH(d[0]).
]]></artwork>
        </figure>
        <t>For n &gt; 1, let k be the largest power of two smaller than n (i.e., k &lt; n &lt;= 2k). The Merkle Tree Hash of an n-element list D_n is then defined recursively as:</t>
        <figure anchor="recursive-merkle-tree-hash">
          <name>Recursive Merkle Tree Hash</name>
          <artwork><![CDATA[
MTH(D_n) = HASH(MTH(D[0:k]) || MTH(D[k:n])),
]]></artwork>
        </figure>
        <t>where:</t>
        <ul spacing="normal">
          <li>
            <t>|| denotes concatenation</t>
          </li>
          <li>
            <t>: denotes concatenation of lists</t>
          </li>
          <li>
            <t>D[k1:k2] = D'_(k2-k1) denotes the list {d'[0] = d[k1], d'[1] = d[k1+1], ..., d'[k2-k1-1] = d[k2-1]} of length (k2 - k1).</t>
          </li>
        </ul>
      </section>
      <section anchor="transaction-components">
        <name>Transaction Components</name>
        <t>Each leaf in a CCF ledger carries the following components:</t>
        <figure anchor="ccf-leaf-cddl">
          <name>CCF Leaf CDDL</name>
          <sourcecode type="cddl"><![CDATA[
ccf-leaf = [
  ; Byte string of size HASH_SIZE(32)
  internal-transaction-hash: bstr .size 32

  ; Text string of at most 1024 bytes
  internal-evidence: tstr .size (1..1024)

  ; Byte string of size HASH_SIZE(32)
  data-hash: bstr .size 32
]
]]></sourcecode>
        </figure>
        <t>The <tt>internal-transaction-hash</tt> and <tt>internal-evidence</tt> values are internal to the CCF implementation. They can be safely ignored by receipt Verifiers, but they commit the transparency service (TS) to the whole tree contents and may be used for additional, CCF-specific auditing.</t>
        <t><tt>internal-transaction-hash</tt> is a hash over the complete entry in the <xref target="CCF-Ledger-Format"/>, and <tt>internal-evidence</tt> is a revealable <xref target="CCF-Commit-Evidence"/> value that allows early persistence of ledger entries before distributed consensus can be established. This mechanism is useful to implement high-throughput transparency applications in Trusted Execution Environments (TEEs) that only provide a limited amount of memory, while maintaining high availability afforded by distributed consensus. Using a secure one-way function <tt>f</tt> to publish an <tt>f(x)</tt> commitment to an <tt>x</tt> value that can be revealed at a later time is a common feature of distributed protocols (<xref target="COIN-FLIPPING"/>). The hash function used for <tt>internal-transaction-hash</tt> is the same hash function <tt>H</tt> as in the Merkle Tree construction for the selected verifiable data structure algorithm. For <tt>CCF_LEDGER_SHA256</tt>, this function is <tt>SHA256</tt>.</t>
        <t><tt>data-hash</tt> summarizes the application data included in the ledger at this transaction, which is a Signed Statement as defined by <xref target="I-D.ietf-scitt-architecture"/>. The hash function used for <tt>data-hash</tt> is also the same hash function <tt>H</tt> as in the Merkle Tree construction for the selected verifiable data structure algorithm. For <tt>CCF_LEDGER_SHA256</tt>, this function is <tt>SHA256</tt>.</t>
      </section>
    </section>
    <section anchor="ccf-inclusion-proofs">
      <name>CCF Inclusion Proofs</name>
      <t>CCF inclusion proofs consist of a list of digests tagged with a single left-or-right bit.</t>
      <figure anchor="ccf-inclusion-proof-cddl">
        <name>CCF Inclusion Proof CDDL</name>
        <sourcecode type="cddl"><![CDATA[
ccf-proof-element = [
  ; Position of the element
  left: bool

  ; Hash of the proof element: byte string of size HASH_SIZE(32)
  hash: bstr .size 32
]

ccf-inclusion-proof = bstr .cbor {
  &(leaf: 1) => ccf-leaf
  &(path: 2) => [+ ccf-proof-element]
}
]]></sourcecode>
      </figure>
      <t>Unlike some other tree algorithms, the index of the element in the tree is not explicit in the inclusion proof, but the list of left-or-right bits can be treated as the binary decomposition of the index, from the least significant (leaf) to the most significant (root).</t>
      <section anchor="ccf-inclusion-proof-signature">
        <name>CCF Inclusion Proof Signature</name>
        <t>The proof signature for a CCF inclusion proof is a COSE signature (encoded with the <tt>COSE_Sign1</tt> CBOR type) which includes the following additional requirements for protected and unprotected headers. Please note that there may be additional header parameters defined by the application.</t>
        <t>The protected header parameters for the CCF inclusion proof signature <bcp14>MUST</bcp14> include the following:</t>
        <ul spacing="normal">
          <li>
            <t><tt>verifiable-data-structure: int/tstr</tt>. This header <bcp14>MUST</bcp14> be set to the verifiable data structure algorithm identifier for <tt>CCF_LEDGER_SHA256</tt> (TBD_1).</t>
          </li>
          <li>
            <t><tt>label: int</tt>. This header <bcp14>MUST</bcp14> be set to the value of the <tt>inclusion</tt> proof type in the IANA "COSE Verifiable Data Structure Proofs" registry (-1).</t>
          </li>
        </ul>
        <t>The unprotected header for a CCF inclusion proof signature <bcp14>MUST</bcp14> include the following:</t>
        <ul spacing="normal">
          <li>
            <t><tt>inclusion-proof: bstr .cbor ccf-inclusion-proof</tt>. This contains the serialized CCF inclusion proof, as defined above.</t>
          </li>
        </ul>
        <t>The payload of the signature is the CCF ledger Merkle root digest, and <bcp14>MUST</bcp14> be detached in order to force verifiers to recompute the root from the inclusion proof in the unprotected header. This provides a safeguard against implementation errors that use the payload of the signature but do not recompute the root from the inclusion proof.</t>
      </section>
      <section anchor="inclusion-proof-verification-algorithm">
        <name>Inclusion Proof Verification Algorithm</name>
        <t>CCF uses the following algorithm to verify an inclusion receipt:</t>
        <figure anchor="ccf-inclusion-receipt-verification">
          <name>CCF Inclusion Receipt Verification</name>
          <artwork><![CDATA[
compute_root(proof):
  h := HASH(
       proof.leaf.internal-transaction-hash
           || HASH(proof.leaf.internal-evidence)
           || proof.leaf.data-hash
       )

  for [left, hash] in proof.path:
      h := HASH(hash + h) if left
           HASH(h + hash) else
  return h

verify_inclusion_receipt(inclusion_receipt):
  let label = INCLUSION_PROOF_LABEL
  assert(label in inclusion_receipt.unprotected_header)
  let proof = inclusion_receipt.unprotected_header[label]
  assert(inclusion_receipt.payload == nil)
  let payload = compute_root(proof)

  # Use the Merkle Root as the detached payload
  return verify_cose(inclusion_receipt, payload)
]]></artwork>
        </figure>
        <t>A description can also be found at <xref target="CCF-Receipt-Verification"/>.</t>
      </section>
    </section>
    <section anchor="usage-in-cose-receipts">
      <name>Usage in COSE Receipts</name>
      <t>A COSE Receipt with a CCF inclusion proof is described by the following CDDL definition:</t>
      <figure anchor="protected-header-map-cddl">
        <name>Protected Header Map CDDL</name>
        <sourcecode type="cddl"><![CDATA[
protected-header-map = {
  &(alg: 1) => int
  &(vds: 395) => 2
  * cose-label => cose-value
}
]]></sourcecode>
      </figure>
      <ul spacing="normal">
        <li>
          <t>alg (label: 1): <bcp14>REQUIRED</bcp14>. Signature algorithm identifier. Value type: int.</t>
        </li>
        <li>
          <t>vds (label: 395): <bcp14>REQUIRED</bcp14>. Verifiable data structure algorithm identifier. Value type: int.</t>
        </li>
      </ul>
      <t>The unprotected header for an inclusion proof signature is described by the following CDDL definition:</t>
      <figure anchor="unprotected-header-map-cddl">
        <name>Unprotected Header Map CDDL</name>
        <sourcecode type="cddl"><![CDATA[
inclusion-proof = ccf-inclusion-proof

inclusion-proofs = [ + inclusion-proof ]

verifiable-proofs = {
  &(inclusion-proof: -1) => inclusion-proofs
}

unprotected-header-map = {
  &(vdp: 396) => verifiable-proofs
  * cose-label => cose-value
}
]]></sourcecode>
      </figure>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>See the privacy considerations section of:</t>
      <ul spacing="normal">
        <li>
          <t><xref target="I-D.ietf-cose-merkle-tree-proofs"/></t>
        </li>
      </ul>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations of <xref target="I-D.ietf-cose-merkle-tree-proofs"/> apply.</t>
      <section anchor="trusted-execution-environments">
        <name>Trusted Execution Environments</name>
        <t>CCF networks of nodes rely on executing in TEEs to secure their function, in particular:</t>
        <ol spacing="normal" type="1"><li>
            <t>The evaluation of registration policies</t>
          </li>
          <li>
            <t>The creation and usage of receipt signing keys</t>
          </li>
        </ol>
        <t>A compromise in the TEE platform used to execute the network may allow an attacker to produce invalid and divergent ledger branches.
Clients can mitigate this risk in two ways: by regularly auditing the consistency of the CCF ledger; and by regularly fetching attestation information about the TEE instances, available in the ledger and from the network itself, and confirming that the nodes composing the network are running up-to-date, trusted platform components.</t>
      </section>
      <section anchor="operators">
        <name>Operators</name>
        <t>An operator has the ability to start successor networks with a distinct identity. The operator of a CCF network can recover the service by starting a successor network, for example a new CCF network with its own service identity, that endorses the ledger state of the previous instance. This provides service continuity after a catastrophic failure of a majority of the nodes. However, a malicious operator could exploit this mechanism and truncate the ledger’s history by initializing the successor network from an earlier ledger prefix, thereby omitting some later entries. Clients can mitigate this risk by auditing the successor ledger and verifying that their latest known receipts from the prior service are included in the successor’s ledger.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="additions-to-existing-registries">
        <name>Additions to Existing Registries</name>
        <section anchor="tree-alg-registry">
          <name>COSE Verifiable Data Structure Algorithms</name>
          <t>This document requests IANA to add the following new value to the "COSE Verifiable Data Structure Algorithms" registry:</t>
          <ul spacing="normal">
            <li>
              <t>Name: CCF_LEDGER_SHA256</t>
            </li>
            <li>
              <t>Value: 2 (requested assignment)</t>
            </li>
            <li>
              <t>Description: Append-only logs that are integrity-protected by a Merkle Tree and signatures produced via Trusted Execution Environments containing a mix of public and confidential information, as specified by the Confidential Consortium Framework.</t>
            </li>
            <li>
              <t>Reference: RFCthis</t>
            </li>
            <li>
              <t>Related information: <xref target="I-D.ietf-cose-merkle-tree-proofs"/></t>
            </li>
          </ul>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9162">
          <front>
            <title>Certificate Transparency Version 2.0</title>
            <author fullname="B. Laurie" initials="B." surname="Laurie"/>
            <author fullname="E. Messeri" initials="E." surname="Messeri"/>
            <author fullname="R. Stradling" initials="R." surname="Stradling"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>This document describes version 2.0 of the Certificate Transparency (CT) protocol for publicly logging the existence of Transport Layer Security (TLS) server certificates as they are issued or observed, in a manner that allows anyone to audit certification authority (CA) activity and notice the issuance of suspect certificates as well as to audit the certificate logs themselves. The intent is that eventually clients would refuse to honor certificates that do not appear in a log, effectively forcing CAs to add all issued certificates to the logs.</t>
              <t>This document obsoletes RFC 6962. It also specifies a new TLS extension that is used to send various CT log artifacts.</t>
              <t>Logs are network services that implement the protocol operations for submissions and queries that are defined in this document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9162"/>
          <seriesInfo name="DOI" value="10.17487/RFC9162"/>
        </reference>
        <reference anchor="I-D.ietf-cose-merkle-tree-proofs">
          <front>
            <title>COSE (CBOR Object Signing and Encryption) Receipts</title>
            <author fullname="Orie Steele" initials="O." surname="Steele">
              <organization>Tradeverifyd</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Antoine Delignat-Lavaud" initials="A." surname="Delignat-Lavaud">
              <organization>Microsoft</organization>
            </author>
            <author fullname="Cedric Fournet" initials="C." surname="Fournet">
              <organization>Microsoft</organization>
            </author>
            <date day="2" month="December" year="2025"/>
            <abstract>
              <t>   COSE (CBOR Object Signing and Encryption) Receipts prove properties
   of a verifiable data structure to a verifier.  Verifiable data
   structures and associated proof types enable security properties,
   such as minimal disclosure, transparency and non-equivocation.
   Transparency helps maintain trust over time, and has been applied to
   certificates, end to end encrypted messaging systems, and supply
   chain security.  This specification enables concise transparency
   oriented systems, by building on CBOR (Concise Binary Object
   Representation) and COSE.  The extensibility of the approach is
   demonstrated by providing CBOR encodings for Merkle inclusion and
   consistency proofs.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-merkle-tree-proofs-18"/>
        </reference>
        <reference anchor="I-D.ietf-scitt-architecture">
          <front>
            <title>An Architecture for Trustworthy and Transparent Digital Supply Chains</title>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Antoine Delignat-Lavaud" initials="A." surname="Delignat-Lavaud">
              <organization>Microsoft Research</organization>
            </author>
            <author fullname="Cedric Fournet" initials="C." surname="Fournet">
              <organization>Microsoft Research</organization>
            </author>
            <author fullname="Yogesh Deshpande" initials="Y." surname="Deshpande">
              <organization>ARM</organization>
            </author>
            <author fullname="Steve Lasker" initials="S." surname="Lasker">
         </author>
            <date day="10" month="October" year="2025"/>
            <abstract>
              <t>   Traceability in supply chains is a growing security concern.  While
   verifiable data structures have addressed specific issues, such as
   equivocation over digital certificates, they lack a universal
   architecture for all supply chains.  This document defines such an
   architecture for single-issuer signed statement transparency.  It
   ensures extensibility, interoperability between different
   transparency services, and compliance with various auditing
   procedures and regulatory requirements.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-scitt-architecture-22"/>
        </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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CCF" target="https://github.com/microsoft/ccf">
          <front>
            <title>Confidential Consortium Framework</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="CCF-Ledger-Format" target="https://microsoft.github.io/CCF/main/architecture/ledger.html">
          <front>
            <title>CCF Ledger Format</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="CCF-Commit-Evidence" target="https://microsoft.github.io/CCF/main/use_apps/verify_tx.html#commit-evidence">
          <front>
            <title>CCF Commit Evidence</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="CCF-Receipt-Verification" target="https://microsoft.github.io/CCF/main/use_apps/verify_tx.html#receipt-verification">
          <front>
            <title>CCF Receipt Verification</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="COIN-FLIPPING" target="https://dl.acm.org/doi/epdf/10.1145/1008908.1008911">
          <front>
            <title>Coin Flipping By Telephone - A Protocol For Solving Impossible Problems</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
          <seriesInfo name="DOI" value="10.1145/1323293.1294280"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
