<?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.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-plants-merkle-tree-certs-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title>Merkle Tree Certificates</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-plants-merkle-tree-certs-02"/>
    <author initials="D." surname="Benjamin" fullname="David Benjamin">
      <organization>Google LLC</organization>
      <address>
        <email>davidben@google.com</email>
      </address>
    </author>
    <author initials="D." surname="O'Brien" fullname="Devon O'Brien">
      <organization/>
      <address>
        <email>devon.obrien@gmail.com</email>
      </address>
    </author>
    <author initials="B. E." surname="Westerbaan" fullname="Bas Westerbaan">
      <organization>Cloudflare</organization>
      <address>
        <email>bas@cloudflare.com</email>
      </address>
    </author>
    <author initials="L." surname="Valenta" fullname="Luke Valenta">
      <organization>Cloudflare</organization>
      <address>
        <email>lvalenta@cloudflare.com</email>
      </address>
    </author>
    <author initials="F." surname="Valsorda" fullname="Filippo Valsorda">
      <organization>Geomys</organization>
      <address>
        <email>ietf@filippo.io</email>
      </address>
    </author>
    <date year="2026" month="March" day="02"/>
    <area>Security</area>
    <workgroup>PKI, Logs, And Tree Signatures</workgroup>
    <abstract>
      <?line 187?>

<t>This document describes Merkle Tree certificates, a new form of X.509 certificates which integrate public logging of the certificate, in the style of Certificate Transparency. The integrated design reduces logging overhead in the face of both shorter-lived certificates and large post-quantum signature algorithms, while still achieving comparable security properties to traditional X.509 and Certificate Transparency. Merkle Tree certificates additionally admit an optional size optimization that avoids signatures altogether, at the cost of only applying to up-to-date relying parties and older certificates.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://davidben.github.io/merkle-tree-certs/draft-ietf-plants-merkle-tree-certs.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-plants-merkle-tree-certs/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        PKI, Logs, And Tree Signatures Working Group mailing list (<eref target="mailto:plants@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/plants"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/plants/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/davidben/merkle-tree-certs"/>.</t>
    </note>
  </front>
  <middle>
    <?line 191?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>In Public Key Infrastructures (PKIs) that use Certificate Transparency (CT) <xref target="RFC6962"/> for a public logging requirement, an authenticating party must present Signed Certificate Timestamps (SCTs) alongside certificates. CT policies often require two or more SCTs per certificate <xref target="APPLE-CT"/> <xref target="CHROME-CT"/>, each of which carries a signature. These signatures are in addition to those in the certificate chain itself.</t>
      <t>Current signature schemes can use as few as 32 bytes per key and 64 bytes per signature <xref target="RFC8032"/>, but post-quantum replacements are much larger. For example, ML-DSA-44 <xref target="FIPS204"/> uses 1,312 bytes per public key and 2,420 bytes per signature. ML-DSA-65 uses 1,952 bytes per public key and 3,309 bytes per signature. Even with a directly-trusted intermediate (<xref section="7.5" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>), two SCTs and a leaf certificate signature adds 7,260 bytes of authentication overhead with ML-DSA-44 and 9,927 bytes with ML-DSA-65.</t>
      <t>This increased overhead additionally impacts CT logs themselves. Most of a log's costs scale with the total storage size of the log. Each log entry contains both a public key, and a signature from the CA. With larger public keys and signatures, the size of each log entry will grow.</t>
      <t>Additionally, as PKIs transition to shorter-lived certificates <xref target="CABF-153"/> <xref target="CABF-SC081"/>, the number of entries in the log will grow.</t>
      <t>This document introduces Merkle Tree certificates, a new form of X.509 certificate that integrates logging with certificate issuance. Each CA maintains a log of everything it issues, signing views of the log to assert it has issued the contents. The CA signature is combined with cosignatures from other parties who verify correct operation and optionally mirror the log. These signatures, together with an inclusion proof for an individual entry, constitute a certificate.</t>
      <t>This achieves the following:</t>
      <ul spacing="normal">
        <li>
          <t>Log entries do not scale with public key and signature sizes. Entries replace public keys with hashes and do not contain signatures, while preserving non-repudiability (<xref target="non-repudiation"/>).</t>
        </li>
        <li>
          <t>To bound growth, long-expired entries can be pruned from logs and mirrors without interrupting existing clients. This allows log sizes to scale by retention policies, not the lifetime of the log, even as certificate lifetimes decrease.</t>
        </li>
        <li>
          <t>After a processing delay, authenticating parties can obtain a second "landmark" certificate for the same log entry. This second certificate is an optional size optimization that avoids the need for any signatures, assuming an up-to-date client that has some predistributed log information.</t>
        </li>
      </ul>
      <t><xref target="overview"/> gives an overview of the system. <xref target="subtrees"/> describes a Merkle Tree primitive used by this system. <xref target="issuance-logs"/> describes the log structure. Finally, <xref target="certificates"/> and <xref target="relying-parties"/> describe how to construct and consume a Merkle Tree certificate.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" 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>
      <t>This document additionally uses the TLS presentation language defined in <xref section="3" sectionFormat="of" target="RFC8446"/>, as well as the notation defined in <xref section="2.1.1" sectionFormat="of" target="RFC9162"/>.</t>
      <t><tt>U+</tt> followed by four hexadecimal characters denotes a Unicode codepoint, to be encoded in UTF-8 <xref target="RFC3629"/>. <tt>0x</tt> followed by two hexadecimal characters denotes a byte value in the 0-255 range.</t>
      <t><tt>[start, end)</tt>, where <tt>start &lt;= end</tt>, denotes the half-open interval containing integers <tt>x</tt> such that <tt>start &lt;= x &lt; end</tt>.</t>
      <t>Given a non-negative integer <tt>n</tt>,</t>
      <ul spacing="normal">
        <li>
          <t><tt>LSB(n)</tt> refers to the least-significant bit of <tt>n</tt>'s binary representation. Equivalently, it is the remainder when <tt>n</tt> is divided by 2.</t>
        </li>
        <li>
          <t><tt>BIT_WIDTH(n)</tt> refers to the smallest number of bits needed to represent <tt>n</tt>. <tt>BIT_WIDTH(0)</tt> is zero.</t>
        </li>
        <li>
          <t><tt>POPCOUNT(n)</tt> refers to the number of set bits in <tt>n</tt>'s binary representation.</t>
        </li>
        <li>
          <t><tt>BIT_CEIL(n)</tt> refers to the smallest power of 2 that is greater or equal to <tt>n</tt>.</t>
        </li>
      </ul>
      <t>To <em>left-shift</em> a non-negative integer <tt>n</tt> is to shift each bit in its binary representation to one upper position. Equivalently, it is <tt>n</tt> times 2. Given non-negative integers <tt>a</tt> and <tt>b</tt>, <tt>a &lt;&lt; b</tt> refers to <tt>a</tt> left-shifted <tt>b</tt> times.</t>
      <t>To <em>right-shift</em> a non-negative integer <tt>n</tt> is to shift each bit in its binary representation to one lower position, discarding the least-significant bit. Equivalently, it is the floor of <tt>n</tt> divided by 2. Given non-negative integers <tt>a</tt> and <tt>b</tt>, <tt>a &gt;&gt; b</tt> refers to <tt>a</tt> right-shifted <tt>b</tt> times.</t>
      <t>Given two non-negative integers <tt>a</tt> and <tt>b</tt>, <tt>a &amp; b</tt> refers to the non-negative integer such that each bit position is set if the corresponding bit is set in both <tt>a</tt> and <tt>b</tt>, and unset otherwise. This is commonly referred to as the bitwise AND operator.</t>
      <section anchor="terminology-and-roles">
        <name>Terminology and Roles</name>
        <t>This document discusses the following roles:</t>
        <dl>
          <dt>Authenticating party:</dt>
          <dd>
            <t>The party that authenticates itself in the protocol. In TLS, this is the side sending the Certificate and CertificateVerify message.</t>
          </dd>
          <dt>Certification authority (CA):</dt>
          <dd>
            <t>The service that issues certificates to the authenticating party, after performing some validation process on the certificate contents.</t>
          </dd>
          <dt>Relying party:</dt>
          <dd>
            <t>The party to whom the authenticating party presents its identity. In TLS, this is the side receiving the Certificate and CertificateVerify message.</t>
          </dd>
          <dt>Monitor:</dt>
          <dd>
            <t>Parties who watch logs for certificates of interest, analogous to the role in <xref section="8.2" sectionFormat="of" target="RFC9162"/>.</t>
          </dd>
          <dt>Issuance log:</dt>
          <dd>
            <t>A log, maintained by the CA, of everything issued by that CA.</t>
          </dd>
          <dt>Cosigner:</dt>
          <dd>
            <t>A service that signs views of an issuance log, to assert correct operation and other properties about the entries.</t>
          </dd>
        </dl>
        <t>Additionally, there are several terms used throughout this document to describe this proposal. This section provides an overview. They will be further defined and discussed in detail throughout the document.</t>
        <dl>
          <dt>Checkpoint:</dt>
          <dd>
            <t>A description of the complete state of the log at some time.</t>
          </dd>
          <dt>Entry:</dt>
          <dd>
            <t>An individual element of the log, describing information which the CA has validated and certified.</t>
          </dd>
          <dt>Subtree:</dt>
          <dd>
            <t>A smaller Merkle Tree over a portion of the log, defined by an interior node of some snapshot of the log. Subtrees can be efficiently shown to be consistent with the whole log.</t>
          </dd>
          <dt>Inclusion proof:</dt>
          <dd>
            <t>A sequence of hashes that efficiently proves some entry is contained in some checkpoint or subtree.</t>
          </dd>
          <dt>Consistency proof:</dt>
          <dd>
            <t>A sequence of hashes that efficiently proves a checkpoint or subtree is contained within another checkpoint.</t>
          </dd>
          <dt>Cosignature:</dt>
          <dd>
            <t>A signature from either the CA or other cosigner, over some checkpoint or subtree.</t>
          </dd>
          <dt>Landmark:</dt>
          <dd>
            <t>One of an infrequent subset of tree sizes that can be used to predistribute trusted subtrees to relying parties for landmark certificates.</t>
          </dd>
          <dt>Landmark subtree:</dt>
          <dd>
            <t>A subtree determined by a landmark. Landmark subtrees are common points of reference between relying parties and landmark certificates.</t>
          </dd>
          <dt>Standalone certificate:</dt>
          <dd>
            <t>A certificate containing an inclusion proof to some subtree, and several cosignatures over that subtree.</t>
          </dd>
          <dt>Landmark certificate:</dt>
          <dd>
            <t>An optimized certificate containing an inclusion proof to a landmark subtree, and no signatures.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>In Certificate Transparency, a CA first certifies information by signing it, then submits the resulting certificate (or precertificate) to logs for logging. Merkle Tree Certificates invert this process: the CA certifies information by logging it, then submits the log to cosigners to verify log operation. A certificate is assembled from the result and proves the information is in the CA's log.</t>
      <figure anchor="fig-issuance-overview">
        <name>A diagram of the MTC issuance architecture, detailed below</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="528" width="544" viewBox="0 0 544 528" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,272" fill="none" stroke="black"/>
              <path d="M 8,352 L 8,480" fill="none" stroke="black"/>
              <path d="M 24,480 L 24,512" fill="none" stroke="black"/>
              <path d="M 72,80 L 72,112" fill="none" stroke="black"/>
              <path d="M 128,280 L 128,320" fill="none" stroke="black"/>
              <path d="M 256,32 L 256,272" fill="none" stroke="black"/>
              <path d="M 256,352 L 256,480" fill="none" stroke="black"/>
              <path d="M 272,384 L 272,512" fill="none" stroke="black"/>
              <path d="M 296,32 L 296,272" fill="none" stroke="black"/>
              <path d="M 296,352 L 296,464" fill="none" stroke="black"/>
              <path d="M 536,32 L 536,272" fill="none" stroke="black"/>
              <path d="M 536,352 L 536,464" fill="none" stroke="black"/>
              <path d="M 8,32 L 24,32" fill="none" stroke="black"/>
              <path d="M 232,32 L 256,32" fill="none" stroke="black"/>
              <path d="M 296,32 L 312,32" fill="none" stroke="black"/>
              <path d="M 504,32 L 536,32" fill="none" stroke="black"/>
              <path d="M 224,64 L 312,64" fill="none" stroke="black"/>
              <path d="M 72,160 L 96,160" fill="none" stroke="black"/>
              <path d="M 224,176 L 312,176" fill="none" stroke="black"/>
              <path d="M 40,224 L 104,224" fill="none" stroke="black"/>
              <path d="M 8,272 L 256,272" fill="none" stroke="black"/>
              <path d="M 296,272 L 536,272" fill="none" stroke="black"/>
              <path d="M 8,352 L 24,352" fill="none" stroke="black"/>
              <path d="M 240,352 L 256,352" fill="none" stroke="black"/>
              <path d="M 296,352 L 312,352" fill="none" stroke="black"/>
              <path d="M 400,352 L 536,352" fill="none" stroke="black"/>
              <path d="M 72,384 L 96,384" fill="none" stroke="black"/>
              <path d="M 256,384 L 272,384" fill="none" stroke="black"/>
              <path d="M 240,432 L 312,432" fill="none" stroke="black"/>
              <path d="M 40,448 L 104,448" fill="none" stroke="black"/>
              <path d="M 296,464 L 536,464" fill="none" stroke="black"/>
              <path d="M 8,480 L 256,480" fill="none" stroke="black"/>
              <path d="M 24,512 L 272,512" fill="none" stroke="black"/>
              <path d="M 72,384 L 104,448" fill="none" stroke="black"/>
              <path d="M 72,160 L 104,224" fill="none" stroke="black"/>
              <path d="M 156,280 L 176,320" fill="none" stroke="black"/>
              <path d="M 40,224 L 72,160" fill="none" stroke="black"/>
              <path d="M 80,320 L 100,280" fill="none" stroke="black"/>
              <path d="M 40,448 L 72,384" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="320,176 308,170.4 308,181.6" fill="black" transform="rotate(0,312,176)"/>
              <polygon class="arrowhead" points="248,432 236,426.4 236,437.6" fill="black" transform="rotate(180,240,432)"/>
              <polygon class="arrowhead" points="232,64 220,58.4 220,69.6" fill="black" transform="rotate(180,224,64)"/>
              <polygon class="arrowhead" points="184,320 172,314.4 172,325.6" fill="black" transform="rotate(63.43494882292201,176,320)"/>
              <polygon class="arrowhead" points="136,320 124,314.4 124,325.6" fill="black" transform="rotate(90,128,320)"/>
              <polygon class="arrowhead" points="88,320 76,314.4 76,325.6" fill="black" transform="rotate(116.56505117707799,80,320)"/>
              <polygon class="arrowhead" points="80,112 68,106.4 68,117.6" fill="black" transform="rotate(90,72,112)"/>
              <circle cx="48" cy="240" r="6" class="closeddot" fill="black"/>
              <circle cx="48" cy="464" r="6" class="closeddot" fill="black"/>
              <circle cx="64" cy="240" r="6" class="closeddot" fill="black"/>
              <circle cx="64" cy="464" r="6" class="closeddot" fill="black"/>
              <circle cx="80" cy="240" r="6" class="closeddot" fill="black"/>
              <circle cx="80" cy="464" r="6" class="closeddot" fill="black"/>
              <circle cx="96" cy="240" r="6" class="closeddot" fill="black"/>
              <circle cx="96" cy="464" r="6" class="closeddot" fill="black"/>
              <circle cx="384" cy="208" r="6" class="closeddot" fill="black"/>
              <g class="text">
                <text x="88" y="36">Certification</text>
                <text x="184" y="36">Authority</text>
                <text x="388" y="36">Authenticating</text>
                <text x="472" y="36">Party</text>
                <text x="36" y="68">2.</text>
                <text x="84" y="68">Validate</text>
                <text x="152" y="68">request</text>
                <text x="340" y="68">1.</text>
                <text x="384" y="68">Request</text>
                <text x="464" y="68">certificate</text>
                <text x="388" y="84">issuance</text>
                <text x="36" y="148">3.</text>
                <text x="64" y="148">Add</text>
                <text x="92" y="148">to</text>
                <text x="140" y="148">issuance</text>
                <text x="192" y="148">log</text>
                <text x="104" y="164">[</text>
                <text x="124" y="164">CA</text>
                <text x="164" y="164">cosign</text>
                <text x="200" y="164">]</text>
                <text x="340" y="180">5.</text>
                <text x="388" y="180">Download</text>
                <text x="476" y="180">certificates</text>
                <text x="432" y="212">tbscert</text>
                <text x="352" y="228">=</text>
                <text x="368" y="228">=</text>
                <text x="384" y="228">=</text>
                <text x="440" y="228">inclusion</text>
                <text x="504" y="228">proof</text>
                <text x="144" y="244">tbscert</text>
                <text x="208" y="244">entries</text>
                <text x="344" y="244">[</text>
                <text x="364" y="244">CA</text>
                <text x="384" y="244">]</text>
                <text x="452" y="244">cosignatures</text>
                <text x="312" y="260">[</text>
                <text x="348" y="260">mirror</text>
                <text x="384" y="260">]</text>
                <text x="212" y="308">4.</text>
                <text x="252" y="308">Submit</text>
                <text x="296" y="308">log</text>
                <text x="324" y="308">to</text>
                <text x="376" y="308">cosigners</text>
                <text x="240" y="324">for</text>
                <text x="308" y="324">cosignatures</text>
                <text x="68" y="356">Mirrors,</text>
                <text x="128" y="356">other</text>
                <text x="192" y="356">cosigners</text>
                <text x="356" y="356">Monitors</text>
                <text x="104" y="388">[</text>
                <text x="124" y="388">CA</text>
                <text x="164" y="388">cosign</text>
                <text x="200" y="388">]</text>
                <text x="104" y="404">[</text>
                <text x="140" y="404">mirror</text>
                <text x="196" y="404">cosign</text>
                <text x="232" y="404">]</text>
                <text x="340" y="436">6.</text>
                <text x="384" y="436">Monitor</text>
                <text x="428" y="436">CA</text>
                <text x="480" y="436">operation</text>
                <text x="80" y="500">...quorum</text>
                <text x="132" y="500">of</text>
                <text x="196" y="500">cosigners...</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+-- Certification Authority ---+    +--  Authenticating Party ----+
|                              |    |                             |
|  2. Validate request     <---+----+--  1. Request certificate   |
|       |                      |    |       issuance              |
|       |                      |    |                             |
|       V                      |    |                             |
|                              |    |                             |
|  3. Add to issuance log      |    |                             |
|       +---[ CA cosign ]      |    |                             |
|      / \                 ----+----+->  5. Download certificates |
|     /   \                    |    |                             |
|    /     \                   |    |          *  tbscert         |
|   +-------+                  |    |      = = =  inclusion proof |
|    * * * *  tbscert entries  |    |     [ CA ]  cosignatures    |
|                              |    | [ mirror ]                  |
+------------------------------+    +-----------------------------+
           /   |   \
          /    |    \    4. Submit log to cosigners
         V     V     V      for cosignatures

+-- Mirrors, other cosigners --+    +-- Monitors -----------------+
|                              |    |                             |
|       +---[ CA cosign ]      +-+  |                             |
|      / \  [ mirror cosign ]  | |  |                             |
|     /   \                    | |  |                             |
|    /     \                 <-+-+--+--  6. Monitor CA operation  |
|   +-------+                  | |  |                             |
|    * * * *                   | |  +-----------------------------+
+-+----------------------------+ |
  |  ...quorum of cosigners...   |
  +------------------------------+
]]></artwork>
        </artset>
      </figure>
      <t>Merkle Tree Certificates are issued as follows. <xref target="fig-issuance-overview"/> depicts this process.</t>
      <ol spacing="normal" type="1"><li>
          <t>The authenticating party requests a certificate, e.g. over ACME <xref target="RFC8555"/></t>
        </li>
        <li>
          <t>The CA validates each incoming issuance request, e.g. with ACME challenges. From there, the process differs.</t>
        </li>
        <li>
          <t>The CA operates an append-only <em>issuance log</em> (<xref target="issuance-logs"/>). Unlike a CT log, this issuance log only contains entries added by the CA:  </t>
          <ol spacing="normal" type="a"><li>
              <t>The CA adds a TBSCertificateLogEntry (<xref target="log-entries"/>, abbreviated "tbscert entries" in the diagram) to its log, describing the information it is certifying.</t>
            </li>
            <li>
              <t>The CA signs a <em>checkpoint</em>, which describes the current state of the log. A signed checkpoint certifies that the CA issued <em>every</em> entry in the Merkle Tree (<xref target="certification-authority-cosigners"/>).</t>
            </li>
            <li>
              <t>The CA additionally signs <em>subtrees</em> (<xref target="subtrees"/>) that together contain certificates added since the last checkpoint (<xref target="arbitrary-intervals"/>). This is an optimization to reduce inclusion proof sizes. A signed subtree certifies that the CA has issued <em>every</em> entry in the subtree.</t>
            </li>
          </ol>
        </li>
        <li>
          <t>The CA submits the new log state to <em>cosigners</em>. Cosigners validate the log is append-only and optionally provide additional services, such as mirroring its contents. They cosign the CA's checkpoints and subtrees.</t>
        </li>
        <li>
          <t>The CA now has enough information to construct a certificate and give it to the authenticating party. A certificate contains:  </t>
          <ul spacing="normal">
            <li>
              <t>The TBSCertificate being certified</t>
            </li>
            <li>
              <t>An inclusion proof from the TBSCertificate to some subtree</t>
            </li>
            <li>
              <t>Cosignatures from the CA and cosigners on the subtree</t>
            </li>
          </ul>
        </li>
        <li>
          <t>As in Certificate Transparency, monitors observe the issuance log to ensure the CA is operated correctly.</t>
        </li>
      </ol>
      <t>A certificate with cosignatures is known as a <em>standalone certificate</em>. Analogous to X.509 trust anchors and trusted CT logs, relying parties are configured with trusted cosigners (<xref target="trusted-cosigners"/>) that allow them to accept Merkle Tree certificates. The inclusion proof proves the TBSCertificate is part of some subtree, and cosignatures from trusted cosigners prove the subtree was certified by the CA and available to monitors. Where CT logs entire certificates, the issuance log's entries are smaller TBSCertificateLogEntry (<xref target="log-entries"/>) structures, which do not scale with public key or signature size.</t>
      <t>This same issuance process also produces a <em>landmark certificate</em>. This is an optional, optimized certificate that avoids all cosignatures, including the CA signature. Landmark certificates are available after a short period of time and usable with up-to-date relying parties.</t>
      <figure anchor="fig-landmark-cert-overview">
        <name>A diagram of landmark certificate construction and usage, detailed below</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="416" width="488" viewBox="0 0 488 416" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,112" fill="none" stroke="black"/>
              <path d="M 8,192 L 8,384" fill="none" stroke="black"/>
              <path d="M 224,96 L 224,184" fill="none" stroke="black"/>
              <path d="M 272,32 L 272,112" fill="none" stroke="black"/>
              <path d="M 272,192 L 272,384" fill="none" stroke="black"/>
              <path d="M 296,48 L 296,112" fill="none" stroke="black"/>
              <path d="M 296,240 L 296,288" fill="none" stroke="black"/>
              <path d="M 296,320 L 296,368" fill="none" stroke="black"/>
              <path d="M 432,80 L 432,224" fill="none" stroke="black"/>
              <path d="M 464,48 L 464,112" fill="none" stroke="black"/>
              <path d="M 480,240 L 480,288" fill="none" stroke="black"/>
              <path d="M 480,320 L 480,368" fill="none" stroke="black"/>
              <path d="M 8,32 L 24,32" fill="none" stroke="black"/>
              <path d="M 232,32 L 272,32" fill="none" stroke="black"/>
              <path d="M 296,48 L 312,48" fill="none" stroke="black"/>
              <path d="M 448,48 L 464,48" fill="none" stroke="black"/>
              <path d="M 264,80 L 432,80" fill="none" stroke="black"/>
              <path d="M 32,96 L 72,96" fill="none" stroke="black"/>
              <path d="M 8,112 L 272,112" fill="none" stroke="black"/>
              <path d="M 296,112 L 464,112" fill="none" stroke="black"/>
              <path d="M 8,192 L 24,192" fill="none" stroke="black"/>
              <path d="M 208,192 L 272,192" fill="none" stroke="black"/>
              <path d="M 296,240 L 312,240" fill="none" stroke="black"/>
              <path d="M 440,240 L 480,240" fill="none" stroke="black"/>
              <path d="M 264,256 L 288,256" fill="none" stroke="black"/>
              <path d="M 296,288 L 480,288" fill="none" stroke="black"/>
              <path d="M 296,320 L 312,320" fill="none" stroke="black"/>
              <path d="M 432,320 L 480,320" fill="none" stroke="black"/>
              <path d="M 176,352 L 288,352" fill="none" stroke="black"/>
              <path d="M 296,368 L 480,368" fill="none" stroke="black"/>
              <path d="M 8,384 L 272,384" fill="none" stroke="black"/>
              <path d="M 52,56 L 72,96" fill="none" stroke="black"/>
              <path d="M 32,96 L 52,56" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="440,224 428,218.4 428,229.6" fill="black" transform="rotate(90,432,224)"/>
              <polygon class="arrowhead" points="296,352 284,346.4 284,357.6" fill="black" transform="rotate(0,288,352)"/>
              <polygon class="arrowhead" points="296,256 284,250.4 284,261.6" fill="black" transform="rotate(0,288,256)"/>
              <polygon class="arrowhead" points="232,184 220,178.4 220,189.6" fill="black" transform="rotate(90,224,184)"/>
              <g class="text">
                <text x="88" y="36">Certification</text>
                <text x="184" y="36">Authority</text>
                <text x="348" y="52">Update</text>
                <text x="408" y="52">Channel</text>
                <text x="92" y="84">1.</text>
                <text x="140" y="84">Allocate</text>
                <text x="216" y="84">landmarks</text>
                <text x="44" y="148">2.</text>
                <text x="76" y="148">Make</text>
                <text x="132" y="148">landmark</text>
                <text x="188" y="148">cert</text>
                <text x="316" y="148">3.</text>
                <text x="372" y="148">Distribute</text>
                <text x="376" y="164">landmarks</text>
                <text x="92" y="196">Authenticating</text>
                <text x="176" y="196">Party</text>
                <text x="52" y="228">landmark</text>
                <text x="108" y="228">cert</text>
                <text x="64" y="244">tbscert</text>
                <text x="364" y="244">Up-to-date</text>
                <text x="420" y="244">RP</text>
                <text x="72" y="260">inclusion</text>
                <text x="136" y="260">proof</text>
                <text x="172" y="260">to</text>
                <text x="220" y="260">landmark</text>
                <text x="340" y="260">landmark</text>
                <text x="404" y="260">hashes</text>
                <text x="336" y="276">trusted</text>
                <text x="408" y="276">cosigners</text>
                <text x="60" y="308">standalone</text>
                <text x="124" y="308">cert</text>
                <text x="64" y="324">tbscert</text>
                <text x="360" y="324">Unupdated</text>
                <text x="412" y="324">RP</text>
                <text x="72" y="340">inclusion</text>
                <text x="136" y="340">proof</text>
                <text x="332" y="340">(stale</text>
                <text x="372" y="340">or</text>
                <text x="396" y="340">no</text>
                <text x="440" y="340">hashes)</text>
                <text x="84" y="356">cosignatures</text>
                <text x="336" y="356">trusted</text>
                <text x="408" y="356">cosigners</text>
                <text x="180" y="404">4.</text>
                <text x="220" y="404">Select</text>
                <text x="296" y="404">certificate</text>
                <text x="356" y="404">by</text>
                <text x="380" y="404">RP</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+-- Certification Authority -----+
|                                |  +-- Update Channel --+
|    /\                          |  |                    |
|   /  \  1. Allocate landmarks -+--+----------------+   |
|  +----+                  |     |  |                |   |
+--------------------------+-----+  +----------------+---+
                           |                         |
    2. Make landmark cert  |          3. Distribute  |
                           |              landmarks  |
                           V                         |
+-- Authenticating Party --------+                   |
|                                |                   |
| landmark cert                  |                   V
|   tbscert                      |  +-- Up-to-date RP -----+
|   inclusion proof to landmark -+->| landmark hashes      |
|                                |  | trusted cosigners    |
|                                |  +----------------------+
| standalone cert                |
|   tbscert                      |  +-- Unupdated RP ------+
|   inclusion proof              |  | (stale or no hashes) |
|   cosignatures     ------------+->| trusted cosigners    |
|                                |  +----------------------+
+--------------------------------+
                     4. Select certificate by RP
]]></artwork>
        </artset>
      </figure>
      <t>Landmark certificates are constructed and used as follows. <xref target="fig-landmark-cert-overview"/> depicts this process.</t>
      <ol spacing="normal" type="1"><li>
          <t>Periodically, the tree size of the CA's most recent checkpoint is designated as a <em>landmark</em>. This determines <em>landmark subtrees</em>, which are common points of reference between relying parties and landmark certificates.</t>
        </li>
        <li>
          <t>Once some landmark includes the TBSCertificate, the landmark certificate is constructed with:  </t>
          <ul spacing="normal">
            <li>
              <t>The TBSCertificate being certified</t>
            </li>
            <li>
              <t>An inclusion proof from the TBSCertificate to a landmark subtree</t>
            </li>
          </ul>
        </li>
        <li>
          <t>In the background, landmark subtrees are predistributed to relying parties, with cosignatures checked against relying party requirements. This occurs periodically in the background, separate from the application protocol.</t>
        </li>
        <li>
          <t>During the application protocol, such as TLS <xref target="RFC8446"/>, if the relying party already supports the landmark subtree, the authenticating party can present the landmark certificate. Otherwise, it presents a standalone certificate. The authenticating party may also select between several landmark certificates, as described in <xref target="certificate-renewal"/>.</t>
        </li>
      </ol>
    </section>
    <section anchor="subtrees">
      <name>Subtrees</name>
      <t>This section extends the Merkle Tree definition in <xref section="2.1" sectionFormat="of" target="RFC9162"/> by defining a <em>subtree</em> of a Merkle Tree. A subtree is an interior node of a Merkle Tree, which can be efficiently shown consistent with the original Merkle Tree and any Merkle Tree with additional elements appended. This specification uses subtrees to reduce the size of inclusion proofs.</t>
      <section anchor="definition-of-a-subtree">
        <name>Definition of a Subtree</name>
        <t>Given an ordered list of <tt>n</tt> inputs, <tt>D_n = {d[0], d[1], ..., d[n-1]}</tt>, <xref section="2.1.1" sectionFormat="of" target="RFC9162"/> defines the Merkle Tree via the Merkle Tree Hash <tt>MTH(D_n)</tt>.</t>
        <t>A <em>subtree</em> of this Merkle Tree is itself a Merkle Tree, defined by <tt>MTH(D[start:end])</tt>. <tt>start</tt> and <tt>end</tt> are integers such that:</t>
        <ul spacing="normal">
          <li>
            <t><tt>0 &lt;= start &lt; end &lt;= n</tt></t>
          </li>
          <li>
            <t><tt>start</tt> is a multiple of <tt>BIT_CEIL(end - start)</tt></t>
          </li>
        </ul>
        <t>Note that, if <tt>start</tt> is zero, the second condition is always true.</t>
        <t>In the context of a single Merkle Tree, the subtree defined by <tt>start</tt> and <tt>end</tt> is denoted by half-open interval <tt>[start, end)</tt>. It contains the entries whose indices are in that half-open interval.</t>
        <t>The <em>size</em> of the subtree is <tt>end - start</tt>. If the subtree's size is a power of two, it is said to be <em>full</em>, otherwise it is said to be <em>partial</em>.</t>
        <t>If a subtree is full, then it is directly contained in the tree of hash operations in <tt>MTH(D_n)</tt> for <tt>n &gt;= end</tt>.</t>
        <t>If a subtree is partial, it is directly contained in <tt>MTH(D_n)</tt> only if <tt>n = end</tt>.</t>
      </section>
      <section anchor="example-subtrees">
        <name>Example Subtrees</name>
        <t><xref target="fig-subtree-example"/> shows the subtrees <tt>[4, 8)</tt> and <tt>[8, 13)</tt>:</t>
        <figure anchor="fig-subtree-example">
          <name>Two example subtrees, one full and one partial</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="464" width="200" viewBox="0 0 200 464" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,96 L 8,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,352 L 8,384" fill="none" stroke="black"/>
                <path d="M 8,416 L 8,448" fill="none" stroke="black"/>
                <path d="M 24,160 L 24,192" fill="none" stroke="black"/>
                <path d="M 24,416 L 24,448" fill="none" stroke="black"/>
                <path d="M 32,32 L 32,64" fill="none" stroke="black"/>
                <path d="M 32,288 L 32,320" fill="none" stroke="black"/>
                <path d="M 40,160 L 40,192" fill="none" stroke="black"/>
                <path d="M 40,416 L 40,448" fill="none" stroke="black"/>
                <path d="M 56,96 L 56,128" fill="none" stroke="black"/>
                <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 56,416 L 56,448" fill="none" stroke="black"/>
                <path d="M 64,352 L 64,384" fill="none" stroke="black"/>
                <path d="M 72,96 L 72,128" fill="none" stroke="black"/>
                <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                <path d="M 72,416 L 72,448" fill="none" stroke="black"/>
                <path d="M 80,352 L 80,384" fill="none" stroke="black"/>
                <path d="M 88,160 L 88,192" fill="none" stroke="black"/>
                <path d="M 96,416 L 96,448" fill="none" stroke="black"/>
                <path d="M 104,32 L 104,64" fill="none" stroke="black"/>
                <path d="M 104,160 L 104,192" fill="none" stroke="black"/>
                <path d="M 112,288 L 112,320" fill="none" stroke="black"/>
                <path d="M 112,416 L 112,448" fill="none" stroke="black"/>
                <path d="M 120,96 L 120,128" fill="none" stroke="black"/>
                <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                <path d="M 136,416 L 136,448" fill="none" stroke="black"/>
                <path d="M 144,352 L 144,384" fill="none" stroke="black"/>
                <path d="M 152,416 L 152,448" fill="none" stroke="black"/>
                <path d="M 168,264 L 168,408" fill="none" stroke="black"/>
                <path d="M 176,416 L 176,448" fill="none" stroke="black"/>
                <path d="M 192,224 L 192,256" fill="none" stroke="black"/>
                <path d="M 32,32 L 104,32" fill="none" stroke="black"/>
                <path d="M 32,64 L 104,64" fill="none" stroke="black"/>
                <path d="M 8,96 L 56,96" fill="none" stroke="black"/>
                <path d="M 72,96 L 120,96" fill="none" stroke="black"/>
                <path d="M 8,128 L 56,128" fill="none" stroke="black"/>
                <path d="M 72,128 L 120,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 24,160" fill="none" stroke="black"/>
                <path d="M 40,160 L 56,160" fill="none" stroke="black"/>
                <path d="M 72,160 L 88,160" fill="none" stroke="black"/>
                <path d="M 104,160 L 120,160" fill="none" stroke="black"/>
                <path d="M 8,192 L 24,192" fill="none" stroke="black"/>
                <path d="M 40,192 L 56,192" fill="none" stroke="black"/>
                <path d="M 72,192 L 88,192" fill="none" stroke="black"/>
                <path d="M 104,192 L 120,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 192,224" fill="none" stroke="black"/>
                <path d="M 56,256 L 192,256" fill="none" stroke="black"/>
                <path d="M 32,288 L 112,288" fill="none" stroke="black"/>
                <path d="M 32,320 L 112,320" fill="none" stroke="black"/>
                <path d="M 8,352 L 64,352" fill="none" stroke="black"/>
                <path d="M 80,352 L 144,352" fill="none" stroke="black"/>
                <path d="M 8,384 L 64,384" fill="none" stroke="black"/>
                <path d="M 80,384 L 144,384" fill="none" stroke="black"/>
                <path d="M 8,416 L 24,416" fill="none" stroke="black"/>
                <path d="M 40,416 L 56,416" fill="none" stroke="black"/>
                <path d="M 72,416 L 96,416" fill="none" stroke="black"/>
                <path d="M 112,416 L 136,416" fill="none" stroke="black"/>
                <path d="M 152,416 L 176,416" fill="none" stroke="black"/>
                <path d="M 8,448 L 24,448" fill="none" stroke="black"/>
                <path d="M 40,448 L 56,448" fill="none" stroke="black"/>
                <path d="M 72,448 L 96,448" fill="none" stroke="black"/>
                <path d="M 112,448 L 136,448" fill="none" stroke="black"/>
                <path d="M 152,448 L 176,448" fill="none" stroke="black"/>
                <g class="text">
                  <text x="56" y="52">[4,</text>
                  <text x="84" y="52">8)</text>
                  <text x="40" y="84">/</text>
                  <text x="96" y="84">\</text>
                  <text x="32" y="116">[4,6)</text>
                  <text x="96" y="116">[6,8)</text>
                  <text x="24" y="148">/</text>
                  <text x="40" y="148">\</text>
                  <text x="88" y="148">/</text>
                  <text x="104" y="148">\</text>
                  <text x="16" y="180">4</text>
                  <text x="48" y="180">5</text>
                  <text x="80" y="180">6</text>
                  <text x="112" y="180">7</text>
                  <text x="112" y="244">[8,</text>
                  <text x="144" y="244">13)</text>
                  <text x="80" y="276">/</text>
                  <text x="56" y="308">[8,</text>
                  <text x="88" y="308">12)</text>
                  <text x="48" y="340">/</text>
                  <text x="104" y="340">\</text>
                  <text x="36" y="372">[8,10)</text>
                  <text x="112" y="372">[10,12)</text>
                  <text x="24" y="404">/</text>
                  <text x="40" y="404">\</text>
                  <text x="96" y="404">/</text>
                  <text x="112" y="404">\</text>
                  <text x="16" y="436">8</text>
                  <text x="48" y="436">9</text>
                  <text x="84" y="436">10</text>
                  <text x="124" y="436">11</text>
                  <text x="164" y="436">12</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
   +--------+
   | [4, 8) |
   +--------+
    /      \
+-----+ +-----+
|[4,6)| |[6,8)|
+-----+ +-----+
  / \     / \
+-+ +-+ +-+ +-+
|4| |5| |6| |7|
+-+ +-+ +-+ +-+

      +----------------+
      |     [8, 13)    |
      +----------------+
         /          |
   +---------+      |
   | [8, 12) |      |
   +---------+      |
     /      \       |
+------+ +-------+  |
|[8,10)| |[10,12)|  |
+------+ +-------+  |
  / \      / \      |
+-+ +-+ +--+ +--+ +--+
|8| |9| |10| |11| |12|
+-+ +-+ +--+ +--+ +--+
]]></artwork>
          </artset>
        </figure>
        <t>Both subtrees are directly contained in a Merkle Tree of size 13, depicted in <xref target="fig-subtree-containment-example"/>. <tt>[4, 8)</tt> is contained (marked with double lines) because, although <tt>n</tt> (13) is not <tt>end</tt> (8), the subtree is full. <tt>[8, 13)</tt> is contained (marked with wavy lines) because <tt>n</tt> (13) is <tt>end</tt> (13).</t>
        <figure anchor="fig-subtree-containment-example">
          <name>A Merkle Tree of size 13</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="456" viewBox="0 0 456 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 8,288 L 8,320" fill="none" stroke="black"/>
                <path d="M 24,288 L 24,320" fill="none" stroke="black"/>
                <path d="M 32,160 L 32,192" fill="none" stroke="black"/>
                <path d="M 40,288 L 40,320" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 56,288 L 56,320" fill="none" stroke="black"/>
                <path d="M 64,96 L 64,128" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 72,288 L 72,320" fill="none" stroke="black"/>
                <path d="M 88,288 L 88,320" fill="none" stroke="black"/>
                <path d="M 104,160 L 104,192" fill="none" stroke="black"/>
                <path d="M 104,288 L 104,320" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 120,288 L 120,320" fill="none" stroke="black"/>
                <path d="M 136,32 L 136,64" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 136,288 L 136,320" fill="none" stroke="black"/>
                <path d="M 152,288 L 152,320" fill="none" stroke="black"/>
                <path d="M 160,160 L 160,192" fill="none" stroke="black"/>
                <path d="M 168,288 L 168,320" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 184,288 L 184,320" fill="none" stroke="black"/>
                <path d="M 200,96 L 200,128" fill="none" stroke="black"/>
                <path d="M 200,224 L 200,256" fill="none" stroke="black"/>
                <path d="M 200,288 L 200,320" fill="none" stroke="black"/>
                <path d="M 216,288 L 216,320" fill="none" stroke="black"/>
                <path d="M 232,160 L 232,192" fill="none" stroke="black"/>
                <path d="M 232,288 L 232,320" fill="none" stroke="black"/>
                <path d="M 248,224 L 248,256" fill="none" stroke="black"/>
                <path d="M 248,288 L 248,320" fill="none" stroke="black"/>
                <path d="M 264,224 L 264,256" fill="none" stroke="black"/>
                <path d="M 264,288 L 264,320" fill="none" stroke="black"/>
                <path d="M 280,288 L 280,320" fill="none" stroke="black"/>
                <path d="M 288,160 L 288,192" fill="none" stroke="black"/>
                <path d="M 296,288 L 296,320" fill="none" stroke="black"/>
                <path d="M 312,96 L 312,128" fill="none" stroke="black"/>
                <path d="M 312,288 L 312,320" fill="none" stroke="black"/>
                <path d="M 320,224 L 320,256" fill="none" stroke="black"/>
                <path d="M 328,288 L 328,320" fill="none" stroke="black"/>
                <path d="M 336,224 L 336,256" fill="none" stroke="black"/>
                <path d="M 352,288 L 352,320" fill="none" stroke="black"/>
                <path d="M 368,160 L 368,192" fill="none" stroke="black"/>
                <path d="M 368,288 L 368,320" fill="none" stroke="black"/>
                <path d="M 376,32 L 376,64" fill="none" stroke="black"/>
                <path d="M 392,288 L 392,320" fill="none" stroke="black"/>
                <path d="M 400,224 L 400,256" fill="none" stroke="black"/>
                <path d="M 408,288 L 408,320" fill="none" stroke="black"/>
                <path d="M 424,144 L 424,272" fill="none" stroke="black"/>
                <path d="M 432,288 L 432,320" fill="none" stroke="black"/>
                <path d="M 448,96 L 448,128" fill="none" stroke="black"/>
                <path d="M 136,32 L 376,32" fill="none" stroke="black"/>
                <path d="M 136,64 L 376,64" fill="none" stroke="black"/>
                <path d="M 64,96 L 200,96" fill="none" stroke="black"/>
                <path d="M 312,96 Q 314,92.8 316,96 Q 318,99.2 320,96 Q 322,92.8 324,96 Q 326,99.2 328,96 Q 330,92.8 332,96 Q 334,99.2 336,96 Q 338,92.8 340,96 Q 342,99.2 344,96 Q 346,92.8 348,96 Q 350,99.2 352,96 Q 354,92.8 356,96 Q 358,99.2 360,96 Q 362,92.8 364,96 Q 366,99.2 368,96 Q 370,92.8 372,96 Q 374,99.2 376,96 Q 378,92.8 380,96 Q 382,99.2 384,96 Q 386,92.8 388,96 Q 390,99.2 392,96 Q 394,92.8 396,96 Q 398,99.2 400,96 Q 402,92.8 404,96 Q 406,99.2 408,96 Q 410,92.8 412,96 Q 414,99.2 416,96 Q 418,92.8 420,96 Q 422,99.2 424,96 Q 426,92.8 428,96 Q 430,99.2 432,96 Q 434,92.8 436,96 Q 438,99.2 440,96 Q 442,92.8 444,96 Q 446,99.2 448,96 " fill="none" stroke="black"/>
                <path d="M 64,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 312,128 Q 314,124.8 316,128 Q 318,131.2 320,128 Q 322,124.8 324,128 Q 326,131.2 328,128 Q 330,124.8 332,128 Q 334,131.2 336,128 Q 338,124.8 340,128 Q 342,131.2 344,128 Q 346,124.8 348,128 Q 350,131.2 352,128 Q 354,124.8 356,128 Q 358,131.2 360,128 Q 362,124.8 364,128 Q 366,131.2 368,128 Q 370,124.8 372,128 Q 374,131.2 376,128 Q 378,124.8 380,128 Q 382,131.2 384,128 Q 386,124.8 388,128 Q 390,131.2 392,128 Q 394,124.8 396,128 Q 398,131.2 400,128 Q 402,124.8 404,128 Q 406,131.2 408,128 Q 410,124.8 412,128 Q 414,131.2 416,128 Q 418,124.8 420,128 Q 422,131.2 424,128 Q 426,124.8 428,128 Q 430,131.2 432,128 Q 434,124.8 436,128 Q 438,131.2 440,128 Q 442,124.8 444,128 Q 446,131.2 448,128 " fill="none" stroke="black"/>
                <path d="M 32,160 L 104,160" fill="none" stroke="black"/>
                <path d="M 160,158 L 232,158" fill="none" stroke="black"/>
                <path d="M 160,162 L 232,162" fill="none" stroke="black"/>
                <path d="M 288,160 Q 290,156.8 292,160 Q 294,163.2 296,160 Q 298,156.8 300,160 Q 302,163.2 304,160 Q 306,156.8 308,160 Q 310,163.2 312,160 Q 314,156.8 316,160 Q 318,163.2 320,160 Q 322,156.8 324,160 Q 326,163.2 328,160 Q 330,156.8 332,160 Q 334,163.2 336,160 Q 338,156.8 340,160 Q 342,163.2 344,160 Q 346,156.8 348,160 Q 350,163.2 352,160 Q 354,156.8 356,160 Q 358,163.2 360,160 Q 362,156.8 364,160 Q 366,163.2 368,160 " fill="none" stroke="black"/>
                <path d="M 32,192 L 104,192" fill="none" stroke="black"/>
                <path d="M 160,190 L 232,190" fill="none" stroke="black"/>
                <path d="M 160,194 L 232,194" fill="none" stroke="black"/>
                <path d="M 288,192 Q 290,188.8 292,192 Q 294,195.2 296,192 Q 298,188.8 300,192 Q 302,195.2 304,192 Q 306,188.8 308,192 Q 310,195.2 312,192 Q 314,188.8 316,192 Q 318,195.2 320,192 Q 322,188.8 324,192 Q 326,195.2 328,192 Q 330,188.8 332,192 Q 334,195.2 336,192 Q 338,188.8 340,192 Q 342,195.2 344,192 Q 346,188.8 348,192 Q 350,195.2 352,192 Q 354,188.8 356,192 Q 358,195.2 360,192 Q 362,188.8 364,192 Q 366,195.2 368,192 " fill="none" stroke="black"/>
                <path d="M 8,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,222 L 184,222" fill="none" stroke="black"/>
                <path d="M 136,226 L 184,226" fill="none" stroke="black"/>
                <path d="M 200,222 L 248,222" fill="none" stroke="black"/>
                <path d="M 200,226 L 248,226" fill="none" stroke="black"/>
                <path d="M 264,224 Q 266,220.8 268,224 Q 270,227.2 272,224 Q 274,220.8 276,224 Q 278,227.2 280,224 Q 282,220.8 284,224 Q 286,227.2 288,224 Q 290,220.8 292,224 Q 294,227.2 296,224 Q 298,220.8 300,224 Q 302,227.2 304,224 Q 306,220.8 308,224 Q 310,227.2 312,224 Q 314,220.8 316,224 Q 318,227.2 320,224 " fill="none" stroke="black"/>
                <path d="M 336,224 Q 338,220.8 340,224 Q 342,227.2 344,224 Q 346,220.8 348,224 Q 350,227.2 352,224 Q 354,220.8 356,224 Q 358,227.2 360,224 Q 362,220.8 364,224 Q 366,227.2 368,224 Q 370,220.8 372,224 Q 374,227.2 376,224 Q 378,220.8 380,224 Q 382,227.2 384,224 Q 386,220.8 388,224 Q 390,227.2 392,224 Q 394,220.8 396,224 Q 398,227.2 400,224 " fill="none" stroke="black"/>
                <path d="M 8,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,254 L 184,254" fill="none" stroke="black"/>
                <path d="M 136,258 L 184,258" fill="none" stroke="black"/>
                <path d="M 200,254 L 248,254" fill="none" stroke="black"/>
                <path d="M 200,258 L 248,258" fill="none" stroke="black"/>
                <path d="M 264,256 Q 266,252.8 268,256 Q 270,259.2 272,256 Q 274,252.8 276,256 Q 278,259.2 280,256 Q 282,252.8 284,256 Q 286,259.2 288,256 Q 290,252.8 292,256 Q 294,259.2 296,256 Q 298,252.8 300,256 Q 302,259.2 304,256 Q 306,252.8 308,256 Q 310,259.2 312,256 Q 314,252.8 316,256 Q 318,259.2 320,256 " fill="none" stroke="black"/>
                <path d="M 336,256 Q 338,252.8 340,256 Q 342,259.2 344,256 Q 346,252.8 348,256 Q 350,259.2 352,256 Q 354,252.8 356,256 Q 358,259.2 360,256 Q 362,252.8 364,256 Q 366,259.2 368,256 Q 370,252.8 372,256 Q 374,259.2 376,256 Q 378,252.8 380,256 Q 382,259.2 384,256 Q 386,252.8 388,256 Q 390,259.2 392,256 Q 394,252.8 396,256 Q 398,259.2 400,256 " fill="none" stroke="black"/>
                <path d="M 8,288 L 24,288" fill="none" stroke="black"/>
                <path d="M 40,288 L 56,288" fill="none" stroke="black"/>
                <path d="M 72,288 L 88,288" fill="none" stroke="black"/>
                <path d="M 104,288 L 120,288" fill="none" stroke="black"/>
                <path d="M 136,286 L 152,286" fill="none" stroke="black"/>
                <path d="M 136,290 L 152,290" fill="none" stroke="black"/>
                <path d="M 168,286 L 184,286" fill="none" stroke="black"/>
                <path d="M 168,290 L 184,290" fill="none" stroke="black"/>
                <path d="M 200,286 L 216,286" fill="none" stroke="black"/>
                <path d="M 200,290 L 216,290" fill="none" stroke="black"/>
                <path d="M 232,286 L 248,286" fill="none" stroke="black"/>
                <path d="M 232,290 L 248,290" fill="none" stroke="black"/>
                <path d="M 264,288 Q 266,284.8 268,288 Q 270,291.2 272,288 Q 274,284.8 276,288 Q 278,291.2 280,288 " fill="none" stroke="black"/>
                <path d="M 296,288 Q 298,284.8 300,288 Q 302,291.2 304,288 Q 306,284.8 308,288 Q 310,291.2 312,288 " fill="none" stroke="black"/>
                <path d="M 328,288 Q 330,284.8 332,288 Q 334,291.2 336,288 Q 338,284.8 340,288 Q 342,291.2 344,288 Q 346,284.8 348,288 Q 350,291.2 352,288 " fill="none" stroke="black"/>
                <path d="M 368,288 Q 370,284.8 372,288 Q 374,291.2 376,288 Q 378,284.8 380,288 Q 382,291.2 384,288 Q 386,284.8 388,288 Q 390,291.2 392,288 " fill="none" stroke="black"/>
                <path d="M 408,288 Q 410,284.8 412,288 Q 414,291.2 416,288 Q 418,284.8 420,288 Q 422,291.2 424,288 Q 426,284.8 428,288 Q 430,291.2 432,288 " fill="none" stroke="black"/>
                <path d="M 8,320 L 24,320" fill="none" stroke="black"/>
                <path d="M 40,320 L 56,320" fill="none" stroke="black"/>
                <path d="M 72,320 L 88,320" fill="none" stroke="black"/>
                <path d="M 104,320 L 120,320" fill="none" stroke="black"/>
                <path d="M 136,318 L 152,318" fill="none" stroke="black"/>
                <path d="M 136,322 L 152,322" fill="none" stroke="black"/>
                <path d="M 168,318 L 184,318" fill="none" stroke="black"/>
                <path d="M 168,322 L 184,322" fill="none" stroke="black"/>
                <path d="M 200,318 L 216,318" fill="none" stroke="black"/>
                <path d="M 200,322 L 216,322" fill="none" stroke="black"/>
                <path d="M 232,318 L 248,318" fill="none" stroke="black"/>
                <path d="M 232,322 L 248,322" fill="none" stroke="black"/>
                <path d="M 264,320 Q 266,316.8 268,320 Q 270,323.2 272,320 Q 274,316.8 276,320 Q 278,323.2 280,320 " fill="none" stroke="black"/>
                <path d="M 296,320 Q 298,316.8 300,320 Q 302,323.2 304,320 Q 306,316.8 308,320 Q 310,323.2 312,320 " fill="none" stroke="black"/>
                <path d="M 328,320 Q 330,316.8 332,320 Q 334,323.2 336,320 Q 338,316.8 340,320 Q 342,323.2 344,320 Q 346,316.8 348,320 Q 350,323.2 352,320 " fill="none" stroke="black"/>
                <path d="M 368,320 Q 370,316.8 372,320 Q 374,323.2 376,320 Q 378,316.8 380,320 Q 382,323.2 384,320 Q 386,316.8 388,320 Q 390,323.2 392,320 " fill="none" stroke="black"/>
                <path d="M 408,320 Q 410,316.8 412,320 Q 414,323.2 416,320 Q 418,316.8 420,320 Q 422,323.2 424,320 Q 426,316.8 428,320 Q 430,323.2 432,320 " fill="none" stroke="black"/>
                <g class="text">
                  <text x="248" y="52">[0,</text>
                  <text x="280" y="52">13)</text>
                  <text x="160" y="84">/</text>
                  <text x="352" y="84">\</text>
                  <text x="120" y="116">[0,</text>
                  <text x="148" y="116">8)</text>
                  <text x="368" y="116">[8,</text>
                  <text x="400" y="116">13)</text>
                  <text x="72" y="148">/</text>
                  <text x="192" y="148">\</text>
                  <text x="336" y="148">/</text>
                  <text x="56" y="180">[0,</text>
                  <text x="84" y="180">4)</text>
                  <text x="184" y="180">[4,</text>
                  <text x="212" y="180">8)</text>
                  <text x="312" y="180">[8,</text>
                  <text x="344" y="180">12)</text>
                  <text x="40" y="212">/</text>
                  <text x="96" y="212">\</text>
                  <text x="168" y="212">/</text>
                  <text x="224" y="212">\</text>
                  <text x="304" y="212">/</text>
                  <text x="360" y="212">\</text>
                  <text x="32" y="244">[0,2)</text>
                  <text x="96" y="244">[2,4)</text>
                  <text x="160" y="244">[4,6)</text>
                  <text x="224" y="244">[6,8)</text>
                  <text x="292" y="244">[8,10)</text>
                  <text x="368" y="244">[10,12)</text>
                  <text x="24" y="276">/</text>
                  <text x="40" y="276">\</text>
                  <text x="88" y="276">/</text>
                  <text x="104" y="276">\</text>
                  <text x="152" y="276">/</text>
                  <text x="168" y="276">\</text>
                  <text x="216" y="276">/</text>
                  <text x="232" y="276">\</text>
                  <text x="280" y="276">/</text>
                  <text x="296" y="276">\</text>
                  <text x="352" y="276">/</text>
                  <text x="368" y="276">\</text>
                  <text x="16" y="308">0</text>
                  <text x="48" y="308">1</text>
                  <text x="80" y="308">2</text>
                  <text x="112" y="308">3</text>
                  <text x="144" y="308">4</text>
                  <text x="176" y="308">5</text>
                  <text x="208" y="308">6</text>
                  <text x="240" y="308">7</text>
                  <text x="272" y="308">8</text>
                  <text x="304" y="308">9</text>
                  <text x="340" y="308">10</text>
                  <text x="380" y="308">11</text>
                  <text x="420" y="308">12</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                +-----------------------------+
                |            [0, 13)          |
                +-----------------------------+
                   /                       \
       +----------------+             +~~~~~~~~~~~~~~~~+
       |     [0, 8)     |             |     [8, 13)    |
       +----------------+             +~~~~~~~~~~~~~~~~+
        /              \                 /          |
   +--------+      +========+      +~~~~~~~~~+      |
   | [0, 4) |      | [4, 8) |      | [8, 12) |      |
   +--------+      +========+      +~~~~~~~~~+      |
    /      \        /      \         /      \       |
+-----+ +-----+ +=====+ +=====+ +~~~~~~+ +~~~~~~~+  |
|[0,2)| |[2,4)| |[4,6)| |[6,8)| |[8,10)| |[10,12)|  |
+-----+ +-----+ +=====+ +=====+ +~~~~~~+ +~~~~~~~+  |
  / \     / \     / \     / \     / \      / \      |
+-+ +-+ +-+ +-+ +=+ +=+ +=+ +=+ +~+ +~+ +~~+ +~~+ +~~+
|0| |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| |11| |12|
+-+ +-+ +-+ +-+ +=+ +=+ +=+ +=+ +~+ +~+ +~~+ +~~+ +~~+
]]></artwork>
          </artset>
        </figure>
        <t>In contrast, <tt>[8, 13)</tt> is not directly contained in a Merkle Tree of size 14, depicted in <xref target="fig-subtree-containment-example-2"/>. However, the subtree is still computed over consistent elements.</t>
        <figure anchor="fig-subtree-containment-example-2">
          <name>A Merkle Tree of size 14</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="488" viewBox="0 0 488 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 8,288 L 8,320" fill="none" stroke="black"/>
                <path d="M 24,288 L 24,320" fill="none" stroke="black"/>
                <path d="M 32,160 L 32,192" fill="none" stroke="black"/>
                <path d="M 40,288 L 40,320" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 56,288 L 56,320" fill="none" stroke="black"/>
                <path d="M 64,96 L 64,128" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 72,288 L 72,320" fill="none" stroke="black"/>
                <path d="M 88,288 L 88,320" fill="none" stroke="black"/>
                <path d="M 104,160 L 104,192" fill="none" stroke="black"/>
                <path d="M 104,288 L 104,320" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 120,288 L 120,320" fill="none" stroke="black"/>
                <path d="M 136,32 L 136,64" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 136,288 L 136,320" fill="none" stroke="black"/>
                <path d="M 152,288 L 152,320" fill="none" stroke="black"/>
                <path d="M 160,160 L 160,192" fill="none" stroke="black"/>
                <path d="M 168,288 L 168,320" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 184,288 L 184,320" fill="none" stroke="black"/>
                <path d="M 200,96 L 200,128" fill="none" stroke="black"/>
                <path d="M 200,224 L 200,256" fill="none" stroke="black"/>
                <path d="M 200,288 L 200,320" fill="none" stroke="black"/>
                <path d="M 216,288 L 216,320" fill="none" stroke="black"/>
                <path d="M 232,160 L 232,192" fill="none" stroke="black"/>
                <path d="M 232,288 L 232,320" fill="none" stroke="black"/>
                <path d="M 248,224 L 248,256" fill="none" stroke="black"/>
                <path d="M 248,288 L 248,320" fill="none" stroke="black"/>
                <path d="M 264,224 L 264,256" fill="none" stroke="black"/>
                <path d="M 264,288 L 264,320" fill="none" stroke="black"/>
                <path d="M 280,288 L 280,320" fill="none" stroke="black"/>
                <path d="M 288,160 L 288,192" fill="none" stroke="black"/>
                <path d="M 296,288 L 296,320" fill="none" stroke="black"/>
                <path d="M 312,96 L 312,128" fill="none" stroke="black"/>
                <path d="M 312,288 L 312,320" fill="none" stroke="black"/>
                <path d="M 320,224 L 320,256" fill="none" stroke="black"/>
                <path d="M 328,288 L 328,320" fill="none" stroke="black"/>
                <path d="M 336,224 L 336,256" fill="none" stroke="black"/>
                <path d="M 352,288 L 352,320" fill="none" stroke="black"/>
                <path d="M 368,160 L 368,192" fill="none" stroke="black"/>
                <path d="M 368,288 L 368,320" fill="none" stroke="black"/>
                <path d="M 376,32 L 376,64" fill="none" stroke="black"/>
                <path d="M 392,288 L 392,320" fill="none" stroke="black"/>
                <path d="M 400,224 L 400,256" fill="none" stroke="black"/>
                <path d="M 408,288 L 408,320" fill="none" stroke="black"/>
                <path d="M 416,224 L 416,256" fill="none" stroke="black"/>
                <path d="M 432,136 L 432,216" fill="none" stroke="black"/>
                <path d="M 432,288 L 432,320" fill="none" stroke="black"/>
                <path d="M 448,96 L 448,128" fill="none" stroke="black"/>
                <path d="M 448,288 L 448,320" fill="none" stroke="black"/>
                <path d="M 472,288 L 472,320" fill="none" stroke="black"/>
                <path d="M 480,224 L 480,256" fill="none" stroke="black"/>
                <path d="M 136,32 L 376,32" fill="none" stroke="black"/>
                <path d="M 136,64 L 376,64" fill="none" stroke="black"/>
                <path d="M 64,96 L 200,96" fill="none" stroke="black"/>
                <path d="M 312,96 L 448,96" fill="none" stroke="black"/>
                <path d="M 64,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 312,128 L 448,128" fill="none" stroke="black"/>
                <path d="M 32,160 L 104,160" fill="none" stroke="black"/>
                <path d="M 160,160 L 232,160" fill="none" stroke="black"/>
                <path d="M 288,160 Q 290,156.8 292,160 Q 294,163.2 296,160 Q 298,156.8 300,160 Q 302,163.2 304,160 Q 306,156.8 308,160 Q 310,163.2 312,160 Q 314,156.8 316,160 Q 318,163.2 320,160 Q 322,156.8 324,160 Q 326,163.2 328,160 Q 330,156.8 332,160 Q 334,163.2 336,160 Q 338,156.8 340,160 Q 342,163.2 344,160 Q 346,156.8 348,160 Q 350,163.2 352,160 Q 354,156.8 356,160 Q 358,163.2 360,160 Q 362,156.8 364,160 Q 366,163.2 368,160 " fill="none" stroke="black"/>
                <path d="M 32,192 L 104,192" fill="none" stroke="black"/>
                <path d="M 160,192 L 232,192" fill="none" stroke="black"/>
                <path d="M 288,192 Q 290,188.8 292,192 Q 294,195.2 296,192 Q 298,188.8 300,192 Q 302,195.2 304,192 Q 306,188.8 308,192 Q 310,195.2 312,192 Q 314,188.8 316,192 Q 318,195.2 320,192 Q 322,188.8 324,192 Q 326,195.2 328,192 Q 330,188.8 332,192 Q 334,195.2 336,192 Q 338,188.8 340,192 Q 342,195.2 344,192 Q 346,188.8 348,192 Q 350,195.2 352,192 Q 354,188.8 356,192 Q 358,195.2 360,192 Q 362,188.8 364,192 Q 366,195.2 368,192 " fill="none" stroke="black"/>
                <path d="M 8,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 200,224 L 248,224" fill="none" stroke="black"/>
                <path d="M 264,224 Q 266,220.8 268,224 Q 270,227.2 272,224 Q 274,220.8 276,224 Q 278,227.2 280,224 Q 282,220.8 284,224 Q 286,227.2 288,224 Q 290,220.8 292,224 Q 294,227.2 296,224 Q 298,220.8 300,224 Q 302,227.2 304,224 Q 306,220.8 308,224 Q 310,227.2 312,224 Q 314,220.8 316,224 Q 318,227.2 320,224 " fill="none" stroke="black"/>
                <path d="M 336,224 Q 338,220.8 340,224 Q 342,227.2 344,224 Q 346,220.8 348,224 Q 350,227.2 352,224 Q 354,220.8 356,224 Q 358,227.2 360,224 Q 362,220.8 364,224 Q 366,227.2 368,224 Q 370,220.8 372,224 Q 374,227.2 376,224 Q 378,220.8 380,224 Q 382,227.2 384,224 Q 386,220.8 388,224 Q 390,227.2 392,224 Q 394,220.8 396,224 Q 398,227.2 400,224 " fill="none" stroke="black"/>
                <path d="M 416,224 L 480,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 184,256" fill="none" stroke="black"/>
                <path d="M 200,256 L 248,256" fill="none" stroke="black"/>
                <path d="M 264,256 Q 266,252.8 268,256 Q 270,259.2 272,256 Q 274,252.8 276,256 Q 278,259.2 280,256 Q 282,252.8 284,256 Q 286,259.2 288,256 Q 290,252.8 292,256 Q 294,259.2 296,256 Q 298,252.8 300,256 Q 302,259.2 304,256 Q 306,252.8 308,256 Q 310,259.2 312,256 Q 314,252.8 316,256 Q 318,259.2 320,256 " fill="none" stroke="black"/>
                <path d="M 336,256 Q 338,252.8 340,256 Q 342,259.2 344,256 Q 346,252.8 348,256 Q 350,259.2 352,256 Q 354,252.8 356,256 Q 358,259.2 360,256 Q 362,252.8 364,256 Q 366,259.2 368,256 Q 370,252.8 372,256 Q 374,259.2 376,256 Q 378,252.8 380,256 Q 382,259.2 384,256 Q 386,252.8 388,256 Q 390,259.2 392,256 Q 394,252.8 396,256 Q 398,259.2 400,256 " fill="none" stroke="black"/>
                <path d="M 416,256 L 480,256" fill="none" stroke="black"/>
                <path d="M 8,288 L 24,288" fill="none" stroke="black"/>
                <path d="M 40,288 L 56,288" fill="none" stroke="black"/>
                <path d="M 72,288 L 88,288" fill="none" stroke="black"/>
                <path d="M 104,288 L 120,288" fill="none" stroke="black"/>
                <path d="M 136,288 L 152,288" fill="none" stroke="black"/>
                <path d="M 168,288 L 184,288" fill="none" stroke="black"/>
                <path d="M 200,288 L 216,288" fill="none" stroke="black"/>
                <path d="M 232,288 L 248,288" fill="none" stroke="black"/>
                <path d="M 264,288 Q 266,284.8 268,288 Q 270,291.2 272,288 Q 274,284.8 276,288 Q 278,291.2 280,288 " fill="none" stroke="black"/>
                <path d="M 296,288 Q 298,284.8 300,288 Q 302,291.2 304,288 Q 306,284.8 308,288 Q 310,291.2 312,288 " fill="none" stroke="black"/>
                <path d="M 328,288 Q 330,284.8 332,288 Q 334,291.2 336,288 Q 338,284.8 340,288 Q 342,291.2 344,288 Q 346,284.8 348,288 Q 350,291.2 352,288 " fill="none" stroke="black"/>
                <path d="M 368,288 Q 370,284.8 372,288 Q 374,291.2 376,288 Q 378,284.8 380,288 Q 382,291.2 384,288 Q 386,284.8 388,288 Q 390,291.2 392,288 " fill="none" stroke="black"/>
                <path d="M 408,288 Q 410,284.8 412,288 Q 414,291.2 416,288 Q 418,284.8 420,288 Q 422,291.2 424,288 Q 426,284.8 428,288 Q 430,291.2 432,288 " fill="none" stroke="black"/>
                <path d="M 448,288 L 472,288" fill="none" stroke="black"/>
                <path d="M 8,320 L 24,320" fill="none" stroke="black"/>
                <path d="M 40,320 L 56,320" fill="none" stroke="black"/>
                <path d="M 72,320 L 88,320" fill="none" stroke="black"/>
                <path d="M 104,320 L 120,320" fill="none" stroke="black"/>
                <path d="M 136,320 L 152,320" fill="none" stroke="black"/>
                <path d="M 168,320 L 184,320" fill="none" stroke="black"/>
                <path d="M 200,320 L 216,320" fill="none" stroke="black"/>
                <path d="M 232,320 L 248,320" fill="none" stroke="black"/>
                <path d="M 264,320 Q 266,316.8 268,320 Q 270,323.2 272,320 Q 274,316.8 276,320 Q 278,323.2 280,320 " fill="none" stroke="black"/>
                <path d="M 296,320 Q 298,316.8 300,320 Q 302,323.2 304,320 Q 306,316.8 308,320 Q 310,323.2 312,320 " fill="none" stroke="black"/>
                <path d="M 328,320 Q 330,316.8 332,320 Q 334,323.2 336,320 Q 338,316.8 340,320 Q 342,323.2 344,320 Q 346,316.8 348,320 Q 350,323.2 352,320 " fill="none" stroke="black"/>
                <path d="M 368,320 Q 370,316.8 372,320 Q 374,323.2 376,320 Q 378,316.8 380,320 Q 382,323.2 384,320 Q 386,316.8 388,320 Q 390,323.2 392,320 " fill="none" stroke="black"/>
                <path d="M 408,320 Q 410,316.8 412,320 Q 414,323.2 416,320 Q 418,316.8 420,320 Q 422,323.2 424,320 Q 426,316.8 428,320 Q 430,323.2 432,320 " fill="none" stroke="black"/>
                <path d="M 448,320 L 472,320" fill="none" stroke="black"/>
                <g class="text">
                  <text x="248" y="52">[0,</text>
                  <text x="280" y="52">14)</text>
                  <text x="160" y="84">/</text>
                  <text x="352" y="84">\</text>
                  <text x="120" y="116">[0,</text>
                  <text x="148" y="116">8)</text>
                  <text x="368" y="116">[8,</text>
                  <text x="400" y="116">14)</text>
                  <text x="72" y="148">/</text>
                  <text x="192" y="148">\</text>
                  <text x="336" y="148">/</text>
                  <text x="56" y="180">[0,</text>
                  <text x="84" y="180">4)</text>
                  <text x="184" y="180">[4,</text>
                  <text x="212" y="180">8)</text>
                  <text x="312" y="180">[8,</text>
                  <text x="344" y="180">12)</text>
                  <text x="40" y="212">/</text>
                  <text x="96" y="212">\</text>
                  <text x="168" y="212">/</text>
                  <text x="224" y="212">\</text>
                  <text x="304" y="212">/</text>
                  <text x="360" y="212">\</text>
                  <text x="32" y="244">[0,2)</text>
                  <text x="96" y="244">[2,4)</text>
                  <text x="160" y="244">[4,6)</text>
                  <text x="224" y="244">[6,8)</text>
                  <text x="292" y="244">[8,10)</text>
                  <text x="368" y="244">[10,12)</text>
                  <text x="448" y="244">[12,14)</text>
                  <text x="24" y="276">/</text>
                  <text x="40" y="276">\</text>
                  <text x="88" y="276">/</text>
                  <text x="104" y="276">\</text>
                  <text x="152" y="276">/</text>
                  <text x="168" y="276">\</text>
                  <text x="216" y="276">/</text>
                  <text x="232" y="276">\</text>
                  <text x="280" y="276">/</text>
                  <text x="296" y="276">\</text>
                  <text x="352" y="276">/</text>
                  <text x="368" y="276">\</text>
                  <text x="432" y="276">/</text>
                  <text x="448" y="276">\</text>
                  <text x="16" y="308">0</text>
                  <text x="48" y="308">1</text>
                  <text x="80" y="308">2</text>
                  <text x="112" y="308">3</text>
                  <text x="144" y="308">4</text>
                  <text x="176" y="308">5</text>
                  <text x="208" y="308">6</text>
                  <text x="240" y="308">7</text>
                  <text x="272" y="308">8</text>
                  <text x="304" y="308">9</text>
                  <text x="340" y="308">10</text>
                  <text x="380" y="308">11</text>
                  <text x="420" y="308">12</text>
                  <text x="460" y="308">13</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                +-----------------------------+
                |            [0, 14)          |
                +-----------------------------+
                   /                       \
       +----------------+             +----------------+
       |     [0, 8)     |             |     [8, 14)    |
       +----------------+             +----------------+
        /              \                 /           |
   +--------+      +--------+      +~~~~~~~~~+       |
   | [0, 4) |      | [4, 8) |      | [8, 12) |       |
   +--------+      +--------+      +~~~~~~~~~+       |
    /      \        /      \         /      \        |
+-----+ +-----+ +-----+ +-----+ +~~~~~~+ +~~~~~~~+ +-------+
|[0,2)| |[2,4)| |[4,6)| |[6,8)| |[8,10)| |[10,12)| |[12,14)|
+-----+ +-----+ +-----+ +-----+ +~~~~~~+ +~~~~~~~+ +-------+
  / \     / \     / \     / \     / \      / \       / \
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +~+ +~+ +~~+ +~~+ +~~+ +--+
|0| |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| |11| |12| |13|
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +~+ +~+ +~~+ +~~+ +~~+ +--+
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="subtree-inclusion-proofs">
        <name>Subtree Inclusion Proofs</name>
        <t>Subtrees are Merkle Trees, so entries can be proven to be contained in the subtree. A subtree inclusion proof for entry <tt>index</tt> of the subtree <tt>[start, end)</tt> is a Merkle inclusion proof, as defined in <xref section="2.1.3.1" sectionFormat="of" target="RFC9162"/>, where <tt>m</tt> is <tt>index - start</tt> and the tree inputs are <tt>D[start:end]</tt>.</t>
        <t>Subtree inclusion proofs contain a sequence of nodes that are sufficient to reconstruct the subtree hash, <tt>MTH(D[start:end])</tt>, out of the hash for entry <tt>index</tt>, <tt>MTH({d[index]})</tt>, thus demonstrating that the subtree hash contains the entry's hash.</t>
        <section anchor="example-subtree-inclusion-proofs">
          <name>Example Subtree Inclusion Proofs</name>
          <t>The inclusion proof for entry 10 of subtree <tt>[8, 13)</tt> contains the hashes <tt>MTH({d[11]})</tt>, <tt>MTH(D[8:10])</tt>, and <tt>MTH({d[12]})</tt>, depicted in  <xref target="fig-subtree-inclusion-proof"/>. <tt>MTH({d[10]})</tt> is not part of the proof because the verifier is assumed to already know its value.</t>
          <figure anchor="fig-subtree-inclusion-proof">
            <name>An example subtree inclusion proof</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="200" viewBox="0 0 200 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                  <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                  <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                  <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                  <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                  <path d="M 56,32 L 56,64" fill="none" stroke="black"/>
                  <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                  <path d="M 64,160 L 64,192" fill="none" stroke="black"/>
                  <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                  <path d="M 80,160 L 80,192" fill="none" stroke="black"/>
                  <path d="M 96,224 L 96,256" fill="none" stroke="black"/>
                  <path d="M 112,96 L 112,128" fill="none" stroke="black"/>
                  <path d="M 112,224 L 112,256" fill="none" stroke="black"/>
                  <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                  <path d="M 144,160 L 144,192" fill="none" stroke="black"/>
                  <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                  <path d="M 168,72 L 168,208" fill="none" stroke="black"/>
                  <path d="M 176,224 L 176,256" fill="none" stroke="black"/>
                  <path d="M 192,32 L 192,64" fill="none" stroke="black"/>
                  <path d="M 56,32 L 192,32" fill="none" stroke="black"/>
                  <path d="M 56,64 L 192,64" fill="none" stroke="black"/>
                  <path d="M 32,96 L 112,96" fill="none" stroke="black"/>
                  <path d="M 32,128 L 112,128" fill="none" stroke="black"/>
                  <path d="M 8,158 L 64,158" fill="none" stroke="black"/>
                  <path d="M 8,162 L 64,162" fill="none" stroke="black"/>
                  <path d="M 80,160 L 144,160" fill="none" stroke="black"/>
                  <path d="M 8,190 L 64,190" fill="none" stroke="black"/>
                  <path d="M 8,194 L 64,194" fill="none" stroke="black"/>
                  <path d="M 80,192 L 144,192" fill="none" stroke="black"/>
                  <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                  <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                  <path d="M 72,224 Q 74,220.8 76,224 Q 78,227.2 80,224 Q 82,220.8 84,224 Q 86,227.2 88,224 Q 90,220.8 92,224 Q 94,227.2 96,224 " fill="none" stroke="black"/>
                  <path d="M 112,222 L 136,222" fill="none" stroke="black"/>
                  <path d="M 112,226 L 136,226" fill="none" stroke="black"/>
                  <path d="M 152,222 L 176,222" fill="none" stroke="black"/>
                  <path d="M 152,226 L 176,226" fill="none" stroke="black"/>
                  <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                  <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                  <path d="M 72,256 Q 74,252.8 76,256 Q 78,259.2 80,256 Q 82,252.8 84,256 Q 86,259.2 88,256 Q 90,252.8 92,256 Q 94,259.2 96,256 " fill="none" stroke="black"/>
                  <path d="M 112,254 L 136,254" fill="none" stroke="black"/>
                  <path d="M 112,258 L 136,258" fill="none" stroke="black"/>
                  <path d="M 152,254 L 176,254" fill="none" stroke="black"/>
                  <path d="M 152,258 L 176,258" fill="none" stroke="black"/>
                  <g class="text">
                    <text x="112" y="52">[8,</text>
                    <text x="144" y="52">13)</text>
                    <text x="80" y="84">/</text>
                    <text x="56" y="116">[8,</text>
                    <text x="88" y="116">12)</text>
                    <text x="48" y="148">/</text>
                    <text x="104" y="148">\</text>
                    <text x="36" y="180">[8,10)</text>
                    <text x="112" y="180">[10,12)</text>
                    <text x="24" y="212">/</text>
                    <text x="40" y="212">\</text>
                    <text x="96" y="212">/</text>
                    <text x="112" y="212">\</text>
                    <text x="16" y="244">8</text>
                    <text x="48" y="244">9</text>
                    <text x="84" y="244">10</text>
                    <text x="124" y="244">11</text>
                    <text x="164" y="244">12</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
      +----------------+
      |     [8, 13)    |
      +----------------+
         /          |
   +---------+      |
   | [8, 12) |      |
   +---------+      |
     /      \       |
+======+ +-------+  |
|[8,10)| |[10,12)|  |
+======+ +-------+  |
  / \      / \      |
+-+ +-+ +~~+ +==+ +==+
|8| |9| |10| |11| |12|
+-+ +-+ +~~+ +==+ +==+
]]></artwork>
            </artset>
          </figure>
        </section>
        <section anchor="evaluating-a-subtree-inclusion-proof">
          <name>Evaluating a Subtree Inclusion Proof</name>
          <t>Given a subtree inclusion proof, <tt>inclusion_proof</tt>, for entry <tt>index</tt>, with hash <tt>entry_hash</tt>, of a subtree <tt>[start, end)</tt>, the subtree inclusion proof can be <em>evaluated</em> to compute the expected subtree hash:</t>
          <!-- If changing this procedure, remember to update {{inclusion-proof-evaluation-explain}} -->

<ol spacing="normal" type="1"><li>
              <t>Check that <tt>[start, end)</tt> is a valid subtree (<xref target="definition-of-a-subtree"/>), and that <tt>start &lt;= index &lt; end</tt>. If either do not hold, fail proof evaluation.</t>
            </li>
            <li>
              <t>Set <tt>fn</tt> to <tt>index - start</tt> and <tt>sn</tt> to <tt>end - start - 1</tt>.</t>
            </li>
            <li>
              <t>Set <tt>r</tt> to <tt>entry_hash</tt>.</t>
            </li>
            <li>
              <t>For each value <tt>p</tt> in the <tt>inclusion_proof</tt> array:  </t>
              <ol spacing="normal" type="1"><li>
                  <t>If <tt>sn</tt> is 0, then stop the iteration and fail proof evaluation.</t>
                </li>
                <li>
                  <t>If <tt>LSB(fn)</tt> is set, or if <tt>fn</tt> is equal to <tt>sn</tt>, then:      </t>
                  <ol spacing="normal" type="1"><li>
                      <t>Set <tt>r</tt> to <tt>HASH(0x01 || p || r)</tt>.</t>
                    </li>
                    <li>
                      <t>Until <tt>LSB(fn)</tt> is set, right-shift <tt>fn</tt> and <tt>sn</tt> equally.</t>
                    </li>
                  </ol>
                  <t>
Otherwise:      </t>
                  <ol spacing="normal" type="1"><li>
                      <t>Set <tt>r</tt> to <tt>HASH(0x01 || r || p)</tt>.</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>Finally, right-shift both <tt>fn</tt> and <tt>sn</tt> one time.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>If <tt>sn</tt> is not zero, fail proof evaluation.</t>
            </li>
            <li>
              <t>Return <tt>r</tt> as the expected subtree hash.</t>
            </li>
          </ol>
          <t>This is the same as the procedure in <xref section="2.1.3.2" sectionFormat="of" target="RFC9162"/>, where <tt>leaf_index</tt> is <tt>index - start</tt>, <tt>tree_size</tt> is <tt>end - start</tt>, and <tt>r</tt> is returned instead of compared with <tt>root_hash</tt>.</t>
          <t><xref target="inclusion-proof-evaluation-explain"/> explains this procedure in more detail.</t>
        </section>
        <section anchor="verifying-a-subtree-inclusion-proof">
          <name>Verifying a Subtree Inclusion Proof</name>
          <t>Given a subtree inclusion proof, <tt>inclusion_proof</tt>, for entry <tt>index</tt>, with hash <tt>entry_hash</tt>, of a subtree <tt>[start, end)</tt> with hash <tt>subtree_hash</tt>, the subtree inclusion proof can be <em>verified</em> to verify the described entry is contained in the subtree:</t>
          <ol spacing="normal" type="1"><li>
              <t>Let <tt>expected_subtree_hash</tt> be the result of evaluating the inclusion proof as described <xref target="evaluating-a-subtree-inclusion-proof"/>. If evaluation fails, fail the proof verification.</t>
            </li>
            <li>
              <t>If <tt>subtree_hash</tt> is equal to <tt>expected_subtree_hash</tt>, the entry is contained in the subtree. Otherwise, fail the proof verification.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="subtree-consistency-proofs">
        <name>Subtree Consistency Proofs</name>
        <t>A subtree <tt>[start, end)</tt> can be efficiently proven to be consistent with the full Merkle Tree. That is, given <tt>MTH(D[start:end])</tt> and <tt>MTH(D_n)</tt>, the proof demonstrates that the input <tt>D[start:end]</tt> to the subtree hash was equal to the corresponding elements of the input <tt>D_n</tt> to the Merkle Tree hash.</t>
        <t>Subtree consistency proofs contain sufficient nodes to reconstruct both the subtree hash, <tt>MTH(D[start:end])</tt>, and the full tree hash, <tt>MTH(D_n)</tt>, in such a way that every input to the subtree hash was also incorporated into the full tree hash.</t>
        <section anchor="generating-a-subtree-consistency-proof">
          <name>Generating a Subtree Consistency Proof</name>
          <t>The subtree consistency proof, <tt>SUBTREE_PROOF(start, end, D_n)</tt> is defined similarly to <xref section="2.1.4.1" sectionFormat="of" target="RFC9162"/>, in terms of a helper function that tracks whether the subtree hash is known:</t>
          <sourcecode type="pseudocode"><![CDATA[
SUBTREE_PROOF(start, end, D_n) =
    SUBTREE_SUBPROOF(start, end, D_n, true)
]]></sourcecode>
          <t>If <tt>start = 0</tt> and <tt>end = n</tt>, the subtree is the root:</t>
          <sourcecode type="pseudocode"><![CDATA[
SUBTREE_SUBPROOF(0, n, D_n, true) = {}
SUBTREE_SUBPROOF(0, n, D_n, false) = {MTH(D_n)}
]]></sourcecode>
          <t>Otherwise, <tt>n &gt; 1</tt>. Let <tt>k</tt> be the largest power of two smaller than <tt>n</tt>. The consistency proof is defined recursively as:</t>
          <ul spacing="normal">
            <li>
              <t>If <tt>end &lt;= k</tt>, the subtree is on the left of <tt>k</tt>. The proof proves consistency with the left child and includes the right child:  </t>
              <sourcecode type="pseudocode"><![CDATA[
SUBTREE_SUBPROOF(start, end, D_n, b) =
    SUBTREE_SUBPROOF(start, end, D[0:k], b) : MTH(D[k:n])
]]></sourcecode>
            </li>
            <li>
              <t>If <tt>k &lt;= start</tt>, the subtree is on the right of <tt>k</tt>. The proof proves consistency with the right child and includes the left child.  </t>
              <sourcecode type="pseudocode"><![CDATA[
SUBTREE_SUBPROOF(start, end, D_n, b) =
    SUBTREE_SUBPROOF(start - k, end - k, D[k:n], b) : MTH(D[0:k])
]]></sourcecode>
            </li>
            <li>
              <t>Otherwise, <tt>start &lt; k &lt; end</tt>, which implies <tt>start = 0</tt>. The proof proves consistency with the right child and includes the left child.  </t>
              <sourcecode type="pseudocode"><![CDATA[
SUBTREE_SUBPROOF(0, end, D_n, b) =
    SUBTREE_SUBPROOF(0, end - k, D[k:n], false) : MTH(D[0:k])
]]></sourcecode>
            </li>
          </ul>
          <t>When <tt>start</tt> is zero, this computes a Merkle consistency proof:</t>
          <sourcecode type="pseudocode"><![CDATA[
SUBTREE_PROOF(0, end, D_n) = PROOF(end, D_n)
]]></sourcecode>
          <t>When <tt>end = start + 1</tt>, this computes a Merkle inclusion proof:</t>
          <sourcecode type="pseudocode"><![CDATA[
SUBTREE_PROOF(start, start + 1, D_n) = PATH(start, D_n)
]]></sourcecode>
          <t><xref target="consistency-proof-structure"/> explains the structure of a subtree consistency proof in more detail.</t>
        </section>
        <section anchor="example-subtree-consistency-proofs">
          <name>Example Subtree Consistency Proofs</name>
          <t>The subtree consistency proof for <tt>[4, 8)</tt> and a tree of size 14 contains <tt>MTH(D[0:4])</tt> and <tt>MTH(D[8:14])</tt>, depicted in <xref target="fig-subtree-consistency-example-1"/>. The verifier is assumed to know the subtree hash, so there is no need to include <tt>MTH(D[4:8])</tt> itself in the consistency proof.</t>
          <figure anchor="fig-subtree-consistency-example-1">
            <name>An example subtree consistency proof for a subtree that is directly contained in the full tree</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="528" width="488" viewBox="0 0 488 528" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,96 L 8,128" fill="none" stroke="black"/>
                  <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                  <path d="M 8,416 L 8,448" fill="none" stroke="black"/>
                  <path d="M 8,480 L 8,512" fill="none" stroke="black"/>
                  <path d="M 24,160 L 24,192" fill="none" stroke="black"/>
                  <path d="M 24,480 L 24,512" fill="none" stroke="black"/>
                  <path d="M 32,32 L 32,64" fill="none" stroke="black"/>
                  <path d="M 32,352 L 32,384" fill="none" stroke="black"/>
                  <path d="M 40,160 L 40,192" fill="none" stroke="black"/>
                  <path d="M 40,480 L 40,512" fill="none" stroke="black"/>
                  <path d="M 56,96 L 56,128" fill="none" stroke="black"/>
                  <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                  <path d="M 56,416 L 56,448" fill="none" stroke="black"/>
                  <path d="M 56,480 L 56,512" fill="none" stroke="black"/>
                  <path d="M 64,288 L 64,320" fill="none" stroke="black"/>
                  <path d="M 72,96 L 72,128" fill="none" stroke="black"/>
                  <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                  <path d="M 72,416 L 72,448" fill="none" stroke="black"/>
                  <path d="M 72,480 L 72,512" fill="none" stroke="black"/>
                  <path d="M 88,160 L 88,192" fill="none" stroke="black"/>
                  <path d="M 88,480 L 88,512" fill="none" stroke="black"/>
                  <path d="M 104,32 L 104,64" fill="none" stroke="black"/>
                  <path d="M 104,160 L 104,192" fill="none" stroke="black"/>
                  <path d="M 104,352 L 104,384" fill="none" stroke="black"/>
                  <path d="M 104,480 L 104,512" fill="none" stroke="black"/>
                  <path d="M 120,96 L 120,128" fill="none" stroke="black"/>
                  <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                  <path d="M 120,416 L 120,448" fill="none" stroke="black"/>
                  <path d="M 120,480 L 120,512" fill="none" stroke="black"/>
                  <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                  <path d="M 136,416 L 136,448" fill="none" stroke="black"/>
                  <path d="M 136,480 L 136,512" fill="none" stroke="black"/>
                  <path d="M 152,480 L 152,512" fill="none" stroke="black"/>
                  <path d="M 160,352 L 160,384" fill="none" stroke="black"/>
                  <path d="M 168,480 L 168,512" fill="none" stroke="black"/>
                  <path d="M 184,416 L 184,448" fill="none" stroke="black"/>
                  <path d="M 184,480 L 184,512" fill="none" stroke="black"/>
                  <path d="M 200,288 L 200,320" fill="none" stroke="black"/>
                  <path d="M 200,416 L 200,448" fill="none" stroke="black"/>
                  <path d="M 200,480 L 200,512" fill="none" stroke="black"/>
                  <path d="M 216,480 L 216,512" fill="none" stroke="black"/>
                  <path d="M 232,352 L 232,384" fill="none" stroke="black"/>
                  <path d="M 232,480 L 232,512" fill="none" stroke="black"/>
                  <path d="M 248,416 L 248,448" fill="none" stroke="black"/>
                  <path d="M 248,480 L 248,512" fill="none" stroke="black"/>
                  <path d="M 264,416 L 264,448" fill="none" stroke="black"/>
                  <path d="M 264,480 L 264,512" fill="none" stroke="black"/>
                  <path d="M 280,480 L 280,512" fill="none" stroke="black"/>
                  <path d="M 288,352 L 288,384" fill="none" stroke="black"/>
                  <path d="M 296,480 L 296,512" fill="none" stroke="black"/>
                  <path d="M 312,288 L 312,320" fill="none" stroke="black"/>
                  <path d="M 312,480 L 312,512" fill="none" stroke="black"/>
                  <path d="M 320,416 L 320,448" fill="none" stroke="black"/>
                  <path d="M 328,480 L 328,512" fill="none" stroke="black"/>
                  <path d="M 336,416 L 336,448" fill="none" stroke="black"/>
                  <path d="M 352,480 L 352,512" fill="none" stroke="black"/>
                  <path d="M 368,352 L 368,384" fill="none" stroke="black"/>
                  <path d="M 368,480 L 368,512" fill="none" stroke="black"/>
                  <path d="M 376,224 L 376,256" fill="none" stroke="black"/>
                  <path d="M 392,480 L 392,512" fill="none" stroke="black"/>
                  <path d="M 400,416 L 400,448" fill="none" stroke="black"/>
                  <path d="M 408,480 L 408,512" fill="none" stroke="black"/>
                  <path d="M 416,416 L 416,448" fill="none" stroke="black"/>
                  <path d="M 432,336 L 432,408" fill="none" stroke="black"/>
                  <path d="M 432,480 L 432,512" fill="none" stroke="black"/>
                  <path d="M 448,288 L 448,320" fill="none" stroke="black"/>
                  <path d="M 448,480 L 448,512" fill="none" stroke="black"/>
                  <path d="M 472,480 L 472,512" fill="none" stroke="black"/>
                  <path d="M 480,416 L 480,448" fill="none" stroke="black"/>
                  <path d="M 32,32 Q 34,28.8 36,32 Q 38,35.2 40,32 Q 42,28.8 44,32 Q 46,35.2 48,32 Q 50,28.8 52,32 Q 54,35.2 56,32 Q 58,28.8 60,32 Q 62,35.2 64,32 Q 66,28.8 68,32 Q 70,35.2 72,32 Q 74,28.8 76,32 Q 78,35.2 80,32 Q 82,28.8 84,32 Q 86,35.2 88,32 Q 90,28.8 92,32 Q 94,35.2 96,32 Q 98,28.8 100,32 Q 102,35.2 104,32 " fill="none" stroke="black"/>
                  <path d="M 32,64 Q 34,60.8 36,64 Q 38,67.2 40,64 Q 42,60.8 44,64 Q 46,67.2 48,64 Q 50,60.8 52,64 Q 54,67.2 56,64 Q 58,60.8 60,64 Q 62,67.2 64,64 Q 66,60.8 68,64 Q 70,67.2 72,64 Q 74,60.8 76,64 Q 78,67.2 80,64 Q 82,60.8 84,64 Q 86,67.2 88,64 Q 90,60.8 92,64 Q 94,67.2 96,64 Q 98,60.8 100,64 Q 102,67.2 104,64 " fill="none" stroke="black"/>
                  <path d="M 8,96 L 56,96" fill="none" stroke="black"/>
                  <path d="M 72,96 L 120,96" fill="none" stroke="black"/>
                  <path d="M 8,128 L 56,128" fill="none" stroke="black"/>
                  <path d="M 72,128 L 120,128" fill="none" stroke="black"/>
                  <path d="M 8,160 L 24,160" fill="none" stroke="black"/>
                  <path d="M 40,160 L 56,160" fill="none" stroke="black"/>
                  <path d="M 72,160 L 88,160" fill="none" stroke="black"/>
                  <path d="M 104,160 L 120,160" fill="none" stroke="black"/>
                  <path d="M 8,192 L 24,192" fill="none" stroke="black"/>
                  <path d="M 40,192 L 56,192" fill="none" stroke="black"/>
                  <path d="M 72,192 L 88,192" fill="none" stroke="black"/>
                  <path d="M 104,192 L 120,192" fill="none" stroke="black"/>
                  <path d="M 136,224 L 376,224" fill="none" stroke="black"/>
                  <path d="M 136,256 L 376,256" fill="none" stroke="black"/>
                  <path d="M 64,288 L 200,288" fill="none" stroke="black"/>
                  <path d="M 312,286 L 448,286" fill="none" stroke="black"/>
                  <path d="M 312,290 L 448,290" fill="none" stroke="black"/>
                  <path d="M 64,320 L 200,320" fill="none" stroke="black"/>
                  <path d="M 312,318 L 448,318" fill="none" stroke="black"/>
                  <path d="M 312,322 L 448,322" fill="none" stroke="black"/>
                  <path d="M 32,350 L 104,350" fill="none" stroke="black"/>
                  <path d="M 32,354 L 104,354" fill="none" stroke="black"/>
                  <path d="M 160,352 Q 162,348.8 164,352 Q 166,355.2 168,352 Q 170,348.8 172,352 Q 174,355.2 176,352 Q 178,348.8 180,352 Q 182,355.2 184,352 Q 186,348.8 188,352 Q 190,355.2 192,352 Q 194,348.8 196,352 Q 198,355.2 200,352 Q 202,348.8 204,352 Q 206,355.2 208,352 Q 210,348.8 212,352 Q 214,355.2 216,352 Q 218,348.8 220,352 Q 222,355.2 224,352 Q 226,348.8 228,352 Q 230,355.2 232,352 " fill="none" stroke="black"/>
                  <path d="M 288,352 L 368,352" fill="none" stroke="black"/>
                  <path d="M 32,382 L 104,382" fill="none" stroke="black"/>
                  <path d="M 32,386 L 104,386" fill="none" stroke="black"/>
                  <path d="M 160,384 Q 162,380.8 164,384 Q 166,387.2 168,384 Q 170,380.8 172,384 Q 174,387.2 176,384 Q 178,380.8 180,384 Q 182,387.2 184,384 Q 186,380.8 188,384 Q 190,387.2 192,384 Q 194,380.8 196,384 Q 198,387.2 200,384 Q 202,380.8 204,384 Q 206,387.2 208,384 Q 210,380.8 212,384 Q 214,387.2 216,384 Q 218,380.8 220,384 Q 222,387.2 224,384 Q 226,380.8 228,384 Q 230,387.2 232,384 " fill="none" stroke="black"/>
                  <path d="M 288,384 L 368,384" fill="none" stroke="black"/>
                  <path d="M 8,416 L 56,416" fill="none" stroke="black"/>
                  <path d="M 72,416 L 120,416" fill="none" stroke="black"/>
                  <path d="M 136,416 L 184,416" fill="none" stroke="black"/>
                  <path d="M 200,416 L 248,416" fill="none" stroke="black"/>
                  <path d="M 264,416 L 320,416" fill="none" stroke="black"/>
                  <path d="M 336,416 L 400,416" fill="none" stroke="black"/>
                  <path d="M 416,416 L 480,416" fill="none" stroke="black"/>
                  <path d="M 8,448 L 56,448" fill="none" stroke="black"/>
                  <path d="M 72,448 L 120,448" fill="none" stroke="black"/>
                  <path d="M 136,448 L 184,448" fill="none" stroke="black"/>
                  <path d="M 200,448 L 248,448" fill="none" stroke="black"/>
                  <path d="M 264,448 L 320,448" fill="none" stroke="black"/>
                  <path d="M 336,448 L 400,448" fill="none" stroke="black"/>
                  <path d="M 416,448 L 480,448" fill="none" stroke="black"/>
                  <path d="M 8,480 L 24,480" fill="none" stroke="black"/>
                  <path d="M 40,480 L 56,480" fill="none" stroke="black"/>
                  <path d="M 72,480 L 88,480" fill="none" stroke="black"/>
                  <path d="M 104,480 L 120,480" fill="none" stroke="black"/>
                  <path d="M 136,480 L 152,480" fill="none" stroke="black"/>
                  <path d="M 168,480 L 184,480" fill="none" stroke="black"/>
                  <path d="M 200,480 L 216,480" fill="none" stroke="black"/>
                  <path d="M 232,480 L 248,480" fill="none" stroke="black"/>
                  <path d="M 264,480 L 280,480" fill="none" stroke="black"/>
                  <path d="M 296,480 L 312,480" fill="none" stroke="black"/>
                  <path d="M 328,480 L 352,480" fill="none" stroke="black"/>
                  <path d="M 368,480 L 392,480" fill="none" stroke="black"/>
                  <path d="M 408,480 L 432,480" fill="none" stroke="black"/>
                  <path d="M 448,480 L 472,480" fill="none" stroke="black"/>
                  <path d="M 8,512 L 24,512" fill="none" stroke="black"/>
                  <path d="M 40,512 L 56,512" fill="none" stroke="black"/>
                  <path d="M 72,512 L 88,512" fill="none" stroke="black"/>
                  <path d="M 104,512 L 120,512" fill="none" stroke="black"/>
                  <path d="M 136,512 L 152,512" fill="none" stroke="black"/>
                  <path d="M 168,512 L 184,512" fill="none" stroke="black"/>
                  <path d="M 200,512 L 216,512" fill="none" stroke="black"/>
                  <path d="M 232,512 L 248,512" fill="none" stroke="black"/>
                  <path d="M 264,512 L 280,512" fill="none" stroke="black"/>
                  <path d="M 296,512 L 312,512" fill="none" stroke="black"/>
                  <path d="M 328,512 L 352,512" fill="none" stroke="black"/>
                  <path d="M 368,512 L 392,512" fill="none" stroke="black"/>
                  <path d="M 408,512 L 432,512" fill="none" stroke="black"/>
                  <path d="M 448,512 L 472,512" fill="none" stroke="black"/>
                  <g class="text">
                    <text x="56" y="52">[4,</text>
                    <text x="84" y="52">8)</text>
                    <text x="40" y="84">/</text>
                    <text x="96" y="84">\</text>
                    <text x="32" y="116">[4,6)</text>
                    <text x="96" y="116">[6,8)</text>
                    <text x="24" y="148">/</text>
                    <text x="40" y="148">\</text>
                    <text x="88" y="148">/</text>
                    <text x="104" y="148">\</text>
                    <text x="16" y="180">4</text>
                    <text x="48" y="180">5</text>
                    <text x="80" y="180">6</text>
                    <text x="112" y="180">7</text>
                    <text x="248" y="244">[0,</text>
                    <text x="280" y="244">14)</text>
                    <text x="160" y="276">/</text>
                    <text x="352" y="276">\</text>
                    <text x="120" y="308">[0,</text>
                    <text x="148" y="308">8)</text>
                    <text x="368" y="308">[8,</text>
                    <text x="400" y="308">14)</text>
                    <text x="72" y="340">/</text>
                    <text x="192" y="340">\</text>
                    <text x="336" y="340">/</text>
                    <text x="56" y="372">[0,</text>
                    <text x="84" y="372">4)</text>
                    <text x="184" y="372">[4,</text>
                    <text x="212" y="372">8)</text>
                    <text x="312" y="372">[8,</text>
                    <text x="344" y="372">12)</text>
                    <text x="40" y="404">/</text>
                    <text x="96" y="404">\</text>
                    <text x="168" y="404">/</text>
                    <text x="224" y="404">\</text>
                    <text x="304" y="404">/</text>
                    <text x="360" y="404">\</text>
                    <text x="32" y="436">[0,2)</text>
                    <text x="96" y="436">[2,4)</text>
                    <text x="160" y="436">[4,6)</text>
                    <text x="224" y="436">[6,8)</text>
                    <text x="292" y="436">[8,10)</text>
                    <text x="368" y="436">[10,12)</text>
                    <text x="448" y="436">[12,14)</text>
                    <text x="24" y="468">/</text>
                    <text x="40" y="468">\</text>
                    <text x="88" y="468">/</text>
                    <text x="104" y="468">\</text>
                    <text x="152" y="468">/</text>
                    <text x="168" y="468">\</text>
                    <text x="216" y="468">/</text>
                    <text x="232" y="468">\</text>
                    <text x="280" y="468">/</text>
                    <text x="296" y="468">\</text>
                    <text x="352" y="468">/</text>
                    <text x="368" y="468">\</text>
                    <text x="432" y="468">/</text>
                    <text x="448" y="468">\</text>
                    <text x="16" y="500">0</text>
                    <text x="48" y="500">1</text>
                    <text x="80" y="500">2</text>
                    <text x="112" y="500">3</text>
                    <text x="144" y="500">4</text>
                    <text x="176" y="500">5</text>
                    <text x="208" y="500">6</text>
                    <text x="240" y="500">7</text>
                    <text x="272" y="500">8</text>
                    <text x="304" y="500">9</text>
                    <text x="340" y="500">10</text>
                    <text x="380" y="500">11</text>
                    <text x="420" y="500">12</text>
                    <text x="460" y="500">13</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
   +~~~~~~~~+
   | [4, 8) |
   +~~~~~~~~+
    /      \
+-----+ +-----+
|[4,6)| |[6,8)|
+-----+ +-----+
  / \     / \
+-+ +-+ +-+ +-+
|4| |5| |6| |7|
+-+ +-+ +-+ +-+

                +-----------------------------+
                |            [0, 14)          |
                +-----------------------------+
                   /                       \
       +----------------+             +================+
       |     [0, 8)     |             |     [8, 14)    |
       +----------------+             +================+
        /              \                 /           |
   +========+      +~~~~~~~~+      +---------+       |
   | [0, 4) |      | [4, 8) |      | [8, 12) |       |
   +========+      +~~~~~~~~+      +---------+       |
    /      \        /      \         /      \        |
+-----+ +-----+ +-----+ +-----+ +------+ +-------+ +-------+
|[0,2)| |[2,4)| |[4,6)| |[6,8)| |[8,10)| |[10,12)| |[12,14)|
+-----+ +-----+ +-----+ +-----+ +------+ +-------+ +-------+
  / \     / \     / \     / \     / \      / \       / \
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +--+ +--+ +--+ +--+
|0| |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| |11| |12| |13|
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +--+ +--+ +--+ +--+
]]></artwork>
            </artset>
          </figure>
          <t>The subtree consistency proof for <tt>[8, 13)</tt> and a tree of size 14 contains <tt>MTH({d[12]})</tt>, <tt>MTH({d[13]})</tt>, <tt>MTH(D[8:12])</tt>, and <tt>MTH(D[0:8])</tt>, depicted in <xref target="fig-subtree-consistency-example-2"/>. <tt>[8, 13)</tt> is not directly contained in the tree, so the proof must include sufficient nodes to reconstruct both hashes.</t>
          <figure anchor="fig-subtree-consistency-example-2">
            <name>An example subtree consistency proof for a subtree that is not directly contained in the full tree</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="592" width="488" viewBox="0 0 488 592" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                  <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                  <path d="M 8,480 L 8,512" fill="none" stroke="black"/>
                  <path d="M 8,544 L 8,576" fill="none" stroke="black"/>
                  <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                  <path d="M 24,544 L 24,576" fill="none" stroke="black"/>
                  <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                  <path d="M 32,416 L 32,448" fill="none" stroke="black"/>
                  <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                  <path d="M 40,544 L 40,576" fill="none" stroke="black"/>
                  <path d="M 56,32 L 56,64" fill="none" stroke="black"/>
                  <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                  <path d="M 56,480 L 56,512" fill="none" stroke="black"/>
                  <path d="M 56,544 L 56,576" fill="none" stroke="black"/>
                  <path d="M 64,160 L 64,192" fill="none" stroke="black"/>
                  <path d="M 64,352 L 64,384" fill="none" stroke="black"/>
                  <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                  <path d="M 72,480 L 72,512" fill="none" stroke="black"/>
                  <path d="M 72,544 L 72,576" fill="none" stroke="black"/>
                  <path d="M 80,160 L 80,192" fill="none" stroke="black"/>
                  <path d="M 88,544 L 88,576" fill="none" stroke="black"/>
                  <path d="M 96,224 L 96,256" fill="none" stroke="black"/>
                  <path d="M 104,416 L 104,448" fill="none" stroke="black"/>
                  <path d="M 104,544 L 104,576" fill="none" stroke="black"/>
                  <path d="M 112,96 L 112,128" fill="none" stroke="black"/>
                  <path d="M 112,224 L 112,256" fill="none" stroke="black"/>
                  <path d="M 120,480 L 120,512" fill="none" stroke="black"/>
                  <path d="M 120,544 L 120,576" fill="none" stroke="black"/>
                  <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                  <path d="M 136,288 L 136,320" fill="none" stroke="black"/>
                  <path d="M 136,480 L 136,512" fill="none" stroke="black"/>
                  <path d="M 136,544 L 136,576" fill="none" stroke="black"/>
                  <path d="M 144,160 L 144,192" fill="none" stroke="black"/>
                  <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                  <path d="M 152,544 L 152,576" fill="none" stroke="black"/>
                  <path d="M 160,416 L 160,448" fill="none" stroke="black"/>
                  <path d="M 168,72 L 168,208" fill="none" stroke="black"/>
                  <path d="M 168,544 L 168,576" fill="none" stroke="black"/>
                  <path d="M 176,224 L 176,256" fill="none" stroke="black"/>
                  <path d="M 184,480 L 184,512" fill="none" stroke="black"/>
                  <path d="M 184,544 L 184,576" fill="none" stroke="black"/>
                  <path d="M 192,32 L 192,64" fill="none" stroke="black"/>
                  <path d="M 200,352 L 200,384" fill="none" stroke="black"/>
                  <path d="M 200,480 L 200,512" fill="none" stroke="black"/>
                  <path d="M 200,544 L 200,576" fill="none" stroke="black"/>
                  <path d="M 216,544 L 216,576" fill="none" stroke="black"/>
                  <path d="M 232,416 L 232,448" fill="none" stroke="black"/>
                  <path d="M 232,544 L 232,576" fill="none" stroke="black"/>
                  <path d="M 248,480 L 248,512" fill="none" stroke="black"/>
                  <path d="M 248,544 L 248,576" fill="none" stroke="black"/>
                  <path d="M 264,480 L 264,512" fill="none" stroke="black"/>
                  <path d="M 264,544 L 264,576" fill="none" stroke="black"/>
                  <path d="M 280,544 L 280,576" fill="none" stroke="black"/>
                  <path d="M 288,416 L 288,448" fill="none" stroke="black"/>
                  <path d="M 296,544 L 296,576" fill="none" stroke="black"/>
                  <path d="M 312,352 L 312,384" fill="none" stroke="black"/>
                  <path d="M 312,544 L 312,576" fill="none" stroke="black"/>
                  <path d="M 320,480 L 320,512" fill="none" stroke="black"/>
                  <path d="M 328,544 L 328,576" fill="none" stroke="black"/>
                  <path d="M 336,480 L 336,512" fill="none" stroke="black"/>
                  <path d="M 352,544 L 352,576" fill="none" stroke="black"/>
                  <path d="M 368,416 L 368,448" fill="none" stroke="black"/>
                  <path d="M 368,544 L 368,576" fill="none" stroke="black"/>
                  <path d="M 376,288 L 376,320" fill="none" stroke="black"/>
                  <path d="M 392,544 L 392,576" fill="none" stroke="black"/>
                  <path d="M 400,480 L 400,512" fill="none" stroke="black"/>
                  <path d="M 408,544 L 408,576" fill="none" stroke="black"/>
                  <path d="M 416,480 L 416,512" fill="none" stroke="black"/>
                  <path d="M 432,392 L 432,472" fill="none" stroke="black"/>
                  <path d="M 432,544 L 432,576" fill="none" stroke="black"/>
                  <path d="M 448,352 L 448,384" fill="none" stroke="black"/>
                  <path d="M 448,544 L 448,576" fill="none" stroke="black"/>
                  <path d="M 472,544 L 472,576" fill="none" stroke="black"/>
                  <path d="M 480,480 L 480,512" fill="none" stroke="black"/>
                  <path d="M 56,32 L 192,32" fill="none" stroke="black"/>
                  <path d="M 56,64 L 192,64" fill="none" stroke="black"/>
                  <path d="M 32,94 L 112,94" fill="none" stroke="black"/>
                  <path d="M 32,98 L 112,98" fill="none" stroke="black"/>
                  <path d="M 32,126 L 112,126" fill="none" stroke="black"/>
                  <path d="M 32,130 L 112,130" fill="none" stroke="black"/>
                  <path d="M 8,160 L 64,160" fill="none" stroke="black"/>
                  <path d="M 80,160 L 144,160" fill="none" stroke="black"/>
                  <path d="M 8,192 L 64,192" fill="none" stroke="black"/>
                  <path d="M 80,192 L 144,192" fill="none" stroke="black"/>
                  <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                  <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                  <path d="M 72,224 L 96,224" fill="none" stroke="black"/>
                  <path d="M 112,224 L 136,224" fill="none" stroke="black"/>
                  <path d="M 152,222 L 176,222" fill="none" stroke="black"/>
                  <path d="M 152,226 L 176,226" fill="none" stroke="black"/>
                  <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                  <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                  <path d="M 72,256 L 96,256" fill="none" stroke="black"/>
                  <path d="M 112,256 L 136,256" fill="none" stroke="black"/>
                  <path d="M 152,254 L 176,254" fill="none" stroke="black"/>
                  <path d="M 152,258 L 176,258" fill="none" stroke="black"/>
                  <path d="M 136,288 L 376,288" fill="none" stroke="black"/>
                  <path d="M 136,320 L 376,320" fill="none" stroke="black"/>
                  <path d="M 64,350 L 200,350" fill="none" stroke="black"/>
                  <path d="M 64,354 L 200,354" fill="none" stroke="black"/>
                  <path d="M 312,352 L 448,352" fill="none" stroke="black"/>
                  <path d="M 64,382 L 200,382" fill="none" stroke="black"/>
                  <path d="M 64,386 L 200,386" fill="none" stroke="black"/>
                  <path d="M 312,384 L 448,384" fill="none" stroke="black"/>
                  <path d="M 32,416 L 104,416" fill="none" stroke="black"/>
                  <path d="M 160,416 L 232,416" fill="none" stroke="black"/>
                  <path d="M 288,414 L 368,414" fill="none" stroke="black"/>
                  <path d="M 288,418 L 368,418" fill="none" stroke="black"/>
                  <path d="M 32,448 L 104,448" fill="none" stroke="black"/>
                  <path d="M 160,448 L 232,448" fill="none" stroke="black"/>
                  <path d="M 288,446 L 368,446" fill="none" stroke="black"/>
                  <path d="M 288,450 L 368,450" fill="none" stroke="black"/>
                  <path d="M 8,480 L 56,480" fill="none" stroke="black"/>
                  <path d="M 72,480 L 120,480" fill="none" stroke="black"/>
                  <path d="M 136,480 L 184,480" fill="none" stroke="black"/>
                  <path d="M 200,480 L 248,480" fill="none" stroke="black"/>
                  <path d="M 264,480 L 320,480" fill="none" stroke="black"/>
                  <path d="M 336,480 L 400,480" fill="none" stroke="black"/>
                  <path d="M 416,480 L 480,480" fill="none" stroke="black"/>
                  <path d="M 8,512 L 56,512" fill="none" stroke="black"/>
                  <path d="M 72,512 L 120,512" fill="none" stroke="black"/>
                  <path d="M 136,512 L 184,512" fill="none" stroke="black"/>
                  <path d="M 200,512 L 248,512" fill="none" stroke="black"/>
                  <path d="M 264,512 L 320,512" fill="none" stroke="black"/>
                  <path d="M 336,512 L 400,512" fill="none" stroke="black"/>
                  <path d="M 416,512 L 480,512" fill="none" stroke="black"/>
                  <path d="M 8,544 L 24,544" fill="none" stroke="black"/>
                  <path d="M 40,544 L 56,544" fill="none" stroke="black"/>
                  <path d="M 72,544 L 88,544" fill="none" stroke="black"/>
                  <path d="M 104,544 L 120,544" fill="none" stroke="black"/>
                  <path d="M 136,544 L 152,544" fill="none" stroke="black"/>
                  <path d="M 168,544 L 184,544" fill="none" stroke="black"/>
                  <path d="M 200,544 L 216,544" fill="none" stroke="black"/>
                  <path d="M 232,544 L 248,544" fill="none" stroke="black"/>
                  <path d="M 264,544 L 280,544" fill="none" stroke="black"/>
                  <path d="M 296,544 L 312,544" fill="none" stroke="black"/>
                  <path d="M 328,544 L 352,544" fill="none" stroke="black"/>
                  <path d="M 368,544 L 392,544" fill="none" stroke="black"/>
                  <path d="M 408,542 L 432,542" fill="none" stroke="black"/>
                  <path d="M 408,546 L 432,546" fill="none" stroke="black"/>
                  <path d="M 448,542 L 472,542" fill="none" stroke="black"/>
                  <path d="M 448,546 L 472,546" fill="none" stroke="black"/>
                  <path d="M 8,576 L 24,576" fill="none" stroke="black"/>
                  <path d="M 40,576 L 56,576" fill="none" stroke="black"/>
                  <path d="M 72,576 L 88,576" fill="none" stroke="black"/>
                  <path d="M 104,576 L 120,576" fill="none" stroke="black"/>
                  <path d="M 136,576 L 152,576" fill="none" stroke="black"/>
                  <path d="M 168,576 L 184,576" fill="none" stroke="black"/>
                  <path d="M 200,576 L 216,576" fill="none" stroke="black"/>
                  <path d="M 232,576 L 248,576" fill="none" stroke="black"/>
                  <path d="M 264,576 L 280,576" fill="none" stroke="black"/>
                  <path d="M 296,576 L 312,576" fill="none" stroke="black"/>
                  <path d="M 328,576 L 352,576" fill="none" stroke="black"/>
                  <path d="M 368,576 L 392,576" fill="none" stroke="black"/>
                  <path d="M 408,574 L 432,574" fill="none" stroke="black"/>
                  <path d="M 408,578 L 432,578" fill="none" stroke="black"/>
                  <path d="M 448,574 L 472,574" fill="none" stroke="black"/>
                  <path d="M 448,578 L 472,578" fill="none" stroke="black"/>
                  <g class="text">
                    <text x="112" y="52">[8,</text>
                    <text x="144" y="52">13)</text>
                    <text x="80" y="84">/</text>
                    <text x="56" y="116">[8,</text>
                    <text x="88" y="116">12)</text>
                    <text x="48" y="148">/</text>
                    <text x="104" y="148">\</text>
                    <text x="36" y="180">[8,10)</text>
                    <text x="112" y="180">[10,12)</text>
                    <text x="24" y="212">/</text>
                    <text x="40" y="212">\</text>
                    <text x="96" y="212">/</text>
                    <text x="112" y="212">\</text>
                    <text x="16" y="244">8</text>
                    <text x="48" y="244">9</text>
                    <text x="84" y="244">10</text>
                    <text x="124" y="244">11</text>
                    <text x="164" y="244">12</text>
                    <text x="248" y="308">[0,</text>
                    <text x="280" y="308">14)</text>
                    <text x="160" y="340">/</text>
                    <text x="352" y="340">\</text>
                    <text x="120" y="372">[0,</text>
                    <text x="148" y="372">8)</text>
                    <text x="368" y="372">[8,</text>
                    <text x="400" y="372">14)</text>
                    <text x="72" y="404">/</text>
                    <text x="192" y="404">\</text>
                    <text x="336" y="404">/</text>
                    <text x="56" y="436">[0,</text>
                    <text x="84" y="436">4)</text>
                    <text x="184" y="436">[4,</text>
                    <text x="212" y="436">8)</text>
                    <text x="312" y="436">[8,</text>
                    <text x="344" y="436">12)</text>
                    <text x="40" y="468">/</text>
                    <text x="96" y="468">\</text>
                    <text x="168" y="468">/</text>
                    <text x="224" y="468">\</text>
                    <text x="304" y="468">/</text>
                    <text x="360" y="468">\</text>
                    <text x="32" y="500">[0,2)</text>
                    <text x="96" y="500">[2,4)</text>
                    <text x="160" y="500">[4,6)</text>
                    <text x="224" y="500">[6,8)</text>
                    <text x="292" y="500">[8,10)</text>
                    <text x="368" y="500">[10,12)</text>
                    <text x="448" y="500">[12,14)</text>
                    <text x="24" y="532">/</text>
                    <text x="40" y="532">\</text>
                    <text x="88" y="532">/</text>
                    <text x="104" y="532">\</text>
                    <text x="152" y="532">/</text>
                    <text x="168" y="532">\</text>
                    <text x="216" y="532">/</text>
                    <text x="232" y="532">\</text>
                    <text x="280" y="532">/</text>
                    <text x="296" y="532">\</text>
                    <text x="352" y="532">/</text>
                    <text x="368" y="532">\</text>
                    <text x="432" y="532">/</text>
                    <text x="448" y="532">\</text>
                    <text x="16" y="564">0</text>
                    <text x="48" y="564">1</text>
                    <text x="80" y="564">2</text>
                    <text x="112" y="564">3</text>
                    <text x="144" y="564">4</text>
                    <text x="176" y="564">5</text>
                    <text x="208" y="564">6</text>
                    <text x="240" y="564">7</text>
                    <text x="272" y="564">8</text>
                    <text x="304" y="564">9</text>
                    <text x="340" y="564">10</text>
                    <text x="380" y="564">11</text>
                    <text x="420" y="564">12</text>
                    <text x="460" y="564">13</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
      +----------------+
      |     [8, 13)    |
      +----------------+
         /          |
   +=========+      |
   | [8, 12) |      |
   +=========+      |
     /      \       |
+------+ +-------+  |
|[8,10)| |[10,12)|  |
+------+ +-------+  |
  / \      / \      |
+-+ +-+ +--+ +--+ +==+
|8| |9| |10| |11| |12|
+-+ +-+ +--+ +--+ +==+

                +-----------------------------+
                |            [0, 14)          |
                +-----------------------------+
                   /                       \
       +================+             +----------------+
       |     [0, 8)     |             |     [8, 14)    |
       +================+             +----------------+
        /              \                 /           |
   +--------+      +--------+      +=========+       |
   | [0, 4) |      | [4, 8) |      | [8, 12) |       |
   +--------+      +--------+      +=========+       |
    /      \        /      \         /      \        |
+-----+ +-----+ +-----+ +-----+ +------+ +-------+ +-------+
|[0,2)| |[2,4)| |[4,6)| |[6,8)| |[8,10)| |[10,12)| |[12,14)|
+-----+ +-----+ +-----+ +-----+ +------+ +-------+ +-------+
  / \     / \     / \     / \     / \      / \       / \
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +--+ +--+ +==+ +==+
|0| |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| |11| |12| |13|
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +--+ +--+ +==+ +==+
]]></artwork>
            </artset>
          </figure>
        </section>
        <section anchor="verifying-a-subtree-consistency-proof">
          <name>Verifying a Subtree Consistency Proof</name>
          <t>The following procedure can be used to verify a subtree consistency proof.</t>
          <t>Given a Merkle Tree over <tt>n</tt> elements, a subtree defined by <tt>[start, end)</tt>, a consistency proof <tt>proof</tt>, a subtree hash <tt>node_hash</tt>, and a root hash <tt>root_hash</tt>:</t>
          <!-- If changing this procedure, remember to update {{consistency-proof-verification-explain}} -->

<ol spacing="normal" type="1"><li>
              <t>Check that <tt>[start, end)</tt> is a valid subtree (<xref target="definition-of-a-subtree"/>), and that <tt>end &lt;= n</tt>. If either do not hold, fail proof verification. These checks imply <tt>0 &lt;= start &lt; end &lt;= n</tt>.</t>
            </li>
            <li>
              <t>Set <tt>fn</tt> to <tt>start</tt>, <tt>sn</tt> to <tt>end - 1</tt>, and <tt>tn</tt> to <tt>n - 1</tt>.</t>
            </li>
            <li>
              <t>If <tt>sn</tt> is <tt>tn</tt>, then:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>Until <tt>fn</tt> is <tt>sn</tt>, right-shift <tt>fn</tt>, <tt>sn</tt>, and <tt>tn</tt> equally.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>Otherwise:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>Until <tt>fn</tt> is <tt>sn</tt> or <tt>LSB(sn)</tt> is not set, right-shift <tt>fn</tt>, <tt>sn</tt>, and <tt>tn</tt> equally.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>If <tt>fn</tt> is <tt>sn</tt>, set <tt>fr</tt> and <tt>sr</tt> to <tt>node_hash</tt>.</t>
            </li>
            <li>
              <t>Otherwise:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>If <tt>proof</tt> is an empty array, stop and fail verification.</t>
                </li>
                <li>
                  <t>Remove the first value of the <tt>proof</tt> array and set <tt>fr</tt> and <tt>sr</tt> to the removed value.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>For each value <tt>c</tt> in the <tt>proof</tt> array:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>If <tt>tn</tt> is <tt>0</tt>, then stop the iteration and fail the proof verification.</t>
                </li>
                <li>
                  <t>If <tt>LSB(sn)</tt> is set, or if <tt>sn</tt> is equal to <tt>tn</tt>, then:
                  </t>
                  <ol spacing="normal" type="1"><li>
                      <t>If <tt>fn &lt; sn</tt>, set <tt>fr</tt> to <tt>HASH(0x01 || c || fr)</tt>.</t>
                    </li>
                    <li>
                      <t>Set <tt>sr</tt> to <tt>HASH(0x01 || c || sr)</tt>.</t>
                    </li>
                    <li>
                      <t>Until <tt>LSB(sn)</tt> is set, right-shift <tt>fn</tt>, <tt>sn</tt>, and <tt>tn</tt> equally.</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>Otherwise:
                  </t>
                  <ol spacing="normal" type="1"><li>
                      <t>Set <tt>sr</tt> to <tt>HASH(0x01 || sr || c)</tt>.</t>
                    </li>
                  </ol>
                </li>
                <li>
                  <t>Right-shift <tt>fn</tt>, <tt>sn</tt>, and <tt>tn</tt> once more.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>Compare <tt>tn</tt> to <tt>0</tt>, <tt>fr</tt> to <tt>node_hash</tt>, and <tt>sr</tt> to <tt>root_hash</tt>. If any are not equal, fail the proof verification. If all are equal, accept the proof.</t>
            </li>
          </ol>
          <t><xref target="consistency-proof-verification-explain"/> explains this procedure in more detail.</t>
        </section>
      </section>
      <section anchor="arbitrary-intervals">
        <name>Arbitrary Intervals</name>
        <t>Not all <tt>[start, end)</tt> intervals of a Merkle Tree are valid subtrees. This section describes how, for any <tt>start &lt; end</tt>, to determine up to two subtrees that efficiently cover the interval. The subtrees are determined by the following procedure:</t>
        <ol spacing="normal" type="1"><li>
            <t>If <tt>end - start</tt> is one, return a single subtree, <tt>[start, end)</tt>.</t>
          </li>
          <li>
            <t>Otherwise, run the following to return a pair of subtrees:  </t>
            <ol spacing="normal" type="1"><li>
                <t>Let <tt>last</tt> be <tt>end - 1</tt>, the last index in <tt>[start, end)</tt>.</t>
              </li>
              <li>
                <t>Let <tt>split</tt> be the bit index of the most significant bit where <tt>start</tt> and <tt>last</tt> differ. Bits are numbered from the least significant bit, starting at zero. <tt>split</tt> is the height at which <tt>start</tt> and <tt>last</tt>'s paths in the tree diverge.</t>
              </li>
              <li>
                <t>Let <tt>mid</tt> be <tt>last</tt> with the least significant <tt>split</tt> bits set to zero. <tt>mid</tt> is the leftmost leaf node in the above divergence point's right branch.</t>
              </li>
              <li>
                <t>Within the least significant <tt>split</tt> bits of <tt>left</tt>, let <tt>b</tt> be the bit index of the most significant bit with value zero, if any:      </t>
                <ol spacing="normal" type="1"><li>
                    <t>If there is such a bit, let <tt>left_split</tt> be <tt>b + 1</tt>.</t>
                  </li>
                  <li>
                    <t>Otherwise, let <tt>left_split</tt> be zero.</t>
                  </li>
                </ol>
                <t>
<tt>left_split</tt> is the height of the lowest common ancestor of the nodes in <tt>[start, mid)</tt>.</t>
              </li>
              <li>
                <t>Let <tt>left_start</tt> be <tt>start</tt> with the least significant <tt>left_split</tt> bits set to zero. <tt>left_start</tt> is the above lowest common ancestor's leftmost leaf node.</t>
              </li>
              <li>
                <t>Return the subtrees <tt>[left_start, mid)</tt> and <tt>[mid, end)</tt>.</t>
              </li>
            </ol>
          </li>
        </ol>
        <t>When the procedure returns a single subtree, the subtree is <tt>[start, start+1)</tt>. When it returns two subtrees, <tt>left</tt> and <tt>right</tt>, the subtrees satisfy the following properties:</t>
        <ul spacing="normal">
          <li>
            <t><tt>left.end = right.start</tt>. That is, the two subtrees cover adjacent intervals.</t>
          </li>
          <li>
            <t><tt>left.start &lt;= start</tt> and <tt>end = right.end</tt>. That is, the two subtrees together cover the entire target interval, possibly with some extra entries before <tt>start</tt> left, but not after <tt>end</tt>.</t>
          </li>
          <li>
            <t><tt>left.end - left.start &lt; 2 * (end - start)</tt> and <tt>right.end - right.start &lt;= end - start</tt>. That is, the two subtrees efficiently cover the interval.</t>
          </li>
          <li>
            <t><tt>left</tt> is full, while <tt>right</tt> may be partial.</t>
          </li>
        </ul>
        <t>The following Python code implements this procedure:</t>
        <sourcecode type="python"><![CDATA[
def find_subtrees(start, end):
    """ Returns a list of one or two subtrees that efficiently
    cover [start, end). """
    assert start < end
    if end - start == 1:
        return [(start, end),]
    last = end - 1
    # Find where start and last's tree paths diverge. The two
    # subtrees will be on either side of the split.
    split = (start ^ last).bit_length() - 1
    mask = (1 << split) - 1
    mid = last & ~mask
    # Maximize the left endpoint. This is just before start's
    # path leaves the right edge of its new subtree.
    left_split = (~start & mask).bit_length()
    left_start = start & ~((1 << left_split) - 1)
    return [(left_start, mid), (mid, end)]
]]></sourcecode>
        <t><xref target="fig-subtree-pair-example"/> shows the subtrees which cover <tt>[5, 13)</tt> in a Merkle Tree of 13 elements. The two subtrees selected are <tt>[4, 8)</tt> and <tt>[8, 13)</tt>. Note that the subtrees cover a slightly larger interval than <tt>[5, 13)</tt>.</t>
        <!-- Ideally we'd use the Unicode box-drawing characters for the text form, but aasvg doesn't support them: https://github.com/martinthomson/aasvg/issues/9 -->

<figure anchor="fig-subtree-pair-example">
          <name>An example selection of subtrees to cover an interval</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="456" viewBox="0 0 456 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 8,288 L 8,320" fill="none" stroke="black"/>
                <path d="M 24,288 L 24,320" fill="none" stroke="black"/>
                <path d="M 32,160 L 32,192" fill="none" stroke="black"/>
                <path d="M 40,288 L 40,320" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 56,288 L 56,320" fill="none" stroke="black"/>
                <path d="M 64,96 L 64,128" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 72,288 L 72,320" fill="none" stroke="black"/>
                <path d="M 88,288 L 88,320" fill="none" stroke="black"/>
                <path d="M 104,160 L 104,192" fill="none" stroke="black"/>
                <path d="M 104,288 L 104,320" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 120,288 L 120,320" fill="none" stroke="black"/>
                <path d="M 136,32 L 136,64" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 136,288 L 136,320" fill="none" stroke="black"/>
                <path d="M 152,288 L 152,320" fill="none" stroke="black"/>
                <path d="M 160,160 L 160,192" fill="none" stroke="black"/>
                <path d="M 168,288 L 168,320" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 184,288 L 184,320" fill="none" stroke="black"/>
                <path d="M 200,96 L 200,128" fill="none" stroke="black"/>
                <path d="M 200,224 L 200,256" fill="none" stroke="black"/>
                <path d="M 200,288 L 200,320" fill="none" stroke="black"/>
                <path d="M 216,288 L 216,320" fill="none" stroke="black"/>
                <path d="M 232,160 L 232,192" fill="none" stroke="black"/>
                <path d="M 232,288 L 232,320" fill="none" stroke="black"/>
                <path d="M 248,224 L 248,256" fill="none" stroke="black"/>
                <path d="M 248,288 L 248,320" fill="none" stroke="black"/>
                <path d="M 264,224 L 264,256" fill="none" stroke="black"/>
                <path d="M 264,288 L 264,320" fill="none" stroke="black"/>
                <path d="M 280,288 L 280,320" fill="none" stroke="black"/>
                <path d="M 288,160 L 288,192" fill="none" stroke="black"/>
                <path d="M 296,288 L 296,320" fill="none" stroke="black"/>
                <path d="M 312,96 L 312,128" fill="none" stroke="black"/>
                <path d="M 312,288 L 312,320" fill="none" stroke="black"/>
                <path d="M 320,224 L 320,256" fill="none" stroke="black"/>
                <path d="M 328,288 L 328,320" fill="none" stroke="black"/>
                <path d="M 336,224 L 336,256" fill="none" stroke="black"/>
                <path d="M 352,288 L 352,320" fill="none" stroke="black"/>
                <path d="M 368,160 L 368,192" fill="none" stroke="black"/>
                <path d="M 368,288 L 368,320" fill="none" stroke="black"/>
                <path d="M 376,32 L 376,64" fill="none" stroke="black"/>
                <path d="M 392,288 L 392,320" fill="none" stroke="black"/>
                <path d="M 400,224 L 400,256" fill="none" stroke="black"/>
                <path d="M 408,288 L 408,320" fill="none" stroke="black"/>
                <path d="M 424,144 L 424,272" fill="none" stroke="black"/>
                <path d="M 432,288 L 432,320" fill="none" stroke="black"/>
                <path d="M 448,96 L 448,128" fill="none" stroke="black"/>
                <path d="M 136,32 L 376,32" fill="none" stroke="black"/>
                <path d="M 136,64 L 376,64" fill="none" stroke="black"/>
                <path d="M 64,96 L 200,96" fill="none" stroke="black"/>
                <path d="M 312,94 L 448,94" fill="none" stroke="black"/>
                <path d="M 312,98 L 448,98" fill="none" stroke="black"/>
                <path d="M 64,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 312,126 L 448,126" fill="none" stroke="black"/>
                <path d="M 312,130 L 448,130" fill="none" stroke="black"/>
                <path d="M 32,160 L 104,160" fill="none" stroke="black"/>
                <path d="M 160,158 L 232,158" fill="none" stroke="black"/>
                <path d="M 160,162 L 232,162" fill="none" stroke="black"/>
                <path d="M 288,160 L 368,160" fill="none" stroke="black"/>
                <path d="M 32,192 L 104,192" fill="none" stroke="black"/>
                <path d="M 160,190 L 232,190" fill="none" stroke="black"/>
                <path d="M 160,194 L 232,194" fill="none" stroke="black"/>
                <path d="M 288,192 L 368,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 200,224 L 248,224" fill="none" stroke="black"/>
                <path d="M 264,224 L 320,224" fill="none" stroke="black"/>
                <path d="M 336,224 L 400,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 184,256" fill="none" stroke="black"/>
                <path d="M 200,256 L 248,256" fill="none" stroke="black"/>
                <path d="M 264,256 L 320,256" fill="none" stroke="black"/>
                <path d="M 336,256 L 400,256" fill="none" stroke="black"/>
                <path d="M 8,288 L 24,288" fill="none" stroke="black"/>
                <path d="M 40,288 L 56,288" fill="none" stroke="black"/>
                <path d="M 72,288 L 88,288" fill="none" stroke="black"/>
                <path d="M 104,288 L 120,288" fill="none" stroke="black"/>
                <path d="M 136,288 L 152,288" fill="none" stroke="black"/>
                <path d="M 168,286 L 184,286" fill="none" stroke="black"/>
                <path d="M 168,290 L 184,290" fill="none" stroke="black"/>
                <path d="M 200,286 L 216,286" fill="none" stroke="black"/>
                <path d="M 200,290 L 216,290" fill="none" stroke="black"/>
                <path d="M 232,286 L 248,286" fill="none" stroke="black"/>
                <path d="M 232,290 L 248,290" fill="none" stroke="black"/>
                <path d="M 264,286 L 280,286" fill="none" stroke="black"/>
                <path d="M 264,290 L 280,290" fill="none" stroke="black"/>
                <path d="M 296,286 L 312,286" fill="none" stroke="black"/>
                <path d="M 296,290 L 312,290" fill="none" stroke="black"/>
                <path d="M 328,286 L 352,286" fill="none" stroke="black"/>
                <path d="M 328,290 L 352,290" fill="none" stroke="black"/>
                <path d="M 368,286 L 392,286" fill="none" stroke="black"/>
                <path d="M 368,290 L 392,290" fill="none" stroke="black"/>
                <path d="M 408,286 L 432,286" fill="none" stroke="black"/>
                <path d="M 408,290 L 432,290" fill="none" stroke="black"/>
                <path d="M 8,320 L 24,320" fill="none" stroke="black"/>
                <path d="M 40,320 L 56,320" fill="none" stroke="black"/>
                <path d="M 72,320 L 88,320" fill="none" stroke="black"/>
                <path d="M 104,320 L 120,320" fill="none" stroke="black"/>
                <path d="M 136,320 L 152,320" fill="none" stroke="black"/>
                <path d="M 168,318 L 184,318" fill="none" stroke="black"/>
                <path d="M 168,322 L 184,322" fill="none" stroke="black"/>
                <path d="M 200,318 L 216,318" fill="none" stroke="black"/>
                <path d="M 200,322 L 216,322" fill="none" stroke="black"/>
                <path d="M 232,318 L 248,318" fill="none" stroke="black"/>
                <path d="M 232,322 L 248,322" fill="none" stroke="black"/>
                <path d="M 264,318 L 280,318" fill="none" stroke="black"/>
                <path d="M 264,322 L 280,322" fill="none" stroke="black"/>
                <path d="M 296,318 L 312,318" fill="none" stroke="black"/>
                <path d="M 296,322 L 312,322" fill="none" stroke="black"/>
                <path d="M 328,318 L 352,318" fill="none" stroke="black"/>
                <path d="M 328,322 L 352,322" fill="none" stroke="black"/>
                <path d="M 368,318 L 392,318" fill="none" stroke="black"/>
                <path d="M 368,322 L 392,322" fill="none" stroke="black"/>
                <path d="M 408,318 L 432,318" fill="none" stroke="black"/>
                <path d="M 408,322 L 432,322" fill="none" stroke="black"/>
                <g class="text">
                  <text x="248" y="52">[0,</text>
                  <text x="280" y="52">13)</text>
                  <text x="160" y="84">/</text>
                  <text x="352" y="84">\</text>
                  <text x="120" y="116">[0,</text>
                  <text x="148" y="116">8)</text>
                  <text x="368" y="116">[8,</text>
                  <text x="400" y="116">13)</text>
                  <text x="72" y="148">/</text>
                  <text x="192" y="148">\</text>
                  <text x="336" y="148">/</text>
                  <text x="56" y="180">[0,</text>
                  <text x="84" y="180">4)</text>
                  <text x="184" y="180">[4,</text>
                  <text x="212" y="180">8)</text>
                  <text x="312" y="180">[8,</text>
                  <text x="344" y="180">12)</text>
                  <text x="40" y="212">/</text>
                  <text x="96" y="212">\</text>
                  <text x="168" y="212">/</text>
                  <text x="224" y="212">\</text>
                  <text x="304" y="212">/</text>
                  <text x="360" y="212">\</text>
                  <text x="32" y="244">[0,2)</text>
                  <text x="96" y="244">[2,4)</text>
                  <text x="160" y="244">[4,6)</text>
                  <text x="224" y="244">[6,8)</text>
                  <text x="292" y="244">[8,10)</text>
                  <text x="368" y="244">[10,12)</text>
                  <text x="24" y="276">/</text>
                  <text x="40" y="276">\</text>
                  <text x="88" y="276">/</text>
                  <text x="104" y="276">\</text>
                  <text x="152" y="276">/</text>
                  <text x="168" y="276">\</text>
                  <text x="216" y="276">/</text>
                  <text x="232" y="276">\</text>
                  <text x="280" y="276">/</text>
                  <text x="296" y="276">\</text>
                  <text x="352" y="276">/</text>
                  <text x="368" y="276">\</text>
                  <text x="16" y="308">0</text>
                  <text x="48" y="308">1</text>
                  <text x="80" y="308">2</text>
                  <text x="112" y="308">3</text>
                  <text x="144" y="308">4</text>
                  <text x="176" y="308">5</text>
                  <text x="208" y="308">6</text>
                  <text x="240" y="308">7</text>
                  <text x="272" y="308">8</text>
                  <text x="304" y="308">9</text>
                  <text x="340" y="308">10</text>
                  <text x="380" y="308">11</text>
                  <text x="420" y="308">12</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                +-----------------------------+
                |            [0, 13)          |
                +-----------------------------+
                   /                       \
       +----------------+             +================+
       |     [0, 8)     |             |     [8, 13)    |
       +----------------+             +================+
        /              \                 /          |
   +--------+      +========+      +---------+      |
   | [0, 4) |      | [4, 8) |      | [8, 12) |      |
   +--------+      +========+      +---------+      |
    /      \        /      \         /      \       |
+-----+ +-----+ +-----+ +-----+ +------+ +-------+  |
|[0,2)| |[2,4)| |[4,6)| |[6,8)| |[8,10)| |[10,12)|  |
+-----+ +-----+ +-----+ +-----+ +------+ +-------+  |
  / \     / \     / \     / \     / \      / \      |
+-+ +-+ +-+ +-+ +-+ +=+ +=+ +=+ +=+ +=+ +==+ +==+ +==+
|0| |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| |11| |12|
+-+ +-+ +-+ +-+ +-+ +=+ +=+ +=+ +=+ +=+ +==+ +==+ +==+
]]></artwork>
          </artset>
        </figure>
        <t>Two subtrees are needed because a single subtree may not be able to efficiently cover an interval. <xref target="fig-subtree-counterexample"/> shows the smallest subtree that contains <tt>[7, 9)</tt> in a 9-element tree. The smallest single subtree that contains the interval is <tt>[0, 9)</tt> but this is the entire tree. Using two subtrees, the interval can be described by <tt>[7, 8)</tt> and <tt>[8, 9)</tt>.</t>
        <figure anchor="fig-subtree-counterexample">
          <name>An example showing an inefficient choice of a single subtree</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="304" viewBox="0 0 304 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 8,288 L 8,320" fill="none" stroke="black"/>
                <path d="M 24,288 L 24,320" fill="none" stroke="black"/>
                <path d="M 32,160 L 32,192" fill="none" stroke="black"/>
                <path d="M 40,288 L 40,320" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 56,288 L 56,320" fill="none" stroke="black"/>
                <path d="M 64,96 L 64,128" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 72,288 L 72,320" fill="none" stroke="black"/>
                <path d="M 88,288 L 88,320" fill="none" stroke="black"/>
                <path d="M 104,160 L 104,192" fill="none" stroke="black"/>
                <path d="M 104,288 L 104,320" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 120,288 L 120,320" fill="none" stroke="black"/>
                <path d="M 136,32 L 136,64" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 136,288 L 136,320" fill="none" stroke="black"/>
                <path d="M 152,288 L 152,320" fill="none" stroke="black"/>
                <path d="M 160,160 L 160,192" fill="none" stroke="black"/>
                <path d="M 168,288 L 168,320" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 184,288 L 184,320" fill="none" stroke="black"/>
                <path d="M 200,96 L 200,128" fill="none" stroke="black"/>
                <path d="M 200,224 L 200,256" fill="none" stroke="black"/>
                <path d="M 200,288 L 200,320" fill="none" stroke="black"/>
                <path d="M 216,288 L 216,320" fill="none" stroke="black"/>
                <path d="M 232,160 L 232,192" fill="none" stroke="black"/>
                <path d="M 232,288 L 232,320" fill="none" stroke="black"/>
                <path d="M 248,224 L 248,256" fill="none" stroke="black"/>
                <path d="M 248,288 L 248,320" fill="none" stroke="black"/>
                <path d="M 264,288 L 264,320" fill="none" stroke="black"/>
                <path d="M 272,80 L 272,272" fill="none" stroke="black"/>
                <path d="M 280,288 L 280,320" fill="none" stroke="black"/>
                <path d="M 296,32 L 296,64" fill="none" stroke="black"/>
                <path d="M 136,30 L 296,30" fill="none" stroke="black"/>
                <path d="M 136,34 L 296,34" fill="none" stroke="black"/>
                <path d="M 136,62 L 296,62" fill="none" stroke="black"/>
                <path d="M 136,66 L 296,66" fill="none" stroke="black"/>
                <path d="M 64,96 L 200,96" fill="none" stroke="black"/>
                <path d="M 64,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 32,160 L 104,160" fill="none" stroke="black"/>
                <path d="M 160,160 L 232,160" fill="none" stroke="black"/>
                <path d="M 32,192 L 104,192" fill="none" stroke="black"/>
                <path d="M 160,192 L 232,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 200,224 L 248,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 184,256" fill="none" stroke="black"/>
                <path d="M 200,256 L 248,256" fill="none" stroke="black"/>
                <path d="M 8,288 L 24,288" fill="none" stroke="black"/>
                <path d="M 40,288 L 56,288" fill="none" stroke="black"/>
                <path d="M 72,288 L 88,288" fill="none" stroke="black"/>
                <path d="M 104,288 L 120,288" fill="none" stroke="black"/>
                <path d="M 136,288 L 152,288" fill="none" stroke="black"/>
                <path d="M 168,288 L 184,288" fill="none" stroke="black"/>
                <path d="M 200,288 L 216,288" fill="none" stroke="black"/>
                <path d="M 232,286 L 248,286" fill="none" stroke="black"/>
                <path d="M 232,290 L 248,290" fill="none" stroke="black"/>
                <path d="M 264,286 L 280,286" fill="none" stroke="black"/>
                <path d="M 264,290 L 280,290" fill="none" stroke="black"/>
                <path d="M 8,320 L 24,320" fill="none" stroke="black"/>
                <path d="M 40,320 L 56,320" fill="none" stroke="black"/>
                <path d="M 72,320 L 88,320" fill="none" stroke="black"/>
                <path d="M 104,320 L 120,320" fill="none" stroke="black"/>
                <path d="M 136,320 L 152,320" fill="none" stroke="black"/>
                <path d="M 168,320 L 184,320" fill="none" stroke="black"/>
                <path d="M 200,320 L 216,320" fill="none" stroke="black"/>
                <path d="M 232,318 L 248,318" fill="none" stroke="black"/>
                <path d="M 232,322 L 248,322" fill="none" stroke="black"/>
                <path d="M 264,318 L 280,318" fill="none" stroke="black"/>
                <path d="M 264,322 L 280,322" fill="none" stroke="black"/>
                <g class="text">
                  <text x="200" y="52">[0,</text>
                  <text x="228" y="52">9)</text>
                  <text x="160" y="84">/</text>
                  <text x="120" y="116">[0,</text>
                  <text x="148" y="116">8)</text>
                  <text x="72" y="148">/</text>
                  <text x="192" y="148">\</text>
                  <text x="56" y="180">[0,</text>
                  <text x="84" y="180">4)</text>
                  <text x="184" y="180">[4,</text>
                  <text x="212" y="180">8)</text>
                  <text x="40" y="212">/</text>
                  <text x="96" y="212">\</text>
                  <text x="168" y="212">/</text>
                  <text x="224" y="212">\</text>
                  <text x="32" y="244">[0,2)</text>
                  <text x="96" y="244">[2,4)</text>
                  <text x="160" y="244">[4,6)</text>
                  <text x="224" y="244">[6,8)</text>
                  <text x="24" y="276">/</text>
                  <text x="40" y="276">\</text>
                  <text x="88" y="276">/</text>
                  <text x="104" y="276">\</text>
                  <text x="152" y="276">/</text>
                  <text x="168" y="276">\</text>
                  <text x="216" y="276">/</text>
                  <text x="232" y="276">\</text>
                  <text x="16" y="308">0</text>
                  <text x="48" y="308">1</text>
                  <text x="80" y="308">2</text>
                  <text x="112" y="308">3</text>
                  <text x="144" y="308">4</text>
                  <text x="176" y="308">4</text>
                  <text x="208" y="308">6</text>
                  <text x="240" y="308">7</text>
                  <text x="272" y="308">8</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                +===================+
                |      [0, 9)       |
                +===================+
                   /             |
       +----------------+        |
       |     [0, 8)     |        |
       +----------------+        |
        /              \         |
   +--------+      +--------+    |
   | [0, 4) |      | [4, 8) |    |
   +--------+      +--------+    |
    /      \        /      \     |
+-----+ +-----+ +-----+ +-----+  |
|[0,2)| |[2,4)| |[4,6)| |[6,8)|  |
+-----+ +-----+ +-----+ +-----+  |
  / \     / \     / \     / \    |
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +=+ +=+
|0| |1| |2| |3| |4| |4| |6| |7| |8|
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +=+ +=+
]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="issuance-logs">
      <name>Issuance Logs</name>
      <t>This section defines the structure of an <em>issuance log</em>.</t>
      <t>An issuance log describes an append-only sequence of <em>entries</em> (<xref target="log-entries"/>), identified consecutively by an index value, starting from zero. Each entry is an assertion that the CA has certified. The entries in the issuance log are represented as a Merkle Tree, described in <xref section="2.1" sectionFormat="of" target="RFC9162"/>.</t>
      <t>Unlike <xref target="RFC6962"/> and <xref target="RFC9162"/>, an issuance log does not have a public submission interface. The log only contains entries which the log operator, i.e. the CA, chose to add. As entries are added, the Merkle Tree is updated to be computed over the new sequence.</t>
      <t>A snapshot of the log is known as a <em>checkpoint</em>. A checkpoint is identified by its <em>tree size</em>, that is the number of elements committed to the log at the time. Its contents can be described by the Merkle Tree Hash (<xref section="2.1.1" sectionFormat="of" target="RFC9162"/>) of entries zero through <tt>tree_size - 1</tt>.</t>
      <t>Cosigners (<xref target="cosigners"/>) sign assertions about the state of the issuance log. A Merkle Tree CA operates a combination of an issuance log and one or more CA cosigners (<xref target="certification-authority-cosigners"/>) that authenticate the log state and certifies the contents. External cosigners may also be deployed to assert correct log operation or provide other services to relying parties (<xref target="trusted-cosigners"/>).</t>
      <section anchor="log-parameters">
        <name>Log Parameters</name>
        <t>An issuance log has the following parameters:</t>
        <ul spacing="normal">
          <li>
            <t>A log ID, which uniquely identifies the log. See <xref target="log-ids"/>.</t>
          </li>
          <li>
            <t>A collision-resistant cryptographic hash function. SHA-256 <xref target="SHS"/> is RECOMMENDED.</t>
          </li>
          <li>
            <t>A minimum index, which is the index of the first log entry which is available. See <xref target="log-pruning"/>. This value changes over the lifetime of the log.</t>
          </li>
        </ul>
        <t>Throughout this document, the hash algorithm in use is referred to as HASH, and the size of its output in bytes is referred to as HASH_SIZE.</t>
      </section>
      <section anchor="log-ids">
        <name>Log IDs</name>
        <t>Each issuance log is identified by a <em>log ID</em>, which is a trust anchor ID <xref target="I-D.ietf-tls-trust-anchor-ids"/>.</t>
        <t>An issuance log's log ID determines a PKIX distinguished name (<xref section="4.1.2.4" sectionFormat="of" target="RFC5280"/>). The distinguished name has a single relative distinguished name, which has a single attribute. The attribute has type <tt>id-rdna-trustAnchorID</tt>, defined below:</t>
        <sourcecode type="asn.1"><![CDATA[
id-rdna-trustAnchorID OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) rdna(25) TBD }
]]></sourcecode>
        <t>The attribute's value is a RELATIVE-OID containing the trust anchor ID's ASN.1 representation. For example, the distinguished name for a log named <tt>32473.1</tt> would be represented in syntax of <xref target="RFC4514"/> as:</t>
        <artwork><![CDATA[
1.3.6.1.5.5.7.25.TBD=#0d0481fd5901
]]></artwork>
        <t>For initial experimentation, early implementations of this design will:</t>
        <ol spacing="normal" type="1"><li>
            <t>Use UTF8String to represent the attribute's value rather than RELATIVE-OID. The UTF8String contains trust anchor ID's ASCII representation, e.g. <tt>324731.1</tt>.</t>
          </li>
          <li>
            <t>Use the OID 1.3.6.1.4.1.44363.47.1 instead of <tt>id-rdna-trustAnchorID</tt>.</t>
          </li>
        </ol>
        <t>For example, the distinguished name for a log named <tt>32473.1</tt> would be represented in syntax of <xref target="RFC4514"/> as:</t>
        <artwork><![CDATA[
1.3.6.1.4.1.44363.47.1=#0c0733323437332e31
]]></artwork>
      </section>
      <section anchor="log-entries">
        <name>Log Entries</name>
        <t>Each entry in the log is a MerkleTreeCertEntry, defined with the TLS presentation syntax below. A MerkleTreeCertEntry describes certificate information that the CA has validated and certified.</t>
        <sourcecode type="tls-presentation"><![CDATA[
struct {} Empty;

enum {
    null_entry(0), tbs_cert_entry(1), (2^16-1)
} MerkleTreeCertEntryType;

struct {
    MerkleTreeCertEntryType type;
    select (type) {
       case null_entry: Empty;
       case tbs_cert_entry: opaque tbs_cert_entry_data[N];
       /* May be extended with future types. */
    }
} MerkleTreeCertEntry;
]]></sourcecode>
        <t>When <tt>type</tt> is <tt>null_entry</tt>, the entry does not represent any information. The entry at index zero of every issuance log MUST be of type <tt>null_entry</tt>. Other entries MUST NOT use <tt>null_entry</tt>. <tt>null_entry</tt> exists to avoid zero serial numbers in the certificate format (<xref target="certificate-format"/>).</t>
        <t>When <tt>type</tt> is <tt>tbs_cert_entry</tt>, <tt>N</tt> is the number of bytes needed to consume the rest of the input. A MerkleTreeCertEntry is expected to be decoded in contexts where the total length of the entry is known.</t>
        <t><tt>tbs_cert_entry_data</tt> contains the contents octets (i.e. excluding the initial identifier and length octets) of the DER <xref target="X.690"/> encoding of a TBSCertificateLogEntry, defined below. Equivalently, <tt>tbs_cert_entry_data</tt> contains the DER encodings of each field of the TBSCertificateLogEntry, concatenated. This construction allows a single-pass implementation in <xref target="verifying-certificate-signatures"/>.</t>
        <sourcecode type="asn.1"><![CDATA[
TBSCertificateLogEntry ::= SEQUENCE {
    version               [0] EXPLICIT Version DEFAULT v1,
    issuer                    Name,
    validity                  Validity,
    subject                   Name,
    subjectPublicKeyAlgorithm AlgorithmIdentifier{PUBLIC-KEY,
                                  {PublicKeyAlgorithms}},
    subjectPublicKeyInfoHash  OCTET STRING,
    issuerUniqueID        [1] IMPLICIT UniqueIdentifier OPTIONAL,
    subjectUniqueID       [2] IMPLICIT UniqueIdentifier OPTIONAL,
    extensions            [3] EXPLICIT Extensions{{CertExtensions}}
                                           OPTIONAL
}
]]></sourcecode>
        <t>The fields of a TBSCertificateLogEntry are defined as follows:</t>
        <ul spacing="normal">
          <li>
            <t><tt>version</tt>, <tt>issuer</tt>, <tt>validity</tt>, <tt>subject</tt>, <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, and <tt>extensions</tt> have the same semantics as the corresponding TBSCertificate fields, defined in <xref section="4.1.2" sectionFormat="of" target="RFC5280"/>.</t>
          </li>
          <li>
            <t><tt>subjectPublicKeyAlgorithm</tt> describes the algorithm of the subject's public key. It is constructed identically to the <tt>algorithm</tt> field of a SubjectPublicKeyInfo (<xref section="4.1.2.7" sectionFormat="of" target="RFC5280"/>).</t>
          </li>
          <li>
            <t><tt>subjectPublicKeyInfoHash</tt> contains the hash of subject's public key, encoded as a SubjectPublicKeyInfo. The hash uses the log's hash function (<xref target="log-parameters"/>) and is computed over the SubjectPublicKeyInfo's DER <xref target="X.690"/> encoding. The <tt>issuer</tt> field MUST be the issuance log's log ID as a PKIX distinguished name, as described in <xref target="log-ids"/>.</t>
          </li>
        </ul>
        <t>Note the subject's public key algorithm is incorporated into both <tt>subjectPublicKeyAlgorithm</tt> and <tt>subjectPublicKeyInfoHash</tt>.</t>
        <t>MerkleTreeCertEntry is an extensible structure. Future documents may define new values for MerkleTreeCertEntryType, with corresponding semantics. See <xref target="certification-authority-cosigners"/> and <xref target="new-log-entry-types"/> for additional discussion.</t>
      </section>
      <section anchor="cosigners">
        <name>Cosigners</name>
        <t>This section defines a log <em>cosigner</em>. A cosigner follows some append-only view of the log and signs subtrees (<xref target="subtrees"/>) consistent with that view. The signatures generated by a cosigner are known as <em>cosignatures</em>. All subtrees signed by a cosigner MUST be consistent with each other. The cosigner may be external to the log, in which case it might ensure consistency by checking consistency proofs. The cosigner may be operated together with the log, in which case it can trust its log state.</t>
        <t>A cosignature MAY implicitly make additional statements about a subtree, determined by the cosigner's role. This document defines one concrete cosigner role, a CA cosigner (<xref target="certification-authority-cosigners"/>), to authenticate the log and certify entries. Other documents and specific deployments may define other cosigner roles, to perform different functions in a PKI. For example, <xref target="TLOG-WITNESS"/> defines a cosigner that only checks the log is append-only, and <xref target="TLOG-MIRROR"/> defines a cosigner that mirrors a log.</t>
        <t>Each cosigner has a public key and a <em>cosigner ID</em>, which uniquely identifies the cosigner. The cosigner ID is a trust anchor ID <xref target="I-D.ietf-tls-trust-anchor-ids"/>. By identifying the cosigner, the cosigner ID specifies both the public key and the additional statements made by the cosigner's signatures. If a single operator performs multiple cosigner roles in an ecosystem, each role MUST use a distinct cosigner ID and SHOULD use a distinct key.</t>
        <t>A single cosigner, with a single cosigner ID and public key, MAY generate cosignatures for multiple logs. In this case, signed subtrees only need to be consistent with others for the same log.</t>
        <section anchor="signature-format">
          <name>Signature Format</name>
          <t>A cosigner computes a cosignature for a subtree in a log by signing a MTCSubtreeSignatureInput, defined below using the TLS presentation language (<xref section="3" sectionFormat="of" target="RFC8446"/>):</t>
          <sourcecode type="tls-presentation"><![CDATA[
opaque HashValue[HASH_SIZE];

/* From Section 4.1 of draft-ietf-tls-trust-anchor-ids */
opaque TrustAnchorID<1..2^8-1>;

struct {
    TrustAnchorID log_id;
    uint64 start;
    uint64 end;
    HashValue hash;
} MTCSubtree;

struct {
    uint8 label[16] = "mtc-subtree/v1\n\0";
    TrustAnchorID cosigner_id;
    MTCSubtree subtree;
} MTCSubtreeSignatureInput;
]]></sourcecode>
          <t><tt>log_id</tt> MUST be the issuance log's ID (<xref target="log-ids"/>), in its binary representation (<xref section="3" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>). <tt>start</tt> and <tt>end</tt> MUST define a valid subtree of the log, and <tt>hash</tt> MUST be the subtree's hash value in the cosigner's view of the log. The <tt>label</tt> is a fixed prefix for domain separation. Its value MUST be the string <tt>mtc-subtree/v1</tt>, followed by a newline (U+000A), followed by a zero byte (U+0000). <tt>cosigner_id</tt> MUST be the cosigner ID, in its binary representation.</t>
          <t>The resulting signature is known as a <em>subtree signature</em>. When <tt>start</tt> is zero, the resulting signature describes the checkpoint with tree size <tt>end</tt> and is also known as a <em>checkpoint signature</em>.</t>
          <t>For each supported log, a cosigner retains its checkpoint signature with the largest <tt>end</tt>. This is known as the cosigner's <em>current</em> checkpoint. If the cosigner's current checkpoint has tree size <tt>tree_size</tt>, it MUST NOT generate a signature for a subtree <tt>[start, end)</tt> if <tt>start &gt; 0</tt> and <tt>end &gt; tree_size</tt>. That is, a cosigner can only sign a non-checkpoint subtree if it is contained in its current checkpoint. In a correctly-operated cosigner, every signature made by the cosigner can be proven consistent with its current checkpoint with a subtree consistency proof (<xref target="subtree-consistency-proofs"/>). As a consequence, a cosigner that signs a subtree is held responsible for all the entries in the tree of size matching the subtree end, even if the corresponding checkpoint is erroneously unavailable.</t>
          <t>Before signing a subtree, the cosigner MUST ensure that <tt>hash</tt> is consistent with its log state. Different cosigner roles may obtain this assurance differently. For example, a cosigner may compute the hash from its saved log state (e.g. if it is the log operator or maintains a copy of the log) or by verifying a subtree consistency proof (<xref target="subtree-consistency-proofs"/>) from its current checkpoint. When a cosigner signs a subtree, it is held responsible <em>both</em> for the subtree being consistent with its other signatures, <em>and</em> for the cosigner-specific additional statements.</t>
          <t>Cosigners SHOULD publish their current checkpoint, along with the checkpoint signature.</t>
          <t>[[TODO: CT and tlog put timestamps in checkpoint signatures. Do we want them here? In CT and tlog, the timestamps are monotonically increasing as the log progresses, but we also sign subtrees. We can separate subtree and checkpoint signatures, with timestamps only in the latter, but it's unclear if there is any benefit to this.]]</t>
        </section>
        <section anchor="signature-algorithms">
          <name>Signature Algorithms</name>
          <t>The cosigner's public key specifies both the key material and the signature algorithm to use with the key material. In order to change key or signature parameters, a cosigner operator MUST deploy a new cosigner, with a new cosigner ID. Signature algorithms MUST fully specify the algorithm parameters, such as hash functions used. This document defines the following signature algorithms:</t>
          <ul spacing="normal">
            <li>
              <t>ECDSA with P-256 and SHA-256 <xref target="FIPS186-5"/></t>
            </li>
            <li>
              <t>ECDSA with P-384 and SHA-384 <xref target="FIPS186-5"/></t>
            </li>
            <li>
              <t>Ed25519 <xref target="RFC8032"/></t>
            </li>
            <li>
              <t>ML-DSA-44 <xref target="FIPS204"/></t>
            </li>
            <li>
              <t>ML-DSA-65 <xref target="FIPS204"/></t>
            </li>
            <li>
              <t>ML-DSA-87 <xref target="FIPS204"/></t>
            </li>
          </ul>
          <t>Other documents or deployments MAY define other signature schemes and formats. Log clients that accept cosignatures from some cosigner are assumed to be configured with all parameters necessary to verify that cosigner's signatures, including the signature algorithm and version of the signature format.</t>
        </section>
      </section>
      <section anchor="certification-authority-cosigners">
        <name>Certification Authority Cosigners</name>
        <t>A <em>CA cosigner</em> is a cosigner (<xref target="cosigners"/>) that certifies the contents of a log.</t>
        <t>When a CA cosigner signs a subtree, it makes the additional statement that it has certified each entry in the subtree. For example, a domain-validating CA states that it has performed domain validation for each entry, at some time consistent with the entry's validity dates. CAs are held responsible for every entry in every subtree they sign. Proving an entry is included (<xref target="subtree-inclusion-proofs"/>) in a CA-signed subtree is sufficient to prove the CA certified it.</t>
        <t>What it means to certify an entry depends on the entry type:</t>
        <ul spacing="normal">
          <li>
            <t>To certify an entry of type <tt>null_entry</tt> is a no-op. A CA MAY freely certify <tt>null_entry</tt> without being held responsible for any validation.</t>
          </li>
          <li>
            <t>To certify an entry of type <tt>tbs_cert_entry</tt> is to certify the TBSCertificateLogEntry, as defined in <xref target="log-entries"/>.</t>
          </li>
        </ul>
        <t>Entries are extensible. Future documents MAY define <tt>type</tt> values and what it means to certify them. A CA MUST NOT sign a subtree if it contains an entry with <tt>type</tt> that it does not recognize. Doing so would certify that the CA has validated the information in some not-yet-defined entry format. <xref target="new-log-entry-types"/> further discusses security implications of new formats.</t>
        <t>A CA operator MAY operate multiple CA cosigners that all certify the same log in parallel. This may be useful when, e.g., rotating CA keys. In this case, each CA instance MUST have a distinct name. The CA operator's ACME server can return all CA cosignatures together in a single certificate, with the application protocol selecting the cosignatures to use. <xref target="use-in-tls"/> describes how this is done in TLS <xref target="RFC8446"/>.</t>
        <t>If the CA operator additionally operates a traditional X.509 CA, that CA key MUST be distinct from any Merkle Tree CA cosigner keys.</t>
      </section>
      <section anchor="publishing-logs">
        <name>Publishing Logs</name>
        <t><em>[[NOTE: This section is written to avoid depending on a specific serving protocol. The current expectation is that a Web PKI deployment would derive from <xref target="TLOG-TILES"/>, to match the direction of Certificate Transparency and pick up improvements made there.</em></t>
        <t><em>For now, we avoid a normative reference to <xref target="TLOG-TILES"/> and also capture the fact that the certificate construction is independent of the choice of protocol. Similar to how the CT ecosystem is migrating to a tiled interface, were someone to improve on <xref target="TLOG-TILES"/>, a PKI could migrate to that new protocol without impacting certificate verification.</em></t>
        <t><em>This is purely a starting point for describing the design. We expect the scope of this document, and other related documents to adapt as the work evolves across the IETF, C2SP, Certificate Transparency, and other communities.]]</em></t>
        <t>Issuance logs are intended to be publicly accessible to allow monitors to detect misissued certificates.</t>
        <t>The access method does not affect certificate interoperability, so this document does not prescribe a specific protocol. An individual issuance log MAY be published in any form, provided other parties in the PKI are able to consume it. Relying parties SHOULD define log serving requirements, including the allowed protocols and expected availability, as part of their policies on which CAs to support. See also <xref target="log-availability"/>.</t>
        <t>For example, a log ecosystem could use <xref target="TLOG-TILES"/> to serve logs. <xref target="TLOG-TILES"/> improves on <xref target="RFC6962"/> and <xref target="RFC9162"/> by exposing the log as a collection of cacheable, immutable "tiles". This works well with a variety of common HTTP <xref target="RFC9110"/> serving architectures. It also allows log clients to request arbitrary tree nodes, so log clients can fetch the structures described in <xref target="subtrees"/>.</t>
        <section anchor="log-pruning">
          <name>Log Pruning</name>
          <t>Over time, an issuance log's entries will expire and likely be replaced as certificates are renewed. As this happens, the total size of the log grows, even if the unexpired subset remains fixed. To mitigate this, issuance logs MAY be <em>pruned</em>, as described in this section.</t>
          <t>Pruning makes some prefix of the log unavailable, without changing the tree structure. It may be used to reduce the serving cost of long-lived logs, where any entries have long expired. <xref target="log-availability"/> discusses policies on when pruning may be permitted. This section discusses how it is done and the impact on log structure.</t>
          <t>An issuance log is pruned by updating its <em>minimum index</em> parameter (<xref target="log-parameters"/>). The minimum index is the index of the first log entry that the log publishes. (See <xref target="publishing-logs"/>.) It MUST be less than or equal to the tree size of the log's current checkpoint, and also satisfy any availability policies set by relying parties who trust the CA.</t>
          <t>An entry is said to be <em>available</em> if its index is greater than or equal to the minimum index. A checkpoint is said to be available if its tree size is greater than the minimum index. A subtree <tt>[start, end)</tt> is said to be available if <tt>end</tt> is greater than the minimum index.</t>
          <t>Log protocols MUST serve enough information to allow a log client to efficiently obtain the following:</t>
          <ul spacing="normal">
            <li>
              <t>Signatures over the latest checkpoint by the CA's cosigners (<xref target="certification-authority-cosigners"/>)</t>
            </li>
            <li>
              <t>Any individual available log entry (<xref target="log-entries"/>)</t>
            </li>
            <li>
              <t>The hash value of any available checkpoint</t>
            </li>
            <li>
              <t>An inclusion proof (<xref section="2.1.3" sectionFormat="of" target="RFC9162"/>) for any available entry to any containing checkpoint</t>
            </li>
            <li>
              <t>A consistency proof (<xref section="2.1.4" sectionFormat="of" target="RFC9162"/>) between any two available checkpoints</t>
            </li>
            <li>
              <t>The hash value of any available subtree (<xref target="subtrees"/>)</t>
            </li>
            <li>
              <t>A subtree inclusion proof (<xref target="subtree-inclusion-proofs"/>) for any available entry in any containing subtree</t>
            </li>
            <li>
              <t>A subtree consistency proof (<xref target="subtree-consistency-proofs"/>) between any available subtree to any containing checkpoint</t>
            </li>
          </ul>
          <t>Meeting these requirements requires a log to retain some information about pruned entries. Given a node <tt>[start, end)</tt> in the Merkle Tree, if <tt>end</tt> is less than or equal to the minimum index, the node's children MAY be discarded in favor of the node's hash.</t>
          <t><xref target="fig-prune-tree"/> shows an example pruned tree with 13 elements, where the minimum index is 7. It shows the original tree, followed by the pruned tree. The pruned tree depicts the nodes that MUST be available or computable. Note that entry 6 MAY be discarded, only the hash of entry 6 must be available.</t>
          <figure anchor="fig-prune-tree">
            <name>An example showing the minimum nodes that must be available after pruning</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="672" width="456" viewBox="0 0 456 672" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                  <path d="M 8,288 L 8,320" fill="none" stroke="black"/>
                  <path d="M 24,288 L 24,320" fill="none" stroke="black"/>
                  <path d="M 32,160 L 32,192" fill="none" stroke="black"/>
                  <path d="M 32,496 L 32,528" fill="none" stroke="black"/>
                  <path d="M 40,288 L 40,320" fill="none" stroke="black"/>
                  <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                  <path d="M 56,288 L 56,320" fill="none" stroke="black"/>
                  <path d="M 64,96 L 64,128" fill="none" stroke="black"/>
                  <path d="M 64,432 L 64,464" fill="none" stroke="black"/>
                  <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                  <path d="M 72,288 L 72,320" fill="none" stroke="black"/>
                  <path d="M 88,288 L 88,320" fill="none" stroke="black"/>
                  <path d="M 104,160 L 104,192" fill="none" stroke="black"/>
                  <path d="M 104,288 L 104,320" fill="none" stroke="black"/>
                  <path d="M 104,496 L 104,528" fill="none" stroke="black"/>
                  <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                  <path d="M 120,288 L 120,320" fill="none" stroke="black"/>
                  <path d="M 136,32 L 136,64" fill="none" stroke="black"/>
                  <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                  <path d="M 136,288 L 136,320" fill="none" stroke="black"/>
                  <path d="M 136,368 L 136,400" fill="none" stroke="black"/>
                  <path d="M 136,560 L 136,592" fill="none" stroke="black"/>
                  <path d="M 152,288 L 152,320" fill="none" stroke="black"/>
                  <path d="M 160,160 L 160,192" fill="none" stroke="black"/>
                  <path d="M 160,496 L 160,528" fill="none" stroke="black"/>
                  <path d="M 168,288 L 168,320" fill="none" stroke="black"/>
                  <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                  <path d="M 184,288 L 184,320" fill="none" stroke="black"/>
                  <path d="M 184,560 L 184,592" fill="none" stroke="black"/>
                  <path d="M 200,96 L 200,128" fill="none" stroke="black"/>
                  <path d="M 200,224 L 200,256" fill="none" stroke="black"/>
                  <path d="M 200,288 L 200,320" fill="none" stroke="black"/>
                  <path d="M 200,432 L 200,464" fill="none" stroke="black"/>
                  <path d="M 200,560 L 200,592" fill="none" stroke="black"/>
                  <path d="M 200,624 L 200,656" fill="none" stroke="black"/>
                  <path d="M 216,288 L 216,320" fill="none" stroke="black"/>
                  <path d="M 216,624 L 216,656" fill="none" stroke="black"/>
                  <path d="M 232,160 L 232,192" fill="none" stroke="black"/>
                  <path d="M 232,288 L 232,320" fill="none" stroke="black"/>
                  <path d="M 232,496 L 232,528" fill="none" stroke="black"/>
                  <path d="M 232,624 L 232,656" fill="none" stroke="black"/>
                  <path d="M 248,224 L 248,256" fill="none" stroke="black"/>
                  <path d="M 248,288 L 248,320" fill="none" stroke="black"/>
                  <path d="M 248,560 L 248,592" fill="none" stroke="black"/>
                  <path d="M 248,624 L 248,656" fill="none" stroke="black"/>
                  <path d="M 264,224 L 264,256" fill="none" stroke="black"/>
                  <path d="M 264,288 L 264,320" fill="none" stroke="black"/>
                  <path d="M 264,560 L 264,592" fill="none" stroke="black"/>
                  <path d="M 264,624 L 264,656" fill="none" stroke="black"/>
                  <path d="M 280,288 L 280,320" fill="none" stroke="black"/>
                  <path d="M 280,624 L 280,656" fill="none" stroke="black"/>
                  <path d="M 288,160 L 288,192" fill="none" stroke="black"/>
                  <path d="M 288,496 L 288,528" fill="none" stroke="black"/>
                  <path d="M 296,288 L 296,320" fill="none" stroke="black"/>
                  <path d="M 296,624 L 296,656" fill="none" stroke="black"/>
                  <path d="M 312,96 L 312,128" fill="none" stroke="black"/>
                  <path d="M 312,288 L 312,320" fill="none" stroke="black"/>
                  <path d="M 312,432 L 312,464" fill="none" stroke="black"/>
                  <path d="M 312,624 L 312,656" fill="none" stroke="black"/>
                  <path d="M 320,224 L 320,256" fill="none" stroke="black"/>
                  <path d="M 320,560 L 320,592" fill="none" stroke="black"/>
                  <path d="M 328,288 L 328,320" fill="none" stroke="black"/>
                  <path d="M 328,624 L 328,656" fill="none" stroke="black"/>
                  <path d="M 336,224 L 336,256" fill="none" stroke="black"/>
                  <path d="M 336,560 L 336,592" fill="none" stroke="black"/>
                  <path d="M 352,288 L 352,320" fill="none" stroke="black"/>
                  <path d="M 352,624 L 352,656" fill="none" stroke="black"/>
                  <path d="M 368,160 L 368,192" fill="none" stroke="black"/>
                  <path d="M 368,288 L 368,320" fill="none" stroke="black"/>
                  <path d="M 368,496 L 368,528" fill="none" stroke="black"/>
                  <path d="M 368,624 L 368,656" fill="none" stroke="black"/>
                  <path d="M 376,32 L 376,64" fill="none" stroke="black"/>
                  <path d="M 376,368 L 376,400" fill="none" stroke="black"/>
                  <path d="M 392,288 L 392,320" fill="none" stroke="black"/>
                  <path d="M 392,624 L 392,656" fill="none" stroke="black"/>
                  <path d="M 400,224 L 400,256" fill="none" stroke="black"/>
                  <path d="M 400,560 L 400,592" fill="none" stroke="black"/>
                  <path d="M 408,288 L 408,320" fill="none" stroke="black"/>
                  <path d="M 408,624 L 408,656" fill="none" stroke="black"/>
                  <path d="M 424,136 L 424,272" fill="none" stroke="black"/>
                  <path d="M 424,472 L 424,608" fill="none" stroke="black"/>
                  <path d="M 432,288 L 432,320" fill="none" stroke="black"/>
                  <path d="M 432,624 L 432,656" fill="none" stroke="black"/>
                  <path d="M 448,96 L 448,128" fill="none" stroke="black"/>
                  <path d="M 448,432 L 448,464" fill="none" stroke="black"/>
                  <path d="M 136,32 L 376,32" fill="none" stroke="black"/>
                  <path d="M 136,64 L 376,64" fill="none" stroke="black"/>
                  <path d="M 64,96 L 200,96" fill="none" stroke="black"/>
                  <path d="M 312,96 L 448,96" fill="none" stroke="black"/>
                  <path d="M 64,128 L 200,128" fill="none" stroke="black"/>
                  <path d="M 312,128 L 448,128" fill="none" stroke="black"/>
                  <path d="M 32,160 L 104,160" fill="none" stroke="black"/>
                  <path d="M 160,160 L 232,160" fill="none" stroke="black"/>
                  <path d="M 288,160 L 368,160" fill="none" stroke="black"/>
                  <path d="M 32,192 L 104,192" fill="none" stroke="black"/>
                  <path d="M 160,192 L 232,192" fill="none" stroke="black"/>
                  <path d="M 288,192 L 368,192" fill="none" stroke="black"/>
                  <path d="M 8,224 L 56,224" fill="none" stroke="black"/>
                  <path d="M 72,224 L 120,224" fill="none" stroke="black"/>
                  <path d="M 136,224 L 184,224" fill="none" stroke="black"/>
                  <path d="M 200,224 L 248,224" fill="none" stroke="black"/>
                  <path d="M 264,224 L 320,224" fill="none" stroke="black"/>
                  <path d="M 336,224 L 400,224" fill="none" stroke="black"/>
                  <path d="M 8,256 L 56,256" fill="none" stroke="black"/>
                  <path d="M 72,256 L 120,256" fill="none" stroke="black"/>
                  <path d="M 136,256 L 184,256" fill="none" stroke="black"/>
                  <path d="M 200,256 L 248,256" fill="none" stroke="black"/>
                  <path d="M 264,256 L 320,256" fill="none" stroke="black"/>
                  <path d="M 336,256 L 400,256" fill="none" stroke="black"/>
                  <path d="M 8,286 L 24,286" fill="none" stroke="black"/>
                  <path d="M 8,290 L 24,290" fill="none" stroke="black"/>
                  <path d="M 40,286 L 56,286" fill="none" stroke="black"/>
                  <path d="M 40,290 L 56,290" fill="none" stroke="black"/>
                  <path d="M 72,286 L 88,286" fill="none" stroke="black"/>
                  <path d="M 72,290 L 88,290" fill="none" stroke="black"/>
                  <path d="M 104,286 L 120,286" fill="none" stroke="black"/>
                  <path d="M 104,290 L 120,290" fill="none" stroke="black"/>
                  <path d="M 136,286 L 152,286" fill="none" stroke="black"/>
                  <path d="M 136,290 L 152,290" fill="none" stroke="black"/>
                  <path d="M 168,286 L 184,286" fill="none" stroke="black"/>
                  <path d="M 168,290 L 184,290" fill="none" stroke="black"/>
                  <path d="M 200,286 L 216,286" fill="none" stroke="black"/>
                  <path d="M 200,290 L 216,290" fill="none" stroke="black"/>
                  <path d="M 232,286 L 248,286" fill="none" stroke="black"/>
                  <path d="M 232,290 L 248,290" fill="none" stroke="black"/>
                  <path d="M 264,286 L 280,286" fill="none" stroke="black"/>
                  <path d="M 264,290 L 280,290" fill="none" stroke="black"/>
                  <path d="M 296,286 L 312,286" fill="none" stroke="black"/>
                  <path d="M 296,290 L 312,290" fill="none" stroke="black"/>
                  <path d="M 328,286 L 352,286" fill="none" stroke="black"/>
                  <path d="M 328,290 L 352,290" fill="none" stroke="black"/>
                  <path d="M 368,286 L 392,286" fill="none" stroke="black"/>
                  <path d="M 368,290 L 392,290" fill="none" stroke="black"/>
                  <path d="M 408,286 L 432,286" fill="none" stroke="black"/>
                  <path d="M 408,290 L 432,290" fill="none" stroke="black"/>
                  <path d="M 8,318 L 24,318" fill="none" stroke="black"/>
                  <path d="M 8,322 L 24,322" fill="none" stroke="black"/>
                  <path d="M 40,318 L 56,318" fill="none" stroke="black"/>
                  <path d="M 40,322 L 56,322" fill="none" stroke="black"/>
                  <path d="M 72,318 L 88,318" fill="none" stroke="black"/>
                  <path d="M 72,322 L 88,322" fill="none" stroke="black"/>
                  <path d="M 104,318 L 120,318" fill="none" stroke="black"/>
                  <path d="M 104,322 L 120,322" fill="none" stroke="black"/>
                  <path d="M 136,318 L 152,318" fill="none" stroke="black"/>
                  <path d="M 136,322 L 152,322" fill="none" stroke="black"/>
                  <path d="M 168,318 L 184,318" fill="none" stroke="black"/>
                  <path d="M 168,322 L 184,322" fill="none" stroke="black"/>
                  <path d="M 200,318 L 216,318" fill="none" stroke="black"/>
                  <path d="M 200,322 L 216,322" fill="none" stroke="black"/>
                  <path d="M 232,318 L 248,318" fill="none" stroke="black"/>
                  <path d="M 232,322 L 248,322" fill="none" stroke="black"/>
                  <path d="M 264,318 L 280,318" fill="none" stroke="black"/>
                  <path d="M 264,322 L 280,322" fill="none" stroke="black"/>
                  <path d="M 296,318 L 312,318" fill="none" stroke="black"/>
                  <path d="M 296,322 L 312,322" fill="none" stroke="black"/>
                  <path d="M 328,318 L 352,318" fill="none" stroke="black"/>
                  <path d="M 328,322 L 352,322" fill="none" stroke="black"/>
                  <path d="M 368,318 L 392,318" fill="none" stroke="black"/>
                  <path d="M 368,322 L 392,322" fill="none" stroke="black"/>
                  <path d="M 408,318 L 432,318" fill="none" stroke="black"/>
                  <path d="M 408,322 L 432,322" fill="none" stroke="black"/>
                  <path d="M 136,368 L 376,368" fill="none" stroke="black"/>
                  <path d="M 136,400 L 376,400" fill="none" stroke="black"/>
                  <path d="M 64,432 L 200,432" fill="none" stroke="black"/>
                  <path d="M 312,432 L 448,432" fill="none" stroke="black"/>
                  <path d="M 64,464 L 200,464" fill="none" stroke="black"/>
                  <path d="M 312,464 L 448,464" fill="none" stroke="black"/>
                  <path d="M 32,496 L 104,496" fill="none" stroke="black"/>
                  <path d="M 160,496 L 232,496" fill="none" stroke="black"/>
                  <path d="M 288,496 L 368,496" fill="none" stroke="black"/>
                  <path d="M 32,528 L 104,528" fill="none" stroke="black"/>
                  <path d="M 160,528 L 232,528" fill="none" stroke="black"/>
                  <path d="M 288,528 L 368,528" fill="none" stroke="black"/>
                  <path d="M 136,560 L 184,560" fill="none" stroke="black"/>
                  <path d="M 200,560 L 248,560" fill="none" stroke="black"/>
                  <path d="M 264,560 L 320,560" fill="none" stroke="black"/>
                  <path d="M 336,560 L 400,560" fill="none" stroke="black"/>
                  <path d="M 136,592 L 184,592" fill="none" stroke="black"/>
                  <path d="M 200,592 L 248,592" fill="none" stroke="black"/>
                  <path d="M 264,592 L 320,592" fill="none" stroke="black"/>
                  <path d="M 336,592 L 400,592" fill="none" stroke="black"/>
                  <path d="M 200,624 L 216,624" fill="none" stroke="black"/>
                  <path d="M 232,622 L 248,622" fill="none" stroke="black"/>
                  <path d="M 232,626 L 248,626" fill="none" stroke="black"/>
                  <path d="M 264,622 L 280,622" fill="none" stroke="black"/>
                  <path d="M 264,626 L 280,626" fill="none" stroke="black"/>
                  <path d="M 296,622 L 312,622" fill="none" stroke="black"/>
                  <path d="M 296,626 L 312,626" fill="none" stroke="black"/>
                  <path d="M 328,622 L 352,622" fill="none" stroke="black"/>
                  <path d="M 328,626 L 352,626" fill="none" stroke="black"/>
                  <path d="M 368,622 L 392,622" fill="none" stroke="black"/>
                  <path d="M 368,626 L 392,626" fill="none" stroke="black"/>
                  <path d="M 408,622 L 432,622" fill="none" stroke="black"/>
                  <path d="M 408,626 L 432,626" fill="none" stroke="black"/>
                  <path d="M 200,656 L 216,656" fill="none" stroke="black"/>
                  <path d="M 232,654 L 248,654" fill="none" stroke="black"/>
                  <path d="M 232,658 L 248,658" fill="none" stroke="black"/>
                  <path d="M 264,654 L 280,654" fill="none" stroke="black"/>
                  <path d="M 264,658 L 280,658" fill="none" stroke="black"/>
                  <path d="M 296,654 L 312,654" fill="none" stroke="black"/>
                  <path d="M 296,658 L 312,658" fill="none" stroke="black"/>
                  <path d="M 328,654 L 352,654" fill="none" stroke="black"/>
                  <path d="M 328,658 L 352,658" fill="none" stroke="black"/>
                  <path d="M 368,654 L 392,654" fill="none" stroke="black"/>
                  <path d="M 368,658 L 392,658" fill="none" stroke="black"/>
                  <path d="M 408,654 L 432,654" fill="none" stroke="black"/>
                  <path d="M 408,658 L 432,658" fill="none" stroke="black"/>
                  <g class="text">
                    <text x="248" y="52">[0,</text>
                    <text x="280" y="52">13)</text>
                    <text x="160" y="84">/</text>
                    <text x="352" y="84">\</text>
                    <text x="120" y="116">[0,</text>
                    <text x="148" y="116">8)</text>
                    <text x="368" y="116">[8,</text>
                    <text x="400" y="116">13)</text>
                    <text x="72" y="148">/</text>
                    <text x="192" y="148">\</text>
                    <text x="336" y="148">/</text>
                    <text x="56" y="180">[0,</text>
                    <text x="84" y="180">4)</text>
                    <text x="184" y="180">[4,</text>
                    <text x="212" y="180">8)</text>
                    <text x="312" y="180">[8,</text>
                    <text x="344" y="180">12)</text>
                    <text x="40" y="212">/</text>
                    <text x="96" y="212">\</text>
                    <text x="168" y="212">/</text>
                    <text x="224" y="212">\</text>
                    <text x="304" y="212">/</text>
                    <text x="360" y="212">\</text>
                    <text x="32" y="244">[0,2)</text>
                    <text x="96" y="244">[2,4)</text>
                    <text x="160" y="244">[4,6)</text>
                    <text x="224" y="244">[6,8)</text>
                    <text x="292" y="244">[8,10)</text>
                    <text x="368" y="244">[10,12)</text>
                    <text x="24" y="276">/</text>
                    <text x="40" y="276">\</text>
                    <text x="88" y="276">/</text>
                    <text x="104" y="276">\</text>
                    <text x="152" y="276">/</text>
                    <text x="168" y="276">\</text>
                    <text x="216" y="276">/</text>
                    <text x="232" y="276">\</text>
                    <text x="280" y="276">/</text>
                    <text x="296" y="276">\</text>
                    <text x="352" y="276">/</text>
                    <text x="368" y="276">\</text>
                    <text x="16" y="308">0</text>
                    <text x="48" y="308">1</text>
                    <text x="80" y="308">2</text>
                    <text x="112" y="308">3</text>
                    <text x="144" y="308">4</text>
                    <text x="176" y="308">5</text>
                    <text x="208" y="308">6</text>
                    <text x="240" y="308">7</text>
                    <text x="272" y="308">8</text>
                    <text x="304" y="308">9</text>
                    <text x="340" y="308">10</text>
                    <text x="380" y="308">11</text>
                    <text x="420" y="308">12</text>
                    <text x="248" y="388">[0,</text>
                    <text x="280" y="388">13)</text>
                    <text x="160" y="420">/</text>
                    <text x="352" y="420">\</text>
                    <text x="120" y="452">[0,</text>
                    <text x="148" y="452">8)</text>
                    <text x="368" y="452">[8,</text>
                    <text x="400" y="452">13)</text>
                    <text x="72" y="484">/</text>
                    <text x="192" y="484">\</text>
                    <text x="336" y="484">/</text>
                    <text x="56" y="516">[0,</text>
                    <text x="84" y="516">4)</text>
                    <text x="184" y="516">[4,</text>
                    <text x="212" y="516">8)</text>
                    <text x="312" y="516">[8,</text>
                    <text x="344" y="516">12)</text>
                    <text x="168" y="548">/</text>
                    <text x="224" y="548">\</text>
                    <text x="304" y="548">/</text>
                    <text x="360" y="548">\</text>
                    <text x="160" y="580">[4,6)</text>
                    <text x="224" y="580">[6,8)</text>
                    <text x="292" y="580">[8,10)</text>
                    <text x="368" y="580">[10,12)</text>
                    <text x="216" y="612">/</text>
                    <text x="232" y="612">\</text>
                    <text x="280" y="612">/</text>
                    <text x="296" y="612">\</text>
                    <text x="352" y="612">/</text>
                    <text x="368" y="612">\</text>
                    <text x="208" y="644">6</text>
                    <text x="240" y="644">7</text>
                    <text x="272" y="644">8</text>
                    <text x="304" y="644">9</text>
                    <text x="340" y="644">10</text>
                    <text x="380" y="644">11</text>
                    <text x="420" y="644">12</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
                +-----------------------------+
                |            [0, 13)          |
                +-----------------------------+
                   /                       \
       +----------------+             +----------------+
       |     [0, 8)     |             |     [8, 13)    |
       +----------------+             +----------------+
        /              \                 /          |
   +--------+      +--------+      +---------+      |
   | [0, 4) |      | [4, 8) |      | [8, 12) |      |
   +--------+      +--------+      +---------+      |
    /      \        /      \         /      \       |
+-----+ +-----+ +-----+ +-----+ +------+ +-------+  |
|[0,2)| |[2,4)| |[4,6)| |[6,8)| |[8,10)| |[10,12)|  |
+-----+ +-----+ +-----+ +-----+ +------+ +-------+  |
  / \     / \     / \     / \     / \      / \      |
+=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +==+ +==+ +==+
|0| |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| |11| |12|
+=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +=+ +==+ +==+ +==+


                +-----------------------------+
                |            [0, 13)          |
                +-----------------------------+
                   /                       \
       +----------------+             +----------------+
       |     [0, 8)     |             |     [8, 13)    |
       +----------------+             +----------------+
        /              \                 /          |
   +--------+      +--------+      +---------+      |
   | [0, 4) |      | [4, 8) |      | [8, 12) |      |
   +--------+      +--------+      +---------+      |
                    /      \         /      \       |
                +-----+ +-----+ +------+ +-------+  |
                |[4,6)| |[6,8)| |[8,10)| |[10,12)|  |
                +-----+ +-----+ +------+ +-------+  |
                          / \     / \      / \      |
                        +-+ +=+ +=+ +=+ +==+ +==+ +==+
                        |6| |7| |8| |9| |10| |11| |12|
                        +-+ +=+ +=+ +=+ +==+ +==+ +==+
]]></artwork>
            </artset>
          </figure>
          <t>Logs MAY retain additional nodes, or expect log clients to compute required nodes from other nodes. For example, in <xref target="fig-prune-tree"/>, the log's serving protocol MAY instead serve <tt>[0, 2)</tt> and <tt>[2, 4)</tt>, with the log client computing <tt>[0, 4)</tt> from those values.</t>
        </section>
      </section>
    </section>
    <section anchor="certificates">
      <name>Certificates</name>
      <t>This section defines how to construct Merkle Tree Certificates, which are X.509 Certificates <xref target="RFC5280"/> that assert the information in an issuance log entry. A Merkle Tree Certificate is constructed from the following:</t>
      <ul spacing="normal">
        <li>
          <t>A TBSCertificateLogEntry (<xref target="log-entries"/>) contained in the issuance log (<xref target="issuance-logs"/>)</t>
        </li>
        <li>
          <t>A subject public key whose hash matches the TBSCertificateLogEntry</t>
        </li>
        <li>
          <t>A subtree (<xref target="subtrees"/>) that contains the log entry</t>
        </li>
        <li>
          <t>Zero or more signatures (<xref target="cosigners"/>) over the subtree, which together satisfy relying party requirements (<xref target="trusted-cosigners"/>)</t>
        </li>
      </ul>
      <t>For any given TBSCertificateLogEntry, there are multiple possible certificates that may prove the entry is certified by the CA and publicly logged, varying by choice of subtree and signatures. <xref target="certificate-format"/> defines how the certificate is constructed based on those choices. <xref target="standalone-certificates"/> and <xref target="landmark-certificates"/> define two profiles of Merkle Tree Certificates, standalone certificates and landmark certificates, and how to select the subtree and signatures for them.</t>
      <section anchor="certificate-format">
        <name>Certificate Format</name>
        <t>The information is encoded in an X.509 Certificate <xref target="RFC5280"/> as follows:</t>
        <t>The TBSCertificate's <tt>version</tt>, <tt>issuer</tt>, <tt>validity</tt>, <tt>subject</tt>, <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, and <tt>extensions</tt> MUST be equal to the corresponding fields of the TBSCertificateLogEntry. If any of <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, or <tt>extensions</tt> is absent in the TBSCertificateLogEntry, the corresponding field MUST be absent in the TBSCertificate. Per <xref target="log-entries"/>, this means <tt>issuer</tt> MUST be the issuance log's log ID as a PKIX distinguished name, as described in <xref target="log-ids"/>.</t>
        <t>The TBSCertificate's <tt>serialNumber</tt> MUST contain the zero-based index of the TBSCertificateLogEntry in the log. <xref section="4.1.2.2" sectionFormat="of" target="RFC5280"/> forbids zero as a serial number, but <xref target="log-entries"/> defines a <tt>null_entry</tt> type for use in entry zero, so the index will be positive. This encoding is intended to avoid implementation errors by having the serial numbers and indices off by one.</t>
        <t>The TBSCertificate's <tt>subjectPublicKeyInfo</tt> contains the specified public key. Its <tt>algorithm</tt> field MUST match the TBSCertificateLogEntry's <tt>subjectPublicKeyAlgorithm</tt>. Its hash MUST match the TBSCertificateLogEntry's <tt>subjectPublicKeyInfoHash</tt>.</t>
        <t>The TBSCertificate's <tt>signature</tt> and the Certificate's <tt>signatureAlgorithm</tt> MUST contain an AlgorithmIdentifier whose <tt>algorithm</tt> is id-alg-mtcProof, defined below, and whose <tt>parameters</tt> is omitted.</t>
        <sourcecode type="asn.1"><![CDATA[
id-alg-mtcProof OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) algorithms(6) TBD }
]]></sourcecode>
        <t>For initial experimentation, early implementations of this design will use the OID 1.3.6.1.4.1.44363.47.0 instead of <tt>id-alg-mtcProof</tt>.</t>
        <t>The <tt>signatureValue</tt> contains an MTCProof structure, defined below using the TLS presentation language (<xref section="3" sectionFormat="of" target="RFC8446"/>):</t>
        <sourcecode type="tls-presentation"><![CDATA[
opaque HashValue[HASH_SIZE];

struct {
    TrustAnchorID cosigner_id;
    opaque signature<0..2^16-1>;
} MTCSignature;

struct {
    uint64 start;
    uint64 end;
    HashValue inclusion_proof<0..2^16-1>;
    MTCSignature signatures<0..2^16-1>;
} MTCProof;
]]></sourcecode>
        <t><tt>start</tt> and <tt>end</tt> MUST contain the corresponding parameters of the chosen subtree. <tt>inclusion_proof</tt> MUST contain a subtree inclusion proof (<xref target="subtree-inclusion-proofs"/>) for the log entry and the subtree. <tt>signatures</tt> contains the chosen subtree signatures. In each signature, <tt>cosigner_id</tt> contains the cosigner ID (<xref target="cosigners"/>) in its binary representation (<xref section="3" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>), and <tt>signature</tt> contains the signature value as described in <xref target="signature-format"/>.</t>
        <t>The MTCProof is encoded into the <tt>signatureValue</tt> with no additional ASN.1 wrapping. The most significant bit of the first octet of the signature value SHALL become the first bit of the bit string, and so on through the least significant bit of the last octet of the signature value, which SHALL become the last bit of the bit string.</t>
      </section>
      <section anchor="standalone-certificates">
        <name>Standalone Certificates</name>
        <t>A <em>standalone certificate</em> is a Merkle Tree certificate which contains sufficient signatures to allow a relying party to trust the choice of subtree, without any predistributed information beyond the cosigner(s) parameters. Standalone certificates can be issued without significant processing delay.</t>
        <t>When issuing a certificate, the CA first adds the TBSCertificateLogEntry to its issuance log. It then schedules a job to construct a checkpoint and collect cosignatures. The job proceeds as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>The CA signs the checkpoint with its key(s) (<xref target="certification-authority-cosigners"/>).</t>
          </li>
          <li>
            <t>Using the procedure in <xref target="arbitrary-intervals"/>, the CA determines the two subtrees that cover the entries added between this checkpoint and the most recent checkpoint.</t>
          </li>
          <li>
            <t>The CA signs each subtree with its key(s) (<xref target="cosigners"/>).</t>
          </li>
          <li>
            <t>The CA requests sufficient checkpoint cosignatures (<xref target="cosigners"/>) from external cosigners to meet relying party requirements (<xref target="trusted-cosigners"/>).</t>
          </li>
          <li>
            <t>The CA requests subtree cosignatures (<xref target="requesting-subtree-signatures"/>) from the cosigners above.</t>
          </li>
          <li>
            <t>For each certificate in the interval, the CA constructs certificates (<xref target="certificate-format"/>) using the covering subtree.</t>
          </li>
        </ol>
        <t>Steps 4 and 5 are analogous to requesting SCTs from CT logs in Certificate Transparency, except that a single run of this job collects signatures for many certificates at once. The CA MAY request signatures from a redundant set of cosigners and select the ones that complete first.</t>
        <t>This document does not prescribe the specific cosigner roles, or a particular protocol for requesting cosignatures. Protocols for cosigners MAY vary depending on the needs for that cosigner. A consistency-only cosigner, such as <xref target="TLOG-WITNESS"/>, might only require a checkpoint signature and consistency proof, while a mirroring cosigner, such as <xref target="TLOG-MIRROR"/> might require the full log contents.</t>
        <t>A cosigner MAY expose a private interface for the CA, to reduce denial-of-service risk, or a cosigner MAY expose a public interface for other parties to request additional cosignatures. The latter may be useful if a relying party requires a cosigner that the CA does not communicate with. In this case, an authenticating party MAY request cosignatures and add them to the certificate. However, it is RECOMMENDED that the CA collect cosignatures for the authenticating party. This simplifies deployment, as relying party policies change over time.</t>
        <t>This document does not place any requirements on how frequently this job runs. More frequent runs results in lower issuance delay, but higher signing overhead. It is RECOMMENDED that CAs run at most one instance of this job at a time, starting the next instance after the previous one completes. A single run collects signatures for all entries since the most recent checkpoint, so there is little benefit to overlapping them. Less frequent runs may also aid relying parties that wish to directly audit signatures, as described in Section 5.2 of <xref target="AuditingRevisited"/>, though this document does not define such a system.</t>
      </section>
      <section anchor="landmark-certificates">
        <name>Landmark Certificates</name>
        <t>A <em>landmark certificate</em> is a Merkle Tree certificate which contains no signatures and instead assumes the relying party had predistributed information about which subtrees were trusted. Landmark certificates are an optional size optimization. They require a processing delay to construct, and only work in a sufficiently up-to-date relying party. Authenticating parties thus SHOULD deploy a corresponding standalone certificate alongside any landmark certificate, and use some application-protocol-specific mechanism to select between the two. <xref target="use-in-tls"/> discusses such a mechanism for TLS <xref target="RFC8446"/>.</t>
        <section anchor="landmark-tree-sizes">
          <name>Landmark Tree Sizes</name>
          <t>A landmark certificate is constructed based on a <em>landmark sequence</em>, which is a sequence of <em>landmarks</em>. Landmarks are agreed-upon tree sizes across the ecosystem for optimizing certificates. Landmarks SHOULD be allocated by the CA, but they can also be allocated by some other coordinating party. It is possible, but NOT RECOMMENDED, for multiple landmark sequences to exist per CA. Landmarks are allocated to balance minimizing the delay in obtaining a landmark certificate with minimizing the size of the relying party's predistributed state.</t>
          <t>A landmark sequence has the following fixed parameters:</t>
          <ul spacing="normal">
            <li>
              <t><tt>base_id</tt>: An OID arc for trust anchor IDs of individual landmarks</t>
            </li>
            <li>
              <t><tt>max_landmarks</tt>: A positive integer, describing the maximum number of landmarks that may contain unexpired certificates at any time</t>
            </li>
            <li>
              <t><tt>landmark_url</tt>: Some URL to fetch the current list of landmarks</t>
            </li>
          </ul>
          <t>Landmarks are numbered consecutively from zero. Each landmark has a trust anchor ID, determined by appending the landmark number to <tt>base_id</tt>. For example, the trust anchor ID for landmark 42 of a sequence with <tt>base_id</tt> of <tt>32473.1</tt> would be <tt>32473.1.42</tt>.</t>
          <t>Each landmark specifies a tree size. The first landmark, numbered zero, is always a tree size of zero. The sequence of tree sizes MUST be append-only and strictly monotonically increasing.</t>
          <t>Landmarks determine <em>landmark subtrees</em>: for each landmark, other than number zero, let <tt>tree_size</tt> be the landmark's tree size and <tt>prev_tree_size</tt> be that of the previous landmark. As described in <xref target="arbitrary-intervals"/>, select the one or two subtrees that cover <tt>[prev_tree_size, tree_size)</tt>. Each of those subtrees is a landmark subtree. Landmark zero has no landmark subtrees.</t>
          <t>The most recent <tt>max_landmarks</tt> landmarks are said to be <em>active</em>. Landmarks MUST be allocated such that, at any given time, only active landmarks contain unexpired certificates. The active landmark subtrees are those determined by the active landmarks. There are at most <tt>2 * max_landmarks</tt> active landmark subtrees at any time. Every unexpired entry will be contained in one or more landmark subtree, or between the last landmark subtree and the latest checkpoint. Active landmark subtrees are predistributed to the relying party as trusted subtrees, as described in <xref target="trusted-subtrees"/>.</t>
          <t>It is RECOMMENDED that landmarks be allocated following the procedure described in <xref target="allocating-landmarks"/>. If landmarks are allocated incorrectly (e.g. past landmarks change, or <tt>max_landmarks</tt> is inaccurate), there are no security consequences, but some older certificates may fail to validate.</t>
          <t>Relying parties will locally retain up to <tt>2 * max_landmarks</tt> hashes (<xref target="trusted-subtrees"/>) per CA, so <tt>max_landmarks</tt> should be set to balance the delay between landmarks and the amount of state the relying party must maintain. Using the recommended procedure above, a CA with a maximum certificate lifetime of 7 days, allocating a landmark every hour, will have a <tt>max_landmarks</tt> of 168. The client state is then 336 hashes, or 10,752 bytes with SHA-256.</t>
          <t><tt>landmark_url</tt> MUST serve a resource with <tt>Content-Type: text/plain; charset=utf-8</tt> and the following lines. Each line MUST be terminated by a newline character (U+000A):</t>
          <ul spacing="normal">
            <li>
              <t>Two space-separated non-negative decimal integers: <tt>&lt;last_landmark&gt; &lt;num_active_landmarks&gt;</tt>.
This line MUST satisfy the following, otherwise it is invalid:
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>num_active_landmarks &lt;= max_landmarks</tt></t>
                </li>
                <li>
                  <t><tt>num_active_landmarks &lt;= last_landmark</tt></t>
                </li>
              </ul>
            </li>
            <li>
              <t><tt>num_active_landmarks + 1</tt> lines each containing a single non-negative decimal integer, containing a tree size. Numbered from zero to <tt>num_active_landmarks</tt>, line <tt>i</tt> contains the tree size for landmark <tt>last_landmark - i</tt>. The integers MUST be strictly monotonically decreasing and lower or equal to the log's latest tree size.</t>
            </li>
          </ul>
        </section>
        <section anchor="allocating-landmarks">
          <name>Allocating Landmarks</name>
          <t>It is RECOMMENDED that landmarks be allocated using the following procedure:</t>
          <ol spacing="normal" type="1"><li>
              <t>Select some <tt>time_between_landmarks</tt> duration. Define a series of consecutive, non-overlapping time intervals, each of duration <tt>time_between_landmarks</tt>.</t>
            </li>
            <li>
              <t>At most once per time interval, append the latest checkpoint tree size to the landmark sequence if it is greater than the last landmark's tree size.</t>
            </li>
          </ol>
          <t>To ensure that only active landmarks contain unexpired certificates, set <tt>max_landmarks</tt> to <tt>ceil(max_cert_lifetime / time_between_landmarks) + 1</tt>, where <tt>max_cert_lifetime</tt> is the CA's maximum certificate lifetime.</t>
        </section>
        <section anchor="constructing-landmark-certificates">
          <name>Constructing Landmark Certificates</name>
          <t>Given a TBSCertificateLogEntry in the issuance log and a landmark sequence, a landmark certificate is constructed as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Wait for the first landmark to be allocated that contains the entry.</t>
            </li>
            <li>
              <t>Determine the landmark's subtrees and select the one that contains the entry.</t>
            </li>
            <li>
              <t>Construct a certificate (<xref target="certificate-format"/>) using the selected subtree and no signatures.</t>
            </li>
          </ol>
          <t>Before sending this certificate, the authenticating party SHOULD obtain an application-protocol-specific signal that implies the relying party has been configured with the corresponding landmark. (<xref target="trusted-subtrees"/> defines how relying parties are configured.) The trust anchor ID of the landmark may be used as an efficient identifier in the application protocol. <xref target="use-in-tls"/> discusses how to do this in TLS <xref target="RFC8446"/>.</t>
        </section>
      </section>
      <section anchor="size-estimates">
        <name>Size Estimates</name>
        <t>The inclusion proofs in standalone and landmark certificates scale logarithmically with the size of the subtree. These sizes can be estimated with the CA's issuance rate. The byte counts below assume the issuance log's hash function is SHA-256.</t>
        <t>Some organizations have published statistics which can be used to estimate this rate for the Web PKI. As of June 9th, 2025:</t>
        <ul spacing="normal">
          <li>
            <t><xref target="LetsEncrypt"/> reported around 558,000,000 active certificates for a single CA</t>
          </li>
          <li>
            <t><xref target="MerkleTown"/> reported around 2,100,000,000 unexpired certificates in CT logs, across all CAs</t>
          </li>
          <li>
            <t><xref target="MerkleTown"/> reported an issuance rate of around 444,000 certificates per hour, across all CAs</t>
          </li>
        </ul>
        <t>The current issuance rate across the Web PKI may not necessarily be representative of the Web PKI after a transition to short-lived certificates. Assuming a certificate lifetime of 7 days, and that subscribers will update their certificates 75% of the way through their lifetime (see <xref target="certificate-renewal"/>), every certificate will be reissued every 126 hours. This gives issuance rate estimates of around 4,400,000 certificates per hour and 17,000,000 certificates per hour, for the first two values above. Note the larger estimate is across all CAs, while subtrees would only span one CA.</t>
        <t>Using the per-CA short lifetime estimate, if the CA mints a checkpoint every 2 seconds, standalone certificate subtrees will span around 2,500 certificates, leading to 12 hashes in the inclusion proof, or 384 bytes. Standalone certificates additionally must carry a sufficient set of signatures to meet relying party requirements.</t>
        <t>If a new landmark is allocated every hour, landmark certificate subtrees will span around 4,400,000 certificates, leading to 23 hashes in the inclusion proof, giving an inclusion proof size of 736 bytes, with no signatures. This is significantly smaller than a single ML-DSA-44 signature, 2,420 bytes, and almost ten times smaller than the three ML-DSA-44 signatures necessary to include post-quantum SCTs.</t>
        <t>Proof sizes grow logarithmically, so 32 hashes, or 1024 bytes, is sufficient for subtrees of up to 2<sup>32</sup> (4,294,967,296) certificates.</t>
      </section>
    </section>
    <section anchor="relying-parties">
      <name>Relying Parties</name>
      <t>This section discusses how relying parties verify Merkle Tree Certificates.</t>
      <section anchor="trust-anchors">
        <name>Trust Anchors</name>
        <t>In order to accept certificates from a Merkle Tree CA, a relying party MUST be configured with:</t>
        <ul spacing="normal">
          <li>
            <t>The log ID (<xref target="log-ids"/>)</t>
          </li>
          <li>
            <t>A set of supported cosigners, as pairs of cosigner ID and public key</t>
          </li>
          <li>
            <t>A policy on which combinations of cosigners to accept in a certificate (<xref target="trusted-cosigners"/>)</t>
          </li>
          <li>
            <t>An optional list of trusted subtrees, with their hashes, that are known to be consistent with the relying party's cosigner requirements (<xref target="trusted-subtrees"/>)</t>
          </li>
          <li>
            <t>A list of revoked ranges of indices (<xref target="revocation-by-index"/>)</t>
          </li>
        </ul>
        <t>[[TODO: Define some representation for this. In a trust anchor, there's a lot of room for flexibility in what the client stores. In principle, we could even encode some of this information in an X.509 intermediate certificate, if an application wishes to use this with a delegation model with intermediates, though the security story becomes more complex. Decide how/whether to do that.]]</t>
      </section>
      <section anchor="verifying-certificate-signatures">
        <name>Verifying Certificate Signatures</name>
        <t>When verifying the signature of an X.509 certificate (Step (a)(1) of <xref section="6.1.3" sectionFormat="of" target="RFC5280"/>) whose issuer is a Merkle Tree CA, the relying party performs the following procedure:</t>
        <ol spacing="normal" type="1"><li>
            <t>Check that the TBSCertificate's <tt>signature</tt> field is <tt>id-alg-mtcProof</tt> with omitted parameters. If this check fails, abort this process and fail verification.</t>
          </li>
          <li>
            <t>Decode the <tt>signatureValue</tt> as an MTCProof, as described in <xref target="certificate-format"/>.</t>
          </li>
          <li>
            <t>Let <tt>index</tt> be the certificate's serial number. If <tt>index</tt> is contained in one of the relying party's revoked ranges (<xref target="revocation-by-index"/>), abort this process and fail verification.</t>
          </li>
          <li>
            <t>Construct a TBSCertificateLogEntry as follows:
            </t>
            <ol spacing="normal" type="1"><li>
                <t>Copy the <tt>version</tt>, <tt>issuer</tt>, <tt>validity</tt>, <tt>subject</tt>, <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, and <tt>extensions</tt> fields from the TBSCertificate.</t>
              </li>
              <li>
                <t>Set <tt>subjectPublicKeyAlgorithm</tt> to the <tt>algorithm</tt> field of the <tt>subjectPublicKeyInfo</tt>.</t>
              </li>
              <li>
                <t>Set <tt>subjectPublicKeyInfoHash</tt> to the hash of the DER encoding of <tt>subjectPublicKeyInfo</tt>.</t>
              </li>
            </ol>
          </li>
          <li>
            <t>Construct a MerkleTreeCertEntry of type <tt>tbs_cert_entry</tt> with contents the TBSCertificateLogEntry. Let <tt>entry_hash</tt> be the hash of the entry, <tt>MTH({entry}) = HASH(0x00 || entry)</tt>, as defined in <xref section="2.1.1" sectionFormat="of" target="RFC9162"/>.</t>
          </li>
          <li>
            <t>Let <tt>expected_subtree_hash</tt> be the result of evaluating the MTCProof's <tt>inclusion_proof</tt> for entry <tt>index</tt>, with hash <tt>entry_hash</tt>, of the subtree described by the MTCProof's <tt>start</tt> and <tt>end</tt>, following the procedure in <xref target="evaluating-a-subtree-inclusion-proof"/>. If evaluation fails, abort this process and fail verification.</t>
          </li>
          <li>
            <t>If <tt>[start, end)</tt> matches a trusted subtree (<xref target="trusted-subtrees"/>), check that <tt>expected_subtree_hash</tt> is equal to the trusted subtree's hash. Return success if it matches and failure if it does not.</t>
          </li>
          <li>
            <t>Otherwise, check that the MTCProof's <tt>signatures</tt> contain a sufficient set of valid signatures from cosigners to satisfy the relying party's cosigner requirements (<xref target="trusted-cosigners"/>). Unrecognized cosigners MUST be ignored. Signatures are verified as described in <xref target="signature-format"/>. The <tt>hash</tt> field of the MTCSubtree is set to <tt>expected_subtree_hash</tt>.</t>
          </li>
        </ol>
        <t>This procedure only replaces the signature verification portion of X.509 path validation. The relying party MUST continue to perform other checks, such as checking expiry.</t>
        <t>In this procedure, <tt>entry_hash</tt> can equivalently be computed in a single pass from the DER-encoded TBSCertificate, without storing the full TBSCertificateLogEntry or MerkleTreeCertEntry in memory:</t>
        <ol spacing="normal" type="1"><li>
            <t>Initialize a hash instance.</t>
          </li>
          <li>
            <t>Write the big-endian, two-byte <tt>tbs_cert_entry</tt> value to the hash.</t>
          </li>
          <li>
            <t>Write the TBSCertificate contents octets to the hash, up to the <tt>subjectPublicKeyInfo</tt> field.</t>
          </li>
          <li>
            <t>Write the <tt>subjectPublicKeyInfo</tt>'s <tt>algorithm</tt> field to the hash.</t>
          </li>
          <li>
            <t>Write the octet 0x04 to the hash. This is an OCTET STRING identifer.</t>
          </li>
          <li>
            <t>Write the octet L to the hash, where L is the hash length. (This assumes L is at most 127.)</t>
          </li>
          <li>
            <t>Write H to the hash, where H is the hash of the entire <tt>subjectPublicKeyInfo</tt> field.</t>
          </li>
          <li>
            <t>Write the remainder of the TBSCertificate contents octets to the hash, starting just after the <tt>subjectPublicKeyInfo</tt> field.</t>
          </li>
          <li>
            <t>Finalize the hash and set <tt>entry_hash</tt> to the result.</t>
          </li>
        </ol>
        <t>This is possible because the structure in <xref target="log-entries"/> omits the TBSCertificateLogEntry's identifier and length octets.</t>
      </section>
      <section anchor="trusted-cosigners">
        <name>Trusted Cosigners</name>
        <t>A relying party's cosigner policy determines the sets of cosigners that must sign a view of the issuance log before it is trusted.</t>
        <t>This document does not prescribe a particular policy, but gives general guidance. Relying parties MAY implement policies other than those described below, and MAY incorporate cosigners acting in roles not described in this document.</t>
        <t>In picking trusted cosigners, the relying party SHOULD ensure the following security properties:</t>
        <dl>
          <dt>Authenticity:</dt>
          <dd>
            <t>The relying party only accepts entries certified by the CA</t>
          </dd>
          <dt>Transparency:</dt>
          <dd>
            <t>The relying party only accepts entries that are publicly accessible, so that monitors, particularly the subject of the certificate, can notice any unauthorized certificates</t>
          </dd>
        </dl>
        <t>Relying parties SHOULD ensure authenticity by requiring a signature from the most recent CA cosigner key. If the CA is transitioning from an old to new key, the relying party SHOULD accept both keys until certificates that predate the new key expire. This is analogous to the signature in a traditional X.509 certificate.</t>
        <t>While a CA signature is sufficient to prove a subtree came from the CA, this is not enough to ensure the certificate is visible to monitors. A misbehaving CA might not operate the log correctly, either presenting inconsistent versions of the log to relying parties and monitors, or refusing to publish some entries.</t>
        <t>To mitigate this, relying parties SHOULD ensure transparency by requiring a quorum of signatures from additional cosigners. At minimum, these cosigners SHOULD enforce a consistent view of the log. For example, <xref target="TLOG-WITNESS"/> describes a lightweight "witness" cosigner role that checks this with consistency proofs. This is not sufficient to ensure durable logging. <xref target="revocation-by-index"/> discusses mitigations for this. Alternatively, a relying party MAY require that cosigners serve a copy of the log, in addition to enforcing a consistent view. For example, <xref target="TLOG-MIRROR"/> describes a "mirror" cosigner role.</t>
        <t>Relying parties MAY accept the same set of additional cosigners across issuance logs.</t>
        <t>Cosigner roles are extensible without changes to certificate verification itself. Future specifications and individual deployments MAY define other cosigner roles to incorporate in relying party policies.</t>
        <t><xref target="choosing-cosigners"/> discusses additional deployment considerations in cosigner selection.</t>
      </section>
      <section anchor="trusted-subtrees">
        <name>Trusted Subtrees</name>
        <t>As an optional optimization, a relying party MAY incorporate a periodically updated, predistributed list of active landmark subtrees, determined as described in <xref target="landmark-tree-sizes"/>. The relying party configures these as trusted subtrees, allowing it to accept landmark certificates (<xref target="landmark-certificates"/>) constructed against those subtrees.</t>
        <t>Before configuring the subtrees as trusted, the relying party MUST obtain assurance that each subtree is consistent with checkpoints observed by a sufficient set of cosigners (see <xref target="cosigners"/>) to meet its cosigner requirements. It is not necessary that the cosigners have generated signatures over the specific subtrees, only that they are consistent.</t>
        <t>This criteria can be checked given:</t>
        <ul spacing="normal">
          <li>
            <t>Some <em>reference checkpoint</em> that contains the latest landmark</t>
          </li>
          <li>
            <t>For each cosigner, either:
            </t>
            <ul spacing="normal">
              <li>
                <t>A cosignature on the reference checkpoint</t>
              </li>
              <li>
                <t>A cosigned checkpoint containing the referenced checkpoint and a valid Merkle consistency proof (<xref section="2.1.4" sectionFormat="of" target="RFC9162"/>) between the two</t>
              </li>
            </ul>
          </li>
          <li>
            <t>For each subtree, a valid subtree consistency proof (<xref target="subtree-consistency-proofs"/>) between the subtree and the reference checkpoint</t>
          </li>
        </ul>
        <t>[[TODO: The subtree consistency proofs have many nodes in common. It is possible to define a single "bulk consistency proof" that verifies all the hashes at once, but it's a lot more complex.]]</t>
        <t>This document does not prescribe how relying parties obtain this information. A relying party MAY, for example, use an application-specific update service, such as the services described in <xref target="CHROMIUM"/> and <xref target="FIREFOX"/>. If the relying party considers the service sufficiently trusted (e.g. if the service provides the trust anchor list or certificate validation software), it MAY trust the update service to perform these checks.</t>
        <t>The relying party SHOULD incorporate its trusted subtree configuration in application-protocol-specific certificate selection mechanisms, to allow an authenticating party to select a landmark certificate. The trust anchor IDs of the landmarks may be used as efficient identifiers in the application protocol. <xref target="use-in-tls"/> discusses how to do this in TLS <xref target="RFC8446"/>.</t>
      </section>
      <section anchor="revocation-by-index">
        <name>Revocation by Index</name>
        <t>For each supported Merkle Tree CA, the relying party maintains a list of revoked ranges of indices. This allows a relying party to efficiently revoke entries of an issuance log, even if the contents are not necessarily known. This may be used to mitigate the security consequences of misbehavior by a CA, or other parties in the ecosystem.</t>
        <t>When a relying party is first configured to trust a CA, it SHOULD be configured to revoke all entries from zero up to but not including the first available unexpired certificate at the time. This revocation SHOULD be periodically updated as entries expire and logs are pruned (<xref target="log-pruning"/>). In particular, when CAs prune entries, relying parties SHOULD be updated to revoke all newly unavailable entries. This gives assurance that, even if some unavailable entry had not yet expired, the relying party will not trust it. It also allows monitors to start monitoring a log without processing expired entries.</t>
        <t>A misbehaving CA might correctly construct a globally consistent log, but refuse to make some entries or intermediate nodes available. Consistency proofs between checkpoints and subtrees would pass, but monitors cannot observe the entries themselves. Relying parties whose cosigner policies (<xref target="trusted-cosigners"/>) do not require durable logging (e.g. via <xref target="TLOG-MIRROR"/>) are particularly vulnerable to this. In this case, the indices of the missing entries will still be known, so relying parties can use this mechanism to revoke the unknown entries, possibly as an initial, targeted mitigation before complete CA removal.</t>
        <t>When a CA is found to be untrustworthy, relying parties SHOULD remove trust in that CA. To minimize the compatibility impact of this mitigation, index-based revocation can be used to only distrust entries after some index, while leaving existing entries accepted. This is analogous to the <xref target="SCTNotAfter"/> mechanism used in some PKIs.</t>
      </section>
    </section>
    <section anchor="use-in-tls">
      <name>Use in TLS</name>
      <t>Most X.509 fields such as subjectPublicKeyInfo and X.509 extensions such as subjectAltName are unmodified in Merkle Tree certificates. They apply to TLS-based applications as in a traditional X.509 certificate. The primary new considerations for use in TLS are:</t>
      <ul spacing="normal">
        <li>
          <t>Whether the authenticating party should send a certificate from one Merkle Tree CA, another Merkle Tree CA, or a traditional X.509 CA</t>
        </li>
        <li>
          <t>Whether the authenticating party should send a standalone or landmark certificate</t>
        </li>
        <li>
          <t>What the relying party should communicate to the authenticating party to help it make this decision</t>
        </li>
      </ul>
      <t>Certificate selection in TLS, described in Section <xref target="RFC8446" section="4.4.2.2" sectionFormat="bare"/> and Section <xref target="RFC8446" section="4.4.2.3" sectionFormat="bare"/> of <xref target="RFC8446"/>, incorporates both explicit relying-party-provided information in the ClientHello and CertificateRequest messages and implicit deployment-specific assumptions. This section describes a RECOMMENDED integration of Merkle Tree certificates into TLS trust anchor IDs (<xref target="I-D.ietf-tls-trust-anchor-ids"/>), but applications MAY use application-specific criteria in addition to, or instead of, this recommendation.</t>
      <section anchor="extensions-to-trust-anchor-ids">
        <name>Extensions to Trust Anchor IDs</name>
        <t>[[TODO: Move this into draft-ietf-tls-trust-anchor-ids once the PLANTS WG is further along. See https://github.com/tlswg/tls-trust-anchor-ids/issues/62]]</t>
        <t>A TLS deployment may know that all relying parties that accept one trust anchor must additionally accept another trust anchor, or desire identifiers for groups of related trust anchors. For example, in this document, the relying party will recognize up to <tt>max_landmark</tt> consecutive landmarks, so the latest landmark can be used to represent the range.</t>
        <t>Incorporating this knowledge into certificate selection can optimize the ClientHello or CertificateRequest extension. It is RECOMMENDED that this information be provisioned alongside the certificate, e.g. provided by the CA. This section extends the CertificatePropertyList structure (<xref section="6" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>) with the <tt>additional_trust_anchor_ranges</tt> certificate property to do this:</t>
        <sourcecode type="tls-presentation"><![CDATA[
enum {
    additional_trust_anchor_ranges(1), (2^16-1)
} CertificatePropertyType;

struct {
    TrustAnchorID base;
    uint64 min;
    uint64 max;
} TrustAnchorRange;

TrustAnchorRange TrustAnchorRangeList<1..2^16-1>;
]]></sourcecode>
        <t>A trust anchor range <tt>r</tt> is said to <em>contain</em> a trust anchor ID <tt>id</tt>, if <tt>id</tt>, as a relative OID, is the concatenation of <tt>r.base</tt> and some integer component between <tt>min</tt> and <tt>max</tt>, inclusive.</t>
        <t>The following procedure can be used to perform this check. It succeeds if <tt>r</tt> contains <tt>id</tt> and fails otherwise:</t>
        <ol spacing="normal" type="1"><li>
            <t>Check that <tt>r.base</tt> does not end in the middle of an OID component. That is, check that the most-significant bit of the last byte of <tt>r.base</tt> is unset. If it is set, fail the procedure.</t>
          </li>
          <li>
            <t>Check that <tt>r.base</tt> is a prefix of <tt>id</tt>. If not, fail the procedure. Let <tt>rest</tt> be <tt>id</tt> with the <tt>r.base</tt> prefix removed.</t>
          </li>
          <li>
            <t>Decode <tt>rest</tt> as a minimally-encoded, big-endian, base-128 OID component as follows:
            </t>
            <ol spacing="normal" type="1"><li>
                <t>If <tt>rest</tt> is empty, fail the procedure.</t>
              </li>
              <li>
                <t>If the most-significant bit of the last byte of <tt>rest</tt> is set, fail the procedure.</t>
              </li>
              <li>
                <t>If the most-significant bit of any other byte of <tt>rest</tt> is unset, fail the procedure.</t>
              </li>
              <li>
                <t>If the first byte of <tt>rest</tt> is 0x80, fail the procedure.</t>
              </li>
              <li>
                <t>Set <tt>v</tt> to zero. Throughout this procedure, <tt>v</tt> will be less than 2<sup>64</sup>.</t>
              </li>
              <li>
                <t>For each byte <tt>b</tt> of <tt>rest</tt>:
                </t>
                <ol spacing="normal" type="1"><li>
                    <t>If <tt>v</tt> is greater than or equal to 2<sup>57</sup>, fail the procedure.</t>
                  </li>
                  <li>
                    <t>Set <tt>v</tt> to <tt>(v &lt;&lt; 7) + (b &amp; 127)</tt>.</t>
                  </li>
                </ol>
              </li>
            </ol>
          </li>
          <li>
            <t>Check if <tt>min &lt;= v &lt;= max</tt>. If this is not true, fail the procedure. Otherwise, the procedure succeeds.</t>
          </li>
        </ol>
        <t><xref section="4.2" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/> is updated as follows. If the ClientHello or CertificateRequest contains a <tt>trust_anchors extension</tt>, the authenticating party SHOULD send a certification path such that one of the following is true:</t>
        <ul spacing="normal">
          <li>
            <t>The certification path's trust anchor ID appears in the relying party's <tt>trust_anchors</tt> extension, or</t>
          </li>
          <li>
            <t>One of the certification path's additional trust anchor ranges contains some ID in the relying party's <tt>trust_anchors</tt> extension</t>
          </li>
        </ul>
        <t>Trust anchor ranges do not impact an authenticating party's list of available trust anchors in EncryptedExtensions (see <xref section="4.3" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>) or the HTTPS/SVCB record (see <xref section="5" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>). Those continue to reference the single trust anchor ID that corresponds to each certificate.</t>
        <t>In applications that use additional trust anchor ranges, relying parties MAY send a single trust anchor ID to represent all certificates whose trust anchor ranges contain that trust anchor ID. This includes:</t>
        <ul spacing="normal">
          <li>
            <t>Trust anchors that are sent in response to an EncryptedExtensions or HTTPS/SVCB message from the authenticating party</t>
          </li>
          <li>
            <t>Trust anchors that are sent in <tt>trust_anchors</tt>, independently of the authenticating party</t>
          </li>
        </ul>
      </section>
      <section anchor="using-trust-anchor-ids">
        <name>Using Trust Anchor IDs</name>
        <t>A standalone certificate will generally be accepted by relying parties that trust the issuing CA. To determine this, a standalone certificate has a trust anchor ID of the corresponding log ID (<xref target="log-ids"/>). The authenticating party can obtain this information either by parsing the certificate's issuer field or via out-of-band information as described in <xref section="3.2" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>. Authenticating and relying parties SHOULD use the <tt>trust_anchors</tt> extension to determine whether the standalone certificate would be acceptable.</t>
        <t>[[TODO: Ideally we would negotiate cosigners. https://github.com/tlswg/tls-trust-anchor-ids/issues/54 has a sketch of how one might do this, though other designs are possible. Negotiating cosigners allows the ecosystem to manage cosigners efficiently, without needing to collect every possible cosignature and send them all at once. This is wasteful, particularly with post-quantum algorithms.]]</t>
        <t>A standalone certificate MAY also be sent without explicit relying party trust signals, however doing so means the authenticating party implicitly assumes the relying party trusts the issuing CA. This may be viable if, for example, the CA is relatively ubiquitous among supported relying parties.</t>
        <t>A landmark certificate, defined against landmark number <tt>L</tt>, has a trust anchor ID of <tt>base_id</tt>, concatenated with <tt>L</tt>, as described in <xref target="landmark-tree-sizes"/>, and SHOULD be provisioned with this value. Additionally, relying parties that trust later landmarks may also be assumed to trust landmark <tt>L</tt>, so a landmark certificate SHOULD also be provisioned with an additional trust anchor range whose <tt>base</tt> is <tt>base_id</tt>, <tt>min</tt> is <tt>L</tt>, and <tt>max</tt> is <tt>L + max_landmarks - 1</tt>.</t>
        <t>A relying party that has been configured with trusted subtrees (<xref target="trusted-subtrees"/>) derived from a set of landmarks SHOULD configure the <tt>trust_anchors</tt> extension to advertise the highest supported landmark in the set. The selection procedures defined in <xref target="I-D.ietf-tls-trust-anchor-ids"/> and <xref target="extensions-to-trust-anchor-ids"/> will then correctly determine whether a landmark certificate is compatible with the relying party.</t>
        <t>When both a landmark and standalone certificate are supported by a relying party, an authenticating party SHOULD preferentially use the landmark certificate. A landmark certificate asserts the same information as its standalone counterpart, but is expected to be smaller. An authenticating party SHOULD NOT send a landmark certificate without a signal that the relying party trusts the corresponding landmark subtree. Even if the relying party is assumed to trust the issuing CA, the relying party may not have sufficiently up-to-date trusted subtrees.</t>
      </section>
    </section>
    <section anchor="acme-extensions">
      <name>ACME Extensions</name>
      <t>This section describes how to issue Merkle Tree certificates using ACME <xref target="RFC8555"/>.</t>
      <t>When downloading the certificate (<xref section="7.4.2" sectionFormat="of" target="RFC8555"/>), ACME clients supporting Merkle Tree certificates SHOULD send "application/pem-certificate-chain-with-properties" in their Accept header (<xref section="12.5.1" sectionFormat="of" target="RFC9110"/>). ACME servers issuing Merkle Tree certificates SHOULD then respond with that content type and include trust anchor ID information as described in <xref section="6" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/>. <xref target="use-in-tls"/> decribes the trust anchor ID assignments for standalone and landmark certificates.</t>
      <t>When processing an order for a Merkle Tree certificate, the ACME server moves the order to the "valid" state once the corresponding entry is sequenced in the issuance log. The order's certificate URL then serves the standalone certificate, constructed as described in <xref target="standalone-certificates"/>.</t>
      <t>The standalone certificate response SHOULD additionally carry an alternate URL for the landmark certificate, as described <xref section="7.4.2" sectionFormat="of" target="RFC8555"/>. Before the landmark certificate is available, the alternate URL SHOULD return a HTTP 503 (Service Unavailable) response, with a Retry-After header (<xref section="10.2.3" sectionFormat="of" target="RFC9110"/>) estimating when the certificate will become available. Once the next landmark is allocated, the ACME server constructs a landmark certificate, as described in <xref target="landmark-certificates"/> and serves it from the alternate URL.</t>
      <t>ACME clients supporting Merkle Tree certificates SHOULD support fetching alternate chains. If an alternate chain returns an HTTP 503 with a Retry-After header, as described above, the client SHOULD retry the request at the specified time.</t>
    </section>
    <section anchor="deployment-considerations">
      <name>Deployment Considerations</name>
      <section anchor="operational-costs">
        <name>Operational Costs</name>
        <section anchor="certification-authority-costs">
          <name>Certification Authority Costs</name>
          <t>While Merkle Tree certificates expect CAs to operate logs, the costs of these logs are expected to be much lower than a CT log from <xref target="RFC6962"/> or <xref target="RFC9162"/>:</t>
          <t><xref target="publishing-logs"/> does not constrain the API to the one defined in <xref target="RFC6962"/> or <xref target="RFC9162"/>. If the PKI uses a tile-based protocol, such as <xref target="TLOG-TILES"/>, the issuance log benefits from the improved caching properties of such designs.</t>
          <t>Unlike a CT log, an issuance log does not have public submission APIs. Log entries are only added by the CA directly. Costs are thus expected to scale with the CA's own issuance.</t>
          <t>A CA only needs to produce a digital signature for every checkpoint, rather than for every certificate. The lower signature rate requirements could allow more secure and/or economical key storage choices.</t>
          <t>Individual entries are kept small and do not scale with public key or signature sizes. This mitigates growth from post-quantum algorithms. Public keys in entries are replaced with fixed-sized hashes. There are no signatures in entries themselves, and only signatures on the very latest checkpoint are retained. Every new checkpoint completely subsumes the old checkpoint, so there is no need to retain older signatures. Likewise, a subtree is only signed if contained in another signed checkpoint.</t>
          <t>Log pruning (<xref target="log-pruning"/>) allows a long-lived log to serve only the more recent entries, scaling with the size of the retention window, rather than the log's total lifetime.</t>
          <t>Mirrors of the log can also reduce CA bandwidth costs, because monitors can fetch data from mirrors instead of CAs directly. In PKIs that deploy mirrors as part of cosigner policies, relying parties could set few availability requirements on CAs, as described in <xref target="log-availability"/>.</t>
        </section>
        <section anchor="cosigner-costs">
          <name>Cosigner Costs</name>
          <t>The costs of cosigners vary by cosigner role. A consistency-checking cosigner, such as <xref target="TLOG-WITNESS"/>, requires very little state and can be run with low cost.</t>
          <t>A mirroring cosigner, such as <xref target="TLOG-MIRROR"/>, performs a role comparable to CT logs, but several of the cost-saving properties in <xref target="certification-authority-costs"/> also apply: improved protocols, smaller entries, less frequent signatures, and log pruning. While a mirror does need to accommodate another party's (the CA's) growth rate, it grows only from new issuances from that one CA. If one CA's issuance rate exceeds the mirror's capacity, that does not impact the mirror's copies of other CAs. Mirrors also do not need to defend against a client uploading a large number of existing certificates all at once. Submissions are naturally batched and serialized.</t>
        </section>
        <section anchor="monitor-costs">
          <name>Monitor Costs</name>
          <t>In a CT-based PKI, every log carries a potentially distinct subset of active certificates. Monitors must check the contents of every CT log. At the same time, certificates are commonly synchronized between CT logs. As a result, a monitor will typically download each certificate multiple times, once for every log. In Merkle Tree Certificates, each entry appears in exactly one log. A relying party might require a log to be covered by a quorum of mirrors, but each mirror is cryptographically verified to serve the same contents. Once a monitor has obtained some entry from one mirror, it does not need to download it from the others.</t>
          <t>In addition to downloading each entry only once, the entries themselves are smaller, as discussed in <xref target="certification-authority-costs"/>.</t>
        </section>
      </section>
      <section anchor="choosing-cosigners">
        <name>Choosing Cosigners</name>
        <t>In selecting trusted cosigners and cosigner requirements (<xref target="trusted-cosigners"/>), relying parties navigate a number of trade-offs:</t>
        <t>A consistency-checking cosigner, such as <xref target="TLOG-WITNESS"/>, is inexpensive to run, but does not guarantee durable logging. A mirroring cosigner is more expensive and may take longer to cosign structures. Requiring a mirror signature provides stronger guarantees to the relying party, which in turn can reduce the requirements on CAs (see <xref target="log-availability"/>), however it may cause certificate issuance to take longer. That said, mirrors are comparable to CT logs, if not cheaper (see <xref target="operational-costs"/>), so they may be appropriate in PKIs where running CT logs is already viable.</t>
        <t>Relying parties that require larger quorums of trusted cosigners can reduce the trust placed in any individual cosigner. However, larger quorums result in larger, more expensive standalone certificates. The cost of standalone certificates will depend on how frequently the landmark optimization occurs in a given PKI. Conversely, relying parties that require smaller quorums have smaller standalone certificates, but place more trust in their cosigners.</t>
        <t>Relying party policies also impact monitor operation. If a relying party accepts any one of three cosigners, monitors SHOULD check the checkpoints of all three. Otherwise, a malicious CA may send different split views to different cosigners. More generally, monitors SHOULD check the checkpoints in the union of all cosigners trusted by all supported relying parties. This is an efficient check because, if the CA is operating correctly, all cosigners will observe the same tree. Thus the monitor only needs to check consistency proofs between the checkpoints, and check the log contents themselves once. Monitors MAY also rely on other parties in the transparency ecosystem to perform this check.</t>
      </section>
      <section anchor="log-availability">
        <name>Log Availability</name>
        <t>CAs and mirrors are expected to serve their log contents over HTTP. It is possible for the contents to be unavailable, either due to temporary service outage or because the log has been pruned (<xref target="log-pruning"/>). If some resources are unavailable, they may not be visible to monitors.</t>
        <t>As in CT, PKIs that deploy Merkle Tree certificates SHOULD establish availability policies. These policies SHOULD be adhered to by trusted CAs and mirrors, and enforced by relying party vendors as a condition of trust. Exact availability policies for these services are out of scope for this document, but this section provides some general guidance.</t>
        <t>Availability policies SHOULD specify how long an entry must be made available, before a CA or mirror is permitted to prune the entry. It is RECOMMENDED to define this using a <em>retention period</em>, which is some time after the entry has expired. In such a policy, an entry could only be pruned if it, and all preceding entries, have already expired for the retention period. Policies MAY opt to set different retention periods between CAs and mirrors. Permitting limited log retention is analogous to the CT practice of temporal sharding <xref target="CHROME-CT"/>, except that a pruned issuance log remains compatible with older, unupdated relying parties.</t>
        <t>Such policies impact monitors. If the retention period is, e.g. 6 months, this means that monitors are expected to check entries of interest within 6 months. It also means that a new monitor may only be aware of a 6 month history of entries issued for a particular domain.</t>
        <t>If historical data is not available to verify the retention period, such as information in another mirror or a trusted summary of expiration dates of entries, it may not be possible to confirm correct behavior. This is mitigated by the revocation process described in <xref target="revocation-by-index"/>: if a CA were to prune a forward-dated entry and, in the 6 months when the entry was available, no monitor noticed the unusual expiry, an updated relying party would not accept it anyway.</t>
        <t>The log pruning process simply makes some resources unavailable. Availability policies SHOULD constrain log pruning in the same way as general resource availability. That is, if it would be a policy violation for the log to fail to serve a resource, it should also be a policy violation for the log to prune such that the resource is removed, and vice versa.</t>
        <t>PKIs that require mirror cosignatures (<xref target="trusted-cosigners"/>) can impose minimal to no availability requirements on CAs without compromising transparency goals. If a CA never makes an entry available, mirrors will be unable to update. This will prevent relying parties from accepting the undisclosed entries. However, a CA that is persistently unavailable may not offer sufficient benefit to be used by authenticating parties or trusted by relying parties.</t>
        <t>However, if a mirror's interface becomes unavailable, monitors may be unable to check for unauthorized issuance, if the entries are not available in another mirror. This does compromise transparency goals. As such, availability policies SHOULD set availability expectations on mirrors. This can also be mitigated by using multiple mirrors, either directly enforced in cosigner requirements, or by keeping mirrors up-to-date with each other.</t>
        <t>In PKIs that do not require mirroring cosigners, the CA's serving endpoint is more crucial for monitors. Such PKIs SHOULD set availability requirements on CAs.</t>
        <t>In each of these cases, availability failures can be mitigated by revoking the unavailable entries by index, as described in <xref target="revocation-by-index"/>, likely as a first step in a broader distrust.</t>
      </section>
      <section anchor="certificate-renewal">
        <name>Certificate Renewal</name>
        <t>When an authenticating party requests a certificate, the landmark certificate will not be available until the next landmark is ready. From there, the landmark certificate will not be available until relying parties receive new trusted subtrees.</t>
        <t>To maximize coverage of the landmark certificate optimization, authenticating parties performing routine renewal SHOULD request a new Merkle Tree certificate before the previous Merkle Tree certificate expires. Renewing around 75% of the way through the previous certificate's lifetime is RECOMMENDED. Authenticating parties additionally SHOULD retain both the new and old certificates in the certificate set until the old certificate expires. As the new subtrees are delivered to relying parties, certificate negotiation will transition relying parties to the new certificate, while retaining the old certificate for relying parties that are not yet updated.</t>
        <t>The above also applies if the authenticating party is performing a routine key rotation alongside the routine renewal. In this case, certificate negotiation would pick the key as part of the certificate selection. This slightly increases the lifetime of the old key but maintains the size optimization continuously.</t>
        <t>If the service is rotating keys in response to a key compromise, this option is not appropriate. Instead, the service SHOULD immediately discard the old key and request a standalone certificate and the revocation of the previous certificate. This will interrupt the size optimization until the new landmark certificate is available and relying parties are updated.</t>
      </section>
      <section anchor="multiple-ca-keys">
        <name>Multiple CA Keys</name>
        <t>The separation between issuance logs and CA cosigners gives CAs additional flexibility in managing keys. A CA operator wishing to rotate keys, e.g. to guard against compromise of older key material, or upgrade to newer algorithms, could retain the same issuance log and sign its checkpoints and subtrees with both keys in parallel, until relying parties are all updated. Older relying parties would verify the older signatures, while newer relying parties would verify the newer signatures. A cosignature negotiation mechanism in the application protocol (see <xref target="use-in-tls"/>) would avoid using extra bandwidth for the two signatures.</t>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>The Privacy Considerations described in <xref section="8" sectionFormat="of" target="I-D.ietf-tls-trust-anchor-ids"/> apply to their use with Merkle Tree Certificates.</t>
      <t>In particular, relying parties that share an update process for trusted subtrees (<xref target="trusted-subtrees"/>) will fetch the same stream of updates. However, updates may reach different users at different times, resulting in some variation across users. This variation may contribute to a fingerprinting attack <xref target="RFC6973"/>. If the Merkle Tree CA trust anchors are sent unconditionally in <tt>trust_anchors</tt>, this variation will be passively observable. If they are sent conditionally, e.g. with the DNS mechanism, the trust anchor list will require active probing.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="authenticity">
        <name>Authenticity</name>
        <t>A key security requirement of any PKI scheme is that relying parties only accept assertions that were certified by a trusted certification authority. Merkle Tree certificates achieve this by ensuring the relying party only accepts authentic subtree hashes:</t>
        <ul spacing="normal">
          <li>
            <t>In standalone certificates, the relying party's cosigner requirements (<xref target="trusted-cosigners"/>) are expected to include some signature by the CA's cosigner. The CA's cosigner (<xref target="certification-authority-cosigners"/>) is defined to certify the contents of every checkpoint and subtree that it signs.</t>
          </li>
          <li>
            <t>In landmark certificates, the cosigner requirements are checked ahead of time, when the trusted subtrees are predistributed (<xref target="trusted-subtrees"/>).</t>
          </li>
        </ul>
        <t>Given a subtree hash computed over entries that the CA certified, it must be computationally infeasible to construct an entry not on this list, and an inclusion proof, such that inclusion proof verification succeeds. This requires using a collision-resistant hash in the Merkle Tree construction.</t>
        <t>Log entries contain public key hashes. It must additionally be computationally infeasible to compute a public key whose hash matches the entry, other than the intended public key. This also requires a collision-resistant hash.</t>
      </section>
      <section anchor="transparency">
        <name>Transparency</name>
        <t>The transparency mechanisms in this document do not prevent a CA from issuing an unauthorized certificate. Rather, they provide comparable security properties as Certificate Transparency <xref target="RFC9162"/> in ensuring that all certificates are either rejected by relying parties, or visible to monitors and, in particular, the subject of the certificate.</t>
        <t>Compared to Certificate Transparency, some of the responsibilities of a log have moved to the CA. All signatures generated by the CA in this system are assertions about some view of the CA's issuance log. However, a CA does not need to function correctly to ensure transparency properties. Relying parties are expected to require a quorum of additional cosigners, which together enforce properties of the log (<xref target="trusted-cosigners"/>) and prevent or detect CA misbehavior:</t>
        <t>A CA might violate the append-only property of its log and present different views to different parties. However, each individual cosigner will only follow a single append-only view of the log history. Provided the cosigners are correctly operated, relying parties and monitors will observe consistent views. Views that were not cosigned at all may not be detected, but they also will not be accepted by relying parties.</t>
        <t>If the CA sends one view to some cosigners and another view to other cosigners, it is possible that multiple views will be accepted by relying parties. However, in that case monitors will observe that cosigners do not match each other. Relying parties can then react by revoking the inconsistent indices (<xref target="revocation-by-index"/>), and likely removing the CA. If the cosigners are mirrors, the underlying entries in both views will also be visible.</t>
        <t>A CA might correctly construct its log, but refuse to serve some unauthorized entry, e.g. by feigning an outage or pruning the log outside the retention policy (<xref target="log-availability"/>). If the relying party requires cosignatures from trusted mirrors, the entry will either be visible to monitors in the mirrors, or have never reached a mirror. In the latter case, the entry will not have been cosigned, so the relying party would not accept it. If the relying party accepts log views without a trusted mirror, the unauthorized entry may not be available. However, the existence of <em>some</em> entry at that index will be visible, so monitors will know the CA is failing to present an entry. Relying parties can then react by revoking the undisclosed entries by index (<xref target="revocation-by-index"/>), and likely removing the CA.</t>
      </section>
      <section anchor="public-key-hashes">
        <name>Public Key Hashes</name>
        <t>Unlike Certificate Transparency, the mechanisms in this document do not provide the subject public keys, only the hashed values. This is intended to reduce log serving costs, particularly with large post-quantum keys. As a result, monitors look for unrecognized hashes instead of unrecognized keys. Any unrecognized hash, even if the preimage is unknown, indicates an unauthorized certificate.</t>
        <t>This optimization complicates studies of weak public keys, e.g. <xref target="SharedFactors"/>. Such studies will have to retrieve the public keys separately, such as by connecting to the TLS servers, or fetching from the CA if it retains the unhashed key. This document does not define a mechanism for doing this, or require that CAs or mirrors retain unhashed keys. The transparency mechanisms in this protocol are primarily intended to allow monitors to observe certificate issuance.</t>
      </section>
      <section anchor="non-repudiation">
        <name>Non-Repudiation</name>
        <t>When a monitor finds an unauthorized certificate issuance in a log or mirror, it must be possible to prove the CA indeed certified the information in the entry. However, only the latest checkpoint signature is retained by the transparency ecosystem, so it may not be possible to reconstruct the exact certificate seen by relying parties.</t>
        <t>However, per <xref target="certification-authority-cosigners"/>, any checkpoint signature is a binding assertion by the CA that it has certified every entry in the checkpoint. Thus, given <em>any</em> signed checkpoint that contains the unauthorized entry, a Merkle inclusion proof (<xref section="2.1.3" sectionFormat="of" target="RFC9162"/>) is sufficient to prove the CA issued the entry. This is analogous to how, in <xref section="3.2.1" sectionFormat="of" target="RFC9162"/>, CAs are held accountable for signed CT precertificates.</t>
        <t>The transparency ecosystem does not retain unhashed public keys, so it also may not be possible to construct a complete certificate from the checkpoint signature and inclusion proof. However, if the log entry's <tt>subjectPublicKeyInfoHash</tt> does not correspond to an authorized key for the subject of the certificate, the entry is still unauthorized. A Merkle Tree CA is held responsible for all log entries it certifies, whether or not the preimage of the hash is known.</t>
      </section>
      <section anchor="new-log-entry-types">
        <name>New Log Entry Types</name>
        <t>MerkleTreeCertEntry (<xref target="log-entries"/>) is extensible and permits protocol extensions to define new formats for the CA to certify. This means older CAs, cosigners, relying parties, and monitors might interact with new entries:</t>
        <t><xref target="log-entries"/> and <xref target="certification-authority-cosigners"/> forbid a CA from logging or signing entries that it does not recognize. A CA cannot faithfully claim to certify information if it does not understand it. This is analogous to how a correctly-operated X.509 CA can never sign an unrecognized X.509 extension.</t>
        <t>External cosigners may or may not interact with the unrecognized entries. <xref target="TLOG-MIRROR"/> and <xref target="TLOG-WITNESS"/> describe cosigners whose roles do not interpret the contents of log entries. New entry types MAY be added without updating them. If a cosigner role does interpret a log entry, it MUST define how it interacts with unknown ones.</t>
        <t>If a relying party trusts an issuance log, but the issuance log contains an unrecognized entry, the entry will not cause it to accept an unexpected certificate. In <xref target="verifying-certificate-signatures"/>, the relying party constructs the MerkleTreeCertEntry that it expects. The unrecognized entry will have a different <tt>type</tt> value, so the proof will never succeed, assuming the underlying hash function remains collision-resistant.</t>
        <t>If a monitor observes an entry with unknown type, it may not be able to determine if it is of interest. For example, it may be unable to tell whether it covers some relevant DNS name. Until the monitor is updated to reflect the current state of the PKI, the monitor may be unable to detect all misissued certificates.</t>
        <t>This situation is analogous to the addition of a new X.509 extension. When relying parties add support for log entry types or new X.509 extensions, they SHOULD coordinate with monitors to ensure the transparency ecosystem is able to monitor the new formats.</t>
      </section>
      <section anchor="certificate-malleability">
        <name>Certificate Malleability</name>
        <t>An ASN.1 structure like X.509’s Certificate is an abstract data type that is independent of its serialization. There are multiple encoding rules for ASN.1. Commonly, protocols use DER <xref target="X.690"/>, such as <xref section="4.4.2" sectionFormat="of" target="RFC8446"/>. This aligns with <xref section="4.1.1.3" sectionFormat="of" target="RFC5280"/>, which says X.509 signatures are computed over the DER-encoded TBSCertificate. After signature verification, applications can assume the DER-encoded TBSCertificate is not malleable.</t>
        <t>When the signature verification process in <xref target="verifying-certificate-signatures"/> first transforms the TBSCertificate into a TBSCertificateLogEntry, it preserves this non-malleability. There is a unique valid DER encoding for every abstract TBSCertificate structure, so malleability of the DER-encoded TBSCertificate reduces to malleability of the TBSCertificate value:</t>
        <ul spacing="normal">
          <li>
            <t>The <tt>version</tt>, <tt>issuer</tt>, <tt>validity</tt>, <tt>subject</tt>, <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, and <tt>extensions</tt> fields are copied from the TBSCertificate to the TBSCertificateLogEntry unmodified, so they are directly authenticated by the inclusion proof.</t>
          </li>
          <li>
            <t><tt>serialNumber</tt> is omitted from TBSCertificateLogEntry, but its value determines the inclusion proof index, which authenticates it.</t>
          </li>
          <li>
            <t>The redundant <tt>signature</tt> field in TBSCertificate is omitted from TBSCertificateLogEntry, but <xref target="verifying-certificate-signatures"/> checks for an exact value, so no other values are possible.</t>
          </li>
          <li>
            <t><tt>subjectPublicKeyInfo</tt> is hashed as <tt>subjectPublicKeyInfoHash</tt> in TBSCertificateLogEntry. Provided the underlying hash function is collision-resistant, no other values are possible for a given log entry.</t>
          </li>
        </ul>
        <t>X.509 implementations often implement <xref section="4.1.1.3" sectionFormat="of" target="RFC5280"/> by equivalently retaining the original received DER encoding, rather than recomputing the canonical DER encoding TBSCertificate. This optimization is compatible with the assumptions above.</t>
        <t>Some non-conforming X.509 implementations use a BER <xref target="X.690"/> parser instead of DER, and then apply this optimization to the received BER encoding. BER encoding is not unique, so this does not produce the same result. In such implementations, the BER-encoded TBSCertificate becomes also non-malleable, and applications may rely on this. To preserve this property in Merkle Tree Certificates, such non-conforming implementations MUST do the following when implementing <xref target="verifying-certificate-signatures"/>:</t>
        <ul spacing="normal">
          <li>
            <t>Reparse the initial identifier (the SEQUENCE tag) and length octets of the TBSCertificate structure with a conforming DER parser and fail verification if invalid.</t>
          </li>
          <li>
            <t>When copying the <tt>version</tt>, <tt>issuer</tt>, <tt>validity</tt>, <tt>subject</tt>, <tt>issuerUniqueID</tt>, <tt>subjectUniqueID</tt>, and <tt>extensions</tt> fields, either copy over the observed BER encodings, or reparse each field with a conforming DER parser and fail verification if invalid.</t>
          </li>
          <li>
            <t>Reparse the <tt>serialNumber</tt> field with a conforming DER parser and fail verification if invalid.</t>
          </li>
          <li>
            <t>Reparse the <tt>signature</tt> field with a conforming DER parser and fail verification if invalid. Equivalently, check for an exact equality with for the expected, DER-encoded value.</t>
          </li>
          <li>
            <t>When hashing <tt>subjectPublicKeyInfo</tt>, either hash the observed BER encoding, or reparse the structure with a conforming DER parser and fail verification if invalid.</t>
          </li>
        </ul>
        <t>These additional checks are redundant in X.509 implementations that use a conforming DER parser.</t>
        <t><xref target="log-entries"/> requires that the TBSCertificateLogEntry in a MerkleTreeCertEntry be DER-encoded, so applying a stricter parser will be compatible with conforming CAs. While these existing non-conforming implementations may be unable to switch to a DER parser due to compatibility concerns, Merkle Tree Certificates are new, so there is no existing deployment of malformed BER-encoded TBSCertificateLogEntry structures.</t>
        <t>The above only ensures the TBSCertificate portion is non-malleable. In Merkle Tree Certificates, similar to an ECDSA X.509 signature, the signature value is malleable. Multiple MTCProof structures may prove a single TBSCertificate structure. Additionally, in all X.509-based protocols, a BER-based parser for the outer, unsigned Certificate structure will admit malleability in those portions of the encoding. Applications that derive a unique identifier from the Certificate MUST instead use the TBSCertificate, or some portion of it, for Merkle Tree Certificates.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="module-identifier">
        <name>Module Identifier</name>
        <t>IANA is requested to add the following entry in the "SMI Security for PKIX Module Identifier" registry <xref target="RFC7299"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Decimal</th>
              <th align="left">Description</th>
              <th align="left">References</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left">id-mod-mtc-2025</td>
              <td align="left">[this-RFC]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="algorithm">
        <name>Algorithm</name>
        <t>IANA is requested to add the following entry to the "SMI Security for PKIX Algorithms" registry <xref target="RFC7299"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Decimal</th>
              <th align="left">Description</th>
              <th align="left">References</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left">id-alg-mtcProof</td>
              <td align="left">[this-RFC]</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="relative-distinguished-name-attribute">
        <name>Relative Distinguished Name Attribute</name>
        <t>IANA is requested to add the following entry to the "SMI Security for PKIX Relative Distinguished Name Attribute" registry <xref target="I-D.ietf-lamps-x509-alg-none"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Decimal</th>
              <th align="left">Description</th>
              <th align="left">References</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left">id-rdna-trustAnchorID</td>
              <td align="left">[this-RFC]</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="X.690">
          <front>
            <title>Information technology - ASN.1 encoding Rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2021" month="February"/>
          </front>
          <seriesInfo name="ISO/IEC 8824-1:2021" value=""/>
        </reference>
        <reference anchor="RFC5912">
          <front>
            <title>New ASN.1 Modules for the Public Key Infrastructure Using X.509 (PKIX)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="June" year="2010"/>
            <abstract>
              <t>The Public Key Infrastructure using X.509 (PKIX) certificate format, and many associated formats, are expressed using ASN.1. The current ASN.1 modules conform to the 1988 version of ASN.1. This document updates those ASN.1 modules to conform to the 2002 version of ASN.1. There are no bits-on-the-wire changes to any of the formats; this is simply a change to the syntax. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5912"/>
          <seriesInfo name="DOI" value="10.17487/RFC5912"/>
        </reference>
        <reference anchor="RFC8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>
        <reference anchor="FIPS204">
          <front>
            <title>Module-lattice-based digital signature standard</title>
            <author>
              <organization/>
            </author>
            <date month="August" year="2024"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.204"/>
          <refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
        </reference>
        <reference anchor="I-D.ietf-tls-trust-anchor-ids">
          <front>
            <title>TLS Trust Anchor Identifiers</title>
            <author fullname="Bob Beck" initials="B." surname="Beck">
              <organization>OpenSSL</organization>
            </author>
            <author fullname="David Benjamin" initials="D." surname="Benjamin">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Devon O'Brien" initials="D." surname="O'Brien">
         </author>
            <author fullname="Kyle Nekritz" initials="K." surname="Nekritz">
              <organization>Meta</organization>
            </author>
            <date day="15" month="September" year="2025"/>
            <abstract>
              <t>   This document defines the TLS Trust Anchors extension, a mechanism
   for relying parties to convey trusted certification authorities.  It
   describes individual certification authorities more succinctly than
   the TLS Certificate Authorities extension.

   Additionally, to support TLS clients with many trusted certification
   authorities, it supports a mode where servers describe their
   available certification paths and the client selects from them.
   Servers may describe this during connection setup, or in DNS for
   lower latency.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-trust-anchor-ids-02"/>
        </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="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <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="RFC3629">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="RFC8555">
          <front>
            <title>Automatic Certificate Management Environment (ACME)</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="J. Hoffman-Andrews" initials="J." surname="Hoffman-Andrews"/>
            <author fullname="D. McCarney" initials="D." surname="McCarney"/>
            <author fullname="J. Kasten" initials="J." surname="Kasten"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>Public Key Infrastructure using X.509 (PKIX) certificates are used for a number of purposes, the most significant of which is the authentication of domain names. Thus, certification authorities (CAs) in the Web PKI are trusted to verify that an applicant for a certificate legitimately represents the domain name(s) in the certificate. As of this writing, this verification is done through a collection of ad hoc mechanisms. This document describes a protocol that a CA and an applicant can use to automate the process of verification and certificate issuance. The protocol also provides facilities for other certificate management functions, such as certificate revocation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8555"/>
          <seriesInfo name="DOI" value="10.17487/RFC8555"/>
        </reference>
        <reference anchor="SHS">
          <front>
            <title>Secure hash standard</title>
            <author>
              <organization/>
            </author>
            <date year="2015"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.180-4"/>
          <refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
        </reference>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="FIPS186-5">
          <front>
            <title>Digital Signature Standard (DSS)</title>
            <author>
              <organization/>
            </author>
            <date month="February" year="2023"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.186-5"/>
          <refcontent>National Institute of Standards and Technology (U.S.)</refcontent>
        </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="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CHROME-CT" target="https://googlechrome.github.io/CertificateTransparency/ct_policy.html">
          <front>
            <title>Chrome Certificate Transparency Policy</title>
            <author>
              <organization>Google Chrome</organization>
            </author>
            <date year="2022" month="March" day="17"/>
          </front>
        </reference>
        <reference anchor="APPLE-CT" target="https://support.apple.com/en-us/HT205280">
          <front>
            <title>Apple's Certificate Transparency policy</title>
            <author>
              <organization>Apple</organization>
            </author>
            <date year="2021" month="March" day="05"/>
          </front>
        </reference>
        <reference anchor="CHROMIUM" target="https://chromium.googlesource.com/chromium/src/+/main/components/component_updater/README.md">
          <front>
            <title>Component Updater</title>
            <author>
              <organization>Chromium</organization>
            </author>
            <date year="2022" month="March" day="03"/>
          </front>
        </reference>
        <reference anchor="FIREFOX" target="https://wiki.mozilla.org/Firefox/RemoteSettings">
          <front>
            <title>Firefox Remote Settings</title>
            <author>
              <organization>Mozilla</organization>
            </author>
            <date year="2022" month="August" day="20"/>
          </front>
        </reference>
        <reference anchor="LetsEncrypt" target="https://letsencrypt.org/stats/">
          <front>
            <title>Let's Encrypt Stats</title>
            <author>
              <organization>Let's Encrypt</organization>
            </author>
            <date year="2023" month="March" day="07"/>
          </front>
        </reference>
        <reference anchor="MerkleTown" target="https://ct.cloudflare.com/">
          <front>
            <title>Merkle Town</title>
            <author>
              <organization>Cloudflare, Inc.</organization>
            </author>
            <date year="2023" month="March" day="07"/>
          </front>
        </reference>
        <reference anchor="SharedFactors" target="https://bora.uib.no/bora-xmlui/bitstream/handle/11250/3001128/Masters_thesis__for_University_of_Bergen.pdf">
          <front>
            <title>Finding shared RSA factors in the Certificate Transparency logs</title>
            <author initials="H. F." surname="Våge" fullname="Henry Faltin Våge">
              <organization/>
            </author>
            <author>
              <organization>University of Bergen</organization>
            </author>
            <date year="2022" month="May" day="13"/>
          </front>
        </reference>
        <reference anchor="STH-Discipline" target="https://mailarchive.ietf.org/arch/msg/trans/Zm4NqyRc7LDsOtV56EchBIT9r4c/">
          <front>
            <title>STH Discipline &amp; Security Considerations</title>
            <author initials="R." surname="Barnes" fullname="Richard Barnes">
              <organization/>
            </author>
            <date year="2017" month="March" day="03"/>
          </front>
        </reference>
        <reference anchor="CABF-153" target="https://cabforum.org/2015/11/11/ballot-153-short-lived-certificates/">
          <front>
            <title>Ballot 153 – Short-Lived Certificates</title>
            <author>
              <organization>CA/Browser Forum</organization>
            </author>
            <date year="2015" month="November" day="11"/>
          </front>
        </reference>
        <reference anchor="CABF-SC081" target="https://cabforum.org/2025/04/11/ballot-sc081v3-introduce-schedule-of-reducing-validity-and-data-reuse-periods/">
          <front>
            <title>Ballot SC081v3: Introduce Schedule of Reducing Validity and Data Reuse Periods</title>
            <author>
              <organization>CA/Browser Forum</organization>
            </author>
            <date year="2025" month="April" day="11"/>
          </front>
        </reference>
        <reference anchor="SCTNotAfter" target="https://dadrian.io/blog/posts/sct-not-after/">
          <front>
            <title>How to distrust a CA without any certificate errors</title>
            <author initials="D." surname="Adrian" fullname="David Adrian">
              <organization/>
            </author>
            <date year="2025" month="March"/>
          </front>
        </reference>
        <reference anchor="AuditingRevisited" target="https://eprint.iacr.org/2025/556.pdf">
          <front>
            <title>Private SCT Auditing, Revisited</title>
            <author initials="L." surname="Heimberger" fullname="Lena Heimberger">
              <organization/>
            </author>
            <author initials="C." surname="Patton" fullname="Christopher Patton">
              <organization/>
            </author>
            <author initials="B." surname="Westerbaan" fullname="Bas Westerbaan">
              <organization/>
            </author>
            <date year="2025" month="April" day="25"/>
          </front>
        </reference>
        <reference anchor="TLOG-TILES" target="https://c2sp.org/tlog-tiles">
          <front>
            <title>Tiled Transparency Logs</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2025" month="June"/>
          </front>
        </reference>
        <reference anchor="TLOG-WITNESS" target="https://c2sp.org/tlog-witness">
          <front>
            <title>Transparency Log Witness Protocol</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2025" month="June"/>
          </front>
        </reference>
        <reference anchor="TLOG-MIRROR" target="https://c2sp.org/tlog-mirror">
          <front>
            <title>Transparency Log Mirrors</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2025" month="July"/>
          </front>
        </reference>
        <reference anchor="TLOG-CHECKPOINT" target="https://c2sp.org/tlog-checkpoint">
          <front>
            <title>Transparency Log Checkpoints</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2024" month="March"/>
          </front>
        </reference>
        <reference anchor="SIGNED-NOTE" target="https://c2sp.org/signed-note">
          <front>
            <title>Note</title>
            <author>
              <organization>C2SP</organization>
            </author>
            <date year="2025" month="April"/>
          </front>
        </reference>
        <reference anchor="RFC6962">
          <front>
            <title>Certificate Transparency</title>
            <author fullname="B. Laurie" initials="B." surname="Laurie"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Kasper" initials="E." surname="Kasper"/>
            <date month="June" year="2013"/>
            <abstract>
              <t>This document describes an experimental protocol for publicly logging the existence of Transport Layer Security (TLS) certificates as they are issued or observed, in a manner that allows anyone to audit certificate 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>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="6962"/>
          <seriesInfo name="DOI" value="10.17487/RFC6962"/>
        </reference>
        <reference anchor="RFC4514">
          <front>
            <title>Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names</title>
            <author fullname="K. Zeilenga" initials="K." role="editor" surname="Zeilenga"/>
            <date month="June" year="2006"/>
            <abstract>
              <t>The X.500 Directory uses distinguished names (DNs) as primary keys to entries in the directory. This document defines the string representation used in the Lightweight Directory Access Protocol (LDAP) to transfer distinguished names. The string representation is designed to give a clean representation of commonly used distinguished names, while being able to represent any distinguished name. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4514"/>
          <seriesInfo name="DOI" value="10.17487/RFC4514"/>
        </reference>
        <reference anchor="RFC6973">
          <front>
            <title>Privacy Considerations for Internet Protocols</title>
            <author fullname="A. Cooper" initials="A." surname="Cooper"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="J. Morris" initials="J." surname="Morris"/>
            <author fullname="M. Hansen" initials="M." surname="Hansen"/>
            <author fullname="R. Smith" initials="R." surname="Smith"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document offers guidance for developing privacy considerations for inclusion in protocol specifications. It aims to make designers, implementers, and users of Internet protocols aware of privacy-related design choices. It suggests that whether any individual RFC warrants a specific privacy considerations section will depend on the document's content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6973"/>
          <seriesInfo name="DOI" value="10.17487/RFC6973"/>
        </reference>
        <reference anchor="RFC7299">
          <front>
            <title>Object Identifier Registry for the PKIX Working Group</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>When the Public-Key Infrastructure using X.509 (PKIX) Working Group was chartered, an object identifier arc was allocated by IANA for use by that working group. This document describes the object identifiers that were assigned in that arc, returns control of that arc to IANA, and establishes IANA allocation policies for any future assignments within that arc.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7299"/>
          <seriesInfo name="DOI" value="10.17487/RFC7299"/>
        </reference>
        <reference anchor="I-D.ietf-lamps-x509-alg-none">
          <front>
            <title>Unsigned X.509 Certificates</title>
            <author fullname="David Benjamin" initials="D." surname="Benjamin">
              <organization>Google LLC</organization>
            </author>
            <date day="5" month="September" year="2025"/>
            <abstract>
              <t>   This document defines a placeholder X.509 signature algorithm that
   may be used in contexts where the consumer of the certificate is not
   expected to verify the signature.  As part of this, it updates RFC
   5280.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-x509-alg-none-10"/>
        </reference>
      </references>
    </references>
    <?line 1673?>

<section anchor="asn1-module">
      <name>ASN.1 Module</name>
      <sourcecode type="asn.1"><![CDATA[
MerkleTreeCertificates
  { iso(1) identified-organization(3) dod(6) internet(1)
    security(5) mechanisms(5) pkix(7) id-mod(0)
    id-mod-mtc-2025(TBD) }

DEFINITIONS IMPLICIT TAGS ::=
BEGIN

IMPORTS
  SIGNATURE-ALGORITHM, AlgorithmIdentifier{},
  FROM AlgorithmInformation-2009 -- in [RFC5912]
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-algorithmInformation-02(58) }
  Extensions{}, ATTRIBUTE
  FROM PKIX-CommonTypes-2009 -- in [RFC5912]
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-pkixCommon-02(57) }
  CertExtensions
  FROM PKIX1Implicit-2009 -- in [RFC5912]
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-pkix1-implicit-02(59) }
  Version, Name, Validity, UniqueIdentifier, PublicKeyAlgorithms
  FROM PKIX1Explicit-2009 -- in [RFC5912]
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-pkix1-explicit-02(51) }
  TrustAnchorID
  FROM TrustAnchorIDs-2025 -- in [I-D.ietf-tls-trust-ancohor-ids]
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-trustAnchorIDs-2025(TBD) } ;

TBSCertificateLogEntry ::= SEQUENCE {
    version               [0] EXPLICIT Version DEFAULT v1,
    issuer                    Name,
    validity                  Validity,
    subject                   Name,
    subjectPublicKeyAlgorithm AlgorithmIdentifier{PUBLIC-KEY,
                                  {PublicKeyAlgorithms}},
    subjectPublicKeyInfoHash  OCTET STRING,
    issuerUniqueID        [1] IMPLICIT UniqueIdentifier OPTIONAL,
    subjectUniqueID       [2] IMPLICIT UniqueIdentifier OPTIONAL,
    extensions            [3] EXPLICIT Extensions{{CertExtensions}}
                                           OPTIONAL
}
id-alg-mtcProof OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) algorithms(6) TBD }

sa-mtcProof SIGNATURE-ALGORITHM ::= {
    IDENTIFIER id-alg-mtcProof
    PARAMS ARE absent
}

id-rdna-trustAnchorID OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1) security(5)
    mechanisms(5) pkix(7) rdna(25) TBD }

at-trustAnchorID ATTRIBUTE ::= {
    TYPE TrustAnchorID
    IDENTIFIED BY id-rdna-trustAnchorID
}

END
]]></sourcecode>
    </section>
    <section anchor="merkle-tree-structure">
      <name>Merkle Tree Structure</name>
      <t>This non-normative section describes how the Merkle Tree structure relates to the binary representations of indices. It is included to help implementors understand the procedures described in <xref target="subtrees"/>.</t>
      <section anchor="binary-representations">
        <name>Binary Representations</name>
        <t>Within a Merkle Tree whose size is a power of two, the binary representation of a leaf's index gives the path to that leaf. The leaf is a left child if the least-significant bit is unset and a right child if it is set. The next bit indicates the direction of the parent node, and so on. <xref target="fig-merkle-tree-bits-full"/> demonstrates this in a Merkle Tree of size 8:</t>
        <figure anchor="fig-merkle-tree-bits-full">
          <name>An example Merkle Tree of size 8</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="328" viewBox="0 0 328 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 64,32 L 64,64" fill="none" stroke="black"/>
                <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 88,224 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,96 L 104,128" fill="none" stroke="black"/>
                <path d="M 104,224 L 104,256" fill="none" stroke="black"/>
                <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,160 L 136,192" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                <path d="M 160,96 L 160,128" fill="none" stroke="black"/>
                <path d="M 168,224 L 168,256" fill="none" stroke="black"/>
                <path d="M 184,160 L 184,192" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 200,32 L 200,64" fill="none" stroke="black"/>
                <path d="M 200,160 L 200,192" fill="none" stroke="black"/>
                <path d="M 200,224 L 200,256" fill="none" stroke="black"/>
                <path d="M 216,224 L 216,256" fill="none" stroke="black"/>
                <path d="M 232,96 L 232,128" fill="none" stroke="black"/>
                <path d="M 232,224 L 232,256" fill="none" stroke="black"/>
                <path d="M 248,160 L 248,192" fill="none" stroke="black"/>
                <path d="M 248,224 L 248,256" fill="none" stroke="black"/>
                <path d="M 64,32 L 200,32" fill="none" stroke="black"/>
                <path d="M 64,64 L 200,64" fill="none" stroke="black"/>
                <path d="M 32,96 L 104,96" fill="none" stroke="black"/>
                <path d="M 160,96 L 232,96" fill="none" stroke="black"/>
                <path d="M 32,128 L 104,128" fill="none" stroke="black"/>
                <path d="M 160,128 L 232,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 56,160" fill="none" stroke="black"/>
                <path d="M 72,160 L 120,160" fill="none" stroke="black"/>
                <path d="M 136,160 L 184,160" fill="none" stroke="black"/>
                <path d="M 200,160 L 248,160" fill="none" stroke="black"/>
                <path d="M 8,192 L 56,192" fill="none" stroke="black"/>
                <path d="M 72,192 L 120,192" fill="none" stroke="black"/>
                <path d="M 136,192 L 184,192" fill="none" stroke="black"/>
                <path d="M 200,192 L 248,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 88,224" fill="none" stroke="black"/>
                <path d="M 104,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 152,224" fill="none" stroke="black"/>
                <path d="M 168,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 200,224 L 216,224" fill="none" stroke="black"/>
                <path d="M 232,224 L 248,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 152,256" fill="none" stroke="black"/>
                <path d="M 168,256 L 184,256" fill="none" stroke="black"/>
                <path d="M 200,256 L 216,256" fill="none" stroke="black"/>
                <path d="M 232,256 L 248,256" fill="none" stroke="black"/>
                <g class="text">
                  <text x="120" y="52">[0,</text>
                  <text x="148" y="52">8)</text>
                  <text x="288" y="52">level</text>
                  <text x="320" y="52">3</text>
                  <text x="72" y="84">/</text>
                  <text x="192" y="84">\</text>
                  <text x="56" y="116">[0,</text>
                  <text x="84" y="116">4)</text>
                  <text x="184" y="116">[4,</text>
                  <text x="212" y="116">8)</text>
                  <text x="288" y="116">level</text>
                  <text x="320" y="116">2</text>
                  <text x="40" y="148">/</text>
                  <text x="96" y="148">\</text>
                  <text x="168" y="148">/</text>
                  <text x="224" y="148">\</text>
                  <text x="32" y="180">[0,2)</text>
                  <text x="96" y="180">[2,4)</text>
                  <text x="160" y="180">[4,6)</text>
                  <text x="224" y="180">[6,8)</text>
                  <text x="288" y="180">level</text>
                  <text x="320" y="180">1</text>
                  <text x="24" y="212">/</text>
                  <text x="40" y="212">\</text>
                  <text x="88" y="212">/</text>
                  <text x="104" y="212">\</text>
                  <text x="152" y="212">/</text>
                  <text x="168" y="212">\</text>
                  <text x="216" y="212">/</text>
                  <text x="232" y="212">\</text>
                  <text x="16" y="244">0</text>
                  <text x="48" y="244">1</text>
                  <text x="80" y="244">2</text>
                  <text x="112" y="244">3</text>
                  <text x="144" y="244">4</text>
                  <text x="176" y="244">5</text>
                  <text x="208" y="244">6</text>
                  <text x="240" y="244">7</text>
                  <text x="288" y="244">level</text>
                  <text x="320" y="244">0</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
       +----------------+
       |     [0, 8)     |        level 3
       +----------------+
        /              \
   +--------+      +--------+
   | [0, 4) |      | [4, 8) |    level 2
   +--------+      +--------+
    /      \        /      \
+-----+ +-----+ +-----+ +-----+
|[0,2)| |[2,4)| |[4,6)| |[6,8)|  level 1
+-----+ +-----+ +-----+ +-----+
  / \     / \     / \     / \
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5| |6| |7|  level 0
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
]]></artwork>
          </artset>
        </figure>
        <t>The binary representation of <tt>4</tt> is <tt>0b100</tt>. It is the left (0) child of <tt>[4, 6)</tt>, which is the left (0) child of <tt>[4, 8)</tt>, which is the right (1) child of <tt>[0, 8)</tt>.</t>
        <t>Each level in the tree corresponds to a bit position and can be correspondingly numbered, with 0 indicating the least-significant bit and the leaf level, and so on. In this numbering, a node's level can be determined as follows: if the node is a root of subtree <tt>[start, end)</tt>, the node's level is <tt>BIT_WIDTH(end - start - 1)</tt>.</t>
        <t>Comparing two indices determines the relationship between two paths. The highest differing bit gives the level at which paths from root to leaf diverge. For example, the bit representations of 4 and 6 are <tt>0b100</tt> and <tt>0b110</tt>, respectively. The highest differing bit is bit 1. Bits 2 and up are the same between the two indices. This indicates that the paths from the root to leaves 4 and 6 diverge when going from level 2 to level 1.</t>
        <t>This can be generalized to arbitrary-sized Merkle Trees. <xref target="fig-merkle-tree-bits-partial"/> depicts a Merkle Tree of size 6:</t>
        <figure anchor="fig-merkle-tree-bits-partial">
          <name>An example Merkle Tree of size 6</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="272" viewBox="0 0 272 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 64,32 L 64,64" fill="none" stroke="black"/>
                <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 88,224 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,96 L 104,128" fill="none" stroke="black"/>
                <path d="M 104,224 L 104,256" fill="none" stroke="black"/>
                <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,160 L 136,192" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                <path d="M 160,72 L 160,152" fill="none" stroke="black"/>
                <path d="M 168,224 L 168,256" fill="none" stroke="black"/>
                <path d="M 184,32 L 184,64" fill="none" stroke="black"/>
                <path d="M 184,160 L 184,192" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 64,32 L 184,32" fill="none" stroke="black"/>
                <path d="M 64,64 L 184,64" fill="none" stroke="black"/>
                <path d="M 32,96 L 104,96" fill="none" stroke="black"/>
                <path d="M 32,128 L 104,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 56,160" fill="none" stroke="black"/>
                <path d="M 72,160 L 120,160" fill="none" stroke="black"/>
                <path d="M 136,160 L 184,160" fill="none" stroke="black"/>
                <path d="M 8,192 L 56,192" fill="none" stroke="black"/>
                <path d="M 72,192 L 120,192" fill="none" stroke="black"/>
                <path d="M 136,192 L 184,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 88,224" fill="none" stroke="black"/>
                <path d="M 104,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 152,224" fill="none" stroke="black"/>
                <path d="M 168,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 152,256" fill="none" stroke="black"/>
                <path d="M 168,256 L 184,256" fill="none" stroke="black"/>
                <circle cx="160" cy="112" r="6" class="closeddot" fill="black"/>
                <g class="text">
                  <text x="120" y="52">[0,</text>
                  <text x="148" y="52">6)</text>
                  <text x="232" y="52">level</text>
                  <text x="264" y="52">3</text>
                  <text x="72" y="84">/</text>
                  <text x="56" y="116">[0,</text>
                  <text x="84" y="116">4)</text>
                  <text x="232" y="116">level</text>
                  <text x="264" y="116">2</text>
                  <text x="40" y="148">/</text>
                  <text x="96" y="148">\</text>
                  <text x="32" y="180">[0,2)</text>
                  <text x="96" y="180">[2,4)</text>
                  <text x="160" y="180">[4,6)</text>
                  <text x="232" y="180">level</text>
                  <text x="264" y="180">1</text>
                  <text x="24" y="212">/</text>
                  <text x="40" y="212">\</text>
                  <text x="88" y="212">/</text>
                  <text x="104" y="212">\</text>
                  <text x="152" y="212">/</text>
                  <text x="168" y="212">\</text>
                  <text x="16" y="244">0</text>
                  <text x="48" y="244">1</text>
                  <text x="80" y="244">2</text>
                  <text x="112" y="244">3</text>
                  <text x="144" y="244">4</text>
                  <text x="176" y="244">5</text>
                  <text x="232" y="244">level</text>
                  <text x="264" y="244">0</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
       +--------------+
       |     [0, 6)   |   level 3
       +--------------+
        /          |
   +--------+      |
   | [0, 4) |      *      level 2
   +--------+      |
    /      \       |
+-----+ +-----+ +-----+
|[0,2)| |[2,4)| |[4,6)|   level 1
+-----+ +-----+ +-----+
  / \     / \     / \
+-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5|   level 0
+-+ +-+ +-+ +-+ +-+ +-+
]]></artwork>
          </artset>
        </figure>
        <t>When the size of a Merkle Tree is not a power of two, some levels on the rightmost edge of the tree are skipped. The rightmost edge is the path to the last element. The skipped levels can be seen in its binary representation. Here, the last element is 5, which has binary representation <tt>0b101</tt>. When a bit is set, the corresponding node is a right child. When it is unset, the corresponding node is skipped.</t>
        <t>In a tree of the next power of two size, the skipped nodes in this path are where there <em>would</em> have been a right child, had there been enough elements to construct one. Without a right child, the hash operation is skipped and a skipped node has the same value as its singular child. <xref target="fig-merkle-tree-bits-partial-comparison"/> depicts this for a tree of size 6.</t>
        <figure anchor="fig-merkle-tree-bits-partial-comparison">
          <name>An example Merkle Tree of size 6, viewed as a subset of a tree of size 8</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="328" viewBox="0 0 328 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 64,32 L 64,64" fill="none" stroke="black"/>
                <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 88,224 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,96 L 104,128" fill="none" stroke="black"/>
                <path d="M 104,224 L 104,256" fill="none" stroke="black"/>
                <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,160 L 136,192" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                <path d="M 160,96 L 160,128" fill="none" stroke="black"/>
                <path d="M 168,224 L 168,256" fill="none" stroke="black"/>
                <path d="M 184,160 L 184,192" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 200,32 L 200,64" fill="none" stroke="black"/>
                <path d="M 200,160 L 200,192" fill="none" stroke="black"/>
                <path d="M 200,224 L 200,256" fill="none" stroke="black"/>
                <path d="M 216,224 L 216,256" fill="none" stroke="black"/>
                <path d="M 232,96 L 232,128" fill="none" stroke="black"/>
                <path d="M 232,224 L 232,256" fill="none" stroke="black"/>
                <path d="M 248,160 L 248,192" fill="none" stroke="black"/>
                <path d="M 248,224 L 248,256" fill="none" stroke="black"/>
                <path d="M 64,32 L 200,32" fill="none" stroke="black"/>
                <path d="M 64,64 L 200,64" fill="none" stroke="black"/>
                <path d="M 32,96 L 104,96" fill="none" stroke="black"/>
                <path d="M 160,96 L 232,96" fill="none" stroke="black"/>
                <path d="M 32,128 L 104,128" fill="none" stroke="black"/>
                <path d="M 160,128 L 232,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 56,160" fill="none" stroke="black"/>
                <path d="M 72,160 L 120,160" fill="none" stroke="black"/>
                <path d="M 136,160 L 184,160" fill="none" stroke="black"/>
                <path d="M 200,160 L 248,160" fill="none" stroke="black"/>
                <path d="M 8,192 L 56,192" fill="none" stroke="black"/>
                <path d="M 72,192 L 120,192" fill="none" stroke="black"/>
                <path d="M 136,192 L 184,192" fill="none" stroke="black"/>
                <path d="M 200,192 L 248,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 88,224" fill="none" stroke="black"/>
                <path d="M 104,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 152,224" fill="none" stroke="black"/>
                <path d="M 168,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 200,224 L 216,224" fill="none" stroke="black"/>
                <path d="M 232,224 L 248,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 152,256" fill="none" stroke="black"/>
                <path d="M 168,256 L 184,256" fill="none" stroke="black"/>
                <path d="M 200,256 L 216,256" fill="none" stroke="black"/>
                <path d="M 232,256 L 248,256" fill="none" stroke="black"/>
                <g class="text">
                  <text x="120" y="52">[0,</text>
                  <text x="148" y="52">6)</text>
                  <text x="288" y="52">level</text>
                  <text x="320" y="52">3</text>
                  <text x="72" y="84">/</text>
                  <text x="192" y="84">\</text>
                  <text x="56" y="116">[0,</text>
                  <text x="84" y="116">4)</text>
                  <text x="184" y="116">[4,</text>
                  <text x="212" y="116">6)</text>
                  <text x="288" y="116">level</text>
                  <text x="320" y="116">2</text>
                  <text x="40" y="148">/</text>
                  <text x="96" y="148">\</text>
                  <text x="168" y="148">/</text>
                  <text x="224" y="148">\</text>
                  <text x="32" y="180">[0,2)</text>
                  <text x="96" y="180">[2,4)</text>
                  <text x="160" y="180">[4,6)</text>
                  <text x="288" y="180">level</text>
                  <text x="320" y="180">1</text>
                  <text x="24" y="212">/</text>
                  <text x="40" y="212">\</text>
                  <text x="88" y="212">/</text>
                  <text x="104" y="212">\</text>
                  <text x="152" y="212">/</text>
                  <text x="168" y="212">\</text>
                  <text x="216" y="212">/</text>
                  <text x="232" y="212">\</text>
                  <text x="16" y="244">0</text>
                  <text x="48" y="244">1</text>
                  <text x="80" y="244">2</text>
                  <text x="112" y="244">3</text>
                  <text x="144" y="244">4</text>
                  <text x="176" y="244">5</text>
                  <text x="288" y="244">level</text>
                  <text x="320" y="244">0</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
       +----------------+
       |     [0, 6)     |        level 3
       +----------------+
        /              \
   +--------+      +--------+
   | [0, 4) |      | [4, 6) |    level 2
   +--------+      +--------+
    /      \        /      \
+-----+ +-----+ +-----+ +-----+
|[0,2)| |[2,4)| |[4,6)| |     |  level 1
+-----+ +-----+ +-----+ +-----+
  / \     / \     / \     / \
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5| | | | |  level 0
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
]]></artwork>
          </artset>
        </figure>
        <t>Zero bits also indicate skipped nodes in paths that have not yet diverged from the rightmost edge (i.e. the path to the last element), when viewed from root to leaf. In the example, the binary representation of 4 is <tt>0b100</tt>. While bit 0 and bit 1 are both unset, they manifest in the tree differently. Bit 0 indicates that 4 is a left child. However, at bit 1, <tt>0b100</tt> has not yet diverged from the last element, <tt>0b101</tt>. That instead indicates a skipped node, not a left child.</t>
      </section>
      <section anchor="inclusion-proof-evaluation-explain">
        <name>Inclusion Proof Evaluation</name>
        <t>The procedure in <xref target="evaluating-a-subtree-inclusion-proof"/> builds up a subtree hash in <tt>r</tt> by starting from <tt>entry_hash</tt> and iteratively hashing elements of <tt>inclusion_proof</tt> on the left or right. That means this procedure, when successful, must return <em>some</em> hash that contains <tt>entry_hash</tt>.</t>
        <t>Treating <tt>[start, end)</tt> as a Merkle Tree of size <tt>end - start</tt>, the procedure hashes based on the path to <tt>index</tt>. Within this smaller Merkle Tree, it has index <tt>fn = index - start</tt> (first number), and the last element has index <tt>sn = end - start - 1</tt> (second number).</t>
        <t>Step 4 iterates through <tt>inclusion_proof</tt> and the paths to <tt>fn</tt> and <tt>sn</tt> in parallel. As the procedure right-shifts <tt>fn</tt> and <tt>sn</tt> and looks at the least-significant bit, it moves up the two paths, towards the root. When <tt>sn</tt> is zero, the procedure has reached the top of the tree. The procedure checks that the two iterations complete together.</t>
        <t>Iterating from level 0 up, <tt>fn</tt> and <tt>sn</tt> will initially be different. While they are different, step 4.2 hashes on the left or right based on the binary representation, as discussed in <xref target="binary-representations"/>.</t>
        <t>Once <tt>fn = sn</tt>, the remainder of the path is on the right edge. At that point, the condition in step 4.2 is always true. It only incorporates proof entries on the left, once per set bit. Unset bits are skipped.</t>
        <t>Inclusion proofs can also be evaluated by considering these two stages separately. The first stage consumes <tt>l1 = BIT_WIDTH(fn XOR sn)</tt> proof entries. The second stage consumes <tt>l2 = POPCOUNT(fn &gt;&gt; l1)</tt> proof entries. A valid inclusion proof must then have <tt>l1 + l2</tt> entries. The first <tt>l1</tt> entries are hashed based on <tt>fn</tt>'s least significant bits, and the remaining <tt>l2</tt> entries are hashed on the left.</t>
      </section>
      <section anchor="consistency-proof-structure">
        <name>Consistency Proof Structure</name>
        <t>A subtree consistency proof for <tt>[start, end)</tt> and the tree of <tt>n</tt> elements is similar to an inclusion proof for element <tt>end - 1</tt>. If one starts from <tt>end - 1</tt>'s hash, incorporating the whole inclusion proof should reconstruct <tt>root_hash</tt> and incorporating a subset of the inclusion proof should reconstruct <tt>node_hash</tt>. Thus <tt>end - 1</tt>'s hash and this inclusion proof can prove consistency. A subtree consistency proof in this document applies two optimizations over this construction:</t>
        <ol spacing="normal" type="1"><li>
            <t>Instead of starting at level 0 with <tt>end - 1</tt>, the proof can start at a higher level. Any ancestor of <tt>end - 1</tt> shared by both the subtree and the overall tree is a valid starting node to reconstruct <tt>node_hash</tt> and <tt>root_hash</tt>. Use the highest level with a commmon ancestor. This truncates the inclusion proof portion of the consistency proof.</t>
          </li>
          <li>
            <t>If this starting node is the entire subtree, omit its hash from the consistency proof. The verifier is assumed to already know <tt>node_hash</tt>.</t>
          </li>
        </ol>
        <t>A Merkle consistency proof, defined in <xref section="2.1.4" sectionFormat="of" target="RFC9162"/>, applies these same optimizations.</t>
        <t><xref target="fig-truncate-consistency-proof"/> depicts a subtree consistency proof between the subtree <tt>[0, 6)</tt> and the Merkle Tree of size 8. The consistency proof begins at level 1, or node <tt>[4, 6)</tt>. The inclusion proof portion is similarly truncated to start at level 1: <tt>[6, 8)</tt> and <tt>[0, 4)</tt>. If the consistency proof began at level 0, the starting node would be leaf 5, and the consistency proof would additionally include leaf 4.</t>
        <figure anchor="fig-truncate-consistency-proof">
          <name>A subtree consistency proof that starts at level 1 instead of level 0</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="544" width="336" viewBox="0 0 336 544" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 8,432 L 8,464" fill="none" stroke="black"/>
                <path d="M 8,496 L 8,528" fill="none" stroke="black"/>
                <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                <path d="M 24,496 L 24,528" fill="none" stroke="black"/>
                <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                <path d="M 32,368 L 32,400" fill="none" stroke="black"/>
                <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                <path d="M 40,496 L 40,528" fill="none" stroke="black"/>
                <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 56,432 L 56,464" fill="none" stroke="black"/>
                <path d="M 56,496 L 56,528" fill="none" stroke="black"/>
                <path d="M 64,32 L 64,64" fill="none" stroke="black"/>
                <path d="M 64,304 L 64,336" fill="none" stroke="black"/>
                <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 72,432 L 72,464" fill="none" stroke="black"/>
                <path d="M 72,496 L 72,528" fill="none" stroke="black"/>
                <path d="M 88,224 L 88,256" fill="none" stroke="black"/>
                <path d="M 88,496 L 88,528" fill="none" stroke="black"/>
                <path d="M 104,96 L 104,128" fill="none" stroke="black"/>
                <path d="M 104,224 L 104,256" fill="none" stroke="black"/>
                <path d="M 104,368 L 104,400" fill="none" stroke="black"/>
                <path d="M 104,496 L 104,528" fill="none" stroke="black"/>
                <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 120,432 L 120,464" fill="none" stroke="black"/>
                <path d="M 120,496 L 120,528" fill="none" stroke="black"/>
                <path d="M 128,96 L 128,128" fill="none" stroke="black"/>
                <path d="M 136,160 L 136,192" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 136,432 L 136,464" fill="none" stroke="black"/>
                <path d="M 136,496 L 136,528" fill="none" stroke="black"/>
                <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                <path d="M 152,496 L 152,528" fill="none" stroke="black"/>
                <path d="M 160,368 L 160,400" fill="none" stroke="black"/>
                <path d="M 168,224 L 168,256" fill="none" stroke="black"/>
                <path d="M 168,496 L 168,528" fill="none" stroke="black"/>
                <path d="M 184,160 L 184,192" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 184,432 L 184,464" fill="none" stroke="black"/>
                <path d="M 184,496 L 184,528" fill="none" stroke="black"/>
                <path d="M 200,32 L 200,64" fill="none" stroke="black"/>
                <path d="M 200,96 L 200,128" fill="none" stroke="black"/>
                <path d="M 200,304 L 200,336" fill="none" stroke="black"/>
                <path d="M 200,432 L 200,464" fill="none" stroke="black"/>
                <path d="M 200,496 L 200,528" fill="none" stroke="black"/>
                <path d="M 216,496 L 216,528" fill="none" stroke="black"/>
                <path d="M 232,368 L 232,400" fill="none" stroke="black"/>
                <path d="M 232,496 L 232,528" fill="none" stroke="black"/>
                <path d="M 248,432 L 248,464" fill="none" stroke="black"/>
                <path d="M 248,496 L 248,528" fill="none" stroke="black"/>
                <path d="M 64,32 L 200,32" fill="none" stroke="black"/>
                <path d="M 64,64 L 200,64" fill="none" stroke="black"/>
                <path d="M 32,94 L 104,94" fill="none" stroke="black"/>
                <path d="M 32,98 L 104,98" fill="none" stroke="black"/>
                <path d="M 128,96 L 200,96" fill="none" stroke="black"/>
                <path d="M 32,126 L 104,126" fill="none" stroke="black"/>
                <path d="M 32,130 L 104,130" fill="none" stroke="black"/>
                <path d="M 128,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 56,160" fill="none" stroke="black"/>
                <path d="M 72,160 L 120,160" fill="none" stroke="black"/>
                <path d="M 136,160 Q 138,156.8 140,160 Q 142,163.2 144,160 Q 146,156.8 148,160 Q 150,163.2 152,160 Q 154,156.8 156,160 Q 158,163.2 160,160 Q 162,156.8 164,160 Q 166,163.2 168,160 Q 170,156.8 172,160 Q 174,163.2 176,160 Q 178,156.8 180,160 Q 182,163.2 184,160 " fill="none" stroke="black"/>
                <path d="M 8,192 L 56,192" fill="none" stroke="black"/>
                <path d="M 72,192 L 120,192" fill="none" stroke="black"/>
                <path d="M 136,192 Q 138,188.8 140,192 Q 142,195.2 144,192 Q 146,188.8 148,192 Q 150,195.2 152,192 Q 154,188.8 156,192 Q 158,195.2 160,192 Q 162,188.8 164,192 Q 166,195.2 168,192 Q 170,188.8 172,192 Q 174,195.2 176,192 Q 178,188.8 180,192 Q 182,195.2 184,192 " fill="none" stroke="black"/>
                <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 88,224" fill="none" stroke="black"/>
                <path d="M 104,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 152,224" fill="none" stroke="black"/>
                <path d="M 168,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 152,256" fill="none" stroke="black"/>
                <path d="M 168,256 L 184,256" fill="none" stroke="black"/>
                <path d="M 64,304 L 200,304" fill="none" stroke="black"/>
                <path d="M 64,336 L 200,336" fill="none" stroke="black"/>
                <path d="M 32,366 L 104,366" fill="none" stroke="black"/>
                <path d="M 32,370 L 104,370" fill="none" stroke="black"/>
                <path d="M 160,368 L 232,368" fill="none" stroke="black"/>
                <path d="M 32,398 L 104,398" fill="none" stroke="black"/>
                <path d="M 32,402 L 104,402" fill="none" stroke="black"/>
                <path d="M 160,400 L 232,400" fill="none" stroke="black"/>
                <path d="M 8,432 L 56,432" fill="none" stroke="black"/>
                <path d="M 72,432 L 120,432" fill="none" stroke="black"/>
                <path d="M 136,432 Q 138,428.8 140,432 Q 142,435.2 144,432 Q 146,428.8 148,432 Q 150,435.2 152,432 Q 154,428.8 156,432 Q 158,435.2 160,432 Q 162,428.8 164,432 Q 166,435.2 168,432 Q 170,428.8 172,432 Q 174,435.2 176,432 Q 178,428.8 180,432 Q 182,435.2 184,432 " fill="none" stroke="black"/>
                <path d="M 200,430 L 248,430" fill="none" stroke="black"/>
                <path d="M 200,434 L 248,434" fill="none" stroke="black"/>
                <path d="M 8,464 L 56,464" fill="none" stroke="black"/>
                <path d="M 72,464 L 120,464" fill="none" stroke="black"/>
                <path d="M 136,464 Q 138,460.8 140,464 Q 142,467.2 144,464 Q 146,460.8 148,464 Q 150,467.2 152,464 Q 154,460.8 156,464 Q 158,467.2 160,464 Q 162,460.8 164,464 Q 166,467.2 168,464 Q 170,460.8 172,464 Q 174,467.2 176,464 Q 178,460.8 180,464 Q 182,467.2 184,464 " fill="none" stroke="black"/>
                <path d="M 200,462 L 248,462" fill="none" stroke="black"/>
                <path d="M 200,466 L 248,466" fill="none" stroke="black"/>
                <path d="M 8,496 L 24,496" fill="none" stroke="black"/>
                <path d="M 40,496 L 56,496" fill="none" stroke="black"/>
                <path d="M 72,496 L 88,496" fill="none" stroke="black"/>
                <path d="M 104,496 L 120,496" fill="none" stroke="black"/>
                <path d="M 136,496 L 152,496" fill="none" stroke="black"/>
                <path d="M 168,496 L 184,496" fill="none" stroke="black"/>
                <path d="M 200,496 L 216,496" fill="none" stroke="black"/>
                <path d="M 232,496 L 248,496" fill="none" stroke="black"/>
                <path d="M 8,528 L 24,528" fill="none" stroke="black"/>
                <path d="M 40,528 L 56,528" fill="none" stroke="black"/>
                <path d="M 72,528 L 88,528" fill="none" stroke="black"/>
                <path d="M 104,528 L 120,528" fill="none" stroke="black"/>
                <path d="M 136,528 L 152,528" fill="none" stroke="black"/>
                <path d="M 168,528 L 184,528" fill="none" stroke="black"/>
                <path d="M 200,528 L 216,528" fill="none" stroke="black"/>
                <path d="M 232,528 L 248,528" fill="none" stroke="black"/>
                <g class="text">
                  <text x="120" y="52">[0,</text>
                  <text x="148" y="52">6)</text>
                  <text x="296" y="52">level</text>
                  <text x="328" y="52">3</text>
                  <text x="72" y="84">/</text>
                  <text x="168" y="84">|</text>
                  <text x="56" y="116">[0,</text>
                  <text x="84" y="116">4)</text>
                  <text x="152" y="116">[4,</text>
                  <text x="180" y="116">6)</text>
                  <text x="296" y="116">level</text>
                  <text x="328" y="116">2</text>
                  <text x="40" y="148">/</text>
                  <text x="96" y="148">\</text>
                  <text x="168" y="148">|</text>
                  <text x="32" y="180">[0,2)</text>
                  <text x="96" y="180">[2,4)</text>
                  <text x="160" y="180">[4,6)</text>
                  <text x="296" y="180">level</text>
                  <text x="328" y="180">1</text>
                  <text x="24" y="212">/</text>
                  <text x="40" y="212">\</text>
                  <text x="88" y="212">/</text>
                  <text x="104" y="212">\</text>
                  <text x="152" y="212">/</text>
                  <text x="168" y="212">\</text>
                  <text x="16" y="244">0</text>
                  <text x="48" y="244">1</text>
                  <text x="80" y="244">2</text>
                  <text x="112" y="244">3</text>
                  <text x="144" y="244">4</text>
                  <text x="176" y="244">5</text>
                  <text x="296" y="244">level</text>
                  <text x="328" y="244">0</text>
                  <text x="120" y="324">[0,</text>
                  <text x="148" y="324">8)</text>
                  <text x="296" y="324">level</text>
                  <text x="328" y="324">3</text>
                  <text x="72" y="356">/</text>
                  <text x="192" y="356">\</text>
                  <text x="56" y="388">[0,</text>
                  <text x="84" y="388">4)</text>
                  <text x="184" y="388">[4,</text>
                  <text x="212" y="388">8)</text>
                  <text x="296" y="388">level</text>
                  <text x="328" y="388">2</text>
                  <text x="40" y="420">/</text>
                  <text x="96" y="420">\</text>
                  <text x="168" y="420">/</text>
                  <text x="224" y="420">\</text>
                  <text x="32" y="452">[0,2)</text>
                  <text x="96" y="452">[2,4)</text>
                  <text x="160" y="452">[4,6)</text>
                  <text x="224" y="452">[6,8)</text>
                  <text x="296" y="452">level</text>
                  <text x="328" y="452">1</text>
                  <text x="24" y="484">/</text>
                  <text x="40" y="484">\</text>
                  <text x="88" y="484">/</text>
                  <text x="104" y="484">\</text>
                  <text x="152" y="484">/</text>
                  <text x="168" y="484">\</text>
                  <text x="216" y="484">/</text>
                  <text x="232" y="484">\</text>
                  <text x="16" y="516">0</text>
                  <text x="48" y="516">1</text>
                  <text x="80" y="516">2</text>
                  <text x="112" y="516">3</text>
                  <text x="144" y="516">4</text>
                  <text x="176" y="516">5</text>
                  <text x="208" y="516">6</text>
                  <text x="240" y="516">7</text>
                  <text x="296" y="516">level</text>
                  <text x="328" y="516">0</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
       +----------------+
       |     [0, 6)     |         level 3
       +----------------+
        /           |
   +========+  +--------+
   | [0, 4) |  | [4, 6) |         level 2
   +========+  +--------+
    /      \        |
+-----+ +-----+ +~~~~~+
|[0,2)| |[2,4)| |[4,6)|           level 1
+-----+ +-----+ +~~~~~+
  / \     / \     / \
+-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5|           level 0
+-+ +-+ +-+ +-+ +-+ +-+


       +----------------+
       |     [0, 8)     |         level 3
       +----------------+
        /              \
   +========+      +--------+
   | [0, 4) |      | [4, 8) |     level 2
   +========+      +--------+
    /      \        /      \
+-----+ +-----+ +~~~~~+ +=====+
|[0,2)| |[2,4)| |[4,6)| |[6,8)|   level 1
+-----+ +-----+ +~~~~~+ +=====+
  / \     / \     / \     / \
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5| |6| |7|   level 0
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
]]></artwork>
          </artset>
        </figure>
        <t>Note that the truncated inclusion proof may include nodes from lower levels, if the corresponding level was skipped on the right edge. <xref target="fig-truncate-consistency-proof-2"/> depicts a subtree consistency proof between the subtree <tt>[0, 6)</tt> and the Merkle Tree of size 7. As above, the starting node is <tt>[4, 6)</tt> at level 1. The inclusion proof portion includes leaf 6 at level 0. This is because leaf 6 is taking the place of its skipped parent at level 1. (A skipped node can be thought of as a duplicate of its singular child.)</t>
        <figure anchor="fig-truncate-consistency-proof-2">
          <name>The interaction between inclusion proof truncation and skipped levels</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="544" width="320" viewBox="0 0 320 544" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,160 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 8,256" fill="none" stroke="black"/>
                <path d="M 8,432 L 8,464" fill="none" stroke="black"/>
                <path d="M 8,496 L 8,528" fill="none" stroke="black"/>
                <path d="M 24,224 L 24,256" fill="none" stroke="black"/>
                <path d="M 24,496 L 24,528" fill="none" stroke="black"/>
                <path d="M 32,96 L 32,128" fill="none" stroke="black"/>
                <path d="M 32,368 L 32,400" fill="none" stroke="black"/>
                <path d="M 40,224 L 40,256" fill="none" stroke="black"/>
                <path d="M 40,496 L 40,528" fill="none" stroke="black"/>
                <path d="M 56,160 L 56,192" fill="none" stroke="black"/>
                <path d="M 56,224 L 56,256" fill="none" stroke="black"/>
                <path d="M 56,432 L 56,464" fill="none" stroke="black"/>
                <path d="M 56,496 L 56,528" fill="none" stroke="black"/>
                <path d="M 64,32 L 64,64" fill="none" stroke="black"/>
                <path d="M 64,304 L 64,336" fill="none" stroke="black"/>
                <path d="M 72,160 L 72,192" fill="none" stroke="black"/>
                <path d="M 72,224 L 72,256" fill="none" stroke="black"/>
                <path d="M 72,432 L 72,464" fill="none" stroke="black"/>
                <path d="M 72,496 L 72,528" fill="none" stroke="black"/>
                <path d="M 88,224 L 88,256" fill="none" stroke="black"/>
                <path d="M 88,496 L 88,528" fill="none" stroke="black"/>
                <path d="M 104,96 L 104,128" fill="none" stroke="black"/>
                <path d="M 104,224 L 104,256" fill="none" stroke="black"/>
                <path d="M 104,368 L 104,400" fill="none" stroke="black"/>
                <path d="M 104,496 L 104,528" fill="none" stroke="black"/>
                <path d="M 120,160 L 120,192" fill="none" stroke="black"/>
                <path d="M 120,224 L 120,256" fill="none" stroke="black"/>
                <path d="M 120,432 L 120,464" fill="none" stroke="black"/>
                <path d="M 120,496 L 120,528" fill="none" stroke="black"/>
                <path d="M 128,96 L 128,128" fill="none" stroke="black"/>
                <path d="M 136,160 L 136,192" fill="none" stroke="black"/>
                <path d="M 136,224 L 136,256" fill="none" stroke="black"/>
                <path d="M 136,432 L 136,464" fill="none" stroke="black"/>
                <path d="M 136,496 L 136,528" fill="none" stroke="black"/>
                <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                <path d="M 152,496 L 152,528" fill="none" stroke="black"/>
                <path d="M 160,368 L 160,400" fill="none" stroke="black"/>
                <path d="M 168,224 L 168,256" fill="none" stroke="black"/>
                <path d="M 168,496 L 168,528" fill="none" stroke="black"/>
                <path d="M 184,160 L 184,192" fill="none" stroke="black"/>
                <path d="M 184,224 L 184,256" fill="none" stroke="black"/>
                <path d="M 184,432 L 184,464" fill="none" stroke="black"/>
                <path d="M 184,496 L 184,528" fill="none" stroke="black"/>
                <path d="M 200,32 L 200,64" fill="none" stroke="black"/>
                <path d="M 200,96 L 200,128" fill="none" stroke="black"/>
                <path d="M 200,304 L 200,336" fill="none" stroke="black"/>
                <path d="M 200,432 L 200,464" fill="none" stroke="black"/>
                <path d="M 200,496 L 200,528" fill="none" stroke="black"/>
                <path d="M 208,480 L 208,488" fill="none" stroke="black"/>
                <path d="M 216,432 L 216,464" fill="none" stroke="black"/>
                <path d="M 216,496 L 216,528" fill="none" stroke="black"/>
                <path d="M 232,368 L 232,400" fill="none" stroke="black"/>
                <path d="M 64,32 L 200,32" fill="none" stroke="black"/>
                <path d="M 64,64 L 200,64" fill="none" stroke="black"/>
                <path d="M 32,94 L 104,94" fill="none" stroke="black"/>
                <path d="M 32,98 L 104,98" fill="none" stroke="black"/>
                <path d="M 128,96 L 200,96" fill="none" stroke="black"/>
                <path d="M 32,126 L 104,126" fill="none" stroke="black"/>
                <path d="M 32,130 L 104,130" fill="none" stroke="black"/>
                <path d="M 128,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 56,160" fill="none" stroke="black"/>
                <path d="M 72,160 L 120,160" fill="none" stroke="black"/>
                <path d="M 136,160 Q 138,156.8 140,160 Q 142,163.2 144,160 Q 146,156.8 148,160 Q 150,163.2 152,160 Q 154,156.8 156,160 Q 158,163.2 160,160 Q 162,156.8 164,160 Q 166,163.2 168,160 Q 170,156.8 172,160 Q 174,163.2 176,160 Q 178,156.8 180,160 Q 182,163.2 184,160 " fill="none" stroke="black"/>
                <path d="M 8,192 L 56,192" fill="none" stroke="black"/>
                <path d="M 72,192 L 120,192" fill="none" stroke="black"/>
                <path d="M 136,192 Q 138,188.8 140,192 Q 142,195.2 144,192 Q 146,188.8 148,192 Q 150,195.2 152,192 Q 154,188.8 156,192 Q 158,195.2 160,192 Q 162,188.8 164,192 Q 166,195.2 168,192 Q 170,188.8 172,192 Q 174,195.2 176,192 Q 178,188.8 180,192 Q 182,195.2 184,192 " fill="none" stroke="black"/>
                <path d="M 8,224 L 24,224" fill="none" stroke="black"/>
                <path d="M 40,224 L 56,224" fill="none" stroke="black"/>
                <path d="M 72,224 L 88,224" fill="none" stroke="black"/>
                <path d="M 104,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 136,224 L 152,224" fill="none" stroke="black"/>
                <path d="M 168,224 L 184,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 24,256" fill="none" stroke="black"/>
                <path d="M 40,256 L 56,256" fill="none" stroke="black"/>
                <path d="M 72,256 L 88,256" fill="none" stroke="black"/>
                <path d="M 104,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 136,256 L 152,256" fill="none" stroke="black"/>
                <path d="M 168,256 L 184,256" fill="none" stroke="black"/>
                <path d="M 64,304 L 200,304" fill="none" stroke="black"/>
                <path d="M 64,336 L 200,336" fill="none" stroke="black"/>
                <path d="M 32,366 L 104,366" fill="none" stroke="black"/>
                <path d="M 32,370 L 104,370" fill="none" stroke="black"/>
                <path d="M 160,368 L 232,368" fill="none" stroke="black"/>
                <path d="M 32,398 L 104,398" fill="none" stroke="black"/>
                <path d="M 32,402 L 104,402" fill="none" stroke="black"/>
                <path d="M 160,400 L 232,400" fill="none" stroke="black"/>
                <path d="M 8,432 L 56,432" fill="none" stroke="black"/>
                <path d="M 72,432 L 120,432" fill="none" stroke="black"/>
                <path d="M 136,432 Q 138,428.8 140,432 Q 142,435.2 144,432 Q 146,428.8 148,432 Q 150,435.2 152,432 Q 154,428.8 156,432 Q 158,435.2 160,432 Q 162,428.8 164,432 Q 166,435.2 168,432 Q 170,428.8 172,432 Q 174,435.2 176,432 Q 178,428.8 180,432 Q 182,435.2 184,432 " fill="none" stroke="black"/>
                <path d="M 200,430 L 216,430" fill="none" stroke="black"/>
                <path d="M 200,434 L 216,434" fill="none" stroke="black"/>
                <path d="M 8,464 L 56,464" fill="none" stroke="black"/>
                <path d="M 72,464 L 120,464" fill="none" stroke="black"/>
                <path d="M 136,464 Q 138,460.8 140,464 Q 142,467.2 144,464 Q 146,460.8 148,464 Q 150,467.2 152,464 Q 154,460.8 156,464 Q 158,467.2 160,464 Q 162,460.8 164,464 Q 166,467.2 168,464 Q 170,460.8 172,464 Q 174,467.2 176,464 Q 178,460.8 180,464 Q 182,467.2 184,464 " fill="none" stroke="black"/>
                <path d="M 200,462 L 216,462" fill="none" stroke="black"/>
                <path d="M 200,466 L 216,466" fill="none" stroke="black"/>
                <path d="M 8,496 L 24,496" fill="none" stroke="black"/>
                <path d="M 40,496 L 56,496" fill="none" stroke="black"/>
                <path d="M 72,496 L 88,496" fill="none" stroke="black"/>
                <path d="M 104,496 L 120,496" fill="none" stroke="black"/>
                <path d="M 136,496 L 152,496" fill="none" stroke="black"/>
                <path d="M 168,496 L 184,496" fill="none" stroke="black"/>
                <path d="M 200,496 L 216,496" fill="none" stroke="black"/>
                <path d="M 8,528 L 24,528" fill="none" stroke="black"/>
                <path d="M 40,528 L 56,528" fill="none" stroke="black"/>
                <path d="M 72,528 L 88,528" fill="none" stroke="black"/>
                <path d="M 104,528 L 120,528" fill="none" stroke="black"/>
                <path d="M 136,528 L 152,528" fill="none" stroke="black"/>
                <path d="M 168,528 L 184,528" fill="none" stroke="black"/>
                <path d="M 200,528 L 216,528" fill="none" stroke="black"/>
                <g class="text">
                  <text x="120" y="52">[0,</text>
                  <text x="148" y="52">6)</text>
                  <text x="280" y="52">level</text>
                  <text x="312" y="52">3</text>
                  <text x="72" y="84">/</text>
                  <text x="168" y="84">|</text>
                  <text x="56" y="116">[0,</text>
                  <text x="84" y="116">4)</text>
                  <text x="152" y="116">[4,</text>
                  <text x="180" y="116">6)</text>
                  <text x="280" y="116">level</text>
                  <text x="312" y="116">2</text>
                  <text x="40" y="148">/</text>
                  <text x="96" y="148">\</text>
                  <text x="168" y="148">|</text>
                  <text x="32" y="180">[0,2)</text>
                  <text x="96" y="180">[2,4)</text>
                  <text x="160" y="180">[4,6)</text>
                  <text x="280" y="180">level</text>
                  <text x="312" y="180">1</text>
                  <text x="24" y="212">/</text>
                  <text x="40" y="212">\</text>
                  <text x="88" y="212">/</text>
                  <text x="104" y="212">\</text>
                  <text x="152" y="212">/</text>
                  <text x="168" y="212">\</text>
                  <text x="16" y="244">0</text>
                  <text x="48" y="244">1</text>
                  <text x="80" y="244">2</text>
                  <text x="112" y="244">3</text>
                  <text x="144" y="244">4</text>
                  <text x="176" y="244">5</text>
                  <text x="280" y="244">level</text>
                  <text x="312" y="244">0</text>
                  <text x="120" y="324">[0,</text>
                  <text x="148" y="324">7)</text>
                  <text x="280" y="324">level</text>
                  <text x="312" y="324">3</text>
                  <text x="72" y="356">/</text>
                  <text x="192" y="356">\</text>
                  <text x="56" y="388">[0,</text>
                  <text x="84" y="388">4)</text>
                  <text x="184" y="388">[4,</text>
                  <text x="212" y="388">7)</text>
                  <text x="280" y="388">level</text>
                  <text x="312" y="388">2</text>
                  <text x="40" y="420">/</text>
                  <text x="96" y="420">\</text>
                  <text x="168" y="420">/</text>
                  <text x="208" y="420">|</text>
                  <text x="32" y="452">[0,2)</text>
                  <text x="96" y="452">[2,4)</text>
                  <text x="160" y="452">[4,6)</text>
                  <text x="208" y="452">6</text>
                  <text x="280" y="452">level</text>
                  <text x="312" y="452">1</text>
                  <text x="24" y="484">/</text>
                  <text x="40" y="484">\</text>
                  <text x="88" y="484">/</text>
                  <text x="104" y="484">\</text>
                  <text x="152" y="484">/</text>
                  <text x="168" y="484">\</text>
                  <text x="16" y="516">0</text>
                  <text x="48" y="516">1</text>
                  <text x="80" y="516">2</text>
                  <text x="112" y="516">3</text>
                  <text x="144" y="516">4</text>
                  <text x="176" y="516">5</text>
                  <text x="208" y="516">6</text>
                  <text x="280" y="516">level</text>
                  <text x="312" y="516">0</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
       +----------------+
       |     [0, 6)     |       level 3
       +----------------+
        /           |
   +========+  +--------+
   | [0, 4) |  | [4, 6) |       level 2
   +========+  +--------+
    /      \        |
+-----+ +-----+ +~~~~~+
|[0,2)| |[2,4)| |[4,6)|         level 1
+-----+ +-----+ +~~~~~+
  / \     / \     / \
+-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5|         level 0
+-+ +-+ +-+ +-+ +-+ +-+


       +----------------+
       |     [0, 7)     |       level 3
       +----------------+
        /              \
   +========+      +--------+
   | [0, 4) |      | [4, 7) |   level 2
   +========+      +--------+
    /      \        /    |
+-----+ +-----+ +~~~~~+ +=+
|[0,2)| |[2,4)| |[4,6)| |6|     level 1
+-----+ +-----+ +~~~~~+ +=+
  / \     / \     / \    |
+-+ +-+ +-+ +-+ +-+ +-+ +-+
|0| |1| |2| |3| |4| |5| |6|     level 0
+-+ +-+ +-+ +-+ +-+ +-+ +-+
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="consistency-proof-verification-explain">
        <name>Consistency Proof Verification</name>
        <t>The procedure in <xref target="verifying-a-subtree-consistency-proof"/> is structured similarly to inclusion proof evaluation (<xref target="inclusion-proof-evaluation-explain"/>). It iteratively builds two hashes, <tt>fr</tt> and <tt>sr</tt>, which are expected to equal <tt>node_hash</tt> and <tt>root_hash</tt>, respectively. Everything hashed into <tt>fr</tt> is also hashed into <tt>sr</tt>, so success demonstrates that <tt>root_hash</tt> contains <tt>node_hash</tt>.</t>
        <t>Step 2 initializes <tt>fn</tt> (first number), <tt>sn</tt> (second number), and <tt>tn</tt> (third number) to follow, respectively, the paths to <tt>start</tt>, <tt>end - 1</tt> (the last element of the subtree), and <tt>n - 1</tt> (the last element of the tree).</t>
        <t>Steps 3 and 4 then skip to the starting node, described in <xref target="consistency-proof-structure"/>. The starting node may be:</t>
        <ul spacing="normal">
          <li>
            <t>The entire subtree <tt>[start, end)</tt> if <tt>[start, end)</tt> is directly contained in the tree. This will occur if <tt>end</tt> is <tt>n</tt> (step 3), or if <tt>[start, end)</tt> is full (exiting step 4 because <tt>fn</tt> is <tt>sn</tt>).</t>
          </li>
          <li>
            <t>Otherwise, the highest full subtree along the right edge of <tt>[start, end)</tt>. This corresponds to the process exiting step 4 because <tt>LSB(sn)</tt> is not set.</t>
          </li>
        </ul>
        <t>Steps 5 and 6 initialize the hashes <tt>fr</tt> and <tt>sr</tt>:</t>
        <ul spacing="normal">
          <li>
            <t>In the first case above, <tt>fn</tt> will equal <tt>sn</tt> after truncation. Step 5 will then initialize the hashes to <tt>node_hash</tt> because the consistency proof does not need to include the starting node.</t>
          </li>
          <li>
            <t>In the second case above, <tt>fn</tt> is less than <tt>sn</tt>. Step 6 will then initialize the hashes to the first value in the consistency proof.</t>
          </li>
        </ul>
        <t>Step 7 incorporates the remainder of the consistency proof into <tt>fr</tt> and <tt>sr</tt>:</t>
        <ul spacing="normal">
          <li>
            <t>All hashes are incorporated into <tt>sr</tt>, with hashing on the left or right determined the same as in inclusion proof evaluation.</t>
          </li>
          <li>
            <t>A subset of the hashes are incorporated into <tt>fr</tt>. It skips any hash on the right because those contain elements greater than <tt>end - 1</tt>. It also stops incorporating when <tt>fn</tt> and <tt>sn</tt> have converged.</t>
          </li>
        </ul>
        <t>This reconstructs the hashes of the subtree and full tree, which are then compared to expected values in step 8.</t>
        <t>In the case when <tt>fn</tt> is <tt>sn</tt> in step 5, the condition in step 7.2.1 is always false, and <tt>fr</tt> is always equal to <tt>node_hash</tt> in step 8. In this case, steps 6 through 8 are equivalent to verifying an inclusion proof for the truncated subtree <tt>[fn, sn + 1)</tt> and truncated tree <tt>tn + 1</tt>.</t>
      </section>
    </section>
    <section anchor="extensions-to-tiled-transparency-logs-to-be-removed">
      <name>Extensions to Tiled Transparency Logs (To Be Removed)</name>
      <t>[[TODO: This section is expected to be removed. It is sketched here purely for illustrative purposes, until the features are defined somewhere else, e.g. in the upstream tlog documents.]]</t>
      <section anchor="subtree-signed-note-format">
        <name>Subtree Signed Note Format</name>
        <t>A subtree, with signatures, can be represented as a signed note <xref target="SIGNED-NOTE"/>. Trust anchor IDs can be converted into log origins and cosigner names by concatenating the ASCII string <tt>oid/1.3.6.1.4.1.</tt> and the ASCII representation of the trust anchor ID. For example, the checkpoint origin for a log named <tt>32473.1</tt> would be <tt>oid/1.3.6.1.4.1.32473.1</tt>.</t>
        <t>The note body is a sequence of the following lines, each terminated by a newline character (U+000A):</t>
        <ul spacing="normal">
          <li>
            <t>The log origin</t>
          </li>
          <li>
            <t>Two space-separated, non-negative decimal integers, <tt>&lt;start&gt; &lt;end&gt;</tt></t>
          </li>
          <li>
            <t>The subtree hash, as single hash encoded in base64</t>
          </li>
        </ul>
        <t>Each note signature has a key name of the cosigner name. The signature's key ID is computed using the reserved signature type in <xref target="SIGNED-NOTE"/>, and a fixed string, as follows:</t>
        <sourcecode type="pseudocode"><![CDATA[
key ID = SHA-256(key name || 0x0A || 0xFF || "mtc-subtree/v1")[:4]
]]></sourcecode>
        <t>A subtree whose <tt>start</tt> is zero can also be represented as a checkpoint <xref target="TLOG-CHECKPOINT"/>. A corresponding subtree signature can be represented as a note signature using a key ID computed as follows:</t>
        <sourcecode type="pseudocode"><![CDATA[
key ID = SHA-256(key name || 0x0A || 0xFF || "mtc-checkpoint/v1")[:4]
]]></sourcecode>
        <t>The only difference between the two forms is the implicit transformation from the signed note text to the MTCSubtree structure.</t>
      </section>
      <section anchor="requesting-subtree-signatures">
        <name>Requesting Subtree Signatures</name>
        <t>This section defines the <tt>sign-subtree</tt> cosigner HTTP endpoint for clients to obtain subtree signatures from non-CA cosigners, such as mirrors and witnesses. It may be used by the CA when assembling a certificate, or by an authenticating party to add a cosignature to a certificate that the CA did not themselves obtain.</t>
        <t>The cosigner MAY expose this endpoint publicly to general authenticating parties, or privately to the CA. The latter is sufficient if the CA is known to automatically request cosignatures from this cosigner when constructing certificates. If private, authenticating the CA is out of scope for this document.</t>
        <t>Clients call this endpoint as <tt>POST &lt;prefix&gt;/sign-subtree</tt>, where <tt>prefix</tt> is some URL prefix. For a mirror or witness, the URL prefix is the submission prefix. The client's request body MUST be a sequence of:</t>
        <ul spacing="normal">
          <li>
            <t>The requested subtree as a signed note (<xref target="subtree-signed-note-format"/>), with zero or more signatures. The endpoint MAY require signatures from the CA as a DoS mitigation, as described below.</t>
          </li>
          <li>
            <t>A blank line</t>
          </li>
          <li>
            <t>A checkpoint, signed by the requested cosigner. The checkpoint's tree size must be at least <tt>end</tt>.</t>
          </li>
          <li>
            <t>A blank line</t>
          </li>
          <li>
            <t>Zero or more subtree consistency proof (<xref target="subtree-consistency-proofs"/>) lines. Each line MUST encode a single hash in base64 <xref target="RFC4648"/>. The client MUST NOT send more than 63 consistency proof lines.</t>
          </li>
        </ul>
        <t>Each line MUST terminate in a newline character (U+000A).</t>
        <t>The cosigner performs the following steps:</t>
        <ol spacing="normal" type="1"><li>
            <t>Check that the checkpoint contains signatures from itself</t>
          </li>
          <li>
            <t>Check that the subtree consistency proof proves consistency between the subtree hash and the checkpoint</t>
          </li>
          <li>
            <t>If all checks pass, cosign the subtree, as described in <xref target="cosigners"/></t>
          </li>
        </ol>
        <t>On success, the response body MUST be a sequence of one or more note signature lines <xref target="SIGNED-NOTE"/>, each starting with an em dash character (U+2014) and ending with a newline character (U+000A). The signatures MUST be cosignatures from the cosigner key(s) on the subtree.</t>
        <t>Instead of statelessly validating checkpoints by signature, the cosigner MAY statefully check the requested checkpoint against internal witness or mirror state. In this case, if the cosigner needs a newer checkpoint, it responds with a "409 Conflict" with its latest signed checkpoint. In this case, the subtree cosigning SHOULD remember and accept the last few signed checkpoints, to minimize conflicts.</t>
        <t>If operating statefully, the subtree cosigner process only needs read access to the mirror or witness state and can freely operate on stale state without violating any invariants.</t>
        <t>Mirrors MAY choose to check subtree hashes by querying their log state, instead of evaluating proofs.</t>
        <t>Publicly-exposed subtree cosigning endpoints MAY mitigate DoS in a variety of techniques:</t>
        <ul spacing="normal">
          <li>
            <t>Only cosigning recent subtrees, as old subtrees do not need to be co-signed</t>
          </li>
          <li>
            <t>Caching subtree signatures</t>
          </li>
          <li>
            <t>Requiring a CA signature on the subtree; CAs are only expected to sign two subtrees (<xref target="arbitrary-intervals"/>) for each checkpoint</t>
          </li>
          <li>
            <t>Rate-limiting requests</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>This document stands on the shoulders of giants and builds upon decades of work in TLS authentication, X.509, and Certificate Transparency. The authors would like to thank all those who have contributed over the history of these protocols.</t>
      <t>The authors additionally thank Bob Beck, Ryan Dickson, Aaron Gable, Nick Harper, Russ Housley, Dennis Jackson, Matt Mueller, Chris Patton, Michael Richardson, Ryan Sleevi, and Emily Stark for many valuable discussions and insights which led to this document, as well as feedback on the document itself. We wish to thank Mia Celeste in particular, whose implementation of an earlier draft revealed several pitfalls.</t>
      <t>The idea to mint tree heads infrequently was originally described by Richard Barnes in <xref target="STH-Discipline"/>. The size optimization in Merkle Tree Certificates is an application of this idea to the certificate itself.</t>
    </section>
    <section numbered="false" anchor="change-log">
      <name>Change log</name>
      <ul empty="true">
        <li>
          <t><strong>RFC Editor's Note:</strong> Please remove this section prior to publication of a
final version of this document.</t>
        </li>
      </ul>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-00">
        <name>Since draft-davidben-tls-merkle-tree-certs-00</name>
        <ul spacing="normal">
          <li>
            <t>Simplify hashing by removing the internal padding to align with block size. #72</t>
          </li>
          <li>
            <t>Avoid the temptation of floating points. #66</t>
          </li>
          <li>
            <t>Require <tt>lifetime</tt> to be a multiple of <tt>batch_duration</tt>. #65</t>
          </li>
          <li>
            <t>Rename window to validity window. #21</t>
          </li>
          <li>
            <t>Split Assertion into Assertion and AbridgedAssertion. The latter is used in the Merkle Tree and HTTP interface. It replaces <tt>subject_info</tt> by a hash, to save space by not serving large post-quantum public keys. The original Assertion is used everywhere else, including BikeshedCertificate. #6</t>
          </li>
          <li>
            <t>Add proper context to every node in the Merkle Tree. #32</t>
          </li>
          <li>
            <t>Clarify we use a single <tt>CertificateEntry</tt>. #11</t>
          </li>
          <li>
            <t>Clarify we use POSIX time. #1</t>
          </li>
          <li>
            <t>Elaborate on CA public key and signature format. #27</t>
          </li>
          <li>
            <t>Miscellaneous changes.</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-01">
        <name>Since draft-davidben-tls-merkle-tree-certs-01</name>
        <ul spacing="normal">
          <li>
            <t>Minor editorial changes</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-02">
        <name>Since draft-davidben-tls-merkle-tree-certs-02</name>
        <ul spacing="normal">
          <li>
            <t>Replace the negotiation mechanism with TLS Trust Anchor Identifiers.</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-03">
        <name>Since draft-davidben-tls-merkle-tree-certs-03</name>
        <ul spacing="normal">
          <li>
            <t>Switch terminology from "subscriber" to "authenticating party".</t>
          </li>
          <li>
            <t>Use &lt;1..2^24-1&gt; encoding for all certificate types in the CertificateEntry TLS message</t>
          </li>
          <li>
            <t>Clarify discussion and roles in transparency ecosystem</t>
          </li>
          <li>
            <t>Update references</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-04">
        <name>Since draft-davidben-tls-merkle-tree-certs-04</name>
        <t>Substantially reworked the design. The old design was essentially the landmark checkpoint and CA-built logs ideas, but targeting only the optimized and slow issuance path, and with a more bespoke tree structure:</t>
        <t>In both draft-04 and draft-05, a CA looks like today’s CAs except that they run some software to publish what they issue and sign tree heads to certify certificates in bulk.</t>
        <t>In draft-04, the CA software publishes certificates in a bunch of independent Merkle Trees. This is very easy to do as a collection of highly cacheable, immutable static files because each tree is constructed independently, and never appended to after being built. In draft-05, the certificates are published in a single Merkle Tree. The <xref target="TLOG-TILES"/> interface allows such trees to also use highly cacheable, immutable static files.</t>
        <t>In draft-04, there only are hourly tree heads. Clients are provisioned with tree heads ahead of time so we can make small, inclusion-proof-only certificates. In draft-05, the ecosystem must coordinate on defining "landmark" checkpoints. Clients are provisioned with subtrees describing landmark checkpoints ahead of time so we can make small, inclusion-proof-only certificates.</t>
        <t>In draft-04, each tree head is independent. In draft-05, each landmark checkpoint contains all the previous checkpoints.</t>
        <t>In draft-04, the independent tree heads were easily prunable. In draft-05, we define how to prune a Merkle Tree.</t>
        <t>In draft-04, there is no fast issuance mode. In draft-05, frequent, non-landmark checkpoints can be combined with inclusion proofs and witness signatures for fast issuance. This is essentially an STH and inclusion proof in CT.</t>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-05">
        <name>Since draft-davidben-tls-merkle-tree-certs-05</name>
        <ul spacing="normal">
          <li>
            <t>Add some discussion on malleability</t>
          </li>
          <li>
            <t>Discuss the monitoring impacts of the responsibility shift from CA with log quorum to CA+log with mirror quorum</t>
          </li>
          <li>
            <t>Sketch out a more concrete initial ACME extension</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-06">
        <name>Since draft-davidben-tls-merkle-tree-certs-06</name>
        <ul spacing="normal">
          <li>
            <t>Fix mistyped reference</t>
          </li>
          <li>
            <t>Removed now unnecessary placeholder text</t>
          </li>
          <li>
            <t>First draft at IANA registration and ASN.1 module</t>
          </li>
          <li>
            <t>Added a prose version of the procedure to select subtrees</t>
          </li>
          <li>
            <t>Rename 'landmarks checkpoint' to 'landmarks'</t>
          </li>
          <li>
            <t>Clarify and fix an off-by-one error in recommended landmark allocation scheme</t>
          </li>
          <li>
            <t>Add some diagrams to the Overview section</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-07">
        <name>Since draft-davidben-tls-merkle-tree-certs-07</name>
        <ul spacing="normal">
          <li>
            <t>Clarify landmark zero</t>
          </li>
          <li>
            <t>Clarify signature verification process</t>
          </li>
          <li>
            <t>Improve subtree consistency proof verification algorithm</t>
          </li>
          <li>
            <t>Add an appendix that explains the Merkle Tree proof procedures</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-08">
        <name>Since draft-davidben-tls-merkle-tree-certs-08</name>
        <ul spacing="normal">
          <li>
            <t>Improvements to malleability discussion</t>
          </li>
          <li>
            <t>Improvements to subtree definition</t>
          </li>
          <li>
            <t>Improvements to <tt>trust_anchors</tt> integration</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-09">
        <name>Since draft-davidben-tls-merkle-tree-certs-09</name>
        <ul spacing="normal">
          <li>
            <t>Editorial fixes</t>
          </li>
          <li>
            <t>Set a more accurate intended status</t>
          </li>
          <li>
            <t>Fixes to ASN.1 module</t>
          </li>
          <li>
            <t>Make log entry more friendly to single-pass verification</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-davidben-tls-merkle-tree-certs-10">
        <name>Since draft-davidben-tls-merkle-tree-certs-10</name>
        <ul spacing="normal">
          <li>
            <t>Adopted by working group</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-plants-merkle-tree-certs-00">
        <name>Since draft-ietf-plants-merkle-tree-certs-00</name>
        <ul spacing="normal">
          <li>
            <t>Address editorial comments from WG adoption call</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-plants-merkle-tree-certs-01">
        <name>Since draft-ietf-plants-merkle-tree-certs-01</name>
        <ul spacing="normal">
          <li>
            <t>Renamed full certificate to standalone certificate, signatureless certificate to landmark certificate.</t>
          </li>
          <li>
            <t>Included subject public key algorithm in log entries</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
gzeKT+3AacYvD0D97bsABMgs5aLDiGfDgx6Dck/w69hoWz9ahItQqghKxKcZ
Fr0VKdwSXFfpXcUz9zs7/U0zAwmXU9IUKrF9lv5gpOpdoVDVMFpQSl0KX6O3
puqCupZVIDFjaBhVYDObLKkgXMiMySC03fftGv0ds1C/KDZeUtdWbSK2qP5P
5WL+83b/pw38N1rd6fSf7nSePnoM/z5aC6tP/mBrMp6xrBSm5noSSyhXSdX4
tgRBFmEoVyDiZAHUQFVvBFPa3mOWHJ/mV8Ht1GKAVEdOLTiyAUVi4sMmXpzz
KjfKdk6yIWRSLDItSh0PV2+HR8NQhM2tKyI5ymdDcp1K4ogXXyn7JA9+INU3
prdSsSobR2C8anWbr5G/0sJiDEcT2m6nzT32mtygqnNUc+RnWE7KLKtIrvMP
sKwC7bXWozkyUZ/XuegIQ/S8jJOPlL9rmp+IPYDMB0F6APOgtJR+SlpcF5Pv
j1zLiVeR5+wzn0yTj6nUm6Nep6aAr7Eh5ibHYV7AVU3JE3iTSOFOKs/IGQBi
Lp4YCT1MG+fMUjImzJJxiufpaVIYuOZpSRSZY+tR87BiUh2D7nbJD81gainI
qccuVfxN4ozcuJ1bCc0v2WHBIUwfUTkdYcAGXNwNUO/ZFycqR1xJ1xTsXi9d
f3Sgqqv6JmHorjlQ5eUJUP0xAYWH2Rg1G63Ga5i5RSFFJsbokS60Jv2zJcuM
Ez/r8T9cOzvUHW0zzaX2qQOUDFzs3dKcO84WTMt62pa0puSsNy/i/0jwgyQQ
8iIgHRnmVG2AikJSiA/3+EAfg1dQmZYI55RzIet6qknsZYQ1eXmazAI87jGa
iOjKWRfryNu7l6RJWzGPh53OyCHWHD4RXP/WO/+1UNGWkBZDkbbqRFFEL83Z
kv39s7YlJdtGrQdpzrKgczyDJZ3Hl3WjZ4RoSoVdOrprOy+DmxJo+DM2dLfZ
vRi+0DJ+eAJNDdBbW1JI53Lpv1IHjstYJxSlt95zy7VhUluydDgZnFy8Wv1E
vwDBeBZhcuLq5kcQRD9/5mewREnY40LXXNzyay6qS2JqR78XHucvhsNZqYgc
akGxjSg11xLJSC3Fj+IhCE5yqYRd09b0njuBzUVdcPGL63nC7MROq4+W9u9W
3I1t3kWQSyieWvMost5vIWNIPvyqiKYKSRyKLi1iRUeoKPfgazkUzNDzC9R6
Q5s6iCDXUq+JcsG11dlUb1ck2yA4TXQ7Ed7LqfF+eUuqnUU9t7JRe5NWrkEO
hichai/cV0tmXk5O9DazHVGUcGsFZvg1p5rKqrIryot8oGzrvDttkrvG8ol4
BEt15E1L48FuOUsTjO5wVpIqKBa9ltSpMC5C2V0qnbPwMY+rK91GhxbYoDLg
OaXZItEN2SX6kbqnuwwM+j01VagxIc8kD9j1dnzihTZHPCJYBgfoDhNTxGns
9TWZx6XiHECTuybp1CeULjUR5Tzri8PEjxaWiO1jGkg1TD5LQDq8ZaHoiPPg
Kb6KCZKJi++RdwQ4EZO+YYrVJkAAzTpoBeqSPbdG7zlfVXGbYBR/raozF+ae
lvrFjiix7ayPsS2YoPnRH5tqQbSvkjNhgaPseA9ZWwMc7unBxeFFdH7x5uj1
740PACSnpnGO/W2xf+3YeNMI5oAkl5iTsnphOoSiDE/PmGinrf7j3pob/lXT
oK+8QR3TxBDzr4Ah154fJ7aq7Necmk20+DMpaTa34s75X2LxWPKxmg2wwywQ
C2wYFHJiQzZUXDJqQLEpzWDLJjS0uSIZfplMgn4M59whXwodk2xbmTTgtnr9
6lrJtpgKgqTTMqlCQ4EtKSdtsXSrbs8bOmQvnrR7layEe6Tj+el2tCyOjGLr
MjdenkaXC6CilEoYhkBRqThTJUOV3a+unKWMY/usCONKiXCduVFeAPFmjLIZ
h+wuhuPi7rmcTxI2MjA7Y0qMHYGIIspZKDNOXVcU56V1u3sdK40uPafGKrhP
oJI2gwK+2VvZa2An4rdHy45rKNFQLAzORaV9fsVY1pTT0GtGcomITnCvmY46
W6l9bGrEmbIUmrEgrwIwp5Lztcgky/qvgVulHgbnwzJWcOKS/iijmOgc2/zR
8Dodyho0t7JNxLHdWKm8PhRnz92xMHoPiQGatuGVJUctJjfq7Iqds2CHVTr1
TY0EPwy4NJFyMqz0ndCkXyX8+lJJmjW2+9JJgWhC4YRPyf+2PeebOhyq5svY
0M1Cjo0gvB68H1Lpv8o1VgchEJi8JW14DJpgXtssLYeJFGsiJwqmluKYpuuc
BBdFNkQTJPqU7rhY6Pi2KrOiqNu2BIqtsB444oEMOISlNN+JRDDktrEy2d1M
2XUKlwm6oISjBrdb9w4LMPIvi7xYzAKPCuNWmJhK1h0MIOKyn4RqpSZadlag
xaNEWqYbcCjKTdUWvLyDMKVYtaKLoymexk1CZ/IAxD/gF+UDP3eaEZflVWVG
rGUaK0cJnq6PbQItDKSSRguXVLmkxX6jPAFyGnTczki7P6XKApzR0WCvl5Ta
tLABMAaQJhIz6EtOpUzNsfCKEdLi4PVh3Qxgmzyt4fuAs64DkDaE++KKhYrQ
lcfbKApdE7IYv6fXokf1DxfW5jfX9BvsJKpfJt9hT+cBwSWZTmw/ThNqIycR
S4k1SSVa2oI4aFbPTivLl5ENN2YTU3OB0VVOzae01qmQQ4FG9QWk4xonhawV
+5rbBrzJ1DYoUqKVKJEoWZVeVqVOqGxGM72XGJW8NB9LrAt798edMMze+DLa
Mgm8lKOGuoLyfFfKWvyVgu0b+Lz1VpVCTppD+Y1ownnBgoTNMT2rreU81/wI
uEuMNqsiPz3FRYSZlVkTvw1gsyts4rakU5uYMMD8QiLVsTmDrnEi8XjaCaX6
msAIRAQkPrpuQVE9ZSS+wuv+LC5xlOwbjSUmjVGHoKiWSW50iipiMZiOpKH5
jYtws+clzSZiSbWUaDPZrJHLR6hpFWlsIpNo+zAH5dtwqx3ke+uuT6UD0HpU
jxmUgFVz+PC+q5Fiq0kw1+agba/hqqmN0TSb9zSKg7rAjA2l9t4eh8VwYjF6
iRvn2/vhkInvJtfbs4k4ZpLfoNeMtr+ayP5G2FjP5YV6o855GZOoSAtX7SaS
hy31wpRa7hFpoqLZPvRguJh+qI/6gNFALHUcYmP0ZlcAhjW6tLLeUc8riG6/
O/XEJl+/7RDlO0NRnqyRYA4gsuwYFfMgYNTeIom3knIjzvrGKjJ9WCO3B6/e
nJ4cvT2xBY1fHr05fHn6JzFk16mUYT/esH4uvaHCnIskEUbmSel4aUL+Vdwo
M47CZ9quTXuZT6oboAdrVBAEmZMrRObvXNsjRdIk+U5SABt1HI9pVzVOYmm6
81ovDdn1AoAMV1ZlNjuqwlpL4RSXzd8cl91rirx1SoONfg9ib5sCb2100XeK
vH1jpWBkSkcoBUvrT6ZBJnzkbke1SbZi6f6OoAkR2aWNZkMlO921jUexBgN2
xmsB1O83aU14nCrnh2NSvEitXzhp20r9Sprz63Bqq1VifuQtabuk4jV2ibV1
Dkydu3CnaSnBhyrAx9bx47HhRrnqB/5jAhhdncUl+bCJGYkkwsDvLSsF9Ww/
h8bY20jkBs4rJYg5nUmtqUn0JHSWJenGo6bNsDTIMq0huZEE+XWOMmXh6XCf
SyyKQ2+YMVuV42FiV+DDB5PRbnXXT9fxTAWe+rKdQyvS1cOXucQKAvc2qUwT
z6abQdGF+BwfK7YIDvrI6k7KZGQ2n0hWYX5pVShVTEWn+LLe0mL0cDmouubh
5TQf0pkpkZUuE+IMWSzYpBJ/SDxjRUQlhlU8ELN+12qMXOqBoGAkEC0Okw3c
D5hFlxEvwIIEBEky2rDsbH3lkmkxA0J8jadYS2PldgGedTpNWh2KSClxGqO8
BwYDYZjXINgGWvca47M2Sl4vpihai9Rjg7tURS4yddtC4WwyTOVQdc/espKw
aSJbZA0NER/lbBtn5RWcEewnJpxxnJy9PiKW3UrkjVSMhoVhoDPeHmf9MGZ4
WxaPyiDOcuD/jqqxMXNCsbMcjLfICMw3wD6ublvvKw1kWCURTaqBJU2BqbiJ
mPxgdliOiXiThrUSleQW2+GK71K8XpGrIFGCdBlSjXFiW/2SPDrSKJEaFXJU
9zThC0XVXfQhsc5qG+422VBBATi4eJ1X+zg2VrizR7Tg+vo839kfjjhQ9S3X
sgduvbJygmZktrRKHI6RG5scTnSf+GkXwRO+sT+tXqOJB5F2kc2AbpMZH2Zs
KUVVSjknlD+IM8PKBLxKJCEF+h5GYumOmM5QM0U7dGAyUdX8UV6JKb5tPfrF
BPZdtaRtSTY5JnwFwafcRyhL6qG2GbPs8PO8aNwFJbR85TpUTL5Om1XLozGF
z/pMQ0bStf0Eo9pE0qtkOufojw9CDjBHGLFgZeWgUehlKHdCxcN1cNihDg6I
V/5nQan1jpbRS/ZGAHNCimsj+Lu0zq7oGH4tMpGWDih29VUCPJHmVIt+I2UK
ZyjIXZoaaDOZwpngnJhPjmayphkW7/owOTOpThGmpGXRIoJ+MEFGEt+CuoAP
vOUe1b2Ru3lXBxUmUh6bNEdrUPHNxB3mwqYEvzhNbHGD2JkaDx0twHWrMHVc
s9P0T7glUCobHBdADbutO+FkYzy1s+P91xfn0S+/Jw6wKOiCUCE1jNwDLbuq
5uXexsYlCDCLYQ8WuAED3lxuNA27QUGK5cajPmrw+wRmZWBFiR05mTgNgTc2
1gYUUyJloeozIq+zl5AiTxpa4EdfwxvYEwGdWEofQxJ1WeSLeckazpSlTfVm
Q68yz7PbKiPaiCZTcENnPg90CrlTIm2rk8BSFnI8G3bOk6NCRh5mc29tnizC
d5qMLxPGg2Z1eSS2asuf9d2FvTdcXcuTWmtf1iLQh2KTwLeQ39jqfDU/L5dW
MbTFOqWDm09LkCLiaoVn7BG/PUat1YVVKNvdo3sV7ndZBwOHZO/pwff84HtW
hAceVMUhf6v0dW5dEdV6VyTZYiYdJJbPsLoFhGaV2z+srXxp2i2W/lje8AK5
vNecAiQy//f4I7aWUG+9wdl/h7EA/ke1ZxDWP22pDhXUlWLfv6+0l2hQeO3k
18U6u14vmYYR7QNuSU0/xGJa4LzLU6yplppuDhnCIrPUflD0cLsD6TAwszUs
SPIE9Mtc6cYBwEFiUwECg45J77o2rX4awvTD6+iMYCaqnltOYxwn1nHGPRSq
CgduyMZzlq5uSS38327EGjyTzPbcm6Xj8dSkM5xSTxPZHN4UzGEva6GgGMvQ
XdZbgaLlNAhTDEMok4rMlBy9A791pPiQjt6l6gJNi6fkCED9SfpRGswMaDTY
T+M4HOAMV6WieGaClruNZlQZkJWOMVUikKwEeZUQhvQO5A4mXLHjBQjiUN2t
/hMffg1R+hgpzMNiMC/IIrfNIICn+9ai+xXQNkO3whYG3r5zYGqlRsyvPjKd
YuvYO3ZsadlRe3/z45PN1td3JbD/muLeTHU/yjbOFzoeW0JQrwc2idj1mec0
wEc7nAZI4+oy+hzIORy4Ze1JM1U5n+tBra6JLj/Dw+8+5uFbt8InqHYzWL2O
fvopeox1R1aH0T9ihOPagFocMLbj9QY8wwJB11JRaOCybMSHB9QtacZ2Fbjt
fWPpB/mwnczevw//ohN35jvBZhevdCeHd92dsO6h40ml4/2Du0tv1HQ4snhj
3LOt4qcTdRyt5SDBxOZG1kf4saxxDKyNEzsrexjd6O9j4DaC0iHMc+oW0jid
ihOoc7bSQYw4ztGLr16GcNpgWLFliZWkxYuBNZVMPIC1a3piLK5GykEkY6VG
iHPaodf9+hpFkm3/6uLi7Hzj/I8Hz0ngLcbhgLv3Gg6pBZv4XKi782Vy+Bq5
GcMjFyezqbrCdXuDphscfOlpafQaqWlLz7Ru6kL1zhgEWlakxXPUajx9ky2Z
S9BHeLU/qDFJcZo2V+y98E7XBl6aNpYMELb6xs1HD0Or4xNt3EXvNeHZ3fMG
2M02PCxZxe4fuV+NY6OCyxUV6ortfltNBGIjEgXM6QvGjseBdA0apfNnmk5F
YqQcq9JIKDzFbZM21vi1tMOvAdSQ1C31RpvoJulizW5rE88I24JnXfsXLz9S
8lElv6UgIzdwYGyPMeRwK1U1vualtr3N7sdkakXbcYYW47CJdG+lfhxUYA7g
Rhnn2k7e1JzkAydvhbOAHI0TLhVkHsySy7xKvSDu3rfZM3Z3BAHKD1ROGiCF
HlpcH7toRPGz6c8sknFLRnGZSSRFL3oty0KQqcA8diV5bkf232R4R92DyrXq
Mm+we4wEqJquHVw+w3WSVmE1nL2QSYcQpFiqLQ8LMDcgrGJnkyBgm4Ryr2aE
a2XZY5tPy9lRoKKUdi9NeBUuPbQ0GotoYXIMqKTeFbcsAUBTNHwubXhbpRFj
XCQfSVuPBZqjrNMF5V2G24TQSydBtEhlQ8CNgor+yWH6l0VaofsgnuW4TuuA
D+5Ir628v2uiaWLhwlLhg2Mgsa3kyJb97igl2RTBolfvGRjI2RDKTawsOaKa
Yew2JlUBUVBGuToHVSR4SoK6H0JhC/7TOSkHuitUietGd2tzHRgTTC/j1FYa
Z8uZvmkfa3VXBUQ2FuBnxya/GoV9/gTUA6+4YdSNtga9WpoNA6C9ilwQWtlW
jXecFFRPSmqPSNChm1zAYIe/m/jG42sEo9Bp6nWDd84iravLI7FnSWVKuBtL
otVdgpTmO7UVjon6B+fqwi4hDc8Rt8cLrtzgdaaxrMAiex4ljLlOBYwXlNwe
ahwiki19RkhVM1CiMBJvyPaeTXJGc5F00WuLdKP0SzP6PreWPiBwXeA3CRaL
Z0nI6DHWSq8f69slxZwynyn2jkI7uBgj+3ylmFAP67osWz121hCJuLW3BXWq
9OorLiW/zVUUXYG/QxUgVAvBqREOn6A3RztxqTcKgGxrVxNeTHLw7h+cHCqn
TFiJyDqnJIKLBIh2ZxSnldCYEty1u7tLwV2Ek+P8Jpvm8bhB8tP27ce9Hdep
nUdY6/CoXFCmNOiKA7UuRmvwD5TytDFPZjpsuzu6AtbUxWPuunS0B0Il0iLa
Z7cMdsrCstFuoVv93q6ucLC1SbIxrZTiQ4rSHtxdyySaIEhjrraEH5ObBIs+
sPzLla5CZnk/ufheroN6IF8iWFALxUSbRYnXgpMeqDrWPapiGoRQ4UOxKVHF
hRtbwMXIrwAcofGUF2YrXOEvDygg9IGUL7fuQf9ictwU4TvH1FnTtN+29cKM
/qNXuJV7slA/V1xLuUTW74SVccNsf/tWkFAgNvwWym11ZCMzaG+iVLbDFkSc
JcQLtg2sG8U1b2lLr2QvkiyGtsGIlhlbjljavJXYqBsqGhGTLh/tbm5Hq+cS
n/vWBbmt2c12TAGnNwkcX5dCWZou56YODZDLaQoa4ulTMF9IhsSoS12XVQzZ
qUEgamjXWOCvjpqqJWoza1kqvfp4IEoOoRmWUbY2Dg1RlNW+lUryo9xfiO6j
HZjII1tePWSiz+X0KG7Lnl/r+QQblj4HdAZcKcyhRGHqckgPS0kIk04+Y9NY
8YfohXPIH3jhO2SOOZ3Lr8C3D0DRK6Vitmce3TfNjs0jnDvaCjMWNCgQFKO3
JIGTq8IylSkrE0pXJi7ONBBQZmhB5irzUj2Ra8vy6X769E+At4+eYmoGGkL4
d07V2EODuqRuYjQLzoB02vXgRMyLhZjtnx0ZsogExBNs2+ewpnYsC7souaQM
gEXCrUzUd6176sXR8eG56fscZNBT20VVhQPUWsy/HQOtYqxz/JfrBcLIYnXA
YqXZNP2QWDB1wsBrt39XqJhShiiaEc/57Aj7uOUqZM7UP5FW08ZVbxs59hgl
pIXOwhcyubazX5AZAxvNokh3gsFoBu6IyynH1Pc1hkku04qaFtqcbVTKuVyt
amEJ6GVz/dUTYSQbo5IbrGAWoerXcL09TieYcU3ykVhQNnBcwJucqmJSRjbW
PyFjDXVvpxKnLtdRQ/ADikckbhOZEoO/go6r44hY5lZIyrmxUEjAOxfphJcI
S9qMM9GZHZI8A3o5UstGxCjqFkdmgLEk7egWR34vSzVQZaN5VU9InZvGd4tO
ot7HgJfBtdxMFyQKMNRpXRzBisMuhs6mg9n2bf1Ls5zQiE30ZGPlzjq6TOsx
3BF2xrms9rR068ebP/ErzZmAo1ruGfYiyy8jiYivB8i7lAkMhpEC0ZKGzgHS
kqaXMLpJEQIb+IsoQqy4qRw67BBVNqrhmI2xoIW+ByR1UA3zKq+oYKdtiXBC
ycZeWrztxCg9l+FSojX5Jh1TDjfc8I4tZ6JjvaXfHuhPMePjTMZ2wW7EBhy5
OMooepald+n3aV6iUqeFl1xpQ8HrdqaRBG8iU74xwghHHIfdgqnmc4MsAYel
37MNOm1+tPC7C820nG2WWnsPXYNuztoOWnjbkk33aeNtu0jzveF2vCyj4yWT
sBRs/ksogXQK1yXJBPfu3N1xhSpjzt4nu4mNgrc13KlDFZJTTHKeWObdLTnE
WrGjoO4jRkXGRmzoEuxQSKMsCoxN3nO8zXBKxHepb2wvwNRrNuy1C+YEFXP3
etEvXgNz4XVCDOIR5TmOGY4u+QfdqquGNa0ZwlpwqdSKfhfKQMiNFMrwLsul
xcGNlmQQCPjHsPEAcEUOFOKwHlwgqkrxPMYSJVIg13Jn8QT7z+ZzYfq8esDo
XmQuMoFVuIrZMkgxZLMRs3JsJMjF3FgYYi6Urhpz2oh5vya4dhicW2lBMrbw
PNgxR2XsxkYQ51JeY7lQJ0wzzH06YmFORCWgB6YIPdOiglkV3P3KGs3GtLQR
V8dPdGK8H/5+YqgTVy+XaCVdKmoiczGSUz0Na1TjFoO1DsqcJYsM4hb0+iLn
OnYmwkxuCzVriKUeFHIXIZRi07ydS9KVsfLU3NiuXS1V++6wWu4EGlrtUdZa
2lo6EbHWrkIlko8x2VERN3nHoXmMnFquBbRwKMpgu6ZuVGT0dIVKhGAzfaBJ
5dZRTvntvMovi3h+JRu2Vfws17PwNqciGqSDGZrP2U2ajF0+061LEOAJO7pM
osN9A2GtCdK9KSVUQFXw0EY3BT86bk5drhqTmNgszASLmYukc9Zq4DbSQg73
PpDCFbpq11FmDO5NlaSYD3xN9cU658yAel9yJQp3+TGJIunmkwlVmvp2FkY+
bdQCMoyxJFFskTGm2IO6XACvgZNvKPXSxMdwTJKP3LBUtAc7XmD6BApXbNri
N1xYMKWauVI7gqVOwLZJ1PAGD2KXZnOCAlu/dNgG3EGrDHJkkZmMOh4IHiZe
pi5srDk/ZyptkEnA8m1EwkZwMW6vEgCKUbYdJz4VrXw8nbDee5XE2FBDlpQ7
5d+g5ZoRqG+NSxQICXD5IpUqLCS8cZE/OFcSe2UWtvYUIPXdih+1oYANcTpD
aaRRB9OVUpeTd+geAJitq6K/kGh+qyvMmPd60SuGbCecRArnppl80Qkxq9mU
KC1kR3lpGlk29s8gUs/hMHj86BUw0ovI+dbOpWvGRDk2DpWcLG52S91/DvIM
jeRJq5vVQNIITmaX7OiQD1sWy3eSQMkwUHl91GjGRlH4x+hq77DgIeKKodwW
qdgiFrAaU0+OAllNOB7XBbCl8qyCYVycjonr8iwTqTVBHiMVY4nNQHF96JfH
pFpAY/JxjNMJe+Gicg4XkGo00SV3X6jAkROEiA07uu+ixKIEIikHqlN4mCum
KNiN3BTzRVvDBXR9T1dngKcUNUx3nEH1laGeefXR/NkJN3ViLks80lFrIcKp
OUXPJMMzN1QU0aVKFBxYPHcg4rptrva2YaEsU1qRzQaNIDzw/jSm6Xu11Lzg
mYYwfeKyqKPvK9K7snKwL3XfFOn0LFcGSNhGSS+eSu6gIbdWMsX4Ddw+JbNW
2fglwGsslWmTGSbzFLe23ka+qNCgRM2cXe1QXIANJ1iSiz8xLSu4eWwpaaO+
j8E5QyncpV6Lj4pbUR+vTl1Tv8tMnpQYpoUF8zx93BbrktZtloC4gJN4fJVI
oYShq3wSnBPjlVS3q8X/oaSZjcWQQOXYRMozjKUXHX6kGNumtZkDLFWNFzJ/
LpjigwaW2NJyKjtsaMLfSxcjITIFnkatfinAt3F642ggC/4tsQ7k9UQCSCIl
hQbN4iCnacfR/9fct27FcWRr/ucpcuQfBrmKBoSQrNP2rBJCFsfWZQC13cft
cSVUgnJUVNKVVUK05FnzGvN68yQT+9uX2JEXQLa73fLykl2VFRnXfYu9v08q
vlHWTWVzZolfUNbEQnY0IzKoKXvVWdZloD8YD19W54T+pIEmBo+4a0aQjBFU
WBFgV+EWFExiAq+FLUZDeLVhnUTurWODmgD+uZIgTSmB4qSwK0lEBpihWcwN
xVbQM9js8Xr2SqeZZEx1seBDvnCyv/mbKNwamzA0xhOL3IWgwxcS1IstdJWW
ByvpgpiVcc5P9fAHLfAmn2NogiG0N9w9IjuaQgaA+aP8W5sXH85ndOR2zgti
noNw8rU+oJ2NdkiLYVsv1eC1AyxKpwQFRyje26GHF29qqWTV7DwH/doSqawN
HCwMUCkoLkydLmfWZsTbcM0yc5hqJxJhumPyy1w4X7SFLHQJFDTk6sv7hMeO
L88d4PCkojlkdjL+GcL7CGhKYYfLt6+UXaprdqJT1OLlYT0mJ1NK1jXZ5BzV
9Yi+hE3MP5rkQqBn210cBJHbHqcLCWDzc9X7meLdRCNCbw7s/sYhLSiHQiMy
2gm3+Qj0QSBdJ/PfhEpO0xpWYTLk7SYBiNlkoCpblzbeKfMzl3lyBT4zNSQw
wBOxppY1rlSAeQ/R0bWzrzQPuLKa4pISMa4u8ytJE3ABQxt5TbmjV6jDr5sK
1CnP9exasR1vFP07NJGODC3iZ8wjnrVRvHtl5Or6mAEipkArYndY2qnnojJY
W648UtMlcshj7wg+geVe3tgar2ys4eFtI11GGiyq8lhEw3YhRyUnOjmzGdQ5
kX3vUpL7gV3I3QsLQgmaUtkHaOXqxvh+RC2tKLB8XnL+vLcVz6owfvFKwiae
wfPmdTdt5Haj2oZaxxY2gxw53n1ywPB1UFDvWImkThonb2IzalLXckaBomlV
Oyyg6K2iZ0xQDAUuUD8NNCQVBRUpLw9NKVfIanvW4my0s/sEGch5JG0lYZ3C
sbdQNOT2KXmNSvGV2JimABSwy6ZN6KgINMQje6tOM4/G31WmArglTGUNEFiy
hS86l33E6CqDHuvPsuEa5iGrMOXQm0UjgAE09d6M7DIvZtl4soCu2a/qAch9
WLRlPfys394ANggNvi0KkM/rrnSJi1D6TEJPjXOI05nuKVZSO7xWa347028x
eM5swtewGno7mS9PiJiLli8aCrAj8Kq++es4qtxB7rDmgBDSUt1YGyHDMY7n
ZIKBlxTPVAspjJ4RWKD2xV+nehtklD4hKEtSJVsTYxyiMsfzChlUCkMk8VsX
qjtgSl1FWepJqpWEnToFvhn0Z4kZHtlxkWDALaTQtJVxBZN4PXsqge/5r228
KcvIBqcAGRliHbmyhAGVv2eMCVwbwJM97X93AzS5W0aJS08fzYN0J+dEqItj
LpRkQKFjPQ6qOkkL1N8W7xAc6nuWvQmEjkOTcIKYZ7afbTk2mlZrGVFw6mq1
6qoMi94nKMZkL7IrkLDOC37JGRfTNvl2M12PjmPcKo1fxIGOams5YiwTrlpB
KQuGX5jsh+SazIqvOB2B4nKRILsVuazsbckRYPguHq6e7GaXT4HP34UiI8qC
0P3EOhSjD1l08eoZ3kB/kaLoXd10uW07Ss6ZV8IDmoKbNHZmEz+ud54YRK+U
IBm9wGVAtJdSMckFJgWg/FOScifhyNeSHuOZxXUCqWWg9BnoZ8wl8VFoKc4N
23h6xS4RnpPgFIkWjD9Mi6YVJUWoeE/UwuIbMki6OVPxNoGmCUkig+Q1iiN7
LoCFfPd7EtyLZDxciahHv69yw1CTzeGRaek6r96gg5EzXyrOfmuqvPy9vDm9
t7NwEuE526p0S67mQrABvw0zLLnNBd3oCMQORyQSPH9G3xq5SC/DYyJsEQuh
Ghy0KDTUpaRrN4oeIYiMG2vkTeLUV8g+oafE9w8f0iVZzC1whhflJyDj6i0C
jcDCmsKEWV6c0QWjEKUAdEqT1QYSAxJBZx5TEuxAWgHd7QFQvReXkkyhyK9S
Ap6UbkGmgx6tRotAISZdiOwl+t98jM+q8/6biWUqvnhwN/6cH/N5aSkUupcT
EYTwGnRhvdPzhQlr8t78XVVOxCQN1sI8d8ld6vctLhM2c8ocfjUv3+UnV620
YdqU3d/1lVU8vBWihYEWctydwt9Yz2uovBv4s52agQJsRQwamON/6vyfm4rx
IBM41822Z7ADi/ycSc4nfEVoHpN8Ah9oDks3BhrDuOYARo8fSb4H301K4ACh
iHf5XDaBMHngxyKo4pe4O65mQh3Bwvi0pIti4pPmyu3FIg+KRjOaH9xzGcwp
qGIDVsJq/5czi6jDPOnCAlik/VLXmYBiuWaW7584oMJvv4pvSNoXaWOpj09e
HMaTMHCXwR71XIDZJJGF84PCeh9TagFt6UMFiu5IhffsWpQBgRRffd65MYrD
Q3nfdZBEbN1JxKOBTx8ptKSAL4JTIIaWUHPFqGCKTmK5I+v99y+UH14oJODx
FTPpqBF1Da+XmUCWC8s5wECgoKh9391xq91PJQVtBYi1cgsbP0pCyzl3L+DL
+OQjes01KTfxtWUsXTXAvKueFLEGgYROEcdnOB+RpBBmqrOQy+odOuYF6RpC
uJG/kWRZTkCzMGlLPjEcd8IT0y2yQre+QSJBnqxsZtyfuMmMaU0S4yM7Qvck
R53l1ol/l7vTfxqMTheEVqRqjaQhPiV2MJ1Nuc2ZZcb0y5fIAxdlbHyVUg0Z
WpKim0uqrN5TERICCsGH4dOSNu5CeURbUs76y8CbvuRBYVpcTr6mxe8vOkAp
bzE3mHEKusYmuQYd3VP+XwuLD1LuQga3m1H9RWzAIPlxWy4z0T8HymMUw2Ks
xpNAWWRVaIFgahBJ45wIUyK4qfWbpF97+PqCI43EdLl/lvtRn6rUQXdIrpCP
rvi+J3U4XJRg0i7vwOSBpOHA27z4Xyxw2hHPAcOptG7E7SbDWxqwAnqpDEGx
RaNjIdM3jgHLOsvnhy/FNrpSJ8jlP/G2IFlaLxNHRG429QUXkSEoVunoMkqK
BOygqIaCY0zp3bAzHDdcmr6MhNE0PN3KtzwNpoE4kFqz7ygA/cLF9W1jwDf1
QcxHjYmnXSRnehu9qM4YHUDZ79JiKb3c6FVHs4ltb2DJLriGzXNIPJKCJU6Y
5cuTQk3ycESH0K0GEUqXnEHQq/uimFHR7utIQbIUIJtzmI8dOW6S0IPs9IoZ
UBSyyvemQfunl6PrwYQXAFavojSLUNdRivcmbdva0yamuUUNHrwwlr/wOM3s
4Ro8KaeRE+uuN3nuAeW4VP4qEnRJtLIfBCqGLojbEhiyZL9gIuiCrDpPxgut
xBJXH0kZ6fj6NaFHYlZc8dZ5FdXWva5jcVEVB4wiRD3T2GAkFAkMbeGj/a1z
dMJaYwbHY9GKlScUmUprsNoTE1+TQgsOjOPST9uRgof25rG7DrntKubcP7uK
l1immza9QhHpu54csy4+DDlWTfYLnjjl/4jKSNQqHIowH6cFIWtKUb2lXOml
rR6U8E2M8MW7fr44Xe1M6O2hejIFnVyBcma6GHjJpMnlOM2MQoJ15mpFoFj5
MRLnEaJ/B12Xc0WGXZbtS11YcAZpfxu7hXuhlYcKeA0fUsOtvvHCvWcK1N+g
idWFV9iQdA503zSXzwsIdytvJwrjeM/5idCpP9M++FnvdRdqYYZ9bWdV5hSj
Sw+h4JZreiVdRUlAzJD/ZppJ9YkHsOMC2C6rfuVBhHUnFZ/fBmn5DAarVQT3
2x/YPbcx+9hk81ZPtEUj26B4jxMGinJ5rGbBLqzEkHaC3jZKhWEbe4wrlJIi
V4lX+lIbW7ppVekFs6Gza1WrL0lMvpYGQTjd+FVKVRVWvjwnYQGwXSF5gQRl
K/MaC1hwYxrR9nMO46H8YDkRO+WyyN+mkwux9eHDIcWxJk/DlqrmQCHB5av+
ErsWB5eLX+cSDih8WxpLRkK5ZiuhgHE204ITPucE5S8QLRArhnvguJ8lR4XD
trXsbdkA0UVpc/oZs2AMbJ5WivXGuHqV+cqZkMzUMbex1kixf1utNG7XOzQW
LmVHmqhNSnhscX9q+XckeTLDpqMwg8/ei3BYD4qL5YQDX8a0o+lMYcCTa3dI
NLhx2wz9M/dFTuqH+9QvJuc2W39SxDbFrOvg7RChZXLTjm67SjvhBddybXUv
utOwIUr7k9XofKkOZ4FNEjK95ipmN6SjUAXLrYI9A8Tp+gaUZ8cl49yYT+Rc
J43xUBprnFMOCwkuTjPtndPoB1LAcTe8+267ZFzNupk/NG1TxRB+miGRBkcp
AFz+u+MoLbsZ3E2VIQ3S7YNOKqQ3VE3eBAxlJKf4rgHfMIXJfENYpFRju5wB
pZNxjnjkSHstGuBGrZMa0/hNSjTPeCISeZNxkmhvWqRxpxkZVotqKF1Atz8M
SipOvbfeozuFaSTQ5y6SJ9LDYw87ouhKAtrr1p2CQnoX0x9Y8OYarTQYx/z+
oXukRjg/PIcFsviCLBA5XVMX+CrtIPJtFjvTnIuZ6j/pFwfXamFpZDkY/CcK
pu2hh0RaEawQ7g91hwwR/krsZ3m3bFzHQQ5/GWnWTmYXCTmOqBG6f2UhZyn8
OL8W21X8DCQT87Ud8ACce9eKBCXOLbshuBEmaQXDhN4qnQfYTDIYQTu8hYSi
Hh+XExdPUwo7OUHecVKR5I6IWCtyfyvke8FYXbw5XQLjapqX5z7OnSiE06Q1
uGqI98OM7xMMOE/ikQ01PGC0WzB+2f3AbS1UnrOqGoxnYdcQuN48Za1Hevfc
TnY68ywxXZOWRNkAOZBVSOtT7YbSF0YhFsu08wrGDvDEIIJaFwPuxKxju/Nh
JPw5Li5ALctE0FXIwcFdoBjr55J+miBG8BLEV+ZRsDBFL/GZy26nBSjjlMiN
tzIGVjONfrRIWhl8sUXFKgGW9K49UgPM2lN91ekycrVSwg2PH1tAL4kH75Nq
4dtwgmfyYIPRQVaMpDZtsoCGxaB+Klv0nPC7xTBsj8OZzLkLwI1pKcfswZjb
y7qXR8ubmy8jBoxG6Vw7jXZAOFpgNJZqtOLzul5WeXcsMGZ2k5IsMfWuWQ6g
CbYRKLVUKhdXZ9HkuVq0M3SDYzA1yU/6oAJGo2TFT4t3dJ9AF7GznFhmX1sS
jHbekVIwwD+wqXGGlnOuvWTAQYPOGiS/b/VIwrAIEIaJY/OlZU2QKiwXy7y3
+MYK/hFTJ+HdFETZ9+yxN4Kck0mEfqvm8WDKgSft2G6slpsOqw2oqMLHUnW9
a6FB8n6DiIaTxn0s7UjUXjsV9TmlvFix42iWjQ5fBPMtsmUhLIBe/7//83/T
ixauOs2PqZwhzDwqYYCuqVnpDu9fI9yK95FrfprCR1mMFOQ8yOJcTqXWDn2i
GmfG1hhEIBikfjzZOwhC4of1nS83SBJEwIGE3FBNUmHJ1lsx4LBjsv3zm95g
vr/1EA3z5UGdB++Yl9GF6LSiPl6YIhNh70DJhrKjx4e7XrIxml+0I/0N5iCl
qEDuOLBsb2hVc+fOeVURH/1eb4i7X2VJLuXtJK2kO2MLMi4QggCNbsyQWJJ+
Gqy9PdNUiI0J1Cc6PRueu62oOwPO13JW/n0pxPRYbNsiEfHEdmGjJ7aROXLn
XqGS5ZrZ5PhTzWj77V82noYeMJaaMcnDEsw4Y2ZioP/CGEIT9N9iu8cHXmOc
+0/cl+4jQIxHwTFW6ljeeRfkc5qj0uiZRmo6l8PRxUZEB6T0auWBS36NTn3T
5aFxj/l0vwBSCKDQKykrRc/6tgNApxeCGR9VU931niwS+NIpdz0jt2RdZ59W
bjYhHTS2zSszBnbU1qm5dUdvdUbgKLLsygVVx5kJM7024thnygLB89jhIWI+
xcPNr/UiWwPUETRu8nptkLLT/Bhc23EpmOSIhim/MBwWlVQ6h2wWrY8J0m8W
P71J+CJR6e/LMryYa5waud/zMrhCqJVD5UEqJlK4O3CpXiytyioI12qGUs5E
tDTFdTsq24Mh7whqOaGcimjJLCIZRyWYki/ePS8gIsoee40GipfCs8JSTwea
sjzTbMhWBw2VRubksRvfevJ/qjdY0ooY0GopCesbsApSGjmgHsu1G+NgW+1x
v2jVgjAEZpz0J3sT96xe/3FuJAM9MO36UWUaxKK1fJNeXod6ha421qG5AuxD
8dRFEjLkWdmjXIR9syCANjgosIAizUDI7ohnGVXucO9/vN57sbuXLfIzTjAI
+/yMKrSDS2QIuL3KTXGC3bBoM8vGUXrJVO+T4T+DPloXKm66aLi40nPxr1Jg
VulGL4+mkzg36a7VeD9PKK62Wab/9vH7VWrosX/OK5pq6be1n+056ThwBZSm
f0B+WC7ESdT4l3rdg8QOYvYW2xakHahD3XrJFhBKpHftkqWDHPnddu8RCgN9
xg/rX8aOVUsgSIZumRsZ4Lq7sN4O29k9vaVD9hhXuKPpCj0cJ5Yns9iQHOcM
RcrZPFkwok2tCTySP+gVjusvcB4Z2nKB+TCMxhsEXsuTrkPTyJIKHXELIVg0
2gU2hYlLqJiTwO+TulxvVVy28Hetf44InBAD8yn1lHdPj/qw6XXwbb6ECzdV
7DB3+ifActdSI6d7bgBNrINuJSgI4dHbfXI4anqCg6arBZsWtFH2DiveeX60
+wpGbRwGVoMvYixHq0/qN+mVaK+FbYIeNbDFwWBH8ykf84qqEKiC1woYEL2J
6dExlH8zOS8XqTeE262qtlk1bRVtjVGLcJE5i6Jz5xRivDf2cQrSymoBKdxR
OjEQMAhA6fJWjA1Dw7ymMuSzbH/0YtSV5/88GD3hR/vWt5UVPCo5xUUt0SuK
/aTmQnLvd+fw+X6sJ6DevPp2/4d263dCq2eUrq1pqw+2vvwSRsRH4jMGxAH9
F4WluVSO/nwMekXYMevs48rHof6J/9X5SXg0TOATaaOcDIMXODxfnAy3Nrbu
h09+JLtqGHrxU2gVVQ9ahvWJs6A8It2zYK3Wf/Dw8+kZDZ8PZMfwD5Rv/AmL
rWUJV+wFWcOjheTY/65Tc6s3prNmhVPT/PyiHr4nSUADC1KuuHEqs0+d0NtM
63wyy7mEy/jnm5MbfpYd5ydvwaKE8CMfjRUij8/r2fpm42JQD+9Kln0Ic12t
bq5FATIZVvOzfCZO0Oq9tWDMT1Z31ji6PSsW4WmQO2sq+er9NZf/Qf938bZ8
v/pgTQ7F6gY/3zgiq2GYa9kvKytP9p7uv9g/2n/54jDbf/7qu/3d/aPsaPTN
Yfbo0Vcrj/e+2X8RtsXzVy8Pjg5DQ4f737wYHb0+2BuOvvvm5cH+0bPng3gK
ojT48MsgPP304OVz9228kwt9CHonzFwQMj+Sn/zl5tZP6OdvmJJPnxSblryr
jxtbq/cf0iRljhkrDCwbHR0d7D9+fbSnQ6QNP+QAL+6C/92GR19z9zCoBzwo
mHOR8suNZXNfeCb/HQeyOVQWTAzmSx7MX9jfG0DADLK/iKc3yMSHs505yMwB
iNI7Gfze+3/nwSuxKAa/yYM/8hJKx5J8WLNilMF0V6hWUqL6R45x0e60iKrs
P4KN3G1HB0kVYxAf0KC4/1n658eNn7K9H0TIyY4JTsLT0evvjrJ3mwOWlMw8
3PEHW4ubl+3VfsY2HktpyXC5rq2mW2q7slOuvnr9OHR/+O3eXwcrXX1M/3zo
2Ou//NL9Xg3BZtnL3aO9o+wwCLkX3/g50XCITefmT1FnNM9Z9vIVaZXRd8nb
Gk38uHX7FlxWjF/Se25JnZj+kEq3X365xWzZH33xyi8rTdvq5eP/3Ns9yvaf
7L042n+6HxxM2n0fZJY+/cD4o4JGuo9LRBGg35ONEnR3ncd+dShm1zPX3caA
8PWr0cHo+WE2Otijq6jQ+zDwlW7z5w8aP/Vkdeu+DT1fNPplOtn15+ivr/Za
stFNxpPs8V+7rTwa/96LJ2TCkV3n/a9DdSnlQp5c8BnbDO+KPsbMRllmdEtB
sxyxYo7LGaEkzgvJvrf7Bq1gUTxTKSKGff6mmF7EuAhAs2KKk2R1RDbblG/Q
Cmn5cv0xv/8gff/KyvcMXZnyMXI+ETBDSqaxuBSI/ctq0D8cqfcr8tPPa6kG
YCAPdDVfvOHJCG42PSOUVuG/+CXT4pRyd8vpxLITi5yYWiiJjPQCocNxTshy
BpQuMLrOucRGf8cPGPEvsKXwK8typ5b5DtGjqeTI7ZhVEwn011VGiQAfPpyW
4UhhbphuOjRWDyk3DalY54yauNAL49ZUUhSF5vHhI3Yb8vrdmQqsL5ouyxf6
zUeWgBuDLJip8YPwZ1q8K6bZvZubyP6USr6/rfjHv2j8HD/7iDdur+nbwv9v
owcf45u3bm5G3/y3Rk/+tvKF/Kjn75WP4f1bax+zjz9uDbbx9/ZgB3/vDB6G
v6UPmzc2RO/8m7y79Xf4NT3Z++/Kx43wys3w71b49174dzv8ez/8uxP+fWDd
2LixIRIyHx5ln/XuoWxRLqbFV3dGM01r6t48d37hMGLvsRtvM8X3xvHmxsZY
ZQkfonCsgjUmR4SepVXdWRs7EORrHnzYepBPHEl49yS2KnGJ79HtB0+QwZ0X
npe15gguHcqLSgC2HDVUQuBKEO647aBQNCLLG3qSrdCtU0iogIR4QW+SY63w
Vtw4bgFyHH5CPEPfpTd264/LbY6T1I9UQNEvWHgFhcsg24JUMP4xCGliri5m
k7XxwJ629mmxHu8f/fz9/pOjZ6uE7j/M8BPiZMdEcv01hnlZWZ1jIw0BWoYk
+ZvyImLZh+dJ3ErioPKkc4YgNUgzFCUzd4gqW7HK+CVHOzGqsFqYxQkBqZ0V
jSQ8VgaLLsW2jRnfQaBdNiZftoX/3twYAy2GbnmAq3JdVwkQJPy1uR602KLO
ttDK8kIoG+Xm1wP5uwnTNGAn/uVmxI0TMxnHShOjnZdR80XrWWUFRCIN+RcQ
SprHJztHYHKRrUkbfh6GQFD5QlTojnndq2aQxJezprkomWa2Sz7s3KxcOlTL
zpr87/U6pVOjfOxSAx+7lMhdr7c6tcfHLqXxsU/G9yqJG7VDt1boE+K9WuBG
8X+92Jc1vaXk3yHJ71Ll/iFA4f5ZBaZrmGm4ckBXjcsSkvucGGCKSayCgMAC
hNHb8uKCKjCO2s+WTSuOyq3oS7ZN+TfSgL5VTgIKokrGPetUYOvZMwfyGRul
l95X5QP+iE71B9myOZYE2FxFRrABFbzGU4I7mR0tR/mtsy6v+6nOk9DALWTB
Fmpv+nXAmsntm8wONePq+WhGafaZkohvIu+iLvmuq2NOukvkARN5FN8WM+B4
yrzVaflQNQtC+3srVk7asSoYI71xAxQL2/cby2Ayl28RCS+eUmjpKoCuIWVG
r5dpQwZPCY7lzIk3zMip4Mv7Y7D+66znnT/cet75N7CedQ7+YOtZ/vl9rOf2
NrqtRB2gfJ8NutyTMaZbDjb3fxXziuSJEkWJFdE+ymxMwLZg/AIBchXzweXA
NuTqarkeTud1onVN0LSk1y3DzEARGjZZj6ewnfgJnJhBEnMDpx12FsQREC6i
KCT0gmBhF8avxbNlVSdkwT1GMw1Ta7vp3XswHjbWNwdmH5J46Z87Py2DKPeZ
ckAu4V05e7JMA1GSriMIjOxbIi+H2/ZIqPFsffjMsnyHyPIdFvYlovV5ORPH
zAIxHH3R52Znw1wxzYaNxih7dFlSqjSZsinGGSETzseUXQqfwKzOMe5nf36D
fFquc4PYBjKhpkOZFiDHzF76M146VlMA00CZT7QdZQqVrYTzFnk8svlQLVTX
wWcdcCH3vAB74F2yMu5qipWvC/ZdJdN4XrDPlnpGfAi7zunY+UTiQMVJFkAE
zhqREen5GSPyNGaVZ/hRwiTn3jTQ4miOVI1PZ9lX8t/62myVqwrYTVwbRLfS
WymujZraaDhzYwI2JWBIbYYSbwmVfVtWDyeFgbjby2WRPhYwFfVT3Kh6Nvb4
sAaCHacJizsMu+I07Ib0h8w+XL2tM3GHOv1oLrKqyCEKm1RdK/QlLElFlCm1
eU9iRHG/6uwfQXZ2rJuBuqC16sJboWxFxsclX85cNvh1C8NqtapoBc4ii2yh
NHLOTdsIvR80JkBAkkth5z12sszlq2nJgXwzYDx9KtuRLdh1nNJ92SmJu/hW
+cFhw5NGABfcsrxD69lYqwqpIm8ilqYegDI19qFkhCE4J8sUjPNs2iq5GEG1
6qhQe3RJpUTBdiwQR0LSGmEuzYnuiXYrVzxoUa+bASH8JXgDUqrHVIX7eib/
WSc+BtnOSQVFSkUhApTrOk4kBUpCPrVg/RLskQcE4d2jtAdU5k0/XFI693i6
GaYuxlvCTP7w8iDMZZBAyWjEj+Hz2mpkKzTy6uWr3ZevXxxRG19/nU03202M
pCaoWSMCwbngzNVgI1CnvsimW+P05TyA8KV9zhAFXGJhW4t2M6JJJIoax7aO
kop3CQSve5Nv0a2f1OE5lkS5goo3IyNTVC0yRRjuTfEu3VDTahxOnuknFD36
1MXmhKGOSqSs6APS98JSjhfVphj5289rwb2JO1YjhZdvqg44CiEW8rgeY5Jm
XskmTXmbcdFRCdTVIBkgogqZqbLZX5kovf9xzdGp4MRLN+G0x/rXoQWCpKwB
dGx8KUatee2oGYmAoo9WVjYN3F7YYucCwmwiFeFYG4dJeukyqz/wniGoN+ff
MUwR6OdRKnwaW2CYaxx4Y4rQMeo2AisHuBkKceL5pFn/4KM2YFrc7LP4j8sb
xJPkbGrkkUdnmd/nlFpj/ZVgYmh2Fu+SmgvmsjxFzqbLEw7ZlmCMAQDD97w0
EFVw4vLoB6gCg4/N9VCG+9FqGgJE2MpRy8zlmYIKxFSDAAbzO5IOtdhFrRYH
BjWcgKkQcMt2E0zFdhlTUFKAINlsyFcnZ07nb+gputUmjpHO/g3uY70x4g5/
P4qczosUJUFut3gGuADdAJsDxg2ZFHZdwj/tW+0oy6ZXtkGYiVVPgrT8KLS4
g9sS3o0cNRg7LMKOzpFqtKMn4aRk5xjPGmL196MCaDcnkPqTBAmdkavx4+3f
KdjyK6MtHFr+Sv58cV2YJQ2xuHduXd9GK8bSEW3+3/Tnumhz+saOqIq08HtF
ndP39UefV37L9fJvjZC5KU9+fov75b6la7fzCSEyXgNp7xYXzDetprX0T75h
/lVBsn65arGxa4QqU02wTRWllS/vlD5RYOxFtSicX2byrmXy5lG4cLBMMIIu
1SKoDYwqDbaLIs5jNLrDr7lJnwy3/tka5QEjOVJ5T5dYplib6A83qTeoEp6v
mqXxjhP8EdNI2bXlEbIbcsPnvJjmDCCKsLzMnmS4+E6sjtLYvtzX0EUBTTHF
RGnWJktBebQm00j/2u+iLv71yuJfrSr+tYrid1UTD36Ptcp+g5J4sOZuqn+1
iuhdu9DaNcphx+un61TDNWrh43WS/Fp9cIvF/ARNMNxSXcAiiFG4Sk/N1RBL
0pam6aR3vKQLOkMGf/FVsR8+a/fDl81eH0yP9ewxlt7lOcCbkkDFxFvjVWtM
MY5POH63iPIDGXuRhNsleE8+NccCKcI41wjj3LKmmqwAKHi+ziltJsbsEZLM
4o3iYUDLIhDMWCYImSVf4OXhQwnaN9MU8zTCESP2iU+IEPWWRkiDqpMIcjMk
jmBqI8ItRfUL+iZ0fG5fgGsBSVTpIAeNGLdG/WNwYLUVdhf/WnaEvnN2w+N4
VoZXZ/fwo20OytHO1gu4RIsPmsm17d1sG48hnJpmANcyGwhP6t83Y2blaeuT
OqLeyHJxV3zgXIn/qpOT5RyNhB9zViBWiNbz3hr82s43IB9xtXhfotscETY7
A0tPTYXVXkMF/ksKuF+WCsCu8RO0YmEbIplsGG2cLuhfrkzEaYagXRzUBKvZ
3anvDh+vIoYrKTCU9qtLe18SuOIGtmQHbGV3UpUqamHRV5AaiFGHoTOUPZ9c
XJ8AJSuKxvUM5+W+UIcimaTzxbS73dHXoXR76i2eEjWlW1t03Q1BzmJrDERj
RLMJuBkahXR65zadjnMjpeOz3ugWGn2QXhl0Xlh0RS5VsCVrMwLMIbqSzwvf
ciLyELXTW9DOixmXzmlJLLi9u0ZDYGpHjaDv9b0JA4C6IIlSA8KZc2y8AxNX
nnLtlbPJYuNndF+q2EA+9i2gwfWiuqgbkWnc1Ka3XLhoCI3zTbqmKLroaO2H
k4pUhrhYSrjVq7MFg7JEfiDTb4LApFdKDzlHCotN2zH2UGSJPXm/71bqAXCb
473UaRi+5OhHDYhv+Hg2DljsSYPTtoaU2LGr14esqA2uhBoyy6PvciJ1fqM8
P52FF8yyLyiVl93HGBHEEwt8OUaZ/14CCnxUTglXwkMpfkccqatHVfaYOLpB
oxR8rh9/PHr55OUj4dItDCLL2xrHBTMtUFIfp4TXbwkHn9gBKHnsYgn8IhpK
EAFL2AhgHFyGXQU+80gTe1o4TEGNCtP1PyeuFVgWIP2LbFheCMHkgnC39DKi
Xv/pJ9iMhzJbhwzugIjCU5TbuFsmOdSepVS8VLsmtUwebmdG7Xz4QFVTe0+G
L14e7UEle6LF/Sd1zDano2Enl1HrS44FkwxVlFuCC1WiAVrHWbxWGh3u7u8D
GYUu2apy8qfN9XvrOxQhD//G6AE/107IkT3ku9eRY+0wvrmDkiZHPabOhdNw
b2v7wb31YPxYLLjVG31EUEkwV8fV5IrvUmrCBhDuEay4wQJMKeFciJxYgurd
LLBI6evQw5xcCYKOev3FxsbGaM3snTit9AHd3V7kJ8VQr24nA661Ks54900E
CoC8kzPAW4//DG33dfbnIAm/HkuzPmUGF+oCTAJhqwgtRNYTDvzOtpQmYMwR
COUN9g5hl8/yyGSWrLsYdPqTz2s8vv9EkdaArckcfqzmBGUovgToo3yB4rel
QIoFvfqeHl9IIUKsM0Bg5aIuluHwhMGsyHu/yg6fjYZb93dWrd8fP2Yb7zdG
/PfTp/T3HUIEkCn607vNO2s/Ptr+ieveYhiQK73E3tasjeQmvnXO3E4UbOrd
Z3u73756uf/iiI7aqBHI01fF6eg7wY2lUVpEGbVN9e86QXE0jTmiNUfqgyZ/
nLRrDBhoVC7ttHY9YpDyEbfrOi+gFpQnLGbV86NdlYURQ0ewPQDWQdPgpSVL
QoUNtrrEU6sKAYqXrv047uZnR0evyObm1SMBcjItNWG4OoYF0louCdnSCfUc
3RHQVjlNaDMHaR06USvXpEA41YXn9IMRQIwV58dTIb5soOWQXJl1k9sLaokC
kMv5qtJGYmSayP7KiRIAnNfFlHKZeKgiBG12CPs8KM+qFuw+mygmbuBIgpR1
dHVOGRgviFkatO+O6xBikFmrUoKL0ojelIgAw1kuKto/J7ieU5r4DvYt9pyU
T4/tMr3IJ14ijylEN4zSuUFzALEPlCVO0e2T6qIQI8flElBhkuyZE9zEJzNF
AKCvXh4eZX8ORzuIta//lOzEgSS5j/lbCByUKbw++C7jz1j1KeFXBip3bClW
g/FBPXah7fOyFruMW8CqopOfG+ANqznANR0Xqa57FNFZFRvHLOCmYbFqlbVD
/nhIHw/5tIPkCvYKpCihgVdzf5LWxfuX2aINpyRB7YXFeqADT6rDMB+L8syl
jllA4rgIknAdLsrxNJ+9ha7G/0bRNtAxyCGMA035iOMvPq8zkQL/KIy5hwt3
a87FGXe887+SYfdetrhJbEVSwKQBc2M941JCsi2wbqzRI/6YZsqyeg/K6L8d
PN3d3tl+qDEY3gP846BxwaTIfYNXtXOvo2/8ai1jtHeb0cMVvv02T1OoXBTz
CEcdDSp4H5xmswtMRJNYTr1aZK65OcpFEGSnlEbS+HH/nCOFqE6+6LrzcrlI
visr95j2YWoYhkSIrgwkvoXG7pRwmdGFUCqjxiU1jRGkLsU1BxTZXrqtGkYC
1qttWMFStQgJp/ME7/o8m4BC2i/b1sbmNmObFmywSPLPNWucGoS19bpLPru9
EIyR1XpNwwAyYfCQfaJV0Bxhcoj3lFKbWDrHlYAT0oD1SzQYWhDuFNkcyYF3
hOBntLmEioPgKUXSRt4ubqzpOZdNG5k4rXnCCC7VSR3UhUpIT2b1zjaxrFSz
06BRF3f4U3BhMndXi22q+fJ0lyvBjPAUEDE5xZnZrmYSDwsEnxaX7eaRxhxG
O6M0JZwbdEw4SKQoCudVZ7WrC3TOJVQJk5FnhNKt0IvaImgtrSZsElr/fBra
jJy1tFPC99NCnlI+Fqbt5bDEFfBG52U+Q6efiy1GOyE4kxWzivJG8Gecndmw
KeYKrFsyNwTeNPC3/rGWQRJ1w2teiUU0ZHtp0rEkquW4L6K+CugyiFDqdCGg
9cXJGyDE1FDFL2cIc2tDhBNNtBsCaAEBU00do7ww3miMFOdQtHNobTdn2r+2
XQvoW9K+bIQS1a6JlfSM/ocRhTGCp4uwsPwjl1a7E7RbLPbF2QoTCLWGdFYS
TE6w3iVq8WI4Lc85xC0ntQbo3AnZg1OKmiNysvLhkVbDf3UHcTDGBfCpnsAG
saRszkUlBpQwzWfYJFzmo4UncBxO8okwN1bzt4Bp/+4wsQ/J6AB8J3usfWyc
LBeZJqqWKAR4Ohj2I9gJbDFWiARWFpwUyEBHUCEUz+KO10UEDFU8VXlJksXG
73hcHWePw/wOsoOrcKSelEFd0QBG+TyM9hvG8n4RPs2e5fMLKkM6WIaD+Kxa
1tMiHO8nxWwWZvQ/c/nd82C1Z8+XBdWPDILCnYcvX4XP8F0ZtEMxzQ7o7/kE
z+Oth9OieFfydO2dE0HjYVBGDH18TqcWh4qAbaUIgHHZkWxcU3y4lnDrtBDK
dLfIOAKXxHRDrnDY9oRSqEtuO4GNhPXsexIc9Zu4CM/LsNlJybA140nhORyQ
IvEiDyToznw+paTSyTw/JbH+rsipb3WBlNzsolyEHWnrU06KXCTrgi3JN0Gc
UGD4FDscYPmU3KMQ+eRoR5v2Smc0e5zPZ4WwgBwePRs+CdNVXpBitps2FEUn
CPj9YLlKDhOBX3mPUVaNdBm6zbMw8DzSgdwN83eGcFb3Ufw6u3s32KDZ3oRY
boINTUHNR3fvZq/IbtZYrCT+it8eHLIK+e/sZcYpD62dgjxAEc+0o84VozBq
SUYSVmU4yd+Vk+NiBvQ3XzJJ46mHGxvd3R6GRih4cRpryI4bFL1mI1zQiWOW
VZDUsAY/nlakYEDk9tmDLWpy9K4qJfe/OL+IW+l0WokygXYIz+/s0PMH4giN
Qz+KsJjFWIR5Hjl46OrwmOjDf54suQhoTL+/z79HnCdY15MKFOiG5MYfhQe3
NjHWMNJFNjLGTAR+4//SGRwdz8sgdCf2adN/X9bx/tVvNfoxgiyYr9P8hEto
5gVSsiI7xs8lmDMQP+XoJakSEoeIjNIXfJ/J7MIdJMKOTJI7Z1wTbmTSUVDR
+Cg9XyNSy4+DeKbMgYRT4jMsyGgyEfoCpo/jgBXT2nBuW2v84af3sPi7oce0
nS4LATAXl23s3gOEP1q/zc2On7x6ebj/Q0b7gJ6gB/am+XGlZlFQ1nEGOC/F
dDc747TeD+h3z4PECLIynxVEp3WCI1x/+tnZ7Ds7z8sZ6XUc+RIg73jDJ79g
q+8FB7x7MNmz4qxaMEWvIx/GGSSlzdccI7lHMLy9XzHce72iQlDY4RBXQRRe
sadzhy5IIb/nd2ij3OkK391Zpyao5uLPm+vrW/9za3u4+XXKmwQf04fyQFMm
e625fTDo82BH52eF30RRqWJvMDMitdHJUIY+gfSNCN8EY/iTZ2y7e8YOw7QQ
TU0pkTyyseT6OSi8sGnl+AZbif8fapFiqPob9mBmk3MyILz/RqbYaEi23IJ0
EquwWigRSWQs+CJc2hAdKbgONXFEG2kipd4MNIL7BmR+wJYIzttbqd6y2PQj
3OmiRodnZoPBcuR/qPaAzidXl4r9N8mvmKdtRBeU4phx0CJMynLGYcC6Ol1c
5hzQxfEOZsulPQaoSjvr3qpw9KAnibIP3VxO3/IltPZ1oLE1e5u8qqhbv87D
78NhEpg+I41LwXs0J5eZlfMacd/glPBtSTWdRqg5ypIh54YqYNkQLc/Pl0w5
TJ5XkGenJe1VzQ7gGzepdrLILpSPdYd8UpoV5nUMpk0kAkeWynEBjU7bBN50
XKeGqSPMSTIbE54AkdyJlKcNK3c/R/vf7RErqSk8Zh+v+XaAPSLYCnUFuX7b
GehYM3W/ULtYLbnQRvfAeqZhaeZFD6YLHX9hMfWbJX8jji0pF0qTu+QbqfM8
7FTUiQ+yZkYg3tuIpTcnMhIeIl7qOBP1doaW4Y6e5Ds+CnFD76OryyYy2wQt
ifB7ja0x9XEPovWUQLExEXi2S1hFRlZONaJg/buSNXKcho6D6s+dW8VLWDN5
Ta7VxZxJQhp9uSw85yyIxJezIoUb6N5mTARySlEjk5DnlGWVvkBdGb6+7lwQ
SzM4Py5tOctm5bO7OUtivUEdJp2IssbrB3I3j551EX7TCd49+nTlf79P+ZNN
CEntFCxZIglb55CIAehbDnkx5acwvIDxVy7Zjc6b+ToAU8C2BF0S0kRRQOrv
y2q+BAP07ugL+oAZSDmQxl/CLEFeS8YQR1BelKkxLxaR3Gq0+3wvYg1/8qTs
9E3K0/I9UbuSoTKJBgRbbsi9yajicjmbFRQKJCwA2HNvmMmbDGtuhZLr2LsO
Gg98DUKhEJOvmYbgXGgIsB6kzmm16yJ1FH0aNTkXBYhsVZI4j+lz3bj+KH5O
v4nffO6NK6SFhTHn9KbT4fHVkOLzBRakFCK7c9ZBdiZIKYhvW4e3nBeN3ZSf
zfNzC5O+fEeOD8VrWXV+8lo96FsrHYN1jG7q/BfXs5HSk/vnXI7df9eS/DKP
9CQ8Yg4/0F3De7aBJMe8bnmTdnMjGL+fPA0P+6ZBxmBgYQlxTjzbXY/qsFmj
LXqeGiOj6WfOaKrHnMrDG/mTR/Fl3yj2zOeiDBoszmFh5z+nPGhhfeXdSPbF
spYjy3ZJ80A9J0UZOZLR0Ok8qOYJX+ezNTSk269kmT91UJu9oZjRJNjpHAMj
V4Hk5tm8Wl603gCY/7Bzwox/Uqwn7ME5kqqjx4rzqlAK33+T5dQH2rx0xf+p
L+51lFneSEpp4uJVHLamdPEiTQax44jM5caPosZ10QvsRsXQVpR+HyswEP4y
EoKWYff8f+MiDinDRwIA

-->

</rfc>
