<?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.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-sullivan-seal-concrete-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="SEAL">SEAL Cipher Suites and Instantiations</title>
    <seriesInfo name="Internet-Draft" value="draft-sullivan-seal-concrete-00"/>
    <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="July" day="23"/>
    <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
    Crypto Forum Research Group mailing list (cfrg@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cfrg"/>.</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 snapshot value that binds the whole
segment set as the writer last 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 segment commitment is set,
and external authentication of the snapshot value
(<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 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, and the per-segment
leaf), and the advantage notation used for the security bounds.</t>
    </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="I-D.irtf-cfrg-aegis-aead"/>.  The AEGIS code points 0x0021 and 0x0024
are early allocations that firm up when that I-D is published as an RFC.</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>No SEAL AEAD is natively committing (the committing column).  An
instantiation that must bind its segments against a CEK holder sets the
segment commitment (<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) 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 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>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">Snapshot value</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">snapshot, per <xref target="masked-multiset-hash"/></td>
            </tr>
            <tr>
              <td align="left">0x0002</td>
              <td align="left">digest transcript</td>
              <td align="left">snapshot, per <xref target="digest-transcript"/></td>
            </tr>
            <tr>
              <td align="left">0x0003</td>
              <td align="left">epoch digest tree</td>
              <td align="left">snapshot, per <xref target="epoch-digest-tree"/></td>
            </tr>
          </tbody>
        </table>
        <t>snap_id 0x0000 selects no snapshot authenticator, a null snapshot:  no
snapshot value 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.</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, and carries SEAL's snapshot
machinery per the selected snap_id.  Under 0x0001 that is the
accumulator with its mask; under 0x0002 the recomputed snapshot value
over the leaf list; under 0x0003 the epoch-heads region and the
recomputed snapshot value.  All three include SnapVerify.  Unauthorized
truncation surfaces at two points:  the terminal finality check of
<xref target="I-D.sullivan-cfrg-raae"/>, and SnapVerify over the complete segment
set, which also binds the segment count.</t>
        <t>SEAL-AO-v1 is the append-only profile.  "Append-only" names the writer's
discipline, not a guarantee of tamper evidence.  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> reduce n_seg.  It changes
length by the append direction of <xref target="I-D.sullivan-cfrg-raae"/> alone
(<xref target="I-D.sullivan-cfrg-raae"/>), 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).  "Immutable" names the
writer's write-once discipline, not a guarantee of tamper evidence.
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, and <bcp14>MUST NOT</bcp14> retry an object
it did not complete under the same salt:  it <bcp14>MUST</bcp14> draw a fresh one
(<xref target="I-D.sullivan-cfrg-raae"/>).</t>
        <t>The retry rule is what keeps each index to one finality form, which the
truncation check of <xref target="I-D.sullivan-cfrg-raae"/> rests on.  Without it an
interrupted write whose source has since grown would place the old
terminal segment's is_final = 1 ciphertext at an index the retry writes
non-terminal.  Neither encryption reuses a pair, so nothing else in this
document would forbid it, and the orphan would let a holder of those
bytes present a truncation that verifies.</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.  Any such authenticator binds
the whole segment set in its snapshot value.  A consuming protocol that
authenticates a strict snapshot carrying the segment commitment obtains
from it per-segment origin authentication (<xref target="I-D.sullivan-cfrg-raae"/>).
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.  Under any snapshot but a null one, SnapVerify additionally binds
the count.</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 snapshot
value 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 segment commitment 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 and its snapshot value 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.</t>
      <section anchor="linear-layout">
        <name>Linear Layout</name>
        <t>In a linear layout the salt, commitment, snapshot value, aux region, 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
snapshot value (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 snapshot value, 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"/>).</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 snapshot value and the aux region, then streams
segments.  After all segments are written the writer seeks back and
writes the snapshot value 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 snapshot value, 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 segment's stored nonce and its AEAD tag:</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 216,32 L 216,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">[nonce(i)]</text>
                  <text x="164" y="52">[LH(ct_i)]</text>
                  <text x="264" y="52">tag_i</text>
                  <text x="60" y="68">(Nn)</text>
                  <text x="164" y="68">(Nh)</text>
                  <text x="240" y="68">(Nt</text>
                  <text x="264" y="68">=</text>
                  <text x="288" y="68">16)</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+------------+------------+-----------+
| [nonce(i)] | [LH(ct_i)] |   tag_i   |
|    (Nn)    |    (Nh)    | (Nt = 16) |
+------------+------------+-----------+
]]></artwork>
          </artset>
        </figure>
        <t>The bracketed nonce is present only in random nonce mode, and the
bracketed ciphertext digest LH(ct_i) only when the segment commitment is
set.  The tag is always present, Nt = 16 octets in every SEAL
suite (<xref target="aead-table"/>).  The fields are stored in leaf order:  under a
derived nonce (Np = 0) the metadata entry is exactly the leaf,
LH(ct_i) || tag_i, so an implementation folds the stored bytes directly.
Each metadata entry holds the Np-octet presented nonce and the Nt-octet
tag, so meta_len = Np + Nt octets, plus Nh when the segment commitment
is set.  A random-nonce entry sets Np = Nn and is Nn + Nt octets.
A derived-nonce entry recomputes the nonce from the key schedule, so
Np = 0 and the entry is Nt octets.  The per-suite values, for a metadata
entry with no stored leaf, 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 the authenticator's own whole-object region, held
outside both the snapshot value and the per-segment metadata entries.
Per-segment state does not count toward it:  a stored leaf sits in the
metadata entry and is already carried by meta_len.  aux is whatever
whole-object state the authenticator keeps beyond its snapshot value,
and it takes one of three forms:</t>
        <ul spacing="normal">
          <li>
            <t>none, so aux is 0.  A null snapshot keeps nothing, and the digest
transcript recomputes over the leaves rather than keep a summary.</t>
          </li>
          <li>
            <t>a fixed-size summary, so aux is a constant.  The masked multiset hash
keeps its masked accumulator, Nh octets.</t>
          </li>
          <li>
            <t>per-region state whose size follows the count, so aux depends on the
object.  The epoch digest tree keeps its heads, n_ep * Nh octets,
growing with the object through n_ep.</t>
          </li>
        </ul>
        <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.</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 segment commitment 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 snapshot value from the header
alone, then seeks to any segment using these offsets.  Because the
authenticator's per-segment leaves live in the metadata entries (the tag
alone, or LH(ct_i) || tag_i when the segment commitment is set), 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 snapshot value and the
epoch-heads region together, then reads one epoch's leaf run 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, the n_seg per-segment metadata entries (each meta_len
octets, broken out in <xref target="fig-meta-entry"/>), and the snapshot value
last.  The authenticator's per-segment leaves live in the metadata
stream (<xref target="I-D.sullivan-cfrg-raae"/>):  the tag alone, or
LH(ct_i) || tag_i when the segment commitment is set.  A reader
therefore authenticates the snapshot by reading only the metadata
stream, never the data stream.  When the authenticator keeps
whole-object state, the metadata stream also carries its aux region:
the masked accumulator (Nh octets) or the epoch heads (n_ep * Nh
octets).  The metadata stream is written once n_seg is known, so it
carries a count-dependent aux as readily as a fixed one.
<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="560" viewBox="0 0 560 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 256,64 L 256,192" fill="none" stroke="black"/>
                <path d="M 272,256 L 272,304" fill="none" stroke="black"/>
                <path d="M 320,256 L 320,304" fill="none" stroke="black"/>
                <path d="M 424,256 L 424,304" fill="none" stroke="black"/>
                <path d="M 552,256 L 552,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 552,256" fill="none" stroke="black"/>
                <path d="M 8,304 L 552,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="220" y="276">meta_0</text>
                  <text x="296" y="276">...</text>
                  <text x="368" y="276">meta_last</text>
                  <text x="468" y="276">snapshot</text>
                  <text x="36" y="292">(32)</text>
                  <text x="116" y="292">(Nh)</text>
                  <text x="220" y="292">(meta_len)</text>
                  <text x="372" y="292">(meta_len)</text>
                  <text x="484" 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 |   meta_0   | ... | meta_last  | snapshot      |
| (32) |    (Nh)    | (meta_len) |     | (meta_len) |     (Na)      |
+------+------------+------------+-----+------------+---------------+
]]></artwork>
          </artset>
        </figure>
        <t>Because neither stream embeds the other, both grow by appending.
Extending a message appends one ciphertext segment to the data stream,
appends one metadata entry to the metadata stream, and rewrites the
trailing snapshot value.  Truncating drops the tail of each stream and
rewrites the snapshot value.  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 snapshot value 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.
Two octets suffice because ct_i is at most segment_max, 16384 for
SEAL-log.  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.  The linear layout stores
a segment inline with no length, and the aligned layout places segment
i at offset i * segment_max, so neither can represent a short interior
segment.  The append-only re-mark produces one:  appending to an object
whose terminal segment is short re-marks that segment (<xref target="profiles"/>),
preserving its plaintext and hence its length, so it becomes a short
interior segment.</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 snapshot value 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 inside meta_len):
    32 + commitment_length + Nh + (Nt + Nh) * n_seg
snap_id 0x0003 (Na = Nh, aux = n_ep * Nh stored):
    32 + commitment_length + Nh + n_ep * Nh + (Nt + Nh) * n_seg
]]></artwork>
        <t>When the segment commitment (<xref target="I-D.sullivan-cfrg-raae"/>) is set, each
aligned or split metadata entry also carries LH(ct_i).  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.</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 snapshot
value.  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 snapshot value, 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>To 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.  The wrapped_acc and
snapshot <bcp14>MUST</bcp14> come from locally trusted snapshot state
(<xref target="I-D.sullivan-cfrg-raae"/>).</t>
        <t>The snapshot is Nh octets, so Na = Nh, as it is for the other two
authenticators (<xref target="I-D.sullivan-cfrg-raae"/> defines Na in general).
wrapped_acc is not part of it.  A verifier 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, which
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 a different authenticator's aux region,
and no object carries both.</t>
        <t>Masking it is still required (<xref target="appendix-snapshot"/>).  Moving the
accumulator out of the snapshot value changes where it is written, not
whether it is exposed.</t>
        <t>SnapVerify runs only after the verifier has re-derived and checked the
commitment as part 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 or any value derived from it, 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
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 ordered list of per-segment digests.  It
has no accumulator and no mask, and it recomputes over the full leaf
list on any rewrite.  Its distinguishing property is that its ordering
is strict:  a fixed, published snapshot cannot be made to verify a
different segment set, even by a party that holds the CEK and every key
derived from it.  When the segment commitment is set, so the leaf
carries LH(ct_i), the snapshot additionally binds each segment's
ciphertext bytes, not only its AEAD tag (<xref target="snapshot-security-dt"/>).  A
consuming protocol that authenticates the snapshot value, for example by
binding it into a signed reference or manifest, extends that binding to
per-segment origin authentication.</t>
        <t>Its per-segment input is the segment leaf (<xref target="I-D.sullivan-cfrg-raae"/>).
The leaf carries the AEAD tag always, and prepends the ciphertext digest
LH(ct_i) when the segment commitment is set:</t>
        <artwork><![CDATA[
leaf(i) = [LH(ct_i)] || tag_i
]]></artwork>
        <t>LH is the over-large-field digest of <xref target="I-D.sullivan-cfrg-raae"/>, so
where the segment commitment 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, and leaf(i) is the Nh + Nt octet concatenation
of that digest with the tag.  Without it the leaf is the Nt-octet tag
alone and the transcript binds the tag set but not the ciphertext
content.  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>The leaf binds the segment's index and finality, and the presented
nonce, through the tag.  The tag authenticates the segment AAD, which
carries the index and is_final in random nonce mode and is empty in
derived nonce mode where the nonce carries them
(<xref target="I-D.sullivan-cfrg-raae"/>), and the tag is a function of the presented
nonce, so a segment cannot be reinterpreted under a different nonce
without changing the tag and hence the leaf.  Position within the object
is bound by the ordered transcript below and the count by n_seg.
Because the tag binds the index and finality in either nonce mode, the
digest transcript places no restriction on the nonce mode.</t>
        <t>The snapshot value is one keyed derivation over the commitment, the
count, and the ordered leaf list:</t>
        <artwork><![CDATA[
snapshot = KDF(protocol_id, transcript_label, [snap_key],
               [commitment, uint64(n_seg),
                leaf(0), ..., leaf(n_seg-1)], Nh)
]]></artwork>
        <t>so Na = Nh.  The digest transcript fixes one label, transcript_label =
"snap_transcript", distinct from all other SEAL labels under the encode
frame (<xref target="I-D.sullivan-cfrg-raae"/>).  The injective framing of the
ordered list binds each leaf's position and the count, so a leaf cannot
move to another index without changing the transcript.  The snap_key ikm
makes the value unforgeable without the key
(<xref target="I-D.sullivan-cfrg-raae"/>).  The commitment element repeats the
object's commitment (<xref target="I-D.sullivan-cfrg-raae"/>) inside the transcript.
For SnapVerify alone it is redundant, because snap_key already binds the
CEK and salt.  It is load-bearing for a consuming protocol that lifts
the snapshot value into a signature or MAC, which then carries the full
object context (CEK, payload_info, and G) and cannot be replayed against
another object (<xref target="snapshot-security-dt"/>).</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 over the stored segment i
  snapshot_calc = KDF(protocol_id, transcript_label, [snap_key],
                      [commitment, uint64(n_seg),
                       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 leaf list.  Any change to the segment set
recomputes the transcript over the new leaf list and re-publishes the
snapshot value.  A write-once profile computes it once, at encryption,
and only verifies it thereafter.</t>
        <t>An object with n_seg = 0 is a valid empty object under the digest
transcript.  The leaf list is empty and the snapshot value is
KDF(protocol_id, transcript_label, [snap_key], [commitment,
uint64(0)], 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, so
whole-object SnapVerify reads the full object.  A layout or consuming
protocol <bcp14>MAY</bcp14> store or carry the leaf list itself:  a layout <bcp14>MAY</bcp14> hold
leaf(i) in each per-segment metadata entry, and a consuming protocol <bcp14>MAY</bcp14>
carry the list beside the object, for example in a manifest.  A reader
<bcp14>MAY</bcp14> then verify the transcript over the stored or carried leaves without
reading any ciphertext, and <bcp14>MUST</bcp14> compare leaf(i), recomputed from the
one segment it reads, against the stored or carried entry 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 origin authentication from one authenticated
snapshot value.</t>
        <t>A modified segment, tag, or count changes the recomputed transcript, and
a different key or parameter context fails the commitment check that
precedes 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>The leaf is the same as in <xref target="digest-transcript"/>:</t>
        <artwork><![CDATA[
leaf(i) = [LH(ct_i)] || tag_i
]]></artwork>
        <t>d_e is the epoch head over one epoch's leaves, and the snapshot is the
keyed digest over d_0 ..  d_{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>The epoch head d_e is a keyed digest over that epoch's leaves:</t>
        <artwork><![CDATA[
epoch_run(e) = leaf(e * 2^r) || ... || leaf(last index in epoch e)
d_e = KDF(protocol_id, epoch_head_label, [snap_key],
          [LH(epoch_run(e))], Nh)
]]></artwork>
        <t>The leaves are fixed length per object (Nh + Nt octets with the segment
commitment set, Nt octets without) and the epoch heads are fixed length
(Nh octets), so each run parses unambiguously given its
element count, which n_seg and epoch_length fix.</t>
        <t>An epoch head needs no index or count of its own.  Its position is bound
by where d_e sits in the ordered heads_run, exactly as a leaf's position
is bound by the ordered transcript in <xref target="digest-transcript"/>.  The final
epoch's size is fixed by n_seg and epoch_length, both already bound
(n_seg in the snapshot below, epoch_length in snap_key through
payload_info), so a partial final epoch needs no explicit count.</t>
        <t>Because the epoch heads carry no index or count of their own and the
segmentation is recovered only from n_seg and epoch_length, a profile
that selects the epoch digest tree <bcp14>MUST</bcp14> bind epoch_length into snap_key.
SEAL satisfies this through payload_info, which carries epoch_length
into the snap_key derivation.  A profile that left epoch_length unbound
would let a key holder present one heads_run under a different fan-out,
defeating the position and count binding above.</t>
        <t>A full leaf run can be larger than the 0xFFFE-octet frame literal
(<xref target="I-D.sullivan-cfrg-raae"/>), so LH compresses it to a fixed Nh octets
before it enters the KDF, and every element the KDF sees stays at most
Nh octets.</t>
        <t>The snapshot value is a keyed digest over the epoch heads:</t>
        <artwork><![CDATA[
heads_run = d_0 || d_1 || ... || d_{n_ep-1}
snapshot = KDF(protocol_id, head_label, [snap_key],
               [commitment, uint64(n_seg), LH(heads_run)], Nh)
]]></artwork>
        <t>so Na = Nh.  LH pre-hashes the heads run for the same reason.  The epoch
digest tree fixes two labels, epoch_head_label = "snap_epoch" and
head_label = "snap_epoch_root", each distinct from all other SEAL labels
under the encode frame (<xref target="I-D.sullivan-cfrg-raae"/>).  The commitment and
count are bound as in <xref target="digest-transcript"/>, and the snap_key ikm makes
the value unforgeable without the key (<xref target="I-D.sullivan-cfrg-raae"/>).</t>
        <t>Because the leaf binds the tag (<xref target="digest-transcript"/>), the epoch digest
tree places no restriction on the nonce mode.</t>
        <t>A reader stores the n_ep epoch heads in the header alongside the
snapshot value, and the per-segment leaves in the metadata entries.  The
snapshot value 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 leaf.  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
per-segment leaves are contiguous within an epoch, so one seek reads the
whole epoch.  A layout that interleaves the leaves with the ciphertext
does not have this property, and a reader gathers an epoch's leaves 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],
                      [LH(epoch_run(e))], Nh)
  snapshot_calc = KDF(protocol_id, head_label, [snap_key],
                      [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), which follows the
      snapshot value in the header
  head_calc = KDF(protocol_id, head_label, [snap_key],
                  [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 leaf run, min(2^r, n_seg - e * 2^r) leaves,
      from segment e * 2^r's metadata entry
      ;; one aligned read
  d_calc = KDF(protocol_id, epoch_head_label, [snap_key],
               [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
  check leaf_calc equals the stored 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.</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 snapshot
value, 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 the value is
computed once at encryption.  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 leaf, the new epoch head, and the new snapshot value.</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],
               [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 (Np = 0, meta_len = Nt +
Nh).  A random-nonce entry has meta_len = Np + Nt + Nh.  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-dt"/>.</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>
    </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, including the mu-PRF
cost of its snap_key derivations.</t>
      <t>Every snapshot value 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 ordered leaf list under
the digest transcript, and the epoch heads 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 a snapshot value that is the
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>Its forgery advantage is the Adv_snap term of the master ra-ROR bound
(<xref target="I-D.sullivan-cfrg-raae"/>) for snap_id 0x0001, 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 snapshot value from
the observed count and the recomputed accumulator and compares it
against the stored snapshot value 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 snapshot value 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
commitment, the segment count, and the ordered leaf list
(<xref target="digest-transcript"/>).  Its transcript label is distinct under the
encode frame, and the injective framing binds each leaf's position and
the count.</t>
        <t>Unforgeability without snap_key rests on the same multi-user PRF
assumption as the rest of the key schedule.  The transcript is a single
PRF evaluation over the framed input, so its term in
<xref target="I-D.sullivan-cfrg-raae"/> is a fresh-input forgery term alone:  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 two bindings against a key holder, on
independent threat axes.  The first is content binding, and it holds
only when the segment commitment 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, so the ciphertext binding
rests on the collision resistance of LH for any segment length.  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.  Without the
segment commitment the transcript binds the tag set 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 is exhibit a second segment set that
verifies under a fixed, already-published transcript value.</t>
        <t>The second binding is the presented nonce, through the tag.  A
non-committing AEAD lets a key holder reinterpret a fixed ciphertext:
holding ct_i unchanged and presenting a different stored nonce yields a
different plaintext under the same key (<xref target="I-D.sullivan-cfrg-raae"/>),
with a tag the key holder recomputes.  The ciphertext bytes do not
change, so a leaf of LH(ct_i) alone would not detect the substitution.
The tag does change, because it is a function of the nonce, so a leaf
that carries the tag binds the presented nonce and rejects the
reinterpretation.  How firmly it binds depends on the nonce mode and, in
random nonce mode, on the AEAD's nonce and tag widths.  In derived nonce
mode the nonce is recomputed rather than stored, so it cannot be
presented differently and no reinterpretation arises.  In random nonce
mode the stored nonce can be changed:  for the narrow-nonce suites,
whose nonce width Nn is at most the tag width Nt, the tag is effectively
injective in the nonce and the binding is structural, while for a
wide-nonce suite (Nn greater than Nt) a nonce change can preserve the
tag only by a 2^(8*Nt) search, so the binding is 2^(8*Nt) rather than
structural.  An instantiation that sets the segment commitment in random
nonce mode over a wide-nonce suite accepts that bound.  The
tag also binds the segment index and finality, through the segment AAD
in random nonce mode and through the nonce in derived nonce mode
(<xref target="I-D.sullivan-cfrg-raae"/>).</t>
        <t>This nonce binding is why the digest transcript places no restriction on
the nonce mode.  In random nonce mode the nonce is stored and a key
holder could otherwise move it, and the tag in the leaf closes that.  In
derived nonce mode the nonce is recomputed from the key schedule and
cannot be moved independently, so the tag is redundant there but not
harmful.  A leaf without the tag, under a non-committing AEAD in random
nonce mode, would be forgeable by a key holder, so SEAL's leaf carries
the tag in every case.</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 own 2^(4*Nh)
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.</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
k-list bound.  What it cannot do is change that bound, 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 segment commitment.
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 snapshot value 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 equivocation floor
at four segments.  The ordering is settled by snap_id in this document
(<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 snapshot value 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 snapshot value 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.  An application <bcp14>MUST NOT</bcp14> rely on a signature over the
masked multiset hash's snapshot value for content attribution among CEK
holders.  The ciphertext digest is what grounds content binding on
collision resistance.  With the segment commitment set, a fixed,
authenticated digest transcript also strengthens position binding.  It
pins each segment's ciphertext to its index, so no one, not even a party
that holds or chose the CEK, can take a valid segment and make it verify
at a different index.  The base construction pins position only as
strongly as the AEAD commits under an adversarial key, which the SEAL
suites do not (<xref target="I-D.sullivan-cfrg-raae"/>), so a CEK holder can craft
one ciphertext that opens at two positions.  The transcript closes that
gap by grounding position on collision resistance instead.  In the terms
of <xref target="I-D.sullivan-cfrg-raae"/>, this is the position-commitment notion
ra-CMT-p, restored against adversarially chosen keys.  The leaf then
carries both the ciphertext digest and the tag, neither redundant, since
no SEAL suite carries a commitment claim (<xref target="I-D.sullivan-cfrg-raae"/>)
and all admit random nonce.</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 content, nonce,
and position bindings are those of <xref target="snapshot-security-dt"/>.</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 snapshot
binds the epoch heads through LH, so a forged snapshot requires an LH
collision at one of the two levels or a snap_key PRF forgery on the
head.  The snapshot binds the epoch heads in order and binds n_seg, so
an epoch head cannot move to another position and the segmentation is
fixed by n_seg and epoch_length.</t>
        <t>The forgery term without snap_key is the digest transcript's single
fresh-input PRF term, with no birthday term in the number of published
snapshots.  Against a key holder, and where the segment commitment is
set, substituting content under a fixed published snapshot requires an
LH collision against that fixed target, a second preimage, at one of
three target classes:  the n_seg leaves it shares with the digest
transcript, the n_ep epoch heads, and the single root.  The work factor
is 2^(8*Nh) per target with a benign multiplicity of n_seg + n_ep + 1,
so the two fold levels add the epoch and root targets to the
transcript's leaf targets without lowering the per-target strength.  A
writer that chooses both openings of one snapshot instead faces a
birthday collision at 2^(4*Nh), the same equivocation floor as the
digest transcript, which the fold does not lower.  The formal two-level
reduction, the snap_key PRF term on the head and the LH 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">segment commitment</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 segment commitment 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 never rewrites, so its 16 bounds only 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 * (Nt + Nh) 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
snapshot value.  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, for objects up to about 128 GiB at
the recommended parameters (<xref target="I-D.sullivan-cfrg-raae"/>).</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="I-D.sullivan-cfrg-raae"/>), 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.</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"/>).</t>
    </section>
    <section anchor="binding-limits-profiled">
      <name>Binding Limits for Profiled Suites</name>
      <t>For each profiled suite the binding limit is the smallest applicable
usage-limit class of <xref target="I-D.sullivan-cfrg-raae"/>, at a 2^-32 advantage
target:</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">~2^32 per epoch key</td>
            <td align="left">confidentiality</td>
          </tr>
          <tr>
            <td align="left">AES-256-GCM, random</td>
            <td align="left">random-nonce collision</td>
            <td align="left">~2^32 per epoch key</td>
            <td align="left">confidentiality</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</td>
          </tr>
          <tr>
            <td align="left">AES-256-GCM-SIV, derived, distinct segments</td>
            <td align="left">MRAE distinct-nonce</td>
            <td align="left">~2^48 per epoch key</td>
            <td align="left">confidentiality and integrity</td>
          </tr>
          <tr>
            <td align="left">AES-256-GCM-SIV, derived, hot segment</td>
            <td align="left">fixed-nonce data volume</td>
            <td align="left">~2^36 per segment at 64 KiB</td>
            <td align="left">confidentiality</td>
          </tr>
          <tr>
            <td align="left">AEGIS-256, random</td>
            <td align="left">forgery bound</td>
            <td align="left">~2^83 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 per key</td>
            <td align="left">integrity</td>
          </tr>
        </tbody>
      </table>
      <t>The per-epoch-key and per-key counts hold at any segment size.  The two
length-dependent figures, the hot-segment data volume and the forgery
bound, are worst-case at segment_max and only rise for shorter segments.</t>
      <t>The 96-bit-nonce suites bind on random-nonce collision.  AEGIS makes
nonce collision negligible with a 256-bit nonce (~2^112) and binds on
forgery.  A derived-nonce MRAE AEAD has the two limits above, the
distinct-derived-nonce ceiling and the fixed-nonce data-volume cap, not
a single shared pool.</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 set a
concrete write limit a deployment reads off the table below.  Object
size is not that limit:  every instantiation grows to the 2^63-segment
index ceiling (about 2^79 octets at segment_max 65536, 2^77 at 16384)
through epoch rotation.  The limit reached first is how many times one
segment may be rewritten.</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.  A derived-nonce MRAE suite
(AES-256-GCM-SIV) instead gives each segment its own fixed-nonce budget
that does not divide by epoch_length (<xref target="I-D.sullivan-cfrg-raae"/>), so
its hot and average figures coincide.</t>
        <table anchor="instantiation-limit-table">
          <name>Segment rewrite limits by named instantiation</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">~2^38</td>
              <td align="left">~2^38</td>
            </tr>
            <tr>
              <td align="left">SEAL-log</td>
              <td align="left">16 KiB</td>
              <td align="left">write-once</td>
              <td align="left">write-once</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.  Two cases depart from them.  An AEGIS suite makes nonce
collision negligible with its 256-bit nonce, so its rewrite count is
bounded by forgery rather than by the epoch-key pool.  A derived-nonce
MRAE suite (AES-256-GCM-SIV, as SEAL-compact takes) replaces the shared
pool with the per-segment fixed-nonce budget in the table.  SEAL-log is
write-once for a different reason:  SEAL-AO-v1 derives a fresh nonce
for each index and finality bit, so the per-append re-mark re-encrypts
a segment under a new nonce rather than spending its budget, at any
derived-nonce suite.</t>
        <t>Integrity does not degrade with write volume:  the per-query forgery
limits come from <xref target="I-D.irtf-cfrg-aead-limits"/> for the GCM and
ChaCha20-Poly1305 suites, <xref target="RFC8452"/> for AES-256-GCM-SIV, and the
AEGIS analysis, and run from about 2^59 to 2^83 forgery attempts at
the 2^-32 target.</t>
      </section>
    </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.  The
suites, layouts, and named instantiations in this document inherit that
analysis and add no security argument of their own beyond the parameter
choices recorded below.  An implementer needs the companion for the
threat model and the assumptions on which every claim in this document
rests.</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 or payload_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 the extractor-then-PRF analysis of HKDF is in
<xref target="RFC5869"/>.  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>Two concrete-specific analyses have their own sections in this document.
Each snapshot authenticator instantiation (<xref target="snapshot-instantiations"/>)
realizes the abstract Adv_snap term of the master ra-ROR bound, and its
per-instantiation forgery analysis is in
<xref target="snapshot-authenticator-security"/>.  The safe-use limits of the
profiled suites, derived from the companion's bounds, are collected in
<xref target="binding-limits-profiled"/>.  Staying within the binding limit for a
suite and mode preserves the stated confidentiality or integrity margin,
and exceeding it degrades the corresponding property.</t>
      <t>Suite and profile selection carries the trade-offs set out in
<xref target="profile-applicability"/>.  A 96-bit-nonce random suite binds on
nonce-collision probability, whereas a 256-bit-nonce AEGIS suite makes
collision negligible and binds on its forgery bound; a derived-nonce
MRAE suite replaces the collision limit with the distinct-nonce and
fixed-nonce data-volume limits of <xref target="binding-limits-profiled"/>; and the
choice of snapshot authenticator fixes what a reader can detect
(<xref target="snapshot-instantiations"/>).  These are choices among the regimes the
companion analyzes, not departures from the raAE guarantees.</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 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>
    <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, and a serialization layout, 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 segment commitment, 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 snapshot value 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 snapshot value below the cost of a
collision:  linear if the construction offers an algebraic route,
strict if finding one is a collision problem, and n/a for an
authenticator that produces no snapshot value.  The analysis behind
each value is in <xref target="snapshot-authenticator-security"/>.</t>
      <t>The value a registrant chooses here settles the segment-commitment
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 snapshot value.  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="I-D.irtf-cfrg-aegis-aead"/>.  TurboSHAKE-256
(0x0013) is a pending early allocation in the HPKE KDF registry per
<xref target="I-D.ietf-hpke-pq"/>, and its entry firms up when that draft publishes
as an RFC.  The SEAL normative references to those drafts are
references to works in progress, so publication of this document waits
on theirs.</t>
      <table anchor="iana-early-alloc">
        <name>Registered and Early-Allocation 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">early allocation</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>
  </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-03"/>
        </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="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="I-D.irtf-cfrg-aegis-aead">
          <front>
            <title>The AEGIS Family of Authenticated Encryption Algorithms</title>
            <author fullname="Frank Denis" initials="F." surname="Denis">
              <organization>Fastly Inc.</organization>
            </author>
            <author fullname="Samuel Lucas" initials="S." surname="Lucas">
              <organization>Individual Contributor</organization>
            </author>
            <date day="5" month="October" year="2025"/>
            <abstract>
              <t>   This document describes the AEGIS-128L, AEGIS-256, AEGIS-128X, and
   AEGIS-256X AES-based authenticated encryption algorithms designed for
   high-performance applications.

   The document is a product of the Crypto Forum Research Group (CFRG).
   It is not an IETF product and is not a standard.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/cfrg/draft-irtf-cfrg-aegis-aead.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-aegis-aead-18"/>
        </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="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="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="4" month="December" year="2025"/>
            <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.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-aead-limits-11"/>
        </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 1884?>

<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 the SEAL-simple named instantiation (<xref target="named-instantiations"/>),
giving the encrypt and decrypt blocks once and two parameter tables
that instantiate them, so an implementer of the profile can build a
conforming encryptor and decryptor from this appendix.</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.</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: 8 YiB (2^83 octets) is the AES-256-GCM budget across
all 2^31 epoch keys, each held to a 2^-32 advantage (2^52 octets per
key). A full 512 ZiB (2^79-octet) object uses 1/16 of that, a ratio
fixed by the SEAL-simple choice of epoch_length 32.</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.
Once that vector is regenerated for the current payload_info, 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 follows AEGIS-256's forgery bound, ~2^83
per key, which does not depend on nonce mode (<xref target="budget-table"/>), in
place of the AES-256-GCM tag-forgery formula.  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, and the snapshot, and wins by making SnapVerify accept a
(segment set, snapshot) pair other than the writer's current state.
Whole-object rollback to an earlier honest state is excluded and is the
application's freshness responsibility (<xref target="I-D.sullivan-cfrg-raae"/>).</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
SnapVerify does not surface the recovered 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 <= Adv_muPRF_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 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.  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, stores Nh octets of snapshot value 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
different authenticator under its own snap_id
(<xref target="I-D.sullivan-cfrg-raae"/>).</t>
      <t>The masked accumulator is stored in the aux region so a stateless
writer can resume the O(1) update from it, rather than holding it in
trusted state or re-reading every tag.  Storing it 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.  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, each one
segment_max or less:  the target epoch's leaf run and the list of epoch
heads.  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, 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.  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 except <xref target="seal-simple-vector"/> use protocol_id =
"SEAL-RW-v1"; <xref target="seal-simple-vector"/> uses "SEAL-RO-v1".  Every vector
uses CEK = 32 octets of 0xAA and salt = 32 octets of 0x04.  Each
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 snapshot
value 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 0x03 and 0x07
repeated to the AEAD nonce length.  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 block exposes the intermediate epoch_key and
segment_key per segment.
<xref target="single-trace"/> gives the full KDF trace for one commitment.  The other
blocks list schedule outputs only.  The twenty computed positive
vectors (eighteen end-to-end and two append-only), plus the negative
SnapVerify vector in <xref target="snapverify-reject"/>, are published byte-for-byte
as raae-v1-vectors.json in the draft repository.</t>
      <t>The vectors are organized by purpose:</t>
      <dl>
        <dt>Annotated walkthrough:</dt>
        <dd>
          <t><xref target="single-trace"/> shows one complete HKDF-SHA-256 trace, including the
commitment KDF inputs.  Use it to debug framing, payload_info
construction, commitment derivation, segment AAD, accumulator
contribution, and snapshot computation.</t>
        </dd>
        <dt>Combiner injectivity coverage:</dt>
        <dd>
          <t><xref target="combiner-vectors"/> exercises the KDF combiner in isolation and
demonstrates encode() injectivity, including the empty-sequence and
same-octets-different-grouping cases.  The 38 combiner vectors are
published as raae-v1-combiner-kdf-vectors.json.</t>
        </dd>
        <dt>Cipher-suite coverage:</dt>
        <dd>
          <t>The single-segment and two-segment vectors exercise the listed AEAD
and segment-size combinations with HKDF-SHA-256.  Use these to check
AEAD code points, segment_max encoding, nonce storage, and
finality-bit handling.</t>
        </dd>
        <dt>KDF coverage:</dt>
        <dd>
          <t><xref target="turboshake-vectors"/> covers the TurboSHAKE-256 KDF suite and its
64-octet Nh outputs.</t>
        </dd>
        <dt>Rewrite coverage:</dt>
        <dd>
          <t><xref target="rewrite-vector"/> shows a segment rewrite and the corresponding
accumulator and snapshot update.</t>
        </dd>
        <dt>Derived-nonce coverage:</dt>
        <dd>
          <t><xref target="derived-nonce-vector"/> covers AES-256-GCM-SIV in derived nonce mode,
where the nonce is recomputed rather than stored.</t>
        </dd>
        <dt>Epoch coverage:</dt>
        <dd>
          <t><xref target="cross-epoch-vector"/> shows epoch_length = 0, the finest rotation,
and exposes per-segment epoch_key and segment_key values.  The
AEGIS-256 blocks exercise the opposite endpoint, the flat key at
epoch_length = 63.</t>
        </dd>
        <dt>Plaintext-bound nonce coverage:</dt>
        <dd>
          <t><xref target="pt-bound-vectors"/> exposes the component values of the optional
plaintext-bound nonce construction, which no end-to-end vector can
reach.</t>
        </dd>
        <dt>Global associated data coverage:</dt>
        <dd>
          <t><xref target="g-commitment-vector"/> pins the commitment's G input at its empty
default, which equals the <xref target="single-trace"/> commitment, and at a
nonempty value.</t>
        </dd>
        <dt>Empty-AAD coverage:</dt>
        <dd>
          <t>All vectors use empty per-segment A_i.  As specified in
<xref target="I-D.sullivan-cfrg-raae"/>, an empty A_i is omitted from the encoding
rather than encoded as a zero-length fourth element.</t>
        </dd>
        <dt>Negative coverage:</dt>
        <dd>
          <t><xref target="snapverify-reject"/> tampers a present segment tag without
recomputing the snapshot.  SnapVerify recomputes the accumulator,
hence the snapshot, from the present tags and rejects the stored
snapshot value.</t>
        </dd>
      </dl>
      <t>The JSON file is the complete corpus for automated tests.  The text
below is intended for debugging and review.</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,
produce distinct framed inputs and therefore distinct outputs.  The full
set of 38 combiner vectors, covering both KDF classes and every SEAL
label, 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.
Because encode length-prefixes each element, the two expand_info values
differ, so the outputs 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.  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_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.  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_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 the only way to check 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 both blocks bind 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"/>.</t>
          <artwork><![CDATA[
plaintext    (12 octets):
    48656c6c6f2c205345414c21
random_input (12 octets):
    0f0f0f0f0f0f0f0f0f0f0f0f
pt_digest    (32 octets):
    e66fec4cada0ccdb73930622ef393d5b
    a05fb73bdd81205a9f828f75e85ded81
pt_hash      (32 octets):
    072fa800d5069a226a7322c5b3fb704f
    8564fd2075dd9de6de274a2b5645faaa
nonce_ctx    (56 octets):
    000a5345414c2d52572d763100080000
    0000000000000020072fa800d5069a22
    6a7322c5b3fb704f8564fd2075dd9de6
    de274a2b5645faaa
nonce        (12 octets):
    c80d12010cce5b67d9e1fcbb
]]></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 single-segment TurboSHAKE-256
block (<xref target="turboshake-vectors"/>).  The segment index is 1, visible in
the second framed element of nonce_ctx.</t>
          <artwork><![CDATA[
plaintext    (12 octets):
    48656c6c6f2c205345414c21
random_input (12 octets):
    0f0f0f0f0f0f0f0f0f0f0f0f
pt_digest    (64 octets):
    f809e1b9b0e28d0fd1dce5cf9e4aae59
    fde2b08a551c311b621323a5d2f3c78d
    e55c22edcdd091231c4509849acf592a
    85ab446dfcff4fac008194e6ef59d9b4
pt_hash      (64 octets):
    ad6a35f94960ee1004391bdfaee16149
    ef56bca4fd5b98abfec56fdb80752624
    ade63d71f3b15e9aa5dd9fb0ffa8e533
    f7ef5caa7620432cf1c1bf7d97611536
nonce_ctx    (88 octets):
    000a5345414c2d52572d763100080000
    0000000000010040ad6a35f94960ee10
    04391bdfaee16149ef56bca4fd5b98ab
    fec56fdb80752624ade63d71f3b15e9a
    a5dd9fb0ffa8e533f7ef5caa7620432c
    f1c1bf7d97611536
nonce        (12 octets):
    f263e270233c57b229b427b1
]]></artwork>
        </section>
      </section>
      <section anchor="dt-vectors">
        <name>Digest Transcript Component Vectors</name>
        <t>These vectors exercise the digest transcript
(<xref target="I-D.sullivan-cfrg-raae"/>) 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.  The leaf is the ciphertext digest LH(ct_i) concatenated
with the segment's AEAD tag.  Here the tag is a specified component
input.  The tag binds the segment's nonce, index, and finality
(<xref target="I-D.sullivan-cfrg-raae"/>).</t>
          <artwork><![CDATA[
ct_0            (16 octets):
    000102030405060708090a0b0c0d0e0f
tag_0           (16 octets):
    202122232425262728292a2b2c2d2e2f
leaf(0)=LH(ct_0)||tag_0 (48 octets):
    b726af81e3cadd5c7a486e6a3becc39b
    1c5628da64e8145161124bc172a4ad64
    202122232425262728292a2b2c2d2e2f
ct_1            (8 octets):
    1011121314151617
tag_1           (16 octets):
    303132333435363738393a3b3c3d3e3f
leaf(1)=LH(ct_1)||tag_1 (48 octets):
    3c36a934a52861d5b6c1da66ab493edb
    41f744771e16750ac409b3bed2758f87
    303132333435363738393a3b3c3d3e3f
transcript      (32 octets):
    6d5521e923b50a171000a66a02d0a10b
    06e6f70ac9db713d07900d9775effbbf
]]></artwork>
          <t>Each leaf is leaf(i) = LH(ct_i) || tag_i.  The transcript's ikm is
[snap_key] and its info elements are [commitment, uint64(2), leaf(0),
leaf(1)].  The ordered list binds each leaf's position and the count.
The stored snapshot value is the transcript.</t>
        </section>
      </section>
      <section anchor="edt-vectors">
        <name>Epoch Digest Tree Component Vectors</name>
        <t>These vectors exercise the epoch digest tree
(<xref target="I-D.sullivan-cfrg-raae"/>) 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 leaves, each leaf(i) = LH(ct_i) || tag_i:</t>
        <artwork><![CDATA[
leaf(0) (48 octets):
    b726af81e3cadd5c7a486e6a3becc39b
    1c5628da64e8145161124bc172a4ad64
    202122232425262728292a2b2c2d2e2f
leaf(1) (48 octets):
    3c36a934a52861d5b6c1da66ab493edb
    41f744771e16750ac409b3bed2758f87
    303132333435363738393a3b3c3d3e3f
leaf(2) (48 octets):
    2c8e6a5e8019913bebc27623854e35e3
    2bcd1ef439372403f8492e60d571cad1
    404142434445464748494a4b4c4d4e4f
leaf(3) (48 octets):
    cbd4067f9d6dc18f7bb5f33675a1b01e
    6ce102113947a9dc1045776b8e62d200
    505152535455565758595a5b5c5d5e5f
]]></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],
[LH(epoch_run(e))], 32) over that epoch's two concatenated leaves:</t>
        <artwork><![CDATA[
d_0 (32 octets):
    ef2971de8e06f175b2d2d349b63de419
    fcd454489c34ba8a6ae0343f090fa483
d_1 (32 octets):
    6f2cc3911e6338241ed6690e21839354
    397a4766fe664c2675488db43b357360
]]></artwork>
        <t>The snapshot is KDF(protocol_id, "snap_epoch_root", [snap_key],
[commitment, uint64(4), LH(d_0 || d_1)], 32):</t>
        <artwork><![CDATA[
snapshot     (32 octets):
    cf556c9805bfccabe30a8ce718834823
    6da5b766587e5d00334cb11ab124d5cf
]]></artwork>
      </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 snapshot value 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
snapshot value.  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 snapshot value 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 snapshot value 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 snapshot value 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 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+S96XYcx9E2+D+voob6IcDqhgBwEUVb/gbiIvKI25C0ZY9t
8a3uLgD1srurXVVNEBbka/muZa5s4okll1oaoO3vzMwZHJsCuquysjIjY48n
ptOpa8t2WTzIbr19fPI8e1huzos6e7st26LJ8vUie7Zu2nzdlnlbVuvmlstn
s7r4qNffcotqvs5XdP+izk/babNdLsuP+XraFPlyOq/W87poi+nhoZvnbXFW
1ZcPsnJ9WrlyUz/I2nrbtMeHh98eHrtmO1uVTUMPaS83NN6zx++eODx68T5f
Vmv65LJoXLPK6/b937cVTe9Btq7cpnzgsmyatdWc/9tUdVsXp438cbni312+
bc+rWq4s13TnywN6R5kqfZhl8g4vy/mH9POqPsvX5T/45R9kD+vLTVud1fnm
/DJ7SMuxXbbl+ix7/vwhX12s8nJJ0yrn59Uybw5sNb4qi/b0fz/DtwfzauXc
uqpXNObHAlN6Nn3kr5zOT+uzaZ3n/E2W2ea8oXWoVtOT+bxomuyEXqegPcGa
LrLHtMg0L5rhLb4nvCx+Rl5410svaNgH2fHh8T3+synqsmiwazbms3Vb1Oui
nT7Cpvf23r/D9PA23fHmycO7R0f3Huiv9+99q7/ev3M7/Hr3WH/99uj+of16
/96RrVBZt6cycl6clQ39my/8d7S80/PNh2K6+Ts+e/ns7bvp29fT+4eH09v3
H+lS5vVZQZM9b9tN8+Drr9cfl5vtrDlYl017cFZ9/Bq/4JOvnxdn+fzy67ev
+aNmU8zLHNcuseC0zDLs4mCzOE03qaDNXRXrBV+VnVZ19v2yotXVU/WiWtCh
qk6zV5uiFpL6q67oX7MfiMrL5uuH1RaLy9dmez88fLHPp/CHFycPd+zui4Ps
0UVVfyjTDTz8Znp0NLKHWKMH2Vt5uex1eLtMV805XB7RKbbp6Pje0Ibki+my
XJVtgy9/ys/WRT286IuqPKAz9fXR4cERTe/r29O7dw6nd+5+c3h/+u37o2+T
9TzJfihopHxZ/oPI/Ht64Pkiv8xe19VsWax2LMejA51EuhrHI0tx6+GbP79+
9+oWPRJXTbLnLx++zY7v3KFfN5uD7Pj+/entwzu37PJHr57h2rF3wHUv3hbt
07w5v9kqfPsNPUBGOTy8dzS9+/7oOFmJZ+CjRFktbdULMJ2maDOMnz3ZrufM
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
FjFZum2VNx/o+pXlaZ0jTyu78gs4wQmngyrXTe26Ka6jwxpxW7ppUZ4VpJQQ
kaw1I0Xm1h1MrpuG62ikeGa3cZO4+/2QRTEyGF839UMWhQ0G3umVjL6Z6bfz
JHGfg3kmmtGhkgzE/qhDMc/WJPb91w8ypPt2IvOwMWx/9l7mOAimamlmQl1w
NghRdewW7MRsOcGYw/TJI1l1rlrxboGCYcVEQe38A9k7FQKhdIaK1aYNMXCE
iaHKFMtTyW+QOfKs6UE/8cnTNXHKdVnx9ZbNAkrNJLJwxFszrxpOC+CLO3Ef
MBVWuSCOgkXAY/gPprkkBc7KJauEfYOM3lr0bQS5cS3t8CXONl/zHtfw8Q5/
Ric8PqjJmTRK9KdL0lk8iR75L8xZJeTGT5niKQME95JnzXm15sNAOCjWoT/P
kSo+3c2mqsHPVvmncrVdJcE0Ge/oHtQfFi53796+F5yL35NwcJEY3VQXkBWQ
8ReVkGYLm4Z28c7ht9GNeDKPOuWP+FkuX5L8bRCLObqX/Vh+ryF+MnToaGZ7
kGrqcEawi/M9i+wt7SytgPlTeILRoFkYlAQjBqVxtrU9gYfet1AfGVPLfFYs
QRS85NNHJ+9ObonL+WG12lQN206Rlzz75QtPe4jUSuYLfyPxTR8d5XMKzYE0
7OC4go6eqOzw37uhrZjEqTrDlhis/ZRhyXgxve8FQsaTuwSHGzjjA4c8ipfq
npnxA+bmTQtRHUK6Dr2AHWxegygoNi/qloRzOgud/X7WbjmYAEoioiJeIb5b
Pv3Cs9JgUfDug7tLzNN2Y8JbMX3z0/Tj0YRtp+nJK/zOk5Hv8DfH1/UmaGKx
Uc2qgaRJcQAB7NK/pqTcfKK9OD2FmbQ+c3Dj83nOxZ7ljfcpTTSlE/q7b/Ly
Wrj086YS67NNDf+dsS72wDtLusDc1GqUVTAdr5txswfhMWWGK9kUxH7/vi05
KjNow3MArIKtK3ybvTsm8mbbtivMvO61qmiR2BhPA87GrzgwUTamXbDTZki/
IBJVnYEv6WkN+5PgjJBLerqAhMlcGTLwcuPRclg4AJJGEsQZspYwgHrnnrVO
OWhjUmuSiemj4kwT8uQvc+1gV4ja/OquiMRpCcDsfEKWqpnBh/MHPg26OLzN
amrlczoQ2yXzAp4k3gcL91uNfuhqiWhF5HRrI0dZWyzbcQmcUBz9Sm6/HXIo
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
Mk2bqf9ttrd7zQrCarzD0ZnoyOPeZjsj2HNRBridHlB3CMjhqLY2+s5PfWLa
S1NBuWl0zRROwZmrNtZ9H1FPTN1Qs8EpcO3uQrbIO5rxkVG36p6+mxFDNgTg
7gy34F4qi906pHdjNZqtDZvYrvt49YflSSlJxkDvTdEfqI1R5nAujLsQpNUI
C6zjyH8XTfdyL3hyMV1vRn2x0V7q6upmtX9ZX+D9zdymhhpd9orHU7XHhX5q
lZVDC7T8YiHo+63Ddv6zu+vX6z/TfG9e3F7d7ro7Xbdu8r2i8jyL+09uNnvs
8b5SK0CL0M51ofAnJ1iiqoLNJws0T6NrcIH8Ecc6vpytepu7eV9uS+lZSVP4
OZnZTAGGPTavS8uR0a9i816FxQiWw+uDx+uUCSm1ColN0Y8uR1P5Pjrl3BW4
7mfCt3O86b7w93VchPfud7sZa9EqSlKZ8YnyLo/z9prETUtFpb+viSjR7qUL
z0Zx8Qa2rs8Wxa+7tukKoxuXsxWFPHd3VWNZ10971iTUx0to/q+m26zDQlC2
63bG1FLlyQy0vXk9FRenv1BgQMd9Ld1+PZRZl61RTYumbG9ZSL57MdhwAeXV
C80dHzcNp5cwDrMTNU4d+lavb7dT+ZGhMHpR2bno/Xb9cvNitK5cv+iVCZ6N
qu09K430eFukrmuve//NUSLzcORN114ODNxZ7eyYWF33rr/ro8p+0UQHj47h
osHYNoQhKUdkqOmwXX7rIjiog7U7Ezuanh2dDLLRve7n6IW2d1Tc+0C3iPKD
lmn9DHnqFbwoiN4eeV4q1OmmXKaWcVK2tEt2jQT+cxTTImocuvqfTFl/4e3r
0IAlZGzvVfprNvlebS+uvr5YUORpENjVF3N19HQbyf8Nk9/keK9KSDOQXXb3
qqus6WCiiUYN161K2khVn2oopCuKnrpe7e9gMOFLwBtikA2M7rOt5fp1zUg7
g0o6DOw83F+TZWuVLmgww2gt+/jsemc00Lbq1b52Pgx66HZ33LTfXbA77feP
6Ka2U6Dc/0J79w/jbPXbn1GEy3ykeiJXb7V61s4h+nepjh1M9z2hNXQsvhd7
v/po19L8o//2wNe2e5EYcwhdv2TVLqCg9E934bw0b+ybZ8/6FqH4xTsfMjUd
uvZ61j1Wbz6wOggPa61kG1ZvoIvWOd6mr8rNQEWrvQILTw6yLkbhyhflCrek
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
2/Z/AJpKFkxQmwIA

-->

</rfc>
