<?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-sullivan-seal-concrete-01" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="SEAL">SEAL Cipher Suites and Instantiations</title>
    <seriesInfo name="Internet-Draft" value="draft-sullivan-seal-concrete-01"/>
    <author initials="N." surname="Sullivan" fullname="Nick Sullivan">
      <organization>Cryptography Consulting LLC</organization>
      <address>
        <email>nicholas.sullivan+ietf@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="November" day="02"/>
    <abstract>
      <?line 94?>

<t>SEAL (Segmented Encryption and Authentication Layer) is a construction
that realizes random-access authenticated encryption (raAE), a primitive
that partitions a message into an indexed sequence of independently
accessible, individually authenticated segments.  This document
specifies concrete, interoperable instantiations of SEAL for particular
uses, built from previously specified primitives, and applies the
analysis in a companion document to state their security properties and
safe usage limits.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    raae mailing list (raae@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/raae/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/grittygrease/draft-sullivan-cfrg-raae"/>.</t>
    </note>
  </front>
  <middle>
    <?line 106?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>SEAL (Segmented Encryption and Authentication Layer) is a construction
that realizes random-access authenticated encryption (raAE).  A SEAL
object is an indexed sequence of segments, each encrypted and
authenticated on its own, so a reader can decrypt any one segment
without decrypting the rest.  In a profile that permits it, a writer can
re-encrypt one segment in place, append to the end, or truncate from the
end.  An object can also carry a keyed snapshot that binds the whole
segment set as the writer recorded it.  A SEAL scheme is parameterized
by a cipher suite, a set of operational parameters, and a serialization
layout.</t>
      <t>The immutable profile suits whole files, archives, and backups, whether
read straight through or verified segment by segment against a snapshot
that binds every segment.  How far that binding reaches, and in
particular whether it holds against a holder of the content key, depends
on the snapshot authenticator, whether the ciphertext digest is set, and
external authentication of the keyed snapshot
(<xref target="snapshot-authenticator-security"/>).  The mutable profile suits
objects edited in place, including memory-mapped files and disk
encryption.  The append-only profile suits growing archives and logs
that are never rewritten.</t>
      <t>SEAL is specified across two documents.  The companion
(<xref target="I-D.sullivan-cfrg-raae"/>) defines the raAE primitive, specifies the
SEAL construction and its algorithms, and gives the security analysis:
reductions, bounds, and budgets.  This document builds its concrete
suites and instantiations on that construction and derives their
safe-use limits from that analysis (<xref target="binding-limits-profiled"/>).  It
fixes what two implementations must share to interoperate:  the cipher
suites, the serialization layouts, and the code points.  An implementer
needs both, and this document uses the companion's terminology and
notation.</t>
      <t>A relying protocol that does not want to make every choice can cite one
of the named instantiations (<xref target="named-instantiations"/>) and supply only a
cipher suite, an AEAD algorithm paired with a KDF.  The instantiation
fixes the rest:  the serialization layout, the snapshot authenticator,
the ciphertext digest, the segment size, the nonce mode, and the epoch
length, within one of the three profiles.</t>
      <t>The aead_id and kdf_id code points come from existing IANA registries,
the AEAD Algorithms registry and the HPKE KDF registry.  This document
adds two registries of its own, one for the named instantiations and one
for the snapshot authenticators (<xref target="iana-considerations"/>).</t>
    </section>
    <section anchor="conventions">
      <name>Conventions and 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>This document uses the terminology and notation of the companion
(<xref target="I-D.sullivan-cfrg-raae"/>) without restating them, including segment,
object, commitment, snapshot authenticator, snap_id, profile, cipher
suite, CEK, salt, epoch, the key-schedule and snapshot symbols
(payload_info, payload_key, snap_key, LH, Np, and the per-segment leaf),
the ciphertext digest, the witness, and the advantage notation used for
the security bounds.</t>
      <t>ct_i and tag_i are the two parts of a segment's AEAD output under the
companion's AEAD-specific split.  Every suite in <xref target="aead-table"/> places
its tag in the final Nt octets of that output, so tag_i is those Nt
octets and ct_i is every octet before them.  In random nonce mode, the
stored nonce is not part of ct_i or tag_i; the leaf carries it
separately as nonce_field(i) (<xref target="I-D.sullivan-cfrg-raae"/>).</t>
      <dl>
        <dt>aux:</dt>
        <dd>
          <t>The aux region, the serialized summary of <xref target="I-D.sullivan-cfrg-raae"/>
that a layout stores outside the keyed snapshot and the per-segment
metadata entries.  It is untrusted:  a reader checks it only through
the keyed snapshot, as part of a witness.  Its contents are fixed by
the authenticator:  none under the null snapshot and the digest
transcript; the masked accumulator, Nh octets, under the masked
multiset hash; and the keyed epoch heads d_0 through d_{n_ep-1}, in
epoch order, n_ep * Nh octets, under the epoch digest tree.</t>
        </dd>
        <dt>Run:</dt>
        <dd>
          <t>The octet string a snapshot value hashes with LH:  the encoded leaves
of the whole object (transcript_run), the encoded leaves of one epoch
(epoch_run(e)), or the concatenated epoch heads.  Each leaf in a run
is framed by encode; heads are concatenated, since each is Nh octets.</t>
        </dd>
      </dl>
    </section>
    <section anchor="concrete">
      <name>SEAL Suites</name>
      <t>The suites below are examples for the SEAL construction, whose concrete
framing and procedures are defined in <xref target="I-D.sullivan-cfrg-raae"/>.</t>
      <section anchor="concrete-algorithms">
        <name>Algorithms</name>
        <t>SEAL defines the following AEAD algorithms.  For each, the table lists
its code point and the sizes the construction takes from the AEAD
(<xref target="I-D.sullivan-cfrg-raae"/>):  the key size Nk, the nonce size Nn, the
tag size Nt, and the cipher-block size Nb, in octets.  Nb is written n/a
where no block-size limit applies:  for a stream cipher, or for an AEAD
whose analysis binds on forgery instead.  The MRAE column marks whether
the AEAD is misuse-resistant.  Only a misuse-resistant AEAD may be
paired with a derived nonce under rewrite (<xref target="profiles"/>).</t>
        <table anchor="aead-table">
          <name>SEAL AEAD algorithms and their sizes</name>
          <thead>
            <tr>
              <th align="left">Algorithm</th>
              <th align="left">aead_id</th>
              <th align="left">Nk</th>
              <th align="left">Nn</th>
              <th align="left">Nt</th>
              <th align="left">Nb</th>
              <th align="left">MRAE</th>
              <th align="left">committing</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">AES-128-GCM</td>
              <td align="left">0x0001</td>
              <td align="left">16</td>
              <td align="left">12</td>
              <td align="left">16</td>
              <td align="left">16</td>
              <td align="left">no</td>
              <td align="left">no</td>
            </tr>
            <tr>
              <td align="left">AES-256-GCM</td>
              <td align="left">0x0002</td>
              <td align="left">32</td>
              <td align="left">12</td>
              <td align="left">16</td>
              <td align="left">16</td>
              <td align="left">no</td>
              <td align="left">no</td>
            </tr>
            <tr>
              <td align="left">ChaCha20-Poly1305</td>
              <td align="left">0x001D</td>
              <td align="left">32</td>
              <td align="left">12</td>
              <td align="left">16</td>
              <td align="left">n/a</td>
              <td align="left">no</td>
              <td align="left">no</td>
            </tr>
            <tr>
              <td align="left">AES-256-GCM-SIV</td>
              <td align="left">0x001F</td>
              <td align="left">32</td>
              <td align="left">12</td>
              <td align="left">16</td>
              <td align="left">16</td>
              <td align="left">yes</td>
              <td align="left">no</td>
            </tr>
            <tr>
              <td align="left">AEGIS-256</td>
              <td align="left">0x0021</td>
              <td align="left">32</td>
              <td align="left">32</td>
              <td align="left">16</td>
              <td align="left">n/a</td>
              <td align="left">no</td>
              <td align="left">no</td>
            </tr>
            <tr>
              <td align="left">AEGIS-256X2</td>
              <td align="left">0x0024</td>
              <td align="left">32</td>
              <td align="left">32</td>
              <td align="left">16</td>
              <td align="left">n/a</td>
              <td align="left">no</td>
              <td align="left">no</td>
            </tr>
          </tbody>
        </table>
        <t>The aead_id values are the unsigned 16-bit code points from the IANA
AEAD Algorithms Registry (<xref target="RFC5116"/>), encoded as uint16(id).  The
registry's textual identifiers are, in table order, AEAD_AES_128_GCM,
AEAD_AES_256_GCM, AEAD_CHACHA20_POLY1305, AEAD_AES_256_GCM_SIV,
AEAD_AEGIS256, and AEAD_AEGIS256X2.  AES-128-GCM and AES-256-GCM are
specified in <xref target="NIST-SP-800-38D"/>, ChaCha20-Poly1305 in <xref target="RFC8439"/>,
AES-256-GCM-SIV in <xref target="RFC8452"/>, and AEGIS-256 and AEGIS-256X2 in
<xref target="RFC10032"/>.  The AEGIS code points 0x0021 and 0x0024 are registered in
the AEAD Algorithms registry.</t>
        <t>The nonce mode and epoch_length are not properties of the AEAD.  A
profile and the referencing protocol set them (<xref target="profiles"/>,
<xref target="named-instantiations"/>), within the per-suite budgets of
<xref target="I-D.sullivan-cfrg-raae"/>.  The append-only and immutable profiles
accept any AEAD, because their writer disciplines keep every derived
nonce unique (<xref target="profiles"/>).</t>
        <t>For ChaCha20-Poly1305, random nonce mode departs from <xref target="RFC8439"/>
Section 2.6, which requires the nonce to be unique per invocation with
the same key and so forbids generating it at random.  SEAL relies
instead on the birthday bound of <xref target="I-D.sullivan-cfrg-raae"/>:  within the
random-nonce budget of <xref target="budget-table"/>, about 2^32 encryptions per
epoch key, a nonce repeats under that key with probability at most
2^-32.  A repeated nonce reproduces both the keystream and the one-time
Poly1305 key, so it costs authentication as well as confidentiality for
that nonce (<xref target="RFC8439"/> Section 4).</t>
        <t>No SEAL AEAD is natively committing (the committing column).  An
instantiation that must bind its segments against a CEK holder sets the
ciphertext digest (<xref target="I-D.sullivan-cfrg-raae"/>), so each segment's leaf
carries LH(ct_i).  The commitment is a payload_info choice independent
of snap_id.  Content binding against a CEK holder needs it together with
a strict authenticator (snap_id 0x0002 or 0x0003,
<xref target="iana-considerations"/>) and a snapshot authenticated outside the
construction, and a linear authenticator <bcp14>MUST NOT</bcp14> set it
(<xref target="snapshot-authenticator-security"/>).  Only the attachment
instantiations (<xref target="named-instantiations"/>) set it.  An AEGIS profile that
a shared-object protocol consumes <bcp14>SHOULD</bcp14> set it too, since AEGIS's
128-bit tag does not bind its segments (<xref target="I-D.sullivan-cfrg-raae"/>).</t>
        <t>These conditions bind ciphertext bytes.  The strict authenticators' leaf
also carries each segment's nonce field and segment additional
authenticated data (AAD).  The strict authenticators therefore fix each
index's nonce and AAD in either nonce mode and give per-index binding
for every suite (<xref target="snapshot-security-dt"/>).</t>
        <t>SEAL permits the KDF cipher suites in <xref target="kdf-table"/>, identified by
entries from the HPKE KDF Registry (<xref target="RFC9180"/> Section 7.2 and
<xref target="I-D.ietf-hpke-pq"/>):</t>
        <table anchor="kdf-table">
          <name>Permitted SEAL KDF Cipher Suites</name>
          <thead>
            <tr>
              <th align="left">kdf_id</th>
              <th align="left">Name</th>
              <th align="left">Construction</th>
              <th align="left">Nh</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0001</td>
              <td align="left">HKDF-SHA-256</td>
              <td align="left">Two-step HKDF-Extract+Expand</td>
              <td align="left">32</td>
            </tr>
            <tr>
              <td align="left">0x0002</td>
              <td align="left">HKDF-SHA-384</td>
              <td align="left">Two-step HKDF-Extract+Expand</td>
              <td align="left">48</td>
            </tr>
            <tr>
              <td align="left">0x0003</td>
              <td align="left">HKDF-SHA-512</td>
              <td align="left">Two-step HKDF-Extract+Expand</td>
              <td align="left">64</td>
            </tr>
            <tr>
              <td align="left">0x0013</td>
              <td align="left">TurboSHAKE-256</td>
              <td align="left">One-step XOF (absorb+squeeze)</td>
              <td align="left">64</td>
            </tr>
          </tbody>
        </table>
        <t>HKDF-SHA-256 is specified in <xref target="RFC5869"/>.  TurboSHAKE-256 is the
extendable-output mode of the Keccak-p permutation family, specified in
<xref target="RFC9861"/> and selected by <xref target="I-D.ietf-hpke-pq"/> for the HPKE KDF
Registry.  The <tt>kdf_id</tt> values are the unsigned 16-bit code points from
the HPKE KDF Registry, encoded as uint16(id).  Nh and
<tt>commitment_length</tt> equal the KDF's primitive output size, 32 octets for
HKDF-SHA-256, 48 for HKDF-SHA-384, and 64 for HKDF-SHA-512 and
TurboSHAKE-256.  HKDF-SHA-256 is the baseline KDF.  The others are
optional alternatives.</t>
        <t>The two-step Extract and Expand are HKDF-Extract and HKDF-Expand.  The
one-step XOF uses TurboSHAKE256 with D = 0x1F, the Derive convention's
domain-separator byte, which an implementation <bcp14>MUST NOT</bcp14> change.</t>
        <t>The snapshot authenticator is selected by snap_id:</t>
        <table anchor="snapshot-table">
          <name>SEAL Snapshot Authenticators</name>
          <thead>
            <tr>
              <th align="left">snap_id</th>
              <th align="left">Name</th>
              <th align="left">Values produced</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0000</td>
              <td align="left">none</td>
              <td align="left">none produced</td>
            </tr>
            <tr>
              <td align="left">0x0001</td>
              <td align="left">masked multiset hash</td>
              <td align="left">keyed snapshot, per <xref target="masked-multiset-hash"/></td>
            </tr>
            <tr>
              <td align="left">0x0002</td>
              <td align="left">digest transcript</td>
              <td align="left">keyed snapshot and public snapshot, per <xref target="digest-transcript"/></td>
            </tr>
            <tr>
              <td align="left">0x0003</td>
              <td align="left">epoch digest tree</td>
              <td align="left">keyed snapshot and public snapshot, per <xref target="epoch-digest-tree"/></td>
            </tr>
          </tbody>
        </table>
        <t>snap_id 0x0000 selects no snapshot authenticator, a null snapshot:  no
keyed snapshot is produced (Na = 0) and a reader relies on per-segment
authentication alone.  A null snapshot is not the same as a snapshot
taken over an empty segment set, itself a produced value.  Which snap_id
values each profile admits, and the rewrite cost of each authenticator,
are set in <xref target="profiles"/> and <xref target="profile-applicability"/>.</t>
        <t>The nonce mode is carried explicitly by nonce_mode:</t>
        <table anchor="nonce-mode-table">
          <name>SEAL Nonce Modes</name>
          <thead>
            <tr>
              <th align="left">nonce_mode</th>
              <th align="left">Name</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x00</td>
              <td align="left">random</td>
            </tr>
            <tr>
              <td align="left">0x01</td>
              <td align="left">derived</td>
            </tr>
          </tbody>
        </table>
        <t>The two constructions are defined in <xref target="I-D.sullivan-cfrg-raae"/>.</t>
        <t>The supported maximum segment sizes are 16384 and 65536 octets.  Both
values are powers of two and at least 4096 octets.  The 16384-octet size
aligns to 16 KiB memory pages (for example, on Apple Silicon).  The
65536-octet size aligns to 64 KiB (four 16 KiB pages).</t>
        <t>The aad_label is "SEAL-DATA".</t>
      </section>
      <section anchor="profiles">
        <name>Composing a SEAL Suite</name>
        <t>A SEAL suite fixes an AEAD and a KDF (<xref target="aead-table"/>, <xref target="kdf-table"/>), a
maximum segment size, a snapshot authenticator (snap_id,
<xref target="snapshot-table"/>), a nonce mode (nonce_mode, <xref target="nonce-mode-table"/>),
and an epoch length.  The protocol_id identifies the parameters a
profile fixes, and only certain (nonce_mode, snap_id) tuples are valid
under each one.  This document defines three named profiles, SEAL-RW-v1,
SEAL-AO-v1, and SEAL-RO-v1.  The profile names describe the writer's
discipline, not tamper evidence.</t>
        <t>A profile's payload_info <bcp14>MUST</bcp14> carry the full parameter context affecting
key derivation, AEAD operations, AAD construction, and nonce
construction, so that the commitment (<xref target="I-D.sullivan-cfrg-raae"/>) binds
that context.</t>
        <t>SEAL-RW-v1 is the mutable profile (read-write).  It requires a snapshot
authenticator, so it admits any snap_id but a null snapshot, which among
the authenticators defined here is 0x0001 (the masked multiset hash),
0x0002 (the digest transcript), or 0x0003 (the epoch digest tree), and
it permits a random nonce or a derived nonce with an MRAE AEAD.  It
supports rewrite, extend, and truncate.</t>
        <t>SEAL-AO-v1 is the append-only profile.  Because its derived nonce
repeats on re-encryption (<xref target="I-D.sullivan-cfrg-raae"/>), an encryptor
under SEAL-AO-v1 <bcp14>MUST NOT</bcp14> rewrite a segment with a different plaintext
or associated data, and <bcp14>MUST NOT</bcp14> truncate.  It changes length by the
append direction of <xref target="I-D.sullivan-cfrg-raae"/> alone, whose re-mark
carries the segment's existing plaintext and changes only the finality
bit.  The profile admits any snap_id, and the choice does not affect the
append-only discipline.  A protocol that needs rewrites or truncation
picks SEAL-RW-v1 instead, per <xref target="profile-applicability"/> and
<xref target="I-D.sullivan-cfrg-raae"/>.</t>
        <t>SEAL-AO-v1 provides the per-segment guarantees of SEAL-RO-v1, with one
difference.  Its re-mark leaves every formerly-terminal segment with an
earlier ciphertext, the is_final = 1 form it held while it was
terminal, which a write-once object never has.  Presenting that earlier
form in place of the current one is a same-index version substitution,
which SnapVerify rejects.</t>
        <t>Under a null snapshot no SnapVerify runs, so an adversary can present
the object at any length it legitimately held.  That is rollback to an
earlier honest state, which raAE places outside its scope at every
snap_id (<xref target="I-D.sullivan-cfrg-raae"/>) and against which the consuming
protocol supplies freshness.  It does mean the finality check alone no
longer detects truncation under this profile, which
<xref target="I-D.sullivan-cfrg-raae"/> states.  A protocol that needs the current
segment set bound picks any snap_id but a null snapshot.</t>
        <t>SEAL-RO-v1 is the immutable profile (read-only).  Because a rewrite
would repeat the segment's derived nonce (<xref target="I-D.sullivan-cfrg-raae"/>),
an encryptor under SEAL-RO-v1 <bcp14>MUST NOT</bcp14> rewrite a segment once it has
been written.</t>
        <t>SEAL-RO-v1 provides per-segment confidentiality and integrity, binding
the segment index and the finality bit, and key commitment through the
commitment field.  Under a null snapshot it has no snapshot or
whole-object integrity:  that, when needed, comes from any snap_id but a
null snapshot, or from a layer above SEAL.  Truncation detection under a
null snapshot rests on the finality bit alone and surfaces only when the
highest-indexed present segment verifies under is_final = 1
(<xref target="I-D.sullivan-cfrg-raae"/>), so a consumer of streamed plaintext has no
completeness guarantee before that terminal check.</t>
        <table anchor="profile-table">
          <name>SEAL profiles</name>
          <thead>
            <tr>
              <th align="left">protocol_id</th>
              <th align="left">nonce_mode</th>
              <th align="left">snap_id</th>
              <th align="left">mutability</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">SEAL-RW-v1</td>
              <td align="left">random or derived</td>
              <td align="left">any but null</td>
              <td align="left">rewrite/extend/truncate</td>
            </tr>
            <tr>
              <td align="left">SEAL-AO-v1</td>
              <td align="left">derived</td>
              <td align="left">any</td>
              <td align="left">append-only</td>
            </tr>
            <tr>
              <td align="left">SEAL-RO-v1</td>
              <td align="left">derived</td>
              <td align="left">any</td>
              <td align="left">write-once</td>
            </tr>
          </tbody>
        </table>
        <t>The snap_id column is a rule rather than a list, so an authenticator
registered after this document is admitted without revising the table.
Only SEAL-RW-v1 constrains the choice.  It forbids the null snapshot,
because a mutable object needs a snapshot to reject a superseded segment
presented at its own index, and a profile that produces no keyed
snapshot has nothing to reject it with.</t>
        <t>An encryptor <bcp14>MUST</bcp14> set payload_info to a (nonce_mode, snap_id,
segment_commitment) tuple that is valid for its protocol_id, and a
decryptor <bcp14>MUST</bcp14> reject any object whose tuple is not.  A linear
authenticator with the ciphertext digest set is one such invalid tuple
(<xref target="snapshot-authenticator-security"/>).  A derived nonce under SEAL-RW-v1
requires an MRAE AEAD.  SEAL-AO-v1 and SEAL-RO-v1 admit any AEAD because
their disciplines keep each derived nonce unique
(<xref target="I-D.sullivan-cfrg-raae"/>).</t>
        <section anchor="profile-applicability">
          <name>Choosing a Profile</name>
          <t>Pick the profile from how the stored content changes after it is first
written.</t>
          <t>SEAL-RW-v1 (mutable) fits content updated in place:  editable files,
mutable object stores, and append-or-truncate logs.  Its snapshot
detects tampering with the current segment set as a whole, and the
authenticators differ in update cost and per-segment-verify locality
(<xref target="snapshot-rationale"/>).</t>
          <t>SEAL-AO-v1 (append-only) fits content finished in pieces and never
revised:  growing archives, chunk stores, and logs that are never
trimmed.  Unlike SEAL-RO-v1 it admits the append of
<xref target="I-D.sullivan-cfrg-raae"/>.</t>
          <t>The snapshot authenticator is the remaining choice.  For a growing
object the masked multiset hash (0x0001) suits best:  it updates in time
independent of n_seg wherever the tag it removes needs no check or comes
from trusted state (<xref target="masked-multiset-hash"/>), and its keyed snapshot
does not grow.  The epoch digest tree trades that for per-segment verify
locality at a higher per-append cost.  The digest transcript recomputes
over the full leaf list, so appending an object costs O(n^2) in total
(<xref target="snapshot-rationale"/>).</t>
          <t>SEAL-log (<xref target="named-instantiations"/>) names this profile.  It forgoes
even the masked multiset hash for a null snapshot, taking per-segment
integrity alone and leaving freshness to the consuming protocol, and
pairs it with the append-log layout, which represents the short
interior segment a re-mark leaves (<xref target="append-log-layout"/>).  No named
instantiation pairs this profile with a non-null snapshot.</t>
          <t>SEAL-RO-v1 (immutable) fits write-once content:  archives, backups,
content-addressed blobs, and write-once media.  It is the smaller and
simpler choice when content is never rewritten.</t>
          <t><xref target="I-D.sullivan-cfrg-raae"/> covers epoch_length selection, and
<xref target="concrete-algorithms"/> covers the per-AEAD trade-offs that further
narrow the suite.</t>
        </section>
      </section>
    </section>
    <section anchor="file-layouts">
      <name>Serialization Layouts</name>
      <t>Four serialization layouts, linear, aligned, split, and append-log, let
a consuming protocol store raAE output.  The parameterized SEAL
construction mandates none of them.  Each named instantiation binds one,
and the consuming protocol pins the remaining details
(<xref target="named-instantiations"/>).  The commitment field in every layout is
commitment_length octets (<xref target="I-D.sullivan-cfrg-raae"/>).  The figures
annotate it with its default, commitment_length = Nh.  A layout's
snapshot field holds the keyed snapshot.</t>
      <t>No layout stores the public snapshot.  A verifier without the key
recomputes it from the header, the metadata entries, which hold each
leaf's leading fields, and each segment's A_i, without reading any
ciphertext.  The ciphertext digest is set whenever a public snapshot is
used (<xref target="I-D.sullivan-cfrg-raae"/>), so for each segment it reads, the
verifier recomputes LH(ct_i) from the bytes and compares it with the
digest in that segment's metadata entry (<xref target="digest-transcript"/>).  Under
the epoch digest tree, the aux region holds only the keyed heads, so a
keyless one-segment check takes the public heads as a witness
(<xref target="edt-public"/>).</t>
      <t>In the aligned and split layouts, and in a linear layout read as a
stream, each interior position has a fixed length:  segment_max, or the
leading slot's length for the aligned layout's unpadded first segment
(<xref target="linear-layout"/>, <xref target="aligned-layout"/>, <xref target="split-layout"/>).  That length
is the minimum segment size of <xref target="I-D.sullivan-cfrg-raae"/> for interior
segments.  A rewrite or length change under one of these layouts <bcp14>MUST</bcp14>
leave no interior segment shorter than that length, or a reader cannot
locate the segment.</t>
      <t>Under a mutable profile, a writer appending after a short terminal
segment first rewrites it with its existing plaintext followed by the
leading octets of the new content, filling it to that length, and then
appends the rest.  If the new content fits in the spare capacity, the
rewrite alone is enough.</t>
      <t>In the aligned layout that rewrite can land in the unpadded leading
slot, because an object with one segment keeps its terminal segment
there.  The slot's length depends on n_seg through the header size and
is not monotone:  n_slot steps up at each segment_max boundary of
ct_start (<xref target="aligned-layout"/>), so a rewrite made before the append may
not fit the slot the append leaves.  An aligned object that will be
appended to therefore takes the padded option (<xref target="aligned-layout"/>).  So
does one that will be truncated to a different count, because the slot's
length changes with n_seg.</t>
      <t>An append-only profile cannot rewrite, so it can append after a short
terminal segment only in a layout that stores each ciphertext length,
such as the append-log layout (<xref target="append-log-layout"/>).</t>
      <section anchor="linear-layout">
        <name>Linear Layout</name>
        <t>In a linear layout the salt, commitment, keyed snapshot, aux region
(<xref target="aligned-layout"/>), and segment data appear in sequence.  The salt
comes first because it is needed to derive all payload schedule values.
The commitment follows so a reader can reject a wrong key before reading
any segment data.  The keyed snapshot (Na octets), the configured
authenticator's output, and the aux region precede the segment data so a
streaming reader has both before the segments and can check the snapshot
once all are read.  Segments then follow in index order.</t>
        <t>When the object has at least one segment, that final segment carries
is_final = 1.  An empty object (n_seg = 0) has no final segment.</t>
        <figure anchor="fig-linear-layout">
          <name>Linear Layout</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="112" width="568" viewBox="0 0 568 112" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,96" fill="none" stroke="black"/>
                <path d="M 64,32 L 64,96" fill="none" stroke="black"/>
                <path d="M 168,32 L 168,96" fill="none" stroke="black"/>
                <path d="M 256,32 L 256,96" fill="none" stroke="black"/>
                <path d="M 320,32 L 320,96" fill="none" stroke="black"/>
                <path d="M 416,32 L 416,96" fill="none" stroke="black"/>
                <path d="M 464,32 L 464,96" fill="none" stroke="black"/>
                <path d="M 560,32 L 560,96" fill="none" stroke="black"/>
                <path d="M 8,32 L 560,32" fill="none" stroke="black"/>
                <path d="M 8,96 L 560,96" fill="none" stroke="black"/>
                <g class="text">
                  <text x="36" y="52">salt</text>
                  <text x="116" y="52">commitment</text>
                  <text x="212" y="52">snapshot</text>
                  <text x="288" y="52">[aux]</text>
                  <text x="360" y="52">segment</text>
                  <text x="440" y="52">...</text>
                  <text x="504" y="52">segment</text>
                  <text x="36" y="68">(32)</text>
                  <text x="92" y="68">(Nh)</text>
                  <text x="212" y="68">(Na)</text>
                  <text x="288" y="68">(aux)</text>
                  <text x="344" y="68">0</text>
                  <text x="512" y="68">n_seg-1</text>
                  <text x="340" y="84">ct</text>
                  <text x="360" y="84">+</text>
                  <text x="388" y="84">meta</text>
                  <text x="484" y="84">ct</text>
                  <text x="532" y="84">meta</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+------+------------+----------+-------+-----------+-----+-----------+
| salt | commitment | snapshot | [aux] | segment   | ... | segment   |
| (32) | (Nh)       |   (Na)   | (aux) |  0        |     |  n_seg-1  |
|      |            |          |       | ct + meta |     | ct + meta |
+------+------------+----------+-------+-----------+-----+-----------+
]]></artwork>
          </artset>
        </figure>
        <t>The aux region is present when the authenticator keeps whole-object
state.  Because the header here precedes the segments, a streaming write
can reserve the region only when its size is known before the segments
are written:  a fixed-size aux is reserved and filled on the seek-back
that also writes the keyed snapshot, while a count-dependent aux cannot
be, so a streaming linear layout carries only a fixed-size one.  A
non-streaming linear write, which knows n_seg in advance, has no such
limit.</t>
        <t>Each segment stores its ciphertext followed by its metadata entry, meta,
the same meta_len-octet entry the aligned and split layouts hold in a
separate region (<xref target="fig-meta-entry"/>, <xref target="aligned-layout"/>).</t>
        <t>A streaming reader recovers segment boundaries from the segment lengths.
Because a segment <bcp14>MAY</bcp14> be shorter than segment_max
(<xref target="I-D.sullivan-cfrg-raae"/>), a linear layout that is to be read as a
stream <bcp14>MUST</bcp14> keep every non-final segment at the full segment_max,
leaving only the final segment short.  A reader then finds each boundary
at the fixed segment length.  A layout that stores shorter interior
segments <bcp14>MUST</bcp14> record their lengths so the reader can locate each
segment.</t>
        <t>Linear layout supports streaming writes when the aux region is fixed
size or empty.  A writer emits the salt, the commitment, and a
placeholder for the keyed snapshot and the aux region, then streams
segments.  After all segments are written the writer seeks back and
writes the keyed snapshot and the aux region in place.  A
count-dependent aux has no placeholder to seek back to, so an
authenticator with one is written in a non-streaming linear layout or in
the aligned or split layout instead.</t>
      </section>
      <section anchor="aligned-layout">
        <name>Aligned Layout</name>
        <t>In an aligned layout the ciphertext segments occupy slots aligned to
segment_max, so a reader can seek to any segment with page-aligned I/O.
An arbitrary-length prefix, which the consuming protocol uses for its
own machinery and which raAE does not specify, comes first.  The raAE
header follows, and the ciphertext follows the header.</t>
        <figure anchor="fig-aligned-layout">
          <name>Aligned Layout</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="304" width="376" viewBox="0 0 376 304" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,288" fill="none" stroke="black"/>
                <path d="M 312,48 L 312,56" fill="none" stroke="black"/>
                <path d="M 368,32 L 368,288" fill="none" stroke="black"/>
                <path d="M 8,32 L 368,32" fill="none" stroke="black"/>
                <path d="M 8,80 L 368,80" fill="none" stroke="black"/>
                <path d="M 8,128 L 368,128" fill="none" stroke="black"/>
                <path d="M 8,190 L 368,190" fill="none" stroke="black"/>
                <path d="M 8,194 L 368,194" fill="none" stroke="black"/>
                <path d="M 8,224 L 368,224" fill="none" stroke="black"/>
                <path d="M 8,256 L 368,256" fill="none" stroke="black"/>
                <path d="M 8,288 L 368,288" fill="none" stroke="black"/>
                <g class="text">
                  <text x="44" y="52">prefix</text>
                  <text x="116" y="52">(consuming</text>
                  <text x="196" y="52">protocol</text>
                  <text x="272" y="52">machinery</text>
                  <text x="56" y="68">arbitrary</text>
                  <text x="128" y="68">length;</text>
                  <text x="176" y="68">not</text>
                  <text x="232" y="68">specified</text>
                  <text x="296" y="68">here)</text>
                  <text x="48" y="100">header:</text>
                  <text x="104" y="100">salt,</text>
                  <text x="176" y="100">commitment,</text>
                  <text x="264" y="100">snapshot,</text>
                  <text x="64" y="116">per-segment</text>
                  <text x="148" y="116">metadata</text>
                  <text x="216" y="116">(broken</text>
                  <text x="264" y="116">out</text>
                  <text x="308" y="116">below)</text>
                  <text x="48" y="148">leading</text>
                  <text x="104" y="148">slot:</text>
                  <text x="156" y="148">either</text>
                  <text x="200" y="148">the</text>
                  <text x="240" y="148">first</text>
                  <text x="308" y="148">ciphertext</text>
                  <text x="48" y="164">segment</text>
                  <text x="92" y="164">(&lt;</text>
                  <text x="160" y="164">segment_max),</text>
                  <text x="228" y="164">or</text>
                  <text x="260" y="164">zero</text>
                  <text x="312" y="164">padding</text>
                  <text x="28" y="180">to</text>
                  <text x="48" y="180">a</text>
                  <text x="92" y="180">multiple</text>
                  <text x="140" y="180">of</text>
                  <text x="200" y="180">segment_max</text>
                  <text x="60" y="212">ciphertext</text>
                  <text x="136" y="212">segment</text>
                  <text x="188" y="212">(=</text>
                  <text x="252" y="212">segment_max)</text>
                  <text x="32" y="244">...</text>
                  <text x="40" y="276">final</text>
                  <text x="108" y="276">ciphertext</text>
                  <text x="184" y="276">segment</text>
                  <text x="240" y="276">(&lt;=</text>
                  <text x="308" y="276">segment_max)</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+--------------------------------------------+
| prefix (consuming protocol machinery,      |
| arbitrary length; not specified here)      |
+--------------------------------------------+
| header: salt, commitment, snapshot,        |
| per-segment metadata (broken out below)    |
+--------------------------------------------+
| leading slot: either the first ciphertext  |
| segment (< segment_max), or zero padding   |
| to a multiple of segment_max               |
+============================================+
| ciphertext segment  (= segment_max)        |
+--------------------------------------------+
| ...                                        |
+--------------------------------------------+
| final ciphertext segment  (<= segment_max) |
+--------------------------------------------+
]]></artwork>
          </artset>
        </figure>
        <t>Offsets are measured from index 0, the start of the prefix.  Let
ct_start be the offset at which the ciphertext begins (the prefix
length plus the header length).  The leading slot, from ct_start up to
the first segment boundary n_slot * segment_max, is filled in one of
two ways, chosen before writing:</t>
        <ul spacing="normal">
          <li>
            <t>No padding: the first ciphertext segment occupies the slot, with
n_slot = ceil(ct_start / segment_max).  It is shorter than
segment_max and ends on the boundary n_slot * segment_max.</t>
          </li>
          <li>
            <t>Padding: the slot is zero-padded to a multiple of segment_max, with
n_slot &gt;= ceil(ct_start / segment_max) (the next boundary, or a
larger multiple to reserve whole segment slots for append headroom).</t>
          </li>
        </ul>
        <t>From n_slot * segment_max onward every ciphertext segment begins at
a multiple of segment_max and is a full segment_max octets, with the
final segment at most segment_max.  ct_start, n_slot, and the
first-segment length all follow from the prefix and header sizes, so
a writer computes them before emitting any ciphertext.</t>
        <t>The header holds the salt, the commitment, the keyed snapshot, the
authenticator's aux region, and one metadata entry per segment:</t>
        <figure anchor="fig-aligned-header">
          <name>Aligned Layout Header</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="96" width="528" viewBox="0 0 528 96" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,80" fill="none" stroke="black"/>
                <path d="M 64,32 L 64,80" fill="none" stroke="black"/>
                <path d="M 168,32 L 168,80" fill="none" stroke="black"/>
                <path d="M 256,32 L 256,80" fill="none" stroke="black"/>
                <path d="M 336,32 L 336,80" fill="none" stroke="black"/>
                <path d="M 520,32 L 520,80" fill="none" stroke="black"/>
                <path d="M 8,32 L 520,32" fill="none" stroke="black"/>
                <path d="M 8,80 L 520,80" fill="none" stroke="black"/>
                <g class="text">
                  <text x="36" y="52">salt</text>
                  <text x="116" y="52">commitment</text>
                  <text x="212" y="52">snapshot</text>
                  <text x="296" y="52">[aux]</text>
                  <text x="392" y="52">per-segment</text>
                  <text x="476" y="52">metadata</text>
                  <text x="36" y="68">(32)</text>
                  <text x="116" y="68">(Nh)</text>
                  <text x="212" y="68">(Na)</text>
                  <text x="296" y="68">(aux)</text>
                  <text x="380" y="68">(n_seg</text>
                  <text x="416" y="68">*</text>
                  <text x="464" y="68">meta_len)</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+------+------------+----------+---------+----------------------+
| salt | commitment | snapshot |  [aux]  | per-segment metadata |
| (32) |    (Nh)    |   (Na)   |  (aux)  |  (n_seg * meta_len)  |
+------+------------+----------+---------+----------------------+
]]></artwork>
          </artset>
        </figure>
        <t>The bracketed aux region is present when the authenticator keeps
whole-object state, and absent when it does not.  The aligned header is
sized from n_seg before it is written, so it carries a count-dependent
aux without difficulty.</t>
        <t>Each metadata entry holds the optional ciphertext digest, the AEAD tag,
and the optional stored nonce, in that order:</t>
        <figure anchor="fig-meta-entry">
          <name>Metadata Entry</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="96" width="320" viewBox="0 0 320 96" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,80" fill="none" stroke="black"/>
                <path d="M 112,32 L 112,80" fill="none" stroke="black"/>
                <path d="M 208,32 L 208,80" fill="none" stroke="black"/>
                <path d="M 312,32 L 312,80" fill="none" stroke="black"/>
                <path d="M 8,32 L 312,32" fill="none" stroke="black"/>
                <path d="M 8,80 L 312,80" fill="none" stroke="black"/>
                <g class="text">
                  <text x="60" y="52">[LH(ct_i)]</text>
                  <text x="160" y="52">tag_i</text>
                  <text x="256" y="52">[nonce_i]</text>
                  <text x="60" y="68">(Nh)</text>
                  <text x="136" y="68">(Nt</text>
                  <text x="160" y="68">=</text>
                  <text x="184" y="68">16)</text>
                  <text x="260" y="68">(Nn)</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+------------+-----------+------------+
| [LH(ct_i)] |   tag_i   | [nonce_i]  |
|    (Nh)    | (Nt = 16) |    (Nn)    |
+------------+-----------+------------+
]]></artwork>
          </artset>
        </figure>
        <t>The bracketed ciphertext digest LH(ct_i) is present only when the
ciphertext digest is set, and the bracketed nonce_i only in random nonce
mode.  The tag is always present, Nt = 16 octets in every SEAL suite
(<xref target="aead-table"/>).  The fields are stored in leaf order:  the metadata
entry is the leading part of the strict authenticators' leaf, which
appends the derived-mode counter and the segment AAD
(<xref target="I-D.sullivan-cfrg-raae"/>), so an implementation forms each leaf from
the stored bytes, the index, the finality bit, and A_i.</t>
        <t>Each metadata entry holds the optional Nh-octet digest, the Nt-octet
tag, and the Np-octet presented nonce, so meta_len = Nt + Np octets,
plus Nh when the ciphertext digest is set.  A random-nonce entry sets Np
= Nn and is Nt + Nn octets without the digest.  A derived-nonce entry
recomputes the nonce from the key schedule, so Np = 0 and the entry is
Nt octets without the digest.  The per-suite values, for a metadata
entry with no ciphertext digest, are:</t>
        <table anchor="meta-len-table">
          <name>Metadata entry size by AEAD</name>
          <thead>
            <tr>
              <th align="left">AEAD</th>
              <th align="left">nonce mode</th>
              <th align="left">meta_len</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">AES-128-GCM, AES-256-GCM, ChaCha20-Poly1305</td>
              <td align="left">random (Nn = 12)</td>
              <td align="left">28</td>
            </tr>
            <tr>
              <td align="left">AEGIS-256, AEGIS-256X2</td>
              <td align="left">random (Nn = 32)</td>
              <td align="left">48</td>
            </tr>
            <tr>
              <td align="left">AES-256-GCM-SIV</td>
              <td align="left">derived</td>
              <td align="left">16</td>
            </tr>
          </tbody>
        </table>
        <t>The n_seg entries total n_seg * meta_len octets, so the whole header
size is:</t>
        <artwork><![CDATA[
header_size = 32 + commitment_length + Na + aux + n_seg * meta_len
]]></artwork>
        <t>The aux term is defined in <xref target="conventions"/>.  Per-segment state does not
count toward it:  the stored part of a leaf sits in the metadata entry
and is already carried by meta_len.</t>
        <t>A layout reserves the aux region whenever it is non-empty, so
header_size and every offset derived from it follow from the wire
parameters.  Reserving the region is separate from populating it from
storage:  <xref target="epoch-digest-tree"/> lets an implementation recompute its
heads from the leaves rather than keep them, which changes what a reader
reads, not what the layout holds.  Under the epoch digest tree the heads
in this region are part of the witness that a subset SnapVerify reads
(<xref target="I-D.sullivan-cfrg-raae"/>).</t>
        <t>With the default commitment_length = Nh, this specializes by
authenticator. meta_len is not uniform across them:  it grows by Nh when
the ciphertext digest is set, which adds LH(ct_i) to each metadata entry
(<xref target="fig-meta-entry"/>).</t>
        <artwork><![CDATA[
masked multiset hash (Na = Nh, aux = Nh, the masked accumulator):
    32 + 3 * Nh + n_seg * meta_len
digest transcript (Na = Nh, aux = 0):
    32 + 2 * Nh + n_seg * meta_len
epoch digest tree (Na = Nh, aux = n_ep * Nh):
    32 + 2 * Nh + n_ep * Nh + n_seg * meta_len
]]></artwork>
        <t>A reader verifies the commitment and the keyed snapshot from the header
alone, then seeks to any segment using these offsets.  The metadata
entries hold the authenticator's per-segment inputs:  tag_i for the
masked multiset hash, or the leading fields of the strict
authenticators' leaf, which a reader completes with each segment's
index, finality bit, and A_i.  A reader authenticates the whole object's
snapshot from the header without reading or streaming any ciphertext.
Under the digest transcript it <bcp14>MUST</bcp14> then check each leaf against the
segment it reads (<xref target="I-D.sullivan-cfrg-raae"/>).</t>
        <t>Under the epoch digest tree a reader fetches the keyed snapshot and the
epoch-heads region together, then reads one epoch's leaf run
(<xref target="epoch-digest-tree"/>) to check a segment.</t>
      </section>
      <section anchor="split-layout">
        <name>Split Layout</name>
        <t>A split layout separates the ciphertext from the metadata into two
streams that grow independently.  The data stream holds the ciphertext
segments, each a full segment_max except the last.  Segment i is at
offset i * segment_max.  The metadata stream holds the salt, the
commitment, any aux region, the n_seg per-segment metadata entries (each
meta_len octets, broken out in <xref target="fig-meta-entry"/>), and the keyed
snapshot last.  The metadata stream holds the authenticator's
per-segment inputs (<xref target="I-D.sullivan-cfrg-raae"/>):  tag_i for the masked
multiset hash, or the leading fields of the strict authenticators' leaf,
which a reader completes with each segment's index, finality bit, and
A_i.  A reader therefore authenticates the snapshot by reading only the
metadata stream, never the data stream.  When the authenticator keeps
whole-object state, its aux region follows the commitment:  the masked
accumulator (Nh octets) or the epoch heads (n_ep * Nh octets).  An
entry's offset in the metadata stream therefore includes the aux length,
which the authenticator and n_seg fix.  <xref target="aligned-layout"/> gives the
region's byte layout.</t>
        <figure anchor="fig-split-layout">
          <name>Split Layout</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="320" width="584" viewBox="0 0 584 320" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,64 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,256 L 8,304" fill="none" stroke="black"/>
                <path d="M 64,256 L 64,304" fill="none" stroke="black"/>
                <path d="M 168,256 L 168,304" fill="none" stroke="black"/>
                <path d="M 232,256 L 232,304" fill="none" stroke="black"/>
                <path d="M 256,64 L 256,192" fill="none" stroke="black"/>
                <path d="M 336,256 L 336,304" fill="none" stroke="black"/>
                <path d="M 384,256 L 384,304" fill="none" stroke="black"/>
                <path d="M 488,256 L 488,304" fill="none" stroke="black"/>
                <path d="M 576,256 L 576,304" fill="none" stroke="black"/>
                <path d="M 8,64 L 256,64" fill="none" stroke="black"/>
                <path d="M 8,96 L 256,96" fill="none" stroke="black"/>
                <path d="M 8,128 L 256,128" fill="none" stroke="black"/>
                <path d="M 8,160 L 256,160" fill="none" stroke="black"/>
                <path d="M 8,192 L 256,192" fill="none" stroke="black"/>
                <path d="M 8,256 L 576,256" fill="none" stroke="black"/>
                <path d="M 8,304 L 576,304" fill="none" stroke="black"/>
                <g class="text">
                  <text x="20" y="36">data</text>
                  <text x="72" y="36">stream:</text>
                  <text x="32" y="84">seg</text>
                  <text x="56" y="84">0</text>
                  <text x="76" y="84">ct</text>
                  <text x="124" y="84">(=</text>
                  <text x="188" y="84">segment_max)</text>
                  <text x="32" y="116">seg</text>
                  <text x="56" y="116">1</text>
                  <text x="76" y="116">ct</text>
                  <text x="124" y="116">(=</text>
                  <text x="188" y="116">segment_max)</text>
                  <text x="32" y="148">...</text>
                  <text x="32" y="180">seg</text>
                  <text x="80" y="180">n_seg-1</text>
                  <text x="128" y="180">(&lt;=</text>
                  <text x="196" y="180">segment_max)</text>
                  <text x="36" y="228">metadata</text>
                  <text x="104" y="228">stream:</text>
                  <text x="36" y="276">salt</text>
                  <text x="116" y="276">commitment</text>
                  <text x="200" y="276">[aux]</text>
                  <text x="284" y="276">meta_0</text>
                  <text x="360" y="276">...</text>
                  <text x="432" y="276">meta_last</text>
                  <text x="532" y="276">snapshot</text>
                  <text x="36" y="292">(32)</text>
                  <text x="116" y="292">(Nh)</text>
                  <text x="200" y="292">(aux)</text>
                  <text x="284" y="292">(meta_len)</text>
                  <text x="436" y="292">(meta_len)</text>
                  <text x="532" y="292">(Na)</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
data stream:

+------------------------------+
| seg 0 ct    (= segment_max)  |
+------------------------------+
| seg 1 ct    (= segment_max)  |
+------------------------------+
| ...                          |
+------------------------------+
| seg n_seg-1 (<= segment_max) |
+------------------------------+

metadata stream:

+------+------------+-------+------------+-----+------------+----------+
| salt | commitment | [aux] |   meta_0   | ... | meta_last  | snapshot |
| (32) |    (Nh)    | (aux) | (meta_len) |     | (meta_len) |   (Na)   |
+------+------------+-------+------------+-----+------------+----------+
]]></artwork>
          </artset>
        </figure>
        <t>Because neither stream embeds the other, both grow by appending.
Extending a nonempty message replaces the old terminal ciphertext and
its metadata entry, then appends k ciphertext segments to the data
stream and k metadata entries to the metadata stream, with k &gt;= 1, and
updates the keyed snapshot and any aux region.  An extension from the
empty object only adds the k records and updates the snapshot and aux.
Truncating drops the tail of each stream, re-marks the new last segment
and rewrites its metadata entry unless it empties the object, and
rewrites the keyed snapshot and any aux region.  Neither operation
shifts an existing ciphertext segment, which the in-place aligned layout
cannot avoid once the header grows.</t>
      </section>
      <section anchor="append-log-layout">
        <name>Append-Log Layout</name>
        <t>An append-log layout serves an append-only object read or extended
sequentially.  It holds the salt, the commitment, then each segment
preceded by the two-octet length of its ciphertext.  Nothing follows the
segments:  the append-log layout holds no keyed snapshot or aux region,
so it supports only a null snapshot, which SEAL-log selects
(<xref target="named-instantiations"/>).</t>
        <figure anchor="fig-append-log-layout">
          <name>Append-Log Layout</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="112" width="544" viewBox="0 0 544 112" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,96" fill="none" stroke="black"/>
                <path d="M 64,32 L 64,96" fill="none" stroke="black"/>
                <path d="M 168,32 L 168,96" fill="none" stroke="black"/>
                <path d="M 232,32 L 232,96" fill="none" stroke="black"/>
                <path d="M 328,32 L 328,96" fill="none" stroke="black"/>
                <path d="M 376,32 L 376,96" fill="none" stroke="black"/>
                <path d="M 440,32 L 440,96" fill="none" stroke="black"/>
                <path d="M 536,32 L 536,96" fill="none" stroke="black"/>
                <path d="M 8,32 L 536,32" fill="none" stroke="black"/>
                <path d="M 8,96 L 536,96" fill="none" stroke="black"/>
                <g class="text">
                  <text x="36" y="52">salt</text>
                  <text x="116" y="52">commitment</text>
                  <text x="200" y="52">len</text>
                  <text x="280" y="52">segment</text>
                  <text x="352" y="52">...</text>
                  <text x="408" y="52">len</text>
                  <text x="488" y="52">segment</text>
                  <text x="36" y="68">(32)</text>
                  <text x="116" y="68">(Nh)</text>
                  <text x="200" y="68">(2)</text>
                  <text x="280" y="68">0</text>
                  <text x="408" y="68">(2)</text>
                  <text x="488" y="68">n_seg-1</text>
                  <text x="252" y="84">ct</text>
                  <text x="272" y="84">+</text>
                  <text x="300" y="84">meta</text>
                  <text x="460" y="84">ct</text>
                  <text x="508" y="84">meta</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+------+------------+-------+-----------+-----+-------+-----------+
| salt | commitment |  len  |  segment  | ... |  len  |  segment  |
| (32) |    (Nh)    |  (2)  |     0     |     |  (2)  |  n_seg-1  |
|      |            |       | ct + meta |     |       | ct + meta |
+------+------------+-------+-----------+-----+-------+-----------+
]]></artwork>
          </artset>
        </figure>
        <t>The length before segment i is uint16(len_i), the octet length of ct_i.
The field limits the layout to a segment_max of at most 65535 octets, so
of the sizes this document defines only 16384 fits it.  The length
covers ct_i only:  the meta_len-octet metadata entry
(<xref target="fig-meta-entry"/>) follows the ciphertext and, being fixed-width,
needs no length of its own.  Storing the length lets an interior segment
be shorter than segment_max.</t>
        <t>An append writes the new segments at the end and re-marks the previous
terminal segment in place, disturbing neither the header nor any earlier
segment.  Sequential append and streaming read are native.  Random
access needs a walk from the start or an external index, which suits a
log.</t>
      </section>
      <section anchor="read-only-layouts">
        <name>Reduced Layouts under a Derived Nonce</name>
        <t>Under a derived-nonce profile (SEAL-RO-v1 or SEAL-AO-v1), stored fields
drop out of the layouts above.  Each nonce is recomputed from the key
schedule, so Np = 0 and no nonce is stored.  SEAL-AO-v1 additionally
lets an append-only object carry a short interior segment, held by the
append-log layout (<xref target="append-log-layout"/>).  Under a null snapshot the
keyed snapshot drops (Na = 0) and a metadata entry is the Nt-octet tag
alone.  The linear layout reduces to the salt, the commitment, and the
per-segment ciphertext and tags.  The aligned and split header sizes
are:</t>
        <artwork><![CDATA[
snap_id 0x0000 (Na = 0, aux = 0):
    32 + commitment_length + Nt * n_seg
snap_id 0x0001 (Na = Nh, aux = Nh, no stored leaf):
    32 + commitment_length + 2 * Nh + Nt * n_seg
snap_id 0x0002 (Na = Nh, aux = 0, leaf fields in meta_len):
    32 + commitment_length + Nh + (Nh + Nt) * n_seg
snap_id 0x0003 (Na = Nh, aux = n_ep * Nh stored):
    32 + commitment_length + Nh + n_ep * Nh + (Nh + Nt) * n_seg
]]></artwork>
        <t>The two strict-authenticator lines take the ciphertext digest
(<xref target="I-D.sullivan-cfrg-raae"/>) as set, so each entry carries LH(ct_i)
beside the tag.  Without it the entry is the Nt-octet tag, as under
snap_id 0x0000.  An authenticator that keeps whole-object state also
carries its aux region in the header (<xref target="aligned-layout"/>).  In the
aligned layout every ciphertext segment begins at a multiple of
segment_max, so a reader seeks to any segment by arithmetic on its index
and verifies it from its own tag.</t>
      </section>
      <section anchor="cdc">
        <name>Content-Defined Chunking (Reserved)</name>
        <t>Segments take writer-chosen boundaries, each carrying up to segment_max
octets.  Two modes that place those boundaries by content, using
content-defined chunking, are reserved for a future revision.  They are
an append-only mode and an in-place-editing mode with expansion.
Neither is specified here.</t>
      </section>
    </section>
    <section anchor="snapshot-instantiations">
      <name>Snapshot Authenticator Instantiations</name>
      <t>These snapshot authenticators instantiate the interface of
<xref target="I-D.sullivan-cfrg-raae"/>, each selected by a snap_id value
(<xref target="concrete-algorithms"/>).  A null snapshot (snap_id 0x0000)
configures no authenticator and is defined in
<xref target="I-D.sullivan-cfrg-raae"/>.</t>
      <section anchor="masked-multiset-hash">
        <name>Masked Multiset Hash</name>
        <t>This snapshot authenticator builds an updatable, masked multiset hash
over the segment tags.  It accumulates one indexed, keyed contribution
per segment, in the MSet-XOR-Hash form of Clarke et al. (<xref target="MSetHash"/>),
then publishes that accumulator behind a deterministic mask this
document adds.  Its per-segment contribution is:</t>
        <artwork><![CDATA[
contrib(i) = KDF(protocol_id, contrib_label,
                 [snap_key],
                 [uint64(i), tag_i], Nh)
]]></artwork>
        <t>The masked multiset hash fixes three labels:  contrib_label =
"acc_contrib", snapshot_label = "snap_acc", and acc_mask_label =
"acc_mask", each distinct from all other SEAL labels.</t>
        <t>The finality bit is bound through tag_i:  it is an AEAD input in both
nonce modes (segment_aad in random mode, the low nonce bit in derived
mode, <xref target="I-D.sullivan-cfrg-raae"/>), so flipping it changes tag_i, hence
contrib(i), hence the accumulator.  No explicit binding in contrib is
needed.</t>
        <t>The masked multiset hash aggregates the per-segment contributions into
the accumulator acc by bitwise XOR:</t>
        <artwork><![CDATA[
acc = contrib(0) XOR contrib(1) XOR ... XOR contrib(n_seg-1)
]]></artwork>
        <t>The accumulator is an Nh-octet value, with the all-zero string as the
value for the empty segment set.  XOR is order-independent, so the
accumulator does not depend on segment order, and it is its own inverse,
so rewriting segment i removes its old contribution and adds the new one
by XOR, in O(1) time, and without re-reading any other segment where the
old tag needs no check or comes from trusted state.</t>
        <t>The accumulator is linear, and publishing it in the clear would let a
write adversary recombine the differences between successive values into
a non-historical segment set (<xref target="appendix-snapshot"/>).  The masked
multiset hash therefore does two things.  First it authenticates the
count and accumulator as the snapshot, a message authentication
code (MAC) under snap_key with its own label:</t>
        <artwork><![CDATA[
snapshot(n_seg, acc) = KDF(protocol_id, snapshot_label,
                           [snap_key],
                           [uint64(n_seg), acc], Nh)
]]></artwork>
        <t>Write snapshot = snapshot(n_seg, acc) for the present count and
accumulator.  Second, the masked multiset hash derives a mask from
snap_key under the third label, seeded by that snapshot rather than
by a fresh nonce, and XORs it into the accumulator to form the masked
accumulator wrapped_acc:</t>
        <artwork><![CDATA[
acc_mask(n_seg, snapshot) =
    KDF(protocol_id, acc_mask_label,
        [snap_key],
        [uint64(n_seg), snapshot], Nh)

mask        = acc_mask(n_seg, snapshot)
wrapped_acc = acc XOR mask
]]></artwork>
        <t>Seeding the mask with the snapshot rather than a fresh nonce is the
synthetic-IV derandomization of deterministic authenticated encryption
(<xref target="DAE"/>):  the snapshot stays a deterministic function of (n_seg, acc)
while the stored accumulator is hidden behind a one-time pad
(<xref target="appendix-snapshot"/>).  The count n_seg is not stored in the keyed
snapshot.  The verifier supplies it as the number of segments present,
and the snapshot binds it under the MAC.</t>
        <t>An object with n_seg = 0 is a valid empty object.  It holds the salt,
the commitment, and the keyed snapshot, with no ciphertext segments and
no per-segment tags.  Its accumulator is the XOR over the empty segment
set, namely 0^Nh, and the same masking as any other count applies, so
the empty snapshot, meaning this authenticator's snapshot over zero
segments rather than an absent one, is not a fixed constant but a masked
authenticator over that empty set:</t>
        <artwork><![CDATA[
acc          = 0^Nh
snapshot     = snapshot(0, 0^Nh)
mask         = acc_mask(0, snapshot)
wrapped_acc  = 0^Nh XOR mask = mask
]]></artwork>
        <t>An empty object is distinct from a zero-length plaintext, which is one
final segment (n_seg = 1) whose plaintext has length 0.</t>
        <t>Where the old tag needs no check or comes from trusted state, the writer
can rewrite segment i without re-reading the other tags.  The writer
first recovers the accumulator from the stored wrapped_acc by removing
the mask, acc = wrapped_acc XOR acc_mask(n_seg, snapshot).  It then XORs
contrib(i) computed from the old tag (stored alongside the ciphertext)
out of acc, XORs in contrib(i) computed from the new tag, and produces
the new snapshot over the unchanged count.  Under the writer rule of
<xref target="I-D.sullivan-cfrg-raae"/>, a writer that does not take wrapped_acc from
locally trusted snapshot state recovers acc by checking it against a
verified snapshot, with n_seg the count that snapshot is for:</t>
        <artwork><![CDATA[
recover_acc(wrapped_acc, n_seg, verified_snapshot):
  acc           = wrapped_acc XOR acc_mask(n_seg, verified_snapshot)
  snapshot_calc = snapshot(n_seg, acc)
  compare snapshot_calc to verified_snapshot in constant time
          (on a mismatch, return failure and do not use wrapped_acc)
  return acc
]]></artwork>
        <t>A party without snap_key that alters wrapped_acc, or the count, changes
an input to snapshot(n_seg, acc), so the check passes only if that
function agrees on two distinct inputs, which under the PRF assumption
on snap_key that the key schedule already carries happens with
probability about 2^-(8*Nh) per attempt.  On a mismatch the writer can
instead recompute acc from every stored tag, with verify's index-set
check.  It uses that acc only if snapshot(n_seg, acc) matches the
verified snapshot under the same constant-time comparison, and otherwise
the update fails.  The update's witness (<xref target="I-D.sullivan-cfrg-raae"/>) is
therefore wrapped_acc and, where a removed tag is checked by
recomputation, every stored tag.  As with verify, the writer <bcp14>MUST NOT</bcp14>
surface any unmasked accumulator it holds, whether recovered,
recomputed, or updated, or any contribution value, and the only snapshot
state it publishes is the new snapshot and wrapped_acc
(<xref target="appendix-snapshot"/>).</t>
        <t>The tag that an update XORs out, for a segment it rewrites, re-marks, or
drops, needs no check under the writer rule of
<xref target="I-D.sullivan-cfrg-raae"/> in two cases only:  in random nonce mode
while the nonce source does not repeat, and in a SEAL-AO-v1 re-mark.  In
both, where the update decrypts the segment, the tag removed is that
record's own, read once with it.  If the tag removed is not the one
whose contribution acc holds, acc keeps the XOR of the two
contributions, and the in-place update carries that leftover into every
later update.  In a SEAL-AO-v1 re-mark the record decrypts under the
derived nonce of (t, 1), and <xref target="I-D.sullivan-cfrg-raae"/> permits one
encryption at that pair under the salt.  So a record that decrypts is
the one the writer wrote, and its tag is the one acc holds.  A record
that does not decrypt fails the update.</t>
        <t>In random nonce mode, while the nonce source does not repeat, the
argument is a count over the terms at one index.  A stale removal leaves
two terms unpaired, the tag acc still holds and the stale tag it
removed.  Those two, and every fresh tag added there from the stale
update on, are cancelled only by a removed tag the adversary chooses
afterwards, or by the one tag a verifying set presents.  A rewrite or
re-mark brings one removed tag and one fresh tag, a drop a removed tag
alone, and a re-add a fresh tag alone.  An index is dropped only while
the object holds it and re-added only while it does not.  So the tags
removed after the stale one, together with any tag that a verifying set
presents there, always number two fewer than the terms left to cancel.
The index can be made unverifiable, but never laundered.</t>
        <t>Every other removal takes its tag from locally trusted snapshot state or
checks it by the recompute above:  any removal under SEAL-RW-v1 with a
derived nonce, and any removal once the random nonce source can repeat.
Duplicated state of a cryptographically secure pseudorandom number
generator (CSPRNG) can make it repeat:  directly drawn nonces repeat,
and a plaintext-bound nonce repeats when the plaintext, index, and
segment AAD repeat too.  Under HedgedRandom a nonce repeats on
duplicated state only when tag2 repeats with it, which the companion
forbids, or by an output collision (<xref target="I-D.sullivan-cfrg-raae"/>).  Where
such an update decrypts the segment, as a re-mark does, it compares that
record's tag with the checked one.  Under a derived nonce, an identical
rewrite reproduces the current tag, so XORing out an older tag in its
place leaves exactly the accumulator of the set that holds the older
version.  A rewrite back to the older plaintext reproduces the removed
tag instead and leaves acc unchanged, so the new snapshot keeps
certifying the version the writer replaced.</t>
        <t>The snapshot is Nh octets, so Na = Nh, as it is for every other
authenticator here that produces one (<xref target="I-D.sullivan-cfrg-raae"/> defines
Na in general).  wrapped_acc is not part of it.  SnapVerify never reads
wrapped_acc:  it recomputes the accumulator from the tags present and
recomputes the snapshot over the count it observes.  wrapped_acc exists
so that a writer can rewrite one segment without re-reading every other
tag where the old tag needs no check or comes from trusted state.  That
makes it a summary in the sense of <xref target="iana-considerations"/>, derivable
from the per-segment inputs and stored only to bound the read set.  It
is this authenticator's aux region, Nh octets (<xref target="aligned-layout"/>).  The
epoch digest tree's heads are another authenticator's aux region, and an
object carries the aux region of its own snap_id alone.</t>
        <t>SnapVerify runs only under a state derived from the CEK, payload_info,
and G:  the writer's own, or a reader's after the commitment check of
decryption (<xref target="I-D.sullivan-cfrg-raae"/>).  The snapshot's per-object
binding rests on snap_key (<xref target="appendix-snapshot"/>).</t>
        <t>The masked multiset hash realizes verify(snapshot) for the SnapVerify of
<xref target="I-D.sullivan-cfrg-raae"/>.  SnapVerify supplies the count n_seg and the
present segment tags:</t>
        <artwork><![CDATA[
verify(snapshot):
  ;; Caller (SnapVerify) MUST already have checked that the present
  ;; indices are exactly 0..n_seg-1, each once.
  acc_calc      = XOR over i of contrib(i)   ;; present segment tags
  snapshot_calc = snapshot(n_seg, acc_calc)  ;; the MAC over the count
  compare snapshot_calc to snapshot in constant time
          (on any mismatch, reject)
  return accept
]]></artwork>
        <t>The comparison runs in constant time (<xref target="I-D.sullivan-cfrg-raae"/>).
Because the accumulator is order-independent under XOR, a duplicate or
missing index can leave acc_calc recomputing to the genuine accumulator
and the comparison passing, which is why SnapVerify's index-set check
(<xref target="I-D.sullivan-cfrg-raae"/>) is mandatory.</t>
        <t>verify returns only accept or reject.  An implementation <bcp14>MUST NOT</bcp14>
surface the recomputed accumulator, any contribution value, or any value
derived from them, and <bcp14>MUST NOT</bcp14> signal through an error code or timing
anything beyond that one bit.  The recomputed accumulator is what the
at-rest mask hides from a write adversary (<xref target="appendix-snapshot"/>):
exposing it here would reinstate the recombination attack.</t>
        <t>A modified tag or count changes the recomputed snapshot, and a different
key or parameter context fails the commitment check that precedes a
reader's SnapVerify (<xref target="I-D.sullivan-cfrg-raae"/>).  The forgery bound is
in <xref target="snapshot-security-mmh"/> and the rollback limitation in
<xref target="I-D.sullivan-cfrg-raae"/>.</t>
      </section>
      <section anchor="digest-transcript">
        <name>Digest Transcript</name>
        <t>This snapshot authenticator is a per-object digest transcript:  one
keyed KDF evaluation over the digest of the ordered run of per-segment
leaves (<xref target="conventions"/>).  It has no accumulator and no mask, and it
recomputes over the full leaf list on any rewrite.  Its ordering is
strict:  a fixed, published snapshot cannot be made to verify a
different ordered leaf list, even by a party that holds the CEK and
every key derived from it.</t>
        <t>When the ciphertext digest is set, so the leaf carries LH(ct_i), the
snapshot additionally binds each segment's ciphertext bytes, along with
its AEAD tag, nonce field, and segment AAD (<xref target="snapshot-security-dt"/>).
A consuming protocol that authenticates the keyed snapshot, for example
by binding it into a signed reference or manifest, extends that binding
to per-segment ciphertext origin authentication.</t>
        <t>Its per-segment input is the segment leaf leaf(i) of
<xref target="I-D.sullivan-cfrg-raae"/>, with ct_i and tag_i following the
AEAD-output convention of <xref target="conventions"/>.  In derived nonce mode the
leaf's nonce field is an 8-octet counter.</t>
        <t>LH is the over-large-field digest of <xref target="I-D.sullivan-cfrg-raae"/>, so
where the ciphertext digest is set LH(ct_i) is a fixed Nh-octet value
that binds segment i's ciphertext through the collision resistance of LH
for any segment length.  The leaf's length varies with A_i, and the run
that carries the leaves frames each one.  Without the ciphertext digest,
the transcript binds the tags, nonce fields, and segment AAD but not the
ciphertext content.</t>
        <t>The ciphertext digest is a deterministic function of public object
bytes, so any party can recompute or publish it without holding a key.
The tag is the value the AEAD already produced for the segment.  leaf(i)
is the digest transcript's per-segment input, taking the role the tag
plays for the masked multiset hash (<xref target="I-D.sullivan-cfrg-raae"/>).</t>
        <t>In random nonce mode the leaf carries the presented nonce, so different
nonces give different leaves even against a key holder.  In both nonce
modes the leaf carries the finality bit and the segment AAD, so a
verifier needs each segment's A_i to form it.  Position within the
object is bound by the ordered run below and the count by n_seg.  The
digest transcript places no restriction on the nonce mode.</t>
        <t>Every value of the digest transcript and of the epoch digest tree
(<xref target="epoch-digest-tree"/>), keyed or public, has one shape:  a KDF over the
payload_info elements, the commitment, a count, and the LH digest of a
run, with ikm = [snap_key] for a keyed value and ikm = [] for a
public one.</t>
        <artwork><![CDATA[
KDF(protocol_id, label, ikm,
    [...payload_info, commitment, uint64(count), LH(run)], Nh)
]]></artwork>
        <t>The digest transcript's keyed snapshot, written snapshot, and its public
snapshot (<xref target="I-D.sullivan-cfrg-raae"/>), written pub_snapshot, take the
count n_seg and the run of every leaf in index order:</t>
        <artwork><![CDATA[
transcript_run = encode(leaf(0), ..., leaf(n_seg-1))
]]></artwork>
        <table anchor="dt-values">
          <name>Digest Transcript Values</name>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">label</th>
              <th align="left">ikm</th>
              <th align="left">count</th>
              <th align="left">run</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">snapshot</td>
              <td align="left">transcript_label</td>
              <td align="left">[snap_key]</td>
              <td align="left">n_seg</td>
              <td align="left">transcript_run</td>
            </tr>
            <tr>
              <td align="left">pub_snapshot</td>
              <td align="left">pub_transcript_label</td>
              <td align="left">[]</td>
              <td align="left">n_seg</td>
              <td align="left">transcript_run</td>
            </tr>
          </tbody>
        </table>
        <t>Each value is Nh octets, so Na = Nh.  The two labels, transcript_label =
"snap_transcript" and pub_transcript_label = "snap_transcript_pub", are
distinct from each other and from all other SEAL labels under the encode
frame, and ...payload_info passes each payload_info element as a
separate info element (<xref target="I-D.sullivan-cfrg-raae"/>).  The run enters as
its LH digest, so a reader can absorb the leaves into an incremental LH
state as segments arrive and derive the value from the digest and the
count without holding the run.  The ordering is strict, so the digest
transcript has intermediate snapshots (<xref target="I-D.sullivan-cfrg-raae"/>):  at
a count k at which the object is open, its values are the formulas above
with k in place of n_seg, over leaf(0) through leaf(k-1), each formed
with is_final = 0, and a reader absorbing leaves in order derives the
value at any k from a copy of its LH state.</t>
        <t>The commitment element repeats the object's commitment
(<xref target="I-D.sullivan-cfrg-raae"/>) inside the value.  For SnapVerify it binds
G, which snap_key does not:  a snapshot from an object that shares this
object's CEK and payload_info but not its G fails against this object's
commitment.  It is also load-bearing for a consuming protocol that lifts
either value into a signature or MAC, which then carries the full object
context (CEK, payload_info, and G) and cannot be replayed against an
object with a different context (<xref target="snapshot-security-dt"/>).  The
payload_info elements add nothing to the keyed snapshot that the
commitment element and snap_key do not already bind.  For the public
snapshot they are what binds every parameter that governs parsing and
algorithm choice, since a verifier without the key cannot check
payload_info through the commitment.</t>
        <t>The digest transcript realizes verify(snapshot) as follows.  The caller
(SnapVerify, <xref target="I-D.sullivan-cfrg-raae"/>) <bcp14>MUST</bcp14> already have checked that
the present indices are exactly 0..n_seg-1, each once.</t>
        <artwork><![CDATA[
verify(snapshot):
  ;; The caller has checked the present index set (see above).
  for i in 0 .. n_seg-1:
      leaf_calc(i) = [LH(ct_i)] || tag_i || nonce_field(i)
                     || segment_aad(i, is_final, A_i)
          over the stored segment i and its A_i
  snapshot_calc    = KDF(protocol_id, transcript_label, [snap_key],
                         [...payload_info, commitment, uint64(n_seg),
                          LH(encode(leaf_calc(0), ...,
                                    leaf_calc(n_seg-1)))], Nh)
  compare snapshot_calc to snapshot in constant time
          (on any mismatch, reject)
  return accept
]]></artwork>
        <t>The comparison runs in constant time (<xref target="I-D.sullivan-cfrg-raae"/>).  The
index-set check in SnapVerify remains mandatory
(<xref target="I-D.sullivan-cfrg-raae"/>).  Here it is defense in depth rather than
load-bearing, because a malformed index multiset changes the framed leaf
list and the recomputed value with it.</t>
        <t>The digest transcript is per-object (<xref target="I-D.sullivan-cfrg-raae"/>):  it
provides no add, remove, or set_length, and produces the snapshot in a
single KDF call over the digest of the leaf run.  Any change to the
segment set recomputes the transcript over the new leaf list and
re-publishes the keyed snapshot.  A write-once profile computes it once,
at encryption, and only verifies it thereafter.</t>
        <t>A change folds every leaf it keeps unchanged into the new snapshot,
formed from the stored entries and each segment's A_i, read from a
carried leaf list, or recomputed from the stored segments, so the writer
rule of <xref target="I-D.sullivan-cfrg-raae"/> covers the list, which is the witness
of both an update and a subset SnapVerify (<xref target="I-D.sullivan-cfrg-raae"/>),
with length the count.  Unless the writer produced the list itself as
the sole writer, it first recomputes the transcript over it as it stands
and compares the result with a verified snapshot in constant time, as
verify does.  On a mismatch the update fails.  A segment the change
decrypts, as a re-mark does, passes when the leaf recomputed from its
record matches its entry in the checked list.</t>
        <t>An object with n_seg = 0 is a valid empty object under the digest
transcript.  The run is empty and the keyed snapshot is KDF(protocol_id,
transcript_label, [snap_key], [...payload_info, commitment,
uint64(0), LH("")], Nh), so the count is bound and truncation to the
empty object is distinguishable from a legitimate empty object.</t>
        <t>verify above recomputes each leaf from the stored segment bytes and A_i,
so whole-object SnapVerify reads the full object.  A layout holds the
leading fields of leaf(i) in each per-segment metadata entry, and a
consuming protocol <bcp14>MAY</bcp14> carry the leaf list beside the object, for
example in a manifest.  A reader <bcp14>MAY</bcp14> then verify the transcript over the
leaves formed from the stored entries and each segment's A_i, or over
the carried leaves, without reading any ciphertext.  It <bcp14>MUST</bcp14> compare
leaf(i), recomputed from the one segment it reads and its A_i, against
the leaf at position i before treating that segment as covered by the
snapshot.  A segment whose recomputed leaf does not match fails
authentication.  The procedure verifies any subset of the segments, down
to a single one, against the whole-object snapshot, and is how a
consuming protocol obtains per-segment ciphertext origin authentication
from one authenticated keyed snapshot.</t>
        <t>No layout stores the public snapshot (<xref target="file-layouts"/>).  Once it is
authenticated, so is every parameter payload_info carries, and a
verifier that holds no key <bcp14>MUST</bcp14> parse the leaves under those parameters.
Such a verifier checks an authenticated public snapshot as verify does,
with the public label and an empty ikm, recomputing it over leaves
formed from the stored segments or entries and each segment's A_i, or
over carried leaves under the per-segment comparison above, and
comparing in constant time, though the comparison carries no secret.</t>
        <t>A modified leaf or count changes the recomputed transcript, and a
different key or parameter context fails the commitment check that
precedes a reader's SnapVerify (<xref target="I-D.sullivan-cfrg-raae"/>).  The
forgery and binding arguments are in <xref target="snapshot-security-dt"/>.</t>
      </section>
      <section anchor="epoch-digest-tree">
        <name>Epoch Digest Tree</name>
        <t>This snapshot authenticator is an epoch digest tree.  Segment leaves
(<xref target="digest-transcript"/>) fold into per-epoch heads, and the heads fold
into the snapshot.  A reader verifies one segment from two aligned
metadata reads plus the segment itself:  the target epoch's leaf run,
and the epoch-heads region.  Each of those two metadata reads is one
segment_max or less for objects up to roughly 128 GiB at the recommended
parameters (<xref target="epoch-transcript-table"/>).  The design has the digest
transcript's binding properties and adds this bounded random-access
verification for large objects.</t>
        <figure anchor="fig-epoch-transcript">
          <name>Epoch digest tree: leaves in each epoch are folded by a keyed transcript into one epoch head, and the epoch heads are folded by a keyed transcript into the snapshot.  There is no Merkle path</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="576" viewBox="0 0 576 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,48 L 8,80" fill="none" stroke="black"/>
                <path d="M 232,48 L 232,80" fill="none" stroke="black"/>
                <path d="M 296,176 L 296,192" fill="none" stroke="black"/>
                <path d="M 344,48 L 344,80" fill="none" stroke="black"/>
                <path d="M 568,48 L 568,80" fill="none" stroke="black"/>
                <path d="M 8,48 L 232,48" fill="none" stroke="black"/>
                <path d="M 344,48 L 568,48" fill="none" stroke="black"/>
                <path d="M 8,80 L 232,80" fill="none" stroke="black"/>
                <path d="M 344,80 L 568,80" fill="none" stroke="black"/>
                <path d="M 136,176 L 464,176" fill="none" stroke="black"/>
                <g class="text">
                  <text x="48" y="36">epoch</text>
                  <text x="80" y="36">0</text>
                  <text x="400" y="36">epoch</text>
                  <text x="452" y="36">n_ep-1</text>
                  <text x="44" y="68">ct_0</text>
                  <text x="84" y="68">ct_1</text>
                  <text x="120" y="68">...</text>
                  <text x="180" y="68">ct_{2^r-1}</text>
                  <text x="288" y="68">...</text>
                  <text x="388" y="68">ct_...</text>
                  <text x="432" y="68">...</text>
                  <text x="508" y="68">ct_{n_seg-1}</text>
                  <text x="136" y="100">|</text>
                  <text x="456" y="100">|</text>
                  <text x="80" y="116">keyed</text>
                  <text x="148" y="116">transcript</text>
                  <text x="212" y="116">over</text>
                  <text x="400" y="116">keyed</text>
                  <text x="468" y="116">transcript</text>
                  <text x="532" y="116">over</text>
                  <text x="72" y="132">the</text>
                  <text x="120" y="132">epoch's</text>
                  <text x="180" y="132">leaves</text>
                  <text x="392" y="132">the</text>
                  <text x="440" y="132">epoch's</text>
                  <text x="500" y="132">leaves</text>
                  <text x="136" y="148">|</text>
                  <text x="456" y="148">|</text>
                  <text x="136" y="164">d_0</text>
                  <text x="476" y="164">d_{n_ep-1}</text>
                  <text x="280" y="212">keyed</text>
                  <text x="348" y="212">transcript</text>
                  <text x="276" y="228">over</text>
                  <text x="320" y="228">epoch</text>
                  <text x="368" y="228">heads</text>
                  <text x="296" y="244">|</text>
                  <text x="300" y="260">snapshot</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
   epoch 0                                     epoch n_ep-1
+---------------------------+             +---------------------------+
|  ct_0 ct_1 ... ct_{2^r-1} |     ...     |  ct_... ...  ct_{n_seg-1} |
+---------------------------+             +---------------------------+
                |                                       |
       keyed transcript over                   keyed transcript over
       the epoch's leaves                      the epoch's leaves
                |                                       |
               d_0                                    d_{n_ep-1}
                +-------------------+-----+-----+--------+
                                    |
                                keyed transcript
                                over epoch heads
                                    |
                                 snapshot
]]></artwork>
          </artset>
        </figure>
        <t>Its per-segment input is the segment leaf of <xref target="I-D.sullivan-cfrg-raae"/>,
as for the digest transcript (<xref target="digest-transcript"/>).</t>
        <t>d_e and pd_e are the epoch heads over one epoch's leaves, and snapshot
and pub_snapshot are the digests over d_0 through d_{n_ep-1} and over
pd_0 through pd_{n_ep-1}.</t>
        <t>Segments are grouped into epochs of 2^r consecutive indices, where r =
epoch_length (<xref target="I-D.sullivan-cfrg-raae"/>) is reused as the grouping
fan-out, so no new parameter is added.  Only the final epoch may be
short.</t>
        <artwork><![CDATA[
epoch e  =  segments  e * 2^r  ..  min((e+1) * 2^r, n_seg) - 1
n_ep = ceil(n_seg / 2^r) epochs
]]></artwork>
        <t>There are n_ep epochs, the same grouping the epoch key uses, so each
epoch head covers exactly the segments under one epoch key.</t>
        <t>Each value of the epoch digest tree has the shape of
<xref target="digest-transcript"/>.  Epoch e's two heads, d_e for the keyed snapshot
and pd_e for the public snapshot, take as count the number of leaves in
the epoch, m_e, and as run the epoch's leaves.  The two values over the
heads, snapshot and pub_snapshot, take n_seg and the heads in order:</t>
        <artwork><![CDATA[
epoch_run(e) = encode(leaf(e * 2^r), ...,
                      leaf(last index in epoch e))
m_e = min(2^r, n_seg - e * 2^r)
]]></artwork>
        <table anchor="edt-values">
          <name>Epoch Digest Tree Values</name>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">label</th>
              <th align="left">ikm</th>
              <th align="left">count</th>
              <th align="left">run</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">d_e</td>
              <td align="left">epoch_head_label</td>
              <td align="left">[snap_key]</td>
              <td align="left">m_e</td>
              <td align="left">epoch_run(e)</td>
            </tr>
            <tr>
              <td align="left">pd_e</td>
              <td align="left">pub_epoch_head_label</td>
              <td align="left">[]</td>
              <td align="left">m_e</td>
              <td align="left">epoch_run(e)</td>
            </tr>
            <tr>
              <td align="left">snapshot</td>
              <td align="left">head_label</td>
              <td align="left">[snap_key]</td>
              <td align="left">n_seg</td>
              <td align="left">d_0 || ... || d_{n_ep-1}</td>
            </tr>
            <tr>
              <td align="left">pub_snapshot</td>
              <td align="left">pub_head_label</td>
              <td align="left">[]</td>
              <td align="left">n_seg</td>
              <td align="left">pd_0 || ... || pd_{n_ep-1}</td>
            </tr>
          </tbody>
        </table>
        <t>In an object with one epoch, d_0 is the digest transcript's snapshot
formula over the same object under epoch_head_label in place of
transcript_label.</t>
        <t>The leaves vary in length with A_i, so the epoch run frames each one as
an element of encode (<xref target="I-D.sullivan-cfrg-raae"/>), and a leaf longer
than 0xFFFE octets enters as its LH digest.  The epoch heads are fixed
length (Nh octets).  Each run therefore parses unambiguously, with an
element count that n_seg and epoch_length fix.  A reader forms
epoch_run(e) from the epoch's stored run, its metadata entries in leaf
order, with each segment's index, finality bit, and A_i.  Where this
document gives the size of an epoch's leaf run or counts reads of it, it
means the stored run.</t>
        <t>Each head carries payload_info, the commitment, and its leaf count, and
each leaf in its run carries its own index, in the nonce field in
derived nonce mode and in the segment AAD in random nonce mode.  The
heads of different objects or epochs are therefore computed over
different inputs, and each head's place in the ordered heads run binds
its position as well.  A short final epoch is bound by its head's count
and by n_seg and epoch_length in the root.</t>
        <t>The segmentation is recovered only from n_seg and epoch_length, so a
profile that selects the epoch digest tree <bcp14>MUST</bcp14> carry epoch_length in
payload_info, as every profile in this document does.  The heads and the
root then bind it for both values, and the keyed snapshot binds it
through snap_key as well, so no party can present one heads run under a
different fan-out.</t>
        <t>Each run enters the KDF as its LH digest, as in <xref target="digest-transcript"/>,
so a reader carries an incremental LH state across segments and epoch
boundaries.  Every element the KDF sees is at most Nh octets, the
32-octet salt included.</t>
        <t>Each value is Nh octets, so Na = Nh.  The epoch digest tree fixes four
labels, epoch_head_label = "snap_epoch" and head_label =
"snap_epoch_root" for the keyed snapshot, and pub_epoch_head_label =
"snap_epoch_pub" and pub_head_label = "snap_epoch_root_pub" for the
public snapshot, each distinct from all other SEAL labels under the
encode frame (<xref target="I-D.sullivan-cfrg-raae"/>).  The payload_info elements,
the commitment, and the count are bound as in <xref target="digest-transcript"/>, and
the snap_key ikm makes the keyed snapshot unforgeable without the key
(<xref target="I-D.sullivan-cfrg-raae"/>).</t>
        <t>The leaf binds the tag, the nonce field, and the segment AAD
(<xref target="digest-transcript"/>), so the epoch digest tree places no restriction
on the nonce mode.</t>
        <t>The layout stores the n_ep epoch heads, in the aligned layout's header
beside the keyed snapshot or after the commitment in the split layout's
metadata stream (<xref target="split-layout"/>), and the leading fields of each leaf
in its metadata entry.  The keyed snapshot is Nh octets.  The epoch
heads are recomputable from the leaves, so an implementation <bcp14>MAY</bcp14>
recompute them rather than rely on the stored ones, at the cost of
reading every entry.  The serialization layouts reserve and populate the
region whenever snap_id is 0x0003 (<xref target="aligned-layout"/>), because
header_size and the segment offsets derived from it must follow from the
wire parameters alone.  Recomputing is therefore a choice about what a
reader trusts, not a licence to omit the octets.</t>
        <t>The two-read random-access verification below requires a layout whose
metadata entries are contiguous within an epoch, so one seek reads the
whole epoch.  A layout that interleaves the entries with the ciphertext
does not have this property, and a reader gathers an epoch's entries
with one seek per segment.</t>
        <t>verify(snapshot) recomputes the whole transcript.  The caller
(SnapVerify, <xref target="I-D.sullivan-cfrg-raae"/>) <bcp14>MUST</bcp14> already have checked that
the present indices are exactly 0..n_seg-1, each once.</t>
        <artwork><![CDATA[
verify(snapshot):
  ;; The caller has checked the present index set (see above).
  for e in 0 .. n_ep-1:
      d_calc(e) = KDF(protocol_id, epoch_head_label, [snap_key],
                      [...payload_info, commitment, uint64(m_e),
                       LH(epoch_run(e))], Nh)
  snapshot_calc = KDF(protocol_id, head_label, [snap_key],
                      [...payload_info, commitment, uint64(n_seg),
                       LH(d_calc(0) || ... || d_calc(n_ep-1))], Nh)
  compare snapshot_calc to snapshot in constant time
          (on any mismatch, reject)
  return accept
]]></artwork>
        <t>Random-access verification of one segment, in the aligned or split
layout (<xref target="aligned-layout"/>, <xref target="split-layout"/>), costs two aligned reads
beyond the segment itself.  A reader verifies the head once and keeps
the epoch heads, then per segment:</t>
        <artwork><![CDATA[
verify_segment(i):    ;; aligned or split layout
  ;; once per object, then cached:
  read the epoch-heads region (n_ep * Nh octets) from the header
      (aligned layout) or the metadata stream (split layout)
  head_calc = KDF(protocol_id, head_label, [snap_key],
                  [...payload_info, commitment, uint64(n_seg),
                   LH(d_0 || ... || d_{n_ep-1})], Nh)
  check head_calc equals the stored snapshot (constant time)
  ;; per segment i:
  e = i >> r
  read epoch e's metadata entries, m_e of them, from segment
      e * 2^r's metadata entry
      ;; one aligned read
  form epoch_run(e) from them with each segment's index,
      finality bit, and A_i
  d_calc    = KDF(protocol_id, epoch_head_label, [snap_key],
                  [...payload_info, commitment, uint64(m_e),
                   LH(epoch_run(e))], Nh)
  check d_calc equals the cached d_e (constant time)
  read segment i from the data region
  leaf_calc = [LH(ct_i)] || tag_i || nonce_field(i)
              || segment_aad(i, is_final, A_i)
  check leaf_calc equals the leaf at position i mod 2^r
      within epoch e's run (constant time)
]]></artwork>
        <t>A cold single-segment check is two metadata reads, the epoch-heads
region and one epoch's leaf run, each one aligned read up to the ceiling
(<xref target="epoch-transcript-table"/>).  A reader scanning many segments reads the
epoch-heads region once and then one epoch leaf run per epoch, so the
amortized cost is one metadata read per segment.  Those two reads, with
the count n_seg that head_calc binds, are the witness of a subset
SnapVerify (<xref target="I-D.sullivan-cfrg-raae"/>).  For several presented segments
the witness is the count, the epoch heads, and the leaf run of each
epoch that holds one, and an update's witness is the epoch heads and the
affected epoch's leaf run.  These costs hold when the epoch's A_i are
empty or available to the reader without further reads.</t>
        <t>All comparisons run in constant time (<xref target="I-D.sullivan-cfrg-raae"/>).  A
segment whose recomputed leaf, epoch head, or head does not match fails
authentication.  The reader recomputes only its own leaf and its own
epoch head and reads no other segment's ciphertext.</t>
        <t>The epoch digest tree is per-object (<xref target="I-D.sullivan-cfrg-raae"/>):  it
provides no add, remove, or set_length.</t>
        <t>A rewrite of segment i recomputes only epoch e's head and the keyed
snapshot, where e = i &gt;&gt; epoch_length, leaving the other epoch heads
unchanged.  As with any keyed snapshot, a consuming protocol that signed
the value re-signs the new one.  Under a write-once profile each
snapshot, the final one and any intermediate one, is computed once, at
its count.  Under an append-only or mutable profile a change is the same
two aligned metadata reads as verification (the epoch's leaf run and the
epoch-heads region) followed by three metadata writes:  the new entry,
the new epoch head, and the new keyed snapshot.</t>
        <t>A change folds into the new snapshot the heads of the epochs it leaves
unchanged, the leaves it keeps unchanged in each epoch whose head it
recomputes, and the plaintext of any segment it decrypts.  Unless the
writer produced them itself as the sole writer, it checks the heads and
leaves with the first two comparisons of verify_segment, made against a
verified snapshot (<xref target="I-D.sullivan-cfrg-raae"/>) rather than the stored
one:  head_calc over the stored heads, then d_calc over the run formed
from each such epoch's stored entries against that epoch's checked head.
On any mismatch the update fails.  A segment the change decrypts passes
when the leaf recomputed from its record matches its entry in the
checked run, verify_segment's third comparison.</t>
        <t>An object with n_seg = 0 has n_ep = 0 and an empty heads run:</t>
        <artwork><![CDATA[
snapshot = KDF(protocol_id, head_label, [snap_key],
               [...payload_info, commitment, uint64(0), LH("")], Nh)
]]></artwork>
        <t>so the count is bound and truncation to the empty object is
distinguishable.</t>
        <t>Choose the largest epoch_length whose epoch leaf run still fits one
aligned read, so recomputing an epoch head is a single read:</t>
        <artwork><![CDATA[
2^r * meta_len  <=  segment_max
]]></artwork>
        <t>The values below are for a derived-nonce entry with the ciphertext
digest set (Np = 0, meta_len = Nh + Nt).  A random-nonce entry has
meta_len = Nh + Nt + Np, so its stored run grows by Np octets per
segment.  Recompute r from the rule above.</t>
        <table anchor="epoch-transcript-table">
          <name>Suggested epoch_length by segment_max and KDF output length Nh</name>
          <thead>
            <tr>
              <th align="left">segment_max</th>
              <th align="left">Nh</th>
              <th align="left">Suggested epoch_length</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">65536</td>
              <td align="left">32 or 48</td>
              <td align="left">10</td>
            </tr>
            <tr>
              <td align="left">65536</td>
              <td align="left">64</td>
              <td align="left">9</td>
            </tr>
            <tr>
              <td align="left">16384</td>
              <td align="left">32 or 48</td>
              <td align="left">8</td>
            </tr>
            <tr>
              <td align="left">16384</td>
              <td align="left">64</td>
              <td align="left">7</td>
            </tr>
          </tbody>
        </table>
        <t>The epoch-heads region of the header is n_ep * Nh octets, one aligned
read up to about 128 GiB at r = 10, Nh = 32, and segment_max 65536.
Past that it spans 1 + ceil(content size / that ceiling) reads.</t>
        <t>The forgery and binding arguments are in <xref target="snapshot-security-edt"/>.</t>
        <t>The random-access benefit is realized only when epoch_length is in the
grouping range of <xref target="epoch-transcript-table"/>.  A profile that sets a
large epoch_length for key rotation, such as a flat key at 63, makes
n_ep = 1, so the fold is a single epoch:  still correct, with no
random-access benefit.  A single epoch is still the two-level epoch
digest tree under its own labels, not the digest transcript value.  A
profile that wants random-access verification sets epoch_length to the
<xref target="epoch-transcript-table"/> value and accounts for the resulting
per-epoch-key write budget in <xref target="I-D.sullivan-cfrg-raae"/>.</t>
        <section anchor="edt-public">
          <name>Public and Intermediate Snapshots</name>
          <t>The epoch digest tree's public snapshot takes the public labels and an
empty ikm at both levels, so its heads pd_e are separate values from the
keyed heads d_e.  A verifier that holds no key <bcp14>MUST</bcp14> parse leaves, runs,
and witness heads under the parameters the authenticated value carries.</t>
          <t>No layout stores the public heads or the public snapshot
(<xref target="file-layouts"/>).  A verifier that holds no key recomputes them from
the leaves, or takes exactly n_ep * Nh octets of heads as a witness
that the consuming protocol carries beside the authenticated
pub_snapshot, and checks the witness by recomputing pub_snapshot from
it.  It <bcp14>MUST</bcp14> reject a witness of any other length.  It checks one
segment as verify_segment does, with the public labels, an empty ikm,
and the witness heads in place of the stored ones.</t>
          <t>The epoch digest tree's ordering is strict, so it has snapshots
(<xref target="I-D.sullivan-cfrg-raae"/>) at every count k at which the object is
open.  The formulas above with k in place of n_seg give snapshot(k) over
d_0 through d_e and pub_snapshot(k) over pd_0 through pd_e, where e =
(k-1) &gt;&gt; r, and the last head d_e, or pd_e, folds the leaves of epoch e
present at k, with their count k - e * 2^r.</t>
          <t>A writer that produces intermediate snapshots holds one complete segment
back until more content or the end arrives, and marks the last segment
final when it encrypts it (<xref target="I-D.sullivan-cfrg-raae"/>).  The leaves of
each intermediate snapshot are then a prefix of those of every later
snapshot, the final one included, as long as the writer neither re-marks
nor rewrites a segment below a count at which it produced one.</t>
          <t>A reader that receives segments in index order checks each intermediate
snapshot as it arrives.  It forms each leaf from the segment bytes it
holds and the segment's A_i, with is_final = 0, and with is_final = 1 at
n_seg-1 when it checks the final value after that segment decrypts as
final, never taking a stored or carried leaf or head in place of one it
can compute.  It keeps two running LH states, one over the current
epoch's leaf run and one over the heads of the full epochs below it,
both incremental because LH is the suite's Extract or XOF
(<xref target="I-D.sullivan-cfrg-raae"/>).  To check the value at k it finalizes a
copy of the epoch-run state into the head of epoch e with its count,
absorbs that head into a copy of the heads state, finalizes it, derives
the value at k, and compares in constant time.  At an epoch boundary it
absorbs the full epoch's head into the heads state itself and starts the
next epoch's run.</t>
          <t>A reader that joins late does so at an epoch boundary k = (e+1) * 2^r,
where every head below k is full and never changes.  It takes d_0
through d_e, or pd_0 through pd_e, exactly (e+1) * Nh octets, from the
consuming protocol, derives the value at k from them, and compares it in
constant time with the value published at k, which for pub_snapshot(k)
is accepted only under the signed statement.  On acceptance it adopts
the heads as its running state and continues in order from segment k.
It has authenticated a summary of the segments below k, not their
ciphertext or their availability.</t>
          <t>Every leaf of an intermediate snapshot at count k is formed with
is_final = 0, in the nonce field in derived nonce mode and in the
segment AAD in random nonce mode, so the value fixes is_final = 0 at
index k-1, and a verifier <bcp14>MUST NOT</bcp14> infer finality from the value's
count.</t>
          <t>A consuming protocol that signs intermediate snapshots <bcp14>MUST</bcp14> define how a
checkpoint is identified, its rollback policy, and any fork detection it
claims.</t>
        </section>
      </section>
    </section>
    <section anchor="snapshot-authenticator-security">
      <name>Snapshot Authenticator Security</name>
      <t>Snapshot integrity instantiates the snapshot-forgery advantage Adv_snap
of the master ra-ROR bound (<xref target="I-D.sullivan-cfrg-raae"/>) per snap_id:
the None selection contributes zero, and each authenticator below
contributes the terms its construction requires.</t>
      <t>Every keyed snapshot in this document is a KDF output over an
intermediate value that commits to the segments:  the accumulator with
the count under the masked multiset hash, the LH digest of the encoded
leaf run under the digest transcript, and the LH digest of the heads run
under the epoch digest tree.  Call that the committed value.  Matching
it at the same count matches the snapshot, because the KDF that follows
is deterministic, so an adversary attacks the committed value rather
than the snapshot.</t>
      <section anchor="snapshot-security-mmh">
        <name>Masked Multiset Hash</name>
        <t>SEAL's masked multiset hash publishes its keyed snapshot, a MAC over the
count and accumulator under snap_key, and stores the masked accumulator
wrapped_acc beside it as a summary.  wrapped_acc is that accumulator
hidden behind a deterministic, tag-derived one-time pad.  The mask stops
a write adversary that does not hold snap_key from recombining the
differences between published accumulators into a non-historical segment
set.  A party that holds snap_key derives the mask and strips it.  The
three labels contrib_label, snapshot_label, and acc_mask_label are
distinct under the encode frame.</t>
        <t>For snap_id 0x0001 the Adv_snap term of the master ra-ROR bound
(<xref target="I-D.sullivan-cfrg-raae"/>) is bounded by a fresh-input MAC term, a
mix-and-match term, and a birthday term in the number of published
snapshots that the deterministic masking introduces, on no assumption
beyond the multi-user PRF the key schedule already uses.
<xref target="appendix-snapshot"/> derives the value.</t>
        <t>Under this authenticator, SnapVerify recomputes the keyed snapshot from
the observed count and the recomputed accumulator and compares it
against the stored keyed snapshot in one constant-time comparison.  A
variable-time comparison would reveal the position of the first
differing octet, letting an adversary who retries tampered inputs learn
the expected keyed snapshot one octet at a time.</t>
      </section>
      <section anchor="snapshot-security-dt">
        <name>Digest Transcript</name>
        <t>SEAL's digest transcript publishes one keyed KDF evaluation over the
payload_info elements, the commitment, the segment count, and the LH
digest of the encoded leaf run (<xref target="digest-transcript"/>).  Its transcript
label is distinct under the encode frame, the encode framing of the run
binds each leaf's position, and the count element binds the count.</t>
        <t>Without snap_key, a forgery is one of two events.  The first is a
fresh-input forgery of the keyed derivation, on the same multi-user PRF
assumption as the rest of the key schedule.  The second is a second
preimage of LH at the leaf run, a multi-target term over the run under
each published snapshot, since a different run with the same digest
leaves the keyed snapshot unchanged.  It is the term the epoch digest
tree carries at its runs, and the long-message and sponge figures of
<xref target="snapshot-security-edt"/> apply to it, with the run of n_seg leaves, the
longest LH input of either authenticator, as the target.  There is no
accumulator to recombine, no mask, and no birthday term in the number of
published snapshots.</t>
        <t>The leaf gives the transcript ciphertext binding and nonce binding
against a key holder.  Ciphertext binding holds only when the ciphertext
digest is set, so the leaf carries LH(ct_i).  LH(ct_i)
(<xref target="I-D.sullivan-cfrg-raae"/>) is the ciphertext digest, and a fixed
transcript binds the ordered leaf list under the collision resistance of
the KDF over framed inputs and of LH over the encoded run, so the
ciphertext binding rests on the collision resistance of LH for any
segment length.  Against a fixed published transcript, a substitution
needs a second preimage at one of n_seg + 1 targets, the leaves and the
run.  Every input to LH is public, so this is a collision-resistance
requirement, separate from the PRF assumption above, and it does not
degrade when the adversary holds the CEK and every key derived from it.</t>
        <t>Without the ciphertext digest the transcript binds the tags, nonce
fields, segment AAD, and order but not the ciphertext content, which
suits a single-CEK-holder deployment.  The digest transcript is still a
symmetric authenticator:  any snap_key holder can compute a valid
snapshot for an object it writes itself.  What a key holder cannot do
without a collision is exhibit a different ordered leaf list that
verifies under a fixed, already-published transcript value.</t>
        <t>In random nonce mode the leaf carries the stored nonce, so two nonces
give two leaves.  A fixed authenticated transcript fixes each index's
nonce for every suite, independently of whether the AEAD tag is
injective in the nonce.  In derived nonce mode the leaf carries the
counter (i &lt;&lt; 1) | is_final, and the commitment fixes the CEK and
payload_info, so the authenticated transcript fixes the nonce through
the derivation for a decryptor that verifies the commitment.</t>
        <t>The digest transcript accepts either nonce mode for ciphertext, nonce,
and AAD binding.  With the ciphertext digest set, the leaf fixes the
ciphertext, the tag, the nonce field, and the segment AAD, A_i included,
so the plaintext-binding claims here need no external binding of A_i.</t>
        <t>The masked multiset hash gives no such binding, in two independent ways.
Its contributions bind AEAD tags, and under an adversarially known CEK a
non-committing AEAD admits a second ciphertext with the same tag
(<xref target="I-D.sullivan-cfrg-raae"/>), so segment content can change under an
unchanged accumulator.  Separately, its ordering is linear:  a party
that knows snap_key evaluates contributions offline and solves for a
different segment set with the same accumulator by the k-list XOR
algorithm of <xref target="Wagner"/>, at about 2^(8*Nh / (1 + floor(log2(n_seg))))
operations over n_seg lists.  The floor is there because the k-tree
needs a power-of-two list count, so a count between two powers gives the
lower one's cost.  That cost meets the digest transcript's 2^(4*Nh)
ciphertext equivocation floor at n_seg = 2 and drops below it at n_seg =
4.  The search needs many candidate contributions at each index, which a
CEK holder obtains at unchanged plaintext by re-encrypting under fresh
nonces in random nonce mode, or by varying padding in derived nonce
mode, so the forged object decrypts to plaintext the CEK holder chose.
Above 8*Nh segments two candidates per index suffice:  the n_seg
differences between them, each 8*Nh bits, are then linearly dependent,
and Gaussian elimination finds a set of indices to switch that leaves
the accumulator unchanged.</t>
        <t>Carrying the ciphertext digest in each contribution does not repair
this.  It does repair the first weakness:  a contribution covering
LH(ct_i) moves the accumulator whenever the ciphertext changes, so the
substitution that was free under a non-committing AEAD now costs the
search above.  What it cannot do is change that cost, which the
accumulator width and the segment count fix, not what each contribution
is computed over.</t>
        <t>A linear authenticator therefore <bcp14>MUST NOT</bcp14> carry the ciphertext digest.
Setting it is how an instantiation states that its segments are bound
against a CEK holder (<xref target="concrete-algorithms"/>), and
<xref target="I-D.sullivan-cfrg-raae"/> makes that binding hold under three
conditions:  the keyed snapshot is authenticated outside the
construction, the leaf carries LH(ct_i), and the ordering is strict.  A
linear ordering fails the third condition, because the k-list search
reaches a different segment set without disturbing the first two.  The
count that sets the search cost belongs to the object rather than to any
row, which fixes segment_max and never n_seg.  The binding thus weakens
as an object grows, passing the digest transcript's ciphertext
equivocation floor at four segments.  The ordering is settled by snap_id
(<xref target="iana-considerations"/>), so the prohibition binds the registrant of a
snap_id rather than a protocol choosing among the ones defined here.
The masked multiset hash accordingly folds the AEAD tag alone.  Only a
non-linear ordering, as the digest transcript and the epoch digest tree
use, turns the search into a collision problem and holds the binding at
every count.</t>
        <t>Neither observation weakens the masked multiset hash in its own threat
model, which excludes key holders:  snap_key is derived from the CEK
(<xref target="I-D.sullivan-cfrg-raae"/>), so in a single-owner deployment no
adversary holds snap_key.  Both matter only when a keyed snapshot is
lifted into a stronger statement.</t>
        <t>That lifting is the signing layer this section requires for sender
attribution.  A signature or MAC over a keyed snapshot carries content
binding against CEK holders only when the underlying value already binds
content against key holders.  The digest transcript is designed for that
use, and its commitment element carries the full object context (CEK,
payload_info, and G) into the authenticated value, so a signed value
binds one object context.  An application <bcp14>MUST NOT</bcp14> rely on a signature
over the masked multiset hash's keyed snapshot for content attribution
among CEK holders.  The ciphertext digest is what grounds content
binding on collision resistance.</t>
        <t>With the ciphertext digest set, an authenticated digest transcript pins
each index to one ciphertext, tag, nonce field, and segment AAD, even
against a party that holds or chose the CEK, which gives the per-index
binding of <xref target="I-D.sullivan-cfrg-raae"/> with its stated gap to ra-CMT-p.</t>
        <t>The public snapshot (<xref target="digest-transcript"/>) is the same framed
derivation with an empty ikm and its own label, so its binding rests on
collision and second-preimage resistance alone, with no PRF term, and it
is not unforgeable:  anyone computes it.  In the two-step class the
extract step then takes only public inputs, so the output at length Nh
is HMAC under a known key over the framed input.  An output collision on
distinct inputs is then a collision of LH on the run or on an over-large
element, or of the inner or the outer hash call.  In the one-step class
it is a collision of the XOF or of LH.  A signed pub_snapshot therefore
binds payload_info, the commitment, the count, and the ordered leaf list
for a verifier that holds no key, as an authenticated keyed snapshot
does for a key holder.</t>
        <t>The formal forgery and content-binding reductions for the digest
transcript are deferred to the combined proof in preparation
(<xref target="SEALPROOFS"/>), with SEAL's other snapshot proofs.</t>
      </section>
      <section anchor="snapshot-security-edt">
        <name>Epoch Digest Tree</name>
        <t>The epoch digest tree (<xref target="epoch-digest-tree"/>) has the same per-segment
leaf and the same key as the digest transcript, so its ciphertext,
nonce, and AAD binding in both modes, and its per-index binding for
every suite, with the same gap to ra-CMT-p, are those of
<xref target="snapshot-security-dt"/>.  They hold for an intermediate snapshot
(<xref target="edt-public"/>) too, whose leaves fix is_final = 0 at its last index.</t>
        <t>The two-level fold rests on the same collision-resistance assumption.
An epoch head binds its epoch's leaf run through LH and the KDF, and the
snapshot binds the epoch heads the same way, so a forged snapshot
requires an LH or KDF collision at one of the two levels or a snap_key
PRF forgery at either keyed level.  Each leaf carries its index, and the
snapshot binds the heads in order and binds n_seg and payload_info, so a
head cannot move to another position and the segmentation is fixed by
n_seg and epoch_length.</t>
        <t>Without snap_key, a forgery is one of three events.  The first is a
fresh-input forgery of a keyed digest, at the root or at an epoch head:
the digest transcript's PRF term (<xref target="snapshot-security-dt"/>), once at
each keyed level, with no birthday term in the number of published
snapshots.  The second is a collision between two heads over different
runs at the same epoch, a birthday term in the number of epoch runs
folded under snap_key, n_ep plus one for each epoch head a change
recomputes and one for each intermediate snapshot produced between epoch
boundaries, whose last head is partial, at most about q_h^2 / 2^(8*Nh +
1) for q_h such heads.  The header stores the full heads in the clear.
A run whose head equals another run's head verifies in its place under
an unchanged heads run, as at an earlier version of the same slot.  A
run formed at another epoch cannot take that place:  the verifier forms
each leaf with the index of the segment it checks, in the nonce field or
the segment AAD (<xref target="epoch-digest-tree"/>), so this leaf-index binding
separates epochs, only pairs of runs at the same epoch count toward the
term, and the figure is an upper bound.  The third is a second preimage
of LH at an epoch run or at the heads run, a multi-target term over the
n_ep epoch runs and the heads run under each published snapshot, since a
different run with the same digest leaves every keyed value above it
unchanged.</t>
        <t>Against a key holder, and where the ciphertext digest is set,
substituting ciphertext bytes under a fixed published snapshot requires
an LH or KDF collision against that fixed target, a second preimage, at
one of three target classes:  the n_seg leaves shared with the digest
transcript, the n_ep epoch heads, and the single root.  The work factor
is 2^(8*Nh) per target for an ideal hash, or 2^(c/2) for a sponge of
capacity c, 2^256 for TurboSHAKE-256 at Nh = 64, with a benign
multiplicity of n_seg + n_ep + 1.  The two fold levels thus add epoch
and root targets to the transcript's leaf targets without lowering the
per-target strength.</t>
        <t>When LH is HMAC over a Merkle-Damgard hash whose chaining value is Nh
octets, SHA-256 and SHA-512, a long-message second preimage lowers the
work to about 2^(8*Nh) divided by the total number of compression
blocks across the targets.  SHA-384's 64-octet chaining value leaves the
generic figure in force below 2^128 blocks.  A writer that chooses
different ciphertext or leaf lists for both openings of one snapshot
instead faces a birthday collision at 2^(4*Nh), the same ciphertext
equivocation floor as the digest transcript, which the fold does not
lower.</t>
        <t>The public snapshot's two levels bind as the keyed levels do, by the
collision resistance of LH and of the KDF under a public key
(<xref target="snapshot-security-dt"/>), with no PRF term.  Every party is then in
the key holder's position above:  a different leaf list or count under a
fixed, authenticated pub_snapshot needs a second preimage at a leaf, a
public head, or the root, and a signer that wants two openings of one
value faces the birthday collision at 2^(4*Nh).  A substituted witness
head leaves the recomputed pub_snapshot unchanged only through a
collision at the root.  The LH digests at every level are unkeyed and
shared by every object, for the keyed value as for the public one, so
the accounting is aggregate over objects, epochs, intermediate
snapshots, and internal digests.  The commitment and payload_info in
each head, and the leaf indices in each run, separate only the heads
themselves, for both values, and the long-message and sponge figures
above apply to the public runs as to the keyed ones.</t>
        <t>Changing a nonce field or a segment AAD changes the leaf, so the
authenticated snapshot fixes both, and per-index binding holds in both
nonce modes for every suite under the conditions of
<xref target="snapshot-security-dt"/>.  The formal two-level reduction, the
fresh-input forgery term at either keyed level and the LH and KDF terms
at the epoch and root levels, is deferred to the combined proof in
preparation (<xref target="SEALPROOFS"/>), with the digest transcript's.</t>
        <t>This authenticator's verify_segment compares recomputed values against
stored ones at three levels, the snapshot, the epoch head, and the leaf,
and <bcp14>MUST</bcp14> use a constant-time octet comparison at each.  The stored value
compared against at each level is public metadata, and snap_key enters
only through the KDF, whose constant-time requirement is in
<xref target="I-D.sullivan-cfrg-raae"/>, so no comparison carries a secret.  Because
the reference operands are public, the fused single-comparison rule of
the masked multiset hash (<xref target="snapshot-security-mmh"/>) does not apply:  a
per-level early return reveals only which stored region a tampering
party altered, which that party already knows, and leaks no keyed value.</t>
      </section>
    </section>
    <section anchor="named-instantiations">
      <name>SEAL Named Instantiations</name>
      <t>SEAL has many parameters (<xref target="I-D.sullivan-cfrg-raae"/>).  A relying
protocol that does not want to choose them all can cite one of the named
instantiations in the table below.  Each row fixes a profile, a segment
size, the nonce mode, a snapshot authenticator, and one of the
serialization layouts of <xref target="file-layouts"/>, leaving the cipher suite (an
aead_id and a kdf_id from <xref target="concrete"/>) to the referencing protocol.
Each instantiation applies to a cipher suite the same way, so a protocol
writes SEAL-simple(aead_id, kdf_id), SEAL-disk(aead_id, kdf_id), and so
on, to obtain a complete raAE scheme.</t>
      <table anchor="named-instantiation-table">
        <name>SEAL named instantiations</name>
        <thead>
          <tr>
            <th align="left">instantiation_id</th>
            <th align="left">Name</th>
            <th align="left">Profile</th>
            <th align="left">segment_max</th>
            <th align="left">nonce_mode</th>
            <th align="left">epoch</th>
            <th align="left">snap_id</th>
            <th align="left">layout</th>
            <th align="left">ciphertext digest</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">0x0001</td>
            <td align="left">SEAL-simple</td>
            <td align="left">SEAL-RO-v1</td>
            <td align="left">65536</td>
            <td align="left">derived</td>
            <td align="left">32</td>
            <td align="left">0x0000</td>
            <td align="left">linear</td>
            <td align="left">no</td>
          </tr>
          <tr>
            <td align="left">0x0002</td>
            <td align="left">SEAL-attachment</td>
            <td align="left">SEAL-RO-v1</td>
            <td align="left">65536</td>
            <td align="left">derived</td>
            <td align="left">10</td>
            <td align="left">0x0003</td>
            <td align="left">aligned</td>
            <td align="left">yes</td>
          </tr>
          <tr>
            <td align="left">0x0003</td>
            <td align="left">SEAL-attachment-small</td>
            <td align="left">SEAL-RO-v1</td>
            <td align="left">65536</td>
            <td align="left">derived</td>
            <td align="left">10</td>
            <td align="left">0x0002</td>
            <td align="left">aligned</td>
            <td align="left">yes</td>
          </tr>
          <tr>
            <td align="left">0x0004</td>
            <td align="left">SEAL-editable</td>
            <td align="left">SEAL-RW-v1</td>
            <td align="left">65536</td>
            <td align="left">random</td>
            <td align="left">16</td>
            <td align="left">0x0001</td>
            <td align="left">linear</td>
            <td align="left">no</td>
          </tr>
          <tr>
            <td align="left">0x0005</td>
            <td align="left">SEAL-memory</td>
            <td align="left">SEAL-RW-v1</td>
            <td align="left">16384</td>
            <td align="left">random</td>
            <td align="left">16</td>
            <td align="left">0x0001</td>
            <td align="left">aligned</td>
            <td align="left">no</td>
          </tr>
          <tr>
            <td align="left">0x0006</td>
            <td align="left">SEAL-disk</td>
            <td align="left">SEAL-RW-v1</td>
            <td align="left">16384</td>
            <td align="left">random</td>
            <td align="left">16</td>
            <td align="left">0x0001</td>
            <td align="left">split</td>
            <td align="left">no</td>
          </tr>
          <tr>
            <td align="left">0x0007</td>
            <td align="left">SEAL-compact</td>
            <td align="left">SEAL-RW-v1</td>
            <td align="left">16384</td>
            <td align="left">derived</td>
            <td align="left">16</td>
            <td align="left">0x0001</td>
            <td align="left">aligned</td>
            <td align="left">no</td>
          </tr>
          <tr>
            <td align="left">0x0008</td>
            <td align="left">SEAL-log</td>
            <td align="left">SEAL-AO-v1</td>
            <td align="left">16384</td>
            <td align="left">derived</td>
            <td align="left">16</td>
            <td align="left">0x0000</td>
            <td align="left">append-log</td>
            <td align="left">no</td>
          </tr>
        </tbody>
      </table>
      <t>The instantiation_id column is a uint16 code point naming the
instantiation as a whole.  No field defined in this document carries an
instantiation_id.  An instantiation is cited by name, and its parameters
reach the key schedule individually through payload_info
(<xref target="I-D.sullivan-cfrg-raae"/>), which carries aead_id, kdf_id and snap_id
but nothing identifying the instantiation they came from.  The code
point exists so that a protocol negotiating an instantiation need not
mint an identifier of its own.</t>
      <t>The snap_id column selects the snapshot authenticator within the
profile's admitted set (<xref target="profiles"/>).  The ciphertext digest column is
a payload_info choice independent of snap_id
(<xref target="I-D.sullivan-cfrg-raae"/>), and each instantiation pins it:  the
attachment instantiations set it, over their strict authenticators, and
the others do not.</t>
      <t>Every instantiation uses commitment_length = Nh, a fresh 32-octet salt
per object, and the epoch_length in its row
(<xref target="I-D.sullivan-cfrg-raae"/>):  32 for the whole-file SEAL-simple, 10 for
both SEAL-attachment rows, and 16 for the mutable rows and SEAL-log, a
conservative value.  The mutable rows spend that per-epoch-key headroom
on rewrites.  SEAL-log rewrites a segment only by its one re-mark, so
its 16 bounds how many segments share an epoch key, plus the one extra
derived nonce each re-mark draws.  The two SEAL-attachment rows spend
their 10 differently.  SEAL-attachment selects the epoch digest tree,
which reuses epoch_length as its grouping fan-out
(<xref target="epoch-digest-tree"/>), so 10 is the <xref target="epoch-transcript-table"/> value.
SEAL-attachment-small selects the flat digest transcript, which has no
grouping, so there 10 is key rotation alone.</t>
      <t>A row's epoch_length is a choice, so the cipher suite's default
epoch_length (<xref target="I-D.sullivan-cfrg-raae"/>) does not apply to a named
instantiation.  That default fills a gap where no value is chosen, so
the row's value stands even under a 256-bit-nonce suite, whose nonce
size would otherwise make a flat key the natural pick.  A referencing
protocol <bcp14>MAY</bcp14> override the row's value.</t>
      <t>Because a row fixes epoch_length while leaving the KDF open, a suite
with Nh = 64 puts SEAL-attachment outside the
<xref target="epoch-transcript-table"/> guidance, which gives 9 there rather than 10:
2^10 * (Nh + Nt) is 81920, above the 65536 segment_max.  The epoch
digest tree stays correct, and an epoch head then costs two aligned
reads rather than one.  A protocol that wants the single read back pairs
SEAL-attachment with an Nh of 32 or 48, or sets epoch_length to 9.</t>
      <t>The consuming protocol pins the remaining serialization details for
byte-level interoperability (<xref target="file-layouts"/>).</t>
      <t>SEAL-simple is for write-once content read whole:  no snapshot
authenticator, in the reduced immutable linear layout
(<xref target="read-only-layouts"/>).</t>
      <t>SEAL-attachment is for write-once content whose segments a reader
verifies or decrypts individually.  It requires the epoch digest tree
(snap_id 0x0003), and an object under SEAL-attachment <bcp14>MUST</bcp14> carry its
keyed snapshot.  Its aligned layout (<xref target="aligned-layout"/>) lets a reader
verify one segment in two aligned metadata reads plus the segment
itself, without reading the others when the epoch's A_i are empty or at
hand, for objects up to about 128 GiB at the recommended parameters
(<xref target="epoch-transcript-table"/>).</t>
      <t>SEAL-attachment-small is the same for small write-once content, using
the flat digest transcript (snap_id 0x0002) instead of the epoch digest
tree:  the reader checks one segment against the full leaf list rather
than one epoch's run, a fit when the leaf list is one read anyway or the
consumer verifies every segment on the way through.</t>
      <t>SEAL-editable is the basic mutable object with whole-object integrity
from the masked multiset hash (<xref target="masked-multiset-hash"/>), stored in the
linear layout (<xref target="linear-layout"/>).  SEAL-memory targets in-memory random
access with the aligned layout (<xref target="aligned-layout"/>).  SEAL-disk rewrites
individual segments on stored media, with the split layout
(<xref target="split-layout"/>) holding the headers apart from the segment data so a
rewrite touches one segment and extension appends to both streams.</t>
      <t>SEAL-compact is random-access mutable in the aligned layout with a
derived nonce, recomputed rather than stored:  each per-segment metadata
entry is Nt octets instead of Nn + Nt (<xref target="aligned-layout"/>), saving Nn
octets per segment across the large objects the aligned layout targets.
The in-place rewrite reuses that nonce, so it requires an MRAE AEAD and
is deterministic.  For the same reason the writer takes every tag an
update removes, in a rewrite, a re-mark, or a truncation, from locally
trusted state or recomputes the snapshot from every tag
(<xref target="masked-multiset-hash"/>).</t>
      <t>SEAL-log is for a growing archive or log, appended and read in order.
It selects the append-only profile SEAL-AO-v1 with a derived nonce and
the append-log layout (<xref target="append-log-layout"/>), which stores each
ciphertext length so the segment left short by a re-mark can be an
interior one.  It selects a null snapshot, so integrity is per-segment:
a reader authenticates each segment at its index, but the current
segment set is not bound, and truncation or rollback to an earlier
honest length is out of scope, for which a consuming protocol supplies
freshness (<xref target="profiles"/>).  As under every snap_id, the stored log gives
an appender no current count, so a SEAL-log writer keeps its own count
or obtains a fresh one before it appends (<xref target="I-D.sullivan-cfrg-raae"/>).</t>
    </section>
    <section anchor="binding-limits-profiled">
      <name>Binding Limits for Profiled Suites</name>
      <t>For each suite and nonce mode it lists, the table identifies the binding
usage-limit class of <xref target="I-D.sullivan-cfrg-raae"/>.  Numerical entries are
single-key, single-term figures at 2^-32, except the AES-GCM
random-nonce budget, which AES-GCM's own specification caps at 2^32
encryptions per key, here the epoch key, rewrites included
(<xref target="NIST-SP-800-38D"/> Section 8.3).  All are subject to the AEAD's full
analysis and are not aggregate allowances (<xref target="I-D.sullivan-cfrg-raae"/>).</t>
      <table anchor="budget-table">
        <name>Binding limits for profiled suites, length-dependent figures at 64 KiB</name>
        <thead>
          <tr>
            <th align="left">Suite / mode</th>
            <th align="left">Binding limit</th>
            <th align="left">Budget</th>
            <th align="left">Failure mode</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">AES-128-GCM, random</td>
            <td align="left">random-nonce collision</td>
            <td align="left">at most 2^32 per epoch key (specification cap)</td>
            <td align="left">confidentiality and integrity</td>
          </tr>
          <tr>
            <td align="left">AES-256-GCM, random</td>
            <td align="left">random-nonce collision</td>
            <td align="left">at most 2^32 per epoch key (specification cap)</td>
            <td align="left">confidentiality and integrity</td>
          </tr>
          <tr>
            <td align="left">ChaCha20-Poly1305, random</td>
            <td align="left">random-nonce collision</td>
            <td align="left">~2^32 per epoch key</td>
            <td align="left">confidentiality and integrity</td>
          </tr>
          <tr>
            <td align="left">AES-256-GCM-SIV, derived, distinct segments</td>
            <td align="left">derived-nonce MRAE workload</td>
            <td align="left">workload-dependent multi-user bound</td>
            <td align="left">confidentiality and integrity</td>
          </tr>
          <tr>
            <td align="left">AES-256-GCM-SIV, derived, hot segment</td>
            <td align="left">derived-nonce MRAE workload</td>
            <td align="left">workload-dependent multi-user bound</td>
            <td align="left">confidentiality and integrity</td>
          </tr>
          <tr>
            <td align="left">AEGIS-256, random</td>
            <td align="left">forgery bound</td>
            <td align="left">~2^83 forgery attempts per key</td>
            <td align="left">integrity</td>
          </tr>
          <tr>
            <td align="left">AEGIS-256X2, random</td>
            <td align="left">forgery bound</td>
            <td align="left">~2^83 forgery attempts per key</td>
            <td align="left">integrity</td>
          </tr>
        </tbody>
      </table>
      <t>The random-nonce counts depend on nonce size.  Data-volume and forgery
limits also depend on segment length and effective associated data,
under the full block accounting of the applicable AEAD analysis.</t>
      <t>AEGIS makes nonce collision negligible with a 256-bit nonce (~2^112)
and binds on forgery.  For AES-256-GCM-SIV, the data-volume term couples
total processed blocks across all keys and nonces to the maximum
encryption blocks at any one (key, nonce) pair
(<xref target="I-D.sullivan-cfrg-raae"/>).</t>
      <section anchor="instantiation-limits">
        <name>Write Limits by Instantiation</name>
        <t>Once a named instantiation (<xref target="named-instantiations"/>) fixes the segment
size, the nonce mode, and the epoch_length, the classes above determine
how a deployment computes its write limits.  The table below gives
per-key random-nonce illustrations; an aggregate target can bind sooner.
Epoch rotation leaves the structural ceiling at 2^63 segments (about
2^79 octets at segment_max 65536, 2^77 at 16384), but does not guarantee
that the aggregate security budget permits reaching it.  Initial writes
and rewrites both consume that budget (<xref target="I-D.sullivan-cfrg-raae"/>).</t>
        <t>For a random-nonce suite the epoch key holds one shared nonce-collision
pool of about 2^32 segment encryptions (<xref target="I-D.sullivan-cfrg-raae"/>).
Rewriting a single hot segment while the rest stay put can spend most of
that pool on the one segment, so its ceiling is about 2^32.  When the
2^epoch_length segments under the key are rewritten evenly the pool
divides among them, so each takes about 2^(32 - epoch_length) on
average:  this is the bound in force when the epoch key, not a single
segment, is the limiting factor.  These are per-key nonce-collision
figures:  K equally busy epoch keys divide the same aggregate allocation
by K, reducing both rewrite figures by sqrt(K).</t>
        <t>For AES-256-GCM-SIV the hot and average limits depend on the full
workload (<xref target="I-D.sullivan-cfrg-raae"/>).  For the data-volume term alone,
H equally busy (key, nonce) pairs reduce the per-pair count by sqrt(H)
relative to one isolated hot pair.  Rewriting every non-terminal segment
in a full epoch uses about 2^epoch_length pairs, so at epoch_length 16
this scaling reduces the average by about 2^8.  Other epochs, objects,
and initial writes also enter the aggregate bound.</t>
        <table anchor="instantiation-limit-table">
          <name>Qualified segment rewrite limits</name>
          <thead>
            <tr>
              <th align="left">Instantiation</th>
              <th align="left">Segment size</th>
              <th align="left">Rewrites per hot segment</th>
              <th align="left">Avg rewrites per segment</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">SEAL-simple</td>
              <td align="left">64 KiB</td>
              <td align="left">write-once</td>
              <td align="left">write-once</td>
            </tr>
            <tr>
              <td align="left">SEAL-attachment</td>
              <td align="left">64 KiB</td>
              <td align="left">write-once</td>
              <td align="left">write-once</td>
            </tr>
            <tr>
              <td align="left">SEAL-attachment-small</td>
              <td align="left">64 KiB</td>
              <td align="left">write-once</td>
              <td align="left">write-once</td>
            </tr>
            <tr>
              <td align="left">SEAL-editable</td>
              <td align="left">64 KiB</td>
              <td align="left">~2^32</td>
              <td align="left">~2^16</td>
            </tr>
            <tr>
              <td align="left">SEAL-memory</td>
              <td align="left">16 KiB</td>
              <td align="left">~2^32</td>
              <td align="left">~2^16</td>
            </tr>
            <tr>
              <td align="left">SEAL-disk</td>
              <td align="left">16 KiB</td>
              <td align="left">~2^32</td>
              <td align="left">~2^16</td>
            </tr>
            <tr>
              <td align="left">SEAL-compact</td>
              <td align="left">16 KiB</td>
              <td align="left">workload-dependent</td>
              <td align="left">workload-dependent</td>
            </tr>
            <tr>
              <td align="left">SEAL-log</td>
              <td align="left">16 KiB</td>
              <td align="left">one re-mark</td>
              <td align="left">one re-mark</td>
            </tr>
          </tbody>
        </table>
        <t>The figures are for the 96-bit-nonce suites (AES-GCM, ChaCha20-Poly1305)
at the epoch_length 16 these instantiations fix; a smaller epoch_length
raises the average.  They follow from the 12-octet random nonce, not
from the AEAD's key, tag, or block size:  at these segment sizes
random-nonce collision binds before the block-size term
(<xref target="I-D.sullivan-cfrg-raae"/>), so any 96-bit-nonce suite gives the same
figures.  For AES-GCM its specification cap
(<xref target="binding-limits-profiled"/>) gives the same figures as ceilings.  Two
cases depart from them.  An AEGIS suite binds on the forgery bound,
which counts verification attempts rather than rewrites.  A
derived-nonce MRAE suite (AES-256-GCM-SIV, as SEAL-compact takes) uses
the coupled multi-user bound, and absent an allocation the per-object
rule of <xref target="I-D.sullivan-cfrg-raae"/> sets its limit.  SEAL-log rewrites a
segment only by its one re-mark, under a new nonce, since SEAL-AO-v1
derives a fresh nonce for each index and finality bit.</t>
        <t>In random nonce mode a repeated nonce under AES-GCM or ChaCha20-Poly1305
also exposes an authentication key (<xref target="I-D.sullivan-cfrg-raae"/>), so for
those suites the collision term counts against integrity as well.  The
per-query forgery term counts verification attempts.
Its limits come from <xref target="I-D.irtf-cfrg-aead-limits"/> for the GCM and
ChaCha20-Poly1305 suites and <xref target="RFC8452"/> for AES-256-GCM-SIV, and run
from about 2^59 to 2^83 forgery attempts at a single-key, forgery-term
2^-32 target.  Under AES-256-GCM-SIV an attempt's blocks also enter the
coupled data-volume term, which charges each attempt about C * B /
2^128 for every block it processes, with B the largest encryption load
at any one pair (<xref target="I-D.sullivan-cfrg-raae"/>).  The AEGIS analysis states
at least 128-bit forgery security with no per-query formula, so the
AEGIS rows take the AES-GCM figure of about 2^83 as a conservative
floor.  Aggregate integrity accounting counts all attempts across keys
and includes the AEAD's further terms (<xref target="I-D.sullivan-cfrg-raae"/>).</t>
      </section>
    </section>
    <section anchor="streaming-usage">
      <name>Streaming with Prefix Verification</name>
      <t>This section is informative.  A live publisher that holds the CEK
streams segments to many subscribers that also hold it, through relays
that do not.  No layout of <xref target="file-layouts"/> holds an epoch digest tree
object while it is open:  the append-log layout admits no snapshot
authenticator, and the others need the final count to size the header.
The consuming protocol therefore frames the object's payload_info and
commitment, the segments, each as its ciphertext, metadata entry, and
any A_i, and the values.  That framing, the signing key, and the cadence
belong to the consuming protocol.</t>
      <t>The configuration is the epoch digest tree (<xref target="epoch-digest-tree"/>), in
either nonce mode, with epoch_length chosen so that 2^r segments span
the interval at which a subscriber may join.  The consuming protocol
sets the playback window, the delay a reader accepts between playing a
segment and verifying it.</t>
      <t>The publisher follows the writer discipline of <xref target="edt-public"/>.  At each
epoch boundary, and at the count k that ends each playback window, it
publishes, in the consuming protocol's framing, the keyed value
snapshot(k) for subscribers and pub_snapshot(k), in the signed statement
of <xref target="I-D.sullivan-cfrg-raae"/>, for relays and for subscribers that need
its origin, and it keeps the full heads available to late joiners.</t>
      <t>A subscriber plays the segments of the current window on per-segment
authenticity alone, treats that content as not yet verified, and checks
snapshot(k) at each published count as the in-order reader of
<xref target="edt-public"/> does.  On rejection it stops and reports, and it cannot
recall what it has already played.  A subscriber that joins late
continues from the latest boundary as <xref target="edt-public"/> describes for a
reader that joins at k.</t>
      <t>A relay holds no CEK.  It verifies the signed statement and recomputes
pub_snapshot(k) from the leaves of the segments it forwards and their
A_i (<xref target="edt-public"/>).</t>
      <t>Beyond the limits <xref target="edt-public"/> states, the values establish neither of
the following, and a consuming protocol that needs either provides it
itself:</t>
      <ul spacing="normal">
        <li>
          <t>Withholding or delay of segments or values.  The reader cannot tell
one from the other.  The consuming protocol sets cadence and timeouts.</t>
        </li>
        <li>
          <t>Content played before a check that later fails.</t>
        </li>
      </ul>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security analysis of SEAL is in the companion
(<xref target="I-D.sullivan-cfrg-raae"/>):  the ra-ROR joint confidentiality and
authenticity target, the ra-CMT commitment target, the reduction to the
underlying AEAD and KDF, and the concrete bounds and budgets.  This
document adds the per-authenticator forgery analysis
(<xref target="snapshot-authenticator-security"/>) and the profiled limits
(<xref target="binding-limits-profiled"/>).</t>
      <t>With the ciphertext digest set and an externally authenticated snapshot,
the strict authenticators give per-index binding in both nonce modes for
every suite, for any A_i (<xref target="snapshot-security-dt"/>,
<xref target="snapshot-security-edt"/>).  The leaf carries the stored nonce in random
nonce mode, the counter in derived nonce mode, and the segment AAD in
both.  This does not establish ra-CMT-p.</t>
      <t>Public snapshots (<xref target="digest-transcript"/>, <xref target="edt-public"/>) authenticate
nothing on their own.  A verifier accepts one only under the signed
statement <xref target="I-D.sullivan-cfrg-raae"/> requires, parses under the
payload_info parameters it carries, and enforces the witness length.
Public acceptance binds ciphertext through the ciphertext digest that
<xref target="I-D.sullivan-cfrg-raae"/> requires wherever a public snapshot is relied
on, and establishes neither decryption nor any link between the
commitment and a CEK.  Keyed and public acceptance are independent, so a
key holder that claims the signer's origin checks both.  Public binding
rests on collision and second-preimage resistance alone
(<xref target="snapshot-security-dt"/>), with the accounting aggregated over objects,
epochs, intermediate snapshots, and internal digests
(<xref target="snapshot-security-edt"/>), and a public snapshot is not hiding.  An
intermediate snapshot authenticates a prefix only:  completion needs a
signed statement marking the value final and, for a decryptor, the
terminal segment verifying as final.  A signature prevents neither
replay nor withholding nor equivocation, and a consuming protocol states
the freshness and consistency it claims.  The masked multiset hash
defines no public snapshot and no intermediate snapshot.</t>
      <t>The salt is public object metadata.  Confidentiality and integrity in
the single-owner regime assume secrecy of the CEK and derived keys, not
secrecy of the salt.</t>
      <t>The companion's KDF assumptions (<xref target="I-D.sullivan-cfrg-raae"/>) instantiate
on the named suites as follows.  For the HKDF-based suites, the PRF
assumptions are placed on HKDF keyed by the CEK, payload_key, snap_key,
or, under hedged randomness, sk and hedge_key, and the
collision-resistance assumption on the commit derivation reduces to the
collision resistance of the underlying SHA-2 hash.  Because every SEAL
KDF output is at most Nh octets, HKDF-Expand makes a single HMAC call
per derivation, and Section 5 of <xref target="RFC5869"/> refers to the published
analysis of HKDF.  For TurboSHAKE-256 (<xref target="RFC9861"/>), the same
assumptions are placed on the XOF as instantiated by its HPKE KDF
registry entry, which fixes the primitive and its parameters but carries
no security assumptions of its own.</t>
      <t>A private-use snap_id carries a specific hazard.  snap_id is a
payload_info member (<xref target="I-D.sullivan-cfrg-raae"/>), so two deployments
that assign the same private value to different authenticators agree on
payload_info and derive the same commitment, payload_key, and snap_key.
The commitment catches a wrong parameter context (<xref target="profiles"/>) and
precedes a reader's SnapVerify, so the check that would have caught the
mismatch passes, and whatever rejects the object later reports some
other reason rather than the collision.</t>
      <section anchor="resource-exhaustion">
        <name>Resource Exhaustion</name>
        <t>The resource-exhaustion considerations of <xref target="I-D.sullivan-cfrg-raae"/>
apply.  The layouts add to them:  the per-segment metadata and aux
regions grow with segment or epoch counts, so consuming protocols <bcp14>MUST</bcp14>
also limit metadata and aux sizes, and the leaf lists and witness heads
they carry for public verification (<xref target="edt-public"/>).  The overflow and
bounds checks the companion requires cover, in these layouts,
multiplication by segment_max or metadata entry sizes and addition of
header and aux lengths.</t>
        <t>Append-log ciphertext lengths <bcp14>MUST</bcp14> be checked against segment_max, and
the ciphertext plus metadata <bcp14>MUST</bcp14> fit within the available input before
reading a record.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>The aead_id and kdf_id code points that SEAL cipher suites use are
existing entries in the IANA AEAD Algorithms registry (<xref target="RFC5116"/>) and
the HPKE KDF registry (<xref target="RFC9180"/>).  This document does not modify
either registry.</t>
      <t>This document requests two new registries.  Both use uint16 code points,
and both apply Specification Required (<xref target="RFC8126"/>) to 0x0000 through
0xFEFF, reserving 0xFF00 through 0xFFFF for private and experimental
use.  The reservation carries different weight in each.  A private-use
snap_id reaches the key schedule, so it needs the rule stated below.  A
private-use instantiation_id reaches nothing this document defines, and
is reserved so that a protocol which does put one on its own wire has a
range that no future registration will collide with.</t>
      <t>The first is "SEAL Named Instantiations".  An entry fixes a profile, a
maximum segment size, a nonce mode, an epoch length, a snapshot
authenticator, a serialization layout, and a ciphertext-digest setting,
and leaves the cipher suite to the referencing protocol
(<xref target="named-instantiations"/>).  The registry has the columns of
<xref target="named-instantiation-table"/>, namely instantiation_id, Name, Profile,
segment_max, nonce_mode, epoch, snap_id, layout, and ciphertext digest,
plus a Reference column.  Its initial contents are the entries of
<xref target="named-instantiation-table"/>, each referencing this document.</t>
      <t>The second is "SEAL Snapshot Authenticators", which assigns the snap_id
values named in <xref target="snapshot-table"/>.  Its columns are snap_id, Name, Na,
ordering, summary, and Reference, so it records more than that table
does.  Na is the authenticator's keyed snapshot length.  A summary is
any state an authenticator derives from the per-segment inputs and keeps
so that an update reads fewer of them, and it enables no function that
recomputing from the inputs would not.</t>
      <t>The ordering column records whether a party holding snap_key can find a
second segment set with the same keyed snapshot below the cost of a
collision:  linear if the construction offers a route below that cost,
for example by linear algebra or by a generalized birthday search,
strict if finding one is a collision problem, and n/a for an
authenticator that produces no keyed snapshot.  The analysis behind each
value is in <xref target="snapshot-authenticator-security"/>.  The ordering also
decides whether the authenticator has a public snapshot and intermediate
snapshots (<xref target="I-D.sullivan-cfrg-raae"/>).</t>
      <t>The value a registrant chooses here settles the ciphertext-digest
prohibition of <xref target="snapshot-security-dt"/>, without this document naming
the authenticator.</t>
      <t>Where Na or summary holds a size rather than a constant, it holds it as
an expression:  Nh is fixed by the cipher suite the referencing protocol
picks, and n_ep varies per object.  The authenticator's construction
fixes the form, which is what the registry records.</t>
      <t>Each authenticator's summary, when it has one, is stored in the aux
region of the layouts (<xref target="aligned-layout"/>), so Na is Nh under every
authenticator here that produces a keyed snapshot.  The initial contents
are:</t>
      <table anchor="snapshot-registry-table">
        <name>Initial SEAL Snapshot Authenticators registry</name>
        <thead>
          <tr>
            <th align="left">snap_id</th>
            <th align="left">Name</th>
            <th align="left">Na</th>
            <th align="left">ordering</th>
            <th align="left">summary</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">0x0000</td>
            <td align="left">none</td>
            <td align="left">0</td>
            <td align="left">n/a</td>
            <td align="left">none</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">0x0001</td>
            <td align="left">masked multiset hash</td>
            <td align="left">Nh</td>
            <td align="left">linear</td>
            <td align="left">accumulator, masked</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">0x0002</td>
            <td align="left">digest transcript</td>
            <td align="left">Nh</td>
            <td align="left">strict</td>
            <td align="left">none</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">0x0003</td>
            <td align="left">epoch digest tree</td>
            <td align="left">Nh</td>
            <td align="left">strict</td>
            <td align="left">n_ep * Nh epoch heads</td>
            <td align="left">This document</td>
          </tr>
        </tbody>
      </table>
      <t>The ordering column is unrelated to the linear serialization layout of
<xref target="linear-layout"/>, which names a way of arranging bytes rather than a
way of combining inputs.</t>
      <t>A private-use snap_id is not interoperable and <bcp14>MUST NOT</bcp14> appear in an
object intended for exchange (<xref target="security-considerations"/>).</t>
      <t>The following code points are drawn from IANA registries.  AEGIS-256
(0x0021) and AEGIS-256X2 (0x0024) are already registered in the AEAD
Algorithms registry per <xref target="RFC10032"/>.  TurboSHAKE-256 (0x0013) is
registered in the HPKE KDF registry with <xref target="I-D.ietf-hpke-pq"/> as its
reference, which becomes an RFC reference when that draft publishes.
The SEAL normative reference to <xref target="I-D.ietf-hpke-pq"/> is a reference to a
work in progress, so publication of this document waits on it.</t>
      <table anchor="iana-code-points">
        <name>Registered Code Points</name>
        <thead>
          <tr>
            <th align="left">Registry</th>
            <th align="left">Code point</th>
            <th align="left">Algorithm</th>
            <th align="left">Status</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">AEAD Algorithms</td>
            <td align="left">0x0021</td>
            <td align="left">AEGIS-256</td>
            <td align="left">assigned</td>
          </tr>
          <tr>
            <td align="left">AEAD Algorithms</td>
            <td align="left">0x0024</td>
            <td align="left">AEGIS-256X2</td>
            <td align="left">assigned</td>
          </tr>
          <tr>
            <td align="left">HPKE KDF</td>
            <td align="left">0x0013</td>
            <td align="left">TurboSHAKE-256</td>
            <td align="left">assigned, draft reference</td>
          </tr>
        </tbody>
      </table>
      <t>Future SEAL profiles <bcp14>MAY</bcp14> consume additional entries from the AEAD
Algorithms and HPKE KDF registries without revising this document.</t>
      <section anchor="iana-expert-review">
        <name>Designated Expert Review</name>
        <t>For both registries, designated experts review new registrations and
changes to existing entries under the Specification Required policy of
<xref target="RFC8126"/>.  Experts <bcp14>MUST</bcp14> require a stable, publicly available
specification that defines every registry field unambiguously and is
sufficient for independent interoperable implementations.  A changed
definition is a new registration under a new code point and, for an
instantiation, a new name.</t>
        <t>For named instantiations, experts <bcp14>MUST</bcp14> check that the profile, segment
size, nonce mode, epoch length, snap_id, layout, and ciphertext digest
form a valid combination.</t>
        <t>For snapshot authenticators, the specification <bcp14>MUST</bcp14> define:</t>
        <ul spacing="normal">
          <li>
            <t>the complete input encoding,</t>
          </li>
          <li>
            <t>snapshot computation and verification,</t>
          </li>
          <li>
            <t>supported update operations, each with the witness it takes, how the
writer checks that witness, and any removed input that may be used
without a check;</t>
          </li>
          <li>
            <t>any subset verification or summary state; and,</t>
          </li>
          <li>
            <t>where its ordering is strict, it <bcp14>MUST</bcp14> define its public snapshot and
its intermediate snapshots (<xref target="I-D.sullivan-cfrg-raae"/>).</t>
          </li>
        </ul>
        <t>Experts <bcp14>MUST</bcp14> independently assess the requested ordering classification
using the ordering definition of <xref target="iana-considerations"/> and
<xref target="snapshot-authenticator-security"/>.  The analysis <bcp14>MUST</bcp14> consider an
adversary holding snap_key and choosing both segment sets.  Experts <bcp14>MUST</bcp14>
reject a requested strict classification whose analysis does not justify
it, and <bcp14>MUST</bcp14> check the resulting ciphertext-digest restrictions in
<xref target="snapshot-security-dt"/>.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.sullivan-cfrg-raae">
          <front>
            <title>Random-Access Authenticated Encryption</title>
            <author initials="N." surname="Sullivan" fullname="Nick Sullivan">
              <organization/>
            </author>
            <date year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-sullivan-cfrg-raae-04"/>
        </reference>
        <reference anchor="RFC5116">
          <front>
            <title>An Interface and Algorithms for Authenticated Encryption</title>
            <author fullname="D. McGrew" initials="D." surname="McGrew"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>This document defines algorithms for Authenticated Encryption with Associated Data (AEAD), and defines a uniform interface and a registry for such algorithms. The interface and registry can be used as an application-independent set of cryptoalgorithm suites. This approach provides advantages in efficiency and security, and promotes the reuse of crypto implementations. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5116"/>
          <seriesInfo name="DOI" value="10.17487/RFC5116"/>
        </reference>
        <reference anchor="RFC5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <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="RFC8439">
          <front>
            <title>ChaCha20 and Poly1305 for IETF Protocols</title>
            <author fullname="Y. Nir" initials="Y." surname="Nir"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <date month="June" year="2018"/>
            <abstract>
              <t>This document defines the ChaCha20 stream cipher as well as the use of the Poly1305 authenticator, both as stand-alone algorithms and as a "combined mode", or Authenticated Encryption with Associated Data (AEAD) algorithm.</t>
              <t>RFC 7539, the predecessor of this document, was meant to serve as a stable reference and an implementation guide. It was a product of the Crypto Forum Research Group (CFRG). This document merges the errata filed against RFC 7539 and adds a little text to the Security Considerations section.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8439"/>
          <seriesInfo name="DOI" value="10.17487/RFC8439"/>
        </reference>
        <reference anchor="RFC8452">
          <front>
            <title>AES-GCM-SIV: Nonce Misuse-Resistant Authenticated Encryption</title>
            <author fullname="S. Gueron" initials="S." surname="Gueron"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="Y. Lindell" initials="Y." surname="Lindell"/>
            <date month="April" year="2019"/>
            <abstract>
              <t>This memo specifies two authenticated encryption algorithms that are nonce misuse resistant -- that is, they do not fail catastrophically if a nonce is repeated.</t>
              <t>This document is the product of the Crypto Forum Research Group.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8452"/>
          <seriesInfo name="DOI" value="10.17487/RFC8452"/>
        </reference>
        <reference anchor="RFC9180">
          <front>
            <title>Hybrid Public Key Encryption</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="K. Bhargavan" initials="K." surname="Bhargavan"/>
            <author fullname="B. Lipp" initials="B." surname="Lipp"/>
            <author fullname="C. Wood" initials="C." surname="Wood"/>
            <date month="February" year="2022"/>
            <abstract>
              <t>This document describes a scheme for hybrid public key encryption (HPKE). This scheme provides a variant of public key encryption of arbitrary-sized plaintexts for a recipient public key. It also includes three authenticated variants, including one that authenticates possession of a pre-shared key and two optional ones that authenticate possession of a key encapsulation mechanism (KEM) private key. HPKE works for any combination of an asymmetric KEM, key derivation function (KDF), and authenticated encryption with additional data (AEAD) encryption function. Some authenticated variants may not be supported by all KEMs. We provide instantiations of the scheme using widely used and efficient primitives, such as Elliptic Curve Diffie-Hellman (ECDH) key agreement, HMAC-based key derivation function (HKDF), and SHA2.</t>
              <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9180"/>
          <seriesInfo name="DOI" value="10.17487/RFC9180"/>
        </reference>
        <reference anchor="RFC9861">
          <front>
            <title>KangarooTwelve and TurboSHAKE</title>
            <author fullname="B. Viguier" initials="B." surname="Viguier"/>
            <author fullname="D. Wong" initials="D." role="editor" surname="Wong"/>
            <author fullname="G. Van Assche" initials="G." role="editor" surname="Van Assche"/>
            <author fullname="Q. Dang" initials="Q." role="editor" surname="Dang"/>
            <author fullname="J. Daemen" initials="J." role="editor" surname="Daemen"/>
            <date month="October" year="2025"/>
            <abstract>
              <t>This document defines four eXtendable-Output Functions (XOFs), hash functions with output of arbitrary length, named TurboSHAKE128, TurboSHAKE256, KT128, and KT256.</t>
              <t>All four functions provide efficient and secure hashing primitives, and the last two are able to exploit the parallelism of the implementation in a scalable way.</t>
              <t>This document is a product of the Crypto Forum Research Group. It builds up on the definitions of the permutations and of the sponge construction in NIST FIPS 202 and is meant to serve as a stable reference and an implementation guide.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9861"/>
          <seriesInfo name="DOI" value="10.17487/RFC9861"/>
        </reference>
        <reference anchor="RFC10032">
          <front>
            <title>The AEGIS Authenticated Encryption Algorithms</title>
            <author fullname="F. Denis" initials="F." surname="Denis"/>
            <author fullname="S. Lucas" initials="S." surname="Lucas"/>
            <date month="September" year="2026"/>
            <abstract>
              <t>This document describes the AEGIS-128L, AEGIS-256, AEGIS-128X, and AEGIS-256X AES-based authenticated encryption with associated data (AEAD) algorithms designed for high-performance applications. It also specifies their use as stream ciphers and message authentication codes (MACs).</t>
              <t>The document is a product of the Crypto Forum Research Group (CFRG).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="10032"/>
          <seriesInfo name="DOI" value="10.17487/RFC10032"/>
        </reference>
        <reference anchor="I-D.ietf-hpke-pq">
          <front>
            <title>Post-Quantum and Post-Quantum/Traditional Hybrid Algorithms for HPKE</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <author fullname="Deirdre Connolly" initials="D." surname="Connolly">
              <organization>Selkie Cryptography</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   Updating key exchange and public-key encryption protocols to resist
   attack by quantum computers is a high priority given the possibility
   of "harvest now, decrypt later" attacks.  Hybrid Public Key
   Encryption (HPKE) is a widely-used public key encryption scheme based
   on combining a Key Encapsulation Mechanism (KEM), a Key Derivation
   Function (KDF), and an Authenticated Encryption with Associated Data
   (AEAD) scheme.  In this document, we define KEM algorithms for HPKE
   based on both post-quantum KEMs and hybrid constructions of post-
   quantum KEMs with traditional KEMs, as well as a KDF based on SHA-3
   that is suitable for use with these KEMs.  When used with these
   algorithms, HPKE is resilient with respect to attacks by a quantum
   computer.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-hpke-pq-05"/>
        </reference>
        <reference anchor="NIST-SP-800-38D" target="https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf">
          <front>
            <title>Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC</title>
            <author initials="M." surname="Dworkin">
              <organization/>
            </author>
            <date year="2007" month="November"/>
          </front>
          <seriesInfo name="NIST" value="Special Publication 800-38D"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.irtf-cfrg-aead-limits">
          <front>
            <title>Usage Limits on AEAD Algorithms</title>
            <author fullname="Felix Günther" initials="F." surname="Günther">
              <organization>IBM Research Europe - Zurich</organization>
            </author>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="3" month="September" year="2026"/>
            <abstract>
              <t>   An Authenticated Encryption with Associated Data (AEAD) algorithm
   provides confidentiality and integrity.  Excessive use of the same
   key can give an attacker advantages in breaking these properties.
   This document provides simple guidance for users of common AEAD
   functions about how to limit the use of keys in order to bound the
   advantage given to an attacker.  It considers limits in both single-
   and multi-key settings.  This document is a product of the Crypto
   Forum Research Group (CFRG) in the IRTF.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-aead-limits-13"/>
        </reference>
        <reference anchor="Wagner" target="https://doi.org/10.1007/3-540-45708-9_19">
          <front>
            <title>A Generalized Birthday Problem</title>
            <author initials="D." surname="Wagner">
              <organization/>
            </author>
            <date year="2002"/>
          </front>
          <seriesInfo name="CRYPTO" value="2002, LNCS 2442, pp. 288-304"/>
          <seriesInfo name="DOI" value="10.1007/3-540-45708-9_19"/>
        </reference>
        <reference anchor="MSetHash" target="https://doi.org/10.1007/978-3-540-40061-5_12">
          <front>
            <title>Incremental Multiset Hash Functions and Their Application to Memory Integrity Checking</title>
            <author initials="D." surname="Clarke">
              <organization/>
            </author>
            <author initials="S." surname="Devadas">
              <organization/>
            </author>
            <author initials="M." surname="van Dijk">
              <organization/>
            </author>
            <author initials="B." surname="Gassend">
              <organization/>
            </author>
            <author initials="G. E." surname="Suh">
              <organization/>
            </author>
            <date year="2003"/>
          </front>
          <seriesInfo name="ASIACRYPT" value="2003, LNCS 2894, pp. 188-207"/>
          <seriesInfo name="DOI" value="10.1007/978-3-540-40061-5_12"/>
        </reference>
        <reference anchor="DAE" target="https://doi.org/10.1007/11761679_23">
          <front>
            <title>A Provable-Security Treatment of the Key-Wrap Problem</title>
            <author initials="P." surname="Rogaway">
              <organization/>
            </author>
            <author initials="T." surname="Shrimpton">
              <organization/>
            </author>
            <date year="2006"/>
          </front>
          <seriesInfo name="EUROCRYPT" value="2006, LNCS 4004, pp. 373-390"/>
          <seriesInfo name="DOI" value="10.1007/11761679_23"/>
        </reference>
        <reference anchor="SEALPROOFS">
          <front>
            <title>Security Analysis of the SEAL Construction: raAE, Snapshot Integrity, and Commitment</title>
            <author initials="N." surname="Sullivan">
              <organization/>
            </author>
            <date/>
          </front>
          <seriesInfo name="Work in Progress" value="manuscript in preparation"/>
        </reference>
      </references>
    </references>
    <?line 2352?>

<section anchor="seal-simple-sketch">
      <name>SEAL-simple Implementation Sketch</name>
      <t>This appendix is informative.  It specializes <xref target="I-D.sullivan-cfrg-raae"/>
for SEAL-simple (<xref target="named-instantiations"/>).</t>
      <table anchor="seal-simple-sketch-params">
        <name>Fixed parameters for SEAL-simple(HKDF-SHA-256, AES-256-GCM)</name>
        <thead>
          <tr>
            <th align="left">Field</th>
            <th align="left">Value</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">protocol_id</td>
            <td align="left">"SEAL-RO-v1"</td>
          </tr>
          <tr>
            <td align="left">aead_id</td>
            <td align="left">0x0002 (AES-256-GCM)</td>
          </tr>
          <tr>
            <td align="left">kdf_id</td>
            <td align="left">0x0001 (HKDF-SHA-256)</td>
          </tr>
          <tr>
            <td align="left">snap_id</td>
            <td align="left">0x0000 (no snapshot authenticator)</td>
          </tr>
          <tr>
            <td align="left">nonce_mode</td>
            <td align="left">0x01 (derived)</td>
          </tr>
          <tr>
            <td align="left">epoch_length</td>
            <td align="left">32</td>
          </tr>
          <tr>
            <td align="left">segment_max</td>
            <td align="left">65536</td>
          </tr>
          <tr>
            <td align="left">Nk</td>
            <td align="left">32</td>
          </tr>
          <tr>
            <td align="left">Nn</td>
            <td align="left">12</td>
          </tr>
          <tr>
            <td align="left">Nt</td>
            <td align="left">16</td>
          </tr>
          <tr>
            <td align="left">Nh</td>
            <td align="left">32</td>
          </tr>
          <tr>
            <td align="left">commitment_length</td>
            <td align="left">32</td>
          </tr>
          <tr>
            <td align="left">layout</td>
            <td align="left">linear, immutable reduction (<xref target="read-only-layouts"/>)</td>
          </tr>
        </tbody>
      </table>
      <t>Per-segment associated data A_i is empty throughout this sketch, and a
caller that needs a non-empty A_i follows the general segment-AAD form
defined in <xref target="I-D.sullivan-cfrg-raae"/>.</t>
      <t>Three separate quantities bound how large an object under this profile
can grow.  At an aggregate 2^-32 target the confidentiality term binds
first, at no more than about 2^57 octets.</t>
      <ul spacing="normal">
        <li>
          <t>Integrity: 512 ZiB (2^79 octets) of ciphertext has total forgery
probability at most ~2^-52, from the AES-256-GCM tag-forgery formula 2
x v x (n_blk + 1) / 2^128 at v = 2^63 segments and n_blk = 2^12 blocks
per segment (<xref target="I-D.sullivan-cfrg-raae"/>).</t>
        </li>
        <li>
          <t>Confidentiality: with epoch_length 32, each full epoch encrypts
2^32 segments of 2^12 blocks.  The companion's block-size bound gives
about 2^-41 per epoch key.  Summing over all 2^31 keys at the
structural ceiling gives about 2^-10 for this term, exceeding an
aggregate 2^-32 target.  Allocating 2^-32 to this term alone permits
about 2^41 segments (2^57 octets) at this epoch_length; the full
target also reserves advantage for the other terms
(<xref target="I-D.sullivan-cfrg-raae"/>).</t>
        </li>
        <li>
          <t>Structural: 512 ZiB (2^79 octets) is the object ceiling, from
derived-nonce framing capping the segment index at 2^63 across up to
2^31 epoch keys (<xref target="I-D.sullivan-cfrg-raae"/>).</t>
        </li>
      </ul>
      <t>The two blocks below use the linear layout (<xref target="linear-layout"/>) and
apply to either suite: aead_id, kdf_id, commitment_length, Nk, Nn, and
the AEAD are read from the chosen suite's parameter table, and the rest
is common to both.  Each KDF(...) call is that suite's KDF combiner
of <xref target="I-D.sullivan-cfrg-raae"/> (two-step for HKDF, one-step for the
XOF), evaluated at protocol_id = "SEAL-RO-v1" with the derivation label
as its leading argument.  The salt draw, nonce derivation, and finality
check follow the companion's procedures (<xref target="I-D.sullivan-cfrg-raae"/>).</t>
      <t>Encryption derives the message schedule once, then seals each segment
under its epoch key and derived nonce:</t>
      <figure anchor="seal-simple-encrypt">
        <name>SEAL-simple encryption</name>
        <artwork><![CDATA[
inputs:  CEK  (32 octets)
         salt (32 octets, fresh uniformly random draw per object)
         G    (octet string, empty by default)
         P_0, ..., P_{n-1}
              (segment plaintexts;  every non-final P_i is exactly
               65536 octets, only the final P_i may be shorter)

payload_info = [uint16(aead_id),  ;; from the suite table
                uint32(65536),    ;; segment_max_be
                uint16(kdf_id),   ;; from the suite table
                uint16(0x0000),   ;; snap_id
                uint8(0x00),      ;; segment_commitment = not set
                uint8(0x01),      ;; nonce_mode = derived
                uint8(32),        ;; epoch_length_u8
                salt]             ;; 32 octets

commitment  = KDF("commit",
                  [CEK],
                  [...payload_info, G],
                  commitment_length)
payload_key = KDF("payload_key",
                  [CEK],
                  payload_info,
                  Nk)
nonce_base  = KDF("nonce_base",
                  [CEK],
                  payload_info,
                  Nn)

for i in 0 .. n-1:
    is_final = 1 if i = n-1 else 0
    epoch_index = i >> 32   ;; epoch_length = 32
    segment_key = KDF("epoch_key",
                      [payload_key],
                      [uint64(epoch_index)],
                      Nk)
    counter = uint64((i << 1) | is_final)
    nonce(i) = nonce_base[0:Nn-8] || (nonce_base[Nn-8:Nn] XOR counter)
    (ct_i || tag_i) = AEAD.Seal(segment_key, nonce(i), "", P_i)

stored_object = salt || commitment
                || (ct_0 || tag_0)
                || (ct_1 || tag_1)
                || ...
                || (ct_{n-1} || tag_{n-1})
]]></artwork>
      </figure>
      <t>Decryption recomputes the same schedule, checks the commitment to
reject a wrong key early, then opens each segment.  Every non-final
ct_i is exactly 65536 octets and only the final ct_i may be shorter.</t>
      <figure anchor="seal-simple-decrypt">
        <name>SEAL-simple decryption</name>
        <artwork><![CDATA[
inputs:  CEK, stored_object

parse salt, commitment, and ct_0 .. ct_{n-1} from stored_object
recompute payload_info, payload_key, and nonce_base as above

if KDF("commit",
       [CEK],
       [...payload_info, G],
       commitment_length) != commitment:
    return commitment error   ;; wrong CEK, parameter set, or G

for i in 0 .. n-1:
    recompute segment_key, nonce(i), and is_final as in encryption
    P_i = AEAD.Open(segment_key, nonce(i), "", ct_i || tag_i)
          (return a decryption error on AEAD verification failure)
]]></artwork>
      </figure>
      <t>The reader must reject the object if segment n-1 did not open under
is_final = 1.</t>
      <t>The general algorithm's <tt>snap_key</tt> derivation is not used at <tt>snap_id
= 0x0000</tt> and an implementer of this profile omits it.</t>
      <t>See <xref target="seal-simple-vector"/> for the corresponding byte-level test vector.
A conforming implementation reproduces its commitment, payload_key, and
nonce_base, and the per-segment nonce, ciphertext, and tag, from the
fixed inputs.</t>
      <section anchor="seal-simple-modern">
        <name>A Modern CFRG Suite</name>
        <t>The same instantiation admits SEAL-simple(TurboSHAKE-256,
AEGIS-256), reusing existing code points (aead_id = 0x0021,
kdf_id = 0x0013) with no new registrations.</t>
        <table anchor="seal-simple-modern-params">
          <name>Fixed parameters for SEAL-simple(TurboSHAKE-256, AEGIS-256)</name>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">protocol_id</td>
              <td align="left">"SEAL-RO-v1"</td>
            </tr>
            <tr>
              <td align="left">aead_id</td>
              <td align="left">0x0021 (AEGIS-256)</td>
            </tr>
            <tr>
              <td align="left">kdf_id</td>
              <td align="left">0x0013 (TurboSHAKE-256)</td>
            </tr>
            <tr>
              <td align="left">snap_id</td>
              <td align="left">0x0000 (no snapshot authenticator)</td>
            </tr>
            <tr>
              <td align="left">nonce_mode</td>
              <td align="left">0x01 (derived)</td>
            </tr>
            <tr>
              <td align="left">epoch_length</td>
              <td align="left">32</td>
            </tr>
            <tr>
              <td align="left">segment_max</td>
              <td align="left">65536</td>
            </tr>
            <tr>
              <td align="left">Nk</td>
              <td align="left">32</td>
            </tr>
            <tr>
              <td align="left">Nn</td>
              <td align="left">32</td>
            </tr>
            <tr>
              <td align="left">Nt</td>
              <td align="left">16</td>
            </tr>
            <tr>
              <td align="left">Nh</td>
              <td align="left">64</td>
            </tr>
            <tr>
              <td align="left">commitment_length</td>
              <td align="left">64</td>
            </tr>
            <tr>
              <td align="left">layout</td>
              <td align="left">linear, immutable reduction (<xref target="read-only-layouts"/>)</td>
            </tr>
          </tbody>
        </table>
        <t>The encrypt and decrypt blocks above instantiate from this table.  A
256-bit nonce under derived mode is sound because SEAL-RO-v1 never
re-encrypts a position, so the non-MRAE AEAD carries no fixed-nonce
reuse.  The integrity budget is the AEGIS-256 row of <xref target="budget-table"/>,
in place of the AES-256-GCM tag-forgery formula:  about 2^83 forgery
attempts in total across the object's epoch keys at a 2^-32 forgery
term, independent of nonce mode.  The one-step TurboSHAKE-256
derivations are exercised by the component vectors in
<xref target="turboshake-vectors"/>.</t>
      </section>
    </section>
    <section anchor="appendix-snapshot">
      <name>Snapshot Authenticator Reduction</name>
      <t>SEAL's masked multiset hash is the MSet-XOR-Hash of Clarke et al.
(<xref target="MSetHash"/>) with a deterministic mask this document adds.  Each
segment contributes a keyed KDF evaluation of its index and tag, the
contributions XOR into an accumulator, and the published value masks
that accumulator under snap_key.  A different authenticator that meets
the requirement of <xref target="I-D.sullivan-cfrg-raae"/> carries its own argument.</t>
      <t>The adversary has full read and write access to the stored segments,
their metadata, the aux region, and the snapshot, and wins when
SnapVerify accepts presented segments whose (index, input) set or count
differs from the state the writer recorded under the presented snapshot.
A segment's bytes outside its input, such as its stored nonce in random
nonce mode under the masked multiset hash, are bound by its AEAD tag
instead:  a set that changes only those bytes passes SnapVerify and
fails AEAD decryption.  Whole-object rollback to an earlier honest state
is excluded and is the application's freshness responsibility
(<xref target="I-D.sullivan-cfrg-raae"/>).  The game has no writer oracle.  A
writer's check passes on altered input with probability about 2^-(8*Nh)
per check (<xref target="masked-multiset-hash"/>).  A game with a writer oracle and a
win condition over the writer's intended state is deferred to
<xref target="SEALPROOFS"/>.</t>
      <t>Publishing the accumulator in the clear would be insecure.  That is the
MSet-XOR-Hash with its mask removed, which is only set-collision
resistant.  A write adversary reads the accumulator across honest
rewrites, collects the contribution differences old_contrib XOR
new_contrib, and after more than 8*Nh of them solves a GF(2) system for
a subset of segments it can revert without changing the accumulator.
The current snapshot still verifies, so a non-historical mixture of
versions is accepted with no MAC forgery.</t>
      <t>The deterministic mask defeats this attack.  Here wrapped_acc = acc XOR
acc_mask(n_seg, snapshot) hides the accumulator behind a one-time pad
keyed by snap_key and seeded by the snapshot, the synthetic-IV
derandomization of deterministic authenticated encryption (<xref target="DAE"/>).
Two published states that collide on (n_seg, acc), or on the snapshot at
equal count, would expose a raw accumulator difference.  Over q_s
published states that costs a birthday term q_s^2 / 2^m, with m = 8*Nh.
Off that event the masks are independent one-time pads, the published
transcript is independent of every accumulator, and the recombination
above has no linear system left to solve.  Security reduces to the PRF
security of the KDF.  The mask protects the accumulator only against a
verifier that returns one bit, which is why neither SnapVerify nor the
writer surfaces an unmasked accumulator (<xref target="masked-multiset-hash"/>).</t>
      <t>A forgery is then one of two events.  Either a fresh snapshot-tag input
is guessed, a MAC forgery bounded by q_v / 2^m over q_v verifications,
or a different segment set is made to hit a published accumulator by
chance, a mix-and-match bounded by q_s * q_v / 2^m against q_s
published states.  The mix-and-match term is a set collision on the
keyed contribution function and relies on the set-collision resistance
of the MSet-XOR-Hash-style construction (<xref target="MSetHash"/>).  The formal
bound for this term is discharged in <xref target="SEALPROOFS"/>.  Collecting
the terms, the snapshot forgery advantage Adv_snap of
<xref target="I-D.sullivan-cfrg-raae"/> is</t>
      <artwork><![CDATA[
Adv_snap <= q_s^2 / 2^m + q_v / 2^m + q_s * q_v / 2^m
]]></artwork>
      <t>with m = 8*Nh and dominant terms q_s^2 / 2^m and q_s * q_v / 2^m, both
negligible at Nh of 32, 48, or 64.  The mu-PRF cost of the snap_key
derivations is not part of Adv_snap:  the master bound charges it in its
Level B PRF hop (<xref target="I-D.sullivan-cfrg-raae"/>).  The argument relies on
segment AEAD authenticity, already charged as Adv_muROR$
(<xref target="I-D.sullivan-cfrg-raae"/>), and adds no term beyond Adv_snap.  That
charge holds within the master bound's scope, which does not yet cover
re-encrypting a position in either nonce mode.  The SEAL-RW-v1 rows of
<xref target="named-instantiations"/> re-encrypt positions on a rewrite, and their
length changes do when they revisit a pair.  Per-object separation comes
from the salt-bound snap_key, and the authenticator needs no assumption
beyond the multi-user PRF the key schedule already uses.  It does not
need the commitment's collision resistance.  Integrating this reduction
into the combined ra-ROR proof is in preparation (<xref target="SEALPROOFS"/>).</t>
    </section>
    <section anchor="snapshot-rationale">
      <name>Snapshot Authenticator Design Rationale</name>
      <t>Three shapes were considered for whole-object integrity over an
updatable segment set.  A MAC over the concatenated tag list is the
simplest, but a rewrite changes one tag in the middle of the input, so
the writer recomputes over all n_seg tags on every update.  A Merkle
tree over the tags updates in O(log n) and can offer per-segment
inclusion proofs, but it either stores interior nodes that grow with the
object or re-reads segment tags to rebuild paths, and it rests on
collision resistance of a hash.  The masked multiset hash updates in
O(1) per rewrite where the old tag needs no check or comes from trusted
state, stores Nh octets of keyed snapshot plus an Nh-octet aux summary
regardless of object size, needs no per-segment proofs, and needs only
the multi-user PRF assumption the key schedule already carries.  Its
costs are the ones this document states explicitly:  the accumulator
stays masked, the verifier returns a single bit
(<xref target="masked-multiset-hash"/>), and the deterministic mask adds the q_s^2
birthday term to the bound (<xref target="appendix-snapshot"/>).  A profile that
needs per-segment inclusion proofs or third-party verifiability needs a
strict authenticator, such as the epoch digest tree with its public
snapshot (<xref target="edt-public"/>), rather than the masked multiset hash.</t>
      <t>The masked accumulator is stored in the aux region so a writer that
holds a verified snapshot from locally trusted storage or from
authentication outside the construction that carries external freshness,
but not the accumulator, can resume the O(1) update from it after the
check of <xref target="masked-multiset-hash"/>, rather than holding the accumulator
in trusted state or re-reading every tag.  Outside the two exempt cases
of <xref target="masked-multiset-hash"/> a removed tag still needs trusted state or
that re-read:  under a derived nonce, except in a SEAL-AO-v1 re-mark,
and once the random nonce source can repeat.  Storing the accumulator is
why the mask and the one-bit verifier are needed:  an exposed
accumulator would let a write adversary recombine observed values
(<xref target="appendix-snapshot"/>).</t>
      <t>The digest transcript verifies one segment only by recomputing over
every leaf, so a reader of one segment in a large object still reads the
whole leaf list.  In random nonce mode the list includes Np additional
octets per segment for the stored nonces.  The epoch digest tree
(<xref target="epoch-digest-tree"/>) folds the leaves into per-epoch heads and the
heads into the snapshot, so a reader verifies one segment from two
aligned metadata reads:  the target epoch's leaf run and the list of
epoch heads.  Each fits one segment_max read within the
parameter-dependent ceiling of <xref target="epoch-transcript-table"/>.  That is the
cost it saves the digest transcript on large content read at random.</t>
      <t>The epoch digest tree has two levels but is not a Merkle tree.
Verification reconstructs an inclusion proof for a segment, recomputing
its leaf, then its epoch head from the epoch's leaves, then the root
from the epoch heads, rather than transmitting a compact authentication
path.  Recomputing an epoch head reads the epoch's leaf run as one
contiguous aligned read, while a Merkle authentication path would read a
logarithmic set of scattered sibling nodes.  On the aligned layout,
where a reader seeks in segment-sized units, one contiguous aligned read
beats a scattered logarithmic path whenever the run fits one read.  The
same holds one level up for the list of epoch heads.</t>
      <t>The two random-access reads trade off against epoch_length.  The epoch
leaf run, 2^r * meta_len, grows with r and by Np octets per segment in
random nonce mode, while the epoch-heads region, ceil(n_seg / 2^r) *
Nh, shrinks with r as the epochs get fewer and larger.  The largest r
that keeps the leaf run within one aligned read therefore also makes the
epoch-heads region as small as it can be, which pushes the content-size
ceiling as high as it goes.  At that point the two reads are each about
one aligned read, so neither dominates.  The rule in
<xref target="epoch-digest-tree"/> selects that balance point.</t>
      <t>The list of epoch heads is n_ep * Nh octets and stays one aligned read
up to a content-size ceiling:  about 2 GiB at segment_max 16384 and
about 128 GiB at 65536 for derived nonce mode with Nh = 32 and the
recommended epoch_length.  In random nonce mode the larger leaf run may
require a smaller epoch_length and reduce that ceiling.  The ceiling is
a read-efficiency threshold, not a size limit.  Past it the head list
spans a few aligned reads and grows slowly, and the ceiling scales about
cubically with segment_max, so a larger segment size moves it far out at
the cost of coarser random-access granularity.  A tree over the epoch
heads would keep a single bounded read at any size but is out of scope.
The two-read regime already covers the write-once content this
authenticator targets.</t>
    </section>
    <section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>This appendix is informative.</t>
      <t>All vectors printed in this appendix use protocol_id = "SEAL-RW-v1"
except <xref target="seal-simple-vector"/>, <xref target="dt-vectors"/> and <xref target="edt-vectors"/>, which
use "SEAL-RO-v1".  Every object-schedule vector uses CEK = 32 octets of
0xAA and salt = 32 octets of 0x04.  The combiner vectors specify their
own inputs.  Each end-to-end block opens with its parameter set, grouped
into three buckets:  the cipher suite (aead_id, kdf_id), the geometry
(segment_max), and the operational parameters (epoch_length, nonce_mode,
snap_id).  aead_id and kdf_id are the 2-octet IANA code points from
<xref target="aead-table"/> and <xref target="kdf-table"/>.  Then come the payload_info elements
as encoded on the wire, the payload schedule outputs, the per-segment
values, and the snapshot fields.  Hexadecimal values wrap at 16 octets
per line.</t>
      <t>The snapshot fields shown are the accumulator acc and the keyed snapshot
snap_acc.  The stored aux summary wrapped_acc = acc XOR acc_mask(n_seg,
snap_acc) follows from acc and is not shown per block
(<xref target="masked-multiset-hash"/>). acc is an intermediate value, not on the
wire, and the count is recovered from the segment set.</t>
      <t>Single-segment plaintexts are "Hello, SEAL!" (12 octets).  Two-segment
messages append "Two segments of SEAL" (20 octets) as the final segment.
Most vectors use nonce_mode "random" with stored nonces repeated to the
AEAD nonce length:  0x03 and 0x07 for the 12-octet suites, 0x05 and 0x09
for AEGIS-256, and 0x0b for the rewrite's new nonce.  The derived-nonce
vector in <xref target="derived-nonce-vector"/> instead recomputes each nonce from
nonce_base, and the cross-epoch vector in <xref target="cross-epoch-vector"/> sets
epoch_length 0.  Every end-to-end vector exposes the intermediate
epoch_key and segment_key per segment.  <xref target="single-trace"/> gives the full
KDF trace for one commitment.  The other end-to-end blocks list schedule
outputs only.  raae-v1-vectors.json in the draft repository holds 22
entries:  the eighteen end-to-end vectors and the SEAL-simple vector of
this appendix, the negative SnapVerify vector of <xref target="snapverify-reject"/>,
and two append-only vectors that this appendix does not print.  Where
this appendix prints an entry of that file, the values match byte for
byte.</t>
      <t>The combiner vectors (<xref target="combiner-vectors"/>) exercise encode()
injectivity in isolation, including the empty-sequence and
same-octets-different-grouping cases, and the 38 of them are published
as raae-v1-combiner-kdf-vectors.json.  The AEGIS-256 blocks exercise the
flat key at epoch_length = 63, the opposite endpoint to
<xref target="cross-epoch-vector"/>.  No end-to-end vector reaches the
plaintext-bound nonce construction, whose component values
<xref target="pt-bound-vectors"/> exposes.  Every printed vector uses an empty A_i
except <xref target="pt-bound-aad-vector"/>.  The SEAL-AO-v1.append.aad entry of
raae-v1-vectors.json, which this appendix does not print, uses a
non-empty A_i on its re-marked segment, and an empty A_i is omitted from
the encoding rather than encoded as a zero-length element
(<xref target="I-D.sullivan-cfrg-raae"/>).  <xref target="snapverify-reject"/> is a negative
vector:  it tampers a stored segment tag without recomputing the
snapshot, and SnapVerify rejects it.</t>
      <section anchor="single-trace">
        <name>Single Segment, AES-256-GCM, HKDF-SHA-256, 16384</name>
        <artwork><![CDATA[
Parameter set:
  cipher suite:
    aead_id       0x0002  (AEAD_AES_256_GCM)
    kdf_id        0x0001  (HKDF-SHA-256)
  geometry:
    segment_max   16384
  operational:
    epoch_length  16
    nonce_mode    random
    snap_id       0x0001  (masked multiset hash)

payload_info (the KDF frames each element):
  aead_id            ( 2 octets): 0002
  segment_max_be     ( 4 octets): 00004000
  kdf_id             ( 2 octets): 0001
  snap_id            ( 2 octets): 0001
  segment_commitment ( 1 octets): 00
  nonce_mode         ( 1 octets): 00
  epoch_length_u8    ( 1 octets): 10
  salt               (32 octets):
    04040404040404040404040404040404
    04040404040404040404040404040404

Payload schedule:
  commitment   (32 octets):
    7706d3f4915f89991e9ed1028bca9a53
    1645cc94f640b9f1078da70ff67222bd
  payload_key  (32 octets):
    936d885b565d1c766bbb953af0835933
    5507c2280bf9648a1d0bd25609a862cc
  snap_key     (32 octets):
    f58932df737b4ad1479b9ff869ce9851
    ef3ef83c502efbd0c129eeb754cff422

Segment 0 (is_final=1):
  nonce        (12 octets):
    030303030303030303030303
  epoch_key    (32 octets):
    0159a7acb7fdd0c98f8bf7a5e16be705
    178d8ca765506f2ec1b29e3425cbfa75
  segment_key  (32 octets):
    0159a7acb7fdd0c98f8bf7a5e16be705
    178d8ca765506f2ec1b29e3425cbfa75
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000000000101
  ciphertext   (12 octets):
    33b1d46e3b6ca27bbcdc193c
  tag          (16 octets):
    012cf1bcab833ab50281e4145cd1a22b
  contrib      (32 octets):
    291a662719417644d10e146ed9acd003
    344f66ff0f8f4658cfed27db1d0ee8dc

accumulator  (32 octets):
    291a662719417644d10e146ed9acd003
    344f66ff0f8f4658cfed27db1d0ee8dc
snap_acc     (32 octets):
    c84ff39b53468d83982186d0d67bfe2c
    b2c7a83d9ebdb3bec09e0d39fee0f94a

KDF trace for the commitment (HKDF-SHA-256):
  extract_input = encode(protocol_id, "commit", CEK):
    000a5345414c2d52572d76310006636f
    6d6d69740020aaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaa
  prk = HKDF-Extract(salt = protocol_id, extract_input):
    8eb0007f1e8ac96904742b4fb4448aba
    9d8a4b319f72f7e4a6d7bb8aab95737d
  expand_info = encode(protocol_id, "commit", ...payload_info, G,
                       I2OSP(32, 2)):
    000a5345414c2d52572d76310006636f
    6d6d6974000200020004000040000002
    00010002000100010000010000011000
    20040404040404040404040404040404
    04040404040404040404040404040404
    04000000020020
  commitment = HKDF-Expand(prk, expand_info, 32):
    7706d3f4915f89991e9ed1028bca9a53
    1645cc94f640b9f1078da70ff67222bd
]]></artwork>
      </section>
      <section anchor="g-commitment-vector">
        <name>Commitment with Global Associated Data</name>
        <t>These vectors pin the G input (<xref target="I-D.sullivan-cfrg-raae"/>) against the
schedule of <xref target="single-trace"/>:  the same CEK, salt, and payload_info with
G at its empty default and at a nonempty value.  The default case equals
the <xref target="single-trace"/> commitment, since every commitment includes the G
element.  These values are printed here only and are not part of the
end-to-end corpus.</t>
        <artwork><![CDATA[
G default (empty):
  commitment   (32 octets):
    7706d3f4915f89991e9ed1028bca9a53
    1645cc94f640b9f1078da70ff67222bd
  (the Single Segment, AES-256-GCM, HKDF-SHA-256, 16384
   commitment)

G = "raae-demo-g":
  G            (11 octets):
    726161652d64656d6f2d67
  commitment   (32 octets):
    2aec8b93474daee9d26265c85a8d4349
    3b9dfd23d915cf411d521abf2b5738b8
]]></artwork>
      </section>
      <section anchor="combiner-vectors">
        <name>KDF Combiner Vectors</name>
        <t>These vectors exercise the KDF combiner (<xref target="I-D.sullivan-cfrg-raae"/>) in
isolation.  They demonstrate that encode() is injective over
(protocol_id, label, ikm, info, L):  distinct inputs, including inputs
whose octets concatenate to the same string under a different grouping,
have distinct framed inputs, subject to the digest-collision
qualification for over-large fields in the raAE draft.  KDF output
pseudorandomness is a separate property; distinct framed inputs can
produce colliding outputs.  The full set of 38 combiner vectors,
covering both KDF classes and seven of the SEAL labels, is published
byte-for-byte as raae-v1-combiner-kdf-vectors.json in the draft
repository.  All blocks below use ikm equal to a single 32-octet element
of 0xAA.  Hexadecimal values wrap at 16 octets per line.</t>
        <t>The first pair frames the same five info octets 01 02 03 04 05 two ways.
The two expand_info values differ because encode length-prefixes each
element; the vector outputs also differ.  The second pair shows that the
empty sequence and a one-element sequence whose element is the empty
octet string are distinct.  The third pair repeats the distinction in
the one-step form, where encode(...ikm) and encode(...info) are each a
single nested element of the message.</t>
        <artwork><![CDATA[
KDF.29  HKDF-SHA-256, label "commit"  (info = [010203, 0405])
  expand_info = encode(protocol_id, "commit", ...info,
                     I2OSP(32, 2)):
    000a5345414c2d52572d76310006636f
    6d6d6974000301020300020405000200
    20
  output (32 octets):
    0dfb8948fcc220f61f43f291648903b7
    1fe6e5208647b6e18d3308f59fca0fa0

KDF.30  HKDF-SHA-256, label "commit"  (info = [0102, 030405])
  expand_info = encode(protocol_id, "commit", ...info,
                     I2OSP(32, 2)):
    000a5345414c2d52572d76310006636f
    6d6d6974000201020003030405000200
    20
  output (32 octets):
    299aa40869ae880bc8a064bb5afe38c4
    13f420ff30bcbfac7651d5e248b3db98

KDF.8  HKDF-SHA-256, label "commit"  (info = [], the empty sequence)
  expand_info = encode(protocol_id, "commit", ...info,
                     I2OSP(32, 2)):
    000a5345414c2d52572d76310006636f
    6d6d697400020020
  output (32 octets):
    90073e3e9f1c855c2b7460e851f75d1a
    063a1daf007f81e4a695da1a0f97fca6

KDF.28  HKDF-SHA-256, label "commit"  (info = [""], one empty element)
  expand_info = encode(protocol_id, "commit", ...info,
                     I2OSP(32, 2)):
    000a5345414c2d52572d76310006636f
    6d6d6974000000020020
  output (32 octets):
    5a4b4b2d59f5989c598f05a0a448acda
    faf27e10914c3894430ee7482c9a1913

KDF.33  TurboSHAKE-256, label "commit"  (info = [010203, 0405])
  encoded_input = encode(protocol_id, "commit",
                       encode(...ikm), encode(...info),
                       I2OSP(64, 2)):
    000a5345414c2d52572d76310006636f
    6d6d697400220020aaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaa0009000301020300
    02040500020040
  output (64 octets):
    dcefbcdced8b413e18303d2ffe1cac63
    44ee71b13324caa91d1712efc6b81ca8
    9ce2b62ce3aedde0ed16e14d7d17e2f2
    bc69f5e856eb96f9e4845f8522b0a9b5

KDF.34  TurboSHAKE-256, label "commit"  (info = [0102, 030405])
  encoded_input = encode(protocol_id, "commit",
                       encode(...ikm), encode(...info),
                       I2OSP(64, 2)):
    000a5345414c2d52572d76310006636f
    6d6d697400220020aaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaa0009000201020003
    03040500020040
  output (64 octets):
    02958e6256193c71b0cc4b8ac3273b31
    15d1ac30fd9aab537ad6916206be9828
    9146b56526054b3c11e22f2c375d0b24
    43e8d2ad2e6a89b874aa9ef4ce2c9c77
]]></artwork>
      </section>
      <section anchor="single-segment-aes-256-gcm-hkdf-sha-256-65536">
        <name>Single Segment, AES-256-GCM, HKDF-SHA-256, 65536</name>
        <artwork><![CDATA[
Parameter set:
  cipher suite:
    aead_id       0x0002  (AEAD_AES_256_GCM)
    kdf_id        0x0001  (HKDF-SHA-256)
  geometry:
    segment_max   65536
  operational:
    epoch_length  16
    nonce_mode    random
    snap_id       0x0001  (masked multiset hash)

payload_info (the KDF frames each element):
  aead_id            ( 2 octets): 0002
  segment_max_be     ( 4 octets): 00010000
  kdf_id             ( 2 octets): 0001
  snap_id            ( 2 octets): 0001
  segment_commitment ( 1 octets): 00
  nonce_mode         ( 1 octets): 00
  epoch_length_u8    ( 1 octets): 10
  salt               (32 octets):
    04040404040404040404040404040404
    04040404040404040404040404040404

Payload schedule:
  commitment   (32 octets):
    baf545c0c2a06e25f122a9ddab2cbcdd
    cb023c4eef75f89768e9fcd7c7ccff48
  payload_key  (32 octets):
    57fc9c71017c9c090bd860d19ad7d027
    025449dc4f6d3c1e6f4152c9ba755407
  snap_key     (32 octets):
    4b57952a7659282adef51db550f9d65c
    f736f2dbd614e5cbb1e06b08519c5322

Segment 0 (is_final=1):
  nonce        (12 octets):
    030303030303030303030303
  epoch_key    (32 octets):
    011320f3dcde34e3e046d133ad3e26eb
    bed5c5eb7b5361906f250da61585b326
  segment_key  (32 octets):
    011320f3dcde34e3e046d133ad3e26eb
    bed5c5eb7b5361906f250da61585b326
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000000000101
  ciphertext   (12 octets):
    6235217638ab2facfdcc927e
  tag          (16 octets):
    5b525302b6b11ba202efa01c38fe8e0e
  contrib      (32 octets):
    dcd8758c13c5431b5658da7e9d732b60
    c76b258f2e74e084af16f06a0e62487a

accumulator  (32 octets):
    dcd8758c13c5431b5658da7e9d732b60
    c76b258f2e74e084af16f06a0e62487a
snap_acc     (32 octets):
    0135f37d803e9c8b08708d0d7f72de00
    a511ba457927cf07e8d4949eb4e7e4c2
]]></artwork>
      </section>
      <section anchor="single-segment-chacha20-poly1305-hkdf-sha-256-16384">
        <name>Single Segment, ChaCha20-Poly1305, HKDF-SHA-256, 16384</name>
        <artwork><![CDATA[
Parameter set:
  cipher suite:
    aead_id       0x001d  (AEAD_CHACHA20_POLY1305)
    kdf_id        0x0001  (HKDF-SHA-256)
  geometry:
    segment_max   16384
  operational:
    epoch_length  16
    nonce_mode    random
    snap_id       0x0001  (masked multiset hash)

payload_info (the KDF frames each element):
  aead_id            ( 2 octets): 001d
  segment_max_be     ( 4 octets): 00004000
  kdf_id             ( 2 octets): 0001
  snap_id            ( 2 octets): 0001
  segment_commitment ( 1 octets): 00
  nonce_mode         ( 1 octets): 00
  epoch_length_u8    ( 1 octets): 10
  salt               (32 octets):
    04040404040404040404040404040404
    04040404040404040404040404040404

Payload schedule:
  commitment   (32 octets):
    f4fe69fb8cbdd13e5350efbe556eec72
    f8a15bf6b82d1cfa8d5766537798be6e
  payload_key  (32 octets):
    f3cc064929b3360130fe81ada4cf0504
    8ed7597e38b3f352066af1cb253a0448
  snap_key     (32 octets):
    a27457c2d4a08a79ec25137056518543
    8eef13d7ccb19f568199e16b05ccc40a

Segment 0 (is_final=1):
  nonce        (12 octets):
    030303030303030303030303
  epoch_key    (32 octets):
    5ce1508680ee611d4688d906b0a177c9
    5b976e445653d96a2f32eac0b5f3d647
  segment_key  (32 octets):
    5ce1508680ee611d4688d906b0a177c9
    5b976e445653d96a2f32eac0b5f3d647
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000000000101
  ciphertext   (12 octets):
    380e5c6dfefe7fa9ef0c984b
  tag          (16 octets):
    4be0f9482fe889b5875a0abf520ecac8
  contrib      (32 octets):
    88dc23a7bf62deece26e9701d0c45b01
    7614863581f6bb061353d362fae86004

accumulator  (32 octets):
    88dc23a7bf62deece26e9701d0c45b01
    7614863581f6bb061353d362fae86004
snap_acc     (32 octets):
    66958e1b459d872ee1cb648f38998faf
    822954c178d8a5b45866266e33abf563
]]></artwork>
      </section>
      <section anchor="single-segment-chacha20-poly1305-hkdf-sha-256-65536">
        <name>Single Segment, ChaCha20-Poly1305, HKDF-SHA-256, 65536</name>
        <artwork><![CDATA[
Parameter set:
  cipher suite:
    aead_id       0x001d  (AEAD_CHACHA20_POLY1305)
    kdf_id        0x0001  (HKDF-SHA-256)
  geometry:
    segment_max   65536
  operational:
    epoch_length  16
    nonce_mode    random
    snap_id       0x0001  (masked multiset hash)

payload_info (the KDF frames each element):
  aead_id            ( 2 octets): 001d
  segment_max_be     ( 4 octets): 00010000
  kdf_id             ( 2 octets): 0001
  snap_id            ( 2 octets): 0001
  segment_commitment ( 1 octets): 00
  nonce_mode         ( 1 octets): 00
  epoch_length_u8    ( 1 octets): 10
  salt               (32 octets):
    04040404040404040404040404040404
    04040404040404040404040404040404

Payload schedule:
  commitment   (32 octets):
    4c53947f6a3009af80b4d460aedbeeb4
    3f0aa693ae4404077f2c36a627af857c
  payload_key  (32 octets):
    a85bf6fc24a865aa90d27793e271ba5e
    083e8e8a870b4cc6b3895ee826568593
  snap_key     (32 octets):
    233fc79182c09d21e15018bb857344ba
    184e95ad759e7adac62e27abea9f1dba

Segment 0 (is_final=1):
  nonce        (12 octets):
    030303030303030303030303
  epoch_key    (32 octets):
    daad450b03a10156d0c852a4c67f50dc
    6bf2530c162c41ea65ea9940d4dcc4a1
  segment_key  (32 octets):
    daad450b03a10156d0c852a4c67f50dc
    6bf2530c162c41ea65ea9940d4dcc4a1
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000000000101
  ciphertext   (12 octets):
    2a1515bbd956c85130f6b4db
  tag          (16 octets):
    e1bd87be8732e6896cc5d9d14ffcbcf3
  contrib      (32 octets):
    4ea365498faa3849cc569821e808f592
    558a322fb5657722d6f614bcedffd5d2

accumulator  (32 octets):
    4ea365498faa3849cc569821e808f592
    558a322fb5657722d6f614bcedffd5d2
snap_acc     (32 octets):
    948b744ce3566f8275d37c5c5c23e16d
    0b96a8c1ebf02ee2e42c88d68c31f653
]]></artwork>
      </section>
      <section anchor="single-segment-aegis-256-hkdf-sha-256-16384">
        <name>Single Segment, AEGIS-256, HKDF-SHA-256, 16384</name>
        <artwork><![CDATA[
Parameter set:
  cipher suite:
    aead_id       0x0021  (AEAD_AEGIS256)
    kdf_id        0x0001  (HKDF-SHA-256)
  geometry:
    segment_max   16384
  operational:
    epoch_length  63
    nonce_mode    random
    snap_id       0x0001  (masked multiset hash)

payload_info (the KDF frames each element):
  aead_id            ( 2 octets): 0021
  segment_max_be     ( 4 octets): 00004000
  kdf_id             ( 2 octets): 0001
  snap_id            ( 2 octets): 0001
  segment_commitment ( 1 octets): 00
  nonce_mode         ( 1 octets): 00
  epoch_length_u8    ( 1 octets): 3f
  salt               (32 octets):
    04040404040404040404040404040404
    04040404040404040404040404040404

Payload schedule:
  commitment   (32 octets):
    e68d98a673d4efa934648ebd5becd3a2
    9dc693ca67bd5045c16a98d7c43904fc
  payload_key  (32 octets):
    81ef074bf215dfc0762bf55b46e175f5
    77c9a172b55cd72a3867f8c47926f4d9
  snap_key     (32 octets):
    9cbe04d362b6e8b1a681a0454e9047e3
    fa4b043da79e5c26fbcfba4121e042e4

Segment 0 (is_final=1):
  nonce        (32 octets):
    05050505050505050505050505050505
    05050505050505050505050505050505
  epoch_key    (32 octets):
    86c56736585c2d3b2c94f8cc43bd1a9a
    cead3e50488662d76ac8d2b35378a9d8
  segment_key  (32 octets):
    86c56736585c2d3b2c94f8cc43bd1a9a
    cead3e50488662d76ac8d2b35378a9d8
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000000000101
  ciphertext   (12 octets):
    634d88305091db5f0098e812
  tag          (16 octets):
    ea991eed529172733e08586177bf9a7e
  contrib      (32 octets):
    d353493b40ae4e26caf474cbe932da0e
    b88793b6b59e5c4376a2ea74bcc2acd8

accumulator  (32 octets):
    d353493b40ae4e26caf474cbe932da0e
    b88793b6b59e5c4376a2ea74bcc2acd8
snap_acc     (32 octets):
    43f0bcf35f24090ce02a13ee87d2d3df
    d1870b7327081864269a2af64113803e
]]></artwork>
      </section>
      <section anchor="single-segment-aegis-256-hkdf-sha-256-65536">
        <name>Single Segment, AEGIS-256, HKDF-SHA-256, 65536</name>
        <artwork><![CDATA[
Parameter set:
  cipher suite:
    aead_id       0x0021  (AEAD_AEGIS256)
    kdf_id        0x0001  (HKDF-SHA-256)
  geometry:
    segment_max   65536
  operational:
    epoch_length  63
    nonce_mode    random
    snap_id       0x0001  (masked multiset hash)

payload_info (the KDF frames each element):
  aead_id            ( 2 octets): 0021
  segment_max_be     ( 4 octets): 00010000
  kdf_id             ( 2 octets): 0001
  snap_id            ( 2 octets): 0001
  segment_commitment ( 1 octets): 00
  nonce_mode         ( 1 octets): 00
  epoch_length_u8    ( 1 octets): 3f
  salt               (32 octets):
    04040404040404040404040404040404
    04040404040404040404040404040404

Payload schedule:
  commitment   (32 octets):
    cf3c988d6cfc47d936e88f85cf97b623
    c106bc9500baa1fd14fc4f7e1362352c
  payload_key  (32 octets):
    5a60091f7fe09a7a8e282354c0bfa9f9
    01406d4a47df0744f9b45ecd66e708be
  snap_key     (32 octets):
    e40f2739a89376e9548956e08fb79c55
    5b1f958068fa482a12c0eef725b8d16c

Segment 0 (is_final=1):
  nonce        (32 octets):
    05050505050505050505050505050505
    05050505050505050505050505050505
  epoch_key    (32 octets):
    f15f37e9c4e2565cfe8ee1cc27332090
    e4fd3a88948a2fd246cc4cb717c9a05b
  segment_key  (32 octets):
    f15f37e9c4e2565cfe8ee1cc27332090
    e4fd3a88948a2fd246cc4cb717c9a05b
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000000000101
  ciphertext   (12 octets):
    75a66ad40b2f7dbea1d72669
  tag          (16 octets):
    a0ff8815a35577d0ed0d5b1483f89131
  contrib      (32 octets):
    7450c8653dc69f6d0601c1cf6f14abff
    4254241d31ddd1200ecd9229ecd9ded2

accumulator  (32 octets):
    7450c8653dc69f6d0601c1cf6f14abff
    4254241d31ddd1200ecd9229ecd9ded2
snap_acc     (32 octets):
    8ac245e01ffded4c18ad1e45b2a0e652
    307d4704714c0fe59636eb2ea7dd867f
]]></artwork>
      </section>
      <section anchor="two-segment-aes-256-gcm-hkdf-sha-256-16384">
        <name>Two Segment, AES-256-GCM, HKDF-SHA-256, 16384</name>
        <artwork><![CDATA[
Parameter set:
  cipher suite:
    aead_id       0x0002  (AEAD_AES_256_GCM)
    kdf_id        0x0001  (HKDF-SHA-256)
  geometry:
    segment_max   16384
  operational:
    epoch_length  16
    nonce_mode    random
    snap_id       0x0001  (masked multiset hash)

payload_info (the KDF frames each element):
  aead_id            ( 2 octets): 0002
  segment_max_be     ( 4 octets): 00004000
  kdf_id             ( 2 octets): 0001
  snap_id            ( 2 octets): 0001
  segment_commitment ( 1 octets): 00
  nonce_mode         ( 1 octets): 00
  epoch_length_u8    ( 1 octets): 10
  salt               (32 octets):
    04040404040404040404040404040404
    04040404040404040404040404040404

Payload schedule:
  commitment   (32 octets):
    7706d3f4915f89991e9ed1028bca9a53
    1645cc94f640b9f1078da70ff67222bd
  payload_key  (32 octets):
    936d885b565d1c766bbb953af0835933
    5507c2280bf9648a1d0bd25609a862cc
  snap_key     (32 octets):
    f58932df737b4ad1479b9ff869ce9851
    ef3ef83c502efbd0c129eeb754cff422

Segment 0 (is_final=0):
  nonce        (12 octets):
    030303030303030303030303
  epoch_key    (32 octets):
    0159a7acb7fdd0c98f8bf7a5e16be705
    178d8ca765506f2ec1b29e3425cbfa75
  segment_key  (32 octets):
    0159a7acb7fdd0c98f8bf7a5e16be705
    178d8ca765506f2ec1b29e3425cbfa75
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000000000100
  ciphertext   (12 octets):
    33b1d46e3b6ca27bbcdc193c
  tag          (16 octets):
    ceef44c0a1e66b099ca426bd45ab6ce1
  contrib      (32 octets):
    d57594c97679e40db9a87de7f5b92bc8
    6b2b605e1fb99dc68881ffb41daa47e1
Segment 1 (is_final=1):
  nonce        (12 octets):
    070707070707070707070707
  epoch_key    (32 octets):
    0159a7acb7fdd0c98f8bf7a5e16be705
    178d8ca765506f2ec1b29e3425cbfa75
  segment_key  (32 octets):
    0159a7acb7fdd0c98f8bf7a5e16be705
    178d8ca765506f2ec1b29e3425cbfa75
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000001000101
  ciphertext   (20 octets):
    1e1199855c2bf0c998c4e6be6d2411b3
    cd57ec92
  tag          (16 octets):
    9a42952022f491d13ce63ca64ae03d35
  contrib      (32 octets):
    c16e615b698818e59627ff16b4c3d8bf
    21e10981587f463acbc2387f1e47b425

accumulator  (32 octets):
    141bf5921ff1fce82f8f82f1417af377
    4aca69df47c6dbfc4343c7cb03edf3c4
snap_acc     (32 octets):
    69ab7af3f074d9deaa75ca0192d72a95
    e0d1b34a045cc716439a9a0cceb5b781
]]></artwork>
      </section>
      <section anchor="two-segment-aes-256-gcm-hkdf-sha-256-65536">
        <name>Two Segment, AES-256-GCM, HKDF-SHA-256, 65536</name>
        <artwork><![CDATA[
Parameter set:
  cipher suite:
    aead_id       0x0002  (AEAD_AES_256_GCM)
    kdf_id        0x0001  (HKDF-SHA-256)
  geometry:
    segment_max   65536
  operational:
    epoch_length  16
    nonce_mode    random
    snap_id       0x0001  (masked multiset hash)

payload_info (the KDF frames each element):
  aead_id            ( 2 octets): 0002
  segment_max_be     ( 4 octets): 00010000
  kdf_id             ( 2 octets): 0001
  snap_id            ( 2 octets): 0001
  segment_commitment ( 1 octets): 00
  nonce_mode         ( 1 octets): 00
  epoch_length_u8    ( 1 octets): 10
  salt               (32 octets):
    04040404040404040404040404040404
    04040404040404040404040404040404

Payload schedule:
  commitment   (32 octets):
    baf545c0c2a06e25f122a9ddab2cbcdd
    cb023c4eef75f89768e9fcd7c7ccff48
  payload_key  (32 octets):
    57fc9c71017c9c090bd860d19ad7d027
    025449dc4f6d3c1e6f4152c9ba755407
  snap_key     (32 octets):
    4b57952a7659282adef51db550f9d65c
    f736f2dbd614e5cbb1e06b08519c5322

Segment 0 (is_final=0):
  nonce        (12 octets):
    030303030303030303030303
  epoch_key    (32 octets):
    011320f3dcde34e3e046d133ad3e26eb
    bed5c5eb7b5361906f250da61585b326
  segment_key  (32 octets):
    011320f3dcde34e3e046d133ad3e26eb
    bed5c5eb7b5361906f250da61585b326
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000000000100
  ciphertext   (12 octets):
    6235217638ab2facfdcc927e
  tag          (16 octets):
    b2297c8e21d2f47eb4ec84160661f457
  contrib      (32 octets):
    ae041a29353fc08425fe898e9f5aa2ef
    5176b5e33c5159dbffca108f1ed2b4d5
Segment 1 (is_final=1):
  nonce        (12 octets):
    070707070707070707070707
  epoch_key    (32 octets):
    011320f3dcde34e3e046d133ad3e26eb
    bed5c5eb7b5361906f250da61585b326
  segment_key  (32 octets):
    011320f3dcde34e3e046d133ad3e26eb
    bed5c5eb7b5361906f250da61585b326
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000001000101
  ciphertext   (20 octets):
    8bbebac4b9af2bc7f1b6c0d611a8bc61
    e060785f
  tag          (16 octets):
    683ca39408012058e29496e046765c50
  contrib      (32 octets):
    ce1de64f2686b4639b99880adb98630c
    85cd1486f02b1e2b6e71908d770f0033

accumulator  (32 octets):
    6019fc6613b974e7be67018444c2c1e3
    d4bba165cc7a47f091bb800269ddb4e6
snap_acc     (32 octets):
    cc155a59891885838c1667f916f50d89
    c45759f84b7e5dbd1159e653e08842ef
]]></artwork>
      </section>
      <section anchor="two-segment-chacha20-poly1305-hkdf-sha-256-16384">
        <name>Two Segment, ChaCha20-Poly1305, HKDF-SHA-256, 16384</name>
        <artwork><![CDATA[
Parameter set:
  cipher suite:
    aead_id       0x001d  (AEAD_CHACHA20_POLY1305)
    kdf_id        0x0001  (HKDF-SHA-256)
  geometry:
    segment_max   16384
  operational:
    epoch_length  16
    nonce_mode    random
    snap_id       0x0001  (masked multiset hash)

payload_info (the KDF frames each element):
  aead_id            ( 2 octets): 001d
  segment_max_be     ( 4 octets): 00004000
  kdf_id             ( 2 octets): 0001
  snap_id            ( 2 octets): 0001
  segment_commitment ( 1 octets): 00
  nonce_mode         ( 1 octets): 00
  epoch_length_u8    ( 1 octets): 10
  salt               (32 octets):
    04040404040404040404040404040404
    04040404040404040404040404040404

Payload schedule:
  commitment   (32 octets):
    f4fe69fb8cbdd13e5350efbe556eec72
    f8a15bf6b82d1cfa8d5766537798be6e
  payload_key  (32 octets):
    f3cc064929b3360130fe81ada4cf0504
    8ed7597e38b3f352066af1cb253a0448
  snap_key     (32 octets):
    a27457c2d4a08a79ec25137056518543
    8eef13d7ccb19f568199e16b05ccc40a

Segment 0 (is_final=0):
  nonce        (12 octets):
    030303030303030303030303
  epoch_key    (32 octets):
    5ce1508680ee611d4688d906b0a177c9
    5b976e445653d96a2f32eac0b5f3d647
  segment_key  (32 octets):
    5ce1508680ee611d4688d906b0a177c9
    5b976e445653d96a2f32eac0b5f3d647
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000000000100
  ciphertext   (12 octets):
    380e5c6dfefe7fa9ef0c984b
  tag          (16 octets):
    3b0ca59d3fad576db397443169f530d7
  contrib      (32 octets):
    a2dbc5eab4c796ea413a170faa145efa
    a437e6f3614853aa03c25f1d71fff29b
Segment 1 (is_final=1):
  nonce        (12 octets):
    070707070707070707070707
  epoch_key    (32 octets):
    5ce1508680ee611d4688d906b0a177c9
    5b976e445653d96a2f32eac0b5f3d647
  segment_key  (32 octets):
    5ce1508680ee611d4688d906b0a177c9
    5b976e445653d96a2f32eac0b5f3d647
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000001000101
  ciphertext   (20 octets):
    01009b303595704e4ca46e044a55b085
    bbcbade7
  tag          (16 octets):
    9a72e1e7662150a1da1d67e2cdaffdea
  contrib      (32 octets):
    23c59a50f5f8921707f067a0222a8bab
    aeea7fe7b60c2bf5be7462f59fd3c0ba

accumulator  (32 octets):
    811e5fba413f04fd46ca70af883ed551
    0add9914d744785fbdb63de8ee2c3221
snap_acc     (32 octets):
    6de876d299401a9b6bf938349ad63972
    2608fc82a226c994e7783228a14cb75a
]]></artwork>
      </section>
      <section anchor="two-segment-chacha20-poly1305-hkdf-sha-256-65536">
        <name>Two Segment, ChaCha20-Poly1305, HKDF-SHA-256, 65536</name>
        <artwork><![CDATA[
Parameter set:
  cipher suite:
    aead_id       0x001d  (AEAD_CHACHA20_POLY1305)
    kdf_id        0x0001  (HKDF-SHA-256)
  geometry:
    segment_max   65536
  operational:
    epoch_length  16
    nonce_mode    random
    snap_id       0x0001  (masked multiset hash)

payload_info (the KDF frames each element):
  aead_id            ( 2 octets): 001d
  segment_max_be     ( 4 octets): 00010000
  kdf_id             ( 2 octets): 0001
  snap_id            ( 2 octets): 0001
  segment_commitment ( 1 octets): 00
  nonce_mode         ( 1 octets): 00
  epoch_length_u8    ( 1 octets): 10
  salt               (32 octets):
    04040404040404040404040404040404
    04040404040404040404040404040404

Payload schedule:
  commitment   (32 octets):
    4c53947f6a3009af80b4d460aedbeeb4
    3f0aa693ae4404077f2c36a627af857c
  payload_key  (32 octets):
    a85bf6fc24a865aa90d27793e271ba5e
    083e8e8a870b4cc6b3895ee826568593
  snap_key     (32 octets):
    233fc79182c09d21e15018bb857344ba
    184e95ad759e7adac62e27abea9f1dba

Segment 0 (is_final=0):
  nonce        (12 octets):
    030303030303030303030303
  epoch_key    (32 octets):
    daad450b03a10156d0c852a4c67f50dc
    6bf2530c162c41ea65ea9940d4dcc4a1
  segment_key  (32 octets):
    daad450b03a10156d0c852a4c67f50dc
    6bf2530c162c41ea65ea9940d4dcc4a1
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000000000100
  ciphertext   (12 octets):
    2a1515bbd956c85130f6b4db
  tag          (16 octets):
    3477dc5bc923430f576d8817ec6b00ee
  contrib      (32 octets):
    c94ae2e9364ca8b045a8b7aac15fe6fc
    4d5b85b5d4014664a62e6af0900bfb5d
Segment 1 (is_final=1):
  nonce        (12 octets):
    070707070707070707070707
  epoch_key    (32 octets):
    daad450b03a10156d0c852a4c67f50dc
    6bf2530c162c41ea65ea9940d4dcc4a1
  segment_key  (32 octets):
    daad450b03a10156d0c852a4c67f50dc
    6bf2530c162c41ea65ea9940d4dcc4a1
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000001000101
  ciphertext   (20 octets):
    52a3232463a12502753a2594adfdc5a7
    ae7da02e
  tag          (16 octets):
    f4b4fb238f6fb2655cc7f296806b877a
  contrib      (32 octets):
    07f76273b413de6e98241836cb9b1a14
    9852c4fa47436a2adeb44f40023c4e01

accumulator  (32 octets):
    cebd809a825f76dedd8caf9c0ac4fce8
    d509414f93422c4e789a25b09237b55c
snap_acc     (32 octets):
    7b448954d1af6e545b0dfba7ea33b1a7
    e9709331559b9ab8fd4ac8a9a912953a
]]></artwork>
      </section>
      <section anchor="two-segment-aegis-256-hkdf-sha-256-16384">
        <name>Two Segment, AEGIS-256, HKDF-SHA-256, 16384</name>
        <artwork><![CDATA[
Parameter set:
  cipher suite:
    aead_id       0x0021  (AEAD_AEGIS256)
    kdf_id        0x0001  (HKDF-SHA-256)
  geometry:
    segment_max   16384
  operational:
    epoch_length  63
    nonce_mode    random
    snap_id       0x0001  (masked multiset hash)

payload_info (the KDF frames each element):
  aead_id            ( 2 octets): 0021
  segment_max_be     ( 4 octets): 00004000
  kdf_id             ( 2 octets): 0001
  snap_id            ( 2 octets): 0001
  segment_commitment ( 1 octets): 00
  nonce_mode         ( 1 octets): 00
  epoch_length_u8    ( 1 octets): 3f
  salt               (32 octets):
    04040404040404040404040404040404
    04040404040404040404040404040404

Payload schedule:
  commitment   (32 octets):
    e68d98a673d4efa934648ebd5becd3a2
    9dc693ca67bd5045c16a98d7c43904fc
  payload_key  (32 octets):
    81ef074bf215dfc0762bf55b46e175f5
    77c9a172b55cd72a3867f8c47926f4d9
  snap_key     (32 octets):
    9cbe04d362b6e8b1a681a0454e9047e3
    fa4b043da79e5c26fbcfba4121e042e4

Segment 0 (is_final=0):
  nonce        (32 octets):
    05050505050505050505050505050505
    05050505050505050505050505050505
  epoch_key    (32 octets):
    86c56736585c2d3b2c94f8cc43bd1a9a
    cead3e50488662d76ac8d2b35378a9d8
  segment_key  (32 octets):
    86c56736585c2d3b2c94f8cc43bd1a9a
    cead3e50488662d76ac8d2b35378a9d8
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000000000100
  ciphertext   (12 octets):
    634d88305091db5f0098e812
  tag          (16 octets):
    fd26193262bd6456169534b3f308fe33
  contrib      (32 octets):
    edeeece9b0520ab3e7cda65bc3a5b2e8
    0ca5094a0a4e79b1f540a3c55745419b
Segment 1 (is_final=1):
  nonce        (32 octets):
    09090909090909090909090909090909
    09090909090909090909090909090909
  epoch_key    (32 octets):
    86c56736585c2d3b2c94f8cc43bd1a9a
    cead3e50488662d76ac8d2b35378a9d8
  segment_key  (32 octets):
    86c56736585c2d3b2c94f8cc43bd1a9a
    cead3e50488662d76ac8d2b35378a9d8
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000001000101
  ciphertext   (20 octets):
    913ab481d7c9073abb785082ec4157f9
    d905694a
  tag          (16 octets):
    bc42b159ace2c7881763a7d1fa211cd4
  contrib      (32 octets):
    e53f056d7c40d763b975fd277a3a50bb
    20d6a58f7eac54fd76fd425daf15b803

accumulator  (32 octets):
    08d1e984cc12ddd05eb85b7cb99fe253
    2c73acc574e22d4c83bde198f850f998
snap_acc     (32 octets):
    187930ddac437a7a0e174dd45e1d76ed
    e2fd180113da1432618745d6088c825e
]]></artwork>
      </section>
      <section anchor="two-segment-aegis-256-hkdf-sha-256-65536">
        <name>Two Segment, AEGIS-256, HKDF-SHA-256, 65536</name>
        <artwork><![CDATA[
Parameter set:
  cipher suite:
    aead_id       0x0021  (AEAD_AEGIS256)
    kdf_id        0x0001  (HKDF-SHA-256)
  geometry:
    segment_max   65536
  operational:
    epoch_length  63
    nonce_mode    random
    snap_id       0x0001  (masked multiset hash)

payload_info (the KDF frames each element):
  aead_id            ( 2 octets): 0021
  segment_max_be     ( 4 octets): 00010000
  kdf_id             ( 2 octets): 0001
  snap_id            ( 2 octets): 0001
  segment_commitment ( 1 octets): 00
  nonce_mode         ( 1 octets): 00
  epoch_length_u8    ( 1 octets): 3f
  salt               (32 octets):
    04040404040404040404040404040404
    04040404040404040404040404040404

Payload schedule:
  commitment   (32 octets):
    cf3c988d6cfc47d936e88f85cf97b623
    c106bc9500baa1fd14fc4f7e1362352c
  payload_key  (32 octets):
    5a60091f7fe09a7a8e282354c0bfa9f9
    01406d4a47df0744f9b45ecd66e708be
  snap_key     (32 octets):
    e40f2739a89376e9548956e08fb79c55
    5b1f958068fa482a12c0eef725b8d16c

Segment 0 (is_final=0):
  nonce        (32 octets):
    05050505050505050505050505050505
    05050505050505050505050505050505
  epoch_key    (32 octets):
    f15f37e9c4e2565cfe8ee1cc27332090
    e4fd3a88948a2fd246cc4cb717c9a05b
  segment_key  (32 octets):
    f15f37e9c4e2565cfe8ee1cc27332090
    e4fd3a88948a2fd246cc4cb717c9a05b
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000000000100
  ciphertext   (12 octets):
    75a66ad40b2f7dbea1d72669
  tag          (16 octets):
    2527a6188e428150cbdb481fa7e2cc6d
  contrib      (32 octets):
    0ed1c179ee02b2cdecdf58866f65425d
    4f8a8a07ec19de9037dcdf883cebd187
Segment 1 (is_final=1):
  nonce        (32 octets):
    09090909090909090909090909090909
    09090909090909090909090909090909
  epoch_key    (32 octets):
    f15f37e9c4e2565cfe8ee1cc27332090
    e4fd3a88948a2fd246cc4cb717c9a05b
  segment_key  (32 octets):
    f15f37e9c4e2565cfe8ee1cc27332090
    e4fd3a88948a2fd246cc4cb717c9a05b
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000001000101
  ciphertext   (20 octets):
    8aaf9bbe14960ee32ee5f07842a22cab
    5e5841d3
  tag          (16 octets):
    5d5555c9a75f17e4a0afbd87de309f92
  contrib      (32 octets):
    674340ba2fca04bbf17816f1f90e5068
    d150cb66f948e5f9e396bf63e958ff25

accumulator  (32 octets):
    699281c3c1c8b6761da74e77966b1235
    9eda416115513b69d44a60ebd5b32ea2
snap_acc     (32 octets):
    7e2f4e402e53f87f86b27b3ae9d1e1e5
    3295170b97270e7fecf91054601cbdd8
]]></artwork>
      </section>
      <section anchor="turboshake-vectors">
        <name>TurboSHAKE-256 Cipher Suite Vectors</name>
        <t>These two vectors exercise the one-step TurboSHAKE-256 cipher suite
(<xref target="kdf-table"/>), for which Nh = 64.  The commitment, snap_key, contrib,
the accumulator, and snapshot are therefore 64 octets, while
payload_key (Nk) and the nonces (Nn) are unchanged.</t>
        <section anchor="single-segment-aes-256-gcm-turboshake-256-65536">
          <name>Single Segment, AES-256-GCM, TurboSHAKE-256, 65536</name>
          <artwork><![CDATA[
Parameter set:
  cipher suite:
    aead_id       0x0002  (AEAD_AES_256_GCM)
    kdf_id        0x0013  (TurboSHAKE-256)
  geometry:
    segment_max   65536
  operational:
    epoch_length  16
    nonce_mode    random
    snap_id       0x0001  (masked multiset hash)

payload_info (the KDF frames each element):
  aead_id            ( 2 octets): 0002
  segment_max_be     ( 4 octets): 00010000
  kdf_id             ( 2 octets): 0013
  snap_id            ( 2 octets): 0001
  segment_commitment ( 1 octets): 00
  nonce_mode         ( 1 octets): 00
  epoch_length_u8    ( 1 octets): 10
  salt               (32 octets):
    04040404040404040404040404040404
    04040404040404040404040404040404

Payload schedule:
  commitment   (64 octets):
    74b34698fda554d1805e30d33cf5cb18
    04f95059e28c64fe11b41f3a1f355701
    7e8c744a3708f47db962bf9233222a77
    ff9a191df16419ff722aca29fa9d2f14
  payload_key  (32 octets):
    5419c913980f56ddcfd4a2590c5d5bfb
    33968ff3bfefad6d31fe9b77d7a9afab
  snap_key     (64 octets):
    3bf743f5c345b123b2b9ef8465e10e0c
    cb341f4f9e20032ae253366d0342d4d6
    ecdad10e213abd4f642a869e257f1086
    d36209e4ac689515ed43fab04468ddd3

Segment 0 (is_final=1):
  nonce        (12 octets):
    030303030303030303030303
  epoch_key    (32 octets):
    a474c2308f069c388aa3cb9d8e5d5524
    6ed5ca18a10158743394574ace0c714f
  segment_key  (32 octets):
    a474c2308f069c388aa3cb9d8e5d5524
    6ed5ca18a10158743394574ace0c714f
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000000000101
  ciphertext   (12 octets):
    4067fdd6e1ddd8ff059ae3fd
  tag          (16 octets):
    4802fc86296bc474a083c1cb0d9f9adf
  contrib      (64 octets):
    13f7e229f49cdf0d6a360f22d9fbc6ce
    1277e62bcc064e23049b941d3334762b
    2709ee38a9f4234503652ebb5868c00d
    7c1dc1ba2d946643dc4b3a77371262e7

accumulator  (64 octets):
    13f7e229f49cdf0d6a360f22d9fbc6ce
    1277e62bcc064e23049b941d3334762b
    2709ee38a9f4234503652ebb5868c00d
    7c1dc1ba2d946643dc4b3a77371262e7
snap_acc     (64 octets):
    cba95a3f405e508897eb53d66ded2861
    6ad9ea56f10e2ef9098f8b4c6a4ed0e0
    6eb60619f0e3a6526977e33c94688b2f
    838a0e5ce51ec8d5fbdd14db62a1c1d1
]]></artwork>
        </section>
        <section anchor="two-segment-aes-256-gcm-turboshake-256-65536">
          <name>Two Segment, AES-256-GCM, TurboSHAKE-256, 65536</name>
          <artwork><![CDATA[
Parameter set:
  cipher suite:
    aead_id       0x0002  (AEAD_AES_256_GCM)
    kdf_id        0x0013  (TurboSHAKE-256)
  geometry:
    segment_max   65536
  operational:
    epoch_length  16
    nonce_mode    random
    snap_id       0x0001  (masked multiset hash)

payload_info (the KDF frames each element):
  aead_id            ( 2 octets): 0002
  segment_max_be     ( 4 octets): 00010000
  kdf_id             ( 2 octets): 0013
  snap_id            ( 2 octets): 0001
  segment_commitment ( 1 octets): 00
  nonce_mode         ( 1 octets): 00
  epoch_length_u8    ( 1 octets): 10
  salt               (32 octets):
    04040404040404040404040404040404
    04040404040404040404040404040404

Payload schedule:
  commitment   (64 octets):
    74b34698fda554d1805e30d33cf5cb18
    04f95059e28c64fe11b41f3a1f355701
    7e8c744a3708f47db962bf9233222a77
    ff9a191df16419ff722aca29fa9d2f14
  payload_key  (32 octets):
    5419c913980f56ddcfd4a2590c5d5bfb
    33968ff3bfefad6d31fe9b77d7a9afab
  snap_key     (64 octets):
    3bf743f5c345b123b2b9ef8465e10e0c
    cb341f4f9e20032ae253366d0342d4d6
    ecdad10e213abd4f642a869e257f1086
    d36209e4ac689515ed43fab04468ddd3

Segment 0 (is_final=0):
  nonce        (12 octets):
    030303030303030303030303
  epoch_key    (32 octets):
    a474c2308f069c388aa3cb9d8e5d5524
    6ed5ca18a10158743394574ace0c714f
  segment_key  (32 octets):
    a474c2308f069c388aa3cb9d8e5d5524
    6ed5ca18a10158743394574ace0c714f
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000000000100
  ciphertext   (12 octets):
    4067fdd6e1ddd8ff059ae3fd
  tag          (16 octets):
    9ec2df633d9b06520da843775f0e022b
  contrib      (64 octets):
    98f0a32bafce3a6535b1550ddec451d9
    fb241f8c18f9439cbf3f55a54d68c432
    882afebcc0d05f6a75c899539d4475c8
    80dfff6efe858c2c0caaed00097f0929
Segment 1 (is_final=1):
  nonce        (12 octets):
    070707070707070707070707
  epoch_key    (32 octets):
    a474c2308f069c388aa3cb9d8e5d5524
    6ed5ca18a10158743394574ace0c714f
  segment_key  (32 octets):
    a474c2308f069c388aa3cb9d8e5d5524
    6ed5ca18a10158743394574ace0c714f
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000001000101
  ciphertext   (20 octets):
    de8a0c958ef95b9718782a249d08f205
    cbe2746f
  tag          (16 octets):
    c8381466c731aebfeb64a51ad11e783c
  contrib      (64 octets):
    1e9f17eb45852e1558bf726f801f843c
    dd08c999442c1286097ceee3412881a7
    669886b99722fef82186c77c9f44861e
    747ce25a6b6dd5be69dbcb0db8b61e01

accumulator  (64 octets):
    866fb4c0ea4b14706d0e27625edbd5e5
    262cd6155cd5511ab643bb460c404595
    eeb2780557f2a192544e5e2f0200f3d6
    f4a31d3495e859926571260db1c91728
snap_acc     (64 octets):
    10fd26558a9366f95105e11a14e71c11
    7e51b1518aa162a62af17587a56171c7
    bbd707c61b0d4012e6d1f3d529039256
    268b3cec9491bbd37bbbc88a0eff8e2c
]]></artwork>
        </section>
      </section>
      <section anchor="rewrite-vector">
        <name>Segment Rewrite Vector</name>
        <t>This vector applies RewriteSegment (<xref target="I-D.sullivan-cfrg-raae"/>) to
segment 0 of a two-segment AES-256-GCM message, replacing its plaintext
under a fresh nonce.  The replacement plaintext is the 22-octet ASCII
string "Rewritten SEAL segment".  acc_delta = old_contrib XOR
new_contrib, the new accumulator is the old accumulator XOR acc_delta,
and snapshot is recomputed over the count and the new accumulator.</t>
        <section anchor="two-segment-aes-256-gcm-hkdf-sha-256-65536-rewrite">
          <name>Two Segment, AES-256-GCM, HKDF-SHA-256, 65536 (Rewrite)</name>
          <artwork><![CDATA[
Parameter set:
  cipher suite:
    aead_id       0x0002  (AEAD_AES_256_GCM)
    kdf_id        0x0001  (HKDF-SHA-256)
  geometry:
    segment_max   65536
  operational:
    epoch_length  16
    nonce_mode    random
    snap_id       0x0001  (masked multiset hash)

payload_info (the KDF frames each element):
  aead_id            ( 2 octets): 0002
  segment_max_be     ( 4 octets): 00010000
  kdf_id             ( 2 octets): 0001
  snap_id            ( 2 octets): 0001
  segment_commitment ( 1 octets): 00
  nonce_mode         ( 1 octets): 00
  epoch_length_u8    ( 1 octets): 10
  salt               (32 octets):
    04040404040404040404040404040404
    04040404040404040404040404040404

Payload schedule:
  commitment   (32 octets):
    baf545c0c2a06e25f122a9ddab2cbcdd
    cb023c4eef75f89768e9fcd7c7ccff48
  payload_key  (32 octets):
    57fc9c71017c9c090bd860d19ad7d027
    025449dc4f6d3c1e6f4152c9ba755407
  snap_key     (32 octets):
    4b57952a7659282adef51db550f9d65c
    f736f2dbd614e5cbb1e06b08519c5322

Segment 0 (is_final=0):
  nonce        (12 octets):
    030303030303030303030303
  epoch_key    (32 octets):
    011320f3dcde34e3e046d133ad3e26eb
    bed5c5eb7b5361906f250da61585b326
  segment_key  (32 octets):
    011320f3dcde34e3e046d133ad3e26eb
    bed5c5eb7b5361906f250da61585b326
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000000000100
  ciphertext   (12 octets):
    6235217638ab2facfdcc927e
  tag          (16 octets):
    b2297c8e21d2f47eb4ec84160661f457
  contrib      (32 octets):
    ae041a29353fc08425fe898e9f5aa2ef
    5176b5e33c5159dbffca108f1ed2b4d5
Segment 1 (is_final=1):
  nonce        (12 octets):
    070707070707070707070707
  epoch_key    (32 octets):
    011320f3dcde34e3e046d133ad3e26eb
    bed5c5eb7b5361906f250da61585b326
  segment_key  (32 octets):
    011320f3dcde34e3e046d133ad3e26eb
    bed5c5eb7b5361906f250da61585b326
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000001000101
  ciphertext   (20 octets):
    8bbebac4b9af2bc7f1b6c0d611a8bc61
    e060785f
  tag          (16 octets):
    683ca39408012058e29496e046765c50
  contrib      (32 octets):
    ce1de64f2686b4639b99880adb98630c
    85cd1486f02b1e2b6e71908d770f0033

accumulator  (32 octets):
    6019fc6613b974e7be67018444c2c1e3
    d4bba165cc7a47f091bb800269ddb4e6
snap_acc     (32 octets):
    cc155a59891885838c1667f916f50d89
    c45759f84b7e5dbd1159e653e08842ef

Rewrite of segment 0:
  new_plaintext (22 octets):
    52657772697474656e205345414c2073
    65676d656e74
  new_nonce    (12 octets):
    0b0b0b0b0b0b0b0b0b0b0b0b
  new_ciphertext (22 octets):
    f139f80e303a51953d7718d046dfb81e
    be46e67be213
  new_tag      (16 octets):
    c57af8e6e9dff90f7498f8c2c6144ba2
  old_contrib  (32 octets):
    ae041a29353fc08425fe898e9f5aa2ef
    5176b5e33c5159dbffca108f1ed2b4d5
  new_contrib  (32 octets):
    4de295ebaf141361efd866aa850b9f4b
    3c95926d3fa3f3c9325c6ccd28d959c9
  acc_delta    (32 octets):
    e3e68fc29a2bd3e5ca26ef241a513da4
    6de3278e03f2aa12cd967c42360bed1c
  new_accumulator (32 octets):
    83ff73a48992a7027441eea05e93fc47
    b95886ebcf88ede25c2dfc405fd659fa
  new_snap_acc (32 octets):
    5fd658c6d95a2ee4a81446eecd62c313
    394500bcd0d440ac360df2b1e3562f6e
]]></artwork>
        </section>
      </section>
      <section anchor="derived-nonce-vector">
        <name>Derived-Nonce Cipher Suite Vector</name>
        <t>This vector exercises AES-256-GCM-SIV (<xref target="aead-table"/>), the MRAE cipher
suite that uses derived nonce mode.  There is no stored per-segment
nonce:  each nonce is recomputed from nonce_base by the formula in
<xref target="I-D.sullivan-cfrg-raae"/>, which XORs uint64((i &lt;&lt; 1) | is_final), the
segment index and finality bit, into the low 8 octets of nonce_base
(here Nn = 12).  The block applies RewriteSegment to segment 0.  The
replacement plaintext is the 22-octet ASCII string "Rewritten SEAL
segment".  Because the nonce is recomputed deterministically, the
rewrite reuses the same nonce as the original segment 0.
AES-256-GCM-SIV is misuse-resistant, so the reuse leaks only equality of
identical plaintext-and-context pairs, not plaintext.</t>
        <section anchor="two-segment-aes-256-gcm-siv-hkdf-sha-256-65536-rewrite">
          <name>Two Segment, AES-256-GCM-SIV, HKDF-SHA-256, 65536 (Rewrite)</name>
          <artwork><![CDATA[
Parameter set:
  cipher suite:
    aead_id       0x001f  (AEAD_AES_256_GCM_SIV)
    kdf_id        0x0001  (HKDF-SHA-256)
  geometry:
    segment_max   65536
  operational:
    epoch_length  0
    nonce_mode    derived
    snap_id       0x0001  (masked multiset hash)

payload_info (the KDF frames each element):
  aead_id            ( 2 octets): 001f
  segment_max_be     ( 4 octets): 00010000
  kdf_id             ( 2 octets): 0001
  snap_id            ( 2 octets): 0001
  segment_commitment ( 1 octets): 00
  nonce_mode         ( 1 octets): 01
  epoch_length_u8    ( 1 octets): 00
  salt               (32 octets):
    04040404040404040404040404040404
    04040404040404040404040404040404

Payload schedule:
  commitment   (32 octets):
    82574d5980c62d4a331ef006e2e2f081
    be81d9dc32be60be6224a5efdc78805e
  payload_key  (32 octets):
    7c38a1f14a04024e9d9d2aad57e01422
    a3284d4489ab8eaa3b84a7829b5216a4
  snap_key     (32 octets):
    19eae9f0849b5f1849d8a36dd6c0bf9c
    319f94b653f4b3ac1e7133fa8db64ef4
  nonce_base   (12 octets):
    d0d4562a7249b035821acd2f

Segment 0 (is_final=0):
  nonce        (12 octets):  (derived from nonce_base, not stored)
    d0d4562a7249b035821acd2f
  epoch_key    (32 octets):
    0727cdd2fd3b3bbbfb90eb4a7233acf7
    c4bac5fbaa11029c96e4c40023d71ca5
  segment_key  (32 octets):
    0727cdd2fd3b3bbbfb90eb4a7233acf7
    c4bac5fbaa11029c96e4c40023d71ca5
  segment_aad  ( 0 octets): (empty)
  ciphertext   (12 octets):
    76331d2cb099dbb6fd3b3684
  tag          (16 octets):
    b13c9eb8f92686a4e19c66146418ab45
  contrib      (32 octets):
    86c55cbb773f15358770f5e05928d0d5
    eca971066ac7fa933ade7d67860dde2a
Segment 1 (is_final=1):
  nonce        (12 octets):  (derived from nonce_base, not stored)
    d0d4562a7249b035821acd2c
  epoch_key    (32 octets):
    67ee8f3ea6bbb4a1878921e0ea5cfdec
    032adf44a243da620e3845c53add5d73
  segment_key  (32 octets):
    67ee8f3ea6bbb4a1878921e0ea5cfdec
    032adf44a243da620e3845c53add5d73
  segment_aad  ( 0 octets): (empty)
  ciphertext   (20 octets):
    2d4a7e360bbcf0d36d2922f2d3e90637
    771e2ea0
  tag          (16 octets):
    df7bbecbbb144bca9fbcb4a41923f18e
  contrib      (32 octets):
    2f0b945691522f24d96ab65cbaaa0682
    7cc9fbad49571946d3b6491a6ee2e981

accumulator  (32 octets):
    a9cec8ede66d3a115e1a43bce382d657
    90608aab2390e3d5e968347de8ef37ab
snap_acc     (32 octets):
    c9ac169402f3121c28b7b90ef4435a98
    7582858b2145bc88cd4ac4a090cbd52e

Rewrite of segment 0:
  new_plaintext (22 octets):
    52657772697474656e205345414c2073
    65676d656e74
  new_nonce    (12 octets):
    d0d4562a7249b035821acd2f
  new_ciphertext (22 octets):
    95e420d047cbf2d4f2e61cf7c49a125c
    a34eac782914
  new_tag      (16 octets):
    933909c1f14be99ed92db7f4c4c2d378
  old_contrib  (32 octets):
    86c55cbb773f15358770f5e05928d0d5
    eca971066ac7fa933ade7d67860dde2a
  new_contrib  (32 octets):
    af24901123a931742d0d8a93641aba65
    d8496745f529b055807e2f9eb8ba38f7
  acc_delta    (32 octets):
    29e1ccaa54962441aa7d7f733d326ab0
    34e016439fee4ac6baa052f93eb7e6dd
  new_accumulator (32 octets):
    802f0447b2fb1e50f4673ccfdeb0bce7
    a4809ce8bc7ea91353c86684d658d176
  new_snap_acc (32 octets):
    1c2de652b504fffa4fec0394aa119952
    58744dccfea4127612eaa120c6098a0f
]]></artwork>
        </section>
      </section>
      <section anchor="cross-epoch-vector">
        <name>Cross-Epoch Key Vector</name>
        <t>This vector sets epoch_length = 0, the finest epoch partition, so the
epoch index equals the segment index and each segment is sealed under a
distinct epoch key (<xref target="I-D.sullivan-cfrg-raae"/>).  The block exposes the
intermediate epoch_key(i) and segment_key(i) for each segment.  At
epoch_length = 0 the shift is the identity, so segment_key(i) equals
epoch_key(i), and epoch_key(0) and epoch_key(1) differ.</t>
        <section anchor="two-segment-aes-256-gcm-hkdf-sha-256-65536-epochlength-0">
          <name>Two Segment, AES-256-GCM, HKDF-SHA-256, 65536, epoch_length 0</name>
          <artwork><![CDATA[
Parameter set:
  cipher suite:
    aead_id       0x0002  (AEAD_AES_256_GCM)
    kdf_id        0x0001  (HKDF-SHA-256)
  geometry:
    segment_max   65536
  operational:
    epoch_length  0
    nonce_mode    random
    snap_id       0x0001  (masked multiset hash)

payload_info (the KDF frames each element):
  aead_id            ( 2 octets): 0002
  segment_max_be     ( 4 octets): 00010000
  kdf_id             ( 2 octets): 0001
  snap_id            ( 2 octets): 0001
  segment_commitment ( 1 octets): 00
  nonce_mode         ( 1 octets): 00
  epoch_length_u8    ( 1 octets): 00
  salt               (32 octets):
    04040404040404040404040404040404
    04040404040404040404040404040404

Payload schedule:
  commitment   (32 octets):
    6681ec9a2ad3b8ce46dca3d54de08c36
    2c5d9bb6b0c9d45a53cdd98c032b54f6
  payload_key  (32 octets):
    f9a1bb3ab8ebbd80c287e14c072ad419
    45a2b2bf135359e627f64dc747db87c4
  snap_key     (32 octets):
    ffdbbcc79855be4da0d7d91eb7ba1150
    5465163b9193623428b83c8945ee8bcd

Segment 0 (is_final=0):
  nonce        (12 octets):
    030303030303030303030303
  epoch_key    (32 octets):
    511dc5e746e42c6722a9d52c387f9bb3
    aabb918d6ce008bd0109d158816efc22
  segment_key  (32 octets):
    511dc5e746e42c6722a9d52c387f9bb3
    aabb918d6ce008bd0109d158816efc22
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000000000100
  ciphertext   (12 octets):
    427d05a1e9451ab4e471f75e
  tag          (16 octets):
    32aea9a3939302dfbb0750474c21cafd
  contrib      (32 octets):
    a0853446684127b7220f5db5493d47ba
    205f71948502f47a7cfd59f6c15fc648
Segment 1 (is_final=1):
  nonce        (12 octets):
    070707070707070707070707
  epoch_key    (32 octets):
    76dc9f376e4de74d3e402151c7d4fd99
    70e67da67e0be1af1a6139602724a77c
  segment_key  (32 octets):
    76dc9f376e4de74d3e402151c7d4fd99
    70e67da67e0be1af1a6139602724a77c
  segment_aad  (24 octets):
    00095345414c2d444154410008000000
    0000000001000101
  ciphertext   (20 octets):
    dfa16e36b7856c93acc30cea28fda135
    8b38b82d
  tag          (16 octets):
    ce6aa0f4745a73da23bbfa7019ff0f6a
  contrib      (32 octets):
    bbd42ed60d28a789e28b30c2bed0250d
    b14ba318ba94616a6a9708428398321d

accumulator  (32 octets):
    1b511a906569803ec0846d77f7ed62b7
    9114d28c3f969510166a51b442c7f455
snap_acc     (32 octets):
    bd3c2c6b3dd64e30ceb1a3f485be9951
    ef7ea470a85954c44786604e41dba365
]]></artwork>
        </section>
      </section>
      <section anchor="pt-bound-vectors">
        <name>Plaintext-Bound Nonce Component Vectors</name>
        <t>These vectors exercise the optional plaintext-bound nonce construction
(<xref target="I-D.sullivan-cfrg-raae"/>) component by component:  the plaintext
digest pt_digest, the bound digest pt_hash, the framed nonce_ctx, and
the final nonce.  The construction is encryptor-only and its output is
indistinguishable from random mode on the wire, so no end-to-end vector
exercises it.  Component values are how this appendix checks an
implementation byte for byte.  The labels are those of
<xref target="I-D.sullivan-cfrg-raae"/>, and nonce_ctx enters the final derivation as
a single framed info element after the payload_info elements.</t>
        <t>Each block reuses the payload_key, payload_info, and salt of a published
cipher-suite block, so the values chain into the payload schedules
above.  The random_input value stands in for the fresh Random(Nn) draw
of the construction, and every block binds the plaintext "Hello, SEAL!".
These component vectors are printed in this appendix only and are not
part of the end-to-end corpus.</t>
        <section anchor="aes-256-gcm-hkdf-sha-256-16384-segment-0">
          <name>AES-256-GCM, HKDF-SHA-256, 16384, Segment 0</name>
          <t>The payload schedule is that of <xref target="single-trace"/>, and the segment_aad is
that of its Segment 0.</t>
          <artwork><![CDATA[
plaintext    (12 octets):
    48656c6c6f2c205345414c21
random_input (12 octets):
    0f0f0f0f0f0f0f0f0f0f0f0f
is_final     1
A_i          ( 0 octets): (empty)
pt_digest    (32 octets):
    e66fec4cada0ccdb73930622ef393d5b
    a05fb73bdd81205a9f828f75e85ded81
pt_hash      (32 octets):
    072fa800d5069a226a7322c5b3fb704f
    8564fd2075dd9de6de274a2b5645faaa
nonce_ctx    (82 octets):
    000a5345414c2d52572d763100080000
    0000000000000020072fa800d5069a22
    6a7322c5b3fb704f8564fd2075dd9de6
    de274a2b5645faaa001800095345414c
    2d444154410008000000000000000000
    0101
nonce        (12 octets):
    d788503bb616e7a08dc945de
]]></artwork>
        </section>
        <section anchor="aes-256-gcm-turboshake-256-65536-segment-1">
          <name>AES-256-GCM, TurboSHAKE-256, 65536, Segment 1</name>
          <t>The payload schedule is that of the two-segment TurboSHAKE-256 block
(<xref target="turboshake-vectors"/>), and the segment_aad is that of its final
Segment 1.  The segment index is 1, visible in the second framed element
of nonce_ctx.  The plaintext is the one printed below, not that block's
Segment 1 plaintext.</t>
          <artwork><![CDATA[
plaintext    (12 octets):
    48656c6c6f2c205345414c21
random_input (12 octets):
    0f0f0f0f0f0f0f0f0f0f0f0f
is_final     1
A_i          ( 0 octets): (empty)
pt_digest    (64 octets):
    f809e1b9b0e28d0fd1dce5cf9e4aae59
    fde2b08a551c311b621323a5d2f3c78d
    e55c22edcdd091231c4509849acf592a
    85ab446dfcff4fac008194e6ef59d9b4
pt_hash      (64 octets):
    ad6a35f94960ee1004391bdfaee16149
    ef56bca4fd5b98abfec56fdb80752624
    ade63d71f3b15e9aa5dd9fb0ffa8e533
    f7ef5caa7620432cf1c1bf7d97611536
nonce_ctx    (114 octets):
    000a5345414c2d52572d763100080000
    0000000000010040ad6a35f94960ee10
    04391bdfaee16149ef56bca4fd5b98ab
    fec56fdb80752624ade63d71f3b15e9a
    a5dd9fb0ffa8e533f7ef5caa7620432c
    f1c1bf7d97611536001800095345414c
    2d444154410008000000000000000100
    0101
nonce        (12 octets):
    5e5b312aa2e045d4e893deca
]]></artwork>
        </section>
        <section anchor="pt-bound-aad-vector">
          <name>AES-256-GCM, HKDF-SHA-256, 16384, Non-Final Segment 0 with A_i</name>
          <t>The payload schedule is that of the two-segment AES-256-GCM,
HKDF-SHA-256, 16384 block, which equals that of <xref target="single-trace"/>.  The
segment is that block's Segment 0.  A_i is the 16-octet ASCII string
"segment metadata", so the segment_aad in nonce_ctx is that block's
Segment 0 segment_aad followed by the framed A_i.  Among the inputs,
only is_final and A_i differ from the first block, so pt_digest and
pt_hash repeat its values.</t>
          <artwork><![CDATA[
plaintext    (12 octets):
    48656c6c6f2c205345414c21
random_input (12 octets):
    0f0f0f0f0f0f0f0f0f0f0f0f
is_final     0
A_i          (16 octets):
    7365676d656e74206d65746164617461
pt_digest    (32 octets):
    e66fec4cada0ccdb73930622ef393d5b
    a05fb73bdd81205a9f828f75e85ded81
pt_hash      (32 octets):
    072fa800d5069a226a7322c5b3fb704f
    8564fd2075dd9de6de274a2b5645faaa
nonce_ctx    (100 octets):
    000a5345414c2d52572d763100080000
    0000000000000020072fa800d5069a22
    6a7322c5b3fb704f8564fd2075dd9de6
    de274a2b5645faaa002a00095345414c
    2d444154410008000000000000000000
    010000107365676d656e74206d657461
    64617461
nonce        (12 octets):
    167034ea5913efb676ebeee9
]]></artwork>
        </section>
      </section>
      <section anchor="dt-vectors">
        <name>Digest Transcript Component Vectors</name>
        <t>These vectors exercise the digest transcript (<xref target="digest-transcript"/>)
component by component:  the schedule values of a SEAL-RO-v1 digest
transcript (snap_id 0x0002) context, two segment leaves over specified
segment bytes and tags, and the transcript over them.  The segment bytes
are specified component inputs, not the AEAD output of a full object.
The leaf and transcript derivation is what an implementation checks byte
for byte.  These component vectors are printed in this appendix only and
are not part of the end-to-end corpus.</t>
        <t>The context is a SEAL-RO-v1 object using the digest transcript (snap_id
0x0002), with AES-256-GCM and HKDF-SHA-256, the demo CEK (0xAA repeated)
and salt (0x04 repeated) of <xref target="single-trace"/>, and the default empty G.
payload_info is [aead_id 0x0002, segment_max_be 65536, kdf_id 0x0001,
snap_id 0x0002, segment_commitment 0x01, nonce_mode 0x01 (derived),
epoch_length_u8 0x20, salt].</t>
        <artwork><![CDATA[
CEK          (32 octets):
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
salt         (32 octets):
    04040404040404040404040404040404
    04040404040404040404040404040404
commitment   (32 octets):
    8bf5df9f63f2955bdc1a376cd3199a05
    3653fb26ecc266ccbcfb56203ae54307
snap_key     (32 octets):
    bee28b282450dd38c54bdfa40d98dc9a
    df5e2af49cf8c99b4c88b6daf7f08664
]]></artwork>
        <section anchor="leaves-and-transcript-nseg-2">
          <name>Leaves and Transcript, n_seg = 2</name>
          <t>Segment 0 is non-final with 16 specified ciphertext octets, segment 1 is
final with 8.  In this derived-nonce example A_i is empty, so the
segment AAD is empty and each leaf is the ciphertext digest LH(ct_i),
the segment's AEAD tag, and the counter uint64((i &lt;&lt; 1) | is_final), 56
octets in all.  Here the tag is a specified component input.</t>
          <artwork><![CDATA[
ct_0            (16 octets):
    000102030405060708090a0b0c0d0e0f
tag_0           (16 octets):
    202122232425262728292a2b2c2d2e2f
leaf(0)         (56 octets):
    b726af81e3cadd5c7a486e6a3becc39b
    1c5628da64e8145161124bc172a4ad64
    202122232425262728292a2b2c2d2e2f
    0000000000000000
ct_1            (8 octets):
    1011121314151617
tag_1           (16 octets):
    303132333435363738393a3b3c3d3e3f
leaf(1)         (56 octets):
    3c36a934a52861d5b6c1da66ab493edb
    41f744771e16750ac409b3bed2758f87
    303132333435363738393a3b3c3d3e3f
    0000000000000003
transcript      (32 octets):
    362ac32a28544821d1081d4dd305bd1a
    853f5f72bcf97ad25d8ec972131f4d7f
]]></artwork>
          <t>The counter is 0 in leaf(0) and 3 in leaf(1), whose finality bit is set.
The transcript's ikm is [snap_key] and its info elements are
[...payload_info, commitment, uint64(2), LH(encode(leaf(0),
leaf(1)))], with the payload_info elements above.  The encode framing
binds each leaf's position, and the count element binds the count.  The
stored keyed snapshot is the transcript.</t>
          <t>The public snapshot (<xref target="digest-transcript"/>) takes the same info elements
under an empty ikm and the label "snap_transcript_pub".  It differs from
the transcript:</t>
          <artwork><![CDATA[
pub_snapshot (32 octets):
    d5ac3aa35ecb73ffce9d5c443d186965
    3752f1ca4ad707bfa847b6f411e17d4b
]]></artwork>
        </section>
      </section>
      <section anchor="edt-vectors">
        <name>Epoch Digest Tree Component Vectors</name>
        <t>These vectors exercise the epoch digest tree (<xref target="epoch-digest-tree"/>)
with four segments in two epochs.  The context is a SEAL-RO-v1 object
using the epoch digest tree (snap_id 0x0003) with epoch_length 1
(epoch_length_u8 0x01), chosen small so the example has two epochs of
two segments.  Changing snap_id and epoch_length changes payload_info,
so the commitment and snap_key differ from <xref target="dt-vectors"/>.  The segment
bytes and tags are specified component inputs.</t>
        <t>The context uses the same CEK (0xAA repeated) and salt (0x04 repeated)
as <xref target="dt-vectors"/>, AES-256-GCM, HKDF-SHA-256, segment_max 65536, derived
nonce, and the default empty G.</t>
        <artwork><![CDATA[
commitment   (32 octets):
    dbd84f656f33d0813709cae78e48cf67
    acd550c18dbe06309a05a8dd8a31e7b2
snap_key     (32 octets):
    f2907b32bbcfe226afa5f560717455ad
    76875058328280af262ce0529ebae0ee
]]></artwork>
        <t>The four derived-mode leaves, with the same component inputs as
<xref target="dt-vectors"/> at indices 0 and 1, carry the counters 0, 2, 4, and 7,
since only segment 3 is final, so leaf(1) differs from the digest
transcript's:</t>
        <artwork><![CDATA[
leaf(0) (56 octets):
    b726af81e3cadd5c7a486e6a3becc39b
    1c5628da64e8145161124bc172a4ad64
    202122232425262728292a2b2c2d2e2f
    0000000000000000
leaf(1) (56 octets):
    3c36a934a52861d5b6c1da66ab493edb
    41f744771e16750ac409b3bed2758f87
    303132333435363738393a3b3c3d3e3f
    0000000000000002
leaf(2) (56 octets):
    2c8e6a5e8019913bebc27623854e35e3
    2bcd1ef439372403f8492e60d571cad1
    404142434445464748494a4b4c4d4e4f
    0000000000000004
leaf(3) (56 octets):
    cbd4067f9d6dc18f7bb5f33675a1b01e
    6ce102113947a9dc1045776b8e62d200
    505152535455565758595a5b5c5d5e5f
    0000000000000007
]]></artwork>
        <t>Epoch 0 is segments 0 and 1, epoch 1 is segments 2 and 3.  Each epoch
head is d_e = KDF(protocol_id, "snap_epoch", [snap_key],
[...payload_info, commitment, uint64(2), LH(epoch_run(e))], 32), the
count being 2, the epoch's leaf count, and epoch_run(e) the encode of
its leaves:</t>
        <artwork><![CDATA[
d_0 (32 octets):
    669ffe7ce2281f3b13048eff1d6cdf1d
    4e32a0c5d834ddddc4c6dc701585ee24
d_1 (32 octets):
    44fbe7e8cb17c936b4f229abb5474aa4
    a777f00f86541d4f6c31f6f2eb4c8aa3
]]></artwork>
        <t>The snapshot is KDF(protocol_id, "snap_epoch_root", [snap_key],
[...payload_info, commitment, uint64(4), LH(d_0 || d_1)], 32):</t>
        <artwork><![CDATA[
snapshot     (32 octets):
    4fdcb3d3a1d88e32663b0f37c89a6d79
    2e092dfc0f10fa0ca73f8aa7022a75f7
]]></artwork>
        <t>The public heads pd_e = KDF(protocol_id, "snap_epoch_pub", [],
[...payload_info, commitment, uint64(2), LH(epoch_run(e))], 32) are
taken over the same runs, and the public snapshot is KDF(protocol_id,
"snap_epoch_root_pub", [], [...payload_info, commitment, uint64(4),
LH(pd_0 || pd_1)], 32) (<xref target="edt-public"/>).  Each differs from the keyed
value over the same inputs:</t>
        <artwork><![CDATA[
pd_0         (32 octets):
    783a428f367fa0fa27e70ec634d3c32e
    038e36d0e35ab990602c409316f414a3
pd_1         (32 octets):
    10a56db4b77b3164b666ef057d5c5f49
    8528d68ac4d600cec4bfc057e5f384f6
pub_snapshot (32 octets):
    bbd1d3f741787232088f49cb50188bb7
    14184fc158e6464092be5fe86d95fde2
]]></artwork>
        <t>At the epoch boundary k = 2, with segments 0 and 1 written non-final and
the object open, the intermediate snapshots are snapshot(2) =
KDF(protocol_id, "snap_epoch_root", [snap_key], [...payload_info,
commitment, uint64(2), LH(d_0)], 32) and pub_snapshot(2), the public
snapshot at count 2 over LH(pd_0) (<xref target="edt-public"/>).  They take leaf(0)
and leaf(1) as printed, which carry is_final = 0 in the open prefix as
in the complete object.  The heads run at count 4 begins with d_0, so
snapshot(4) extends snapshot(2):</t>
        <artwork><![CDATA[
snapshot(2)  (32 octets):
    4cb454fbcf7755403655fab974a323a0
    9b304ddd992da05c9dd147788026d7a1
pub_snapshot(2) (32 octets):
    138d5914f8f7b55fc3d0771d0335fbbb
    bb941bbe5e9cb34421831aaf7d19c77f
]]></artwork>
        <t>In an object whose segments 0 and 1 were encrypted non-final, the
two-segment prefix presented as complete fails the terminal check of
<xref target="I-D.sullivan-cfrg-raae"/> with either value, and SnapVerify rejects it
declared complete, because leaf(1) would then carry the counter 3.</t>
      </section>
      <section anchor="snapverify-reject">
        <name>Negative SnapVerify Vector</name>
        <t>This vector demonstrates the snapshot integrity check.  It takes the
honest state of the two-segment AES-256-GCM, HKDF-SHA-256, 65536 vector
and flips the first octet of segment 0's stored tag (tag_0), leaving the
stored keyed snapshot unchanged.  SnapVerify recomputes the accumulator
from the two present segment tags (<xref target="I-D.sullivan-cfrg-raae"/>):  the
tampered tag_0 changes contrib(0), so the recomputed accumulator differs
from the honest one and the snapshot recomputed over the observed count
no longer equals the stored keyed snapshot.  The single constant-time
comparison of the recomputed snapshot against the stored value therefore
fails, and SnapVerify returns reject.  A consumer must treat this entry
as expect-reject and must not accept it as a valid snapshot.</t>
        <section anchor="tampered-segment-tag-snapshot-not-recomputed">
          <name>Tampered Segment Tag, snapshot Not Recomputed</name>
          <artwork><![CDATA[
Source: the two-segment AES-256-GCM, HKDF-SHA-256, 65536 vector;
        the tamper flips the first octet of segment 0's stored tag
        (tag_0), with the stored keyed snapshot unchanged.

SnapVerify result: reject
]]></artwork>
          <t>SnapVerify recomputes the accumulator from the present segment tags,
recomputes the snapshot over the observed count, and compares it against
the stored keyed snapshot in constant time.  The tampered tag_0 changes
contrib(0), so the recomputed snapshot differs from the stored value and
the comparison fails.  The tampered tag_0 and the honest keyed snapshot
are regenerated with the rest of the corpus.</t>
        </section>
      </section>
      <section anchor="seal-simple-vector">
        <name>SEAL-simple(HKDF-SHA-256, AES-256-GCM)</name>
        <t>This vector realizes the named instantiation of <xref target="named-instantiations"/>
at cipher suite (aead_id 0x0002, kdf_id 0x0001) and matches the
implementation sketch of <xref target="seal-simple-sketch"/> byte-for-byte.  It uses
SEAL-RO-v1, snap_id 0x0000 (no snapshot authenticator), derived nonce
mode, epoch_length 32, segment_max 65536, and the linear immutable
reduction layout.</t>
        <artwork><![CDATA[
Parameter set:
  cipher suite:
    aead_id       0x0002  (AEAD_AES_256_GCM)
    kdf_id        0x0001  (HKDF-SHA-256)
  geometry:
    segment_max   65536
  operational:
    epoch_length  32
    nonce_mode    derived
    snap_id       0x0000  (none)

payload_info (the KDF frames each element):
  aead_id            ( 2 octets): 0002
  segment_max_be     ( 4 octets): 00010000
  kdf_id             ( 2 octets): 0001
  snap_id            ( 2 octets): 0000
  segment_commitment ( 1 octets): 00
  nonce_mode         ( 1 octets): 01
  epoch_length_u8    ( 1 octets): 20
  salt               (32 octets):
    04040404040404040404040404040404
    04040404040404040404040404040404

Payload schedule:
  commitment   (32 octets):
    50e2ed8d8211bc77be4a9c48fc39b7c2
    08f2a7f7248dc13767024999a0ec760b
  payload_key  (32 octets):
    b03d7bedadce359c341811ee803a1887
    77070819d75e287eff5efd785f774654
  nonce_base   (12 octets):
    42ccc572f4d26f10705d3604

Segment 0 (is_final=1):
  nonce        (12 octets):  (derived from nonce_base, not stored)
    42ccc572f4d26f10705d3605
  epoch_key    (32 octets):
    d01604cc3ad94b9a8bae8b25d5068623
    37d97cbf072e29a7d13caa5879feac26
  segment_key  (32 octets):
    d01604cc3ad94b9a8bae8b25d5068623
    37d97cbf072e29a7d13caa5879feac26
  segment_aad  ( 0 octets): (empty)
  ciphertext   (12 octets):
    9b7de7bcea0031343291e234
  tag          (16 octets):
    c2ca31476b162aa7ce795514a78c1b15
]]></artwork>
      </section>
    </section>
    <section anchor="changes-since-00">
      <name>Changes Since -00</name>
      <ul spacing="normal">
        <li>
          <t>The strict authenticators' leaf is [LH(ct_i)] || tag_i ||
nonce_field(i) || segment_aad(i, is_final, A_i):  the stored nonce in
random nonce mode or the counter (i &lt;&lt; 1) | is_final in derived nonce
mode, then the segment AAD.  Metadata entries hold its leading fields
in leaf order, and epoch runs frame each leaf.  The per-suite
nonce-injectivity analysis is withdrawn.  The ct_i and tag_i split is
stated beside the leaf definition.</t>
        </li>
        <li>
          <t>The epoch digest tree's outsider forgery bound is stated as a closed
list of three events; the key-holder bounds name the ideal-hash,
sponge and long-message cases.</t>
        </li>
        <li>
          <t>Binding limits and budgets use the aggregate accounting of the
companion; the AES-GCM random-nonce cap and the departure from RFC
8439 for random ChaCha20-Poly1305 nonces are stated.</t>
        </li>
        <li>
          <t>The masked multiset hash's writer check and the SEAL-AO-v1
current-count rule is stated.</t>
        </li>
        <li>
          <t>The layouts leave no interior segment shorter than the length they fix
for its position.  Under a mutable profile a writer meets this by
rewriting a short terminal segment before an append, and a truncation
to a nonempty prefix re-marks the new last segment as final.
SEAL-AO-v1 forbids truncation rather than a reduced count.</t>
        </li>
        <li>
          <t>The split layout places the aux region after the commitment.</t>
        </li>
        <li>
          <t>An authenticator with a strict ordering has snapshots at every count
while the object is open, and the epoch digest tree's late joiner
adopts heads at an epoch boundary.</t>
        </li>
        <li>
          <t>The digest transcript and the epoch digest tree define public
snapshots.  Every value of the two authenticators, keyed or public, is
one KDF over the payload_info elements, the commitment, a count, and
the LH digest of a run of leaves or heads, under snap_key or an empty
ikm.  An epoch head is the digest transcript's formula over its epoch.
A new section describes streaming with prefix verification.</t>
        </li>
        <li>
          <t>RFC 10032 (AEGIS) and RFC 8126 are normative; the designated expert
review criteria are stated.</t>
        </li>
        <li>
          <t>The vector files are regenerated for this revision; the
plaintext-bound component vectors are regenerated over the framed
segment AAD and one at a non-final segment with A_i is added.</t>
        </li>
        <li>
          <t>Terms: keyed snapshot, public snapshot, intermediate snapshot, prefix
verification, and ciphertext digest.</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The author thanks Andrés Fábrega, Thomas Ristenpart, Gregory Rubin,
Richard Barnes, Brendan McMillion, Thibault Meunier, Kenny Paterson,
Christopher Patton, Martin Thomson, Stanislav V. Smyshlyaev, and
Christopher A. Wood for their reviews, comments, and discussions.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+S963bcVpIu+H8/BUb+IdLOpElKlmVVuc+wdLG0rNtIrnbV
KlexwUwkiWYmkAUgRbEt97PMs8yTTdx3bACZpKrqrHNmjVa3i0wiN/Yldly/
iJhOp6Eru2XxKLvz/unJy+xxub4omuz9puyKNsurefaiaru86sq8K+uqvRPy
s7Om+CDP3wnzelblK/j+vMkX3bTdLJflh7yatkW+nM7qatYUXTE9PAqzvCvO
6+b6UVZWizqU6+ZR1jWbtjs+PPzu8Di0m7NV2bbwku56DeO9ePrTs4Cvnp/m
y7qCT66LNrSrvOlO/76pYXqPsqoO6/JRyLJp1tUz+t+2brqmWLT8y/WKfg75
pruoG36yrOCbrw9gjTxV+DDLeA2vy9ll+nndnOdV+V+0+EfZ4+Z63dXnTb6+
uM4ew3Zsll1ZnWcvXz6mp4tVXi5hWuXsol7m7YHuxldl0S3+z3P868GsXoVQ
1c0KxvxQ4JReTJ/Yk9PZojmfNnlOf8kyPZx3sA/1anoymxVtm53Acgo4E9zT
efYUNhnmBTO8Q9+Ji8V/Wxa8a9FzGPZRdnx4/IB+bYumLFo8NR3zRdUVTVV0
0yd46IOztzVMD+/DN949e/zN0dGDR/LjwwffyY8Pj47104f379mn9785lh+/
O3p4qD8+fHAkPx4dHt471o3DnZ1erC+L6frv+NnrF+9/mr5/O314eDi99/CJ
7GLenBcwz4uuW7ePvv66+rBcb87ag6psu4Pz+sPX+AN+8vXL4jyfXX/9/i19
1K6LWZnjs0vca9hhHnZ+sJ4v0vMp4FxXRTWnp7JF3WR/WNawsXKhXtVzuE/1
InuzLhqmpl9kM3/JfgACL9uvH9cb3Fd6Ntv74fGrfbqAP7w6ebzjYF8dZE+u
6uayTM/u8Nvp0dGW48M9epS958Vlb+PqMtm1EPDxHomWDew0HW1e5PPpslyV
XYt//Dk/r4pmfKfndXkAd+jro8MDOLZvv743/eb+4fT+N98ePpx+d3r0XbKJ
J9kPBYyUL8v/ArL+A7zwYp5fZ2+b+mxZrHbswZMDmUS6Bcdb1n/n8bs/v/3p
zR14JT41yV6+fvw+O75/H35crw+y44cPp/cO79/Rx5+8eYHPblsDPvfqfdE9
z9uL2+3Cd9/CC3iUw8MHR9NvTo+Ok514gXwTyKmD83mFTKYtugzHz55tqhlx
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
up73liItpa7QYt05RE10gfG96Q9/Q0EG3++hF4MbAGjkOhJSBVQKVapQ94UZ
twxXUhWc23PZ0ag4kGbb+DqQVJuySl7rOiTaqtD3SohUCx1dXVw7GvYeSKaq
3UhqGIB7ONYNlkf8oJVwcHs1GY02GTkG77/YVGltoIF/LlH5Ew/dZKurTbxw
jBXt87cVc1V9UdYC70bjRDBwmKjSNCSy5lQhH45bWuhw7t5ZcV1XcsNQUp5Z
DtP4NHlv+TqGvJsi5+Lg30U5V6EoctjZylvY2aNQfFxzT23KZEAXKsGFmoLg
tp3bMeCVubhbOlD3qOzUqp6zKxjldK3xWwPXpatweBzGb2ofKkwEwW9bGSlG
QH/0LpSBBBD9Szqe5MGkhuOct+mbWWP53muR3iWVa3Jtf7V9+nS1ugA1Tkm/
AXOCdF7KceNtuQW69wnL7p9iDZdfvxh2X9yN6yW/TxRhw7owIFjRP8Zh/x+f
PAMNCyhX4BxW/YG/Jbo+cRF4GpgTfuTbC8f2vUntM4lnSouDBHzFKUkSJCUn
mtczt3RmzoSritIogAOaFxFnGzhfI/aZmZiP29n5kh2srgWNg12jyW5dz3S1
ri00tWImdxOHrnqGD+gwpC+zrorU2iuL5ttAbS+AJcYMvbefFcLevXjmLmlL
gCO92iG+GDkXwqQoMUecUIGzqrBa0hEzd9LmY2iq741R+5x1nZOxlgqs6Q/q
kPRhJmRCfcyRH4ez64iVFQRXTpwSaa4QzCFyAGD65YIqPXJ2tTii5cuhS6Ep
bgvqpjwvqx68Dx2u3UjJKWvbbGWqkRDgP6h/3BDIJhueEkolMYxqyWByqFii
Afd9am4HvTNsc/TrB76oUquf8y46biqJTW3d0QkW96FAcaXYKnZweW4OaqDP
KRUkn/JX4jXftaa2DtHq2tr51hfMVZhMCgwOdlixK1CZkqrv6Bh9MiDEStSG
OBjw8nlYiMxNC4nHGvqL2DTyA6fN0LlQf1/j0ZuKJ+TtHGFni4Z6s4uGWrgc
rNEtYHCVK73Fa1SbOrlh7fCKkU9Tch7d2JLXIybF6L7vQs1Ju1y1ZJgHtJww
xVyMrXD1b6KAZY6pDU61HAAX8IALfGDxPiEoBnLjT8RN1DgQt8fcDJuY+CvX
SNvQDqTTWAk462svotVy49Bhdd32ajX1K//trmU2FnEZcmFn2yRVfKOKIv5S
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
Y9gwTy2IALh8JOHiVSGu2UdljOdH3qq9wORP4y+uFfqL4/j3vcWqKXfe9930
Fze3+Iv79lZ/sfzoLfuLeT/9UH/xzpaaEwJOo/iJKp2tU/5z5HsjivGs7i6e
CHQt4ItQBv+SMZ4N32jmctMTrKhCV52REsas7fkFWoyg/yKyoOTIy82a7Xup
90KFPjdhiqUKmISLr8/+pIJaOaVstVgeK6Tc60h/FlMosOiJfCB5IwFkUlhf
cPVhTLM74nn9sMyJ3KJXN5GxYdoM+XuzllWJjyvzYVGxArsG4z3Yw7jTZXmO
QMf00+iVWS50MYt4Tjzy3/hru95kCZOgdeHLF1HiSjhsi7fZPNcvouDekIv+
g1uSxMqv007+9oMY5jqLx/V7biYFr3ow704W5Q9PYP4BZp99hh/CS350rq9f
wJDRf/kQawrwis+4P9XcKSprwUW330nbQYYR8YslcixMXrxem5ttlueIXjHx
YUkgNfVfmhXBlrvu8ZdpTtEsgF1GrZUW+YJJxyTGJM7OxSHGos35ejkuqYoS
UyNuKdmUCLn3Wy5al0SPl7Iz7vDmxQMTq12Sh00quObAruaGObHpoJO2AdI9
TlL8JDE1kcVJ1+RYgbaK+aol56tmJCGpTRaX/11ww8lirvBMNB2Y7ItYY36M
RINPpDMW6eJTSny/FL7vgicuSxfiCgHKVeB8BM7HxeSGlGuTPSnV5T+OT8V4
A+Ufxv63vDeuMMNjczNT5B0lU8keeOgorOiMcjxDKptJ1GGvNmmZh4KGXpdT
7yWPSOwXnBkeKBe8lvmUAggi4iK+5Yw/iXk/6/J4uGFYKQ3DaC4LsqW4OZMA
c17tq1Q0SdxtkU6Bcd5mzeGtu3txsDx7hkCJ21DHRbu81lZUDX/yK6nvjC9L
vahjmuJVbGS4iKvFEM7J+Kd//AL9QTE55Y6elXQYaTwicxbjkVDp6zVV7sbi
T+lLX6aBpiRS3ovUPBA26TVlzIK8Rfn41ddffvnJE5KzX7HUiPGQXFJEcqhz
DFhwTYkh5Yx5Cz6yLfKCFEuZSuPHTUVyUvJussR12kX45nPvgchLQNGrKAaS
oOAamd0Rio7jDRO7WW5WVMORCq5zMZpEHSL5y3P3VH6I0rUAnBr/LnHpgLM/
R2RpKWOJDkCFcyY6/vSTkxoEwxs4NS+JT0nHjKGcYYyZ5kqiwNmmTCM6Vgcm
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
fXkmKyuA6Fja8MHDHNkEWQqINviwZLK6l1fMaL7MZKdYwswcOXvScDMsc9cz
oRKbCa2FVpIVfPkkzktWPyL9uBJ7E9vP336wENmS9vNVDpqxUjJHxVw5GWEq
/xKOLiy6evzbp/DUp/CMp0gMRRcLjs0vVuUOXxdcGHH1h4tSbzT2Sx4u9t2d
sfWHWQm5LBpcNldbM47AKk9OiKebSoHXzkgOhel2CR9OtpxRGLvbk7aWXXKK
Y1lOCRd2lglDfVjiFBWL93pqvFzWLi6rWvi32J23g3dUxe5L3X7ZPonDSany
y4rdmZN77V60Q8mwd5HCi8jSW/7KyEV48eBF7/x9v4tgvy7tEtqyGe3D/oOH
oepdE9pJdWGcpkn5yTtV1aOxetJdQxepvu2sndrQt5WZgqqG0emhCqEf6ro2
yF+RUzvsP2VqejeOnen6zik79L0xZuoaHaqx6aaGn9J11WDreqxMmPp21MpV
xsGJqCY99rW1cYHpEYfeJXTj1NQuDM1gWu1UO0ww2jD2k/XT2Ck+JqHxYWxs
V9U+GFdZVU/em6FrbQgtwKFChEZZlSexqPeRokew7olrqHbXsDn8O+0TGfj+
4qtu0oO2ZggOBjSNYTRh0J1XvfFD1fEawJyPVg89TFMfam+VgYE3bd1ZE/TQ
FUtOiJ/+KajgwLRpd55SVbCwbdeq1taubVvVwb/w6VjRr3jR/EvRmczo2Q5M
bdMY5dreN6a3uh6Msc6qqbHEsfUsO1fJYk4vXdugYC+bsWm0gUUflYexddYp
DVuXzgdXOxzeU/WkdN/Xg5paNfRtC2fDKxiJm7R1VcU7t2nhaPQhVGEMbd+N
NnhXDw7GXHk/OlssQsY/1UOiHX74RezYhtBMBhanhzVuprFWY+8q1w8m+NrS
Raa2gx4bN3njTGO8rSZfuWYK3ldhanWxY7psF/l4O4oMnwvrCRdvn3JF0KOI
iTOP3apMjAnoL5u3kZ63UVd3Q+2GvsGN1PdNH+ii3sHvaQAdUVf6wC/Wz0d+
7V1EZIBIxydtO+kFTsRdtxj44uVk4KM3MMYhKD9qO/VT1Q5tbdpg4CiM2vDj
Jjfq1jRqCkMdBt/q3sGeHrUGoQjCy9HEYbvQyLB097TtU0rcRtdSfl5/+eSr
E0wark9/3FTDXPO/bdTPos7pTkp+qOTf9F8Vz35dvQ1NJxfJ0/GfpaZ7lDdd
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
j7E+jMQrFJj5D7RGoNO2JQMA

-->

</rfc>
