<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-maldant-spice-smd-cwt-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="SMD-CWT">Selective Merkle Disclosure CBOR Web Tokens (SMD-CWT)</title>
    <seriesInfo name="Internet-Draft" value="draft-maldant-spice-smd-cwt-00"/>
    <author fullname="Beltram Maldant">
      <organization>SimpleLogin</organization>
      <address>
        <email>beltram.ietf@pm.me</email>
      </address>
    </author>
    <date year="2026" month="October" day="26"/>
    <area>Security</area>
    <workgroup>Secure Patterns for Internet CrEdentials</workgroup>
    <keyword>cose</keyword>
    <keyword>cwt</keyword>
    <keyword>selective disclosure</keyword>
    <abstract>
      <?line 58?>

<t>This document specifies an extension to Selective Disclosure CBOR Web
Tokens (SD-CWT) that reduces their size and improves their privacy
properties. In this extension, the individual hashes of the redacted
claims of a map or an array are replaced with the root hash of a Merkle
tree, and disclosed claims are presented with a Merkle proof.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://beltram.github.io/draft-maldant-spice-smd-cwt/draft-maldant-spice-smd-cwt.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-maldant-spice-smd-cwt/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Secure Patterns for Internet CrEdentials Working Group mailing list (<eref target="mailto:spice@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/spice/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/spice/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/beltram/draft-maldant-spice-smd-cwt"/>.</t>
    </note>
  </front>
  <middle>
    <?line 66?>

<section anchor="intro">
      <name>Introduction</name>
      <t>This document defines Selective Merkle Disclosure CBOR Web Tokens (SMD-CWT), an extension to SD-CWT <xref target="SD-CWT"/>.</t>
      <t>SD-CWT provides an efficient mechanism by which a Holder controls which
claims it presents to a Verifier, thereby improving the privacy of the
Holder. However, when the presentation is sparse and only a subset of the claims is disclosed, a
Verifier learns the total number of claims, reducing the
privacy benefit of selective disclosure. Furthermore, each redacted claim
adds 34 bytes to the presented token (SD-KBT), even though the claim
itself is not disclosed to the Verifier.</t>
      <t>To address both issues, this document specifies that, rather than hashing
each claim individually and placing the resulting hashes in a CBOR array,
the claims of each map or array are placed in a Merkle tree and only the root hash of that tree
is included in the SD-CWT. A presentation of the token then includes only
a Merkle proof attesting to the integrity of the disclosed claims. The
size of this proof is logarithmic in the number of claims, whereas the
size of an enumeration of all redacted claims is linear in that number.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>The CBOR examples in this document are shown in CBOR Extended Diagnostic Notation (EDN) <xref target="I-D.ietf-cbor-edn-literals"/>.</t>
      <t>Data model constraints are described using the Concise Data Definition Language (CDDL) <xref target="RFC8610"/>.</t>
      <t>This document uses terms from CWT <xref target="RFC8392"/>, COSE <xref target="RFC9052"/> <xref target="RFC9053"/>,
and JWT <xref target="RFC7519"/>.</t>
      <t>The terms Claim Name, Claim Key, and Claim Value are defined in <xref target="RFC8392"/>.</t>
      <t>This document defines the following terms:</t>
      <dl>
        <dt>Selective Merkle Disclosure CBOR Web Token (SMD-CWT):</dt>
        <dd>
          <t>An SD-CWT containing claims that can be selectively disclosed using a Merkle proof.</t>
        </dd>
        <dt>Selective Merkle Disclosure Key Binding Token (SMD-KBT):</dt>
        <dd>
          <t>An SD-KBT used to demonstrate possession of a confirmation method and to present claims with a Merkle proof.</t>
        </dd>
        <dt>Copath:</dt>
        <dd>
          <t>For a given leaf of a Merkle tree, the siblings of the nodes on the path from that leaf to the root.</t>
        </dd>
      </dl>
      <t>All other terms used in this document have the meaning defined in <xref target="SD-CWT"/>.</t>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>SMD-CWT is an extension of SD-CWT: every SD-CWT is a valid SMD-CWT, but an SMD-CWT is not necessarily a valid SD-CWT.
The two differ only in the way redacted claims are authenticated and presented.</t>
      <t>An SD-CWT Issuer enumerates the hashes of all redacted claims, either in the <tt>redacted_claim_keys</tt> array of a map, or in
place of the redacted elements of an array. In contrast, an SMD-CWT Issuer places these hashes at the leaves of a
left-balanced Merkle tree and replaces the set of claims in the original payload with the root hash of that tree.</t>
      <t>A Holder then selectively presents claims to a Verifier in an SMD-KBT by replacing the disclosed claims with proofs of
their inclusion in the Merkle tree. The root hash of that tree is authenticated by the Issuer in the SMD-CWT.</t>
    </section>
    <section anchor="smd-cwt-definition">
      <name>Issuance</name>
      <t>An SMD-CWT Issuer is also an SD-CWT Issuer: it <bcp14>MUST</bcp14> be capable of encoding and signing a regular SD-CWT when
requested and, in addition, supports the generation of SMD-CWTs.</t>
      <t><xref target="fig-cwt-claimset-example"/> shows an example CWT payload. Common claims are omitted for brevity.</t>
      <figure anchor="fig-cwt-claimset-example">
        <name>CWT Claims Set</name>
        <sourcecode type="cbor-diag"><![CDATA[
{
    "most_recent_inspection_passed": true,
    "inspector_license_number": "ABCD-123456",
    "inspection_dates" : [
        1549560720,   / 2019-02-07T17:32:00 /
        1612498440,   / 2021-02-04T20:14:00 /
        1674004740,   / 2023-01-17T17:19:00 /
    ],
    "inspection_location": {
        "country": "us",            / United States /
        "region": "ca",             / California /
        "postal_code": "94188"
    }
}
]]></sourcecode>
      </figure>
      <section anchor="tbr-tag">
        <name>Pre-Issuance</name>
        <t>An SMD-CWT Issuer <bcp14>MUST</bcp14> support the <tt>To Be Redacted Tag</tt> and the <tt>To Be Decoy Tag</tt>, both of which are defined in
<xref section="17.3.1" sectionFormat="of" target="SD-CWT"/>.</t>
        <t>The <tt>To Be Redacted Root Tag</tt> (tag 59), defined in <xref target="tbrrt"/>, indicates to the Issuer that a claim or an array element
is intended to be selectively disclosed with a Disclosure Proof. This tag wraps the element to be redacted in an array
of size 2. The first element of this array is the base-2 logarithm of the size of the Merkle tree used for redaction.
This size <bcp14>MAY</bcp14> be
greater than the number of claims to redact, but <bcp14>MUST NOT</bcp14> be lower.</t>
        <t><xref target="fig-cwt-claimset-pre-issuance"/> shows the example payload with the corresponding annotations.</t>
        <figure anchor="fig-cwt-claimset-pre-issuance">
          <name>CWT Claims Set Before Issuance</name>
          <sourcecode type="cbor-diag"><![CDATA[
59([3, { /merkle-redacted of size 8/
    "most_recent_inspection_passed": true, /not-redacted/
    "inspector_license_number": 58("ABCD-123456"), /redacted/
    59([3, "inspection_dates"]) : [ /merkle-redacted of size 8/
        58(1549560720), /redacted/
        58(1612498440), /redacted/
        58(1674004740), /redacted/
    ],
    59([2, "inspection_location"]): { /merkle-redacted of size 4/
        "country": 58("us"),   /redacted/
        "region": 58("ca"),    /redacted/
        "postal_code": "94188" /not-redacted/
    }
}])
]]></sourcecode>
        </figure>
        <t>For each occurrence of the To Be Redacted Root Tag, at any nesting level, a Merkle tree is built, and all elements of
the tagged array or map are placed at its leaves.</t>
      </section>
      <section anchor="merkle-tree">
        <name>Merkle Tree</name>
        <t>This specification uses binary Merkle trees similar to those defined in <xref section="2.1.1" sectionFormat="of" target="RFC9162"/>, with one
difference: no domain separation prefix is added to the leaves and the nodes (see <xref target="merkle-root-hash"/>). A higher
branching factor would provide neither additional benefit nor the desired properties.</t>
        <t>The Merkle tree is a left-balanced perfect binary tree, as shown in <xref target="fig-merkle-tree-example"/>. Unbalanced trees are
not used, as they are vulnerable to forgery attacks. Perfect binary trees are also easier to represent in memory, and
their node indexes are easier to compute, as explained in <xref section="C" sectionFormat="of" target="RFC9420"/>.</t>
        <figure anchor="fig-merkle-tree-example">
          <name>A 3-Claim Merkle Tree</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="272" viewBox="0 0 272 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 56,160 L 56,176" fill="none" stroke="black"/>
                <path d="M 104,152 L 104,176" fill="none" stroke="black"/>
                <path d="M 128,48 L 128,64" fill="none" stroke="black"/>
                <path d="M 152,152 L 152,176" fill="none" stroke="black"/>
                <path d="M 200,152 L 200,176" fill="none" stroke="black"/>
                <path d="M 96,64 L 160,64" fill="none" stroke="black"/>
                <path d="M 80,96 L 100,136" fill="none" stroke="black"/>
                <path d="M 160,64 L 172,88" fill="none" stroke="black"/>
                <path d="M 180,104 L 196,136" fill="none" stroke="black"/>
                <path d="M 64,128 L 96,64" fill="none" stroke="black"/>
                <path d="M 156,136 L 172,104" fill="none" stroke="black"/>
                <g class="text">
                  <text x="132" y="36">root</text>
                  <text x="52" y="100">h(h(A)</text>
                  <text x="108" y="100">|h(B))</text>
                  <text x="216" y="100">h(h(C)||h(d))</text>
                  <text x="52" y="148">h(A)</text>
                  <text x="108" y="148">h(B)</text>
                  <text x="156" y="148">h(C)</text>
                  <text x="204" y="148">h(d)</text>
                  <text x="56" y="196">A</text>
                  <text x="104" y="196">B</text>
                  <text x="152" y="196">C</text>
                  <text x="192" y="196">d</text>
                  <text x="24" y="228">Node:</text>
                  <text x="56" y="228">0</text>
                  <text x="80" y="228">1</text>
                  <text x="104" y="228">2</text>
                  <text x="128" y="228">3</text>
                  <text x="152" y="228">4</text>
                  <text x="176" y="228">5</text>
                  <text x="200" y="228">6</text>
                  <text x="24" y="260">Leaf:</text>
                  <text x="56" y="260">0</text>
                  <text x="104" y="260">1</text>
                  <text x="152" y="260">2</text>
                  <text x="200" y="260">3</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
              root
               |
           .---+---.
          /         \
   h(h(A)||h(B))    h(h(C)||h(d))
        / \         / \
       /   \       /   \
    h(A)   h(B)  h(C)  h(d)
      |     |     |     |
      |     |     |     |
      A     B     C    d

Node: 0  1  2  3  4  5  6

Leaf: 0     1     2     3
]]></artwork>
          </artset>
        </figure>
        <t>In <xref target="fig-cwt-claimset-pre-issuance"/>, the redaction of the "inspection_location" claim places the "country" claim at
node index 0 and the "region" claim at node index 2. Since a size of 2 is requested, the tree has a height of 2 and its
last node index is 6, as in <xref target="fig-merkle-tree-example"/>.</t>
        <section anchor="decoys">
          <name>Decoys</name>
          <t>Decoys serve a different purpose than in SD-CWT: they do not directly hinder the Verifier's inference of private
information. Instead, they act as a blinding factor that prevents a Verifier from inferring the number of leaves, since
the hash of a blank leaf is the hash of zero bytes. Decoys are therefore mandatory.</t>
          <t>Replacing every blank leaf with a Decoy would needlessly inflate the SMD-CWT. Instead, for each node in the Copath of
the
rightmost entry, the leftmost blank leaf of the subtree rooted at that node <bcp14>MUST</bcp14> be replaced with a Decoy. When the
entries fill all the leaves of the tree, no Decoy is added.</t>
          <figure anchor="fig-placing-decoys">
            <name>Placing Decoys</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="352" width="792" viewBox="0 0 792 352" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 128,176 L 128,192" fill="none" stroke="black"/>
                  <path d="M 224,64 L 224,128" fill="none" stroke="black"/>
                  <path d="M 320,176 L 320,192" fill="none" stroke="black"/>
                  <path d="M 416,48 L 416,64" fill="none" stroke="black"/>
                  <path d="M 512,176 L 512,192" fill="none" stroke="black"/>
                  <path d="M 608,64 L 608,80" fill="none" stroke="black"/>
                  <path d="M 608,112 L 608,128" fill="none" stroke="black"/>
                  <path d="M 704,176 L 704,192" fill="none" stroke="black"/>
                  <path d="M 224,64 L 608,64" fill="none" stroke="black"/>
                  <path d="M 144,128 L 304,128" fill="none" stroke="black"/>
                  <path d="M 528,128 L 688,128" fill="none" stroke="black"/>
                  <path d="M 96,192 L 160,192" fill="none" stroke="black"/>
                  <path d="M 288,192 L 352,192" fill="none" stroke="black"/>
                  <path d="M 480,192 L 544,192" fill="none" stroke="black"/>
                  <path d="M 672,192 L 736,192" fill="none" stroke="black"/>
                  <path d="M 88,240 L 96,256" fill="none" stroke="black"/>
                  <path d="M 160,192 L 168,208" fill="none" stroke="black"/>
                  <path d="M 184,240 L 192,256" fill="none" stroke="black"/>
                  <path d="M 280,240 L 288,256" fill="none" stroke="black"/>
                  <path d="M 304,128 L 312,144" fill="none" stroke="black"/>
                  <path d="M 352,192 L 360,208" fill="none" stroke="black"/>
                  <path d="M 376,240 L 384,256" fill="none" stroke="black"/>
                  <path d="M 472,240 L 480,256" fill="none" stroke="black"/>
                  <path d="M 544,192 L 552,208" fill="none" stroke="black"/>
                  <path d="M 568,240 L 576,256" fill="none" stroke="black"/>
                  <path d="M 664,240 L 672,256" fill="none" stroke="black"/>
                  <path d="M 688,128 L 696,144" fill="none" stroke="black"/>
                  <path d="M 736,192 L 744,208" fill="none" stroke="black"/>
                  <path d="M 760,240 L 768,256" fill="none" stroke="black"/>
                  <path d="M 64,256 L 72,240" fill="none" stroke="black"/>
                  <path d="M 88,208 L 96,192" fill="none" stroke="black"/>
                  <path d="M 136,144 L 144,128" fill="none" stroke="black"/>
                  <path d="M 160,256 L 168,240" fill="none" stroke="black"/>
                  <path d="M 256,256 L 264,240" fill="none" stroke="black"/>
                  <path d="M 280,208 L 288,192" fill="none" stroke="black"/>
                  <path d="M 352,256 L 360,240" fill="none" stroke="black"/>
                  <path d="M 448,256 L 456,240" fill="none" stroke="black"/>
                  <path d="M 472,208 L 480,192" fill="none" stroke="black"/>
                  <path d="M 520,144 L 528,128" fill="none" stroke="black"/>
                  <path d="M 544,256 L 552,240" fill="none" stroke="black"/>
                  <path d="M 640,256 L 648,240" fill="none" stroke="black"/>
                  <path d="M 664,208 L 672,192" fill="none" stroke="black"/>
                  <path d="M 736,256 L 744,240" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="232,104 220,98.4 220,109.6" fill="black" transform="rotate(90,224,104)"/>
                  <g class="text">
                    <text x="416" y="36">X</text>
                    <text x="608" y="100">W</text>
                    <text x="128" y="164">R</text>
                    <text x="320" y="164">S</text>
                    <text x="512" y="164">T</text>
                    <text x="704" y="164">U</text>
                    <text x="80" y="228">J</text>
                    <text x="176" y="228">K</text>
                    <text x="272" y="228">L</text>
                    <text x="368" y="228">M</text>
                    <text x="464" y="228">N</text>
                    <text x="560" y="228">O</text>
                    <text x="656" y="228">P</text>
                    <text x="752" y="228">Q</text>
                    <text x="56" y="276">A</text>
                    <text x="104" y="276">B</text>
                    <text x="152" y="276">C</text>
                    <text x="200" y="276">D</text>
                    <text x="248" y="276">E</text>
                    <text x="296" y="276">F</text>
                    <text x="344" y="276">G</text>
                    <text x="392" y="276">H</text>
                    <text x="440" y="276">I</text>
                    <text x="488" y="276">d</text>
                    <text x="536" y="276">d</text>
                    <text x="584" y="276">_</text>
                    <text x="632" y="276">d</text>
                    <text x="680" y="276">_</text>
                    <text x="728" y="276">_</text>
                    <text x="776" y="276">_</text>
                    <text x="24" y="308">Node:</text>
                    <text x="56" y="308">0</text>
                    <text x="80" y="308">1</text>
                    <text x="104" y="308">2</text>
                    <text x="128" y="308">3</text>
                    <text x="152" y="308">4</text>
                    <text x="176" y="308">5</text>
                    <text x="200" y="308">6</text>
                    <text x="224" y="308">7</text>
                    <text x="248" y="308">8</text>
                    <text x="272" y="308">9</text>
                    <text x="300" y="308">10</text>
                    <text x="324" y="308">11</text>
                    <text x="348" y="308">12</text>
                    <text x="372" y="308">13</text>
                    <text x="396" y="308">14</text>
                    <text x="420" y="308">15</text>
                    <text x="444" y="308">16</text>
                    <text x="468" y="308">17</text>
                    <text x="492" y="308">18</text>
                    <text x="516" y="308">19</text>
                    <text x="540" y="308">20</text>
                    <text x="564" y="308">21</text>
                    <text x="588" y="308">22</text>
                    <text x="612" y="308">23</text>
                    <text x="636" y="308">24</text>
                    <text x="660" y="308">25</text>
                    <text x="684" y="308">26</text>
                    <text x="708" y="308">27</text>
                    <text x="732" y="308">28</text>
                    <text x="756" y="308">29</text>
                    <text x="780" y="308">30</text>
                    <text x="24" y="340">Leaf:</text>
                    <text x="56" y="340">0</text>
                    <text x="104" y="340">1</text>
                    <text x="152" y="340">2</text>
                    <text x="200" y="340">3</text>
                    <text x="248" y="340">4</text>
                    <text x="296" y="340">5</text>
                    <text x="344" y="340">6</text>
                    <text x="392" y="340">7</text>
                    <text x="440" y="340">8</text>
                    <text x="488" y="340">9</text>
                    <text x="540" y="340">10</text>
                    <text x="588" y="340">11</text>
                    <text x="636" y="340">12</text>
                    <text x="684" y="340">13</text>
                    <text x="732" y="340">14</text>
                    <text x="780" y="340">15</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
                                                   X
                                                   |
                           .-----------------------+-----------------------.
                           |                                               |
                           V                                               W
                           |                                               |
                 .---------+---------.                           .---------+---------.
                /                     \                         /                     \
               R                       S                       T                       U
               |                       |                       |                       |
           .---+---.               .---+---.               .---+---.               .---+---.
          /         \             /         \             /         \             /         \
         J           K           L           M           N           O           P           Q
        / \         / \         / \         / \         / \         / \         / \         / \
       /   \       /   \       /   \       /   \       /   \       /   \       /   \       /   \
      A     B     C     D     E     F     G     H     I     d     d     _     d     _     _     _

Node: 0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Leaf: 0     1     2     3     4     5     6     7     8     9     10    11    12    13    14    15
]]></artwork>
            </artset>
          </figure>
          <t>In <xref target="fig-placing-decoys"/>, the tree contains 9 entries. Decoys (<tt>d</tt>) are placed as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>The rightmost entry of the tree is <tt>I</tt>.</t>
            </li>
            <li>
              <t>Its copath consists of nodes <tt>18</tt>, <tt>21</tt>, <tt>27</tt>, and <tt>7</tt> (<tt>_</tt>, <tt>O</tt>, <tt>U</tt>, and <tt>V</tt>).</t>
            </li>
            <li>
              <t>For each node in this copath, the leftmost blank leaf of its subtree is replaced with a Decoy. A blank copath node
that is itself a leaf, such as <tt>18</tt>, is replaced directly.</t>
            </li>
            <li>
              <t>Consequently, nodes <tt>18</tt>, <tt>20</tt>, and <tt>24</tt> are replaced with Decoys.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="merkle-root-hash">
        <name>Computing the Merkle Root Hash</name>
        <t>The Issuer then computes the root hash of the Merkle tree as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>Each entry is encoded as a <tt>bstr-encoded-salted-merkle-entry</tt>, as defined in <xref target="cddl-salted-array"/>.</t>
          </li>
          <li>
            <t>The resulting bytes are hashed using the hash algorithm indicated by <tt>sd_alg</tt> in the protected header.</t>
          </li>
          <li>
            <t>The hash of a parent node is the hash of the concatenation of the hashes of its two children, the hash of the left
child coming first.</t>
          </li>
        </ol>
        <t>This operation is denoted <tt>MTH</tt> (Merkle Tree Hash), similarly to the one described in <xref section="2.1.1" sectionFormat="of" target="RFC9162"/>.
Unlike in <xref target="RFC9162"/>, no domain separation prefix is added to the leaves and the nodes: since the tree is balanced and
its size is authenticated by the Issuer, all leaves are at the same depth. The <tt>MTH</tt> of an interior node therefore
cannot be used as the hash of a leaf, and second preimage resistance between leaves and nodes is not required.</t>
        <section anchor="inserting-the-merkle-root-hash-in-the-payload">
          <name>Inserting the Merkle Root Hash in the Payload</name>
          <t>The root hash is then inserted into the original payload in place of the redacted claims. These claims are declared
within a container, which is either a map or an array. Since the container itself is annotated with the <tt>To Be Redacted
Root Tag</tt>, it cannot contain regular <tt>redacted_claim_keys</tt> (simple value 59) or redacted array elements (tag 60).</t>
          <t>Regardless of the type of the parent container, the root hash is represented as a <tt>redacted_root_hash</tt>: an array of two
elements, the first of which is the logarithmic size of the Merkle tree producing the root hash, and the second of
which is the root hash itself.</t>
          <figure anchor="redacted-root-hash">
            <name>Redacted Root Hash</name>
            <sourcecode type="cddl"><![CDATA[
redacted_root_hash = [
  uint,  ; base-2 logarithm of the number of leaves represented in this root hash
  bstr, ; root hash
]
]]></sourcecode>
          </figure>
          <t>If the redaction occurs in a map, the <tt>redacted_root_hash</tt> is placed in the <tt>redacted_claim_hash</tt> claim.</t>
          <figure anchor="redacted-claim-hash">
            <name>Redacted Claim Hash</name>
            <sourcecode type="cddl"><![CDATA[
/ redacted_claim_hash / simple(60) : [ uint, bstr ] / redacted_root_hash /
]]></sourcecode>
          </figure>
          <t>If the redaction occurs in an array, the root hash is placed in an <tt>redacted_element_hash</tt> element appended to the
array, after the elements that are not redacted.</t>
          <figure anchor="redacted-element-hash">
            <name>Redacted Element Hash</name>
            <sourcecode type="cddl"><![CDATA[
"inspection_dates" : [
    1612498440, / item 1 not redacted /
    89([ uint, bstr ]) / root hash of item 0 and 2 /
],
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="disclosure">
        <name>Disclosure</name>
        <t><xref target="fig-smd-cwt-disclosures"/> shows the disclosure of the <tt>inspection_location</tt> claim from
<xref target="fig-cwt-claimset-example"/>.</t>
        <figure anchor="fig-smd-cwt-disclosures">
          <name>SMD-CWT Disclosures</name>
          <sourcecode type="cbor-diag"><![CDATA[
<<[
    [
        /salt/   h'e39612407e99a347d61442957b3dfdac',
        /value/  "us",
        /claim/  "country"
    ],
    [
        /salt/   h'4569990258b25a5267c17a3e3a225ec3',
        /value/  "ca",
        /claim/  "region"
    ],
    [
        /salt/   h'e27403129cd88bf8fee4193e65339a35',
    ]
]>>
]]></sourcecode>
        </figure>
        <t>In an SMD-CWT, a Disclosure is an array of all redacted elements of a given container (either a CBOR map or array).
Each of these elements has the structure described in <xref section="3.2" sectionFormat="of" target="SD-CWT"/>, except that they are not individually
wrapped in a CBOR bstr (but the outer disclosure is).</t>
        <t>This Disclosure, along with all other Disclosures, <bcp14>MUST</bcp14> be placed in the <tt>sd_claims</tt> unprotected header
parameter of the SMD-CWT, as defined in <xref target="SD-CWT"/>.</t>
        <figure anchor="cddl-salted-array">
          <name>CDDL of Salted Disclosed Claims</name>
          <sourcecode type="cddl"><![CDATA[
; an array of bstr-encoded Salted Disclosed Claims
; in SMD-CWT
salted-merkle-array = [ +bstr-encoded-salted-merkle-entry ]
bstr-encoded-salted-merkle-entry = bstr .cbor salted-merkle-entries

; in SMD-KBT
salted-array-proofs = [ +bstr-encoded-salted-proof ]
bstr-encoded-salted-proof = bstr .cbor disclosure-proof

; where salted-claim, salted-element and decoy are already defined in {{SD-CWT}}
salted-merkle-entry = salted-claim / salted-element / decoy

salted-merkle-entries = [ +salted-merkle-entry ]

; one Merkle proof per presented leaf, ordered by increasing node index
disclosure-proof = [ +merkle-proof ]

merkle-proof = [
  redacted-entry,
  * bstr             ; hash of a copath node, from the leaf up to the root
]

; a presented entry prefixed with the node index of its leaf; Decoys are never presented
redacted-entry = salted-merkle-claim / salted-merkle-element
salted-merkle-claim = [
  uint,              ; node index of the leaf
  bstr .size 16,     ; 128-bit salt
  any,               ; Claim Value
  (int / text)       ; Claim Key
]
salted-merkle-element = [
  uint,              ; node index of the leaf
  bstr .size 16,     ; 128-bit salt
  any                ; Claim Value
]

; repeated here
salted-claim = [
  bstr .size 16,     ; 128-bit salt
  any,               ; Claim Value
  (int / text)       ; Claim Key
]
salted-element = [
  bstr .size 16,     ; 128-bit salt
  any                ; Claim Value
]
decoy = [
  bstr .size 16      ; 128-bit salt
]

]]></sourcecode>
        </figure>
        <t><xref target="fig-issued-smd-cwt"/> shows the SMD-CWT issued from <xref target="fig-cwt-claimset-pre-issuance"/>. Each of the three containers
tagged with the To Be Redacted Root Tag is replaced with a Redacted Root Hash, and its Disclosure is placed in
<tt>sd_claims</tt>:</t>
        <figure anchor="fig-issued-smd-cwt">
          <name>Issued SMD-CWT with all disclosures</name>
          <sourcecode type="cbor-diag"><![CDATA[
/ cose-sign1 / 18([  / issuer SMD-CWT /
  / CWT protected / << {
    / alg /    1  : -35, / ES384 /
    / kid /    4  : 'https://issuer.example/cose-key3',
    / typ /    16 : 294, / smd-cwt+sd-cwt (TBD1) /
    / sd_alg / 170 : -16  / SHA256 /
  } >>,
  / CWT unprotected / {
    / sd_claims / 17 : [ / these are all the disclosures /
        / top-level claims /
        <<[
            [
                /salt/   h'34821e0250edb1b8aa1e7fcaba161dd5',
                /value/  "ABCD-123456",
                /claim/  "inspector_license_number"
            ],
            [
                /salt/   h'96e374cd67609df517d855e6ad3892f5'
            ],
            [
                /salt/   h'dab6a2fe5be976c64c0006d738fca0ef'
            ],
            [
                /salt/   h'ae02b9b92e7ca06c3326b357118fcc57'
            ]
        ]>>,
        / inspection_dates /
        <<[
            [
                /salt/   h'ad696c9e08b91319073b35c4df54715e',
                /value/  1549560720   / inspected 7-Feb-2019 /
            ],
            [
                /salt/   h'7ed13a094d0effbf257f5522fdb87446',
                /value/  1612498440   / inspected 4-Feb-2021 /
            ],
            [
                /salt/   h'd006ff82a4d84bcade7a008ad0fadb6e',
                /value/  1674004740   / inspected 17-Jan-2023 /
            ],
            [
                /salt/   h'ff65d029bca807f1fcd7fc7a66223ae1'
            ],
            [
                /salt/   h'c7ecad77d36b5b171573d2e32d650a1e'
            ]
        ]>>,
        / inspection_location /
        <<[
            [
                /salt/   h'e39612407e99a347d61442957b3dfdac',
                /value/  "us",
                /claim/  "country"
            ],
            [
                /salt/   h'4569990258b25a5267c17a3e3a225ec3',
                /value/  "ca",
                /claim/  "region"
            ],
            [
                /salt/   h'e27403129cd88bf8fee4193e65339a35'
            ]
        ]>>
    ]
  },
  / CWT payload / << {
    / iss / 1   : "https://issuer.example",
    / sub / 2   : "https://holder.example",
    / exp / 4   : 1725330600,  /2024-09-03T02:30:00+00:00Z/
    / nbf / 5   : 1725243900,  /2024-09-02T02:25:00+00:00Z/
    / iat / 6   : 1725244200,  /2024-09-02T02:30:00+00:00Z/
    / cnf / 8   : {
      / cose key / 1 : {
        / kty /  1: 2,  / EC2   /
        / crv / -1: 1,  / P-256 /
        / x /   -2: h'8554eb275dcd6fbd1c7ac641aa2c90d9
                      2022fd0d3024b5af18c7cc61ad527a2d',
        / y /   -3: h'4dc7ae2c677e96d0cc82597655ce92d5
                      503f54293d87875d1e79ce4770194343'
      }
    },
    "most_recent_inspection_passed": true,
    "inspection_dates": [
        / redacted_element_hash of all inspection dates /
        89([3, h'a9e2b659695a7af97fcf25f8e833ffa2
                 0a4316fe29644715bdbd3804ac2bed99'])
    ],
    "inspection_location": {
        "postal_code": "94188",
        / redacted_claim_hash of country and region /
        simple(60) : [2, h'02d992604bf0618156a8f5eef336f676
                        1db9af99edbc662e7c32850557a0ebd9']
    },
    / redacted_claim_hash of inspector_license_number /
    simple(60) : [3, h'3641ce21bec3c8c109da92b0be662719
                    b67cd8a99e99cd3b379c1ff466c0ec28']
  } >>,
  / CWT signature / h'dc15ca869bad13b9a827191d7d71a444
                      7ff213168f401982009a1c3629bce4a5
                      921642d9f15707541fdc7d9bad5d37b6
                      5d4d779b72273b9d1776a6675920a1a2
                      68272dc848858b9ccdfc45521bbb3247
                      316db1b829b63d63198af2b608826768'
])
]]></sourcecode>
        </figure>
      </section>
      <section anchor="content-type">
        <name>Content-Type</name>
        <t>An SMD-CWT <bcp14>MUST</bcp14> declare its content type by including the <tt>typ</tt> protected header parameter <xref target="RFC9596"/> with one of the
following values:</t>
        <ul spacing="normal">
          <li>
            <t>the unsigned integer Constrained Application Protocol (CoAP) <xref target="RFC7252"/> content-format value TBD1 (294 suggested);
or</t>
          </li>
          <li>
            <t>the string content type value <tt>application/smd-cwt+sd-cwt</tt>.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="smd-kbt">
      <name>Presentation</name>
      <t>A Holder can selectively present some of the previously redacted claims in an SMD-KBT. An SMD-KBT has the same
structure as an SD-KBT. The only difference is that, rather than simply omitting the Disclosures it does not wish to
reveal, the Holder transforms each Disclosure introduced by this document from a simple enumeration of values into a
Disclosure Proof: an array containing one Merkle proof per presented leaf.</t>
      <t>The Merkle proofs of a Disclosure Proof are not independent of each other. The hash of a copath node is not included
in a Merkle proof when its subtree contains a presented leaf, since the Verifier recomputes it, or when it is already
included in the Merkle proof of a previous leaf.</t>
      <t>For a given Disclosure, the Holder proceeds as follows:</t>
      <ol spacing="normal" type="1"><li>
          <t>Iterate over the non-Decoy entries and select those to be presented. In the example of <xref target="fig-presentation-tree"/>,
leaves <tt>A</tt> to <tt>E</tt> are iterated over, and only <tt>A</tt>, <tt>D</tt>, and <tt>E</tt> are presented.</t>
        </li>
        <li>
          <t>Initialize a visited set with the node indexes of the selected leaves and of all their ancestors. In the example of
<xref target="fig-presentation-tree"/>, the visited set contains nodes 0, 6, and 8 (<tt>A</tt>, <tt>D</tt>, and <tt>E</tt>) and nodes 1, 3, 5, 7, 9,
and 11 (<tt>J</tt>, <tt>R</tt>, <tt>K</tt>, <tt>V</tt>, <tt>L</tt>, and <tt>S</tt>).</t>
        </li>
        <li>
          <t>For each selected leaf, from left to right, build its Merkle proof as an array:
          </t>
          <ol spacing="normal" type="1"><li>
              <t>Build a Redacted Entry by prefixing the SMD-CWT entry with the node index of the leaf, and place it as the
first element of the Merkle proof.</t>
            </li>
            <li>
              <t>Walk the copath of that leaf, from the leaf up to the root. For each node of the copath:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>If this node is in the visited set, skip it.</t>
                </li>
                <li>
                  <t>Otherwise, append the hash of that node to the Merkle proof and add the node to the visited set. If that
node is a leaf, its hash is the hash of its entry, computed as described in <xref target="merkle-root-hash"/>.
Otherwise, its hash is the <tt>MTH</tt> of the subtree rooted at that node.</t>
                </li>
              </ol>
            </li>
          </ol>
        </li>
        <li>
          <t>The Disclosure Proof is the array of the Merkle proofs, ordered by increasing node index of their leaf.</t>
        </li>
      </ol>
      <figure anchor="fig-presentation-tree">
        <name>Merkle Tree of a Presentation</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="288" width="408" viewBox="0 0 408 288" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 128,112 L 128,128" fill="none" stroke="black"/>
              <path d="M 224,48 L 224,64" fill="none" stroke="black"/>
              <path d="M 320,112 L 320,128" fill="none" stroke="black"/>
              <path d="M 144,64 L 304,64" fill="none" stroke="black"/>
              <path d="M 96,128 L 160,128" fill="none" stroke="black"/>
              <path d="M 288,128 L 352,128" fill="none" stroke="black"/>
              <path d="M 88,176 L 96,192" fill="none" stroke="black"/>
              <path d="M 160,128 L 168,144" fill="none" stroke="black"/>
              <path d="M 184,176 L 192,192" fill="none" stroke="black"/>
              <path d="M 280,176 L 288,192" fill="none" stroke="black"/>
              <path d="M 304,64 L 312,80" fill="none" stroke="black"/>
              <path d="M 352,128 L 360,144" fill="none" stroke="black"/>
              <path d="M 376,176 L 384,192" fill="none" stroke="black"/>
              <path d="M 64,192 L 72,176" fill="none" stroke="black"/>
              <path d="M 88,144 L 96,128" fill="none" stroke="black"/>
              <path d="M 136,80 L 144,64" fill="none" stroke="black"/>
              <path d="M 160,192 L 168,176" fill="none" stroke="black"/>
              <path d="M 256,192 L 264,176" fill="none" stroke="black"/>
              <path d="M 280,144 L 288,128" fill="none" stroke="black"/>
              <path d="M 352,192 L 360,176" fill="none" stroke="black"/>
              <g class="text">
                <text x="224" y="36">V</text>
                <text x="128" y="100">R</text>
                <text x="320" y="100">S</text>
                <text x="80" y="164">J</text>
                <text x="176" y="164">K</text>
                <text x="272" y="164">L</text>
                <text x="368" y="164">M</text>
                <text x="56" y="212">A</text>
                <text x="104" y="212">(B)</text>
                <text x="152" y="212">(C)</text>
                <text x="200" y="212">D</text>
                <text x="248" y="212">E</text>
                <text x="292" y="212">d1</text>
                <text x="348" y="212">d2</text>
                <text x="392" y="212">_</text>
                <text x="24" y="244">Node:</text>
                <text x="56" y="244">0</text>
                <text x="80" y="244">1</text>
                <text x="104" y="244">2</text>
                <text x="128" y="244">3</text>
                <text x="152" y="244">4</text>
                <text x="176" y="244">5</text>
                <text x="200" y="244">6</text>
                <text x="224" y="244">7</text>
                <text x="248" y="244">8</text>
                <text x="272" y="244">9</text>
                <text x="300" y="244">10</text>
                <text x="324" y="244">11</text>
                <text x="348" y="244">12</text>
                <text x="372" y="244">13</text>
                <text x="396" y="244">14</text>
                <text x="24" y="276">Leaf:</text>
                <text x="56" y="276">0</text>
                <text x="104" y="276">1</text>
                <text x="152" y="276">2</text>
                <text x="200" y="276">3</text>
                <text x="248" y="276">4</text>
                <text x="296" y="276">5</text>
                <text x="344" y="276">6</text>
                <text x="392" y="276">7</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
                           V
                           |
                 .---------+---------.
                /                     \
               R                       S
               |                       |
           .---+---.               .---+---.
          /         \             /         \
         J           K           L           M
        / \         / \         / \         / \
       /   \       /   \       /   \       /   \
      A    (B)   (C)    D     E    d1     d2    _

Node: 0  1  2  3  4  5  6  7  8  9  10 11 12 13 14

Leaf: 0     1     2     3     4     5     6     7
]]></artwork>
        </artset>
      </figure>
      <t>In the following examples, <tt>hash&lt;&lt;X&gt;&gt;</tt> denotes the hash of the entry <tt>X</tt> when <tt>X</tt> is a leaf, and the <tt>MTH</tt> of the
subtree rooted at <tt>X</tt> otherwise.</t>
      <t>The copath of <tt>A</tt> consists of nodes 2 (<tt>B</tt>), 5 (<tt>K</tt>), and 11 (<tt>S</tt>). <tt>B</tt> is not visited: its hash is appended. <tt>K</tt> and
<tt>S</tt> are visited: they are skipped. The Merkle proof for <tt>A</tt> is therefore:</t>
      <figure anchor="fig-merkle-proof-leaf-a">
        <name>Merkle Proof of A</name>
        <sourcecode type="cbor-diag"><![CDATA[
[
  [0, h'4e2f040d5bb57daf86698066be470c24', "A"],
  hash<<B>>,
]
]]></sourcecode>
      </figure>
      <t>The copath of <tt>D</tt> consists of nodes 4 (<tt>C</tt>), 1 (<tt>J</tt>), and 11 (<tt>S</tt>). <tt>C</tt> is not visited: its hash is appended. <tt>J</tt> and
<tt>S</tt> are visited: they are skipped. The Merkle proof for <tt>D</tt> is therefore:</t>
      <figure anchor="fig-merkle-proof-leaf-d">
        <name>Merkle Proof of D</name>
        <sourcecode type="cbor-diag"><![CDATA[
[
  [6, h'add7fe2b052af5faf0ec67f57eb1454f', "D"],
  hash<<C>>,
]
]]></sourcecode>
      </figure>
      <t>The copath of <tt>E</tt> consists of nodes 10 (<tt>d1</tt>), 13 (<tt>M</tt>), and 3 (<tt>R</tt>). <tt>d1</tt> and <tt>M</tt> are not visited: their hashes are
appended. <tt>R</tt> is visited: it is skipped. The Merkle proof for <tt>E</tt> is therefore:</t>
      <figure anchor="fig-merkle-proof-leaf-e">
        <name>Merkle Proof of E</name>
        <sourcecode type="cbor-diag"><![CDATA[
[
  [8, h'6e0e0494c6aa9f9072c3410304aab730', "E"],
  hash<<d1>>,
  hash<<M>>,
]
]]></sourcecode>
      </figure>
      <t>The resulting Disclosure Proof is shown in <xref target="fig-disclosure-proof"/>. It contains 4 hashes. The hashes of <tt>J</tt>, <tt>K</tt>, <tt>R</tt>,
<tt>L</tt>, <tt>S</tt>, and <tt>V</tt> are recomputed by the Verifier.</t>
      <figure anchor="fig-disclosure-proof">
        <name>Disclosure Proof</name>
        <sourcecode type="cbor-diag"><![CDATA[
[
  [ [0, h'4e2f040d5bb57daf86698066be470c24', "A"], hash<<B>> ],             / "A" /
  [ [6, h'add7fe2b052af5faf0ec67f57eb1454f', "D"], hash<<C>> ],             / "D" /
  [ [8, h'6e0e0494c6aa9f9072c3410304aab730', "E"], hash<<d1>>, hash<<M>> ]  / "E" /
]
]]></sourcecode>
      </figure>
      <t>If the Holder presents all the non-Decoy entries <tt>A</tt> to <tt>E</tt> of <xref target="fig-presentation-tree"/> instead, every copath node of
<tt>A</tt>, <tt>B</tt>, <tt>C</tt>, and <tt>D</tt> is visited: their Merkle proofs each contain only their Redacted Entry. The Merkle proof of
<tt>E</tt> is unchanged and contains <tt>hash&lt;&lt;d1&gt;&gt;</tt> and <tt>hash&lt;&lt;M&gt;&gt;</tt>. The resulting Disclosure Proof contains 2 hashes.</t>
      <t>If the Holder presents only <tt>A</tt> and <tt>B</tt>, the Merkle proof of <tt>A</tt> contains <tt>hash&lt;&lt;K&gt;&gt;</tt> and <tt>hash&lt;&lt;S&gt;&gt;</tt>, which are then
visited, so the Merkle proof of <tt>B</tt> contains no hash.</t>
    </section>
    <section anchor="verification">
      <name>Verification</name>
      <t>An SMD-CWT Verifier <bcp14>MUST</bcp14> perform the same verification as an SD-CWT Verifier. This section only describes how to
validate a Disclosure Proof against the <tt>redacted_root_hash</tt> of the corresponding container.</t>
      <t>To validate an SMD-KBT, repeat this verification for all the disclosures presented. Then also perform the validation
described in <xref section="9" sectionFormat="of" target="SD-CWT"/> since they all should pass as well.</t>
      <t>In this section, <tt>n</tt> is the size encoded in the <tt>redacted_root_hash</tt> (the first element of the array); the Merkle tree
therefore has <tt>2^n</tt> leaves, its node indexes range from 0 to <tt>2^ (n+1) - 2</tt>, and its root has node index <tt>2^n - 1</tt>.</t>
      <t>The Verifier proceeds as follows:</t>
      <ol spacing="normal" type="1"><li>
          <t>Verify that the Disclosure Proof contains at least one and at most <tt>2^n</tt> Merkle proofs.</t>
        </li>
        <li>
          <t>For each Merkle proof:
          </t>
          <ol spacing="normal" type="1"><li>
              <t>Verify that it contains at most n + 1 elements.</t>
            </li>
            <li>
              <t>Verify that its first element is a Redacted Entry, and that the node index of this Redacted Entry is the
node index of a leaf, i.e., an even number less than or equal to 2^ (n+1) - 2.</t>
            </li>
            <li>
              <t>Verify that this Redacted Entry matches the type of the container: a <tt>salted-merkle-claim</tt> if the container
is a map, or a <tt>salted-merkle-element</tt> if it is an array, as defined in <xref target="cddl-salted-array"/>. In
particular, a Redacted Entry of a Decoy, which only contains a salt, is rejected.</t>
            </li>
          </ol>
        </li>
        <li>
          <t>Verify that the node indexes of the Redacted Entries are sorted in increasing order.</t>
        </li>
        <li>
          <t>Initialize a visited set with the node indexes of the presented leaves and of all their ancestors. Also maintain a
table associating node indexes with hashes, initially empty.</t>
        </li>
        <li>
          <t>For each Merkle proof:
          </t>
          <ol spacing="normal" type="1"><li>
              <t>Remove the node index from the Redacted Entry. The remaining array is an SMD-CWT entry: compute its hash as
described in <xref target="merkle-root-hash"/> and record it for the leaf in the table.</t>
            </li>
            <li>
              <t>Walk the copath of the leaf, from the leaf up to the root. For each node of the copath:
              </t>
              <ol spacing="normal" type="1"><li>
                  <t>If this node is in the visited set, skip it.</t>
                </li>
                <li>
                  <t>Otherwise, take the next hash of the Merkle proof, record it for that node in the table, and add the node to
the visited set. If the Merkle proof has no hash left, the validation fails.</t>
                </li>
              </ol>
            </li>
            <li>
              <t>Verify that all the hashes of the Merkle proof have been consumed. If not, the validation fails.</t>
            </li>
          </ol>
        </li>
        <li>
          <t>Compute the hash of the root by walking down the tree from the root. For each node reached:
          </t>
          <ol spacing="normal" type="1"><li>
              <t>If the table records a hash for this node, this is its hash, and its subtree is not walked.</t>
            </li>
            <li>
              <t>Otherwise, if this node is a leaf, the validation fails.</t>
            </li>
            <li>
              <t>Otherwise, walk its left child and then its right child. Its hash is the hash of the concatenation of their
hashes, the hash of the left child coming first.</t>
            </li>
          </ol>
        </li>
        <li>
          <t>Verify that the hash of the root is equal to the root hash in the <tt>redacted_root_hash</tt>.</t>
        </li>
        <li>
          <t>If any of these verifications fails, the validation of the whole Disclosure Proof fails.</t>
        </li>
      </ol>
      <t>Applied to the Disclosure Proof of <xref target="fig-disclosure-proof"/>, the visited set initially contains nodes 0, 1, 3, 5, 6, 7,
8, 9, and 11. The Verifier then:</t>
      <ol spacing="normal" type="1"><li>
          <t>Processes the Merkle proof of <tt>A</tt>: it records <tt>hash&lt;&lt;A&gt;&gt;</tt> for node 0 and <tt>hash&lt;&lt;B&gt;&gt;</tt> for node 2. Nodes 5 and 11
are visited.</t>
        </li>
        <li>
          <t>Processes the Merkle proof of <tt>D</tt>: it records <tt>hash&lt;&lt;D&gt;&gt;</tt> for node 6 and <tt>hash&lt;&lt;C&gt;&gt;</tt> for node 4. Nodes 1 and 11 are
visited.</t>
        </li>
        <li>
          <t>Processes the Merkle proof of <tt>E</tt>: it records <tt>hash&lt;&lt;E&gt;&gt;</tt> for node 8, <tt>hash&lt;&lt;d1&gt;&gt;</tt> for node 10, and <tt>hash&lt;&lt;M&gt;&gt;</tt> for
node 13. Node 3 is visited.</t>
        </li>
        <li>
          <t>Computes the hash of the root. The visited set now contains nodes 0 to 11 and 13, and the table associates nodes with
hashes <tt>[(0, A), (2, B), (4, C), (6, D), (8, E), (10, d1), (13, M)]</tt>. The root <tt>V</tt> (node 7) is not in the
table, so the Verifier walks down to <tt>R</tt> (node 3) and <tt>S</tt> (node 11), which are not in the table either. Under <tt>R</tt>,
<tt>J</tt> (node 1) and <tt>K</tt> (node 5) are computed from nodes 0 and 2, and 4 and 6. Under <tt>S</tt>, <tt>L</tt> (node 9) is computed from
nodes 8 and 10, and <tt>M</tt> (node 13) is in the table. <tt>R</tt> is then computed from <tt>J</tt> and <tt>K</tt>, <tt>S</tt> from <tt>L</tt> and <tt>M</tt>, and
<tt>V</tt> from <tt>R</tt> and <tt>S</tt>.</t>
        </li>
        <li>
          <t>Verifies that <tt>hash&lt;&lt;V&gt;&gt;</tt> is equal to the root hash in the <tt>redacted_root_hash</tt>.</t>
        </li>
      </ol>
    </section>
    <section anchor="benefits-over-sd-cwt">
      <name>Benefits over SD-CWT</name>
      <section anchor="smaller-tokens">
        <name>Smaller Tokens</name>
        <t>In SD-CWT, the payload contains the hash of every redacted entry, disclosed or not: a container with <tt>e</tt> redacted
entries
costs <tt>34 * e</tt> bytes in every presentation (assuming <tt>sd_alg</tt> is SHA-256).</t>
        <t>The size of a presentation therefore grows linearly with e in SD-CWT, but only logarithmically in SMD-CWT. For
instance, the Disclosure Proof of <xref target="fig-disclosure-proof"/> contains 4 hashes in addition to the root hash, i.e.,
34 * 5 = 170 bytes, whereas an SD-CWT with the same 5 entries and 2 Decoys contains 34 * 7 = 238 bytes of hashes.</t>
      </section>
      <section anchor="privacy">
        <name>Privacy</name>
        <t>In SD-CWT, the payload contains one hash per redacted entry, so a Verifier learns the number of redacted entries of each
container Also given presentation of SD-KBT are linkable, a Verifier can witness an array of redacted elements grow or
shrink which degrades privacy of the Holder. Decoys can be used to mitigate that, but they are expensive in terms of
space wasted.</t>
        <t>In SMD-CWT, the Verifier only learns the logarithmic size of the tree. The Issuer can choose a larger n to hide this
number further, at the cost of at most one hash per additional level (see <xref target="free-decoys"/>).</t>
      </section>
      <section anchor="free-decoys">
        <name>Free Decoys</name>
        <t>In SD-CWT, each Decoy adds one hash, i.e., 34 bytes, to the presented token.</t>
        <t>In SMD-CWT, the presented token contains only the root hash and the Merkle proofs of the disclosed claims. The size of
these proofs depends on the height of the tree, not on the number of its leaves. Decoys can therefore be added at no
cost up to the next power of two. Beyond that, doubling the number of leaves adds one level to the tree, which costs
at most one additional hash, i.e., 34 bytes: the subtree rooted at the new copath node contains no presented leaf, and
its hash is included at most once in the Disclosure Proof (see <xref target="smd-kbt"/>).</t>
      </section>
      <section anchor="verification-time">
        <name>Verification Time</name>
        <t>TODO: The sparser the presentation, the faster the verification; however, a full presentation takes twice as long to
verify.</t>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <section anchor="claim-order">
        <name>Leakage of Claim Order</name>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <section anchor="cbor-tags">
        <name>CBOR Tags</name>
        <t>IANA is requested to register the following tag in the
<eref target="https://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml#tags">"CBOR Tags" registry</eref>:</t>
        <section anchor="tbrrt">
          <name>To Be Redacted Root Tag</name>
          <t>This tag identifies an array or map containing elements to be redacted. The value of this tag is an array of two
elements: the first is the base-2 logarithm of the number of leaves of the Merkle tree, i.e., the maximum number of
hashes in a
Merkle proof, and the second is the wrapped array or map.</t>
          <ul spacing="normal">
            <li>
              <t>Tag: TBD2 (suggested 59)</t>
            </li>
            <li>
              <t>Data Item: (array or map)</t>
            </li>
            <li>
              <t>Semantics: An array or map containing elements to be redacted with a Merkle proof, each tagged with the To Be
Redacted Tag defined in <xref section="17.3.1" sectionFormat="of" target="SD-CWT"/>.</t>
            </li>
            <li>
              <t>Specification Document (s): <xref target="tbr-tag"/> of this specification</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="media-types">
        <name>Media Types</name>
        <t>IANA is requested to register the following media types in the
<eref target="https://www.iana.org/assignments/media-types/media-types.xhtml#application">"Media Types" registry</eref>:</t>
        <section anchor="applicationsmd-cwtsd-cwt">
          <name>application/smd-cwt+sd-cwt</name>
          <t>The following completed registration template is provided:</t>
          <ul spacing="normal">
            <li>
              <t>Type name: application</t>
            </li>
            <li>
              <t>Subtype name: smd-cwt</t>
            </li>
            <li>
              <t>Required parameters: n/a</t>
            </li>
            <li>
              <t>Optional parameters: n/a</t>
            </li>
            <li>
              <t>Encoding considerations: binary</t>
            </li>
            <li>
              <t>Security considerations: <xref target="security"/> of this specification and <xref target="RFC8392"/></t>
            </li>
            <li>
              <t>Interoperability considerations: n/a</t>
            </li>
            <li>
              <t>Published specification: <xref target="smd-cwt-definition"/> of this specification</t>
            </li>
            <li>
              <t>Applications that use this media type: TBD</t>
            </li>
            <li>
              <t>Fragment identifier considerations: n/a</t>
            </li>
            <li>
              <t>Additional information:
              </t>
              <ul spacing="normal">
                <li>
                  <t>Magic number (s): n/a</t>
                </li>
                <li>
                  <t>File extension (s): n/a</t>
                </li>
                <li>
                  <t>Macintosh file type code (s): n/a</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Person &amp; email address to contact for further information:
SPICE WG mailing list (spice@ietf.org) or
IETF Security Area (saag@ietf.org)</t>
            </li>
            <li>
              <t>Intended usage: COMMON</t>
            </li>
            <li>
              <t>Restrictions on usage: none</t>
            </li>
            <li>
              <t>Author: See Author's Addresses section</t>
            </li>
            <li>
              <t>Change controller: IETF</t>
            </li>
            <li>
              <t>Provisional registration? No</t>
            </li>
          </ul>
        </section>
        <section anchor="applicationsmd-kbtsd-kbt">
          <name>application/smd-kbt+sd-kbt</name>
          <t>The following completed registration template is provided:</t>
          <ul spacing="normal">
            <li>
              <t>Type name: application</t>
            </li>
            <li>
              <t>Subtype name: smd-kbt</t>
            </li>
            <li>
              <t>Required parameters: n/a</t>
            </li>
            <li>
              <t>Optional parameters: n/a</t>
            </li>
            <li>
              <t>Encoding considerations: binary</t>
            </li>
            <li>
              <t>Security considerations: <xref target="security"/> of this specification and <xref target="RFC8392"/></t>
            </li>
            <li>
              <t>Interoperability considerations: n/a</t>
            </li>
            <li>
              <t>Published specification: <xref target="smd-kbt"/> of this specification</t>
            </li>
            <li>
              <t>Applications that use this media type: TBD</t>
            </li>
            <li>
              <t>Fragment identifier considerations: n/a</t>
            </li>
            <li>
              <t>Additional information:
              </t>
              <ul spacing="normal">
                <li>
                  <t>Magic number (s): n/a</t>
                </li>
                <li>
                  <t>File extension (s): n/a</t>
                </li>
                <li>
                  <t>Macintosh file type code (s): n/a</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Person &amp; email address to contact for further information:
SPICE WG mailing list (spice@ietf.org) or
IETF Security Area (saag@ietf.org)</t>
            </li>
            <li>
              <t>Intended usage: COMMON</t>
            </li>
            <li>
              <t>Restrictions on usage: none</t>
            </li>
            <li>
              <t>Author: See Author's Addresses section</t>
            </li>
            <li>
              <t>Change controller: IETF</t>
            </li>
            <li>
              <t>Provisional registration? No</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="SD-CWT">
          <front>
            <title>Selective Disclosure CBOR Web Tokens (SD-CWT)</title>
            <author fullname="Michael Prorock" initials="M." surname="Prorock">
              <organization>mesur.io</organization>
            </author>
            <author fullname="Orie Steele" initials="O." surname="Steele">
              <organization>Tradeverifyd</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Rohan Mahy" initials="R." surname="Mahy">
         </author>
            <date day="1" month="June" year="2026"/>
            <abstract>
              <t>   This specification describes a data minimization technique for use
   with CBOR Web Tokens (CWTs).  The approach is inspired by the
   Selective Disclosure JSON Web Token (SD-JWT), with changes to align
   with CBOR Object Signing and Encryption (COSE) and CWTs.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-spice-sd-cwt-08"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="I-D.ietf-cbor-edn-literals">
          <front>
            <title>Concise Diagnostic Notation (CDN)</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="29" month="September" year="2026"/>
            <abstract>
              <t>   This document formalizes and consolidates the definition of the
   Concise Diagnostic Notation (CDN) of the Concise Binary Object
   Representation (CBOR), addressing implementer experience.

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

   It also specifies registry-based extension points and uses them to
   support text representations such as of epoch-based dates/times and
   of IP addresses and prefixes.


   // (This cref will be removed by the RFC editor:) This revision -28
   // attempts to reflect various feature removals that have been
   // discussed on the mailing list, as a delta to -27.  Note that, with
   // the focus on the delta, this text is necessary somewhat
   // inconsistent.  The chairs decided not to include further editorial
   // improvements that could achieve a greater degree of consistency.
   // The text may be misleading as some of the explanatory sections no
   // longer fully reflect the technical content.  The text also does
   // not have WG input yet on any renaming decisions (CDN name, b1/t1
   // name).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-28"/>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC8392">
          <front>
            <title>CBOR Web Token (CWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="May" year="2018"/>
            <abstract>
              <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties. The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection. A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value. CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8392"/>
          <seriesInfo name="DOI" value="10.17487/RFC8392"/>
        </reference>
        <reference anchor="RFC9052">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
              <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9052"/>
          <seriesInfo name="DOI" value="10.17487/RFC9052"/>
        </reference>
        <reference anchor="RFC9053">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Initial Algorithms</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines a set of algorithms that can be used with the CBOR Object Signing and Encryption (COSE) protocol (RFC 9052).</t>
              <t>This document, along with RFC 9052, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9053"/>
          <seriesInfo name="DOI" value="10.17487/RFC9053"/>
        </reference>
        <reference anchor="RFC7519">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </reference>
        <reference anchor="RFC9162">
          <front>
            <title>Certificate Transparency Version 2.0</title>
            <author fullname="B. Laurie" initials="B." surname="Laurie"/>
            <author fullname="E. Messeri" initials="E." surname="Messeri"/>
            <author fullname="R. Stradling" initials="R." surname="Stradling"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>This document describes version 2.0 of the Certificate Transparency (CT) protocol for publicly logging the existence of Transport Layer Security (TLS) server certificates as they are issued or observed, in a manner that allows anyone to audit certification authority (CA) activity and notice the issuance of suspect certificates as well as to audit the certificate logs themselves. The intent is that eventually clients would refuse to honor certificates that do not appear in a log, effectively forcing CAs to add all issued certificates to the logs.</t>
              <t>This document obsoletes RFC 6962. It also specifies a new TLS extension that is used to send various CT log artifacts.</t>
              <t>Logs are network services that implement the protocol operations for submissions and queries that are defined in this document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9162"/>
          <seriesInfo name="DOI" value="10.17487/RFC9162"/>
        </reference>
        <reference anchor="RFC9420">
          <front>
            <title>The Messaging Layer Security (MLS) Protocol</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="B. Beurdouche" initials="B." surname="Beurdouche"/>
            <author fullname="R. Robert" initials="R." surname="Robert"/>
            <author fullname="J. Millican" initials="J." surname="Millican"/>
            <author fullname="E. Omara" initials="E." surname="Omara"/>
            <author fullname="K. Cohn-Gordon" initials="K." surname="Cohn-Gordon"/>
            <date month="July" year="2023"/>
            <abstract>
              <t>Messaging applications are increasingly making use of end-to-end security mechanisms to ensure that messages are only accessible to the communicating endpoints, and not to any servers involved in delivering messages. Establishing keys to provide such protections is challenging for group chat settings, in which more than two clients need to agree on a key but may not be online at the same time. In this document, we specify a key establishment protocol that provides efficient asynchronous group key establishment with forward secrecy (FS) and post-compromise security (PCS) for groups in size ranging from two to thousands.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9420"/>
          <seriesInfo name="DOI" value="10.17487/RFC9420"/>
        </reference>
        <reference anchor="RFC9596">
          <front>
            <title>CBOR Object Signing and Encryption (COSE) "typ" (type) Header Parameter</title>
            <author fullname="M.B. Jones" initials="M.B." surname="Jones"/>
            <author fullname="O. Steele" initials="O." surname="Steele"/>
            <date month="June" year="2024"/>
            <abstract>
              <t>This specification adds the equivalent of the JSON Object Signing and Encryption (JOSE) "typ" (type) header parameter to CBOR Object Signing and Encryption (COSE). This enables the benefits of explicit typing (as defined in RFC 8725, "JSON Web Token Best Current Practices") to be brought to COSE objects. The syntax of the COSE type header parameter value is the same as the existing COSE content type header parameter.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9596"/>
          <seriesInfo name="DOI" value="10.17487/RFC9596"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
      </references>
    </references>
    <?line 820?>

<section anchor="cddl">
      <name>Complete CDDL Schema</name>
      <figure anchor="cddl-schema">
        <name>A complete CDDL description of SMD-CWT</name>
        <sourcecode type="cddl"><![CDATA[
; in SMD-CWT
salted-merkle-array = [ +bstr-encoded-salted-merkle-entry ]
bstr-encoded-salted-merkle-entry = bstr .cbor salted-merkle-entries

; in SMD-KBT
salted-array-proofs = [ +bstr-encoded-salted-proof ]
bstr-encoded-salted-proof = bstr .cbor disclosure-proof

; where salted-claim, salted-element and decoy are already defined in {{SD-CWT}}
salted-merkle-entry = salted-claim / salted-element / decoy

salted-merkle-entries = [ +salted-merkle-entry ]

; one Merkle proof per presented leaf, ordered by increasing node index
disclosure-proof = [ +merkle-proof ]

merkle-proof = [
  redacted-entry,
  * bstr             ; hash of a copath node, from the leaf up to the root
]

; a presented entry prefixed with the node index of its leaf; Decoys are never presented
redacted-entry = salted-merkle-claim / salted-merkle-element
salted-merkle-claim = [
  uint,              ; node index of the leaf
  bstr .size 16,     ; 128-bit salt
  any,               ; Claim Value
  (int / text)       ; Claim Key
]
salted-merkle-element = [
  uint,              ; node index of the leaf
  bstr .size 16,     ; 128-bit salt
  any                ; Claim Value
]

; repeated here
salted-claim = [
  bstr .size 16,     ; 128-bit salt
  any,               ; Claim Value
  (int / text)       ; Claim Key
]
salted-element = [
  bstr .size 16,     ; 128-bit salt
  any                ; Claim Value
]
decoy = [
  bstr .size 16      ; 128-bit salt
]

; redacted_claims_root is used as a map label. The corresponding value is
; a Redacted Claim Root Hash.
; TODO: any Unassigned value in https://www.iana.org/assignments/cbor-simple-values#simple
redacted_claims_hash = #7.60  ; CBOR simple value 60

redacted_root_hash = [
  uint  ; logarithm(2) of the number of leaves represented in this root hash
  bstr, ; root hash
]

; CBOR tag for wrapping the Merkle Root Hash of all the redacted elements in an array.
; TODO: any Unassigned in https://www.iana.org/assignments/cbor-tags#tags
MERKLE_REDACTED_ELEMENT_TAGNUM = 89

; redacted_elements_root is used in CDDL payloads that contain
; array elements that are redacted.
redacted_element_hash = #6.<MERKLE_REDACTED_ELEMENT_TAGNUM>( redacted_root_hash )
]]></sourcecode>
      </figure>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
lI9ungMa6/iw3K03eqwWL3n1zihiQ7nmuik55LiJ/qHZJ9UPfOy2NI/LxvUo
+Vgq5iZFA528UNAr+k91fd3gU/NgyNmCrEuKeL3BJx3MZkQO6HNkWz7nfVzd
ypSGWmnETHkuJjwjhjKeW1j6h46sZ53DOCMLJ9uNBko7gbV/DTDCT59Zpyen
QsXh/mRevp4b/JGypvGtj79rGv0JafQLWan3QDziXLQ5RyewDUwhUudr4Fzw
iG+JI4P3XJ93JcVVh/haInbpnt1L5Vlktp7KhOa03IqZm/qDVdW5mpfX8Jmj
p2GKruR5fyC+FvCes/LEie6lcjnXASyTLcmhMglPjidwMBj2UJuy9k6sat3S
tL7E2yL1TVgrvaGuyvyanI2crA0ndwbx+fLALukZHvpIUIFvf7Y02fXWunc8
7MyzNiQ9QtJQ/IGOIBGmyvvASjeQNUnIXTSshKEE5kSmBYDaHEObQX+isc/q
4ZVJAP1K3774USJBg5+IZKOyHfrIK7eDONftlfk+KlViZS+D80o6IiOJA3Xq
97bpO4CQYcDkvtOqctklRqcBahK0vt3T2ruH6pFCMGQuv8qgIc3RInWZyYg8
Uu4VhcJcUWjwyncfmZuI1jChl5xmVOpE93ZbSL3f4IU716ze0+U+6dLLNxi7
cSNzznnxxEkPUOHKTKElGvcleimvStG5uhDC8CrFOCRQSCVmexZEcldxxFdU
60toxZKvLmyb7Ei4VGlpaddLZb6dDNh8Qk2n115iFlyTJ+6QKeoxqs82E65b
okJkHFbHp77xkkTTn/GrmEsT23tuTWxAX/1eRYd2d64QNCJ6J2zO8VFWUyEZ
xHusuOoaHEhnr3wqcwqb6WmTqEzr9yQ4idhd6io5GdAZZ8wiM5E4qWPkkqm5
wZsUdL6gLoiD21Q7uYBhp1u6mKrWq/FUGITzZOo2GVpeEMS4PZcWHBJomqYZ
M6WGqBUE9qayYeF6zOtxgSbPlzF2bLxfCUtoTeYdrqzJ0oSvGpJ0vfHiIl4r
kCYvT1/OeFrpctHMpSBZ2Ctnl7hW+aVrqnyLnna+tVTSnb81gSTfoay/iUMK
ZKWsFuiWJ7tKB9wyo8HwYFiamTaAPjzQHKgTVl5w7PMzJd9hbjEYKR+Efok+
LKjEqYDIo4Ulhbk+erf5XL+5YxTYknRL0vGL490asUykDr3GxB4X8hJVCizq
ZtfmJPGXscWWcyUdnktmPfSXlm2jpYtnt28OzDGhm5ubLnbHtz/nGElNTPuI
NiahHedb9z3evvwAvx7OOHHavkPRdH1NVpgrDQgeurzaXHRcuTDBib4tkxZV
rmTRNgFFVhv/ccGHr/dl8eLlwX7qj9zMsrNaqz4YXqW8+PDxWr6P19t1Wc1z
dA6v6oGqpfzSgJjkLS4W8OJLxN0Mo84DWFcm4hwzp8Erum/xSaHWM1DcnHr4
7lytJWbmy+n2vs/EbdPFfFpYNJ6BB63bvWeo+d6JppuDAM7K1RanJob7IMfL
Sz6YG4/u7BRXrsLQt2dEsRR4EuEzl8SaKqJTPy+XhtPaZy0OaqxDjbnf9QJx
Iv/NOtl/GIC17BJOtINWdPWqhkezNwWPUfHhC27xsoxoRhSD2xR8/bnTCeIa
BEP5TncKz1/r1IfluQugmuRIwquXGy1udl+dmcvWqkxypq+xIBrUDLBeAoSD
4YB7ZpZWiXvzJjRH195Tns1FvGpqluF6hUKX0o1WWpxpkVS7dm4fZX3tnhPR
FuM2Z+3NoRxamlD4cSYved/L8LRsD3jHpQh3rglg/2lHPJeXoF1qNkKLAGvx
u8cxWvj2Dsna2+eYL7hI0c2K5WiicQe1LPc1XjSSQ83/zVfc21uq6YIQ4Akh
O8W1UloH7/zVk5Mz8fOfcQeFtBrAMi5UvOz+T3iZLK4JTOgIZZ+cXTwup/8Y
zCcoKOVlWU7PJ6Wr2+YgT2cC7819+YLoEQ/RhIx5uvCG3id4Pw0gcFtcpdkM
mlf6+1c5YjVjp5beUIaCJxQTYe5NX+FWHcKFeMDlkvMkuGvqj+JF2rw6QZHB
1Ql//gdXJ/b2/9nqJIXx9yX5+5KsLslOpwOqWvgOFeQTveAEpQk6D68Ac6h9
R9HqjiLo9D/OG/d7Frjfs8D9ngXu9yxw/yqIawD/ngWu3qRoalLjxc1DkL81
m9omyTvnLl/JhVqxsV8NhmTTP85p5dSSLtssa114y14mHMOPCZtsUE7XTsSn
uT34MHGHTw8/4F9efQA6B/eDcXfUIwyhm6WS8XzU8+7P243VrDPiIDj8TVN2
exokdJOgVkE+h70p7ssoqgYHvpO1ei+KPxm56D4iH5L3/Oz102dnb1+fnR6f
XJydvj17dvb87MXF24vjP7/48TngaTKtUI6Bp0o70DHpBnr7RKuK2u2B5FLN
M2+TYZeJsJvzlsDUjroP74fxu4OmxOGHjl7i5D5k3cXe/RdWNBuO5NrUbh6n
BAziOHyXpDcrFZGGm0OTTCAq+kNrKVc53RlIrkVpS6qu938BDFc4XVSTAAA=

-->

</rfc>
