<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 4.0.5) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-mih-agent-disclosure-envelope-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="AAC Disclosure Envelope">Disclosure Envelope Profile for Agent Action Capsules</title>
    <seriesInfo name="Internet-Draft" value="draft-mih-agent-disclosure-envelope-00"/>
    <author initials="S." surname="Mih" fullname="Steven Mih">
      <organization>Action State Group, Inc.</organization>
      <address>
        <email>spec@actionstate.ai</email>
      </address>
    </author>
    <date year="2026" month="September" day="26"/>
    <area>Security</area>
    <workgroup>SCITT</workgroup>
    <keyword>SCITT</keyword>
    <keyword>disclosure</keyword>
    <keyword>digest</keyword>
    <keyword>AI agent</keyword>
    <keyword>transparency</keyword>
    <abstract>
      <?line 52?>

<t>This document defines the Disclosure Envelope, an out-of-band wrapper
structure for revealing the raw content behind a digest-only Agent Action
Capsule field to a verifier, without altering the Capsule's own bytes or
recomputing its <tt>capsule_id</tt>. The Capsule profile
<xref target="I-D.mih-scitt-agent-action-capsule"/> commits some fields as a
<xref target="RFC8785"/>-canonicalized SHA-256 digest only — the content itself is never
carried in the signed, registered record. The initial disclosable fields are
<tt>model_attestation.compute_attestation.agent_input_digest</tt> and
<tt>.agent_output_digest</tt>. A Disclosure Envelope wraps an unmodified Capsule
alongside a sibling <tt>disclosures</tt> object; a verifier recomputes the
JSON-DIGEST of each disclosed value using the same canonicalization the base
profile already uses for <tt>capsule_id</tt>, and compares it to the digest
committed inside the Capsule. This mechanism is distinct from the per-field
selective-disclosure profile
<xref target="I-D.mih-scitt-agent-action-capsule-selective-disclosure"/>: that mechanism
conceals and later reveals whole payload fields that would otherwise be
carried in clear; this one reveals the content behind a field that was
always present in clear, as a digest, from the moment the Capsule was
signed.</t>
    </abstract>
  </front>
  <middle>
    <?line 74?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Some Agent Action Capsule fields are, by design, digest-only: the field
carries a <xref target="RFC8785"/> JSON-DIGEST commitment to a value, not the value
itself. <tt>model_attestation.compute_attestation.agent_input_digest</tt> and
<tt>.agent_output_digest</tt> (<xref target="I-D.mih-scitt-agent-action-capsule"/>, Observation
mode) are the motivating case — a producer commits to the exact agent input
and output that produced an action without carrying that (potentially
large, sensitive, or independently-lifecycled) content in the signed,
anchored record.</t>
      <t>A producer who later chooses to prove that committed content to a specific
verifier needs a wire format for doing so. Sharing the raw content
out-of-band already works informally, but an ad hoc format invites two
failures this document exists to close: first, a viewer that renders a
disclosed value without recomputing and checking its digest is asserting a
match it never verified; second, a format that embeds the disclosed content
inside the digest-bearing region of the Capsule itself changes the bytes
that were signed, so the Capsule no longer content-addresses to its own
<tt>capsule_id</tt> — the artifact silently stops being the thing that was
anchored.</t>
      <t>This document defines a companion wrapper, the Disclosure Envelope, that
keeps the Capsule's bytes untouched and carries disclosed content as a
sibling structure outside them, together with the verifier checks that
recompute and compare each disclosure against its committed digest. The
default posture is WITHHELD: a Disclosure Envelope with an absent or empty
<tt>disclosures</tt> object is equivalent to sharing the Capsule alone, and
disclosure of any one field is opt-in and independent of any other.</t>
    </section>
    <section anchor="conventions">
      <name>Conventions and Definitions</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in BCP 14
<xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals,
as shown here.</t>
      <dl>
        <dt>Disclosure Envelope:</dt>
        <dd>
          <t>A JSON object with a <tt>capsule</tt> member and an OPTIONAL <tt>disclosures</tt>
member, as defined in <xref target="structure"/>.</t>
        </dd>
        <dt>Disclosable field:</dt>
        <dd>
          <t>A named entry in the disclosure-eligibility table (<xref target="eligible"/>) pairing
a <tt>disclosures</tt> member name with the Capsule field that carries its
committed digest.</t>
        </dd>
        <dt>Disclosure:</dt>
        <dd>
          <t>The raw JSON value of one disclosable field, carried as the corresponding
member of the <tt>disclosures</tt> object.</t>
        </dd>
        <dt>JSON-DIGEST:</dt>
        <dd>
          <t>As defined in <xref target="I-D.mih-scitt-agent-action-capsule"/>: the lowercase-hex
SHA-256 digest of <tt>UTF8({{RFC8785}} JCS(value))</tt>. The whole JSON value is
canonicalized recursively; no object-member allow-list, replacer array, or
other key-filtering operation is applied at any depth. This document only
applies to embedded Capsules that conform to the base profile's format-4
requirements.</t>
        </dd>
        <dt>JCS:</dt>
        <dd>
          <t>JSON Canonicalization Scheme per <xref target="RFC8785"/>.</t>
        </dd>
        <dt>SHA-256:</dt>
        <dd>
          <t>The SHA-256 hash function per <xref target="RFC6234"/>.</t>
        </dd>
      </dl>
      <t>The terms "Capsule", "capsule_id", "Producer", and "Verifier" are as
defined in <xref target="I-D.mih-scitt-agent-action-capsule"/>.</t>
    </section>
    <section anchor="relationship">
      <name>Relationship to Selective Disclosure</name>
      <t><xref target="I-D.mih-scitt-agent-action-capsule-selective-disclosure"/> and this
document both let a producer share less than the full Capsule content, but
they solve different problems and share no vocabulary.</t>
      <t>Selective disclosure conceals a payload field that would otherwise be
carried in clear at signing time, replacing it with a salted-hash
commitment in an <tt>_sd</tt> array; later disclosure reveals the concealed field
and reconstructs the plain payload. The field's clear-text value was never
in the signed record to begin with.</t>
      <t>The Disclosure Envelope instead applies to a field that is a digest
<strong>by design</strong>, unconditionally, in every Capsule that carries it — the
field is never concealed, because it never carried the raw value in the
first place. There is nothing to reconstruct and no <tt>_sd</tt>/<tt>_sd_alg</tt>
structure; the Capsule is unmodified in both its disclosed and undisclosed
states, and disclosure is a wrapper added around it, not a transformation
of it.</t>
      <t>The two mechanisms compose without conflict: a Capsule may simultaneously
be an SD-Capsule (per the selective-disclosure profile) and be wrapped in a
Disclosure Envelope (per this document). A verifier applies each
mechanism's checks independently; neither mechanism's structure is visible
to or interpreted by the other.</t>
    </section>
    <section anchor="structure">
      <name>Disclosure Envelope Structure</name>
      <section anchor="envelope-object">
        <name>Envelope Object</name>
        <t>A Disclosure Envelope is a JSON <xref target="RFC8259"/> object:</t>
        <artwork><![CDATA[
{
  "capsule": { ... },
  "disclosures": {
    "agent_input": { ... },
    "agent_output": { ... }
  }
}
]]></artwork>
        <t><tt>capsule</tt> (REQUIRED): the Capsule payload, byte-for-byte identical in its
JCS-canonicalized form to the payload that was signed and, if registered,
anchored. <tt>capsule_id</tt> (<xref target="I-D.mih-scitt-agent-action-capsule"/> §5.1) is
computed over <tt>capsule</tt> alone, exactly as the base profile defines,
using the base profile's own canonical-capsule-form exclusion set
unmodified. No member of the Disclosure Envelope other than <tt>capsule</tt> is
part of any digest computation the base profile defines, and no member of
the envelope other than <tt>capsule</tt> was part of the COSE_Sign1
<xref target="RFC9052"/> signature.</t>
        <t><tt>disclosures</tt> (OPTIONAL): an object whose members are disclosable fields
(<xref target="eligible"/>) the producer has chosen to reveal. A member's absence from
<tt>disclosures</tt> — including the absence of the whole <tt>disclosures</tt> object —
means that field is WITHHELD; this is the default posture and requires no
signal in the envelope. A member's presence means REVEALED; its value is
the exact JSON value whose JSON-DIGEST the corresponding Capsule field
committed to at signing time.</t>
        <t>A Disclosure Envelope MUST NOT be submitted for SCITT registration; the
registrable, signable artifact is the COSE_Sign1 Signed Statement whose
payload is <tt>capsule</tt>, registered (if at all) with a SCITT Transparency
Service <xref target="RFC9943"/> before any envelope is constructed around it. The envelope is a presentation-layer structure a
producer constructs after the fact, for a verifier that already trusts (or
is independently verifying) the underlying Capsule.</t>
        <t>A Capsule with no accompanying Disclosure Envelope — the base profile's
existing whole-envelope posture — remains fully valid; this document adds
an opt-in wrapper, not a requirement.</t>
      </section>
      <section anchor="eligible">
        <name>Disclosure-Eligible Fields</name>
        <t>The following table defines the disclosable fields this document
specifies. A <tt>disclosures</tt> member name not in this table is non-conforming;
a verifier MUST treat it as an unrecognized member (<xref target="verification"/>,
check DE-1) rather than attempting to verify it.</t>
        <table>
          <thead>
            <tr>
              <th align="left">disclosures member</th>
              <th align="left">Committed-digest field (in capsule.model_attestation.compute_attestation)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>agent_input</tt></td>
              <td align="left">
                <tt>agent_input_digest</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>agent_output</tt></td>
              <td align="left">
                <tt>agent_output_digest</tt></td>
            </tr>
          </tbody>
        </table>
        <t>Both fields are defined in
<xref target="I-D.mih-scitt-agent-action-capsule"/> (Observation mode). This table is a
Specification Required registry. An extension MUST (1) add a digest-only
Capsule field, (2) register the <tt>disclosures</tt> member and its committed-digest
field as a pair, (3) add format-4 vectors and increment their vector version,
and (4) require producers to retain the original value so it can be revealed.</t>
        <t>This revision scopes registrations to committed-digest fields directly under
<tt>capsule.model_attestation.compute_attestation</tt>. It does not define generic
Capsule-path resolution. Widening the registry beyond that object requires
generic path resolution in every implementation before such a registration can
be made. A disclosure reveals the whole registered member; selective disclosure
of a sub-field is instead the salted-commitment mechanism defined by
<xref target="I-D.mih-scitt-agent-action-capsule-selective-disclosure"/>.</t>
      </section>
      <section anchor="reserved-names">
        <name>Reserved Wrapper Member Names</name>
        <t><tt>capsule</tt> and <tt>disclosures</tt> are wrapper-level member names defined by this
document. Neither is a Capsule payload member defined or reserved by
<xref target="I-D.mih-scitt-agent-action-capsule"/> or its companions, so no collision
is possible: a Disclosure Envelope's <tt>capsule</tt> member and the Capsule
payload it contains are always syntactically distinguishable from a bare
Capsule payload, because a Capsule payload has no member of either name.</t>
      </section>
    </section>
    <section anchor="verification">
      <name>Verifier Checks</name>
      <t>Verification of a Disclosure Envelope is performed in two independent
phases: base Capsule verification (<xref target="I-D.mih-scitt-agent-action-capsule"/>
§6, Class 1) over <tt>capsule</tt> alone, and Disclosure verification (<xref target="de-phase"/>)
over the <tt>disclosures</tt> object. The two phases do not gate each other: a
disclosure mismatch MUST NOT be reported as a <tt>capsule_id</tt> or Class 1
failure, and a Class 1 failure does not suppress disclosure verification.
A verifier surface MUST report both results and MUST NOT conflate them —
in particular, MUST NOT let a matching disclosure upgrade the Capsule's own
verification status, and MUST NOT let the Capsule's own valid, anchored
status be read as implying anything about a disclosure it has not itself
recomputed and checked.</t>
      <section anchor="de-phase">
        <name>Phase DE: Disclosure Verification</name>
        <t>For each member <tt>disclosures</tt> carries:</t>
        <section anchor="de-1-eligibility-check">
          <name>DE-1: Eligibility Check</name>
          <t>If the member name is not in the disclosure-eligibility table
(<xref target="eligible"/>), report <tt>disclosure_ineligible_field</tt> and skip it.</t>
        </section>
        <section anchor="de-2-committed-digest-presence-check">
          <name>DE-2: Committed-Digest Presence Check</name>
          <t>Locate the committed-digest field for this member per <xref target="eligible"/>. If
<tt>capsule</tt> does not carry that field (or it is not a well-formed JSON-DIGEST
— 64 lowercase hex characters), report <tt>disclosure_no_committed_digest</tt>
and treat the member as WITHHELD-equivalent: it MUST NOT be reported as
matching or mismatching, because there is no commitment to check it
against.</t>
        </section>
        <section anchor="de-3-digest-recomputation-and-comparison">
          <name>DE-3: Digest Recomputation and Comparison</name>
          <t>Compute <tt>computed = JSON-DIGEST(value)</tt>: the lowercase-hex SHA-256 of
<tt>UTF8(JCS(value))</tt> over the whole recursively canonicalized value, with no
member filtering or replacer array. This document defines no second hashing
path.</t>
          <t>Compare <tt>computed</tt> to the committed digest located in DE-2:</t>
          <ul spacing="normal">
            <li>
              <t>If they match: report <tt>disclosure_match</tt> for this member. The verifier
MAY present this as "REVEALED — match" or equivalent.</t>
            </li>
            <li>
              <t>If they do not match: report <tt>disclosure_mismatch</tt> for this member. The
verifier MUST present this as a failed verification of the disclosed
content specifically — for example "REVEALED — MISMATCH" — and MUST NOT
present the disclosed value as if it were confirmed.</t>
            </li>
          </ul>
          <t>A value that cannot be JCS-canonicalized (for example, one carrying a raw
JSON float, forbidden in digest-bearing content by
<xref target="I-D.mih-scitt-agent-action-capsule"/> §5.1) MUST NOT be treated as
matching; a verifier MUST report <tt>disclosure_mismatch</tt> for it rather than
raising an error, consistent with the base profile's structured-result,
never-throw contract.</t>
        </section>
      </section>
      <section anchor="verification-result-fields">
        <name>Verification Result Fields</name>
        <t>A verifier implementing this profile SHOULD include, alongside the base
Class 1 result, a structured per-member disclosure result:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Type</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>disclosures_checked</tt></td>
              <td align="left">integer</td>
              <td align="left">Count of <tt>disclosures</tt> members present in the envelope.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>disclosures_matched</tt></td>
              <td align="left">integer</td>
              <td align="left">Count that produced <tt>disclosure_match</tt>.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>disclosure_findings</tt></td>
              <td align="left">array</td>
              <td align="left">One finding per <tt>disclosures</tt> member: <tt>{member, code}</tt> where <tt>code</tt> is one of <tt>disclosure_match</tt>, <tt>disclosure_mismatch</tt>, <tt>disclosure_ineligible_field</tt>, <tt>disclosure_no_committed_digest</tt>.</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <section anchor="the-envelope-is-not-signed">
        <name>The Envelope Is Not Signed</name>
        <t>Only <tt>capsule</tt> was covered by the Capsule's COSE_Sign1 signature and, if
registered, by the Transparency Service's Receipt. <tt>disclosures</tt> is added
after the fact by whichever party constructs the envelope and is not
itself signed. This is why <xref target="de-phase"/> MUST always recompute and compare
rather than trust a disclosed value's mere presence: presence alone proves
nothing, and a party who can modify the envelope in transit or at rest
(for example, anyone re-hosting a URL-fragment-carried envelope) can insert
an arbitrary value for any disclosure member. The digest recompute against
the value already committed inside the signed Capsule is the entire trust
basis; a verifier that renders "REVEALED" without performing DE-3 is
asserting a check it did not perform.</t>
      </section>
      <section anchor="no-confidentiality-beyond-withheld">
        <name>No Confidentiality Beyond WITHHELD</name>
        <t>Once a <tt>disclosures</tt> member is populated, its value is in clear to
anyone who receives the envelope; there is no per-recipient concealment,
salting, or decoy mechanism as in
<xref target="I-D.mih-scitt-agent-action-capsule-selective-disclosure"/>. A producer's
only confidentiality control is which members it chooses to populate for a
given recipient. Producers serving multiple verifiers with different
disclosure needs from the same Capsule construct a distinct envelope per
recipient, omitting members that recipient is not entitled to.</t>
      </section>
      <section anchor="capsuleid-stability">
        <name>capsule_id Stability</name>
        <t>Because <tt>disclosures</tt> is never part of the <tt>capsule_id</tt> computation,
disclosing content to one verifier does not change, invalidate, or require
re-anchoring the Capsule for any other verifier; every envelope built
around the same <tt>capsule</tt> value shares the same <tt>capsule_id</tt>, regardless of
which <tt>disclosures</tt> members each carries. This is the property that makes
disclosure a strictly additive, reversible-per-recipient operation rather
than a mutation of the anchored record.</t>
      </section>
      <section anchor="digest-only-fields-remain-digest-only-under-non-disclosure">
        <name>Digest-Only Fields Remain Digest-Only Under Non-Disclosure</name>
        <t>A Capsule with no accompanying envelope, or an envelope with no
<tt>disclosures</tt> object, reveals nothing about <tt>agent_input_digest</tt> or
<tt>agent_output_digest</tt> beyond the digest itself — a 32-byte commitment does
not leak the committed content. Producers that never intend to disclose
these fields incur no format change and no additional exposure by this
document's existence.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document reserves the wrapper member names <tt>capsule</tt> and
<tt>disclosures</tt> (<xref target="reserved-names"/>) and the disclosure-eligible field table
(<xref target="eligible"/>). Neither is a member of the Agent Action Capsule payload
registries of <xref target="I-D.mih-scitt-agent-action-capsule"/> §12; both are
wrapper-level names that are, by construction, never present in a Capsule
payload. IANA is not requested to create a new registry for these members
at this time. The interim registry of record is the <tt>REGISTRY.md</tt> file of
the source repository of <xref target="I-D.mih-scitt-agent-action-capsule"/>, updated to
list the wrapper member names and the disclosure-eligible field table
defined by this document.</t>
    </section>
    <section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>The following non-normative examples illustrate the mechanism. See the
source repository's <tt>vectors/disclosure-envelope/pos-disclosure-envelope-match/</tt>
and <tt>vectors/disclosure-envelope/neg-disclosure-envelope-mismatch/</tt> for
frozen, machine-checked vectors covering these two cases (kept in a
directory of their own, separate from the base profile's cross-language
<tt>vectors/capsule/</tt> corpus — see that directory's README).</t>
      <section anchor="example-matching-disclosure">
        <name>Example: Matching Disclosure</name>
        <t>Given a Capsule whose <tt>model_attestation.compute_attestation</tt> carries
<tt>"agent_input_digest": "&lt;D&gt;"</tt> where <tt>D = JSON-DIGEST({"amount": "500.00"})</tt>,
the envelope</t>
        <artwork><![CDATA[
{
  "capsule": { ... "agent_input_digest": "<D>" ... },
  "disclosures": { "agent_input": {"amount": "500.00"} }
}
]]></artwork>
        <t>recomputes <tt>JSON-DIGEST({"amount": "500.00"})</tt>, which equals <tt>&lt;D&gt;</tt> — a
verifier reports <tt>disclosure_match</tt> for <tt>agent_input</tt>.</t>
      </section>
      <section anchor="example-mismatching-disclosure">
        <name>Example: Mismatching Disclosure</name>
        <t>Replacing the disclosed value with <tt>{"amount": "999.00"}</tt> while leaving
<tt>capsule</tt> (and therefore <tt>&lt;D&gt;</tt>) unchanged produces a <tt>disclosures.agent_input</tt>
whose recomputed digest differs from <tt>&lt;D&gt;</tt> — a verifier reports
<tt>disclosure_mismatch</tt> for <tt>agent_input</tt>, while <tt>capsule</tt>'s own
<tt>capsule_id</tt> recomputation and Class 1 verification are unaffected and
still pass.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8785">
          <front>
            <title>JSON Canonicalization Scheme (JCS)</title>
            <author fullname="A. Rundgren" initials="A." surname="Rundgren"/>
            <author fullname="B. Jordan" initials="B." surname="Jordan"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>Cryptographic operations like hashing and signing need the data to be expressed in an invariant format so that the operations are reliably repeatable. One way to address this is to create a canonical representation of the data. Canonicalization also permits data to be exchanged in its original form on the "wire" while cryptographic operations performed on the canonicalized counterpart of the data in the producer and consumer endpoints generate consistent results.</t>
              <t>This document describes the JSON Canonicalization Scheme (JCS). This specification defines how to create a canonical representation of JSON data by building on the strict serialization methods for JSON primitives defined by ECMAScript, constraining JSON data to the Internet JSON (I-JSON) subset, and by using deterministic property sorting.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8785"/>
          <seriesInfo name="DOI" value="10.17487/RFC8785"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC6234">
          <front>
            <title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="May" year="2011"/>
            <abstract>
              <t>Federal Information Processing Standard, FIPS</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6234"/>
          <seriesInfo name="DOI" value="10.17487/RFC6234"/>
        </reference>
        <reference anchor="I-D.mih-scitt-agent-action-capsule">
          <front>
            <title>An Agent Action Capsule Profile for SCITT</title>
            <author initials="S." surname="Mih" fullname="Steven Mih">
              <organization>Action State Group, Inc.</organization>
            </author>
            <date>n.d.</date>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-mih-scitt-agent-action-capsule-05"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC9052">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
              <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9052"/>
          <seriesInfo name="DOI" value="10.17487/RFC9052"/>
        </reference>
        <reference anchor="RFC9943">
          <front>
            <title>An Architecture for Trustworthy and Transparent Digital Supply Chains</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="A. Delignat-Lavaud" initials="A." surname="Delignat-Lavaud"/>
            <author fullname="C. Fournet" initials="C." surname="Fournet"/>
            <author fullname="Y. Deshpande" initials="Y." surname="Deshpande"/>
            <author fullname="S. Lasker" initials="S." surname="Lasker"/>
            <date month="June" year="2026"/>
            <abstract>
              <t>Traceability in supply chains is a growing security concern. While Verifiable Data Structures (VDSs) have addressed specific issues, such as equivocation over digital certificates, they lack a universal architecture for all supply chains. This document defines such an architecture for single-issuer signed statement transparency. It ensures extensibility and interoperability between different transparency services as well as compliance with various auditing procedures and regulatory requirements.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9943"/>
          <seriesInfo name="DOI" value="10.17487/RFC9943"/>
        </reference>
        <reference anchor="I-D.mih-scitt-agent-action-capsule-selective-disclosure">
          <front>
            <title>Selective Disclosure Profile for Agent Action Capsules</title>
            <author initials="S." surname="Mih" fullname="Steven Mih">
              <organization>Action State Group, Inc.</organization>
            </author>
            <date>n.d.</date>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-mih-scitt-agent-action-capsule-sel-disc-00"/>
        </reference>
      </references>
    </references>
    <?line 410?>

<section numbered="false" anchor="change-log">
      <name>Change Log</name>
      <t>Since -00 (this document): initial publication.</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The author thanks the SCITT working group for the Signed Statement and
Transparency Service model this document's disclosure boundary is drawn
against.</t>
    </section>
  </back>

</rfc>
