<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.4.11 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-trans-rfc6962-bis-42" number="9162" obsoletes="6962" updates="" submissionType="IETF" category="exp" obsoletes="6962"> consensus="true" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">

  <!-- xml2rfc v2v3 conversion 3.9.1 -->
  <front>
    <title>Certificate Transparency Version 2.0</title>
    <seriesInfo name="RFC" value="9162"/>
    <author initials="B." surname="Laurie" fullname="Ben Laurie">
      <organization abbrev="Google">Google UK Ltd.</organization>
      <address>
        <email>benl@google.com</email>
      </address>
    </author>
    <author initials="A." surname="Langley" fullname="Adam Langley">
      <organization abbrev="Google">Google Inc.</organization>
      <address>
        <email>agl@google.com</email>
      </address>
    </author>
    <author initials="E." surname="Kasper" fullname="Emilia Kasper">
      <organization abbrev="Google">Google Switzerland GmbH</organization>
      <address>
        <email>ekasper@google.com</email>
      </address>
    </author>
    <author initials="E." surname="Messeri" fullname="Eran Messeri">
      <organization abbrev="Google">Google UK Ltd.</organization>
      <address>
        <email>eranm@google.com</email>
      </address>
    </author>
    <author initials="R." surname="Stradling" fullname="Rob Stradling">
      <organization abbrev="Sectigo">Sectigo Ltd.</organization>
      <address>
        <email>rob@sectigo.com</email>
      </address>
    </author>
    <date year="2021" month="August" day="31"/> month="November"/>
    <area>Security</area>
    <workgroup>TRANS (Public Notary Transparency)</workgroup>
    <keyword>certificates</keyword>
    <keyword>pkix</keyword>
    <keyword>tls</keyword>
    <keyword>website</keyword>
    <keyword>webpki</keyword>
    <keyword>browsers</keyword>
    <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>

<t>[RFC Editor: please update 'RFCXXXX' to refer to this document,
once its RFC number is known, through the document.  Also, the OID
assigned below must also appear in the appendix as indicated. ]</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction" title="Introduction"> numbered="true" toc="default">
      <name>Introduction</name>
      <t>Certificate Transparency aims to mitigate the problem of misissued certificates
by providing append-only logs of issued certificates. The logs do not themselves
prevent misissuance, but they ensure that interested parties (particularly those
named in certificates) can detect such misissuance. Note that this is a general
mechanism that could be used for transparently logging any form of binary data,
subject to some kind of inclusion criteria. In this document, we only describe
its use for public TLS server certificates (i.e., where the inclusion criteria
is a valid certificate issued by a public certification authority (CA)).
A typical definition of "public" can be found in <xref target="CABBR"></xref>.</t> target="CABBR" format="default"/>.</t>
      <t>Each log contains certificate chains, which can be submitted by anyone. It is
expected that public CAs will contribute all their newly issued certificates to
one or more logs; however, certificate holders can also contribute their own
certificate chains, as can third parties. In order to avoid logs being rendered
useless by the submission of large numbers of spurious certificates, it is
required that each chain ends with a trust anchor that is accepted by the log.
A log may also limit the length of the chain it is willing to accept;
such chains must also end with an acceptable trust anchor.
When a chain is accepted by a log, a signed timestamp is returned, which can
later be used to provide evidence to TLS clients that the chain has been
submitted. TLS clients can thus require that all certificates they accept as
valid are accompanied by signed timestamps.</t>
      <t>Those who are concerned about misissuance can monitor the logs, asking them
regularly for all new entries, and can thus check whether domains for which they
are responsible have had certificates issued that they did not expect. What
they do with this information, particularly when they find that a misissuance
has happened, is beyond the scope of this document. However, broadly speaking,
they can invoke existing business mechanisms for dealing with misissued
certificates, such as working with the CA to get the certificate revoked, revoked or
with maintainers of trust anchor lists to get the CA removed. Of course, anyone
who wants can monitor the logs and, if they believe a certificate is incorrectly
issued, take action as they see fit.</t>
      <t>Similarly, those who have seen signed timestamps from a particular log can later
demand a proof of inclusion from that log. If the log is unable to provide this
(or, indeed, if the corresponding certificate is absent from monitors' copies of
that log), that is evidence of the incorrect operation of the log. The checking
operation is asynchronous to allow clients to proceed without delay, despite
possible issues issues, such as network connectivity and the vagaries of firewalls.</t>
      <t>The append-only property of each log is achieved using Merkle Trees, which can
be used to efficiently prove that any particular instance of the log is a
superset of any particular previous instance and to efficiently detect various
misbehaviors of the log (e.g., issuing a signed timestamp for a certificate that
is not subsequently logged).</t>

<t>It is necessary to treat each log as a trusted third party, because the
      <t>The log auditing mechanisms described in this document can
be circumvented by a misbehaving log that shows different, inconsistent
views of itself to different clients. Therefore, it is necessary to treat each log
as a trusted third party. While mechanisms are being developed to address these
shortcomings and thereby avoid the need to blindly trust logs,
such mechanisms are outside the scope of this document.</t>
      <section anchor="requirements-language" title="Requirements Language">

<t>The numbered="true" toc="default">
        <name>Requirements Language</name>
        <t>
    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
    NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
    "<bcp14>MAY</bcp14>", and "OPTIONAL" "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
    described in BCP 14 BCP&nbsp;14 <xref target="RFC2119"/> <xref target="RFC8174"/>
    when, and only when, they appear in all capitals, as shown here.</t> here.
        </t>
      </section>
      <section anchor="data_structures" title="Data Structures"> numbered="true" toc="default">
        <name>Data Structures</name>
        <t>Data structures are defined and encoded according to the conventions laid out
	in Section 3 of <xref target="RFC8446"></xref>.</t> target="RFC8446" sectionFormat="of" section="3"/>.</t>
        <t>This document uses object identifiers (OIDs) to identify Log IDs (see
	<xref target="log_id"/>), target="log_id" format="default"/>), the precertificate CMS <spanx style="verb">eContentType</spanx> Cryptographic Message
	Syntax (CMS) <tt>eContentType</tt> (see <xref target="precertificates"/>),
and target="precertificates"
	format="default"/>), X.509v3 extensions in certificates (see <xref target="cert_transinfo_extension"/>)
	target="cert_transinfo_extension" format="default"/>), and
OCSP
	Online Certificate Status Protocol (OCSP) responses (see <xref target="ocsp_transinfo_extension"/>).
	target="ocsp_transinfo_extension" format="default"/>). The OIDs are defined in an
	arc that was selected due to its short encoding.</t>
      </section>
      <section anchor="major-differences-from-ct-10" title="Major numbered="true" toc="default">
        <name>Major Differences from CT 1.0"> 1.0</name>
        <t>This document revises and obsoletes the CT 1.0 protocol <xref target="RFC6962"></xref> protocol, target="RFC6962"
	format="default"/>, drawing on
	insights gained from CT 1.0 deployments and on feedback from the community. The
	major changes are:</t>

<t><list style="symbols">
  <t>Hash
        <ul spacing="normal">
          <li>Hash and signature algorithm agility: permitted Permitted algorithms are now specified
	  in IANA registries.</t>
  <t>Precertificate registries.</li>
          <li>Precertificate format: precertificates Precertificates are now CMS objects rather than X.509
	  certificates, which avoids violating the certificate serial number uniqueness
	  requirement in Section 4.1.2.2 of <xref target="RFC5280"></xref>.</t>
  <t>Removed target="RFC5280" sectionFormat="of" section="4.1.2.2"/>.</li>
          <li>Removal of precertificate signing certificates and the precertificate poison
	  extension: the The change of precertificate format means that these are no longer
needed.</t>
  <t>Logs
	  needed.</li>
          <li>Logs IDs: each Each log is now identified by an OID rather than by the hash of its
	  public key. OID allocations are managed by available from an IANA registry.</t>
  <t><spanx style="verb">TransItem</spanx> registry.</li>
          <li><tt>TransItem</tt> structure: this This new data structure is used to encapsulate
	  most types of CT data. A <spanx style="verb">TransItemList</spanx>, <tt>TransItemList</tt>, consisting of one or more <spanx style="verb">TransItem</spanx>
	  <tt>TransItem</tt> structures, can be used anywhere that <spanx style="verb">SignedCertificateTimestampList</spanx>
	  <tt>SignedCertificateTimestampList</tt> was
	  used in <xref target="RFC6962"></xref>.</t>
  <t>Merkle tree target="RFC6962" format="default"/>.</li>
          <li>Merkle Tree leaves: the <spanx style="verb">MerkleTreeLeaf</spanx> The <tt>MerkleTreeLeaf</tt> structure has been replaced by
	  the
<spanx style="verb">TransItem</spanx> <tt>TransItem</tt> structure, which eases extensibility and simplifies the leaf
	  structure by removing one layer of abstraction.</t>
  <t>Unified abstraction.</li>
          <li>Unified leaf format: the The structure for both certificate and precertificate
	  entries now includes only the TBSCertificate (whereas certificate entries in
	  <xref target="RFC6962"></xref> target="RFC6962" format="default"/> included the entire certificate).</t>
  <t>Log Artifact Extensions: these certificate).</li>
          <li>Log artifact extensions: These are now typed and managed by an IANA registry,
	  and they can now appear not only in SCTs Signed Certificate Timestamps (SCTs) but also
	  in STHs.</t>
  <t>API Signed Tree Heads (STHs).</li>
          <li>API outputs: complete <spanx style="verb">TransItem</spanx> Complete <tt>TransItem</tt> structures are returned, returned rather than
	  the constituent parts of each structure.</t>
  <t>get-all-by-hash: structure.</li>
          <li><tt>get-all-by-hash</tt>: This is a new client API for obtaining an inclusion proof and
	  the corresponding consistency proof at the same time.</t>
  <t>submit-entry: time.</li>
          <li><tt>submit-entry</tt>: This is a new client API, replacing add-chain <tt>add-chain</tt> and add-pre-chain.</t>
  <t>Presenting
	  <tt>add-pre-chain</tt>.</li>
          <li>Presenting SCTs with proofs: TLS servers may present SCTs together with the
	  corresponding inclusion proofs proofs, using any of the mechanisms that <xref target="RFC6962"></xref>
	  target="RFC6962" format="default"/>
	  defined for presenting SCTs only. (Presenting SCTs only is still supported).</t>
  <t>CT supported).</li>
          <li>CT TLS extension: the <spanx style="verb">signed_certificate_timestamp</spanx> The <tt>signed_certificate_timestamp</tt> TLS extension has
	  been replaced by the <spanx style="verb">transparency_info</spanx> <tt>transparency_info</tt> TLS extension.</t>
  <t>Verification extension.</li>
          <li>Verification algorithms: added detailed Detailed algorithms for verifying inclusion
	  proofs, for verifying consistency between two STHs, and for verifying a root
	  hash given a complete list of the relevant leaf input entries.</t>
  <t>Extensive entries have been added.</li>
          <li>Extensive clarifications and editorial work.</t>
</list></t> work.</li>
        </ul>
      </section>
    </section>
    <section anchor="cryptographic-components" title="Cryptographic Components"> numbered="true" toc="default">
      <name>Cryptographic Components</name>
      <section anchor="mht" title="Merkle Hash Trees"> numbered="true" toc="default">
        <name>Merkle Trees</name>
        <t>A full description of the Merkle Hash Tree is beyond the scope of this
	document. Briefly, it is a binary tree where each non-leaf node is a
	hash of its children. For CT, the number of children is at most two.
	Additional information can be found in the Introduction and Reference
section
	sections of <xref target="RFC8391"/>.</t> target="RFC8391" format="default"/>.</t>
        <section anchor="mht_definition" title="Definition numbered="true" toc="default">
          <name>Definition of the Merkle Tree"> Tree</name>
          <t>The log uses a binary Merkle Hash Tree for efficient auditing. The hash
	  algorithm used is one of the log's parameters (see <xref target="log_parameters"/>). target="log_parameters"
	  format="default"/>). This document establishes a registry of acceptable hash
	  algorithms (see <xref target="hash_algorithms"/>). target="hash_algorithms" format="default"/>). 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. The input
	  to the Merkle Tree Hash is a list of data entries; these entries will be
	  hashed to form the leaves of the Merkle Hash Tree. The output is a single
	  HASH_SIZE Merkle Tree Hash. Given an ordered list of n inputs, D_n =
	  {d[0], d[1], …, ..., d[n-1]}, the Merkle Tree Hash (MTH) is thus defined as
	  follows:</t>
          <t>The hash of an empty list is the hash of an empty string:</t>

<figure><artwork><![CDATA[
<artwork name="" type="" align="left" alt=""><![CDATA[
MTH({}) = HASH().
]]></artwork></figure>
]]></artwork>
          <t>The hash of a list with one entry (also known as a leaf hash) is:</t>

<figure><artwork><![CDATA[
<artwork name="" type="" align="left" alt=""><![CDATA[
MTH({d[0]}) = HASH(0x00 || d[0]).
]]></artwork></figure>
]]></artwork>
          <t>For n &gt; 1, let k be the largest power of two smaller than n
	  (i.e., k &lt; n &lt;= 2k).
	  The Merkle Tree Hash of an n-element list D_n is then defined recursively as</t>

<figure><artwork><![CDATA[ as:</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
MTH(D_n) = HASH(0x01 || MTH(D[0:k]) || MTH(D[k:n])),
]]></artwork></figure>
]]></artwork>
          <t>where:</t>

<t><list style="symbols">
  <t>||
          <ul spacing="normal">
            <li>|| denotes concatenation</t>
  <t>: concatenation</li>
            <li>: denotes concatenation of lists</t>
  <t>D[k1:k2] lists</li>
            <li>D[k1:k2] = D'_(k2-k1) denotes the list {d'[0] = d[k1], d'[1] = d[k1+1],
…,
	    ..., d'[k2-k1-1] = d[k2-1]} of length (k2 - k1).</t>
</list></t> k1).</li>
          </ul>
          <t>Note that the hash calculations for leaves and nodes differ; this domain
separation is required to give second preimage resistance.</t>
          <t>Note that we do not require the length of the input list to be a power of two.
The resulting Merkle Tree may thus not be balanced; however, its shape is
uniquely determined by the number of leaves. (Note: This Merkle Tree is
essentially the same as the history tree proposed by <xref target="CrosbyWallach"></xref> proposal, target="CrosbyWallach" format="default"/>, except our
definition handles non-full trees differently).</t> differently.)</t>
        </section>
        <section anchor="verify_hash" title="Verifying numbered="true" toc="default">
          <name>Verifying a Tree Head Given Entries"> Entries</name>
          <t>When a client has a complete list of <spanx style="verb">entries</spanx> <tt>entries</tt> from <spanx style="verb">0</spanx> <tt>0</tt> up to
<spanx style="verb">tree_size
<tt>tree_size - 1</spanx> 1</tt> and wishes to verify this list against a tree head <spanx style="verb">root_hash</spanx> <tt>root_hash</tt>
returned by the log for the same <spanx style="verb">tree_size</spanx>, <tt>tree_size</tt>, the following algorithm may be
used:</t>

<t><list style="numbers">
  <t>Set <spanx style="verb">stack</spanx>
          <ol spacing="normal" type="1">
	    <li>Set <tt>stack</tt> to an empty stack.</t> stack.</li>
            <li>
              <t>For each <spanx style="verb">i</spanx> <tt>i</tt> from <spanx style="verb">0</spanx> <tt>0</tt> up to <spanx style="verb">tree_size <tt>tree_size - 1</spanx>:  <list style="numbers">
      <t>Push <spanx style="verb">HASH(0x00 1</tt>:</t>
              <ol spacing="normal" type="a">
		<li>Push <tt>HASH(0x00 || entries[i])</spanx> entries[i])</tt> to <spanx style="verb">stack</spanx>.</t>
      <t>Set <spanx style="verb">merge_count</spanx> <tt>stack</tt>.</li>
                <li>Set <tt>merge_count</tt> to the lowest value (<spanx style="verb">0</spanx> (<tt>0</tt> included)
		such that <spanx style="verb">LSB(i <tt>LSB(i &gt;&gt;
merge_count)</spanx> merge_count)</tt> is not set, where <spanx style="verb">LSB</spanx>
		<tt>LSB</tt> means the least significant
		bit. In other words, set <spanx style="verb">merge_count</spanx> <tt>merge_count</tt> to the number
		of consecutive <spanx style="verb">1</spanx>s <tt>1</tt>s found starting at the least significant bit of <spanx style="verb">i</spanx>.</t>
		<tt>i</tt>.</li>
                <li>
                  <t>Repeat <spanx style="verb">merge_count</spanx> times:      <list style="numbers">
          <t>Pop <spanx style="verb">right</spanx> <tt>merge_count</tt> times:</t>
                  <ol spacing="normal" type="i">
		    <li>Pop <tt>right</tt> from <spanx style="verb">stack</spanx>.</t>
          <t>Pop <spanx style="verb">left</spanx> <tt>stack</tt>.</li>
                    <li>Pop <tt>left</tt> from <spanx style="verb">stack</spanx>.</t>
          <t>Push <spanx style="verb">HASH(0x01 <tt>stack</tt>.</li>
                    <li>Push <tt>HASH(0x01 || left || right)</spanx> right)</tt> to <spanx style="verb">stack</spanx>.</t>
        </list></t>
    </list></t>
  <t>If <tt>stack</tt>.</li>
                  </ol>
                </li>
              </ol>
            </li>
            <li>If there is more than one element in the <spanx style="verb">stack</spanx>, <tt>stack</tt>, repeat the same merge
procedure (the sub-items of Step 2.3 2(c) above) until only a single element
remains.</t>
  <t>The
remains.</li>
            <li>The remaining element in <spanx style="verb">stack</spanx> <tt>stack</tt> is the Merkle Tree hash Hash for the given
<spanx style="verb">tree_size</spanx>
<tt>tree_size</tt> and should be compared by equality against the supplied
<spanx style="verb">root_hash</spanx>.</t>
</list></t>
<tt>root_hash</tt>.</li>
          </ol>
        </section>
        <section anchor="merkle_inclusion_proof" title="Merkle numbered="true" toc="default">
          <name>Merkle Inclusion Proofs"> Proofs</name>
          <t>A Merkle inclusion proof for a leaf in a Merkle Hash Tree is the shortest list
of additional nodes in the Merkle Tree required to compute the Merkle Tree Hash
for that tree. Each node in the tree is either a leaf node or is computed from
the two nodes immediately below it (i.e., towards the leaves). At each step up
the tree (towards the root), a node from the inclusion proof is combined with
the node computed so far. In other words, the inclusion proof consists of the
list of missing nodes required to compute the nodes leading from a leaf to the
root of the tree. If the root computed from the inclusion proof matches the true
root, then the inclusion proof proves that the leaf exists in the tree.</t>
          <section anchor="generating-an-inclusion-proof" title="Generating numbered="true" toc="default">
            <name>Generating an Inclusion Proof"> Proof</name>
            <t>Given an ordered list of n inputs to the tree, D_n = {d[0], d[1], …, ...,
d[n-1]}, the Merkle inclusion proof PATH(m, D_n) for the (m+1)th input d[m],
0 &lt;= m &lt; n, is defined as follows:</t>
            <t>The proof for the single leaf in a tree with a one-element input list D[1] =
{d[0]} is empty:</t>

<figure><artwork><![CDATA[
            <artwork name="" type="" align="left" alt=""><![CDATA[
PATH(0, {d[0]}) = {}
]]></artwork></figure>
]]></artwork>
            <t>For n &gt; 1, let k be the largest power of two smaller than n. The proof for the
(m+1)th element d[m] in a list of n &gt; m elements is then defined recursively as</t>

<figure><artwork><![CDATA[ as:</t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
PATH(m, D_n) = PATH(m, D[0:k]) : MTH(D[k:n]) for m < k; and

PATH(m, D_n) = PATH(m - k, D[k:n]) : MTH(D[0:k]) for m >= k,
]]></artwork></figure>
]]></artwork>
            <t>The : operator and D[k1:k2] are defined the same as in <xref target="mht_definition"/>.</t> target="mht_definition" format="default"/>.</t>
          </section>
          <section anchor="verify_inclusion" title="Verifying numbered="true" toc="default">
            <name>Verifying an Inclusion Proof"> Proof</name>
            <t>When a client has received an inclusion proof (e.g., in a <spanx style="verb">TransItem</spanx> <tt>TransItem</tt> of type
<spanx style="verb">inclusion_proof_v2</spanx>)
<tt>inclusion_proof_v2</tt>) and wishes to verify inclusion of an input <spanx style="verb">hash</spanx> <tt>hash</tt> for a
given <spanx style="verb">tree_size</spanx> <tt>tree_size</tt> and <spanx style="verb">root_hash</spanx>, <tt>root_hash</tt>, the following algorithm may be used to prove
the <spanx style="verb">hash</spanx> <tt>hash</tt> was included in the <spanx style="verb">root_hash</spanx>:</t>

<t><list style="numbers">
  <t>Compare <spanx style="verb">leaf_index</spanx> <tt>root_hash</tt>:</t>
            <ol spacing="normal" type="1">
	      <li>Compare <tt>leaf_index</tt> from the <spanx style="verb">inclusion_proof_v2</spanx> <tt>inclusion_proof_v2</tt> structure
	      against <spanx style="verb">tree_size</spanx>. <tt>tree_size</tt>. If <spanx style="verb">leaf_index</spanx> <tt>leaf_index</tt> is greater than or
	      equal to <spanx style="verb">tree_size</spanx> <tt>tree_size</tt>, then fail the proof verification.</t>
  <t>Set <spanx style="verb">fn</spanx> verification.</li>
              <li>Set <tt>fn</tt> to <spanx style="verb">leaf_index</spanx> <tt>leaf_index</tt> and <spanx style="verb">sn</spanx> <tt>sn</tt> to <spanx style="verb">tree_size <tt>tree_size - 1</spanx>.</t>
  <t>Set <spanx style="verb">r</spanx>
	      1</tt>.</li>
              <li>Set <tt>r</tt> to <spanx style="verb">hash</spanx>.</t> <tt>hash</tt>.</li>
              <li>
                <t>For each value <spanx style="verb">p</spanx> <tt>p</tt> in the <spanx style="verb">inclusion_path</spanx> array:  <vspace blankLines='1'/>
If <spanx style="verb">sn</spanx> <tt>inclusion_path</tt> array:</t>
                <ol spacing="normal" type="a">
                  <li>If <tt>sn</tt> is 0, then stop the iteration and fail the proof verification.  <vspace blankLines='1'/>
If <spanx style="verb">LSB(fn)</spanx> verification.</li>
                  <li>
                    <t>If <tt>LSB(fn)</tt> is set, or if <spanx style="verb">fn</spanx> <tt>fn</tt> is equal to <spanx style="verb">sn</spanx>, then:  <list style="numbers">
      <t>Set <spanx style="verb">r</spanx> <tt>sn</tt>, then:</t>
                    <ol spacing="normal" type="i">
                      <li>Set <tt>r</tt> to <spanx style="verb">HASH(0x01 <tt>HASH(0x01 || p || r)</spanx></t>
      <t>If <spanx style="verb">LSB(fn)</spanx> r)</tt>.</li>
                      <li>If <tt>LSB(fn)</tt> is not set, then right-shift both <spanx style="verb">fn</spanx> <tt>fn</tt> and <spanx style="verb">sn</spanx>
                        <tt>sn</tt> equally until either <spanx style="verb">LSB(fn)</spanx> <tt>LSB(fn)</tt> is set or <spanx style="verb">fn</spanx> <tt>fn</tt> is <spanx style="verb">0</spanx>.</t>
    </list>
Otherwise:  <list style="numbers">
      <t>Set <spanx style="verb">r</spanx> <tt>0</tt>.</li>
                    </ol>
                    <t>Otherwise:</t>
                    <ol spacing="normal" type="i">
                      <li>Set <tt>r</tt> to <spanx style="verb">HASH(0x01 <tt>HASH(0x01 || r || p)</spanx></t>
    </list>
Finally, p)</tt>.</li>
                    </ol>
                  </li>
                  <li>Finally, right-shift both <spanx style="verb">fn</spanx> <tt>fn</tt> and <spanx style="verb">sn</spanx> <tt>sn</tt> one time.</t>
  <t>Compare <spanx style="verb">sn</spanx> time.</li>
                </ol>
              </li>
              <li>Compare <tt>sn</tt> to 0. Compare <spanx style="verb">r</spanx> <tt>r</tt> against the <spanx style="verb">root_hash</spanx>.
	      <tt>root_hash</tt>. If <spanx style="verb">sn</spanx> <tt>sn</tt> is equal to
0,
	      0 and <spanx style="verb">r</spanx> <tt>r</tt> and the <spanx style="verb">root_hash</spanx> <tt>root_hash</tt> are equal, then the log has proven
	      the inclusion of <spanx style="verb">hash</spanx>. <tt>hash</tt>. Otherwise, fail the proof verification.</t>
</list></t> verification.</li>
            </ol>
          </section>
        </section>
        <section anchor="consistency" title="Merkle numbered="true" toc="default">
          <name>Merkle Consistency Proofs"> Proofs</name>
          <t>Merkle consistency proofs prove the append-only property of the tree. A Merkle
consistency proof for a Merkle Tree Hash MTH(D_n) and a previously advertised
hash MTH(D[0:m]) of the first m leaves, m &lt;= n, is the list of nodes in the
Merkle Tree required to verify that the first m inputs D[0:m] are equal in both
trees. Thus, a consistency proof must contain a set of intermediate nodes (i.e.,
commitments to inputs) sufficient to verify MTH(D_n), such that (a subset of)
the same nodes can be used to verify MTH(D[0:m]). We define an algorithm that
outputs the (unique) minimal consistency proof.</t>
          <section anchor="generating-a-consistency-proof" title="Generating numbered="true" toc="default">
            <name>Generating a Consistency Proof"> Proof</name>
            <t>Given an ordered list of n inputs to the tree, D_n = {d[0], d[1], …, ...,
d[n-1]}, the Merkle consistency proof PROOF(m, D_n) for a previous Merkle Tree
Hash MTH(D[0:m]), 0 &lt; m &lt; n, is defined as:</t>

<figure><artwork><![CDATA[
            <artwork name="" type="" align="left" alt=""><![CDATA[
PROOF(m, D_n) = SUBPROOF(m, D_n, true)
]]></artwork></figure>
]]></artwork>
            <t>In SUBPROOF, the boolean value represents whether the subtree created from
	    D[0:m] is a complete subtree of the Merkle Tree created from D_n, D_n and,
	    consequently, whether the subtree Merkle Tree Hash MTH(D[0:m]) is known. The
	    initial call to SUBPROOF sets this to be true, and SUBPROOF is then defined as
	    follows:</t>
	    <t>The subproof for m = n is empty if m is the value for which PROOF was
	    originally requested (meaning that the subtree created from D[0:m] is a complete
	    subtree of the Merkle Tree created from the original D_n for which PROOF was
requested,
	    requested and the subtree Merkle Tree Hash MTH(D[0:m]) is known):</t>

<figure><artwork><![CDATA[
<artwork name="" type="" align="left" alt=""><![CDATA[
SUBPROOF(m, D_m, true) = {}
]]></artwork></figure>
]]></artwork>
            <t>Otherwise, the subproof for m = n is the Merkle Tree Hash committing inputs
	    D[0:m]:</t>

<figure><artwork><![CDATA[
<artwork name="" type="" align="left" alt=""><![CDATA[
SUBPROOF(m, D_m, false) = {MTH(D_m)}
]]></artwork></figure>
]]></artwork>
            <t>For m &lt; n, let k be the largest power of two smaller than n. The subproof is
	    then defined recursively, using the appropriate step below:</t>
            <t>If m &lt;= k, the right subtree entries D[k:n] only exist in the current tree.
	    We prove that the left subtree entries D[0:k] are consistent and add a
	    commitment to D[k:n]:</t>

<figure><artwork><![CDATA[
<artwork name="" type="" align="left" alt=""><![CDATA[
SUBPROOF(m, D_n, b) = SUBPROOF(m, D[0:k], b) : MTH(D[k:n])
]]></artwork></figure>
]]></artwork>
             <t>If m &gt; k, the left subtree entries D[0:k] are identical in both trees. We
	     prove that the right subtree entries D[k:n] are consistent and add a commitment
	     to
D[0:k].</t>

<figure><artwork><![CDATA[ D[0:k]:</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
SUBPROOF(m, D_n, b) = SUBPROOF(m - k, D[k:n], false) : MTH(D[0:k])
]]></artwork></figure>
]]></artwork>
            <t>The number of nodes in the resulting proof is bounded above by ceil(log2(n)) +
1.</t>
            <t>The : operator and D[k1:k2] are defined the same as in <xref target="mht_definition"/>.</t> target="mht_definition" format="default"/>.</t>
          </section>
          <section anchor="verify_consistency" title="Verifying numbered="true" toc="default">
            <name>Verifying Consistency between Two Tree Heads"> Heads</name>
            <t>When a client has a tree head <spanx style="verb">first_hash</spanx> <tt>first_hash</tt> for tree size <spanx style="verb">first</spanx>,
	    <tt>first</tt>, has a tree head
<spanx style="verb">second_hash</spanx>
	    <tt>second_hash</tt> for tree size <spanx style="verb">second</spanx> <tt>second</tt> where <spanx style="verb">0 <tt>0 &lt; first &lt; second</spanx>,
	    second</tt>, and has received a consistency proof between the two (e.g., in a <spanx style="verb">TransItem</spanx>
	    <tt>TransItem</tt> of type
<spanx style="verb">consistency_proof_v2</spanx>),
	    <tt>consistency_proof_v2</tt>), the following algorithm may be used to verify the
	    consistency proof:</t>

<t><list style="numbers">
  <t>If <spanx style="verb">consistency_path</spanx>
            <ol spacing="normal" type="1">
	      <li>If <tt>consistency_path</tt> is an empty array, stop and fail the proof
verification.</t>
  <t>If <spanx style="verb">first</spanx>
	      verification.</li>
              <li>If <tt>first</tt> is an exact power of 2, then prepend <spanx style="verb">first_hash</spanx> <tt>first_hash</tt>
	      to the
<spanx style="verb">consistency_path</spanx> array.</t>
  <t>Set <spanx style="verb">fn</spanx> <tt>consistency_path</tt> array.</li>
              <li>Set <tt>fn</tt> to <spanx style="verb">first <tt>first - 1</spanx> 1</tt> and <spanx style="verb">sn</spanx> <tt>sn</tt> to <spanx style="verb">second <tt>second - 1</spanx>.</t>
  <t>If <spanx style="verb">LSB(fn)</spanx>
	      1</tt>.</li>
              <li>If <tt>LSB(fn)</tt> is set, then right-shift both <spanx style="verb">fn</spanx> <tt>fn</tt> and <spanx style="verb">sn</spanx>
	      <tt>sn</tt> equally until
<spanx style="verb">LSB(fn)</spanx> <tt>LSB(fn)</tt> is not set.</t>
  <t>Set set.</li>
              <li>Set both <spanx style="verb">fr</spanx> <tt>fr</tt> and <spanx style="verb">sr</spanx> <tt>sr</tt> to the first value in the <spanx style="verb">consistency_path</spanx> array.</t>
	      <tt>consistency_path</tt> array.</li>
              <li>
                <t>For each subsequent value <spanx style="verb">c</spanx> <tt>c</tt> in the <spanx style="verb">consistency_path</spanx> array:  <vspace blankLines='1'/>
If <spanx style="verb">sn</spanx> <tt>consistency_path</tt> array:</t>
                <ol spacing="normal" type="a">
                  <li>If <tt>sn</tt> is 0, then stop the iteration and fail the proof verification.  <vspace blankLines='1'/>
If <spanx style="verb">LSB(fn)</spanx> verification.</li>
                  <li>
                    <t>If <tt>LSB(fn)</tt> is set, or if <spanx style="verb">fn</spanx> <tt>fn</tt> is equal to <spanx style="verb">sn</spanx>, then:  <list style="numbers">
      <t>Set <spanx style="verb">fr</spanx> <tt>sn</tt>, then:</t>
                    <ol spacing="normal" type="i">
                      <li>Set <tt>fr</tt> to <spanx style="verb">HASH(0x01 <tt>HASH(0x01 || c || fr)</spanx><vspace />
Set <spanx style="verb">sr</spanx> fr)</tt>.</li>
                      <li>Set <tt>sr</tt> to <spanx style="verb">HASH(0x01 <tt>HASH(0x01 || c || sr)</spanx></t>
      <t>If <spanx style="verb">LSB(fn)</spanx> sr)</tt>.</li>
                      <li>If <tt>LSB(fn)</tt> is not set, then right-shift both <spanx style="verb">fn</spanx> <tt>fn</tt> and <spanx style="verb">sn</spanx> <tt>sn</tt>
                        equally until either <spanx style="verb">LSB(fn)</spanx> <tt>LSB(fn)</tt> is set or <spanx style="verb">fn</spanx> <tt>fn</tt> is <spanx style="verb">0</spanx>.</t>
    </list>
Otherwise:  <list style="numbers">
      <t>Set <spanx style="verb">sr</spanx> <tt>0</tt>.</li>
                    </ol>
                    <t>Otherwise:</t>
                    <ol spacing="normal" type="i">
                      <li>Set <tt>sr</tt> to <spanx style="verb">HASH(0x01 <tt>HASH(0x01 || sr || c)</spanx></t>
    </list>
Finally, c)</tt>.</li>
                    </ol>
                  </li>
                  <li>Finally, right-shift both <spanx style="verb">fn</spanx> <tt>fn</tt> and <spanx style="verb">sn</spanx> <tt>sn</tt> one time.</t>
  <t>After time.</li>
                </ol>
              </li>
              <li>After completing iterating through the <spanx style="verb">consistency_path</spanx> <tt>consistency_path</tt> array as
	      described above, verify that the <spanx style="verb">fr</spanx> <tt>fr</tt> calculated is equal to the <spanx style="verb">first_hash</spanx>
	      <tt>first_hash</tt> supplied, that the <spanx style="verb">sr</spanx> <tt>sr</tt> calculated is equal to the <spanx style="verb">second_hash</spanx> supplied
	      <tt>second_hash</tt> supplied, and that <spanx style="verb">sn</spanx> <tt>sn</tt> is 0.</t>
</list></t> 0.</li>
            </ol>
          </section>
        </section>
        <section anchor="example" title="Example"> numbered="true" toc="default">
          <name>Example</name>
          <t>The following is a binary Merkle Tree with 7 leaves:</t>

<figure><artwork><![CDATA[
          <artwork name="" type="" align="left" alt=""><![CDATA[
            hash
           /    \
          /      \
         /        \
        /          \
       /            \
      k              l
     / \            / \
    /   \          /   \
   /     \        /     \
  g       h      i      j
 / \     / \    / \     |
 a b     c d    e f     d6
 | |     | |    | |
d0 d1   d2 d3  d4 d5
]]></artwork></figure>
]]></artwork>
          <t>The inclusion proof for d0 <tt>d0</tt> is [b, h, l].</t> [<tt>b</tt>, <tt>h</tt>, <tt>l</tt>].</t>
          <t>The inclusion proof for d3 <tt>d3</tt> is [c, g, l].</t> [<tt>c</tt>, <tt>g</tt>, <tt>l</tt>].</t>
          <t>The inclusion proof for d4 <tt>d4</tt> is [f, j, k].</t> [<tt>f</tt>, <tt>j</tt>, <tt>k</tt>].</t>
          <t>The inclusion proof for d6 <tt>d6</tt> is [i, k].</t> [<tt>i</tt>, <tt>k</tt>].</t>
          <t>The same tree, built incrementally in four steps:</t>

<figure><artwork><![CDATA[
          <artwork name="" type="" align="left" alt=""><![CDATA[
    hash0          hash1=k
    / \              /  \
   /   \            /    \
  /     \          /      \
  g      c         g       h
 / \     |        / \     / \
 a b     d2       a b     c d
 | |              | |     | |
d0 d1            d0 d1   d2 d3

          hash2                    hash
          /  \                    /    \
         /    \                  /      \
        /      \                /        \
       /        \              /          \
      /          \            /            \
     k            i          k              l
    / \          / \        / \            / \
   /   \         e f       /   \          /   \
  /     \        | |      /     \        /     \
 g       h      d4 d5    g       h      i      j
/ \     / \             / \     / \    / \     |
a b     c d             a b     c d    e f     d6
| |     | |             | |     | |    | |
d0 d1   d2 d3           d0 d1   d2 d3  d4 d5
]]></artwork></figure>
]]></artwork>
          <t>The consistency proof between hash0 <tt>hash0</tt> and hash <tt>hash</tt> is PROOF(3, D[7]) = [c, d, g, l].
c, g [<tt>c</tt>, <tt>d</tt>, <tt>g</tt>, <tt>l</tt>].
Non-leaf nodes <tt>c</tt>, <tt>g</tt> are used to verify hash0, <tt>hash0</tt>, and d, l non-leaf nodes <tt>d</tt>, <tt>l</tt> are additionally used to show hash <tt>hash</tt> is
consistent with hash0.</t> <tt>hash0</tt>.</t>
          <t>The consistency proof between hash1 <tt>hash1</tt> and hash <tt>hash</tt> is PROOF(4, D[7]) = [l]. hash [<tt>l</tt>]. <tt>hash</tt> can
be verified using hash1=k <tt>hash1</tt>=<tt>k</tt> and l.</t> <tt>l</tt>.</t>
          <t>The consistency proof between hash2 <tt>hash2</tt> and hash <tt>hash</tt> is PROOF(6, D[7]) = [i, j, k].
k, i [<tt>i</tt>, <tt>j</tt>, <tt>k</tt>].
Non-leaf nodes <tt>k</tt>, <tt>i</tt> are used to verify hash2, <tt>hash2</tt>, and j non-leaf node <tt>j</tt> is additionally used to show hash <tt>hash</tt> is
consistent with hash2.</t> <tt>hash2</tt>.</t>
        </section>
      </section>
      <section anchor="signatures" title="Signatures"> numbered="true" toc="default">
        <name>Signatures</name>
        <t>When signing data structures, a log MUST <bcp14>MUST</bcp14> use one of
the signature algorithms from the IANA CT Signature Algorithms "Signature Algorithms" registry,
described in <xref target="signature_algorithms"/>.</t> target="signature_algorithms" format="default"/>.</t>
      </section>
    </section>
    <section anchor="submitters" title="Submitters"> numbered="true" toc="default">
      <name>Submitters</name>
      <t>Submitters submit certificates or preannouncements of certificates prior to
issuance (precertificates) to logs for public auditing, as described below. In
order to enable attribution of each logged certificate or precertificate to its
issuer, each submission MUST <bcp14>MUST</bcp14> be accompanied by all additional certificates
required to verify the chain up to an accepted trust anchor (<xref target="get-anchors"/>). target="get-anchors" format="default"/>).
The trust anchor (a root or intermediate CA certificate) MAY <bcp14>MAY</bcp14> be omitted from the
submission.</t>
      <t>If a log accepts a submission, it will return a Signed Certificate Timestamp
(SCT) (see <xref target="sct"/>). target="sct" format="default"/>). The submitter SHOULD <bcp14>SHOULD</bcp14> validate the returned SCT SCT, as described
in <xref target="tls_clients"/> target="tls_clients" format="default"/>, if they understand its format and they intend to use it
directly in a TLS handshake or to construct a certificate. If the submitter does
not need the SCT (for example, the certificate is being submitted simply to make
it available in the log), it MAY <bcp14>MAY</bcp14> validate the SCT.</t>
      <section anchor="certificates" title="Certificates"> numbered="true" toc="default">
        <name>Certificates</name>
        <t>Any entity can submit a certificate (<xref target="submit-entry"/>) target="submit-entry" format="default"/>) to a log. Since it is
anticipated that TLS clients will reject certificates that are not logged, it is
expected that certificate issuers and subjects will be strongly motivated to
submit them.</t>
      </section>
      <section anchor="precertificates" title="Precertificates"> numbered="true" toc="default">
        <name>Precertificates</name>
        <t>CAs may preannounce a certificate prior to issuance by submitting a
precertificate (<xref target="submit-entry"/>) target="submit-entry" format="default"/>) that the log can use to create an entry that
will be valid against the issued certificate. The CA MAY <bcp14>MAY</bcp14> incorporate the
returned SCT in the issued certificate. One example of where the returned SCT is
not incorporated in the issued certificate is when a CA sends the precertificate
to multiple logs, logs but only incorporates the SCTs that are returned first.</t>
        <t>A precertificate is a CMS <xref target="RFC5652"></xref> <spanx style="verb">signed-data</spanx> target="RFC5652" format="default"/> <tt>signed-data</tt> object that conforms to the
following profile:</t>

<t><list style="symbols">
  <t>It MUST
        <ul spacing="normal">
          <li>It <bcp14>MUST</bcp14> be DER encoded encoded, as described in <xref target="X690"></xref>.</t>
  <t><spanx style="verb">SignedData.version</spanx> MUST be v3(3).</t>
  <t><spanx style="verb">SignedData.digestAlgorithms</spanx> MUST target="X690"
	  format="default"/>.</li>
          <li><tt>SignedData.version</tt> <bcp14>MUST</bcp14> be v3(3).</li>
          <li><tt>SignedData.digestAlgorithms</tt> <bcp14>MUST</bcp14> be the same as the
<spanx style="verb">SignerInfo.digestAlgorithm</spanx>
	  <tt>SignerInfo.digestAlgorithm</tt> OID value (see below).</t>
  <t><spanx style="verb">SignedData.encapContentInfo</spanx>:
  <list style="symbols">
      <t><spanx style="verb">eContentType</spanx> MUST below).</li>
          <li>
	    <t><tt>SignedData.encapContentInfo</tt>:</t>
            <ul spacing="normal">
              <li><tt>eContentType</tt> <bcp14>MUST</bcp14> be the OID 1.3.101.78.</t>
      <t><spanx style="verb">eContent</spanx> MUST 1.3.101.78.</li>
              <li><tt>eContent</tt> <bcp14>MUST</bcp14> contain a TBSCertificate <xref target="RFC5280"></xref>
	      target="RFC5280" format="default"/> that will be identical to
	      the TBSCertificate in the issued certificate, except that the Transparency
	      Information (<xref target="x509v3_transinfo_extension"/>) target="x509v3_transinfo_extension" format="default"/>)
	      extension MUST <bcp14>MUST</bcp14> be omitted.</t>
    </list></t>
  <t><spanx style="verb">SignedData.certificates</spanx> MUST be omitted.</t>
  <t><spanx style="verb">SignedData.crls</spanx> MUST be omitted.</t>
  <t><spanx style="verb">SignedData.signerInfos</spanx> MUST omitted.</li>
            </ul>
          </li>
          <li><tt>SignedData.certificates</tt> <bcp14>MUST</bcp14> be omitted.</li>
          <li><tt>SignedData.crls</tt> <bcp14>MUST</bcp14> be omitted.</li>
          <li><t><tt>SignedData.signerInfos</tt> <bcp14>MUST</bcp14> contain one <spanx style="verb">SignerInfo</spanx>:
  <list style="symbols">
      <t><spanx style="verb">version</spanx> MUST be v3(3).</t>
      <t><spanx style="verb">sid</spanx> MUST
	  <tt>SignerInfo</tt>:</t>
            <ul spacing="normal">
              <li><tt>version</tt> <bcp14>MUST</bcp14> be v3(3).</li>
              <li><tt>sid</tt> <bcp14>MUST</bcp14> use the <spanx style="verb">subjectKeyIdentifier</spanx> option.</t>
      <t><spanx style="verb">digestAlgorithm</spanx> MUST <tt>subjectKeyIdentifier</tt>
	      option.</li>
              <li><tt>digestAlgorithm</tt> <bcp14>MUST</bcp14> be one of the hash algorithm
	      OIDs listed in the IANA CT Hash Algorithms Registry, "Hash Algorithms" registry, described in
	      <xref target="hash_algorithms"/>.</t>
      <t><spanx style="verb">signedAttrs</spanx> MUST target="hash_algorithms" format="default"/>.</li>
              <li>
		<t><tt>signedAttrs</tt> <bcp14>MUST</bcp14> be present and MUST
		<bcp14>MUST</bcp14> contain two attributes:
      <list style="symbols">
          <t>A attributes:</t>
                <ul spacing="normal">
                  <li>a content-type attribute whose value is the same as
<spanx style="verb">SignedData.encapContentInfo.eContentType</spanx>.</t>
          <t>A
		  <tt>SignedData.encapContentInfo.eContentType</tt> and</li>
                  <li>a message-digest attribute whose value is the message digest of
<spanx style="verb">SignedData.encapContentInfo.eContent</spanx>.</t>
        </list></t>
      <t><spanx style="verb">signatureAlgorithm</spanx> MUST
		  <tt>SignedData.encapContentInfo.eContent</tt>.</li>
                </ul>
              </li>
              <li><tt>signatureAlgorithm</tt> <bcp14>MUST</bcp14> be the same OID as <spanx style="verb">TBSCertificate.signature</spanx>.</t>
      <t><spanx style="verb">signature</spanx> MUST
	      <tt>TBSCertificate.signature</tt>.</li>
              <li><tt>signature</tt> <bcp14>MUST</bcp14> be from the same (root or
	      intermediate) CA that intends to
	      issue the corresponding certificate (see <xref target="binding_intent_to_issue"/>).</t>
      <t><spanx style="verb">unsignedAttrs</spanx> MUST be omitted.</t>
    </list></t>
</list></t>

<t><spanx style="verb">SignerInfo.signedAttrs</spanx> target="binding_intent_to_issue"
	      format="default"/>).</li>
              <li><tt>unsignedAttrs</tt> <bcp14>MUST</bcp14> be omitted.</li>
            </ul>
          </li>
        </ul>
        <t><tt>SignerInfo.signedAttrs</tt> is included in the message digest calculation process
(see Section 5.4 of <xref target="RFC5652"></xref>), target="RFC5652" sectionFormat="of" section="5.4"/>), which ensures that the <spanx style="verb">SignerInfo.signature</spanx> <tt>SignerInfo.signature</tt>
value will not be a valid X.509v3 signature that could be used in conjunction
with the TBSCertificate (from <spanx style="verb">SignedData.encapContentInfo.eContent</spanx>) <tt>SignedData.encapContentInfo.eContent</tt>) to
construct a valid certificate.</t>
        <section anchor="binding_intent_to_issue" title="Binding numbered="true" toc="default">
          <name>Binding Intent to Issue"> Issue</name>
          <t>Under normal circumstances, there will be a short delay between precertificate
submission and issuance of the corresponding certificate. Longer delays are to
be expected occasionally (e.g., due to log server downtime), and downtime); in some cases cases,
the CA might not actually issue the corresponding certificate. Nevertheless, a
precertificate's <spanx style="verb">signature</spanx> <tt>signature</tt> indicates the CA's binding intent to issue the
corresponding certificate, which means that:</t>

<t><list style="symbols">
  <t>Misissuance
          <ul spacing="normal">
            <li>Misissuance of a precertificate is considered equivalent to misissuance of
	    the corresponding certificate. The CA should expect to be held to account, accountable,
	    even if the corresponding certificate has not actually been issued.</t>
  <t>Upon issued.</li>
            <li>Upon observing a precertificate, a client can reasonably presume that the
	    corresponding certificate has been issued. A client may wish to obtain status
	    information (e.g., by using the Online Certificate Status Protocol <xref target="RFC6960"></xref>
	    target="RFC6960" format="default"/>
	    or by checking a Certificate Revocation List <xref target="RFC5280"></xref>) target="RFC5280"
	    format="default"/>) about a certificate
	    that is presumed to exist, especially if there is evidence or suspicion that
	    the corresponding precertificate was misissued.</t>
  <t>TLS misissued.</li>
            <li>TLS clients may have policies that require CAs to be able to revoke, revoke and to
	    provide certificate status services for, for each certificate that is presumed to
	    exist based on the existence of a corresponding precertificate.</t>
</list></t> precertificate.</li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="log-format-and-operation" title="Log numbered="true" toc="default">
      <name>Log Format and Operation"> Operation</name>
      <t>A log is a single, append-only Merkle Tree of submitted certificate and
precertificate entries.</t>
      <t>When it receives and accepts a valid submission, the log MUST <bcp14>MUST</bcp14> return an SCT that
corresponds to the submitted certificate or precertificate. If the log has
previously seen this valid submission, it SHOULD <bcp14>SHOULD</bcp14> return the same SCT as it
returned before, as discussed in <xref target="misbehaving_logs"/>. target="misbehaving_logs" format="default"/>.
If different SCTs are produced for the same
submission, multiple log entries will have to be created, one for each SCT (as
the timestamp is a part of the leaf structure). Note that if a certificate was
previously logged as a precertificate, then the precertificate's SCT of type
<spanx style="verb">precert_sct_v2</spanx>
<tt>precert_sct_v2</tt> would not be appropriate; instead, a fresh SCT of type
<spanx style="verb">x509_sct_v2</spanx>
<tt>x509_sct_v2</tt> should be generated.</t>
      <t>An SCT is the log's promise to append to its Merkle Tree an entry for the
      accepted submission. Upon producing an SCT, the log MUST fulfil <bcp14>MUST</bcp14> fulfill this
      promise by performing the following actions within a fixed amount of time known as the
      Maximum Merge Delay (MMD), which is one of the log's parameters (see
      <xref target="log_parameters"/>):</t>

<t><list style="symbols">
  <t>Allocate target="log_parameters" format="default"/>):</t>
      <ul spacing="normal">
        <li>Allocate a tree index to the entry representing the accepted submission.</t>
  <t>Calculate submission.</li>
        <li>Calculate the root of the tree.</t>
  <t>Sign tree.</li>
        <li>Sign the root of the tree (see <xref target="sth"/>).</t>
</list></t> target="sth" format="default"/>).</li>
      </ul>
      <t>The log may append multiple entries before signing the root of the tree.</t>
      <t>Log operators SHOULD NOT <bcp14>SHOULD NOT</bcp14> impose any conditions on retrieving or sharing data
from the log.</t>
      <section anchor="log_parameters" title="Log Parameters"> numbered="true" toc="default">
        <name>Log Parameters</name>
        <t>A log is defined by a collection of immutable parameters, which are used by
clients to communicate with the log and to verify log artifacts. Except for the
Final Signed Tree Head (STH), STH, each of these parameters MUST <bcp14>MUST</bcp14> be established
before the log operator begins to operate the log.</t>

<t><list style="hanging">
  <t hangText="Base URL:">
  The
        <dl newline="false" spacing="normal">
          <dt>Base URL:</dt>
          <dd>The prefix used to construct URLs (<xref target="RFC3986"></xref>) <xref target="RFC3986" format="default"/>
	  for client messages (see <xref target="client_messages"/>). target="client_messages" format="default"/>). The
	  base URL MUST <bcp14>MUST</bcp14> be an "https" URL, MAY <bcp14>MAY</bcp14> contain a port,
MAY
	  and <bcp14>MAY</bcp14> contain a path with any number of path segments, segments but MUST NOT
	  <bcp14>MUST NOT</bcp14> contain a query string, fragment, or trailing "/".
	  Example: https://ct.example.org/blue</t>
  <t hangText="Hash Algorithm:">
  The https://ct.example.org/blue.</dd>
          <dt>Hash Algorithm:</dt>
          <dd>The hash algorithm used for the Merkle Tree (see <xref target="hash_algorithms"/>).</t>
  <t hangText="Signature Algorithm:">
  The target="hash_algorithms"
	  format="default"/>).</dd>
          <dt>Signature Algorithm:</dt>
          <dd>The signature algorithm used (see <xref target="signatures"/>).</t>
  <t hangText="Public Key:">
  The target="signatures"
	  format="default"/>).</dd>
          <dt>Public Key:</dt>
          <dd>The public key used to verify signatures generated by the log. A log MUST NOT
	  <bcp14>MUST NOT</bcp14> use the same keypair as any other log.</t>
  <t hangText="Log ID:">
  The log.</dd>
          <dt>Log ID:</dt>
          <dd>The OID that uniquely identifies the log.</t>
  <t hangText="Maximum log.</dd>
          <dt>Maximum Merge Delay:">
  The Delay:</dt>
          <dd>The MMD the log has committed to. This document deliberately does not specify
	  any limits on the value, value to allow for experimentation.</t>
  <t hangText="Version:">
  The experimentation.</dd>
          <dt>Version:</dt>
          <dd>The version of the protocol supported by the log (currently 1 or 2).</t>
  <t hangText="Maximum 2).</dd>
          <dt>Maximum Chain Length:">
  The Length:</dt>
          <dd>The longest certificate chain submission the log is willing to accept, if the
	  log imposes any limit.</t>
  <t hangText="STH limit.</dd>
          <dt>STH Frequency Count:">
  The Count:</dt>
          <dd>The maximum number of STHs the log may produce in any period equal to the
<spanx style="verb">Maximum
	  <tt>Maximum Merge Delay</spanx> Delay</tt> (see <xref target="sth"/>).</t>
  <t hangText="Final STH:">
  If target="sth" format="default"/>).</dd>
          <dt>Final STH:</dt>
          <dd>If a log has been closed down (i.e., no longer accepts new entries), existing
	  entries may still be valid. In this case, the client should know the final
	  valid STH in the log to ensure no new entries can be added without detection.
	  This value MUST <bcp14>MUST</bcp14> be provided in the form of a TransItem <tt>TransItem</tt> of
	  type
<spanx style="verb">signed_tree_head_v2</spanx>. <tt>signed_tree_head_v2</tt>.
	  If a log is still accepting entries, this value should not be provided.</t>
</list></t> provided.</dd>
        </dl>
        <t><xref target="JSON.Metadata"></xref> target="JSON.Metadata" format="default"/> is an example of a metadata format which
	that includes the above	elements.</t>
      </section>
      <section anchor="evaluating-submissions" title="Evaluating Submissions"> numbered="true" toc="default">
        <name>Evaluating Submissions</name>
        <t>A log determines whether to accept or reject a submission by evaluating it
against the minimum acceptance criteria (see <xref target="minimum_criteria"/>) target="minimum_criteria" format="default"/>) and against
the log's discretionary acceptance criteria (see <xref target="discretionary_criteria"/>).</t> target="discretionary_criteria" format="default"/>).</t>
        <t>If the acceptance criteria are met, the log SHOULD <bcp14>SHOULD</bcp14> accept the submission. (A log
may decide, for example, to temporarily reject acceptable submissions to protect
itself against denial-of-service attacks).</t> attacks.)</t>
        <t>The log SHALL <bcp14>SHALL</bcp14> allow retrieval of its list of accepted trust anchors (see
<xref target="get-anchors"/>), target="get-anchors" format="default"/>), each of which is a root or intermediate CA certificate. This
list might usefully be the union of root certificates trusted by major browser
vendors.</t>
        <section anchor="minimum_criteria" title="Minimum numbered="true" toc="default">
          <name>Minimum Acceptance Criteria"> Criteria</name>
          <t>To ensure that logged certificates and precertificates are attributable to an
accepted trust anchor, to set clear expectations for what monitors would
find in the log, and to avoid being overloaded by invalid submissions, the log
MUST
<bcp14>MUST</bcp14> reject a submission if any of the following conditions are not met:</t>

<t><list style="symbols">
  <t>The <spanx style="verb">submission</spanx>, <spanx style="verb">type</spanx>
          <ul spacing="normal">
            <li>The <tt>submission</tt>, <tt>type</tt>, and <spanx style="verb">chain</spanx> <tt>chain</tt> inputs MUST
	    <bcp14>MUST</bcp14> be set as described in
	    <xref target="submit-entry"/>. target="submit-entry" format="default"/>. The log MUST NOT <bcp14>MUST NOT</bcp14>
	    accommodate misordered CA certificates or
	    use any other source of intermediate CA certificates to attempt certification
	    path construction.</t> construction.</li>
            <li>
	      <t>Each of the zero or more intermediate CA certificates in the chain MUST
	      <bcp14>MUST</bcp14> have one or both of the following features:
  <list style="symbols">
      <t>The features:</t>
              <ul spacing="normal">
                <li>The Basic Constraints extension with the cA boolean asserted.</t>
      <t>The asserted.</li>
                <li>The Key Usage extension with the keyCertSign bit asserted.</t>
    </list></t>
  <t>Each asserted.</li>
              </ul>
            </li>
            <li>Each certificate in the chain MUST <bcp14>MUST</bcp14> fall within the limits
	    imposed by the zero
	    or more Basic Constraints pathLenConstraint values found higher up the chain.</t>
  <t>Precertificate chain.</li>
            <li>Precertificate submissions MUST <bcp14>MUST</bcp14> conform to all of the
	    requirements in
	    <xref target="precertificates"/>.</t>
</list></t> target="precertificates" format="default"/>.</li>
          </ul>
        </section>
        <section anchor="discretionary_criteria" title="Discretionary numbered="true" toc="default">
          <name>Discretionary Acceptance Criteria"> Criteria</name>
          <t>If the minimum acceptance criteria are met but the submission is not fully
	  valid according to <xref target="RFC5280"></xref> target="RFC5280" format="default"/> verification rules
	  (e.g., the certificate or
	  precertificate has expired, is not yet valid, has been revoked, exhibits ASN.1
	  DER encoding errors but the log can still parse it, etc), etc.), then the acceptability
	  of the submission is left to the log's discretion. It is useful for logs to
	  accept such submissions in order to accommodate quirks of CA certificate-issuing
	  software and to facilitate monitoring of CA compliance with applicable policies
	  and technical standards. However, it is impractical for this document to
	  enumerate, and for logs to consider, all of the ways that a submission might
	  fail to comply with <xref target="RFC5280"></xref>.</t> target="RFC5280" format="default"/>.</t>
          <t>Logs SHOULD <bcp14>SHOULD</bcp14> limit the length of chain they will accept. The
	  maximum chain length is one of the log's parameters (see <xref target="log_parameters"/>).</t>
	  target="log_parameters" format="default"/>).</t>
        </section>
      </section>
      <section anchor="log_entries" title="Log Entries"> numbered="true" toc="default">
        <name>Log Entries</name>
        <t>If a submission is accepted and an SCT is issued, the accepting log MUST <bcp14>MUST</bcp14> store the
entire chain used for verification. This chain MUST <bcp14>MUST</bcp14> include the certificate or
precertificate itself, the zero or more intermediate CA certificates provided by
the submitter, and the trust anchor used to verify the chain (even if it was
omitted from the submission). The log MUST <bcp14>MUST</bcp14> provide this chain for auditing upon
request (see <xref target="get-entries"/>) target="get-entries" format="default"/>) so that the CA cannot avoid blame by
logging a partial or empty chain.
Each log entry is a <spanx style="verb">TransItem</spanx> <tt>TransItem</tt> structure of type <spanx style="verb">x509_entry_v2</spanx> <tt>x509_entry_v2</tt> or
<spanx style="verb">precert_entry_v2</spanx>.
<tt>precert_entry_v2</tt>. However, a log may store its entries in any format. If a
log does not store this <spanx style="verb">TransItem</spanx> <tt>TransItem</tt> in full, it must store the <spanx style="verb">timestamp</spanx> <tt>timestamp</tt>
and <spanx style="verb">sct_extensions</spanx> <tt>sct_extensions</tt> of the corresponding <spanx style="verb">TimestampedCertificateEntryDataV2</spanx> <tt>TimestampedCertificateEntryDataV2</tt>
structure. The <spanx style="verb">TransItem</spanx> <tt>TransItem</tt> can be reconstructed from these fields and the entire
chain that the log used to verify the submission.</t>
      </section>
      <section anchor="log_id" title="Log ID"> numbered="true" toc="default">
        <name>Log ID</name>
        <t>Each log is identified by an OID, which is one of the log's parameters (see
<xref target="log_parameters"/>) target="log_parameters" format="default"/>) and which MUST NOT <bcp14>MUST NOT</bcp14> be used to identify any other log. A
log's operator MUST <bcp14>MUST</bcp14> either allocate the OID themselves or request an OID from
the Log ID registry (see <xref target="log_id_registry"/>). target="log_id_registry" format="default"/>).
One way to get an OID arc, from which OIDs can be allocated, is to request
a Private Enterprise Number from IANA, IANA by completing the
<eref target="https://pen.iana.org/pen/PenApplication.page">registration form</eref>.
The only advantage of the registry is that the DER encoding can be small.
(Recall that OID allocations do not require a central registration, although
logs will most likely want to make themselves known to potential clients
through out of band out-of-band means.)
Various data structures include
the DER encoding of this OID, excluding the ASN.1 tag and length bytes, in an
opaque vector:</t>

<figure><artwork><![CDATA[
<sourcecode type="tls-presentation"><![CDATA[
    opaque LogID<2..127>;
]]></artwork></figure>
]]></sourcecode>
        <t>Note that the ASN.1 length and the opaque vector length are identical in size (1
byte) and value, so the full DER encoding (including the tag and length)
of the OID can be reproduced simply by
prepending an OBJECT IDENTIFIER tag (0x06) to the opaque vector length and
contents.</t>
        <t>The OID used to identify a log is limited such that the DER encoding of its
value, excluding the tag and length, MUST <bcp14>MUST</bcp14> be no longer than 127 octets.</t>
      </section>
      <section anchor="transitem-structure" title="TransItem Structure"> numbered="true" toc="default">
        <name>TransItem Structure</name>
        <t>Various data structures are encapsulated in the <spanx style="verb">TransItem</spanx> <tt>TransItem</tt> structure to ensure
that the type and version of each one is identified in a common fashion:</t>

<figure><artwork><![CDATA[
<sourcecode type="tls-presentation"><![CDATA[
    enum {
        x509_entry_v2(0x0100), precert_entry_v2(0x0101),
        x509_sct_v2(0x0102), precert_sct_v2(0x0103),
        signed_tree_head_v2(0x0104), consistency_proof_v2(0x0105),
        inclusion_proof_v2(0x0106),

        /* Reserved Code Points */
        reserved_rfc6962(0x0000..0x00FF),
        reserved_experimentaluse(0xE000..0xEFFF),
        reserved_privateuse(0xF000..0xFFFF),
        (0xFFFF)
    } VersionedTransType;

    struct {
        VersionedTransType versioned_type;
        select (versioned_type) {
            case x509_entry_v2: TimestampedCertificateEntryDataV2;
            case precert_entry_v2: TimestampedCertificateEntryDataV2;
            case x509_sct_v2: SignedCertificateTimestampDataV2;
            case precert_sct_v2: SignedCertificateTimestampDataV2;
            case signed_tree_head_v2: SignedTreeHeadDataV2;
            case consistency_proof_v2: ConsistencyProofDataV2;
            case inclusion_proof_v2: InclusionProofDataV2;
        } data;
    } TransItem;
]]></artwork></figure>

<t><spanx style="verb">versioned_type</spanx>
]]></sourcecode>
        <t><tt>versioned_type</tt> is a value from the IANA registry in <xref target="versioned_trans_types"/> target="versioned_trans_types" format="default"/>
that identifies the type of the encapsulated data structure and the earliest
version of this protocol to which it conforms. This document is v2.</t>

<t><spanx style="verb">data</spanx>
        <t><tt>data</tt> is the encapsulated data structure. The various structures named with the
<spanx style="verb">DataV2</spanx>
<tt>DataV2</tt> suffix are defined in later sections of this document.</t>
        <t>Note that <spanx style="verb">VersionedTransType</spanx> <tt>VersionedTransType</tt> combines the v1 <xref target="RFC6962"></xref> type enumerations
<spanx style="verb">Version</spanx>, <spanx style="verb">LogEntryType</spanx>, <spanx style="verb">SignatureType</spanx>
<tt>Version</tt>, <tt>LogEntryType</tt>, <tt>SignatureType</tt>, and <spanx style="verb">MerkleLeafType</spanx>. <tt>MerkleLeafType</tt> <xref target="RFC6962" format="default"/>. Note also that
v1 did not define <spanx style="verb">TransItem</spanx>, <tt>TransItem</tt>, but this document provides guidelines (see
<xref target="v1_coexistence"/>) target="v1_coexistence" format="default"/>) on how v2 implementations can co-exist coexist with v1
implementations.</t>
        <t>Future versions of this protocol may reuse <spanx style="verb">VersionedTransType</spanx> <tt>VersionedTransType</tt> values defined
in this document as long as the corresponding data structures are not modified, modified
and may add new <spanx style="verb">VersionedTransType</spanx> <tt>VersionedTransType</tt> values for new or modified data structures.</t>
      </section>
      <section anchor="log-artifact-extensions" title="Log numbered="true" toc="default">
        <name>Log Artifact Extensions">

<figure><artwork><![CDATA[ Extensions</name>
<sourcecode type="tls-presentation"><![CDATA[
    enum {
        reserved(65535)
    } ExtensionType;

    struct {
        ExtensionType extension_type;
        opaque extension_data<0..2^16-1>;
    } Extension;
]]></artwork></figure>
]]></sourcecode>
        <t>The <spanx style="verb">Extension</spanx> <tt>Extension</tt> structure provides a generic extensibility for log artifacts,
including SCTs (<xref target="sct"/>) target="sct" format="default"/>) and STHs
(<xref target="sth"/>). target="sth" format="default"/>). The interpretation of the <spanx style="verb">extension_data</spanx> <tt>extension_data</tt> field is determined solely
by the value of the <spanx style="verb">extension_type</spanx> <tt>extension_type</tt> field.</t>
        <t>This document does not define any extensions, but it does establish a registry
for future <spanx style="verb">ExtensionType</spanx> <tt>ExtensionType</tt> values (see <xref target="log_artifact_extension_registry"/>). target="log_artifact_extension_registry" format="default"/>).
Each document that registers a new <spanx style="verb">ExtensionType</spanx> <tt>ExtensionType</tt> must specify the context in
which it may be used (e.g., SCT, STH, or both) and describe how to interpret the
corresponding <spanx style="verb">extension_data</spanx>.</t> <tt>extension_data</tt>.</t>
      </section>
      <section anchor="tree_leaves" title="Merkle numbered="true" toc="default">
        <name>Merkle Tree Leaves"> Leaves</name>
        <t>The leaves of a log's Merkle Tree correspond to the log's entries (see
<xref target="log_entries"/>). target="log_entries" format="default"/>). Each leaf is the leaf hash (<xref target="mht"/>) target="mht" format="default"/>) of a <spanx style="verb">TransItem</spanx> <tt>TransItem</tt>
structure of type <spanx style="verb">x509_entry_v2</spanx> <tt>x509_entry_v2</tt> or <spanx style="verb">precert_entry_v2</spanx>, <tt>precert_entry_v2</tt>, which encapsulates a
<spanx style="verb">TimestampedCertificateEntryDataV2</spanx>
<tt>TimestampedCertificateEntryDataV2</tt> structure. Note that leaf hashes are
calculated as HASH(0x00 <tt>HASH(0x00 || TransItem), TransItem)</tt>, where the hash algorithm is one of the
log's parameters.</t>

<figure><artwork><![CDATA[
<sourcecode type="tls-presentation"><![CDATA[
    opaque TBSCertificate<1..2^24-1>;

    struct {
        uint64 timestamp;
        opaque issuer_key_hash<32..2^8-1>;
        TBSCertificate tbs_certificate;
        Extension sct_extensions<0..2^16-1>;
    } TimestampedCertificateEntryDataV2;
]]></artwork></figure>

<t><spanx style="verb">timestamp</spanx>
]]></sourcecode>
        <t><tt>timestamp</tt> is the date and time at which the certificate or precertificate
	was accepted by the log, in the form of a 64-bit unsigned number of milliseconds
	elapsed since the Unix Epoch (1 January 1970 00:00:00 UTC - -- see <xref target="UNIXTIME"></xref>),
	target="UNIXTIME" format="default"/>),
	ignoring leap seconds, in network byte order. Note that the leaves of a log's
	Merkle Tree are not required to be in strict chronological order.</t>

<t><spanx style="verb">issuer_key_hash</spanx>
        <t><tt>issuer_key_hash</tt> is the HASH of the public key of the CA that issued the
certificate or precertificate, calculated over the DER encoding of the key
represented as SubjectPublicKeyInfo <xref target="RFC5280"></xref>. target="RFC5280" format="default"/>. This is needed to bind the CA to
the certificate or precertificate, making it impossible for the corresponding
SCT to be valid for any other certificate or precertificate whose TBSCertificate
matches <spanx style="verb">tbs_certificate</spanx>. <tt>tbs_certificate</tt>. The length of the <spanx style="verb">issuer_key_hash</spanx> MUST <tt>issuer_key_hash</tt> <bcp14>MUST</bcp14> match
HASH_SIZE.</t>

<t><spanx style="verb">tbs_certificate</spanx>
        <t><tt>tbs_certificate</tt> is the DER encoded DER-encoded TBSCertificate from the submission.
	(Note that a precertificate's TBSCertificate can be reconstructed from the
	corresponding certificate certificate, as described in <xref target="reconstructing_tbscertificate"/>).</t>

<t><spanx style="verb">sct_extensions</spanx>
	target="reconstructing_tbscertificate" format="default"/>).</t>
        <t><tt>sct_extensions</tt> is byte-for-byte identical to the SCT extensions of the
	corresponding SCT.</t>
        <t>The type of the <spanx style="verb">TransItem</spanx> <tt>TransItem</tt> corresponds to the value of the <spanx style="verb">type</spanx> <tt>type</tt> parameter
supplied in the <xref target="submit-entry"/> target="submit-entry" format="default"/> call.</t>
      </section>
      <section anchor="sct" title="Signed numbered="true" toc="default">
        <name>Signed Certificate Timestamp (SCT)"> (SCT)</name>
        <t>An SCT is a <spanx style="verb">TransItem</spanx> <tt>TransItem</tt> structure of type <spanx style="verb">x509_sct_v2</spanx> <tt>x509_sct_v2</tt> or <spanx style="verb">precert_sct_v2</spanx>, <tt>precert_sct_v2</tt>,
which encapsulates a <spanx style="verb">SignedCertificateTimestampDataV2</spanx> <tt>SignedCertificateTimestampDataV2</tt> structure:</t>

<figure><artwork><![CDATA[
<sourcecode type="tls-presentation"><![CDATA[
    struct {
        LogID log_id;
        uint64 timestamp;
        Extension sct_extensions<0..2^16-1>;
        opaque signature<1..2^16-1>;
    } SignedCertificateTimestampDataV2;
]]></artwork></figure>

<t><spanx style="verb">log_id</spanx>
]]></sourcecode>
        <t><tt>log_id</tt> is this log's unique ID, encoded in an opaque vector vector, as described
	in <xref target="log_id"/>.</t>

<t><spanx style="verb">timestamp</spanx> target="log_id" format="default"/>.</t>
        <t><tt>timestamp</tt> is equal to the timestamp from the corresponding
<spanx style="verb">TimestampedCertificateEntryDataV2</spanx>
	<tt>TimestampedCertificateEntryDataV2</tt> structure.</t>

<t><spanx style="verb">sct_extensions</spanx>
        <t><tt>sct_extensions</tt> is a vector of 0 or more SCT extensions. This vector MUST NOT
	<bcp14>MUST NOT</bcp14> include more than one extension with the same <spanx style="verb">extension_type</spanx>.
	<tt>extension_type</tt>. The
	extensions in the vector MUST <bcp14>MUST</bcp14> be ordered by the value of the
<spanx style="verb">extension_type</spanx>
	<tt>extension_type</tt> field, smallest value first.
	All SCT extensions are similar to non-critical noncritical X.509v3 extensions (i.e.,
	the <spanx style="verb">mustUnderstand</spanx> <tt>mustUnderstand</tt> field is not set), and a recipient SHOULD <bcp14>SHOULD</bcp14>
	ignore any extension it does not understand.
	Furthermore, an implementation MAY <bcp14>MAY</bcp14> choose to ignore any extension(s)
	that it does understand.</t>

<t><spanx style="verb">signature</spanx>
        <t><tt>signature</tt> is computed over a <spanx style="verb">TransItem</spanx> <tt>TransItem</tt> structure of type <spanx style="verb">x509_entry_v2</spanx>
	<tt>x509_entry_v2</tt> or <spanx style="verb">precert_entry_v2</spanx> <tt>precert_entry_v2</tt> (see <xref target="tree_leaves"/>) target="tree_leaves"
	format="default"/>) using the signature algorithm
	declared in the log's parameters (see <xref target="log_parameters"/>).</t> target="log_parameters"
	format="default"/>).</t>
      </section>
      <section anchor="tree_head" title="Merkle numbered="true" toc="default">
        <name>Merkle Tree Head"> Head</name>
        <t>The log stores information about its Merkle Tree in a <spanx style="verb">TreeHeadDataV2</spanx>:</t>

<figure><artwork><![CDATA[ <tt>TreeHeadDataV2</tt>:</t>
<sourcecode type="tls-presentation"><![CDATA[
    opaque NodeHash<32..2^8-1>;

    struct {
        uint64 timestamp;
        uint64 tree_size;
        NodeHash root_hash;
        Extension sth_extensions<0..2^16-1>;
    } TreeHeadDataV2;
]]></artwork></figure>
]]></sourcecode>
        <t>The length of NodeHash MUST <bcp14>MUST</bcp14> match HASH_SIZE of the log.</t>

<t><spanx style="verb">timestamp</spanx>
        <t><tt>timestamp</tt> is the current date and time, using the format defined in
<xref target="tree_leaves"/>.</t>

<t><spanx style="verb">tree_size</spanx> target="tree_leaves" format="default"/>.</t>
        <t><tt>tree_size</tt> is the number of entries currently in the log's Merkle Tree.</t>

<t><spanx style="verb">root_hash</spanx>
        <t><tt>root_hash</tt> is the root of the Merkle Hash Tree.</t>

<t><spanx style="verb">sth_extensions</spanx>
        <t><tt>sth_extensions</tt> is a vector of 0 or more STH extensions. This vector MUST NOT <bcp14>MUST NOT</bcp14>
include more than one extension with the same <spanx style="verb">extension_type</spanx>. <tt>extension_type</tt>. The
extensions in the vector MUST <bcp14>MUST</bcp14> be ordered by the value of the
<spanx style="verb">extension_type</spanx>
<tt>extension_type</tt> field, smallest value first. If an implementation sees an
extension that it does not understand, it SHOULD <bcp14>SHOULD</bcp14> ignore that extension.
Furthermore, an implementation MAY <bcp14>MAY</bcp14> choose to ignore any extension(s) that it
does understand.</t>
      </section>
      <section anchor="sth" title="Signed numbered="true" toc="default">
        <name>Signed Tree Head (STH)">

<t>Periodically (STH)</name>
        <t>Periodically, each log SHOULD <bcp14>SHOULD</bcp14> sign its current tree head
	information (see <xref target="tree_head"/>) target="tree_head" format="default"/>) to produce an STH. When
	a client requests a log's latest STH (see
	<xref target="get-sth"/>), target="get-sth" format="default"/>), the log MUST <bcp14>MUST</bcp14> return an STH
	that is no older than the log's MMD.
	However, since STHs could be used to mark individual clients (by producing a new
	STH for each query), a log MUST NOT <bcp14>MUST NOT</bcp14> produce STHs more frequently than
	its parameters declare (see <xref target="log_parameters"/>). target="log_parameters" format="default"/>). In
	general, there is no need to
	produce a new STH unless there are new entries in the log; however, in the event
	that a log does not accept any submissions during an MMD period, the log MUST
	<bcp14>MUST</bcp14> sign the same Merkle Tree Hash with a fresh timestamp.</t>
        <t>An STH is a <spanx style="verb">TransItem</spanx> <tt>TransItem</tt> structure of type <spanx style="verb">signed_tree_head_v2</spanx>, <tt>signed_tree_head_v2</tt>,
	which encapsulates a <spanx style="verb">SignedTreeHeadDataV2</spanx> <tt>SignedTreeHeadDataV2</tt> structure:</t>

<figure><artwork><![CDATA[
<sourcecode type="tls-presentation"><![CDATA[
    struct {
        LogID log_id;
        TreeHeadDataV2 tree_head;
        opaque signature<1..2^16-1>;
    } SignedTreeHeadDataV2;
]]></artwork></figure>

<t><spanx style="verb">log_id</spanx>
]]></sourcecode>
        <t><tt>log_id</tt> is this log's unique ID, ID encoded in an opaque vector vector, as described
	in <xref target="log_id"/>.</t> target="log_id" format="default"/>.</t>
        <t>The <spanx style="verb">timestamp</spanx> <tt>timestamp</tt> in <spanx style="verb">tree_head</spanx> MUST <tt>tree_head</tt> <bcp14>MUST</bcp14> be at least as
	recent as the most recent SCT
	timestamp in the tree. Each subsequent timestamp MUST <bcp14>MUST</bcp14> be more recent
	than the timestamp of the previous update.</t>

<t><spanx style="verb">tree_head</spanx>
        <t><tt>tree_head</tt> contains the latest tree head information (see <xref target="tree_head"/>).</t>

<t><spanx style="verb">signature</spanx> target="tree_head" format="default"/>).</t>
        <t><tt>signature</tt> is computed over the <spanx style="verb">tree_head</spanx> <tt>tree_head</tt> field using the signature algorithm
declared in the log's parameters (see <xref target="log_parameters"/>).</t> target="log_parameters" format="default"/>).</t>
      </section>
      <section anchor="merkle-consistency-proofs" title="Merkle numbered="true" toc="default">
        <name>Merkle Consistency Proofs"> Proofs</name>
        <t>To prepare a Merkle Consistency Proof consistency proof for distribution to clients, the log
produces a <spanx style="verb">TransItem</spanx> <tt>TransItem</tt> structure of type <spanx style="verb">consistency_proof_v2</spanx>, <tt>consistency_proof_v2</tt>, which
encapsulates a <spanx style="verb">ConsistencyProofDataV2</spanx> <tt>ConsistencyProofDataV2</tt> structure:</t>

<figure><artwork><![CDATA[
<sourcecode type="tls-presentation"><![CDATA[
    struct {
        LogID log_id;
        uint64 tree_size_1;
        uint64 tree_size_2;
        NodeHash consistency_path<0..2^16-1>;
    } ConsistencyProofDataV2;
]]></artwork></figure>

<t><spanx style="verb">log_id</spanx>
]]></sourcecode>
        <t><tt>log_id</tt> is this log's unique ID, ID encoded in an opaque vector vector, as described
	in <xref target="log_id"/>.</t>

<t><spanx style="verb">tree_size_1</spanx> target="log_id" format="default"/>.</t>
        <t><tt>tree_size_1</tt> is the size of the older tree.</t>

<t><spanx style="verb">tree_size_2</spanx>
        <t><tt>tree_size_2</tt> is the size of the newer tree.</t>

<t><spanx style="verb">consistency_path</spanx>
        <t><tt>consistency_path</tt> is a vector of Merkle Tree nodes proving the consistency
	of two STHs STHs, as described in <xref target="consistency"/>.</t> target="consistency" format="default"/>.</t>
      </section>
      <section anchor="merkle-inclusion-proofs" title="Merkle numbered="true" toc="default">
        <name>Merkle Inclusion Proofs"> Proofs</name>
        <t>To prepare a Merkle Inclusion Proof inclusion proof for distribution to clients, the log
produces a <spanx style="verb">TransItem</spanx> <tt>TransItem</tt> structure of type <spanx style="verb">inclusion_proof_v2</spanx>, <tt>inclusion_proof_v2</tt>, which
encapsulates an <spanx style="verb">InclusionProofDataV2</spanx> <tt>InclusionProofDataV2</tt> structure:</t>

<figure><artwork><![CDATA[
<sourcecode type="tls-presentation"><![CDATA[
    struct {
        LogID log_id;
        uint64 tree_size;
        uint64 leaf_index;
        NodeHash inclusion_path<0..2^16-1>;
    } InclusionProofDataV2;
]]></artwork></figure>

<t><spanx style="verb">log_id</spanx>
]]></sourcecode>
        <t><tt>log_id</tt> is this log's unique ID, ID encoded in an opaque vector vector, as described
	in <xref target="log_id"/>.</t>

<t><spanx style="verb">tree_size</spanx> target="log_id" format="default"/>.</t>
        <t><tt>tree_size</tt> is the size of the tree on which this inclusion proof is
	based.</t>

<t><spanx style="verb">leaf_index</spanx>
        <t><tt>leaf_index</tt> is the 0-based index of the log entry corresponding to this
inclusion proof.</t>

<t><spanx style="verb">inclusion_path</spanx>
        <t><tt>inclusion_path</tt> is a vector of Merkle Tree nodes proving the inclusion of the
chosen certificate or precertificate precertificate, as described in <xref target="merkle_inclusion_proof"/>.</t> target="merkle_inclusion_proof" format="default"/>.</t>
      </section>
      <section anchor="log_shutdown" title="Shutting down numbered="true" toc="default">
        <name>Shutting Down a log"> Log</name>
        <t>Log operators may decide to shut down a log for various reasons, such as
deprecation of the signature algorithm. If there are entries in the log for
certificates that have not yet expired, simply making TLS clients stop
recognizing that log will have the effect of invalidating SCTs from that log.
In order to avoid that, the following actions SHOULD <bcp14>SHOULD</bcp14> be taken:</t>

<t><list style="symbols">
  <t>Make
        <ul spacing="normal">
          <li>Make it known to clients and monitors that the log will be frozen.
	  This is not part of the API, so it will have to be done via a relevant
	  out-of-band mechanism.</t>
  <t>Stop mechanism.</li>
          <li>Stop accepting new submissions (the error code "shutdown" should be returned
	  for such requests).</t>
  <t>Once requests).</li>
          <li>Once MMD from the last accepted submission has passed and all pending
	  submissions are incorporated, issue a final STH and publish it as one of the
	  log's parameters. Having an STH with a timestamp that is after the MMD has
	  passed from the last SCT issuance allows clients to audit this log regularly
	  without special handling for the final STH. At this point point, the log's private
	  key is no longer needed and can be destroyed.</t>
  <t>Keep destroyed.</li>
          <li>Keep the log running until the certificates in all of its entries have expired
	  or exist in other logs (this can be determined by scanning other logs or
	  connecting to domains mentioned in the certificates and inspecting the SCTs
served).</t>
</list></t>
	  served).</li>
        </ul>
      </section>
    </section>
    <section anchor="client_messages" title="Log numbered="true" toc="default">
      <name>Log Client Messages"> Messages</name>
      <t>Messages are sent as HTTPS GET or POST requests. Parameters for POSTs and all
responses are encoded as JavaScript Object Notation (JSON) objects <xref target="RFC8259"></xref>. target="RFC8259" format="default"/>.
Parameters for GETs are encoded as order-independent key/value URL parameters,
using the "application/x-www-form-urlencoded" format described in the "HTML 4.01
Specification" <xref target="HTML401"></xref>. target="HTML401" format="default"/>. Binary data is base64 encoded according to
section 4 of
<xref target="RFC4648"></xref> target="RFC4648" sectionFormat="of" section="4"/>, as specified
in the individual messages.</t>
      <t>Clients are configured with a log's base URL, which is one of the log's
parameters. Clients construct URLs for requests by appending suffixes to this
base URL. This structure places some degree of restriction on how log operators
can deploy these services, as noted in <xref target="RFC8820"></xref>. target="RFC8820" format="default"/>. However, operational
experience with version 1 of this protocol has not indicated that these
restrictions are a problem in practice.</t>
      <t>Note that JSON objects and URL parameters may contain fields not specified here, here
to allow for experimentation. Any fields that are not understood SHOULD <bcp14>SHOULD</bcp14>
be ignored.</t>
      <t>In practice, log servers may include multiple front-end machines. Since it is
impractical to keep these machines in perfect sync, errors may occur that are
caused by skew between the machines. machines may occur. Where such errors are possible, the
front-end
front end will return additional information (as specified below) below), making it
possible for clients to make progress, if progress is possible. Front-ends MUST Front ends <bcp14>MUST</bcp14>
only serve data that is free of gaps (that is, for example, no front-end front end will
respond with an STH unless it is also able to prove consistency from all log
entries logged within that STH).</t>
      <t>For example, when a consistency proof between two STHs is requested, the
front-end
front end reached may not yet be aware of one or both STHs. In the case where it
is unaware of both, it will return the latest STH it is aware of. Where it is
aware of the first but not the second, it will return the latest STH it is aware
of and a consistency proof from the first STH to the returned STH. The case
where it knows the second but not the first should not arise (see the "no gaps"
requirement above).</t>
      <t>If the log is unable to process a client's request, it MUST <bcp14>MUST</bcp14> return an HTTP
response code of 4xx/5xx (see <xref target="RFC7231"></xref>), target="RFC7231" format="default"/>), and, in place of the responses
outlined in the subsections below, the body SHOULD <bcp14>SHOULD</bcp14> be a JSON Problem Details
Object problem details
object (see <xref target="RFC7807"></xref> Section 3), target="RFC7807" sectionFormat="of" section="3"/>) containing:</t>

<t><list style="hanging">
  <t hangText="type:">
  A
      <dl newline="false" spacing="normal">
        <dt>type:</dt>
        <dd>A URN reference identifying the problem. To facilitate automated response
	to errors, this document defines a set of standard tokens for use in the
<spanx style="verb">type</spanx> field,
	<tt>type</tt> field within the URN namespace of: "urn:ietf:params:trans:error:".</t>
  <t hangText="detail:">
  A "urn:ietf:params:trans:error:".</dd>
        <dt>detail:</dt>
        <dd>A human-readable string describing the error that prevented the log from
	processing the request, ideally with sufficient detail to enable the error to
	be rectified.</t>
</list></t>

<t>e.g., In rectified.</dd>
      </dl>
      <t>For example, in response to a request of
<spanx style="verb">&lt;Base URL&gt;/ct/v2/get-entries?start=100&amp;end=99</spanx>,
<tt>&lt;Base URL&gt;/ct/v2/get-entries?start=100&amp;end=99</tt>, the log would return a
<spanx style="verb">400
<tt>400 Bad Request</spanx> Request</tt> response code with a body similar to the following:</t>

<figure><artwork><![CDATA[
<sourcecode type="json"><![CDATA[
    {
        "type": "urn:ietf:params:trans:error:endBeforeStart",
        "detail": "'start' cannot be greater than 'end'"
    }
]]></artwork></figure>
]]></sourcecode>
      <t>Most error types are specific to the type of request and are defined in the
respective subsections below. The one exception is the "malformed" error type,
which indicates that the log server could not parse the client's request because
it did not comply with this document:</t>

<texttable>
      <ttcol align='left'>type</ttcol>
      <ttcol align='left'>detail</ttcol>
      <c>malformed</c>
      <c>The
      <table align="center">
        <thead>
          <tr>
            <th align="left">type</th>
            <th align="left">detail</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">malformed</td>
            <td align="left">The request could not be parsed.</c>
</texttable> parsed.</td>
          </tr>
        </tbody>
      </table>
      <t>Clients SHOULD <bcp14>SHOULD</bcp14> treat <spanx style="verb">500 <tt>500 Internal Server Error</spanx> Error</tt> and <spanx style="verb">503 <tt>503
      Service Unavailable</spanx> Unavailable</tt>
      responses as transient failures and MAY <bcp14>MAY</bcp14> retry the same request without
      modification at a later date. Note that as per <xref target="RFC7231"></xref>, in the case of a 503
response response, the log MAY
      <bcp14>MAY</bcp14> include a <spanx style="verb">Retry-After:</spanx> <tt>Retry-After</tt> header field per <xref target="RFC7231" format="default"/> in
      order to request a minimum time for the client to wait before retrying the request.
      In the absence of this header field, this document does not specify a minimum.</t>
      <t>Clients SHOULD <bcp14>SHOULD</bcp14> treat any 4xx error as a problem with the request and
      not attempt to resubmit without some modification to the request. The full
      status code MAY <bcp14>MAY</bcp14> provide additional details.</t>
      <t>This document deliberately does not provide more specific guidance
      on the use of HTTP status codes.</t>
      <section anchor="submit-entry" title="Submit numbered="true" toc="default">
        <name>Submit Entry to Log"> Log</name>
        <t>POST &lt;Base URL&gt;/ct/v2/submit-entry</t>

<t><list style="hanging">
  <t hangText="Inputs:">
        <list style="hanging">
        <t hangText="submission:">
        The base64 encoded
        <dl newline="true" spacing="normal">
          <dt>Inputs:</dt>
          <dd>
            <dl newline="false" spacing="normal">
              <dt>submission:</dt>
              <dd>The base64-encoded certificate or precertificate.</t>
        <t hangText="type:">
        The <spanx style="verb">VersionedTransType</spanx> precertificate.</dd>
              <dt>type:</dt>
              <dd>The <tt>VersionedTransType</tt> integer value that indicates the type of the
<spanx style="verb">submission</spanx>:
	      <tt>submission</tt>: 1 for <spanx style="verb">x509_entry_v2</spanx>, <tt>x509_entry_v2</tt> or 2 for <spanx style="verb">precert_entry_v2</spanx>.</t>
        <t hangText="chain:">
        An
	      <tt>precert_entry_v2</tt>.</dd>
              <dt>chain:</dt>
              <dd>An array of zero or more JSON strings,
	      each of which is a base64 encoded base64-encoded CA certificate. The first element
	      is the certifier of the <spanx style="verb">submission</spanx>; <tt>submission</tt>, the second certifies the first; first,
	      etc. The last element of <spanx style="verb">chain</spanx> <tt>chain</tt> (or, if <spanx style="verb">chain</spanx> <tt>chain</tt> is an empty
	      array, the
<spanx style="verb">submission</spanx>) <tt>submission</tt>) is certified by an accepted trust anchor.</t>
      </list>
  </t>
  <t hangText="Outputs:">
        <list style="hanging">
        <t hangText="sct:">
        A base64 encoded <spanx style="verb">TransItem</spanx> anchor.</dd>
            </dl>
          </dd>
          <dt>Outputs:</dt>
          <dd>
            <dl newline="false" spacing="normal">
              <dt>sct:</dt>
              <dd><t>A base64-encoded <tt>TransItem</tt> of type <spanx style="verb">x509_sct_v2</spanx> <tt>x509_sct_v2</tt> or <spanx style="verb">precert_sct_v2</spanx>,
	      <tt>precert_sct_v2</tt>, signed by this log, that corresponds to the <spanx style="verb">submission</spanx>.</t>
      </list>

If
	      <tt>submission</tt>.</t></dd>
	    </dl>
              <t>If the submitted entry is immediately appended to (or already exists in) this
	      log's tree, then the log SHOULD <bcp14>SHOULD</bcp14> also output:
      <list style="hanging">
        <t hangText="sth:">
        A base64 encoded <spanx style="verb">TransItem</spanx> output:</t>
	      <dl newline="false" spacing="normal" indent="3">
              <dt>sth:</dt>
              <dd>A base64-encoded <tt>TransItem</tt> of type <spanx style="verb">signed_tree_head_v2</spanx>, <tt>signed_tree_head_v2</tt>
	      signed by this
log.</t>
        <t hangText="inclusion:">
        A base64 encoded <spanx style="verb">TransItem</spanx> log.</dd>
              <dt>inclusion:</dt>
              <dd>A base64-encoded <tt>TransItem</tt> of type <spanx style="verb">inclusion_proof_v2</spanx> <tt>inclusion_proof_v2</tt>
	      whose
<spanx style="verb">inclusion_path</spanx> <tt>inclusion_path</tt> array of Merkle Tree nodes proves the inclusion
	      of the
<spanx style="verb">submission</spanx> <tt>submission</tt> in the returned <spanx style="verb">sth</spanx>.</t>
      </list>
  </t>
</list></t> <tt>sth</tt>.</dd>
            </dl>
          </dd>
        </dl>
        <t>Error codes:</t>

<texttable>
      <ttcol align='left'>type</ttcol>
      <ttcol align='left'>detail</ttcol>
      <c>badSubmission</c>
      <c><spanx style="verb">submission</spanx>
        <table align="center">
          <thead>
            <tr>
              <th align="left">type</th>
              <th align="left">detail</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">badSubmission</td>
              <td align="left">
                <tt>submission</tt> is neither a valid certificate nor a valid precertificate.</c>
      <c>badType</c>
      <c><spanx style="verb">type</spanx> precertificate.</td>
            </tr>
            <tr>
              <td align="left">badType</td>
              <td align="left">
                <tt>type</tt> is neither 1 nor 2.</c>
      <c>badChain</c>
      <c>The 2.</td>
            </tr>
            <tr>
              <td align="left">badChain</td>
              <td align="left">The first element of <spanx style="verb">chain</spanx> <tt>chain</tt> is not the certifier of the <spanx style="verb">submission</spanx>, <tt>submission</tt>, or the second element does not certify the first, etc.</c>
      <c>badCertificate</c>
      <c>One etc.</td>
            </tr>
            <tr>
              <td align="left">badCertificate</td>
              <td align="left">One or more certificates in the <spanx style="verb">chain</spanx> <tt>chain</tt> are not valid (e.g., not properly encoded).</c>
      <c>unknownAnchor</c>
      <c>The encoded).</td>
            </tr>
            <tr>
              <td align="left">unknownAnchor</td>
              <td align="left">The last element of <spanx style="verb">chain</spanx> <tt>chain</tt> (or, if <spanx style="verb">chain</spanx> <tt>chain</tt> is an empty array, the <spanx style="verb">submission</spanx>) both <tt>submission</tt>) is not, and nor is not it certified by, an accepted trust anchor.</c>
      <c>shutdown</c>
      <c>The anchor.</td>
            </tr>
            <tr>
              <td align="left">shutdown</td>
              <td align="left">The log is no longer accepting submissions.</c>
</texttable> submissions.</td>
            </tr>
          </tbody>
        </table>
        <t>If the version of <spanx style="verb">sct</spanx> <tt>sct</tt> is not v2, then a v2 client may be unable to verify the
signature. It MUST NOT <bcp14>MUST NOT</bcp14> construe this as an error. This is to avoid forcing an
upgrade of compliant v2 clients that do not use the returned SCTs.</t>
        <t>If a log detects bad encoding in a chain that otherwise verifies correctly correctly, then
the log MUST <bcp14>MUST</bcp14> either log the certificate or return the "bad certificate" "badCertificate" error.
If the certificate is logged, an SCT MUST <bcp14>MUST</bcp14> be issued. Logging the certificate is
useful, because monitors (<xref target="monitor"/>) target="monitor" format="default"/>) can then detect these encoding errors,
which may be accepted by some TLS clients.</t>
        <t>If <spanx style="verb">submission</spanx> <tt>submission</tt> is an accepted trust anchor whose certifier is neither an
accepted trust anchor nor the first element of <spanx style="verb">chain</spanx>, <tt>chain</tt>, then the log MUST <bcp14>MUST</bcp14> return
the "unknown anchor" "unknownAnchor" error. A log is not able to generate an SCT for a
submission if it
does not have access to the issuer's public key.</t>
        <t>If the returned <spanx style="verb">sct</spanx> <tt>sct</tt> is intended to be provided to TLS clients, then <spanx style="verb">sth</spanx> <tt>sth</tt> and
<spanx style="verb">inclusion</spanx>
<tt>inclusion</tt> (if returned) SHOULD <bcp14>SHOULD</bcp14> also be provided to TLS clients. For
example, if
<spanx style="verb">type</spanx>
<tt>type</tt> was 2 (indicating <spanx style="verb">precert_sct_v2</spanx>) <tt>precert_sct_v2</tt>), then all three <spanx style="verb">TransItem</spanx>s <tt>TransItem</tt>s could be
embedded in the certificate.</t>
      </section>
      <section anchor="get-sth" title="Retrieve numbered="true" toc="default">
        <name>Retrieve Latest STH"> STH</name>
        <t>GET &lt;Base URL&gt;/ct/v2/get-sth</t>
        <t>No inputs.</t>

<t><list style="hanging">
  <t hangText="Outputs:">
        <list style="hanging">
        <t hangText="sth:">
        A base64 encoded <spanx style="verb">TransItem</spanx>
        <dl newline="true" spacing="normal">
          <dt>Outputs:</dt>
          <dd>
            <dl newline="false" spacing="normal">
              <dt>sth:</dt>
              <dd>A base64-encoded <tt>TransItem</tt> of type <spanx style="verb">signed_tree_head_v2</spanx>, <tt>signed_tree_head_v2</tt>
	      signed by this
log, log that is no older than the log's MMD.</t>
      </list>
  </t>
</list></t> MMD.</dd>
            </dl>
          </dd>
        </dl>
      </section>
      <section anchor="get-sth-consistency" title="Retrieve numbered="true" toc="default">
        <name>Retrieve Merkle Consistency Proof between Two STHs"> STHs</name>
        <t>GET &lt;Base URL&gt;/ct/v2/get-sth-consistency</t>

<t><list style="hanging">
  <t hangText="Inputs:">
        <list style="hanging">
        <t hangText="first:">
        The tree_size
        <dl newline="true" spacing="normal">
          <dt>Inputs:</dt>
          <dd>
            <dl newline="false" spacing="normal">
              <dt>first:</dt>
	      <dd>The <tt>tree_size</tt> of the older tree, in decimal.</t>
        <t hangText="second:">
        The tree_size decimal.</dd>
              <dt>second:</dt>
	      <dd>The <tt>tree_size</tt> of the newer tree, in decimal (optional).</t>
      </list>
  </t>
</list></t>

<t><list style='empty'> (optional).</dd>
            </dl>
          <t>Both tree sizes must be from existing v2 STHs. However, because of skew, the
	  receiving front-end front end may not know one or both of the existing STHs. If both are
	  known, then only the <spanx style="verb">consistency</spanx> <tt>consistency</tt> output is returned. If the first is known
	  but the second is not (or has been omitted), then the latest known STH is
	  returned, along with a consistency proof between the first STH and the latest.
	  If neither are known, then the latest known STH is returned without a
	  consistency proof.</t>
</list></t>

<t><list style="hanging">
  <t hangText="Outputs:">
        <list style="hanging">
        <t hangText="consistency:">
        A base64 encoded <spanx style="verb">TransItem</spanx>
        </dd>
	</dl>
        <dl newline="true" spacing="normal">
          <dt>Outputs:</dt>
          <dd>
            <dl newline="false" spacing="normal">
              <dt>consistency:</dt>
              <dd>A base64-encoded <tt>TransItem</tt> of type <spanx style="verb">consistency_proof_v2</spanx>, <tt>consistency_proof_v2</tt>
	      whose
<spanx style="verb">tree_size_1</spanx> MUST <tt>tree_size_1</tt> <bcp14>MUST</bcp14> match the <spanx style="verb">first</spanx> <tt>first</tt> input.
	      If the <spanx style="verb">sth</spanx> <tt>sth</tt> output is omitted,
	      then <spanx style="verb">tree_size_2</spanx> MUST <tt>tree_size_2</tt> <bcp14>MUST</bcp14> match the <spanx style="verb">second</spanx> <tt>second</tt> input.
	      If <spanx style="verb">first</spanx> <tt>first</tt> and <spanx style="verb">second</spanx> <tt>second</tt> are equal and correspond to a known STH,
	      the returned consistency proof MUST <bcp14>MUST</bcp14> be empty (a <spanx style="verb">consistency_path</spanx>
	      <tt>consistency_path</tt> array with zero elements).</t>
        <t hangText="sth:">
        A base64 encoded <spanx style="verb">TransItem</spanx> elements).</dd>
              <dt>sth:</dt>
              <dd>A base64-encoded <tt>TransItem</tt> of type <spanx style="verb">signed_tree_head_v2</spanx>, <tt>signed_tree_head_v2</tt>,
	      signed by this
log.</t>
      </list>
  </t>
</list></t>

<t><list style='empty'> log.</dd>
            </dl>
          <t>Note that no signature is required for the <spanx style="verb">consistency</spanx> output <tt>consistency</tt> output, as it is
	  used to verify the consistency between two STHs, which are signed.</t>
</list></t> signed STHs.</t>
	  </dd>
	</dl>
        <t>Error codes:</t>

<texttable>
      <ttcol align='left'>type</ttcol>
      <ttcol align='left'>detail</ttcol>
      <c>firstUnknown</c>
      <c><spanx style="verb">first</spanx>
        <table align="center">
          <thead>
            <tr>
              <th align="left">type</th>
              <th align="left">detail</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">firstUnknown</td>
              <td align="left"><tt>first</tt> is before the latest known STH but is not from
	      an existing STH.</c>
      <c>secondUnknown</c>
      <c><spanx style="verb">second</spanx> STH.</td>
            </tr>
            <tr>
              <td align="left">secondUnknown</td>
              <td align="left"><tt>second</tt> is before the latest known STH but is not from
	      an existing STH.</c>
      <c>secondBeforeFirst</c>
      <c><spanx style="verb">second</spanx> STH.</td>
            </tr>
            <tr>
              <td align="left">secondBeforeFirst</td>
              <td align="left"><tt>second</tt> is smaller than <spanx style="verb">first</spanx>.</c>
</texttable> <tt>first</tt>.</td>
            </tr>
          </tbody>
        </table>
        <t>See <xref target="verify_consistency"/> target="verify_consistency" format="default"/> for an outline of how to use the <spanx style="verb">consistency</spanx> <tt>consistency</tt>
output.</t>
      </section>
      <section anchor="get-proof-by-hash" title="Retrieve numbered="true" toc="default">
        <name>Retrieve Merkle Inclusion Proof from Log by Leaf Hash"> Hash</name>
        <t>GET &lt;Base URL&gt;/ct/v2/get-proof-by-hash</t>

<t><list style="hanging">
  <t hangText="Inputs:">
        <list style="hanging">
        <t hangText="hash:">
        A base64 encoded
        <dl newline="true" spacing="normal">
          <dt>Inputs:</dt>
          <dd>
            <dl newline="false" spacing="normal">
              <dt>hash:</dt>
              <dd>A base64-encoded v2 leaf hash.</t>
        <t hangText="tree_size:">
        The tree_size hash.</dd>
              <dt>tree_size:</dt>
	      <dd>The <tt>tree_size</tt> of the tree on which to base the proof, in decimal.</t>
      </list>
  </t>
</list></t>

<t><list style='empty'> decimal.</dd>
            </dl>
          <t>The <spanx style="verb">hash</spanx> <tt>hash</tt> must be calculated as defined in <xref target="tree_leaves"/>. target="tree_leaves"
	  format="default"/>. A v2 STH must
	  exist for the <spanx style="verb">tree_size</spanx>. <tt>tree_size</tt>.  Because of skew, the front-end front end may not know
	  the requested tree head. In that case, it will return the latest STH it knows, along
	  with an inclusion proof to that STH. If the front-end front end knows the requested tree head head,
	  then only <spanx style="verb">inclusion</spanx> <tt>inclusion</tt> is returned.</t>
</list></t>

<t><list style="hanging">
  <t hangText="Outputs:">
        <list style="hanging">
        <t hangText="inclusion:">
        A base64 encoded <spanx style="verb">TransItem</spanx>
        </dd>
	</dl>
        <dl newline="true" spacing="normal">
          <dt>Outputs:</dt>
          <dd>
            <dl newline="false" spacing="normal">
              <dt>inclusion:</dt>
              <dd>A base64-encoded <tt>TransItem</tt> of type <spanx style="verb">inclusion_proof_v2</spanx> <tt>inclusion_proof_v2</tt>
	      whose
<spanx style="verb">inclusion_path</spanx> <tt>inclusion_path</tt> array of Merkle Tree nodes proves the inclusion
	      of the certificate (as specified by the <spanx style="verb">hash</spanx> <tt>hash</tt> parameter) in the
	      selected STH.</t>
        <t hangText="sth:">
        A base64 encoded <spanx style="verb">TransItem</spanx> STH.</dd>
              <dt>sth:</dt>
              <dd>A base64-encoded <tt>TransItem</tt> of type <spanx style="verb">signed_tree_head_v2</spanx>, <tt>signed_tree_head_v2</tt>,
	      signed by this
log.</t>
      </list>
  </t>
</list></t>

<t><list style='empty'> log.</dd>
            </dl>
            <t>Note that no signature is required for the <spanx style="verb">inclusion</spanx> output <tt>inclusion</tt> output, as it is
	    used to verify inclusion in the selected STH, which is signed.</t>
</list></t>
	  </dd>
	</dl>
        <t>Error codes:</t>

<texttable>
      <ttcol align='left'>type</ttcol>
      <ttcol align='left'>detail</ttcol>
      <c>hashUnknown</c>
      <c><spanx style="verb">hash</spanx>
        <table align="center">
          <thead>
            <tr>
              <th align="left">type</th>
              <th align="left">detail</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">hashUnknown</td>
              <td align="left">
                <tt>hash</tt> is not the hash of a known leaf (may be caused by skew or by a known certificate not yet merged).</c>
      <c>treeSizeUnknown</c>
      <c><spanx style="verb">hash</spanx> merged).</td>
            </tr>
            <tr>
              <td align="left">treeSizeUnknown</td>
              <td align="left">
                <tt>hash</tt> is before the latest known STH but is not from an existing STH.</c>
</texttable> STH.</td>
            </tr>
          </tbody>
        </table>
        <t>See <xref target="verify_inclusion"/> target="verify_inclusion" format="default"/> for an outline of how to use the <spanx style="verb">inclusion</spanx> <tt>inclusion</tt> output.</t>
      </section>
      <section anchor="get-all-by-hash" title="Retrieve numbered="true" toc="default">
        <name>Retrieve Merkle Inclusion Proof, STH STH, and Consistency Proof by Leaf Hash"> Hash</name>
        <t>GET &lt;Base URL&gt;/ct/v2/get-all-by-hash</t>

<t><list style="hanging">
  <t hangText="Inputs:">
        <list style="hanging">
        <t hangText="hash:">
        A base64 encoded
        <dl newline="true" spacing="normal">
          <dt>Inputs:</dt>
          <dd>
            <dl newline="false" spacing="normal">
              <dt>hash:</dt>
              <dd>A base64-encoded v2 leaf hash.</t>
        <t hangText="tree_size:">
        The tree_size hash.</dd>
              <dt>tree_size:</dt>
	      <dd>The <tt>tree_size</tt> of the tree on which to base the proofs, in decimal.</t>
      </list>
  </t>
</list></t>

<t><list style='empty'> decimal.</dd>
            </dl>
            <t>The <spanx style="verb">hash</spanx> <tt>hash</tt> must be calculated as defined in <xref target="tree_leaves"/>. target="tree_leaves"
	  format="default"/>. A v2 STH must exist for the <spanx style="verb">tree_size</spanx>.</t>
</list></t> <tt>tree_size</tt>.</t>
	  </dd>
        </dl>
        <t>Because of skew, the front-end front end may not know the requested tree head or the
	requested hash, which leads to a number of cases:</t>

<texttable>
      <ttcol align='left'>Case</ttcol>
      <ttcol align='left'>Response</ttcol>
      <c>latest
        <table align="center">
          <thead>
            <tr>
              <th align="left">Case</th>
              <th align="left">Response</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">latest STH &lt; requested tree head</c>
      <c>Return head</td>
              <td align="left">Return latest STH</c>
      <c>latest STH.</td>
            </tr>
            <tr>
              <td align="left">latest STH &gt; requested tree head</c>
      <c>Return head</td>
              <td align="left">Return latest STH and a consistency proof between it and the requested tree head (see <xref target="get-sth-consistency"/>)</c>
      <c>index target="get-sth-consistency" format="default"/>).</td>
            </tr>
            <tr>
              <td align="left">index of requested hash &lt; latest STH</c>
      <c>Return <spanx style="verb">inclusion</spanx></c>
</texttable> STH</td>
              <td align="left">Return <tt>inclusion</tt>.</td>
            </tr>
          </tbody>
        </table>
        <t>Note that more than one case can be true, true; in which case case, the returned data is
their union. It is also possible for none to be true, true; in which case case, the
front-end MUST
front end <bcp14>MUST</bcp14> return an empty response.</t>

<t><list style="hanging">
  <t hangText="Outputs:">
        <list style="hanging">
        <t hangText="inclusion:">
        A base64 encoded <spanx style="verb">TransItem</spanx>
        <dl newline="true" spacing="normal">
          <dt>Outputs:</dt>
          <dd>
            <dl newline="false" spacing="normal">
              <dt>inclusion:</dt>
              <dd>A base64-encoded <tt>TransItem</tt> of type <spanx style="verb">inclusion_proof_v2</spanx> <tt>inclusion_proof_v2</tt>
	      whose
<spanx style="verb">inclusion_path</spanx> <tt>inclusion_path</tt> array of Merkle Tree nodes proves the inclusion
	      of the certificate (as specified by the <spanx style="verb">hash</spanx> <tt>hash</tt> parameter) in the
	      selected STH.</t>
        <t hangText="sth:">
        A base64 encoded <spanx style="verb">TransItem</spanx> STH.</dd>
              <dt>sth:</dt>
              <dd>A base64-encoded <tt>TransItem</tt> of type <spanx style="verb">signed_tree_head_v2</spanx>, <tt>signed_tree_head_v2</tt>,
	      signed by this
log.</t>
        <t hangText="consistency:">
        A base64 encoded <spanx style="verb">TransItem</spanx> log.</dd>
              <dt>consistency:</dt>
              <dd>A base64-encoded <tt>TransItem</tt> of type <spanx style="verb">consistency_proof_v2</spanx> <tt>consistency_proof_v2</tt>
	      that proves the consistency of the requested tree head and the returned STH.</t>
      </list>
  </t>
</list></t>

<t><list style='empty'>
	      STH.</dd>
            </dl>
            <t>Note that no signature is required for the <spanx style="verb">inclusion</spanx> <tt>inclusion</tt> or <spanx style="verb">consistency</spanx>
outputs
	    <tt>consistency</tt> outputs, as they are used to verify inclusion in and
	    consistency of STHs, which
are signed.</t>
</list></t> signed STHs.</t>
          </dd>
        </dl>
        <t>Errors are the same as in <xref target="get-proof-by-hash"/>.</t> target="get-proof-by-hash" format="default"/>.</t>
        <t>See <xref target="verify_inclusion"/> target="verify_inclusion" format="default"/> for an outline of how to use the <spanx style="verb">inclusion</spanx> <tt>inclusion</tt> output,
and see <xref target="verify_consistency"/> target="verify_consistency" format="default"/> for an outline of how to use the <spanx style="verb">consistency</spanx> <tt>consistency</tt>
output.</t>
      </section>
      <section anchor="get-entries" title="Retrieve numbered="true" toc="default">
        <name>Retrieve Entries and STH from Log"> Log</name>
        <t>GET &lt;Base URL&gt;/ct/v2/get-entries</t>

<t><list style="hanging">
  <t hangText="Inputs:">
        <list style="hanging">
        <t hangText="start:">
        0-based
        <dl newline="true" spacing="normal">
          <dt>Inputs:</dt>
          <dd>
            <dl newline="false" spacing="normal">
              <dt>start:</dt>
              <dd>0-based index of first entry to retrieve, in decimal.</t>
        <t hangText="end:">
        0-based decimal.</dd>
              <dt>end:</dt>
              <dd>0-based index of last entry to retrieve, in decimal.</t>
      </list>
  </t>
  <t hangText="Outputs:">
        <list style="hanging">
        <t hangText="entries:">
        An decimal.</dd>
            </dl>
          </dd>
          <dt>Outputs:</dt>
          <dd>
            <dl newline="false" spacing="normal">
              <dt>entries:</dt>
              <dd>
                <t>An array of objects, each consisting of

            <list style="hanging">
              <t hangText="log_entry:">
              The base64 encoded <spanx style="verb">TransItem</spanx> of:</t>
                <dl newline="false" spacing="normal">
                  <dt>log_entry:</dt>
                  <dd>The base64-encoded <tt>TransItem</tt> structure of type <spanx style="verb">x509_entry_v2</spanx>
		  <tt>x509_entry_v2</tt> or
<spanx style="verb">precert_entry_v2</spanx>
		  <tt>precert_entry_v2</tt> (see <xref target="log_entries"/>).</t>
              <t hangText="submitted_entry:">
              JSON target="log_entries"
		  format="default"/>).</dd>
                  <dt>submitted_entry:</dt>
                  <dd>JSON object equivalent to inputs that were submitted to
<spanx style="verb">submit-entry</spanx>,
		  <tt>submit-entry</tt>, with the addition of the trust anchor to the <spanx style="verb">chain</spanx>
		  <tt>chain</tt> field if the submission did not include it.</t>
              <t hangText="sct:">
              The base64 encoded <spanx style="verb">TransItem</spanx> it.</dd>
                  <dt>sct:</dt>
                  <dd>The base64-encoded <tt>TransItem</tt> of type <spanx style="verb">x509_sct_v2</spanx> <tt>x509_sct_v2</tt> or <spanx style="verb">precert_sct_v2</spanx>
		  <tt>precert_sct_v2</tt>, corresponding to this log entry.</t>
            </list>
        </t>
        <t hangText="sth:">
        A base64 encoded <spanx style="verb">TransItem</spanx> entry.</dd>
		  <dt>sth:</dt>
		  <dd>A base64-encoded <tt>TransItem</tt> of type <spanx style="verb">signed_tree_head_v2</spanx>,
		  <tt>signed_tree_head_v2</tt>, signed by this
log.</t>
      </list>
  </t>
</list></t> log.</dd>
                </dl>
              </dd>
            </dl>
          </dd>
        </dl>
        <t>Note that this message is not signed -- the <spanx style="verb">entries</spanx> <tt>entries</tt> data can be verified by
constructing the Merkle Tree Hash corresponding to a retrieved STH. All leaves
MUST
<bcp14>MUST</bcp14> be v2. However, a compliant v2 client MUST NOT <bcp14>MUST NOT</bcp14> construe an unrecognized
TransItem
<tt>TransItem</tt> type as an error. This means it may be unable to parse some entries,
but note that each client can inspect the entries it does recognize as well as
verify the integrity of the data by treating unrecognized leaves as opaque input
to the tree.</t>
        <t>The <spanx style="verb">start</spanx> <tt>start</tt> and <spanx style="verb">end</spanx> <tt>end</tt> parameters SHOULD <bcp14>SHOULD</bcp14> be within the range 0 &lt;= x &lt; <spanx style="verb">tree_size</spanx> <tt>tree_size</tt>,
as returned by <spanx style="verb">get-sth</spanx> <tt>get-sth</tt> in <xref target="get-sth"/>.</t> target="get-sth" format="default"/>.</t>
        <t>The <spanx style="verb">start</spanx> <tt>start</tt> parameter MUST <bcp14>MUST</bcp14> be less than or equal to the <spanx style="verb">end</spanx> <tt>end</tt> parameter.</t>
        <t>Each <spanx style="verb">submitted_entry</spanx> <tt>submitted_entry</tt> output parameter MUST <bcp14>MUST</bcp14> include the trust anchor that the
log used to verify the <spanx style="verb">submission</spanx>, <tt>submission</tt>, even if that trust anchor was not provided
to <spanx style="verb">submit-entry</spanx> <tt>submit-entry</tt> (see <xref target="submit-entry"/>). target="submit-entry" format="default"/>). If the <spanx style="verb">submission</spanx> <tt>submission</tt> does not certify
itself, then the first element of <spanx style="verb">chain</spanx> MUST <tt>chain</tt> <bcp14>MUST</bcp14> be present and MUST <bcp14>MUST</bcp14> certify the
<spanx style="verb">submission</spanx>.</t>
<tt>submission</tt>.</t>
        <t>Log servers MUST <bcp14>MUST</bcp14> honor requests where 0 &lt;= <spanx style="verb">start</spanx> <tt>start</tt> &lt; <spanx style="verb">tree_size</spanx> <tt>tree_size</tt> and <spanx style="verb">end</spanx> <tt>end</tt> &gt;=
<spanx style="verb">tree_size</spanx>
<tt>tree_size</tt> by returning a partial response covering only the valid entries in
the specified range. <spanx style="verb">end</spanx> <tt>end</tt> &gt;= <spanx style="verb">tree_size</spanx> <tt>tree_size</tt> could be caused by skew. Note that the
following restriction may also apply:</t>
        <t>Logs MAY <bcp14>MAY</bcp14> restrict the number of entries that can be retrieved per <spanx style="verb">get-entries</spanx> <tt>get-entries</tt>
request. If a client requests more than the permitted number of entries, the log
SHALL
<bcp14>SHALL</bcp14> return the maximum number of entries permissible. These entries SHALL <bcp14>SHALL</bcp14> be
sequential beginning with the entry specified by <spanx style="verb">start</spanx>. <tt>start</tt>.
Note that a limit on the number of entries is not immutable immutable, and therefore
the restriction may be changed or lifted at any time and is not listed
with the other Log Parameters in <xref target="log_parameters"/>.</t> target="log_parameters" format="default"/>.</t>
        <t>Because of skew, it is possible the log server will not have any entries between
<spanx style="verb">start</spanx>
<tt>start</tt> and <spanx style="verb">end</spanx>. <tt>end</tt>. In this case case, it MUST <bcp14>MUST</bcp14> return an empty <spanx style="verb">entries</spanx> <tt>entries</tt> array.</t>
        <t>In any case, the log server MUST <bcp14>MUST</bcp14> return the latest STH it knows about.</t>
        <t>See <xref target="verify_hash"/> target="verify_hash" format="default"/> for an outline of how to use a complete list of <spanx style="verb">log_entry</spanx> <tt>log_entry</tt>
entries to verify the <spanx style="verb">root_hash</spanx>.</t> <tt>root_hash</tt>.</t>
        <t>Error codes:</t>

<texttable>
      <ttcol align='left'>type</ttcol>
      <ttcol align='left'>detail</ttcol>
      <c>startUnknown</c>
      <c><spanx style="verb">start</spanx>
        <table align="center">
          <thead>
            <tr>
              <th align="left">type</th>
              <th align="left">detail</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">startUnknown</td>
              <td align="left">
                <tt>start</tt> is greater than the number of entries in the Merkle tree.</c>
      <c>endBeforeStart</c>
      <c><spanx style="verb">start</spanx> Tree.</td>
            </tr>
            <tr>
              <td align="left">endBeforeStart</td>
              <td align="left">
                <tt>start</tt> cannot be greater than <spanx style="verb">end</spanx>.</c>
</texttable> <tt>end</tt>.</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="get-anchors" title="Retrieve numbered="true" toc="default">
        <name>Retrieve Accepted Trust Anchors"> Anchors</name>
        <t>GET &lt;Base URL&gt;/ct/v2/get-anchors</t>
        <t>No inputs.</t>

<t><list style="hanging">
  <t hangText="Outputs:">
        <list style="hanging">
        <t hangText="certificates:">
        An
        <dl newline="true" spacing="normal">
          <dt>Outputs:</dt>
          <dd>
            <dl newline="false" spacing="normal">
              <dt>certificates:</dt>
              <dd>An array of JSON strings, each of which
	      is a base64 encoded base64-encoded CA certificate that is acceptable to the log.</t>
        <t hangText="max_chain_length:">
        If log.</dd>
              <dt>max_chain_length:</dt>
              <dd>If the server has chosen to limit the length of chains it accepts, this is
	      the maximum number of certificates in the chain, in decimal. If there is no
	      limit, this is omitted.</t>
      </list>
  </t>
</list></t>

<t><list style='empty'> omitted.</dd>
            </dl>
	    <t>This data is not signed signed, and the protocol depends on the security guarantees
	    of TLS to ensure correctness.</t>
</list></t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="tls_servers" title="TLS Servers"> numbered="true" toc="default">
      <name>TLS Servers</name>
      <t>CT-using TLS servers MUST <bcp14>MUST</bcp14> use at least one of the mechanisms described below
to present one or more SCTs from one or more logs to each TLS client during full
TLS handshakes, when requested by the client, where each SCT corresponds to the server certificate.
(Of course, a server can only send a TLS extension if the client has
specified it first.)
Servers
SHOULD
<bcp14>SHOULD</bcp14> also present corresponding inclusion proofs and STHs.</t>
      <t>A server can provide SCTs using
a TLS 1.3 extension (Section 4.2 of <xref target="RFC8446"></xref>) (<xref target="RFC8446" sectionFormat="of" section="4.2"/>) with type <spanx style="verb">transparency_info</spanx> <tt>transparency_info</tt>
(see <xref target="tls_transinfo_extension"/>). target="tls_transinfo_extension" format="default"/>). This mechanism allows TLS servers to
participate in CT without the cooperation of CAs, unlike the other two
mechanisms. It also allows SCTs and inclusion proofs to be updated on the fly.</t>
      <t>The server may also use an Online Certificate Status Protocol (OCSP)
<xref target="RFC6960"></xref> target="RFC6960" format="default"/> response extension (see <xref target="ocsp_transinfo_extension"/>), target="ocsp_transinfo_extension" format="default"/>),
providing the OCSP response as part of the TLS handshake. Providing
a response during a TLS handshake is popularly known as "OCSP stapling." stapling".
For TLS
1.3, the information is encoded as an extension in the <spanx style="verb">status_request</spanx> <tt>status_request</tt>
extension data; see Section 4.4.2.1 of <xref target="RFC8446"></xref>. target="RFC8446" sectionFormat="of" section="4.4.2.1"/>. For TLS 1.2 (<xref target="RFC5246"></xref>), <xref target="RFC5246" format="default"/>, the information
is encoded in the <spanx style="verb">CertificateStatus</spanx> <tt>CertificateStatus</tt> message; see Section 8
of <xref target="RFC6066"></xref>. target="RFC6066" sectionFormat="of" section="8"/>.  Using stapling also
allows SCTs and inclusion proofs to be updated on the fly.</t>
      <t>CT information can also be encoded as an extension in the X.509v3 certificate
(see <xref target="cert_transinfo_extension"/>). target="cert_transinfo_extension" format="default"/>). This
mechanism allows the use of unmodified TLS servers, but the SCTs and inclusion
proofs cannot be updated on the fly. Since the logs from which the SCTs and
inclusion proofs originated won't necessarily be accepted by TLS clients for
the full lifetime of the certificate, there is a risk that TLS clients may
subsequently consider the certificate to be non-compliant and in need of
re-issuance or the use of noncompliant. In such an event, one of
the other two methods for delivering mechanisms will need to be used to deliver CT
information.</t> information, or, if this is
not possible, the certificate will need to be reissued.</t>
      <section anchor="tls-client-authentication" title="TLS numbered="true" toc="default">
        <name>TLS Client Authentication"> Authentication</name>
        <t>This specification includes no description of how a TLS server can
use CT for TLS client certificates.
While this may be useful, it is not documented here for the following
reasons:</t>

<t><list style="symbols">
  <t>The
        <ul spacing="normal">
          <li>The greater security exposure is for clients to end up interacting with an
	  illegitimate server.</t>
  <t>In server.</li>
          <li>In general, TLS client certificates are not expected to be submitted to
	  CT logs, particularly those intended for general public use.</t>
</list></t> use.</li>
        </ul>
        <t>A future version could include such information.</t>
      </section>
      <section anchor="multiple-scts" title="Multiple SCTs"> numbered="true" toc="default">
        <name>Multiple SCTs</name>
        <t>CT-using TLS servers SHOULD <bcp14>SHOULD</bcp14> send SCTs from multiple logs, logs because:</t>

<t><list style="symbols">
  <t>One or more
        <ul spacing="normal">
          <li>The set of logs trusted by TLS clients is neither unified nor static; each
          client vendor may maintain an independent list of trusted logs, and, over time, new logs
          may not have become acceptable to all CT-using TLS clients. trusted and current logs may become distrusted.
	  Note that client discovery, trust, and distrust of logs is are expected to
	  be handled out-of-band out of band and is are out of scope of this document.</t>
  <t>If document.</li>
          <li>If a CA and a log collude, it is possible to temporarily hide misissuance from
	  clients. When a TLS client requires SCTs from multiple logs to be provided, it
	  is more difficult to mount this attack.</t>
  <t>If attack.</li>
          <li>If a log misbehaves or suffers a key compromise, a consequence may be that
	  clients cease to trust it. Since the time an SCT may be in use can be
	  considerable (several years is common in current practice when embedded in a
	  certificate), including SCTs from multiple logs reduces the probability of the
	  certificate being rejected by TLS clients.</t>
  <t>TLS clients.</li>
          <li>TLS clients may have policies related to the above risks requiring TLS servers
	  to present multiple SCTs. For example, at the time of writing, Chromium
	  <xref target="Chromium.Log.Policy"></xref> target="Chromium.Log.Policy" format="default"/> requires multiple SCTs to be
	  presented with EV Extended Validation (EV)
	  certificates in order for the EV indicator to be shown.</t>
</list></t> shown.</li>
        </ul>
        <t>To select the logs from which to obtain SCTs, a TLS server can, for example,
examine the set of logs popular TLS clients accept and recognize.</t>
      </section>
      <section anchor="transitemlist-structure" title="TransItemList Structure"> numbered="true" toc="default">
        <name>TransItemList Structure</name>
        <t>Multiple SCTs, inclusion proofs, and indeed <spanx style="verb">TransItem</spanx> <tt>TransItem</tt> structures of any type,
	type are combined into a list as follows:</t>

<figure><artwork><![CDATA[
<sourcecode type="tls-presentation"><![CDATA[
      opaque SerializedTransItem<1..2^16-1>;

      struct {
          SerializedTransItem trans_item_list<1..2^16-1>;
      } TransItemList;
]]></artwork></figure>
]]></sourcecode>
        <t>Here, <spanx style="verb">SerializedTransItem</spanx> <tt>SerializedTransItem</tt> is an opaque byte string that contains the
	serialized <spanx style="verb">TransItem</spanx> <tt>TransItem</tt> structure. This encoding ensures that TLS clients can
	decode each <spanx style="verb">TransItem</spanx> <tt>TransItem</tt> individually (so, for example, if there is a version
	upgrade, out-of-date clients can still parse old <spanx style="verb">TransItem</spanx> <tt>TransItem</tt> structures while
	skipping over new <spanx style="verb">TransItem</spanx> <tt>TransItem</tt> structures whose versions they don't
	understand).</t>
      </section>
      <section anchor="presenting_transitems" title="Presenting numbered="true" toc="default">
        <name>Presenting SCTs, inclusions proofs Inclusions Proofs, and STHs"> STHs</name>
        <t>In each <spanx style="verb">TransItemList</spanx> <tt>TransItemList</tt> that is sent during a TLS handshake, the TLS
server MUST <bcp14>MUST</bcp14> include a <spanx style="verb">TransItem</spanx> <tt>TransItem</tt> structure of type <spanx style="verb">x509_sct_v2</spanx> <tt>x509_sct_v2</tt> or
<spanx style="verb">precert_sct_v2</spanx>.</t>
<tt>precert_sct_v2</tt>.</t>
        <t>Presenting inclusion proofs and STHs in the TLS handshake helps to protect the
client's privacy (see <xref target="fetching_inclusion_proofs"/>) target="fetching_inclusion_proofs" format="default"/>) and reduces load on log
servers. Therefore, if the TLS server can obtain them, it SHOULD <bcp14>SHOULD</bcp14> also include
<spanx style="verb">TransItem</spanx>s
<tt>TransItem</tt>s of type <spanx style="verb">inclusion_proof_v2</spanx> <tt>inclusion_proof_v2</tt> and <spanx style="verb">signed_tree_head_v2</spanx> <tt>signed_tree_head_v2</tt> in the
<spanx style="verb">TransItemList</spanx>.</t>
<tt>TransItemList</tt>.</t>
      </section>
      <section anchor="tls_transinfo_extension" title="transparency_info numbered="true" toc="default">
        <name>transparency_info TLS Extension"> Extension</name>
        <t>Provided that a TLS client includes the <spanx style="verb">transparency_info</spanx> <tt>transparency_info</tt> extension type in
the ClientHello and the TLS server supports the <spanx style="verb">transparency_info</spanx> <tt>transparency_info</tt> extension:</t>

<t><list style="symbols">
  <t>The
        <ul spacing="normal">
          <li>The TLS server MUST <bcp14>MUST</bcp14> verify that the received <spanx style="verb">extension_data</spanx>
	  <tt>extension_data</tt> is empty.</t>
  <t>The empty.</li>
          <li>The TLS server MUST <bcp14>MUST</bcp14> construct a <spanx style="verb">TransItemList</spanx> <tt>TransItemList</tt> of
	  relevant <spanx style="verb">TransItem</spanx>s <tt>TransItem</tt>s (see
	  <xref target="presenting_transitems"/>), target="presenting_transitems" format="default"/>), which SHOULD
	  <bcp14>SHOULD</bcp14> omit any <spanx style="verb">TransItem</spanx>s <tt>TransItem</tt>s that are
	  already embedded in the server certificate or the stapled OCSP response (see
	  <xref target="x509v3_transinfo_extension"/>). target="x509v3_transinfo_extension" format="default"/>). If the constructed <spanx style="verb">TransItemList</spanx>
	  <tt>TransItemList</tt> is not
	  empty, then the TLS server MUST <bcp14>MUST</bcp14> include the <spanx style="verb">transparency_info</spanx>
	  <tt>transparency_info</tt> extension with
	  the <spanx style="verb">extension_data</spanx> <tt>extension_data</tt> set to this <spanx style="verb">TransItemList</spanx>. <tt>TransItemList</tt>. If the list is empty
	  empty, then the server SHOULD <bcp14>SHOULD</bcp14> omit the <spanx style="verb">extension_data</spanx> element, <tt>extension_data</tt>
	  element but MAY <bcp14>MAY</bcp14> send it with an empty array.</t>
</list></t> array.</li>
        </ul>
        <t>TLS servers MUST <bcp14>MUST</bcp14> only include this extension in the following messages:</t>

<t><list style="symbols">
  <t>the
        <ul spacing="normal">
          <li>the ServerHello message (for TLS 1.2 or earlier).</t>
  <t>the earlier)</li>
          <li>the Certificate or CertificateRequest message (for TLS 1.3).</t>
</list></t> 1.3)</li>
        </ul>
        <t>TLS servers MUST NOT <bcp14>MUST NOT</bcp14> process or include this extension when a TLS session is
resumed, since session resumption uses the original session information.</t>
      </section>
    </section>
    <section anchor="certification-authorities" title="Certification Authorities"> numbered="true" toc="default">
      <name>Certification Authorities</name>
      <section anchor="x509v3_transinfo_extension" title="Transparency numbered="true" toc="default">
        <name>Transparency Information X.509v3 Extension"> Extension</name>
        <t>The Transparency Information X.509v3 extension, which has OID 1.3.101.75 and
SHOULD
	<bcp14>SHOULD</bcp14> be non-critical, noncritical, contains one or more <spanx style="verb">TransItem</spanx> <tt>TransItem</tt>
	structures in a
<spanx style="verb">TransItemList</spanx>. <tt>TransItemList</tt>. This extension MAY <bcp14>MAY</bcp14> be
	included in OCSP responses (see
	<xref target="ocsp_transinfo_extension"/>) target="ocsp_transinfo_extension" format="default"/>) and certificates (see
	<xref target="cert_transinfo_extension"/>). target="cert_transinfo_extension" format="default"/>). Since RFC5280 <xref
	target="RFC5280" format="default"/> requires the <spanx style="verb">extnValue</spanx> <tt>extnValue</tt> field (an
	OCTET STRING) of each X.509v3 extension to include the DER encoding of an ASN.1
	value, a <spanx style="verb">TransItemList</spanx> MUST NOT <tt>TransItemList</tt> <bcp14>MUST NOT</bcp14> be included directly.
	Instead, it MUST <bcp14>MUST</bcp14> be
	wrapped inside an additional OCTET STRING, which is then put into the
<spanx style="verb">extnValue</spanx>
	<tt>extnValue</tt> field:</t>

<figure><artwork><![CDATA[
<sourcecode type="asn.1"><![CDATA[
    TransparencyInformationSyntax ::= OCTET STRING
]]></artwork></figure>

<t><spanx style="verb">TransparencyInformationSyntax</spanx>
]]></sourcecode>
        <t><tt>TransparencyInformationSyntax</tt> contains a <spanx style="verb">TransItemList</spanx>.</t> <tt>TransItemList</tt>.</t>
        <section anchor="ocsp_transinfo_extension" title="OCSP numbered="true" toc="default">
          <name>OCSP Response Extension"> Extension</name>
          <t>A certification authority MAY <bcp14>MAY</bcp14> include a Transparency Information
	  X.509v3 extension in the <spanx style="verb">singleExtensions</spanx> <tt>singleExtensions</tt> of a <spanx style="verb">SingleResponse</spanx> <tt>SingleResponse</tt> in
	  an OCSP response. All included SCTs and inclusion proofs MUST <bcp14>MUST</bcp14> be for
	  the certificate identified by the <spanx style="verb">certID</spanx> <tt>certID</tt> of that <spanx style="verb">SingleResponse</spanx>, <tt>SingleResponse</tt>
	  or for a precertificate that corresponds to that certificate.</t>
        </section>
        <section anchor="cert_transinfo_extension" title="Certificate Extension"> numbered="true" toc="default">
          <name>Certificate Extension</name>
          <t>A certification authority MAY <bcp14>MAY</bcp14> include a Transparency Information X.509v3
extension in a certificate. All included SCTs and inclusion proofs MUST <bcp14>MUST</bcp14> be for a
precertificate that corresponds to this certificate.</t>
        </section>
      </section>
      <section anchor="tls-feature-x509v3-extension" title="TLS numbered="true" toc="default">
        <name>TLS Feature X.509v3 Extension"> Extension</name>
        <t>A certification authority SHOULD NOT <bcp14>SHOULD NOT</bcp14> issue any certificate that identifies the
<spanx style="verb">transparency_info</spanx>
<tt>transparency_info</tt> TLS extension in a TLS feature extension <xref target="RFC7633"></xref>, target="RFC7633" format="default"/>, because
TLS servers are not required to support the <spanx style="verb">transparency_info</spanx> <tt>transparency_info</tt> TLS extension in
order to participate in CT (see <xref target="tls_servers"/>).</t> target="tls_servers" format="default"/>).</t>
      </section>
    </section>
    <section anchor="clients" title="Clients"> numbered="true" toc="default">
      <name>Clients</name>
      <t>There are various different functions clients of logs might perform. We describe
      here some typical clients and how they should function. Any inconsistency may be
      used as evidence that a log has not behaved correctly, and the signatures on the
      data structures prevent the log from denying that misbehavior.</t>
      <t>All clients need various parameters in order to communicate with logs and verify
      their responses. These parameters are described in <xref target="log_parameters"/>, target="log_parameters"
      format="default"/>, but note
      that this document does not describe how the parameters are obtained, which is
implementation-dependent (see, for
      implementation dependent (for example, see <xref target="Chromium.Policy"></xref>).</t> target="Chromium.Policy"
      format="default"/>).</t>
      <section anchor="tls_clients" title="TLS Client"> numbered="true" toc="default">
        <name>TLS Client</name>
        <section anchor="receiving_transitems" title="Receiving numbered="true" toc="default">
          <name>Receiving SCTs and inclusion proofs"> Inclusion Proofs</name>
          <t>TLS clients receive SCTs and inclusion proofs alongside or in certificates.
	  CT-using TLS clients MUST <bcp14>MUST</bcp14> implement all of the three mechanisms by
	  which TLS servers may present SCTs (see <xref target="tls_servers"/>).</t> target="tls_servers"
	  format="default"/>).</t>
          <t>TLS clients that support the <spanx style="verb">transparency_info</spanx> <tt>transparency_info</tt> TLS extension
	  (see <xref target="tls_transinfo_extension"/>) SHOULD target="tls_transinfo_extension" format="default"/>)
	  <bcp14>SHOULD</bcp14> include it in ClientHello messages,
	  with empty <spanx style="verb">extension_data</spanx>. <tt>extension_data</tt>. If a TLS server includes the <spanx style="verb">transparency_info</spanx>
	  <tt>transparency_info</tt> TLS extension when resuming a TLS session, the TLS
	  client MUST <bcp14>MUST</bcp14> abort the handshake.</t>
        </section>
        <section anchor="reconstructing_tbscertificate" title="Reconstructing numbered="true" toc="default">
          <name>Reconstructing the TBSCertificate"> TBSCertificate</name>
          <t>Validation of an SCT for a certificate (where the <spanx style="verb">type</spanx> <tt>type</tt> of the <spanx style="verb">TransItem</spanx> <tt>TransItem</tt> is
<spanx style="verb">x509_sct_v2</spanx>)
<tt>x509_sct_v2</tt>) uses the unmodified TBSCertificate component of the certificate.</t>
          <t>Before an SCT for a precertificate (where the <spanx style="verb">type</spanx> <tt>type</tt> of the <spanx style="verb">TransItem</spanx> <tt>TransItem</tt> is
<spanx style="verb">precert_sct_v2</spanx>)
<tt>precert_sct_v2</tt>) can be validated, the TBSCertificate component of the
precertificate needs to be reconstructed from the TBSCertificate component of
the certificate as follows:</t>

<t><list style="symbols">
  <t>Remove
          <ul spacing="normal">
            <li>Remove the Transparency Information extension
	    (see <xref target="x509v3_transinfo_extension"/>).</t>
  <t>Remove target="x509v3_transinfo_extension" format="default"/>).</li>
            <li>Remove embedded v1 SCTs, identified by OID 1.3.6.1.4.1.11129.2.4.2 (see
section 3.3 of
	    <xref target="RFC6962"></xref>). target="RFC6962" sectionFormat="of" section="3.3"/>). This allows embedded
	    v1 and v2 SCTs to co-exist in
	    a certificate (see <xref target="v1_coexistence"/>).</t>
</list></t> target="v1_coexistence" format="default"/>).</li>
          </ul>
        </section>
        <section anchor="validating-scts" title="Validating SCTs"> numbered="true" toc="default">
          <name>Validating SCTs</name>
          <t>In order to make use of a received SCT, the TLS client MUST <bcp14>MUST</bcp14> first validate it as
follows:</t>

<t><list style="symbols">
          <ul spacing="normal">
            <li>
              <t>Compute the signature input by constructing a <spanx style="verb">TransItem</spanx> <tt>TransItem</tt> of type
<spanx style="verb">x509_entry_v2</spanx>
	      <tt>x509_entry_v2</tt> or <spanx style="verb">precert_entry_v2</spanx>, <tt>precert_entry_v2</tt>, depending on the SCT's <spanx style="verb">TransItem</spanx>
	      <tt>TransItem</tt>
	      type. The <spanx style="verb">TimestampedCertificateEntryDataV2</spanx> <tt>TimestampedCertificateEntryDataV2</tt> structure is constructed
	      in the following manner:
  <list style="symbols">
      <t><spanx style="verb">timestamp</spanx>
              </t>
              <ul spacing="normal">
                <li><tt>timestamp</tt> is copied from the SCT.</t>
      <t><spanx style="verb">tbs_certificate</spanx> SCT.</li>
                <li><tt>tbs_certificate</tt> is the reconstructed TBSCertificate portion of
		the server certificate, as described in <xref target="reconstructing_tbscertificate"/>.</t>
      <t><spanx style="verb">issuer_key_hash</spanx>
		target="reconstructing_tbscertificate" format="default"/>.</li>
                <li><tt>issuer_key_hash</tt> is computed as described in <xref target="tree_leaves"/>.</t>
      <t><spanx style="verb">sct_extensions</spanx>
		target="tree_leaves" format="default"/>.</li>
                <li><tt>sct_extensions</tt> is copied from the SCT.</t>
    </list></t>
  <t>Verify SCT.</li>
              </ul>
            </li>
            <li>Verify the SCT's <spanx style="verb">signature</spanx> <tt>signature</tt> against the computed signature input using the
public key of the corresponding log, which is identified by the <spanx style="verb">log_id</spanx>. <tt>log_id</tt>. The
required signature algorithm is one of the log's parameters.</t>
</list></t> parameters.</li>
          </ul>
          <t>If the TLS client does not have the corresponding log's parameters, it cannot
attempt to validate the SCT. When evaluating compliance (see
<xref target="evaluating_compliance"/>), target="evaluating_compliance" format="default"/>), the TLS client will consider only those SCTs that it
was able to validate.</t>
          <t>Note that SCT validation is not a substitute for the normal validation of the
server certificate and its chain.</t>
        </section>
        <section anchor="fetching_inclusion_proofs" title="Fetching inclusion proofs"> numbered="true" toc="default">
          <name>Fetching Inclusion Proofs</name>
          <t>When a TLS client has validated a received SCT but does not yet possess
a corresponding inclusion proof, the TLS client MAY <bcp14>MAY</bcp14> request the inclusion
proof directly from a log using <spanx style="verb">get-proof-by-hash</spanx> <tt>get-proof-by-hash</tt> (<xref target="get-proof-by-hash"/>) target="get-proof-by-hash" format="default"/>) or
<spanx style="verb">get-all-by-hash</spanx>
<tt>get-all-by-hash</tt> (<xref target="get-all-by-hash"/>).</t> target="get-all-by-hash" format="default"/>).</t>
          <t>Note that fetching inclusion proofs directly from a log will disclose to the
log which TLS server the client has been communicating with. This may be
regarded as a significant privacy concern, and so it is preferable for the TLS
server to send the inclusion proofs (see <xref target="presenting_transitems"/>).</t> target="presenting_transitems" format="default"/>).</t>
        </section>
        <section anchor="validating_inclusion_proofs" title="Validating inclusion proofs"> numbered="true" toc="default">
          <name>Validating Inclusion Proofs</name>
          <t>When a TLS client has received, or fetched, an inclusion proof (and an STH),
it SHOULD <bcp14>SHOULD</bcp14> proceed to verifying verify the inclusion proof to the provided STH.
The TLS client SHOULD <bcp14>SHOULD</bcp14> also verify consistency between the provided STH
and an STH it knows about.</t>
          <t>If the TLS client holds an STH that predates the SCT, it MAY, <bcp14>MAY</bcp14>, in the process of
auditing, request a new STH from the log (<xref target="get-sth"/>), target="get-sth" format="default"/>) and then verify it by
requesting a consistency proof (<xref target="get-sth-consistency"/>). target="get-sth-consistency" format="default"/>). Note that if the TLS
client uses <spanx style="verb">get-all-by-hash</spanx>, <tt>get-all-by-hash</tt>, then it will already have the new STH.</t>
        </section>
        <section anchor="evaluating_compliance" title="Evaluating compliance"> numbered="true" toc="default">
          <name>Evaluating Compliance</name>
          <t>It is up to a client's local policy to specify the quantity and form of
evidence (SCTs, inclusion proofs proofs, or a combination) needed to achieve
compliance and how to handle non-compliance.</t> noncompliance.</t>
          <t>A TLS client can only evaluate compliance if it has given the TLS server the
opportunity to send SCTs and inclusion proofs by any of the three mechanisms
that are mandatory to implement for CT-using TLS clients (see
<xref target="receiving_transitems"/>). target="receiving_transitems" format="default"/>). Therefore, a TLS client MUST NOT <bcp14>MUST NOT</bcp14> evaluate compliance
if it did not include both the <spanx style="verb">transparency_info</spanx> <tt>transparency_info</tt> and <spanx style="verb">status_request</spanx> <tt>status_request</tt> TLS
extensions in the ClientHello.</t>
        </section>
      </section>
      <section anchor="monitor" title="Monitor"> numbered="true" toc="default">
        <name>Monitor</name>
        <t>Monitors watch logs to check that they behave correctly, for correct behavior, for certificates of
interest, or for both. For example, a monitor may be configured to report on all
certificates that apply to a specific domain name when fetching new entries for
consistency validation.</t>
        <t>A monitor MUST <bcp14>MUST</bcp14> at least inspect every new entry in every log it watches, and it
MAY
<bcp14>MAY</bcp14> also choose to keep copies of entire logs.</t>
        <t>To inspect all of the existing entries, the monitor SHOULD <bcp14>SHOULD</bcp14> follow these steps
once for each log:</t>

<t><list style="numbers">
  <t>Fetch
        <ol spacing="normal" type="1">
	  <li>Fetch the current STH (<xref target="get-sth"/>).</t>
  <t>Verify target="get-sth" format="default"/>).</li>
          <li>Verify the STH signature.</t>
  <t>Fetch signature.</li>
          <li>Fetch all the entries in the tree corresponding to the STH (<xref target="get-entries"/>).</t>
  <t>If
	  target="get-entries" format="default"/>).</li>
          <li>If applicable, check each entry to see if it's a certificate of interest.</t>
  <t>Confirm interest.</li>
          <li>Confirm that the tree made from the fetched entries produces the same hash as
	  that in the STH.</t>
</list></t> STH.</li>
        </ol>
        <t>To inspect new entries, the monitor SHOULD <bcp14>SHOULD</bcp14> follow these steps
	repeatedly for each log:</t>

<t><list style="numbers">
  <t>Fetch
        <ol spacing="normal" type="1">
	  <li>Fetch the current STH (<xref target="get-sth"/>). target="get-sth" format="default"/>). Repeat until
	  the STH changes.
This To allow for experimentation, this document does not specify the polling frequency, to allow for
experimentation.</t>
  <t>Verify frequency.</li>
          <li>Verify the STH signature.</t>
  <t>Fetch signature.</li>
          <li>Fetch all the new entries in the tree corresponding to the STH
	  (<xref target="get-entries"/>). target="get-entries" format="default"/>). If they remain unavailable for an
	  extended period, then this should be viewed as misbehavior on the part of the log.</t>
  <t>If
	  log.</li>
          <li>If applicable, check each entry to see if it's a certificate of interest.</t>
  <t>Either:  <list style="numbers">
      <t>Verify interest.</li>
          <li>
            <t>Either:</t>
            <ol spacing="normal" type="a">
	      <li>Verify that the updated list of all entries generates a tree with the
	      same hash as the new STH.</t>
    </list>
Or, STH.</li>
            </ol>
            <t>Or, if it is not keeping all log entries:  <list style="numbers">
      <t>Fetch entries:</t>
            <ol spacing="normal" type="a">
	      <li>Fetch a consistency proof for the new STH with the previous STH
	      (<xref target="get-sth-consistency"/>).</t>
      <t>Verify target="get-sth-consistency" format="default"/>).</li>
              <li>Verify the consistency proof.</t>
      <t>Verify proof.</li>
              <li>Verify that the new entries generate the corresponding elements in the
	      consistency proof.</t>
    </list></t>
  <t>Repeat proof.</li>
            </ol>
          </li>
          <li>Repeat from step 1.</t>
</list></t> Step 1.</li>
        </ol>
      </section>
      <section anchor="auditing" title="Auditing"> numbered="true" toc="default">
        <name>Auditing</name>
        <t>Auditing ensures that the current published state of a log is reachable from
previously published states that are known to be good, good and that the promises
made by the log log, in the form of SCTs SCTs, have been kept. Audits are performed by
monitors or TLS clients.</t>
        <t>In particular, there are four properties of log behavior properties that should be checked:</t>

<t><list style="symbols">
  <t>The
        <ul spacing="normal">
          <li>the Maximum Merge Delay (MMD).</t>
  <t>The (MMD)</li>
          <li>the STH Frequency Count.</t>
  <t>The Count</li>
          <li>the append-only property.</t>
  <t>The property</li>
          <li>the consistency of the log view presented to all query sources.</t>
</list></t> sources</li>
        </ul>
        <t>A benign, conformant log publishes a series of STHs over time, each derived from
the previous STH and the submitted entries incorporated into the log since
publication of the previous STH. This can be proven through auditing of STHs.
SCTs returned to TLS clients can be audited by verifying against the
accompanying certificate, certificate and using Merkle Inclusion Proofs, inclusion proofs against the log's
Merkle tree.</t> Tree.</t>
        <t>The action taken by the auditor auditor, if an audit fails fails, is not specified, but note
that in general general, if an audit fails, the auditor is in possession of signed proof of
the log's misbehavior.</t>
        <t>A monitor (<xref target="monitor"/>) target="monitor" format="default"/>) can audit by verifying the consistency of STHs it
receives, ensure ensuring that each entry can be fetched and that the STH is indeed the
result of making a tree from all fetched entries.</t>
        <t>A TLS client (<xref target="tls_clients"/>) target="tls_clients" format="default"/>) can audit by verifying an SCT against any STH
dated after the SCT timestamp + the Maximum Merge Delay by requesting a Merkle
inclusion proof (<xref target="get-proof-by-hash"/>). target="get-proof-by-hash" format="default"/>). It can also verify that the SCT
corresponds to the server certificate it arrived with (i.e., the log entry is
that certificate, certificate or is a precertificate corresponding to that certificate).</t>
        <t>Checking of the consistency of the log view presented to all entities is more
difficult to perform because it requires a way to share log responses among a
set of CT-using entities, entities and is discussed in <xref target="misbehaving_logs"/>.</t> target="misbehaving_logs" format="default"/>.</t>
      </section>
    </section>
    <section anchor="algorithm-agility" title="Algorithm Agility"> numbered="true" toc="default">
      <name>Algorithm Agility</name>
      <t>It is not possible for a log to change any either of its algorithms part way through
its lifetime:</t>

<t><list style="hanging">
  <t hangText="Signature algorithm:">
  SCT
      <dl newline="false" spacing="normal">
        <dt>Signature algorithm:</dt>
        <dd>SCT signatures must remain valid so signature algorithms can only be added,
	not removed.</t>
  <t hangText="Hash algorithm:">
  A removed.</dd>
        <dt>Hash algorithm:</dt>
        <dd>A log would have to support the old and new hash algorithms to allow
backwards-compatibility
	backwards compatibility with clients that are not aware of a hash algorithm
change.</t>
</list></t>
	change.</dd>
      </dl>
      <t>Allowing multiple signature or hash algorithms for a log would require that all
data structures support it and would significantly complicate client
implementation, which is why it is not supported by this document.</t>
      <t>If it should become necessary to deprecate an algorithm used by a live log, then
the log MUST <bcp14>MUST</bcp14> be frozen frozen, as specified in <xref target="log_shutdown"/> target="log_shutdown" format="default"/>, and a new log SHOULD <bcp14>SHOULD</bcp14> be
started. Certificates in the frozen log that have not yet expired and require
new SCTs SHOULD <bcp14>SHOULD</bcp14> be submitted to the new log and the SCTs from that log used
instead.</t>
    </section>
    <section anchor="iana-considerations" title="IANA Considerations"> numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>The assignment policy criteria mentioned in this section refer to the policies
outlined in <xref target="RFC8126"></xref>.</t> target="RFC8126" format="default"/>.</t>
      <section anchor="additions-to-existing-registries" title="Additions numbered="true" toc="default">
        <name>Additions to existing registries"> Existing Registries</name>
        <t>This sub-section subsection defines additions to existing registries.</t>
        <section anchor="new-entry-to-the-tls-extensiontype-registry" title="New numbered="true" toc="default">
          <name>New Entry to the TLS ExtensionType Registry"> Registry</name>
          <t>IANA is asked to add has added the following entry
to the "TLS ExtensionType Values" registry defined in <xref target="RFC8446"></xref>, target="RFC8446" format="default"/>,
with an assigned Value:</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Extension Name</ttcol>
      <ttcol align='left'>TLS 1.3</ttcol>
      <ttcol align='left'>Recommended</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>TBD</c>
      <c>transparency_info</c>
      <c>CH,
          <table align="center">
            <thead>
              <tr>
                <th align="left">Value</th>
                <th align="left">Extension Name</th>
                <th align="left">TLS 1.3</th>
                <th align="left">DTLS-Only</th>
                <th align="left">Recommended</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">52</td>
                <td align="left">transparency_info</td>
                <td align="left">CH, CR, CT</c>
      <c>Y</c>
      <c>RFCXXXX</c>
</texttable> CT</td>
                <td align="left">N</td>
                <td align="left">Y</td>
                <td align="left">RFC 9162</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="urn-sub-namespace-for-trans-urnietfparamstrans" title="URN numbered="true" toc="default">
          <name>URN Sub-namespace for TRANS (urn:ietf:params:trans)"> (urn:ietf:params:trans)</name>
          <t>IANA is requested to add has added a new entry in the
	  "IETF URN Sub-namespace for Registered Protocol Parameter Identifiers"
	  registry, following the template in <xref target="RFC3553"/>:</t>

<t>Registry name: trans</t>

<t>Specification: RFCXXXX</t>

<t>Repository: https://www.iana.org/assignments/trans</t>

<t>Index value: No target="RFC3553" format="default"/>:</t>
	  <dl newline="false" spacing="compact">
            <dt>Registry name:</dt>
	    <dd>trans</dd>
            <dt>Specification:</dt>
	    <dd>RFC 9162</dd>
            <dt>Repository:</dt>
	    <dd><eref brackets="angle"
	    target="https://www.iana.org/assignments/trans"/></dd>
            <dt>Index value:</dt>
	    <dd>No transformation needed.</t> needed.</dd>
	  </dl>
        </section>
      </section>
      <section anchor="new-ct-related-registries" title="New numbered="true" toc="default">
        <name>New CT-Related registries"> Registries</name>
        <t>IANA is requested to add has added a new protocol registry, "Public Notary
Transparency", to the list that appears at
https://www.iana.org/assignments/</t>
<eref brackets="angle" target="https://www.iana.org/assignments/"/></t>
        <t>The rest of this section defines sub-registries to be the subregistries that have been created within the new Public "Public Notary Transparency Transparency" registry.</t>
        <section anchor="hash_algorithms" title="Hash Algorithms"> numbered="true" toc="default">
          <name>Hash Algorithms</name>
          <t>IANA is asked to establish has established a registry of hash algorithm values, named
"Hash Algorithms", that with the following registration procedures:</t>
          <table align="center">
            <thead>
              <tr>
                <th align="left">Range</th>
                <th align="left">Registration Procedures</th>
              </tr>
            </thead>
            <tbody>
                <tr>
                  <td>0x00-0xDF</td>
                  <td>Specification Required</td>
                </tr>
                <tr>
                  <td>0xE0-0xEF</td>
                  <td>Experimental Use</td>
                </tr>
                <tr>
                  <td>0xF0-0xFF</td>
                  <td>Private Use</td>
                </tr>
            </tbody>
          </table>
          <t>The "Hash Algorithms" registry initially consists of:</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Hash Algorithm</ttcol>
      <ttcol align='left'>OID</ttcol>
      <ttcol align='left'>Reference / Assignment Policy</ttcol>
      <c>0x00</c>
      <c>SHA-256</c>
      <c>2.16.840.1.101.3.4.2.1</c>
      <c><xref target="RFC6234"></xref></c>
      <c>0x01
          <table align="center">
            <thead>
              <tr>
                <th align="left">Value</th>
                <th align="left">Hash Algorithm</th>
                <th align="left">OID</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0x00</td>
                <td align="left">SHA-256</td>
                <td align="left">2.16.840.1.101.3.4.2.1</td>
                <td align="left">
                  <xref target="RFC6234" format="default"/></td>
              </tr>
              <tr>
                <td align="left">0x01 - 0xDF</c>
      <c>Unassigned</c>
      <c>&#160;</c>
      <c>Specification Required</c>
      <c>0xE0 0xDF</td>
                <td align="left">Unassigned</td>
                <td align="left">&nbsp;</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">0xE0 - 0xEF</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>Experimental Use</c>
      <c>0xF0 0xEF</td>
                <td align="left">Reserved for Experimental Use</td>
                <td align="left">&nbsp;</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">0xF0 - 0xFF</c>
      <c>Reserved</c>
      <c>&#160;</c>
      <c>Private Use</c>
</texttable> 0xFF</td>
                <td align="left">Reserved for Private Use</td>
                <td align="left">&nbsp;</td>
                <td align="left">RFC 9162</td>
              </tr>
            </tbody>
          </table>
          <t>The Designated Expert(s) designated expert(s) should ensure that the proposed algorithm has a public
specification and is suitable for use as a cryptographic hash algorithm with no
known preimage or collision attacks. These attacks can damage the integrity of
the log.</t>
        </section>
        <section anchor="signature_algorithms" title="Signature Algorithms"> numbered="true" toc="default">
          <name>Signature Algorithms</name>
          <t>IANA is asked to establish has established a registry of signature algorithm values, named
"Signature Algorithms".</t>
          <t>The following notes should be added:</t>

<t><list style="symbols">
  <t>This have been added to the registry:</t>
            <blockquote>
              <dl newline="true">
                <dt><strong>Note:</strong></dt>
                <dd>This is a subset of the TLS SignatureScheme Registry, "TLS SignatureScheme" registry, limited to those
	    algorithms that are appropriate for CT. A major advantage of this is
	    leveraging the expertise of the TLS working group Working Group and its Designated
Expert(s).</t>
  <t>The designated
	    expert(s).</dd>
              </dl>
            </blockquote>
            <blockquote>
              <dl newline="true">
                <dt><strong>Note:</strong></dt>
                <dd>The value <spanx style="verb">0x0403</spanx> <tt>0x0403</tt> appears twice. While this may be confusing,
	    it is okay because the verification
	    process is the same for both algorithms, and the choice of which to use
	    when generating a signature is purely internal to the log server.</t>
</list></t> server.</dd>
              </dl>
            </blockquote>
          <t>The "Signature Algorithms" registry has the following registration procedures:</t>
          <table align="center">
            <thead>
              <tr>
                <th align="left">Range</th>
                <th align="left">Registration Procedures</th>
              </tr>
            </thead>
            <tbody>
                <tr>
                  <td>0x0000-0x0807</td>
                  <td>Specification Required</td>
                </tr>
                <tr>
                  <td>0x0808-0xFDFF</td>
                  <td>Expert Review</td>
                </tr>
                <tr>
                  <td>0xFE00-0xFEFF</td>
                  <td>Experimental Use</td>
                </tr>
                <tr>
                  <td>0xFF00-0xFFFF</td>
                  <td>Private Use</td>
                </tr>
            </tbody>
          </table>

          <t>The "Signature Algorithms" registry should initially consist consists of:</t>

<texttable>
      <ttcol align='left'>SignatureScheme Value</ttcol>
      <ttcol align='left'>Signature Algorithm</ttcol>
      <ttcol align='left'>Reference / Assignment Policy</ttcol>
      <c>0x0000
          <table align="center">
            <thead>
              <tr>
                <th align="left">SignatureScheme Value</th>
                <th align="left">Signature Algorithm</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0x0000 - 0x0402</c>
      <c>Unassigned</c>
      <c>Specification Required</c>
      <c>ecdsa_secp256r1_sha256(0x0403)</c>
      <c>ECDSA 0x0402</td>
                <td align="left">Unassigned</td>
                <td align="left">&nbsp;</td>
              </tr>
              <tr>
                <td align="left">ecdsa_secp256r1_sha256 (0x0403)</td>
                <td align="left">ECDSA (NIST P-256) with SHA-256</c>
      <c><xref target="FIPS186-4"></xref></c>
      <c>ecdsa_secp256r1_sha256(0x0403)</c>
      <c>Deterministic SHA-256</td>
                <td align="left">
                  <xref target="FIPS186-4" format="default"/></td>
              </tr>
              <tr>
                <td align="left">ecdsa_secp256r1_sha256 (0x0403)</td>
                <td align="left">Deterministic ECDSA (NIST P-256) with HMAC-SHA256</c>
      <c><xref target="RFC6979"></xref></c>
      <c>0x0404 HMAC-SHA256</td>
                <td align="left">
                  <xref target="RFC6979" format="default"/></td>
              </tr>
              <tr>
                <td align="left">0x0404 - 0x0806</c>
      <c>Unassigned</c>
      <c>Specification Required</c>
      <c>ed25519(0x0807)</c>
      <c>Ed25519 0x0806</td>
                <td align="left">Unassigned</td>
                <td align="left">&nbsp;</td>
              </tr>
              <tr>
                <td align="left">ed25519 (0x0807)</td>
                <td align="left">Ed25519 (PureEdDSA with the edwards25519 curve)</c>
      <c><xref target="RFC8032"></xref></c>
      <c>0x0808 curve)</td>
                <td align="left">
                  <xref target="RFC8032" format="default"/></td>
              </tr>
              <tr>
                <td align="left">0x0808 - 0xFDFF</c>
      <c>Unassigned</c>
      <c>Expert Review</c>
      <c>0xFE00 0xFDFF</td>
                <td align="left">Unassigned</td>
                <td align="left">&nbsp;</td>
              </tr>
              <tr>
                <td align="left">0xFE00 - 0xFEFF</c>
      <c>Reserved</c>
      <c>Experimental Use</c>
      <c>0xFF00 0xFEFF</td>
                <td align="left">Reserved for Experimental Use</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">0xFF00 - 0xFFFF</c>
      <c>Reserved</c>
      <c>Private Use</c>
</texttable> 0xFFFF</td>
                <td align="left">Reserved for Private Use</td>
                <td align="left">RFC 9162</td>
              </tr>
            </tbody>
          </table>
          <t>The Designated Expert(s) designated expert(s) should ensure that the proposed algorithm has a public
specification, has a value assigned to it in the TLS SignatureScheme Registry
(that IANA "TLS SignatureScheme" registry
(which was asked to establish in established by <xref target="RFC8446"></xref>), target="RFC8446" format="default"/>), and is suitable for use as a
cryptographic signature algorithm.</t>
        </section>
        <section anchor="versioned_trans_types" title="VersionedTransTypes"> numbered="true" toc="default">
          <name>VersionedTransTypes</name>
          <t>IANA is asked to establish has established a registry of <spanx style="verb">VersionedTransType</spanx> <tt>VersionedTransType</tt> values, named
"VersionedTransTypes".</t>
          <t>The following note should be has been added:</t>

<t><list style="symbols">
  <t>The
          <blockquote>
          <dl newline="true">
            <dt><strong>Note:</strong></dt>
            <dd>The range 0x0000..0x00FF is reserved so that v1 SCTs are distinguishable from
	    v2 SCTs and other <spanx style="verb">TransItem</spanx> structures.</t>
</list></t> <tt>TransItem</tt> structures.</dd>
          </dl>
          </blockquote>
          <t>The registration procedures for the "VersionedTransTypes" registry are the following:</t>
          <table align="center">
            <thead>
              <tr>
                <th align="left">Range</th>
                <th align="left">Registration Procedures</th>
              </tr>
            </thead>
            <tbody>
                <tr>
                  <td>0x0100-0xDFFF</td>
                  <td>Specification Required</td>
                </tr>
                <tr>
                  <td>0xE000-0xEFFF</td>
                  <td>Experimental Use</td>
                </tr>
                <tr>
                  <td>0xF000-0xFFFF</td>
                  <td>Private Use</td>
                </tr>
            </tbody>
          </table>
          <t>The "VersionedTransTypes" registry should initially consist consists of:</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Type and Version</ttcol>
      <ttcol align='left'>Reference / Assignment Policy</ttcol>
      <c>0x0000
          <table align="center">
            <thead>
              <tr>
                <th align="left">Value</th>
                <th align="left">Type and Version</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0x0000 - 0x00FF</c>
      <c>Reserved</c>
      <c><xref target="RFC6962"></xref></c>
      <c>0x0100</c>
      <c>x509_entry_v2</c>
      <c>RFCXXXX</c>
      <c>0x0101</c>
      <c>precert_entry_v2</c>
      <c>RFCXXXX</c>
      <c>0x0102</c>
      <c>x509_sct_v2</c>
      <c>RFCXXXX</c>
      <c>0x0103</c>
      <c>precert_sct_v2</c>
      <c>RFCXXXX</c>
      <c>0x0104</c>
      <c>signed_tree_head_v2</c>
      <c>RFCXXXX</c>
      <c>0x0105</c>
      <c>consistency_proof_v2</c>
      <c>RFCXXXX</c>
      <c>0x0106</c>
      <c>inclusion_proof_v2</c>
      <c>RFCXXXX</c>
      <c>0x0107 0x00FF</td>
                <td align="left">Reserved</td>
                <td align="left">
                  <xref target="RFC6962" format="default"/></td>
              </tr>
              <tr>
                <td align="left">0x0100</td>
                <td align="left">x509_entry_v2</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">0x0101</td>
                <td align="left">precert_entry_v2</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">0x0102</td>
                <td align="left">x509_sct_v2</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">0x0103</td>
                <td align="left">precert_sct_v2</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">0x0104</td>
                <td align="left">signed_tree_head_v2</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">0x0105</td>
                <td align="left">consistency_proof_v2</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">0x0106</td>
                <td align="left">inclusion_proof_v2</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">0x0107 - 0xDFFF</c>
      <c>Unassigned</c>
      <c>Specification Required</c>
      <c>0xE000 0xDFFF</td>
                <td align="left">Unassigned</td>
                <td align="left">&nbsp;</td>
              </tr>
              <tr>
                <td align="left">0xE000 - 0xEFFF</c>
      <c>Reserved</c>
      <c>Experimental Use</c>
      <c>0xF000 0xEFFF</td>
                <td align="left">Reserved for Experimental Use</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">0xF000 - 0xFFFF</c>
      <c>Reserved</c>
      <c>Private Use</c>
</texttable> 0xFFFF</td>
                <td align="left">Reserved for Private Use</td>
                <td align="left">RFC 9162</td>
              </tr>
            </tbody>
          </table>
          <t>The Designated Expert(s) designated expert(s) should review the public specification to ensure that it is
detailed enough to ensure implementation interoperability.</t>
        </section>
        <section anchor="log_artifact_extension_registry" title="Log numbered="true" toc="default">
          <name>Log Artifact Extension Registry"> Extensions</name>
          <t>IANA is asked to establish has established a registry of <spanx style="verb">ExtensionType</spanx> <tt>ExtensionType</tt> values, named "Log
Artifact Extensions", that Extensions".</t>
          <t>The registration procedures for the "Log Artifact Extensions" registry are the following:</t>
          <table align="center">
            <thead>
              <tr>
                <th align="left">Range</th>
                <th align="left">Registration Procedures</th>
              </tr>
            </thead>
            <tbody>
                <tr>
                  <td>0x0000-0xDFFF</td>
                  <td>Specification Required</td>
                </tr>
                <tr>
                  <td>0xE000-0xEFFF</td>
                  <td>Experimental Use</td>
                </tr>
                <tr>
                  <td>0xF000-0xFFFF</td>
                  <td>Private Use</td>
                </tr>
            </tbody>
          </table>
          <t>The "Log Artifact Extensions" registry initially consists of:</t>

<texttable>
      <ttcol align='left'>ExtensionType</ttcol>
      <ttcol align='left'>Status</ttcol>
      <ttcol align='left'>Use</ttcol>
      <ttcol align='left'>Reference / Assignment Policy</ttcol>
      <c>0x0000
          <table align="center">
            <thead>
              <tr>
                <th align="left">ExtensionType</th>
                <th align="left">Status</th>
                <th align="left">Use</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0x0000 - 0xDFFF</c>
      <c>Unassigned</c>
      <c>n/a</c>
      <c>Specification Required</c>
      <c>0xE000 0xDFFF</td>
                <td align="left">Unassigned</td>
                <td align="left">n/a</td>
                <td align="left">&nbsp;</td>
              </tr>
              <tr>
                <td align="left">0xE000 - 0xEFFF</c>
      <c>Reserved</c>
      <c>n/a</c>
      <c>Experimental Use</c>
      <c>0xF000 0xEFFF</td>
                <td align="left">Reserved for Experimental Use</td>
                <td align="left">n/a</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">0xF000 - 0xFFFF</c>
      <c>Reserved</c>
      <c>n/a</c>
      <c>Private Use</c>
</texttable> 0xFFFF</td>
                <td align="left">Reserved for Private Use</td>
                <td align="left">n/a</td>
                <td align="left">RFC 9162</td>
              </tr>
            </tbody>
          </table>
          <t>The "Use" column should contain one or both of the following values:</t>

<t><list style="symbols">
  <t>"SCT",
          <ul spacing="normal">
            <li>"SCT", for extensions specified for use in Signed Certificate Timestamps.</t>
  <t>"STH", Timestamps.</li>
            <li>"STH", for extensions specified for use in Signed Tree Heads.</t>
</list></t> Heads.</li>
          </ul>
          <t>The Designated Expert(s) designated expert(s) should review the public specification to ensure that it is
detailed enough to ensure implementation interoperability. They should
also verify that the extension is appropriate to the contexts in which it is
specified to be used (SCT, STH, or both).</t>
        </section>
        <section anchor="log_id_registry" title="Log IDs Registry"> numbered="true" toc="default">
          <name>Log IDs</name>
          <t>IANA is asked to establish has established a registry of Log IDs, named "Log IDs",
that IDs".</t>
          <t>The registry's registration procedure is First Come First Served.</t>
          <t>The "Log IDs" registry initially consists of:</t>

<texttable>
      <ttcol align='left'>Log ID</ttcol>
      <ttcol align='left'>Log
          <table align="center">
            <thead>
              <tr>
                <th align="left">Log ID</th>
                <th align="left">Log Base URL</ttcol>
      <ttcol align='left'>Log Operator</ttcol>
      <ttcol align='left'>Reference / Assignment Policy</ttcol>
      <c>1.3.101.8192 URL</th>
                <th align="left">Log Operator</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">1.3.101.8192 - 1.3.101.16383</c>
      <c>Unassigned</c>
      <c>Unassigned</c>
      <c>First Come First Served</c>
      <c>1.3.101.80.0 1.3.101.16383</td>
                <td align="left">Unassigned</td>
                <td align="left">Unassigned</td>
                <td align="left">&nbsp;</td>
              </tr>
              <tr>
                <td align="left">1.3.101.80.0 - 1.3.101.80.*</c>
      <c>Unassigned</c>
      <c>Unassigned</c>
      <c>First Come First Served</c>
</texttable>

<t>All 1.3.101.80.*</td>
                <td align="left">Unassigned</td>
                <td align="left">Unassigned</td>
                <td align="left">&nbsp;</td>
              </tr>
            </tbody>
          </table>
          <t>The following notes have been added to the registry:</t>
          <blockquote>
          <dl newline="true">
            <dt><strong>Note:</strong></dt>
            <dd>All OIDs in the range from 1.3.101.8192 to 1.3.101.16383 have been set aside
for Log IDs.
This is a limited resource of 8,192 OIDs, each of which has an encoded length of
4 octets.</t>

<t>The octets.</dd>
          </dl>
          </blockquote>
          <blockquote>
          <dl newline="true">
            <dt><strong>Note:</strong></dt>
            <dd>The 1.3.101.80 arc has also been set aside for Log IDs.
This is an unlimited resource, but only
the 128 OIDs from 1.3.101.80.0 to 1.3.101.80.127 have an encoded length of only
4 octets.</t> octets.</dd>
          </dl>
          </blockquote>
          <t>Each application for the allocation of a Log ID MUST <bcp14>MUST</bcp14> be accompanied by:</t>

<t><list style="symbols">
  <t>the
          <ul spacing="normal">
            <li>the Log's Base URL (see <xref target="log_parameters"/>).</t>
  <t>the target="log_parameters"
	    format="default"/>) and</li>
            <li>the Log Operator's contact details.</t>
</list></t> details.</li>
          </ul>
          <t>IANA is asked to reject any request to update a Log ID or Log Base URL in this
registry,
registry because these fields are immutable (see <xref target="log_parameters"/>).</t> target="log_parameters" format="default"/>).</t>
          <t>IANA is asked to accept requests from log operators to update their contact
details in this registry.</t>
          <t>Since log operators can choose to not use this registry (see <xref target="log_id"/>), target="log_id" format="default"/>), it is
not expected to be a global directory of all logs.</t>
        </section>
        <section anchor="error-types-registry" title="Error Types Registry"> numbered="true" toc="default">
          <name>Error Types</name>
          <t>IANA is requested to create has created a new registry for errors,
the "Error Types" registry.</t>

<t>Requirements
          <t>The registration procedure for this registry are is Specification Required.</t>
          <t>This registry should have has the following three fields:</t>

<texttable>
      <ttcol align='left'>Field Name</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>identifier</c>
      <c>string</c>
      <c>RFCXXXX</c>
      <c>meaning</c>
      <c>string</c>
      <c>RFCXXXX</c>
      <c>reference</c>
      <c>string</c>
      <c>RFCXXXX</c>
</texttable>
          <table align="center">
            <thead>
              <tr>
                <th align="left">Field Name</th>
                <th align="left">Type</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Identifier</td>
                <td align="left">string</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">Meaning</td>
                <td align="left">string</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">Reference</td>
                <td align="left">string</td>
                <td align="left">RFC 9162</td>
              </tr>
            </tbody>
          </table>
          <t>The initial values of the "Error Types" registry, which are as follows, taken from the text above:</t>

<texttable>
      <ttcol align='left'>Identifier</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>malformed</c>
      <c>The in <xref target="client_messages" format="default"/>, are as follows:</t>
          <table align="center">
            <thead>
              <tr>
                <th align="left">Identifier</th>
                <th align="left">Meaning</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">malformed</td>
                <td align="left">The request could not be parsed.</c>
      <c>RFCXXXX</c>
      <c>badSubmission</c>
      <c><spanx style="verb">submission</spanx> parsed.</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">badSubmission</td>
                <td align="left"><tt>submission</tt> is neither a valid certificate nor a
		valid precertificate</c>
      <c>RFCXXXX</c>
      <c>badType</c>
      <c><spanx style="verb">type</spanx> precertificate.</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">badType</td>
                <td align="left"><tt>type</tt> is neither 1 nor 2</c>
      <c>RFCXXXX</c>
      <c>badChain</c>
      <c>The 2.</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">badChain</td>
                <td align="left">The first element of <spanx style="verb">chain</spanx> <tt>chain</tt> is not the certifier of
		the <spanx style="verb">submission</spanx>, <tt>submission</tt>, or the second element does not certify the first, etc.</c>
      <c>RFCXXXX</c>
      <c>badCertificate</c>
      <c>One
		etc.</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">badCertificate</td>
                <td align="left">One or more certificates in the <spanx style="verb">chain</spanx> <tt>chain</tt> are not valid
		(e.g., not properly encoded)</c>
      <c>RFCXXXX</c>
      <c>unknownAnchor</c>
      <c>The encoded).</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">unknownAnchor</td>
                <td align="left">The last element of <spanx style="verb">chain</spanx> <tt>chain</tt> (or, if <spanx style="verb">chain</spanx> <tt>chain</tt> is
		an empty array, the <spanx style="verb">submission</spanx>) both <tt>submission</tt>) is not, and nor is not it certified
		by, an accepted trust anchor</c>
      <c>RFCXXXX</c>
      <c>shutdown</c>
      <c>The anchor.</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">shutdown</td>
                <td align="left">The log is no longer accepting submissions</c>
      <c>RFCXXXX</c>
      <c>firstUnknown</c>
      <c><spanx style="verb">first</spanx> submissions.</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">firstUnknown</td>
                <td align="left"><tt>first</tt> is before the latest known STH but is not
		from an existing STH.</c>
      <c>RFCXXXX</c>
      <c>secondUnknown</c>
      <c><spanx style="verb">second</spanx> STH.</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">secondUnknown</td>
                <td align="left"><tt>second</tt> is before the latest known STH but is not
		from an existing STH.</c>
      <c>RFCXXXX</c>
      <c>secondBeforeFirst</c>
      <c><spanx style="verb">second</spanx> STH.</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">secondBeforeFirst</td>
                <td align="left"><tt>second</tt> is smaller than <spanx style="verb">first</spanx>.</c>
      <c>RFCXXXX</c>
      <c>hashUnknown</c>
      <c><spanx style="verb">hash</spanx> <tt>first</tt>.</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">hashUnknown</td>
                <td align="left"><tt>hash</tt> is not the hash of a known leaf (may be caused
		by skew or by a known certificate not yet merged).</c>
      <c>RFCXXXX</c>
      <c>treeSizeUnknown</c>
      <c><spanx style="verb">hash</spanx> merged).</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">treeSizeUnknown</td>
                <td align="left"><tt>hash</tt> is before the latest known STH but is not from
		an existing STH.</c>
      <c>RFCXXXX</c>
      <c>startUnknown</c>
      <c><spanx style="verb">start</spanx> STH.</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">startUnknown</td>
                <td align="left"><tt>start</tt> is greater than the number of entries in the
		Merkle tree.</c>
      <c>RFCXXXX</c>
      <c>endBeforeStart</c>
      <c><spanx style="verb">start</spanx> Tree.</td>
                <td align="left">RFC 9162</td>
              </tr>
              <tr>
                <td align="left">endBeforeStart</td>
                <td align="left"><tt>start</tt> cannot be greater than <spanx style="verb">end</spanx>.</c>
      <c>RFCXXXX</c>
</texttable> <tt>end</tt>.</td>
                <td align="left">RFC 9162</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section anchor="oid-assignment" title="OID Assignment"> numbered="true" toc="default">
        <name>OID Assignment</name>
        <t>IANA is asked to assign one has assigned an object identifier from the "SMI
Security for PKIX Module Identifier" registry to identify the
ASN.1 module in <xref target="asn1_module"/> target="asn1_module" format="default"/> of this document with an assigned
Decimal value.</t>

<texttable>
      <ttcol align='left'>Decimal</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>References</ttcol>
      <c>TBD</c>
      <c>id-mod-public-notary-v2</c>
      <c>RFCXXXX</c>
</texttable> document.</t>
        <table align="center">
          <thead>
            <tr>
              <th align="left">Decimal</th>
              <th align="left">Description</th>
              <th align="left">References</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">102</td>
              <td align="left">id-mod-public-notary-v2</td>
              <td align="left">RFC 9162</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="security-considerations" title="Security Considerations"> numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>With CAs, logs, and servers performing the actions described here, TLS clients
can use logs and signed timestamps to reduce the likelihood that they will
accept misissued certificates. If a server presents a valid signed timestamp for
a certificate, then the client knows that a log has committed to publishing the
certificate. From this, the client knows that monitors acting for the subject of
the certificate have had some time to notice the misissuance and take some
action, such as asking a CA to revoke a misissued certificate. A signed
timestamp does not guarantee this this, though, since appropriate monitors might not
have checked the logs or the CA might have refused to revoke the certificate.</t>
      <t>In addition, if TLS clients will not accept unlogged certificates, then site
owners will have a greater incentive to submit certificates to logs, possibly
with the assistance of their CA, increasing the overall transparency of the
system.</t>
      <section anchor="misissued-certificates" title="Misissued Certificates"> numbered="true" toc="default">
        <name>Misissued Certificates</name>
        <t>Misissued certificates that have not been publicly logged, and thus do not have
a valid SCT, are not considered compliant. Misissued certificates that do have
an SCT from a log will appear in that public log within the Maximum Merge Delay,
assuming the log is operating correctly. Since a log is allowed to serve an STH
of any age up to the MMD, the maximum period of time during which a misissued
certificate can be used without being available for audit is twice the MMD.</t>
      </section>
      <section anchor="detection-of-misissue" title="Detection numbered="true" toc="default">
        <name>Detection of Misissue"> Misissue</name>
        <t>The logs do not themselves detect misissued certificates; they rely instead on
interested parties, such as domain owners, to monitor them and take corrective
action when a misissue is detected.</t>
      </section>
      <section anchor="misbehaving_logs" title="Misbehaving Logs"> numbered="true" toc="default">
        <name>Misbehaving Logs</name>
        <t>A log can misbehave in several ways. Examples include: include the following: failing to incorporate a
certificate with an SCT in the Merkle Tree within the MMD; presenting different,
conflicting views of the Merkle Tree at different times and/or to different
parties; issuing STHs too frequently; mutating the signature of a logged
certificate; and failing to present a chain containing the certifier of a logged
certificate.</t>
        <t>Violation of the MMD contract is detected by log clients requesting a Merkle
inclusion proof (<xref target="get-proof-by-hash"/>) target="get-proof-by-hash" format="default"/>) for each observed SCT. These checks can
be asynchronous and need only be done once per certificate. However, note that
there may be privacy concerns (see <xref target="fetching_inclusion_proofs"/>).</t> target="fetching_inclusion_proofs" format="default"/>).</t>
        <t>Violation of the append-only property or the STH issuance rate limit can be
	detected by multiple clients comparing their instances of the STHs.
	This technique, known as "gossip," "gossip", is an active area of research and not
	defined here.
	Proof of misbehavior in such cases would be: be either a series of STHs that were
	issued too closely together, proving violation of the STH issuance rate limit; limit,
	or an STH with a root hash that does not match the one calculated from a copy of
	the log, proving violation of the append-only property.</t>
        <t>Clients that report back SCTs can be tracked or traced if a log
produces multiple STHs or SCTs with the same timestamp and data but different
signatures. Logs SHOULD <bcp14>SHOULD</bcp14> mitigate this risk by either:</t>

<t><list style="symbols">
  <t>Using
        <ul spacing="normal">
          <li>using deterministic signature schemes, or</t>
  <t>Producing schemes or</li>
          <li>producing no more than one SCT for each distinct submission and no more than one
	  STH for each distinct tree_size. <tt>tree_size</tt>. Each of these SCTs and STHs can be stored by
	  the log and served to other clients that submit the same certificate or request
	  the same STH.</t>
</list></t> STH.</li>
        </ul>
      </section>
      <section anchor="requiring_multiple_scts" title="Multiple SCTs"> numbered="true" toc="default">
        <name>Multiple SCTs</name>
        <t>By requiring TLS servers to offer multiple SCTs, each from a different log, TLS
clients reduce the effectiveness of an attack where a CA and a log collude
(see <xref target="multiple-scts"/>).</t> target="multiple-scts" format="default"/>).</t>
      </section>
      <section anchor="leakage-of-dns-information" title="Leakage numbered="true" toc="default">
        <name>Leakage of DNS Information"> Information</name>
        <t>Malicious monitors can use logs to learn about the existence of domain names
that might not otherwise be easy to discover. Some subdomain labels may reveal
information about the service and software for which the subdomain is used,
which in turn might facilitate targeted attacks.</t>
      </section>
    </section>
<section anchor="acknowledgements" title="Acknowledgements">

<t>The authors would like to thank Erwann Abelea, Robin Alden, Andrew Ayer, Richard
Barnes, Al Cutter, David Drysdale, Francis Dupont, Adam Eijdenberg, Stephen
Farrell, Daniel Kahn Gillmor, Paul Hadfield, Brad Hill, Jeff Hodges, Paul
Hoffman, Jeffrey Hutzelman, Kat Joyce, Stephen Kent, SM, Alexey Melnikov, Linus
Nordberg, Chris Palmer, Trevor Perrin, Pierre Phaneuf, Eric Rescorla, Rich Salz,
Melinda Shore, Ryan Sleevi, Martin Smith, Carl Wallace and Paul Wouters for
their valuable contributions.</t>

<t>A big thank you to Symantec for kindly donating the OIDs from the 1.3.101 arc
that are used in this document.</t>

</section>

  </middle>
  <back>

    <references title='Normative References'>

<reference anchor='RFC2119' target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author fullname='S. Bradner' initials='S.' surname='Bradner'><organization/></author>
<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='RFC3986' target='https://www.rfc-editor.org/info/rfc3986'>
<front>
<title>Uniform Resource Identifier (URI): Generic Syntax</title>
<author fullname='T. Berners-Lee' initials='T.' surname='Berners-Lee'><organization/></author>
<author fullname='R. Fielding' initials='R.' surname='Fielding'><organization/></author>
<author fullname='L. Masinter' initials='L.' surname='Masinter'><organization/></author>
<date month='January' year='2005'/>
<abstract><t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='STD' value='66'/>
<seriesInfo name='RFC' value='3986'/>
<seriesInfo name='DOI' value='10.17487/RFC3986'/>
</reference>

<reference anchor='RFC4648' target='https://www.rfc-editor.org/info/rfc4648'>
<front>
<title>The Base16, Base32, and Base64 Data Encodings</title>
<author fullname='S. Josefsson' initials='S.' surname='Josefsson'><organization/></author>
<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>

<reference anchor='RFC5246' target='https://www.rfc-editor.org/info/rfc5246'>
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.2</title>
<author fullname='T. Dierks' initials='T.' surname='Dierks'><organization/></author>
<author fullname='E. Rescorla' initials='E.' surname='Rescorla'><organization/></author>
<date month='August' year='2008'/>
<abstract><t>This document specifies Version 1.2 of the Transport Layer Security (TLS) protocol.  The TLS protocol provides communications security over the Internet.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5246'/>
<seriesInfo name='DOI' value='10.17487/RFC5246'/>
</reference>

<reference anchor='RFC5280' target='https://www.rfc-editor.org/info/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'><organization/></author>
<author fullname='S. Santesson' initials='S.' surname='Santesson'><organization/></author>
<author fullname='S. Farrell' initials='S.' surname='Farrell'><organization/></author>
<author fullname='S. Boeyen' initials='S.' surname='Boeyen'><organization/></author>
<author fullname='R. Housley' initials='R.' surname='Housley'><organization/></author>
<author fullname='W. Polk' initials='W.' surname='Polk'><organization/></author>
<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='RFC5652' target='https://www.rfc-editor.org/info/rfc5652'>
<front>
<title>Cryptographic Message Syntax (CMS)</title>
<author fullname='R. Housley' initials='R.' surname='Housley'><organization/></author>
<date month='September' year='2009'/>
<abstract><t>This document describes the Cryptographic Message Syntax (CMS).  This syntax is used to digitally sign, digest, authenticate, or encrypt arbitrary message content.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='STD' value='70'/>
<seriesInfo name='RFC' value='5652'/>
<seriesInfo name='DOI' value='10.17487/RFC5652'/>
</reference>

<reference anchor='RFC6066' target='https://www.rfc-editor.org/info/rfc6066'>
<front>
<title>Transport Layer Security (TLS) Extensions: Extension Definitions</title>
<author fullname='D. Eastlake 3rd' initials='D.' surname='Eastlake 3rd'><organization/></author>
<date month='January' year='2011'/>
<abstract><t>This document provides specifications for existing TLS extensions.  It is a companion document for RFC 5246, &quot;The Transport Layer Security (TLS) Protocol Version 1.2&quot;.  The extensions specified are server_name, max_fragment_length, client_certificate_url, trusted_ca_keys, truncated_hmac, and status_request.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6066'/>
<seriesInfo name='DOI' value='10.17487/RFC6066'/>
</reference>

<reference anchor='RFC6234' target='https://www.rfc-editor.org/info/rfc6234'>
<front>
<title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
<author fullname='D. Eastlake 3rd' initials='D.' surname='Eastlake 3rd'><organization/></author>
<author fullname='T. Hansen' initials='T.' surname='Hansen'><organization/></author>
<date month='May' year='2011'/>
<abstract><t>Federal Information Processing Standard, FIPS</t></abstract>
</front>
<seriesInfo name='RFC' value='6234'/>
<seriesInfo name='DOI' value='10.17487/RFC6234'/>
</reference>

<reference anchor='RFC6960' target='https://www.rfc-editor.org/info/rfc6960'>
<front>
<title>X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP</title>
<author fullname='S. Santesson' initials='S.' surname='Santesson'><organization/></author>
<author fullname='M. Myers' initials='M.' surname='Myers'><organization/></author>
<author fullname='R. Ankney' initials='R.' surname='Ankney'><organization/></author>
<author fullname='A. Malpani' initials='A.' surname='Malpani'><organization/></author>
<author fullname='S. Galperin' initials='S.' surname='Galperin'><organization/></author>
<author fullname='C. Adams' initials='C.' surname='Adams'><organization/></author>
<date month='June' year='2013'/>
<abstract><t>This document specifies a protocol useful in determining the current status of a digital certificate without requiring Certificate Revocation Lists (CRLs). Additional mechanisms addressing PKIX operational requirements are specified in separate documents.  This document obsoletes RFCs 2560 and 6277.  It also updates RFC 5912.</t></abstract>
</front>
<seriesInfo name='RFC' value='6960'/>
<seriesInfo name='DOI' value='10.17487/RFC6960'/>
</reference>

<reference anchor='RFC6979' target='https://www.rfc-editor.org/info/rfc6979'>
<front>
<title>Deterministic Usage of the Digital Signature Algorithm (DSA) and Elliptic Curve Digital Signature Algorithm (ECDSA)</title>
<author fullname='T. Pornin' initials='T.' surname='Pornin'><organization/></author>
<date month='August' year='2013'/>
<abstract><t>This document defines a deterministic digital signature generation procedure.  Such signatures are compatible with standard Digital Signature Algorithm (DSA) and Elliptic Curve Digital Signature Algorithm (ECDSA) digital signatures and can be processed with unmodified verifiers, which need not be aware of the procedure described therein.  Deterministic signatures retain the cryptographic security features associated with digital signatures but can be more easily implemented in various environments, since they do not need access to a source of high-quality randomness.</t></abstract>
</front>
<seriesInfo name='RFC' value='6979'/>
<seriesInfo name='DOI' value='10.17487/RFC6979'/>
</reference>

<reference anchor='RFC7231' target='https://www.rfc-editor.org/info/rfc7231'>
<front>
<title>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</title>
<author fullname='R. Fielding' initials='R.' role='editor' surname='Fielding'><organization/></author>
<author fullname='J. Reschke' initials='J.' role='editor' surname='Reschke'><organization/></author>
<date month='June' year='2014'/>
<abstract><t>The Hypertext Transfer Protocol (HTTP) is a stateless \%application- level protocol for distributed, collaborative, hypertext information systems.  This document defines the semantics of HTTP/1.1 messages, as expressed by request methods, request header fields, response status codes, and response header fields, along with the payload of messages (metadata and body content) and mechanisms for content negotiation.</t></abstract>
</front>
<seriesInfo name='RFC' value='7231'/>
<seriesInfo name='DOI' value='10.17487/RFC7231'/>
</reference>

<reference anchor='RFC7633' target='https://www.rfc-editor.org/info/rfc7633'>
<front>
<title>X.509v3 Transport Layer Security (TLS) Feature Extension</title>
<author fullname='P. Hallam-Baker' initials='P.' surname='Hallam-Baker'><organization/></author>
<date month='October' year='2015'/>
<abstract><t>The purpose of the TLS feature extension is to prevent downgrade attacks that are not otherwise prevented by the TLS protocol.  In particular, the TLS feature extension may be used to mandate support for revocation checking features in the TLS protocol such as Online Certificate Status Protocol (OCSP) stapling.  Informing clients that an OCSP status response will always be stapled permits an immediate failure in the case that the response is not stapled.  This in turn prevents a denial-of-service attack that might otherwise be possible.</t></abstract>
</front>
<seriesInfo name='RFC' value='7633'/>
<seriesInfo name='DOI' value='10.17487/RFC7633'/>
</reference>

<reference anchor='RFC7807' target='https://www.rfc-editor.org/info/rfc7807'>
<front>
<title>Problem Details for HTTP APIs</title>
<author fullname='M. Nottingham' initials='M.' surname='Nottingham'><organization/></author>
<author fullname='E. Wilde' initials='E.' surname='Wilde'><organization/></author>
<date month='March' year='2016'/>
<abstract><t>This document defines a &quot;problem detail&quot; as a way to carry machine- readable details of errors in a HTTP response to avoid the need to define new error response formats for HTTP APIs.</t></abstract>
</front>
<seriesInfo name='RFC' value='7807'/>
<seriesInfo name='DOI' value='10.17487/RFC7807'/>
</reference>

<reference anchor='RFC8032' target='https://www.rfc-editor.org/info/rfc8032'>
<front>
<title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
<author fullname='S. Josefsson' initials='S.' surname='Josefsson'><organization/></author>
<author fullname='I. Liusvaara' initials='I.' surname='Liusvaara'><organization/></author>
<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='RFC8174' target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author fullname='B. Leiba' initials='B.' surname='Leiba'><organization/></author>
<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='RFC8259' target='https://www.rfc-editor.org/info/rfc8259'>
<front>
<title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
<author fullname='T. Bray' initials='T.' role='editor' surname='Bray'><organization/></author>
<date month='December' year='2017'/>
<abstract><t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format.  It was derived from the ECMAScript Programming Language Standard.  JSON defines a small set of formatting rules for the portable representation of structured data.</t><t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t></abstract>
</front>
<seriesInfo name='STD' value='90'/>
<seriesInfo name='RFC' value='8259'/>
<seriesInfo name='DOI' value='10.17487/RFC8259'/>
</reference>

<reference anchor='RFC8391' target='https://www.rfc-editor.org/info/rfc8391'>
<front>
<title>XMSS: eXtended Merkle Signature Scheme</title>
<author fullname='A. Huelsing' initials='A.' surname='Huelsing'><organization/></author>
<author fullname='D. Butin' initials='D.' surname='Butin'><organization/></author>
<author fullname='S. Gazdag' initials='S.' surname='Gazdag'><organization/></author>
<author fullname='J. Rijneveld' initials='J.' surname='Rijneveld'><organization/></author>
<author fullname='A. Mohaisen' initials='A.' surname='Mohaisen'><organization/></author>
<date month='May' year='2018'/>
<abstract><t>This note describes the eXtended Merkle Signature Scheme (XMSS), a hash-based digital signature system that is based on existing descriptions in scientific literature.  This note specifies Winternitz One-Time Signature Plus (WOTS+), a one-time signature scheme; XMSS, a single-tree scheme; and XMSS^MT, a multi-tree variant of XMSS.  Both XMSS and XMSS^MT use WOTS+ as a main building block. XMSS provides cryptographic digital signatures without relying on the conjectured hardness of mathematical problems.  Instead, it is proven that it only relies on the properties of cryptographic hash functions.  XMSS provides strong security guarantees and is even secure when the collision resistance of the underlying hash function is broken.  It is suitable for compact implementations, is relatively simple to implement, and naturally resists side-channel attacks. Unlike most other signature systems, hash-based signatures can so far withstand known attacks using quantum computers.</t></abstract>
</front>
<seriesInfo name='RFC' value='8391'/>
<seriesInfo name='DOI' value='10.17487/RFC8391'/>
</reference>

<reference anchor='RFC8446' target='https://www.rfc-editor.org/info/rfc8446'>
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
<author fullname='E. Rescorla' initials='E.' surname='Rescorla'><organization/></author>
<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>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3986.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4648.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5246.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5280.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5652.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6066.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6234.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6960.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6979.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7231.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7633.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7807.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8032.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8259.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8391.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8446.xml"/>

        <reference anchor="HTML401" target="http://www.w3.org/TR/1999/REC-html401-19991224"> target="https://www.w3.org/TR/2018/SPSD-html401-20180327">
          <front>
            <title>HTML 4.01 Specification</title>
            <author initials="D." surname="Raggett" fullname="David Raggett">
      <organization></organization>
              <organization/>
            </author>
            <author initials="A." surname="Le Hors" fullname="Arnaud Le Hors">
      <organization></organization>
              <organization/>
            </author>
            <author initials="I." surname="Jacobs" fullname="Ian Jacobs">
      <organization></organization>
              <organization/>
            </author>
            <date year="1999" month="December" day="24"/> year="2018" month="March"/>
          </front>
          <seriesInfo name="World Wide Web Consortium name="W3C Recommendation" value="REC-html401-19991224"/> value="SPSD-html401-20180327"/>
        </reference>

        <reference anchor="FIPS186-4" target="http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf">
          <front>
    <title>FIPS PUB 186-4</title>
    <author >
      <organization>NIST</organization>
            <title>Digital Signature Standard (DSS)</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2013" month="July" day="01"/> month="July"/>
          </front>
	  <seriesInfo name="FIPS PUB" value="186-4"/>
        </reference>

        <reference anchor="UNIXTIME" target="http://pubs.opengroup.org/onlinepubs/9699919799.2016edition/basedefs/V1_chap04.html#tag_04_16">
          <front>
            <title>The Open Group Base Specifications Issue 7 IEEE Std 1003.1-2008, 2016 Edition</title>
    <author > 7</title>
            <author>
              <organization>IEEE</organization>
            </author>
	    <date year="n.d."/> year="2016"/>
          </front>
	  <seriesInfo name="IEEE Std" value="1003.1-2008"/>
	  <refcontent>Section 4.16 Seconds Since the Epoch</refcontent>
        </reference>

        <reference anchor="X690" > anchor="X690">
          <front>
            <title>Information technology - ASN.1 encoding Rules: rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
    <author >
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2015" month="November"/>
  </front>
  <seriesInfo name="ISO/IEC" value="8825-1:2002"/>
</reference>

<reference anchor='RFC3553' target='https://www.rfc-editor.org/info/rfc3553'>
<front>
<title>An IETF URN Sub-namespace for Registered Protocol Parameters</title>
<author fullname='M. Mealling' initials='M.' surname='Mealling'><organization/></author>
<author fullname='L. Masinter' initials='L.' surname='Masinter'><organization/></author>
<author fullname='T. Hardie' initials='T.' surname='Hardie'><organization/></author>
<author fullname='G. Klyne' initials='G.' surname='Klyne'><organization/></author>
<date month='June' year='2003'/>
<abstract><t>This document describes a new sub-delegation for the 'ietf' URN namespace for registered protocol items.  The 'ietf' URN namespace is defined in RFC 2648 as a root for persistent URIs that refer to IETF- defined resources.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract> year="2021" month="February"/>
          </front>
	  <seriesInfo name='BCP' value='73'/>
<seriesInfo name='RFC' value='3553'/> name="ITU-T Recommendation" value="X.690"/>
          <seriesInfo name='DOI' value='10.17487/RFC3553'/> name="ISO/IEC" value="8825-1"/>
        </reference>

        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3553.xml"/>
      </references>

    <references title='Informative References'>

<reference anchor='RFC6962' target='https://www.rfc-editor.org/info/rfc6962'>
<front>
<title>Certificate Transparency</title>
<author fullname='B. Laurie' initials='B.' surname='Laurie'><organization/></author>
<author fullname='A. Langley' initials='A.' surname='Langley'><organization/></author>
<author fullname='E. Kasper' initials='E.' surname='Kasper'><organization/></author>
<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='RFC8126' target='https://www.rfc-editor.org/info/rfc8126'>
<front>
<title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
<author fullname='M. Cotton' initials='M.' surname='Cotton'><organization/></author>
<author fullname='B. Leiba' initials='B.' surname='Leiba'><organization/></author>
<author fullname='T. Narten' initials='T.' surname='Narten'><organization/></author>
<date month='June' year='2017'/>
<abstract><t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters.  To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper.  For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t><t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed.  This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t><t>This is the third edition of this document; it obsoletes RFC 5226.</t></abstract>
</front>
<seriesInfo name='BCP' value='26'/>
<seriesInfo name='RFC' value='8126'/>
<seriesInfo name='DOI' value='10.17487/RFC8126'/>
</reference>

<reference anchor='RFC8820' target='https://www.rfc-editor.org/info/rfc8820'>
<front>
<title>URI Design and Ownership</title>
<author fullname='M. Nottingham' initials='M.' surname='Nottingham'><organization/></author>
<date month='June' year='2020'/>
<abstract><t>Section 1.1.1 of RFC 3986 defines URI syntax as &quot;a federated and extensible naming system wherein each scheme's specification may further restrict the syntax and semantics of identifiers using that scheme.&quot;  In other words, the structure of a URI is defined by its scheme. While it is common for schemes to further delegate their substructure to the URI's owner, publishing independent standards that mandate particular forms of substructure in URIs is often problematic.</t><t>This document provides guidance on the specification of URI substructure in standards.</t><t>This document obsoletes RFC 7320 and updates RFC 3986.</t></abstract>
</front>
<seriesInfo name='BCP' value='190'/>
<seriesInfo name='RFC' value='8820'/>
<seriesInfo name='DOI' value='10.17487/RFC8820'/>
</reference>
      <references>
        <name>Informative References</name>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6962.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8820.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5912.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6268.xml"/>

        <reference anchor="CrosbyWallach" target="http://static.usenix.org/event/sec09/tech/full_papers/crosby.pdf">
          <front>
            <title>Efficient Data Structures for Tamper-Evident Logging</title>
            <author initials="S." surname="Crosby" fullname="Scott A. Crosby">
      <organization></organization>
              <organization/>
            </author>
            <author initials="D." surname="Wallach" fullname="Dan S. Wallach">
      <organization></organization>
              <organization/>
            </author>
            <date year="2009" month="August"/>
          </front>
  <seriesInfo name="Proceedings
          <refcontent>Proceedings of the 18th USENIX Security Symposium," value="Montreal"/> Symposium, Montreal</refcontent>
        </reference>

        <reference anchor="Chromium.Policy" target="http://www.chromium.org/Home/chromium-security/certificate-transparency"> target="https://googlechrome.github.io/CertificateTransparency/ct_policy.html">
          <front>
            <title>Chromium Certificate Transparency</title>
    <author > Transparency Policy</title>
            <author>
              <organization>The Chromium Projects</organization>
            </author>
    <date year="2014"/>
          </front>
        </reference>

        <reference anchor="JSON.Metadata" target="https://www.gstatic.com/ct/log_list/log_list_schema.json">
          <front>
            <title>Chromium Log Metadata JSON Schema</title>
    <author >
            <author>
              <organization>The Chromium Projects</organization>
            </author>
    <date year="2014"/>
          </front>
        </reference>

        <reference anchor="Chromium.Log.Policy" target="http://www.chromium.org/Home/chromium-security/certificate-transparency/log-policy"> target="https://googlechrome.github.io/CertificateTransparency/log_policy.html">
          <front>
            <title>Chromium Certificate Transparency Log Policy</title>
    <author >
            <author>
              <organization>The Chromium Projects</organization>
            </author>
    <date year="2014"/>
          </front>
        </reference>

        <reference anchor="CABBR" target="https://cabforum.org/wp-content/uploads/CA-Browser-Forum-BR-1.7.3.pdf">
          <front>
            <title>Baseline Requirements for the Issuance and Management of Publicly-Trusted Certificates</title>
    <author >
            <author>
              <organization>CA/Browser Forum</organization>
            </author>
            <date month="October" year="2020"/>
          </front>
  <format type="PDF" target="https://cabforum.org/wp-content/uploads/CA-Browser-Forum-BR-1.7.3.pdf"/>
	  <seriesInfo name="Version" value="1.7.3"/>
        </reference>

        <reference anchor="X.680">
          <front>
            <title>Information technology - Abstract Syntax Notation One (ASN.1): Specification of basic notation</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2021" month="February"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.680"/>
        </reference>

      </references>
    </references>

    <section anchor="v1_coexistence" title="Supporting numbered="true" toc="default">
      <name>Supporting v1 and v2 simultaneously (Informative)"> Simultaneously (Informative)</name>
      <t>Certificate Transparency logs have to be either v1 (conforming to <xref target="RFC6962"></xref>) target="RFC6962" format="default"/>) or
v2 (conforming to this document), as the data structures are incompatible incompatible, and so
a v2 log could not issue a valid v1 SCT.</t>
      <t>CT clients, however, can support v1 and v2 SCTs, SCTs for the same certificate, certificate
simultaneously, as v1 SCTs are delivered in different TLS, X.509 X.509, and OCSP
extensions than v2 SCTs.</t>
      <t>v1 and v2 SCTs for X.509 certificates can be validated independently. For
precertificates, v2 SCTs should be embedded in the TBSCertificate before
submission of the TBSCertificate (inside a v1 precertificate, as described in
Section 3.1. of
<xref target="RFC6962"></xref>) target="RFC6962" sectionFormat="of" section="3.1"/>) to a v1 log so that TLS clients conforming to
<xref target="RFC6962"></xref> target="RFC6962" format="default"/> but not this document are oblivious to the embedded v2 SCTs. An issuer
can follow these steps to produce an X.509 certificate with embedded v1 and v2
SCTs:</t>

<t><list style="symbols">
  <t>Create
      <ul spacing="normal">
        <li>Create a CMS precertificate precertificate, as described in <xref target="precertificates"/> target="precertificates"
	format="default"/>, and submit it to v2 logs.</t>
  <t>Embed logs.</li>
        <li>Embed the obtained v2 SCTs in the TBSCertificate, as described in
	<xref target="cert_transinfo_extension"/>.</t>
  <t>Use target="cert_transinfo_extension" format="default"/>.</li>
        <li>Use that TBSCertificate to create a v1 precertificate, as described in
Section 3.1. of
	<xref target="RFC6962"></xref> target="RFC6962" sectionFormat="of" section="3.1"/>, and submit it to v1 logs.</t>
  <t>Embed
	logs.</li>
        <li>Embed the v1 SCTs in the TBSCertificate, as described in Section 3.3 of
	<xref target="RFC6962"></xref>.</t>
  <t>Sign target="RFC6962" sectionFormat="of" section="3.3"/>.</li>
        <li>Sign that TBSCertificate (which now contains v1 and v2 SCTs) to issue the
	final X.509 certificate.</t>
</list></t> certificate.</li>
      </ul>
    </section>
    <section anchor="asn1_module" title="An numbered="true" toc="default">
      <name>An ASN.1 Module (Informative)"> (Informative)</name>
      <t>The following ASN.1 <xref target="X.680" format="default"/> module may be useful to implementors.</t>

<figure><artwork><![CDATA[ implementors. This module references <xref target="RFC5912" format="default"/> and <xref target="RFC6268" format="default"/>.</t>
<sourcecode type="asn.1"><![CDATA[
CertificateTransparencyV2Module-2021
 -- { id-mod-public-notary-v2 from above, in
        iso(1) identified-organization(3) ...
    form }
DEFINITIONS IMPLICIT TAGS ::= BEGIN

-- EXPORTS ALL --

IMPORTS
  EXTENSION
  FROM PKIX-CommonTypes-2009 -- RFC 5912
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-pkixCommon-02(57) }

  CONTENT-TYPE
  FROM CryptographicMessageSyntax-2010  -- RFC 6268
    { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
      pkcs-9(9) smime(16) modules(0) id-mod-cms-2009(58) }

  TBSCertificate
  FROM PKIX1Explicit-2009 -- RFC 5912
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-pkix1-explicit-02(51) }
;

--
-- Section 3.2.  Precertificates
--

ct-tbsCertificate CONTENT-TYPE ::= {
  TYPE TBSCertificate
  IDENTIFIED BY id-ct-tbsCertificate }

id-ct-tbsCertificate OBJECT IDENTIFIER ::= { 1 3 101 78 }

--
-- Section 7.1.  Transparency Information X.509v3 Extension
--

ext-transparencyInfo EXTENSION ::= {
   SYNTAX TransparencyInformationSyntax
   IDENTIFIED BY id-ce-transparencyInfo
   CRITICALITY { FALSE } }

id-ce-transparencyInfo OBJECT IDENTIFIER ::= { 1 3 101 75 }

TransparencyInformationSyntax ::= OCTET STRING

--
-- Section 7.1.1.  OCSP Response Extension
--

ext-ocsp-transparencyInfo EXTENSION ::= {
   SYNTAX TransparencyInformationSyntax
   IDENTIFIED BY id-pkix-ocsp-transparencyInfo
   CRITICALITY { FALSE } }

id-pkix-ocsp-transparencyInfo OBJECT IDENTIFIER ::=
   id-ce-transparencyInfo

--
-- Section 8.1.2.  Reconstructing the TBSCertificate
--

ext-embeddedSCT-CTv1 EXTENSION ::= {
   SYNTAX SignedCertificateTimestampList
   IDENTIFIED BY id-ce-embeddedSCT-CTv1
   CRITICALITY { FALSE } }

id-ce-embeddedSCT-CTv1 OBJECT IDENTIFIER ::= {
   1 3 6 1 4 1 11129 2 4 2 }

SignedCertificateTimestampList ::= OCTET STRING

END

]]></artwork></figure>

]]></sourcecode>
    </section>
    <section anchor="acknowledgements" numbered="false" toc="default">
      <name>Acknowledgements</name>
      <t>The authors would like to thank <contact fullname="Erwann Abelea"/>, <contact
      fullname="Robin Alden"/>, <contact fullname="Andrew Ayer"/>, <contact fullname="Richard
      Barnes"/>, <contact fullname="Al Cutter"/>, <contact fullname="David Drysdale"/>,
      <contact fullname="Francis Dupont"/>, <contact fullname="Adam Eijdenberg"/>, <contact
      fullname="Stephen Farrell"/>, <contact fullname="Daniel Kahn Gillmor"/>, <contact
      fullname="Paul Hadfield"/>, <contact fullname="Brad Hill"/>, <contact fullname="Jeff
      Hodges"/>, <contact fullname="Paul
      Hoffman"/>, <contact fullname="Jeffrey Hutzelman"/>, <contact fullname="Kat Joyce"/>,
      <contact fullname="Emilia Kasper"/>, <contact fullname="Stephen Kent"/>, <contact
      fullname="Adam Langley"/>, <contact fullname="SM"/>, <contact fullname="Alexey
      Melnikov"/>, <contact fullname="Linus
      Nordberg"/>, <contact fullname="Chris Palmer"/>, <contact fullname="Trevor Perrin"/>,
      <contact fullname="Pierre Phaneuf"/>, <contact fullname="Eric Rescorla"/>, <contact
      fullname="Rich Salz"/>, <contact fullname="Melinda Shore"/>, <contact fullname="Ryan
      Sleevi"/>, <contact fullname="Martin Smith"/>, <contact fullname="Carl Wallace"/>,
      and <contact fullname="Paul Wouters"/> for their valuable contributions.</t>
      <t>A big thank you to Symantec for kindly donating the OIDs from the 1.3.101 arc
      that are used in this document.</t>
    </section>
  </back>

<!-- ##markdown-source:
H4sIALh5LmEAA+y9aVsbWbYu+D1+RVzyeTqhSpIBD2mTWdmXxLjMKU9tcFad
znSjQAogCkmhowiBKdv3t/d617CHiBDgnE7dfppzKg1SxJ73mte7+v1+Uhf1
JN9J1/byRV2cFqOsztOjRTar5tkin42u0x/zRVWUs3R7sLmWjMvRLJvS8+NF
dlr3i7w+7dd4ur84HT168mi7f1JU/QfbSXlSlZO8zqudFB8naPesXFzvpPmH
eZIU8wX1WS+WVb29uflkc3stoe6ynfQwHy0XRX2dXJ3tpEdvd18dputvlieT
YpS+KutscR0NbiNJqjqbjY+zSTmjUV3nVVJNs0V9/F/LkjsvT0+TebGT/lSX
o15alYt6kZ9W9Nv1FL+8T5JsWZ+Xi50k7Scp/cj0fshn6YuMRpLzh+WCRvPX
sjyb5Om7v6Uv6vGAP89OThb5pX3FH+XTrJjspCf5bPI/z/jjwaicxq3vjrMp
NT+jL69b7R/MRrc1np2tbnt/WkyKLP1bVs3zRavxw6ui/le+mNCapX+dnjy/
paP8gptZ3RntRfoyr6p8UfzChcqpienKDt6WJ+khHbDxpJid+R7olNTFWdlu
X78IO1iUJ/+zko+5/WRWLqZZXVzmtOfp22d721tbT/TX+08eP9JfHzx68Fh/
fbj94JH79fGm/fro4bb++mjzkT3waPv+A/v1yaNN9+s31sU32/e37NdH9+/b
r483v9FfH2/et3Yfb31jjT3efmgtPL7/xFp4/EBG9vzo5YsHm/xpmtItOcvr
nfS8ruc79+5dXV0Nru4PaN3uHb29t/XkyZN7b/f3+uf1dEKv9PHB1vb2A3lV
iAGaSx8MNrfSw3k+EqpAJEBW2q4L//T13zQtZnTbng7St9kZ9V67z2Ufn2aX
xbjxXePd3UH6Ik+fl4uq8e7uYpYtx40vGy8fDNL/yEZEdBrvHtD5DL4YExXa
STHl/tZ2XyeNw5tXxey0tFmt/b1cTMbp34txnv49P0n3yhkoR7Gcpm9zOkPT
fDbmFVmjE9q9ls8O3hxuPX7Uf9C5J7PLyXx5Ug1mRVUPzsrLe/gFn9zDe/de
HRweDfDbgJsYzMen4fbgm/TNux9S/rZjV/iOoJFg0tubW/f7m9/0N7fow3ev
Dv5xdPByv3NwPLJyns/OFuVyzgennNH9y3mATx5hknSenwyoyUf5uMBC3DvJ
qnxMBPXej1vHo/NsvvlggFX5qs7OjjcfHG89CidwdJ6nr6mD9K/oIf2B3o1P
WpUeVNUyT79JD/b394kCjNOtzc37g60+cYvHPUzmUbovXa+aP96kv//x6Mnm
Ttj52gHtNFMAYmp1PjqflZPy7Drtp7uHrwZbKfGVckzUJn27nICDRAMjfoLh
Ejfajx5L13/Yf7vRS/eyWTmjZyet7/fo+xRk9yltNX2+LKrzfNx67Ck9thZs
26vyMp+e5AtM+eHKqR696x+tOMsHh6/vHezv7aSPiYT0t3ZoAbeJ/9oaOCoI
Lu3IzraRM3qJV29vUVYn13/PJpNsdN55aogP18VosKzyWfGBD01+mc/qe0R6
N5/cwzrfO11OJsfzjBhKdW/EDTZP9v4pLXRBrxHBqDNQ/uWoXi5oYWi46VE2
pXf7+0RK8MiL8uzMuMKNVOlwoONvEIfDUVnXoDvRt22SptNukbQZWg6/tJu2
+aS/+XgVbXmzKEd5jj2vcJpqugtbj+vz9N3hPt1KJwClh9fTeVkRzekRlXlZ
zkhwySbYivNFOaWPB29KkoquV9L8kT2HvXheTvN79km/0j7ujbzQJ2KcylXh
nlh/6SoJcdWpxC13L9Os/0lMuIrWaQvE6z8OX78avMzrjD7N2rOpdDpnesCI
/N4b1ffoyh5P6Ca5X46r0Tlx/ME/KyUJzeHTcUmtG+6U9h9v/Mrhu+2g9n/P
LcFE+3Nu/4t2h+f9xr/3K2a6+8MPb7s3aJSd0AXViV3N+yM6rrj8y/mkzMbV
vb3d/g+L8opuQ/8Znuv/8La/NfhmcL9JAL7XcYElgOUQv/2vZbHIiePWQgRw
X8AcstkoZ3r6MptlZ/wAXSd9XTSGyXX/CBoGkdlgdapVy7C3e08HmfIgoxXY
3uQ/hWraa2+ePvut1iDp9/skxVa05aM6SY7OiyolZWvJ8xrn1WhRnBAZvPTK
mBGPlRu/vne0kcwXJWk+5YTXbq7Lkk6EdPL7+Qe6PTlWkxqUBkjWIfXkmhbC
UaP1oxeHGwkNnkaQBme0SrMKzVyn1GtagGuPaTlTkrjw7LhHVDTN0mk2m+XY
vKxOiWDSMiTZ7Jp0trQuaS+IkweNYoKyP9zz3i4xTpLfL/EXdnxWEiHIefCF
nQTa+mpJusqobo3uKp9MeJTWE14MHsJq8BymdOYu82qAC0EcErtHHcigmZkt
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
K4xY+7PUrSW7OXetTrIlS4p5xUxpDH7Y2vSXBtrIN+jjVwbi2K9G9UpJzcrm
YLW8mOXwH2UOmh6zI6jIDQnMYlhYGacnYZyNJXGkbUWdu0S+NDAPmfRWVGyY
QkYvNBLJ3GWU/KWowdwrSLnfAMEDY7RhXK0AOFpNFBAcYF0YlQZ5UkTl7f8k
liFSLCRQAVo+cWysdtsaQaJgPgWAMxOecwaZKSp3lRXwzGW9aRGh4Dyp07Ja
teKNxDyMIGFNiFedSPIpThT7bKblcqY+g6yus9GFnwzmQOM6yc+lCu2C4dWk
PDaglUGXqOtC5FYQMqZqo9xuLLbFT4RuQSawarITRR1ScrUHsdysrxOlW7qg
AvMyE6nkY0EM6pLP/XWeLSqtTzIVpmalmwynVKT2MLkvSyL/+kYvbZRS71jT
RS5lFFQ/Osm0Lrtz2YfU+yQXG+U/5YTFDIWXuMEV5PjPywng69CZhJKp2sCo
isxSzGPduIcCBmiy/TS8ySLfuLRJhTszFnaFGoizs166d469XOLk/WS/D16Q
/vsGY7p+7w9d1Lo7ala9l2nk/o/xelQe1cqI9P6PhiYk/j2QQOIWoEVHpYYw
dPP4Mi1PGPoW/fda7CWGPOV8UcjVon15AqCiabQPrsjT2Pt2lCGaz+kFbGmH
5nNNkoho9loSm+IGELVe5baV8s6wiDI+nUAzT080epD9amy/yyrla1UH+J+r
rUQaX5FN4E5yfUVVlvTpVi2OtOtNgVM7LujXY4yhVa9JagsGK9OopPEcMMTp
sKNpS7nWYXPlXsWGVPggX7soqdz73UuoKqHPCGcrRNWWviB8jHOGCGMlPWzN
I2YTTV6vygZybnEaCnfKVi3pv2csg+seBr3RGGFrFrdjOVl5BK4g7STVRTGf
s0PlksHqr1Y/XlaOt2sgypglWl8KT4smvZGLaYQtOKFVU9Unlj93T6vUTz2D
9ZNc01gw7PbQWc6qwG7SUAN7pkYmodU7gML7oirGSdMBT7MMprjSjGG6Tqyh
nueTeaWgtAYtkDikRy4kMLo2jZrEfkBInzXrkXCNUyEZwiAmZcb6Cvw8Sp7Z
cSOeEjtKDaplNI2+mYZFFFmH09VKoqz1G0PSJNezI4TAYDUbOymHpWWP4UH6
QqNiu+vSB7ELlrQv1fMCccXpBxrf3DT6BCopz0gdh6KAPM+J6DnDZLBoKLBd
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

-->
</rfc>