<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-rats-coserv-08" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="CoSERV">Concise Selector for Endorsements and Reference Values</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-rats-coserv-08"/>
    <author initials="P." surname="Howard" fullname="Paul Howard">
      <organization>Arm</organization>
      <address>
        <email>paul.howard@arm.com</email>
      </address>
    </author>
    <author initials="T." surname="Fossati" fullname="Thomas Fossati">
      <organization>Linaro</organization>
      <address>
        <email>Thomas.Fossati@linaro.org</email>
      </address>
    </author>
    <author initials="H." surname="Birkholz" fullname="Henk Birkholz">
      <organization>Fraunhofer SIT</organization>
      <address>
        <email>henk.birkholz@ietf.contact</email>
      </address>
    </author>
    <author initials="S." surname="Kamal" fullname="Shefali Kamal">
      <organization>Fujitsu</organization>
      <address>
        <email>Shefali.Kamal@fujitsu.com</email>
      </address>
    </author>
    <author initials="G." surname="Mandyam" fullname="Giridhar Mandyam">
      <organization>AMD</organization>
      <address>
        <email>gmandyam@amd.com</email>
      </address>
    </author>
    <author initials="D." surname="Ma" fullname="Ding Ma">
      <organization>Alibaba Cloud</organization>
      <address>
        <email>xynnn@linux.alibaba.com</email>
      </address>
    </author>
    <date year="2026" month="October" day="30"/>
    <area>Security</area>
    <workgroup>Remote ATtestation ProcedureS</workgroup>
    <keyword>RATS</keyword>
    <keyword>attestation</keyword>
    <keyword>endorsement</keyword>
    <keyword>reference value</keyword>
    <abstract>
      <?line 110?>

<t>In the Remote Attestation Procedures (RATS) architecture, Verifiers require Endorsements and Reference Values to assess the trustworthiness of Attesters.
This document specifies the Concise Selector for Endorsements and Reference Values (CoSERV), a structured query/result format designed to facilitate the discovery and retrieval of these artifacts from various providers.
CoSERV defines a query language and corresponding result structure using CDDL, which can be serialized in CBOR format, enabling efficient interoperability across diverse systems.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-rats-wg.github.io/draft-ietf-rats-coserv/draft-ietf-rats-coserv.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-rats-coserv/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Remote ATtestation ProcedureS Working Group mailing list (<eref target="mailto:rats@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/rats/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/rats/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-rats-wg/draft-ietf-rats-coserv"/>.</t>
    </note>
  </front>
  <middle>
    <?line 116?>

<section anchor="sec-intro">
      <name>Introduction</name>
      <t>Remote Attestation Procedures (RATS) enable Relying Parties to evaluate the trustworthiness of remote Attesters by appraising Evidence.
This appraisal necessitates access to Endorsements and Reference Values, which are often distributed across multiple providers, including hardware manufacturers, firmware developers, and software vendors.
The lack of standardized methods for querying and retrieving these artifacts poses challenges in achieving seamless interoperability.</t>
      <t>The Concise Selector for Endorsements and Reference Values (CoSERV) addresses this challenge by defining a query language and a corresponding result structure for the transaction of artifacts between a provider and a consumer.
The query language format provides Verifiers with a standard way to specify a set of relevant artifacts, such that they can be obtained from Endorsers and Reference Value Providers.
Queries can be based on characteristics of the Attester's environment.
This includes composite Attesters, where those environments become the basis for obtaining topological information, such as composition or trust dependency details.
Alternatively, queries can be based on the precise identifiers of one or more Reference Integrity Manifest (RIM) documents.
In turn, the result format allows those Endorsers and Reference Value Providers to package the selected artifacts within a standard structure.
This facilitates the efficient discovery and retrieval of relevant Endorsements and Reference Values from providers, maximising the re-use of common software tools and libraries within the transactions.</t>
      <t>The CoSERV query language is intended to form the input data type for tools and services that provide access to Endorsements and Reference Values.
The CoSERV result set is intended to form the corresponding output data type from those tools and services.</t>
      <t>The environment characteristics of Endorsements and Reference Values are derived from the equivalent concepts in CoRIM <xref target="I-D.ietf-rats-corim"/>.
CoSERV therefore borrows heavily from CoRIM, and shares some data types for its fields.
And, like CoRIM, the CoSERV schema is defined using CDDL <xref target="RFC8610"/>.
A CoSERV query can be serialized in CBOR <xref target="STD94"/> format.</t>
      <t>In addition to the CBOR-based data formats for CoSERV queries and responses, this specification also defines API bindings and behaviours for the exchange of CoSERV queries and responses.
This is to facilitate standard interactions between CoSERV producers and consumers.
Standard API endpoints and behaviours will encourage the growth of interoperable software tools and modules, not only for parsing and emitting CoSERV-compliant data, but also for implementing the clients and services that need to exchange such data when acting in the capacity of the relevant RATS roles.
This will be of greater benefit to the software ecosystem than the CoSERV data format alone.
See <xref target="secapibindings"/> for the API binding specifications.</t>
      <section anchor="terminology-and-requirements-language">
        <name>Terminology and Requirements Language</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 terms and concepts defined by the RATS architecture.
For a complete glossary, see <xref section="4" sectionFormat="of" target="RFC9334"/>.</t>
        <t>This document uses terms and concepts defined by the CoRIM specification.
For a complete glossary, see <xref section="1.1.1" sectionFormat="of" target="I-D.ietf-rats-corim"/>.</t>
        <t>This document uses the terms <em>"actual state"</em> and <em>"reference state"</em> as defined in <xref section="2" sectionFormat="of" target="I-D.ietf-rats-endorsements"/>.</t>
        <t>The terminology from CBOR <xref target="STD94"/>, CDDL <xref target="RFC8610"/> and COSE <xref target="STD96"/> applies;
in particular, CBOR diagnostic notation is defined in <xref section="8" sectionFormat="of" target="STD94"/>
and <xref section="G" sectionFormat="of" target="RFC8610"/>. Terms and concepts are always referenced as proper nouns, i.e., with Capital Letters.</t>
      </section>
    </section>
    <section anchor="secaggregation">
      <name>Aggregation and Trust Models</name>
      <t>The roles of Endorser or Reference Value Provider might sometimes be fulfilled by aggregators, which collect from multiple supply chain sources, or even from other aggregators, in order to project a holistic view of the endorsed system.
The notion of such an aggregator is not explicit in the RATS architecture.
In practice, however, supply chains are complex and multi-layered.
Supply chain sources can include silicon manufacturers, device manufacturers, firmware houses, system integrators, service providers and more.
In practical terms, an Attester is likely to be a complex entity, formed of components from across such supply chains.
Evidence would be likewise structured, with contributions from different segments of the Attester's overall anatomy.
A Verifier for such Evidence may find it convenient to contact an aggregator as a single source of truth for Endorsements and Reference Values.
An aggregator would have intelligence about the Attester's complete anatomy and supply chain.
It would have the ability to contact all contributing supply chain actors for their individual Endorsements and Reference Values, before collecting them into a cohesive set, and delivering them to the Verifier as a single, ergonomic package.
The contributing supply chain actors might themselves be CoSERV-enabled, in which case the aggregator would send one or more separate CoSERV queries to those actors as part of the aggregation process.
Alternatively, it might be necessary to use vendor-specific protocols to gather these artifacts and convert them into the aggregated CoSERV response.
The choice between these approaches is deployment-dependent, and is considered to be an implementation detail of the aggregator.
In pure RATS terms, an aggregator is still an Endorser or a Reference Value Provider - or, more likely, both.
It is not a distinct role, and so there is no distinctly-modeled conveyance between an aggregator and a Verifier.
However, when consuming from an aggregator, the Verifier may need visibility of the aggregation process, possibly to the extent of needing to audit the results by inspecting the individual inputs that came from the original supply chain actors.
CoSERV addresses this need, catering equally for both aggregating and non-aggregating supply chain sources.</t>
      <t>To support deployments with aggregators, CoSERV allows for flexible trust models as follows.</t>
      <ul spacing="normal">
        <li>
          <t><strong>Shallow Trust</strong>: in this model, the consumer trusts the aggregator, solely and completely, to provide authentic descriptions of the endorsed system.
The consumer does not need to audit the results of the aggregation process.
The term "shallow" is used here to indicate the number of supply chain links that are traversed by the consumer.
When trust in the aggregator is absolute, only one link needs to be traversed, from the consumer to the aggregator, because the aggregator is the sole authority.</t>
        </li>
        <li>
          <t><strong>Deep Trust</strong>: in this model, the consumer has a trust relationship with the aggregator, but does not deem this to be sufficient.
The consumer can still use the collected results from the aggregation process, where it is convenient to do so, but also needs to audit those results.
The term "deep" is used to indicate that the consumer needs to traverse more supply chain links in order to gain an adequate level of trust, because trust in the aggregator is only partial.
It means that the consumer has to reach more "deeply" into the supply chain sources, compared with the shallow model.</t>
        </li>
      </ul>
      <t>Any given CoSERV transaction can operate according to either model.
The consumer decides which model to use when it forms a query.
The CoSERV result payload can convey both the aggregated result and the audit trail as needed.
The payload size may be smaller when the shallow model is used, but the choice between the two models is a question for implementations and deployments.</t>
      <t>Although CoSERV is designed to support aggregation, it is not a requirement.
When aggregation is not used, CoSERV still fulfills the need for a standard conveyance mechanism between Verifiers and Endorsers or Reference Value Providers.</t>
    </section>
    <section anchor="secinfomodel">
      <name>CoSERV Information Model</name>
      <section anchor="overview">
        <name>Overview</name>
        <t>CoSERV is designed to facilitate query-response transactions between a producer and a consumer.
In the RATS model, the producer is either an Endorser or a Reference Value Provider, and the consumer is a Verifier.
CoSERV defines a single top-level data type that can be used for both queries and result sets.
Queries are authored by the consumer (Verifier), while result sets are authored by the producer (Endorser or Reference Value Provider) in response to the query.
A CoSERV data object always contains a query.
When CoSERV is used to express a result set, the query is retained alongside the result set that was yielded by that query.
This allows consumers to verify a match between the query that was sent to the producer, and the query that was subsequently returned with the result set.
Such verification is useful because it mitigates security threats arising from any untrusted infrastructure or intermediaries that might reside between the producer and the consumer.
An example of this is caching in HTTP <xref target="STD98"/> and CoAP <xref target="RFC7252"/>.
It might be expensive to compute the result set for a query, which would make caching desirable.
However, if caching is managed by an untrusted intermediary, then there is a risk that such an untrusted intermediary might return incorrect results, either accidentally or maliciously.
Pairing the original query with each result set provides an end-to-end contract between the consumer and producer, mitigating such risks.
The transactional pattern between the producer and the consumer would be that the consumer begins the transaction by authoring a query and sending it to the producer as a CoSERV object.
The producer receives the query, computes results, and returns a new CoSERV object formed from the results along with the original query.
Notionally, the producer is "adding" the results to the query before sending it back to the consumer.</t>
      </section>
      <section anchor="secartifacts">
        <name>Artifacts</name>
        <t>Artifacts are what the consumer (Verifier) needs in order to verify and appraise Evidence from the Attester, and therefore they form the bulk of the response payload in a CoSERV transaction.
The common CoSERV query language recognises the following four artifact types:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Trust Anchor</strong>: A trust anchor is as defined in <xref target="RFC6024"/>.
An example of a trust anchor would be the public part of the asymmetric signing key that is used by the Attester to sign Evidence, such that the Verifier can verify the cryptographic signature.
This is just one example.
Other forms of trust anchor are possible.
CoSERV does not place any additional requirements or constraints on the conveyance or use of trust anchors, beyond what is already described in <xref target="RFC9334"/> and <xref target="I-D.ietf-rats-endorsements"/>.
<xref section="4" sectionFormat="of" target="I-D.ietf-rats-endorsements"/> sets out the applicable patterns for the endorsement of verification keys, all of which apply equally here.</t>
          </li>
          <li>
            <t><strong>Endorsed Value</strong>: An endorsed value is as defined in <xref section="1.1.1" sectionFormat="of" target="I-D.ietf-rats-corim"/>.
This represents a characteristic of the Attester that is not directly presented in the Evidence, such as certification data related to a hardware or firmware module.</t>
          </li>
          <li>
            <t><strong>Reference Value</strong>: A reference value is as defined in <xref section="1.1.1" sectionFormat="of" target="I-D.ietf-rats-corim"/>.
A reference value specifies an individual aspect of the Attester's desired state.
Reference values are sometimes informally called "golden values".
An example of a reference value would be the expected hash or checksum of a binary firmware or software image running in the Attester's environment.
Evidence from the Attester would then include claims about the Attester's actual state, which the Verifier can then compare with the reference values at Evidence appraisal time.</t>
          </li>
          <li>
            <t><strong>Domain</strong>: A domain is defined in <xref target="I-D.ietf-rats-corim"/> as a hierarchical description of a Composite Attester in terms of its constituent environments and their compositional relationships.
Domain artifacts in CoSERV are represented by CoMID Domain Membership Triples and Trust Dependency Triples (see <xref section="5.1.11" sectionFormat="of" target="I-D.ietf-rats-corim"/>).
These triples allow a Verifier to obtain authoritative information about the internal arrangement of the composite Attester and the trust dependencies between its constituent domains.</t>
          </li>
        </ul>
        <t>When artifacts are produced by an aggregator (see <xref target="secaggregation"/>), the following additional classifications apply:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Collected Artifacts</strong>: these refer to artifacts that were derived by the aggregator by collecting and presenting data from original supply chain sources, or from other aggregators.
Collected artifacts form a single holistic package, and provide the most ergonomic consumption experience for the Verifier.</t>
          </li>
          <li>
            <t><strong>Source Artifacts</strong>: these refer to artifacts that were obtained directly from the original supply chain sources, and used as inputs into the aggregation process, allowing the aggregator to derive the collected artifacts.</t>
          </li>
        </ul>
        <t>In the shallow trust model of aggregation, only the collected artifacts are used by the consumer.
In the deep trust model, both the collected artifacts and the source artifacts are used.
The source artifacts allow the consumer to audit the collected artifacts and operate the trust-but-verify principle.</t>
      </section>
      <section anchor="secenvironments">
        <name>Environments</name>
        <t>Some CoSERV queries use environments as the basis for artifact selection.
An environment defines the scope (or scopes) in which the endorsement artifacts are applicable.
Given that the consumer of these artifacts is likely to be a Verifier in the RATS model, the typical interpretation of the environment would be that of an Attester that either has produced evidence, or is expected to produce evidence, that the Verifier needs to appraise.
The Verifier consequently needs to query the Endorser or Reference Value Provider for artifacts that are applicable in that environment.
For CoSERV queries that are based on environments, there are three mutually-exclusive methods for defining those environments.
Exactly one of these three methods <bcp14>MUST</bcp14> be used for the query to be valid.
All three methods correspond to environments that are also defined within CoRIM <xref target="I-D.ietf-rats-corim"/>.</t>
        <ul spacing="normal">
          <li>
            <t><strong>Class</strong>: A class is an environment that is expected to be common to a group of similarly-constructed Attesters, who might therefore share the same set of endorsed characteristics.
An example of this might be a fleet of computing devices of the same model and manufacturer.</t>
          </li>
          <li>
            <t><strong>Instance</strong>: An instance is an environment that is unique to an individual and identifiable Attester, such as a single computing device or component.</t>
          </li>
          <li>
            <t><strong>Group</strong>: A group is a collection of common Attester instances that are collected together based on some defined semantics.
For example, Attesters may be put into groups for the purpose of anonymity.</t>
          </li>
        </ul>
        <section anchor="secstateful">
          <name>Stateful Environments</name>
          <t>In addition to specifying the Attester environment by class, instance, or group, it is sometimes necessary to constrain the target environment further by specifying aspects of its state.
This is because the applicability of Endorsements and Reference Values might vary, depending on these stateful properties.
Consider, for example, an Attester instance who signs Evidence using a derived attestation key, where the derivation algorithm is dependent on one or more aspects of the Attester's current state, such as the version number of an upgradable firmware component.
This example Attester would, at different points in its lifecycle, sign Evidence with different attestation keys, since the keys would change upon any firmware update.
To provide the correct public key to use as the trust anchor for verification, the Endorser would need to know the configured state of the Attester at the time the Evidence was produced.
Specifying such an Attester solely by its instance identifier is therefore insufficient for the Endorser to supply the correct artifact.
The environment specification would need to include these critical stateful aspects as well.
In CoRIM <xref target="I-D.ietf-rats-corim"/>, stateful environments are modeled as an environment identifier plus a collection of measurements, and CoSERV takes the same approach.
Therefore, any environment selector in a CoSERV query can optionally be enhanced with a collection of one or more measurements, which specify aspects of the target environment state that might materially impact the selection of artifacts.</t>
        </section>
        <section anchor="environment-uniqueness">
          <name>Environment Uniqueness</name>
          <t>Because CoSERV is a query language, the CoSERV environment structure has been designed such that it is well suited to forming queries.
It has been optimized such that the most common query styles are also the simplest to construct.
For the case of environment-based queries, this design makes it very straightforward to query for artifacts by (multiples of) instance, group or class.
It is not possible to query by combinations of these properties at the same time.
For example, it is not possible to form a query that selects by instance or group, while simultaneously being constrained by the scope of a specific class.
As a more precise example, it would not be possible to form a single query that selects artifacts for instance "0x010203040506", but only for devices of class "ACME SiliconPro 2000".
This is a departure from CoRIM environments, which can optionally be modeled as combinations of instance, group or class.
This design choice is a pragmatic one that is taken by CoSERV, but it does raise some deployment considerations in terms of environment uniqueness.</t>
          <t>In many deployments, it is expected that the identifiers used for instances and groups would be highly entropic and either universally unique, or at least unique within the scope of any given CoSERV provider/consumer pair, such that material ambiguities would not arise.
Identifiers of type <tt>uuid</tt> or <tt>ueid</tt>, for example, are typical.
However, some profiles might define their identifier types such that uniqueness is not guaranteed.
Care is therefore needed when using CoSERV with such profiles.
Where globally unique identifiers are not guaranteed, a CoSERV provider <bcp14>SHOULD</bcp14> be scoped such that any identifier used in a query remains unambiguous within that provider.
For example, a provider might be scoped to a single product family (effectively constraining the class).
This preserves the simplicity of the CoSERV environment model while avoiding ambiguity in practice.</t>
        </section>
        <section anchor="environments-as-domains">
          <name>Environments as Domains</name>
          <t><xref section="5.1.11" sectionFormat="of" target="I-D.ietf-rats-corim"/> defines a domain identifier as being syntactically equivalent to an environment, even though a domain's semantics are richer than that of a simple Attester environment.</t>
          <t>Since the identifiers are syntactically the same, a CoSERV query structure that is based on environments can be used, nearly as-is, to identify a domain: by instance, group, or class of the domain identifier, subject to the same restrictions as any other environment-based query (<xref target="secenvironments"/>).</t>
        </section>
      </section>
      <section anchor="secinfoqueries">
        <name>Queries</name>
        <t>The purpose of a query is to allow the consumer (Verifier) to specify the artifacts that it needs.
CoSERV offers a small but versatile query language.
The following styles of query are available:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Queries by Environment</strong>: This query style is used to select the artifacts that are applicable to the Attester's environment.
For the case of composite Attesters, these artifacts can include domain composition and dependency information.
See <xref target="secenvironments"/>.</t>
          </li>
          <li>
            <t><strong>Queries by RIM Identifier</strong>: This query style is used to select artifacts that are Reference Integrity Manifest (RIM) artifacts, and where the consumer already knows the precise identifiers of the specific RIMs that it needs.</t>
          </li>
        </ul>
        <t>Further details are given in the sections below.</t>
        <section anchor="secinfoqueryenv">
          <name>Queries by Environment</name>
          <t>When a CoSERV query is specified using an environment, the following information is conveyed in the query:</t>
          <ul spacing="normal">
            <li>
              <t>A specification of the required artifact type: Reference Value, Endorsed Value, Trust Anchor or Domain.
See <xref target="secartifacts"/> for definitions of artifact types.
A single CoSERV query can only specify a single artifact type.</t>
            </li>
            <li>
              <t>A specification of the target environment.
For Reference Value, Endorsed Value and Trust Anchor queries, this is the Attester environment.
For Domain queries, this is the domain whose membership and dependency triples are being requested.
Environments can be selected according to Attester instance, group or class.
Additional properties of the environment state can be specified by adding one or more measurements to the selector.
See <xref target="secenvironments"/> for full definitions.
To facilitate efficient transactions, a single query can specify either multiple instances, multiple groups or multiple classes.
However, it is not possible to mix instance-based selectors, group-based selectors and class-based selectors in a single query.</t>
            </li>
            <li>
              <t>A switch to select the desired supply chain depth.
A CoSERV query can request collected artifacts, source artifacts, or both.
This switch is especially relevant when the CoSERV query is fulfilled by an aggregator.
The collected artifacts are intended for convenient consumption (according to the shallow trust model), while the source artifacts are principally useful for auditing (according to the deep trust model).
It is possible for a query to select for source artifacts only, without the collected artifacts.
This might happen when the consumer needs to inspect or audit artifacts from across the deep supply chain, while not requiring the convenience of the aggregated view.
It could also happen when the consumer is acting as an intermediate broker, gathering artifacts for delivery to another aggregator.
See <xref target="secaggregation"/> for details on aggregation, auditing and trust models.</t>
            </li>
          </ul>
        </section>
        <section anchor="secinfoqueryrim">
          <name>Queries by RIM Identifier</name>
          <t>Reference Integrity Manifests (RIMs) are a common type of artifact format for representing Endorsements and Reference Values.
RATS defines the CoRIM format for the encoding of RIMs (see <xref target="I-D.ietf-rats-corim"/>).
CoSERV supports a query style that allows individual RIMs to be obtained based on their identifiers.
This is a more direct style of query, compared with the query by environment.
It is applicable in cases where the consumer is already aware of the precise set of RIMs that it needs.
There is no environment matching performed in this case, nor is there any aggregation.
The shallow and deep trust models are therefore not applicable for this style of query, and there is no distinction between source and collected artifacts.
The producer is expected to do nothing more than look up the identified documents and return them directly in the result set.</t>
          <t>The query contains one or more identifiers for RIM documents, or for tags contained in RIM documents.
RIM identifiers of the following types are permitted:</t>
          <ul spacing="normal">
            <li>
              <t>CoRIM identifiers (<xref section="4.1.1" sectionFormat="of" target="I-D.ietf-rats-corim"/>)</t>
            </li>
            <li>
              <t>CoMID tag identifiers (<xref section="5.1.1.1" sectionFormat="of" target="I-D.ietf-rats-corim"/>)</t>
            </li>
            <li>
              <t>CoSWID tag identifiers (<xref section="2.3" sectionFormat="of" target="RFC9393"/>)</t>
            </li>
          </ul>
          <t>All three of these identifier types are required to be globally unique as per their corresponding specifications.
A single query may contain identifiers of different types.</t>
        </section>
        <section anchor="avoidance-of-volatile-data-in-queries">
          <name>Avoidance of Volatile Data in Queries</name>
          <t>CoSERV queries do not contain timestamps or any similarly volatile or unpredictable fields.
This is to ensure that any set of materially-identical queries will always yield the same encoded sequence of CBOR bytes, regardless of the time when they were issued, or of other volatile factors.
Along with the other encoding rules set out in <xref target="secencoding"/>, it means that a query can be used as a stable and canonical identifier of artifacts.
This property of queries is an important enabler of efficient CoSERV transactions.
See, for example, the HTTP caching design described in <xref target="secrrapicaching"/>.</t>
        </section>
        <section anchor="query-logging">
          <name>Query Logging</name>
          <t>A CoSERV implementation <bcp14>MAY</bcp14> log the time at which a query was received and fulfilled.
This might sometimes be desirable for transparency or audit purposes.
Implementations are free to define their own transparency events, which can then include timestamps or other suitable information.</t>
        </section>
        <section anchor="query-combinations">
          <name>Query Combinations</name>
          <t>It is not always possible for a CoSERV consumer (such as a Verifier) to obtain all required artifacts from a single query.
This is partly due to constraints of the query model itself.
For example, in the case of environment-based queries, it is not possible to combine different artifact types in a single query, making it likely that a sequence of queries would be needed for different artifacts in realistic scenarios.
Another related example is when using environments to query domains for their composition and dependency information.
Domains are hierarchical, making traversal of the hierarchy a prerequisite step, before obtaining appraisal artifacts for their member environments.
The expected interaction pattern is that the consumer would first issue a query for the domain artifacts (memberships and dependencies), and then follow this with one or more queries to obtain appraisal artifacts for specific environments within the domain hierarchy.
For this interaction pattern to be efficient, CoSERV providers <bcp14>MUST</bcp14> return the entire trust dependency and domain membership subtree rooted in the queried environment, rather than just the immediate children, when domain artifacts are requested.
This will reduce the burden on the client to traverse the hierarchy in multiple steps.
Such server-side traversal of the hierarchy is necessarily limited to those compositional relationships of which the server is aware, based on what has been ingested into its available data stores at the time of the query.</t>
        </section>
      </section>
      <section anchor="secinforesults">
        <name>Result Sets</name>
        <t>The result set contains the artifacts that the producer collected in response to the query.
Result sets always include a timestamp indicating the expiry time of the entire result set.
Consumers <bcp14>MUST NOT</bcp14> consider any part of the result set to be valid after this expiry time.</t>
        <t>The remaining information contained in the result set depends on the style of query that was used: either a query by environment, or a query by RIM identifier.</t>
        <section anchor="secinforesultsenv">
          <name>Results for Queries by Environment</name>
          <t>For queries by environment, the top-level structure of the result set contains the following two items in addition to the expiry timestamp:</t>
          <ul spacing="normal">
            <li>
              <t>A collection of one or more result entries.
This will be a collection of either reference values, endorsed values, trust anchors or domain definitions.
See <xref target="secartifacts"/> for definitions of artifact types.
Artifact types are never mixed in any single CoSERV result set.
The artifacts in the result collection therefore <bcp14>MUST</bcp14> match the single artifact type specified in the original CoSERV query.</t>
            </li>
            <li>
              <t>A collection of the original source materials from which the producer derived the correct artifacts to include in the result set.
These source materials are optional, and their intended purpose is auditing.
They are included only when requested by the original CoSERV query.
Source materials would typically be requested in cases where the consumer is not willing to place sole trust in the producer, and therefore needs an audit trail to enable additional verifications.</t>
            </li>
          </ul>
          <t>Each individual result entry combines a CoMID triple with an authority delegation chain.
CoMID triples are exactly as defined in <xref section="5.1.4" sectionFormat="of" target="I-D.ietf-rats-corim"/>.
For Reference Value, Endorsed Value and Trust Anchor results, each CoMID triple demonstrates the association between an environment matching that of the CoSERV query and a single appraisal artifact.
For Domain results, the result entries contain CoMID Domain Membership Triples and Trust Dependency Triples.
The membership triples describe the member domains that compose the queried domain.
The dependency triples describe trust dependencies between domains.
The authority delegation chain is composed of one or more authority delegates.
Each authority delegate is represented by a public key or key identifier, which the consumer can check against its own set of trusted authorities.
The authority delegation chain serves to establish the provenance of the result entry, and enables the Verifier to evaluate the trustworthiness of the associated artifact.
The purpose of the authority delegation chain is to allow CoSERV responses to support decentralized trust models, where Verifiers may apply their own policy to determine which authorities are acceptable for different classes of artifact.</t>
          <t>Because each result entry combines a CoMID triple with an authority delegation chain, the entries are consequently known as quadruples (or "quads" for short).</t>
        </section>
        <section anchor="secinforesultsrim">
          <name>Results for Queries by RIM Identifier</name>
          <t>Queries by RIM identifier are significantly simpler than queries by environment, and the result set structure is likewise simpler.
There are no authority delegation chains or "quads" in the result.
The result does not contain any extracted or aggregated information.
Instead, it is composed of entire RIM documents, obtained and passed through verbatim from their original supply chain sources.</t>
          <t>The result is a flat map structure, keyed by the RIM identifier.
Each key in the map <bcp14>MUST</bcp14> correspond to one of the RIM identifiers in the original query.
Each mapped value is the corresponding RIM data object, contained within a Conceptual Message Wrapper (CMW) as per <xref target="RFC9999"/>.</t>
          <t>The permitted RIM content for each map entry depends upon the type of key used in the query.</t>
          <t>When the key is a CoRIM identifier, the RIM content <bcp14>MUST</bcp14> be the CoRIM data object whose identity matches the key.</t>
          <t>When the key is a CoMID tag identifier, the RIM content <bcp14>MUST</bcp14> be a CoRIM data object, which contains the CoMID tag whose identity matches the key.
The CoRIM data object may also contain other CoMID (or CoSWID) tags with different identifiers, even if those identifiers were not included in the query.</t>
          <t>When the key is a CoSWID tag identifier, the RIM content <bcp14>MUST</bcp14> be one of the following:</t>
          <ul spacing="normal">
            <li>
              <t>The CoSWID data object whose identity matches the key.</t>
            </li>
            <li>
              <t>A CoRIM data object, which contains the CoSWID tag whose identity matches the key.
The CoRIM data object may also contain other CoSWID (or CoMID) tags with different identifiers, even if those identifiers were not included in the query.</t>
            </li>
          </ul>
          <t>The recipient of the query <bcp14>MAY</bcp14> return only a subset of the RIMs that were requested, if it is not able to satisfy the entire query.
An empty set is also a valid result in the worst case.</t>
          <t>For CoMID and CoSWID tag identifiers, the producer may be in possession of multiple revisions of the RIM tag with that identity.
In such cases, the producer <bcp14>MUST</bcp14> populate the result set with the newest available revision only.
The "newest" revision is defined as the one with the highest integer version counter in the relevant tag's identity map.
See <xref section="5.1.1.2" sectionFormat="of" target="I-D.ietf-rats-corim"/> and <xref section="2.3" sectionFormat="of" target="RFC9393"/> for additional details of tag versioning.</t>
          <t>It is possible for multiple keys in the result set to map to the same data object.
For example, if a query selects for two CoMID identifiers, <tt>CoMID-A</tt> and <tt>CoMID-B</tt>, and the producer has a single CoRIM containing both of those CoMID tags, then the producer <bcp14>MAY</bcp14> populate the result set with entries for both <tt>CoMID-A</tt> and <tt>CoMID-B</tt>, where both entries map to identical copies of the single containing CoRIM.</t>
          <t>The producer <bcp14>SHOULD</bcp14> ensure that all RIMs in the result set are signed.
In cases where the producer is returning copies of RIMs from upstream supply chain actors on a pass-through basis, the producer <bcp14>SHOULD</bcp14> preserve the original signatures from those supply chain actors, as opposed to re-constructing and re-signing the RIMs.</t>
        </section>
        <section anchor="rim-validity-and-results-expiry">
          <name>RIM Validity and Results Expiry</name>
          <t>Signed RIMs usually have an explicit validity period.
For example, signed CoRIMs include validity information in the protected header map (see <xref section="4.2.1" sectionFormat="of" target="I-D.ietf-rats-corim"/>).
RIM validity information can take the form of CWT claims (<tt>nbf</tt>, not before time, and <tt>exp</tt>, expiration time) or use the CoRIM validity map.
Whatever method is used to define the validity period:</t>
          <ol spacing="normal" type="1"><li>
              <t>The CoSERV query result <bcp14>MUST NOT</bcp14> expire after the end of the validity period but may expire before the end of the validity period.</t>
            </li>
            <li>
              <t>The RIM <bcp14>MUST NOT</bcp14> be included in the CoSERV result if it is outside of its validity period.</t>
            </li>
          </ol>
        </section>
      </section>
    </section>
    <section anchor="secdatamodel">
      <name>CoSERV Data Model</name>
      <t>This section specifies the CBOR data model for CoSERV queries and result sets.</t>
      <t>CDDL is used to express rules and constraints of the data model for CBOR.
These rules must be strictly followed when creating or validating CoSERV data objects.</t>
      <t>The top-level CoSERV data structure is given by the following CDDL:</t>
      <sourcecode type="cddl"><![CDATA[
;# import comid-autogen

coserv = {
  &(profile: 0) => profile
  &(query: 1) => query
  ? &(results: 2) => results
}

profile = comid.oid-type / ~uri
]]></sourcecode>
      <section anchor="common-data-types">
        <name>Common Data Types</name>
        <t>CoSERV inherits the following types from the CoRIM data model <tt>class-map</tt>, <tt>$class-id-type-choice</tt>, <tt>$instance-id-type-choice</tt> and <tt>$group-id-type-choice</tt>.</t>
        <t>The collated CDDL is in <xref target="collated-cddl-coserv"/>.</t>
      </section>
      <section anchor="profile">
        <name>Profile</name>
        <t>In common with EAT and CoRIM, CoSERV supports the notion of profiles.
As with EAT and CoRIM, profiles are a way to extend or specialize the structure of a generic CoSERV query in order to cater for a specific use case or environment.</t>
        <t>In a CoSERV query, the profile can be identified by either a Uniform Resource Identifier (URI) or an Object Identifier (OID).
This convention is identical to how EAT profiles are identified using the <tt>eat_profile</tt> claim as described in <xref section="4.3.2" sectionFormat="of" target="RFC9711"/>.</t>
      </section>
      <section anchor="query-structure">
        <name>Query Structure</name>
        <t>The CoSERV query language enables Verifiers to specify the desired characteristics of Endorsements and Reference Values based on the environment in which they are applicable.</t>
        <t>The top-level structure of a CoSERV query is given by the following CDDL:</t>
        <sourcecode type="cddl"><![CDATA[
;# import comid-autogen
;# import corim-autogen
;# import rfc9393 as coswid

query = {
 ( environment-query // rim-query )
}

environment-query = (
  &(artifact-type: 0) => artifact-type
  &(environment-selector: 1) => environment-selector-map
  &(result-type: 2) => result-type
)

rim-query = (
  &(rim-selector: 3) => [ + rim-selector-id ]
)

rim-selector-id = [ &(comid: 0), comid.$tag-id-type-choice ]
                  / [ &(coswid: 1), coswid.tag-id ]
                  / [ &(corim: 2), corim.$corim-id-type-choice ]

artifact-type = &(endorsed-values: 0)
                / &(trust-anchors: 1)
                / &(reference-values: 2)
                / &(domains: 3)

result-type = &(collected-artifacts: 0)
              / &(source-artifacts: 1)
              / &(both: 2)
]]></sourcecode>
        <t>At top level, the query is partitioned into mutually-exclusive variants for the different query styles: queries by environment, or queries by RIM identifier.
See <xref target="secinfoqueries"/> for details about the query styles and how they are used.</t>
        <t>The meanings of the query fields are detailed in the following subsections for each supported style.</t>
        <section anchor="queries-by-environment">
          <name>Queries by Environment</name>
          <section anchor="artifact-type">
            <name>Artifact Type</name>
            <t>For queries by environment, the <tt>artifact-type</tt> field is the foremost discriminator of the query.
It is an artifact category selector.
Its four permissible values are <tt>trust-anchors</tt> (codepoint 1), <tt>endorsed-values</tt> (codepoint 0), <tt>reference-values</tt> (codepoint 2), and <tt>domains</tt> (codepoint 3).</t>
            <t>See <xref target="secartifacts"/> for full definitions of artifact types.</t>
            <t>It is expected that implementations might choose to store these different categories of artifacts in different top-level stores or database tables.
Where this is the case, the <tt>artifact-type</tt> field serves to narrow the query down to the correct store or table.
Even where this is not the case, the discriminator is useful as a filter for the consumer, resulting in an efficiency gain by avoiding the transfer of unwanted data items.</t>
          </section>
          <section anchor="environment-selector">
            <name>Environment Selector</name>
            <t>For queries by environment, the environment selector forms the main body of the query, and its CDDL is given below:</t>
            <sourcecode type="cddl"><![CDATA[
;# import comid-autogen

environment-selector-map = { selector }

stateful-class = [
  class: comid.class-map
  ? measurements: [ + comid.measurement-map ]
]

selector //= ( &(class: 0) => [
  + stateful-class
] )

stateful-instance = [
  instance: comid.$instance-id-type-choice
  ? measurements: [ + comid.measurement-map ]
]

selector //= ( &(instance: 1) => [
  + stateful-instance
] )

stateful-group = [
  group: comid.$group-id-type-choice
  ? measurements: [ + comid.measurement-map ]
]

selector //= ( &(group: 2) => [
  + stateful-group
] )
]]></sourcecode>
            <t>Environments can be specified according to instance, group or class. See <xref target="secenvironments"/> for details.</t>
            <t>Although these three environment definitions are mutually-exclusive in a CoSERV query, all three support multiple entries.
This is to gain efficiency by allowing the consumer (Verifier) to query for multiple artifacts in a single transaction.
For example, where artifacts are being indexed by instance, it would be possible to specify an arbitrary number of instances in a single query, and therefore obtain the artifacts for all of them in a single transaction.
Likewise for classes and groups.
However, it would not be possible for a single query to specify more than one kind of environment.
For example, it would not be possible to query for both class-level and instance-level artifacts in a single CoSERV transaction.</t>
            <t>All three environment selector types can optionally be enhanced with one or more <tt>measurement-map</tt> entries, which are used to express aspects of the environment state.
See <xref target="secstateful"/> for a description of stateful environments.</t>
            <section anchor="selector-semantics">
              <name>Selector Semantics</name>
              <t>When multiple environment selectors are present in a single query, such as multiple instances or multiple groups, the recipient of the query <bcp14>MUST</bcp14> consider these to be alternatives, and hence use a logical <tt>OR</tt> operation when applying the query to its internal data stores.</t>
              <t>Below is an illustrative example of how a CoSERV query for endorsed values, selecting for multiple Attester instances, might be transformed into a semantically-equivalent SQL database query:</t>
              <sourcecode type="sql"><![CDATA[
SELECT *
  FROM endorsed_values
 WHERE ( instance-id = "At6tvu/erQ==" ) OR
       ( instance-id = "iZl4ZVY=" )
]]></sourcecode>
              <t>The same applies for class-based selectors; however, since class selectors are themselves composed of multiple inner fields, the recipient of the query <bcp14>MUST</bcp14> use a logical <tt>AND</tt> operation in consideration of the inner fields for each class.</t>
              <t>Also, for class-based selectors, any unset fields in the class are assumed to be wildcard (<tt>*</tt>), and therefore match any value.</t>
              <t>Below is an illustrative example of how a CoSERV query for reference values, selecting for multiple Attester classes, might be transformed into a semantically-equivalent SQL database query:</t>
              <sourcecode type="sql"><![CDATA[
SELECT *
  FROM reference_values
 WHERE ( class-id = "iZl4ZVY=" AND class-vendor = "ACME Inc." ) OR
       ( class-id = "31fb5abf-023e-4992-aa4e-95f9c1503bfa" )
]]></sourcecode>
            </section>
          </section>
          <section anchor="result-type">
            <name>Result Type</name>
            <t>For queries by environment, the <tt>result-type</tt> field selects for the desired type(s) of results: <tt>collected-artifacts</tt> (codepoint 0), <tt>source-artifacts</tt> (codepoint 1) or <tt>both</tt> (codepoint 2).
See <xref target="secaggregation"/> for definitions of source and collected artifacts.</t>
          </section>
        </section>
        <section anchor="queries-by-rim-identifier">
          <name>Queries by RIM Identifier</name>
          <section anchor="rim-selector">
            <name>RIM Selector</name>
            <t>The <tt>rim-selector</tt> (codepoint 3) is the only data field in this style of query.
It contains a set of one or more RIM identifiers.
RIMs can be selected by an arbitrary mixture of CoRIM, CoMID or CoSWID identifiers, as explained in <xref target="secinfoqueryrim"/>.</t>
          </section>
        </section>
      </section>
      <section anchor="result-set-structure">
        <name>Result Set Structure</name>
        <t>The result set structure is given by the following CDDL:</t>
        <sourcecode type="cddl"><![CDATA[
;# import cmw-autogen
;# import comid-autogen

results = {
  ( environment-result // rim-result )
  &(expiry: 10) => tdate ; RFC3339 date
}

environment-result = (
  ; result-type: collected-artifacts
  result-set //

  ; result-type: source-artifacts
  &(source-artifacts: 11) => [ + cmw.cbor-record ] //

  ; result-type: both
  (
    result-set
    &(source-artifacts: 11) => [ + cmw.cbor-record ]
  )
)

rim-result = (
  &(rims: 5) => cmw.cbor-collection
)

result-set //= reference-values
result-set //= endorsed-values
result-set //= trust-anchors
result-set //= domains

refval-quad = {
  &(authorities: 1) => [ + comid.$crypto-key-type-choice ]
  &(rv-triple: 2) => comid.reference-triple-record
}

reference-values = (
  &(rvq: 0) => [ * refval-quad ]
)

endval-quad = {
  &(authorities: 1) => [ + comid.$crypto-key-type-choice ]
  &(ev-triple: 2) => comid.endorsed-triple-record
}

cond-endval-quad = {
  &(authorities: 1) => [ + comid.$crypto-key-type-choice ]
  &(ce-triple: 2) => comid.conditional-endorsement-triple-record
}

endorsed-values = (
  &(evq: 1) => [ * endval-quad ]
  &(ceq: 2) => [ * cond-endval-quad ]
)

ak-quad = {
  &(authorities: 1) => [ + comid.$crypto-key-type-choice ]
  &(ak-triple: 2) => comid.attest-key-triple-record
}

cots-stmt = {
  &(authorities: 1) => [ + comid.$crypto-key-type-choice ]
  &(cots: 2) => cots
}

trust-anchors = (
  &(akq: 3) => [ * ak-quad ]
  &(tas: 4) => [ * cots-stmt ]
)

membership-quad = {
  &(authorities: 1) => [ + comid.$crypto-key-type-choice ]
  &(membership-triple: 2) => comid.domain-membership-triple-record
}

dependency-quad = {
  &(authorities: 1) => [ + comid.$crypto-key-type-choice ]
  &(dependency-triple: 2) => comid.domain-dependency-triple-record
}

domains = (
  &(membership: 5) => [ * membership-quad ]
  &(dependency: 6) => [ * dependency-quad ]
)

;
; import CoTS
;
cots = "TODO COTS"
]]></sourcecode>
        <t>Result sets are described in <xref target="secinforesults"/>.
As with the query data model, the result set is partitioned into mutually-exclusive variants for the different query styles: queries by environment, or queries by RIM identifier.
The <tt>environment-result</tt> and <tt>rim-result</tt> types provide the separate data models for each style respectively.
Only the <tt>expiry</tt> field (codepoint 10) is common to both styles.</t>
      </section>
      <section anchor="secencoding">
        <name>Encoding Requirements</name>
        <t>Implementations may wish to use serialized CoSERV queries as canonical identifiers for artifact collections.
For example, a Reference Value Provider service may wish the cache the results of a CoSERV query to gain efficiency when responding to a future identical query.
For these use cases to be effective, it is essential that any given CoSERV query is always serialized to the same fixed sequence of CBOR bytes.
Therefore, CoSERV queries <bcp14>MUST</bcp14> always use CBOR deterministic encoding as specified in <xref section="4.2" sectionFormat="of" target="STD94"/>.
Further, CoSERV queries <bcp14>MUST</bcp14> use CBOR definite-length encoding.</t>
      </section>
      <section anchor="signed-coserv">
        <name>Cryptographic Binding Between Query and Result Set</name>
        <t>CoSERV is designed to ensure that any result set passed from a producer to a consumer is precisely the result set that corresponds to the consumer's original query.
This is the reason why the original query is always included along with the result set in the data model.
However, this measure is only sufficient in cases where the conveyance protocol guarantees that CoSERV result sets are always transacted over a secure channel without any untrusted intermediaries.
Wherever this is not the case, producers <bcp14>MUST</bcp14> create an additional cryptographic binding between the query and the result.
This is achieved by transacting the result set within a cryptographic envelope, with a signature added by the producer, which is verified by the consumer.
A CoSERV data object can be signed using COSE <xref target="STD96"/>.
A <tt>signed-coserv</tt> is a <tt>COSE_Sign1</tt> with the following layout:</t>
        <sourcecode type="cddl"><![CDATA[
signed-coserv = #6.18([
  protected: bytes .cbor signed-coserv-protected-hdr
  unprotected: signed-coserv-unprotected-hdr
  payload: bytes .cbor coserv
  signature: bytes
])
]]></sourcecode>
        <t>The payload <bcp14>MUST</bcp14> be the CBOR-encoded CoSERV.</t>
        <sourcecode type="cddl"><![CDATA[
]]></sourcecode>
        <t>The protected header <bcp14>MUST</bcp14> include the signature algorithm identifier.
The protected header <bcp14>MUST</bcp14> include either the content type <tt>application/coserv+cbor</tt> or the CoAP Content-Format TBD1.
Other header parameters <bcp14>MAY</bcp14> be added to the header buckets, for example a <tt>kid</tt> that identifies the signing key.</t>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <section anchor="query-data-examples">
        <name>Query Data Examples</name>
        <t>This section provides some illustrative examples of valid CoSERV query objects.</t>
        <t>The following example shows an environment-based query for Reference Values scoped by a single class.
The <tt>artifact-type</tt> is set to 2 (<tt>reference-values</tt>), indicating a query for Reference Values.
The <tt>profile</tt> is given the example value of <tt>tag:example.com,2025:cc-platform#1.0.0</tt>.
Finally, the <tt>environment-selector</tt> uses the key 0 to select for class, and the value contains a single entry with illustrative settings for the identifier, vendor and model.</t>
        <sourcecode type="edn"><![CDATA[
{
  / profile / 0: "tag:example.com,2025:cc-platform#1.0.0",
  / query /   1: {
    / artifact-type /         0: 2, / reference-values /
    / environment-selector /  1: {
      / class / 0: [ [
        {
          / class-id /  0: 560(h'00112233'),  / tagged-bytes /
          / vendor /    1: "Example Vendor",
          / model /     2: "Example Model"
        }
      ] ]
    },
    / result-type / 2: 1 / source-artifacts /
  }
}
]]></sourcecode>
        <t>The next example is similar, but adds a second entry to the set of classes in the <tt>environment-map</tt>, showing how multiple classes can be queried at the same time.</t>
        <sourcecode type="edn"><![CDATA[
{
  / profile / 0: "tag:example.com,2025:cc-platform#1.0.0",
  / query /   1: {
    / artifact-type /         0: 2, / reference-values /
    / environment-selector /  1: {
      / class / 0: [
        [ {
          / class-id /  0: 560(h'8999786556'),  / tagged-bytes /
          / vendor /    1: "Example Vendor",
          / model /     2: "Example Model"
        } ],
        [ {
          / class-id /  0:
            37(h'31FB5ABF023E4992AA4E95F9C1503BFA')  / UUID /
        } ]
      ]
    },
    / result-type / 2: 2 / both collected and source artifacts /
  }
}
]]></sourcecode>
        <t>The following example shows a query for Reference Values scoped by instance.
Again, the <tt>artifact-type</tt> is set to 2, and <tt>profile</tt> is given a demonstration value. The <tt>environment-selector</tt> now uses the key 1 to select for instances, and the value contains two entries with example instance identifiers.</t>
        <sourcecode type="edn"><![CDATA[
{
  / profile / 0: "tag:example.com,2025:cc-platform#1.0.0",
  / query /   1: {
    / artifact-type / 0: 2, / reference-values /
    / environment-selector /  1: {
      / instance / 1: [
        [ 550(h'02DEADBEEFDEAD') ], / UEID /
        [ 560(h'8999786556') ]      / tagged-bytes /
      ]
    },
    / result-type / 2: 0 / collected artifacts /
  }
}
]]></sourcecode>
        <t>The next example shows a query for Domain information, scoped by class.
The <tt>artifact-type</tt> in this case is set to 3, which indicates a query for domain membership and dependency information.
The query structure is otherwise the same as for other environment-based query examples.</t>
        <sourcecode type="edn"><![CDATA[
{
  / profile / 0: "tag:example.com,2025:cc-platform#1.0.0",
  / query / 1: {
    0: 3, / domains /
    1: {
      0: [ [
        { 0: 560(h'00') }
      ] ]
    },
    2: 0
  }
}
]]></sourcecode>
        <t>This next example shows how a query can be based on one or more RIM identifiers, instead of environments.
In this case, the query is requesting three specific CoRIMs.</t>
        <sourcecode type="edn"><![CDATA[
{
  / profile / 0: "tag:example.com,2025:cc-platform#1.0.0",
  / query / 1: {
    3: [
      [ / corim / 2, "corim-acme-gizmo-1.0.0" ],
      [ / corim / 2, "corim-acme-gizmo-1.2.0" ],
      [ / corim / 2, "corim-acme-gizmo-2.0.0" ]
    ]
  }
}
]]></sourcecode>
      </section>
      <section anchor="result-data-examples">
        <name>Result Data Examples</name>
        <t>This section provides some illustrative examples of valid CoSERV queries with their corresponding result sets.</t>
        <t>In this next example, the query is a reference value query based on class.</t>
        <t>The top-level structure is a map with three entries: <tt>profile</tt> (codepoint 0), <tt>query</tt> (codepoint 1) and <tt>results</tt> (codepoint 2).</t>
        <t>The profile and query structures are the same as in the previous examples.
The result structure is a map with two entries: <tt>expiry</tt> (codepoint 10) and <tt>rvq</tt> (codepoint 0).
The <tt>rvq</tt> (reference value quad) entry comprises the asserting authority and the asserted triples.
A single reference-value triple is shown in this example.
Its <tt>environment-map</tt>, as expected, is the same as the <tt>environment-map</tt> that was supplied in the query.
The rest of the structure is the <tt>measurement-map</tt> as defined in CoRIM <xref target="I-D.ietf-rats-corim"/>.</t>
        <sourcecode type="edn"><![CDATA[
{
  / profile / 0: "tag:example.com,2025:cc-platform#1.0.0",
  / query / 1: {
    0: 2,
    1: {
      0: [ [
        {
          0: 560(h'8999786556')
        }
      ] ]
    },
    2: 0
  },
  / results / 2: {
    0: [
      {
        1: [ 560(h'abcdef') ],
        2: [
          {
            0: {
              0: 560(h'8999786556')
            }
          },
          [
            {
              0: 37(h'31FB5ABF023E4992AA4E95F9C1503BFA'),
              1: {
                / version / 0: {
                  0: "1.2.3",
                  1: 16384
                },
                / svn / 1: 553(2)
              }
            }
          ]
        ]
      }
    ],
    10: 0("2030-12-13T18:30:02Z")
  }
}
]]></sourcecode>
        <t>The following example is for a query that requested the results be provided in the "source artifacts" format.
This means one or more original signed manifests containing information that satisfies the query criteria.</t>
        <t>Compared with the previous example, the <tt>rvq</tt> entry is empty, while the <tt>source-artifacts</tt> (codepoint 11) contain two CMW records <xref target="RFC9999"/>, each of which contains a (made up) manifest with the type "application/vnd.example.refvals".</t>
        <sourcecode type="edn"><![CDATA[
{
  / profile / 0: "tag:example.com,2025:cc-platform#1.0.0",
  / query /   1: {
    / artifact-type /         0: 2, / reference-values /
    / environment-selector /  1: {
      / class / 0: [ [
        {
          / class-id /  0: 560(h'00112233'),  / tagged-bytes /
          / vendor /    1: "Example Vendor",
          / model /     2: "Example Model"
        }
      ] ]
    },
    / result-type / 2: 1 / source-artifacts /
  },
  / results / 2: {
    / expiry / 10: 0("2030-12-13T18:30:02Z"),
    / source artifacts / 11: [
      [ "application/vnd.example.refvals", h'afaeadac' ],
      [ "application/vnd.example.refvals", h'adacabaa' ]
    ]
  }
}
]]></sourcecode>
        <t>The following example shows a result set for a Domain query.
The query identifies a domain using an environment selector based on class.
The result contains a membership collection and a dependency collection.
The membership collection contains one Domain Membership Quad, which combines an authority delegation chain with a CoMID Domain Membership Triple.
The dependency collection is present but empty, indicating that no matching Trust Dependency Triples are included in this result set.</t>
        <sourcecode type="edn"><![CDATA[
{
  / profile / 0: "tag:example.com,2025:cc-platform#1.0.0",
  / query / 1: {
    0: 3, / domains /
    1: {
      0: [ [
        { 0: 560(h'00') }
      ] ]
    },
    2: 0
  },
  / results / 2: {
    / membership / 5: [
      {
        1: [ 560(h'abcdef') ],
        2: [
          { 0: { 0: 560(h'00') } },
          [
            { 0: { 0: 560(h'0011') } }
            { 0: { 0: 560(h'0022') } }
          ]
        ]
      }
    ],
    / dependency / 6: [ ],
    10: 0("2030-12-13T18:30:02Z")
  }
}
]]></sourcecode>
        <t>This next example shows how a query can be based on one or more RIM identifiers, instead of environments.
In this case, the query is requesting three specific CoRIMs.
The corresponding result set consequently has three entries.
Each key in the result map corresponds to one of the RIM identifiers that was specified in the query.
For brevity, the actual RIM content is represented here simply as an array of a single byte.
In real-world situations, these arrays would contain complete CMW encodings as described in <xref target="secinforesultsrim"/>.</t>
        <sourcecode type="edn"><![CDATA[
{
  / profile / 0: "tag:example.com,2025:cc-platform#1.0.0",
  / query / 1: {
    3: [
      [ / corim / 2, "corim-acme-gizmo-1.0.0" ],
      [ / corim / 2, "corim-acme-gizmo-1.2.0" ],
      [ / corim / 2, "corim-acme-gizmo-2.0.0" ]
    ]
  },
  / results / 2: {
    5: {
      "corim-acme-gizmo-1.0.0": [
        "application/rim+cose",
        h'aa'
      ],
      "corim-acme-gizmo-1.2.0": [
        "application/rim+cose",
        h'bb'
      ],
      "corim-acme-gizmo-2.0.0": [
        "application/rim+cose",
        h'cc'
      ]
    }
    10: 0("2030-12-13T18:30:02Z")
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="secapibindings">
      <name>API Bindings</name>
      <t>This section sets out the ways in which CoSERV queries and responses can be exchanged between software components and services using APIs.
The CoSERV data format itself is agnostic of any particular API model or transport.
The API bindings provided here are intended to complement the data format.
They will allow implementations to build the complete functionality of a CoSERV producer or consumer, in a way that is well-suited to any transport or interaction model that is needed.</t>
      <t>It is intended that these API definitions carry minimal additional semantics, since these are largely the preserve of the CoSERV query language itself.
The API definitions are merely vehicles for the exchange of CoSERV queries and responses.
Their purpose is to facilitate standard interactions that make the most effective use of available transports and protocols.</t>
      <t>The only API binding that is specified in this document is a request-response protocol that uses HTTP for transport.
This is a simple pattern, and likely to be a commonly occurring one for a variety of use cases.
Future specifications may define other API bindings.
Such future bindings may introduce further HTTP-based protocols.
Alternatively, they may define protocols for use with other transports, such as CoAP <xref target="RFC7252"/>.</t>
      <section anchor="secrrapi">
        <name>Request Response over HTTP</name>
        <t>This section defines and mandates the API endpoint behaviours for CoSERV request-response transactions over HTTP.
Implementations <bcp14>MUST</bcp14> provide all parts of the API as specified in this section.
The API is a simple protocol for the execution of CoSERV queries.
It takes a single CoSERV query as input, and produces a corresponding single CoSERV result set as the output.
It is a RESTful API because the CoSERV query serves as a unique and stable identifier of the target resource, where that resource is the set of artifacts being selected for by the query.
The encoding rules for CoSERV are deterministic as set out in <xref target="secencoding"/>.
This means that any given CoSERV query will always encode to the same sequence of bytes.
The Base64Url encoding (<xref section="2" sectionFormat="of" target="RFC7515"/>) of the byte sequence becomes the rightmost path segment of the URI used to identify the target resource.
The <tt>GET</tt> method is then used with this URI to execute the query.
Further details are provided in the subsections below.</t>
        <t>Authentication is out of scope for this document.
Implementations <bcp14>MAY</bcp14> authenticate clients, for example for authorization or for preventing denial of service attacks.</t>
        <section anchor="secrrapierrors">
          <name>Errors</name>
          <t>When returning error responses (4xx or 5xx status codes), CoSERV origin servers <bcp14>MUST</bcp14> set the <tt>Content-Type</tt> header field to <tt>application/concise-problem-details+cbor</tt>, and the content <bcp14>MUST</bcp14> be a Concise Problem Details object <xref target="RFC9290"/> containing the following:</t>
          <dl newline="true">
            <dt>title:</dt>
            <dd>
              <t>A human-readable string that identifies the error that prevented the CoSERV Service from processing the request.
This string should be short and suitable for inclusion in log messages.</t>
            </dd>
            <dt>detail:</dt>
            <dd>
              <t>A human-readable string that describes the error in more depth.
This should ideally provide sufficient detail to enable the error to be rectified.</t>
            </dd>
          </dl>
          <t>As specified by <xref section="2" sectionFormat="of" target="RFC9290"/>, the <tt>title</tt> and <tt>detail</tt> values use <tt>oltext</tt>, which is either an unadorned CBOR text string (<tt>text</tt>) or a language-tagged text string (<tt>tag38</tt>).
When a language needs to be identified explicitly, <tt>tag38</tt> carries a BCP 47 language tag as described in <xref section="A" sectionFormat="of" target="RFC9290"/>.
If no explicit or implicit language context is available, unadorned text is interpreted with the language tag <tt>en</tt>.</t>
          <t>CoSERV's HTTP binding is not a CoAP API, but Constrained Problem Details objects <xref target="RFC9290"/> provide a useful encoding for problem details and avoid the need to mix CBOR and JSON in resource or client implementations.</t>
          <t>Per the guidance in <xref section="4.6" sectionFormat="of" target="RFC9205"/>, the specific HTTP status codes shown in the examples throughout this document are illustrative.
Status codes can be generated by generic HTTP components (caches, intermediaries, captive portals, gateways, etc.) that are not part of the CoSERV server, and the set of registered HTTP status codes can be extended over time.
Clients <bcp14>MUST</bcp14> therefore be prepared to handle any HTTP status code by falling back to the generic class semantics (1xx, 2xx, 3xx, 4xx, or 5xx) of the response when a more specific code is not recognized, and <bcp14>MUST</bcp14> rely on the Concise Problem Details <xref target="RFC9290"/> object (when present) rather than the status code alone to determine the application-level cause of an error.</t>
          <t>Clients handle 5xx responses as defined in <xref section="15.6" sectionFormat="of" target="STD97"/> and <xref section="9.2.2" sectionFormat="of" target="STD97"/>.</t>
        </section>
        <section anchor="secrrapidisco">
          <name>Discovery</name>
          <t>Clients discover CoSERV HTTP API endpoints by means of a well-known URI that is formed using the <tt>/.well-known/</tt> path prefix as defined in <xref target="RFC8615"/>.
This URI supplies a single discovery document that clients can use to locate the URIs of other API endpoints, in addition to finding out other relevant information about the configuration and capabilities of the service.</t>
          <t>Implementations that provide CoSERV HTTP API endpoints <bcp14>MUST</bcp14> also provide the discovery endpoint at the path <tt>/.well-known/coserv-configuration</tt>.
This endpoint <bcp14>MUST</bcp14> be accessible via GET with no additional query parameters.</t>
          <t>The response content can be formatted using either JSON <xref target="STD90"/> or CBOR, governed by standard HTTP content negotiation (<xref section="12" sectionFormat="of" target="STD97"/>).
The media types defined for this purpose are <tt>application/coserv-discovery+json</tt> (for JSON-formatted documents) or <tt>application/coserv-discovery+cbor</tt> (for CBOR-formatted documents).
If the client presents one of the two valid media types, then the implementation <bcp14>MUST</bcp14> respond with the HTTP 200 (OK) status code, unless it is prevented from doing so by an error condition beyond the scope of this specification.
When the 200 (OK) status code is returned, the response <bcp14>MUST</bcp14> contain exactly one discovery document in the requested format (JSON or CBOR).
Server implementations <bcp14>MUST</bcp14> support both formats.
In deployments where the discovery document might be stored in an HTTP cache, server implementations <bcp14>SHOULD</bcp14> add the <tt>Vary: Accept</tt> header to the HTTP response to ensure that the client does not receive a cached document in the wrong format.
The contents of the discovery document <bcp14>MUST</bcp14> conform to the CDDL data model given below, which is common to both the JSON and CBOR encodings.</t>
          <sourcecode type="cddl"><![CDATA[
;# import rfc9711 as eat
;# import cmw-autogen as cmw
;# import rfc9052 as cose
;# import jwk-autogen as jwk

coserv-well-known-info = {
  version-label => version,
  capabilities-label => [ + capability ],
  api-endpoints-label => { + tstr => tstr },
  ? result-verification-key-label =>
    eat.JC<jwk.JWK_Set, cose.COSE_KeySet>
}

version-label = eat.JC<"version", 1>
capabilities-label = eat.JC<"capabilities", 2>
api-endpoints-label = eat.JC<"api-endpoints", 3>
result-verification-key-label = eat.JC<"result-verification-key", 4>

version = tstr

capability = {
  media-type-label => cmw.media-type,
  artifact-support-label => artifact-support
}

media-type-label = eat.JC<"media-type", 1>
artifact-support-label = eat.JC<"artifact-support", 2>

non-empty-array<M> = (M) .and ([ + any ])
artifact-support = non-empty-array<[
  ? "source",
  ? "collected",
  ? "rims"
]>
]]></sourcecode>
          <section anchor="discovery-document-contents">
            <name>Discovery Document Contents</name>
            <t>This section defines how to populate and interpret the data fields in the discovery document.</t>
            <t>The collated CDDL is in <xref target="collated-cddl-discovery"/>.</t>
            <section anchor="version">
              <name>Version</name>
              <t>The version field is denoted by the label <tt>"version"</tt> in JSON documents and by the codepoint <tt>1</tt> in CBOR documents.
It is a Semantic Versioning (semver) string, which denotes the version and patch level of the service that is providing the API endpoints described by the document.
The semver string <bcp14>MUST</bcp14> conform to the ABNF defined in <xref target="SEMVER"/>.
Version numbers and patch levels are otherwise implementation-defined.</t>
            </section>
            <section anchor="capabilities">
              <name>Capabilities</name>
              <t>The capabilities field is denoted by the label <tt>"capabilities"</tt> in JSON documents and by the codepoint <tt>2</tt> in CBOR documents.
This field allows clients to discover the profiled variants of CoSERV for which the service implementation can satisfy queries and provide artifacts.
This field is structured as an array, which allows for service implementations that support more than one profile.
Each supported profile is indicated according to its parameterized media type, along with the categories of artifact that can be provided for the profile.
The permitted artifact categories are <tt>"source"</tt>, <tt>"collected"</tt> and <tt>"rims"</tt>.</t>
              <t>The two categories <tt>"source"</tt> and <tt>"collected"</tt> refer specifically to the results of queries that are based on environments.
The presence of either or both of these two categories in the array indicates that the service implementation supports environment-based queries, as described in <xref target="secinfoqueryenv"/>.
The difference between source and collected artifacts is explained in <xref target="secartifacts"/>.</t>
              <t>The category <tt>"rims"</tt> refers to the results of queries that are based on RIM identifiers.
The presence of this category indicates that the service implementation supports identifier-based queries, as described in <xref target="secinfoqueryrim"/>.</t>
              <t>Each profile is paired with a non-empty set of artifact categories, allowing the service implementation to indicate the ways in which it can satisfy queries.
This pairing caters for situations where the service implementation might support different combinations of artifact category for different profiles.</t>
              <t>The capability advertisement does not enumerate the individual artifact types that are available in response to environment-based queries.
A service that advertises support for collected or source artifact results for a profile is indicating support for the environment-based query style for that profile.
The availability of particular artifact types, such as Reference Values or Domains, can be determined only by executing a query, or by consulting profile-specific documentation.</t>
            </section>
            <section anchor="api-endpoints">
              <name>API Endpoints</name>
              <t>The API endpoints field is denoted by the label <tt>"api-endpoints"</tt> in JSON documents and by the codepoint <tt>3</tt> in CBOR documents.
This field allows clients to derive the correct URI for making HTTP API calls.
The field is a map whose keys are the symbolic names of the APIs, and whose values are the URI path for the API endpoint.</t>
              <t>The symbolic name <tt>CoSERVRequestResponse</tt> is defined for services that offer the transactional API described in <xref target="secrrapiquery"/>.
Service implementations that offer this API <bcp14>MUST</bcp14> include a key with this name in the endpoints map field, and the corresponding endpoint URI path <bcp14>MUST</bcp14> end with <tt>/{query}</tt>.
This allows the consumer to form a valid CoSERV query URI using variable expansion as per <xref target="RFC6570"/>, replacing the <tt>{query}</tt> variable with the Base64Url-encoded CoSERV query object.
There <bcp14>MUST NOT</bcp14> be any other variables that require substitution.</t>
              <t>The symbolic name <tt>CoSERVRequestResponseQUERY</tt> is defined for services that offer the transactional API using the <tt>QUERY</tt> method, as described in <xref target="secrrapiquerymethod"/>.
The corresponding value is a plain URI path with no URI template: the query is carried in the request content, so there are no variables to substitute.
Services that support the <tt>QUERY</tt> method <bcp14>MUST</bcp14> include a key with this name in the endpoints map field.
Service implementations that include this key <bcp14>SHOULD</bcp14> also include <tt>CoSERVRequestResponse</tt>, since clients cannot always rely on <tt>QUERY</tt> being usable (see <xref target="secopquery"/>).</t>
              <t>Responses from a <tt>CoSERVRequestResponseQUERY</tt> endpoint <bcp14>SHOULD</bcp14> include the <tt>Accept-Query</tt> header field (<xref section="3" sectionFormat="of" target="RFC10008"/>) listing <tt>application/coserv+cbor</tt>.
This allows a client to confirm that the endpoint, as reached through any infrastructure layers, accepts <tt>QUERY</tt> requests with that media type, independently of the discovery document.</t>
            </section>
            <section anchor="result-verification-key">
              <name>Result Verification Key</name>
              <t>The result verification key is denoted by the label <tt>"result-verification-key"</tt> in JSON documents and by the codepoint <tt>4</tt> in CBOR documents.
This field provides one or more public keys that can be used for the cryptographic verification of CoSERV query results that are returned by the service implementation.
In JSON-formatted discovery documents, each key is a JSON Web Key (JWK) as defined in <xref target="RFC7517"/>.
In CBOR-formatted discovery documents, each key is a COSE Key as defined in <xref target="STD96"/>.</t>
              <t>This field is optional.
As described in <xref target="signed-coserv"/>, there are situations where it is permissible for CoSERV result sets to be unsigned, namely when they are transacted over an end-to-end secure channel without any untrusted intermediaries.
CoSERV service implementations <bcp14>MAY</bcp14> publish discovery documents without result-verification keys in cases where they exclusively produce unsigned CoSERV result sets.
Unsigned CoSERV result sets are characterized by use of the <tt>application/coserv+cbor</tt> media type (as opposed to the <tt>application/coserv+cose</tt> media type).
The supported media types, along with their profile parameters, are published in the <tt>capabilities</tt> field of the discovery document.
If all supported media types are variants of <tt>application/coserv+cbor</tt>, indicating unsigned results only, then there is no need for the verification key set to be included in the discovery document.
If one or more of the supported media types are variants of <tt>application/coserv+cose</tt>, indicating signed results, then the verification key set <bcp14>MUST</bcp14> be included.</t>
            </section>
          </section>
          <section anchor="discovery-document-cbor-encoding">
            <name>Discovery Document CBOR Encoding</name>
            <t>When the discovery document is encoded as CBOR, it is exempt from the encoding rules specified in <xref target="secencoding"/>.
These encoding rules are designed to ensure that CoSERV queries can be used as canonical and stable identifiers.
The discovery document is an independent structure, and not part of the CoSERV data model itself.
Therefore, these encoding rules do not apply.</t>
          </section>
          <section anchor="discovery-document-examples">
            <name>Discovery Document Examples</name>
            <t>The contents of the responses in the following examples are for illustrative purposes only.</t>
            <t>Example HTTP request for retrieving the discovery document in JSON format:</t>
            <sourcecode type="http-message"><![CDATA[
GET /.well-known/coserv-configuration HTTP/1.1
Host: endorsements-distributor.example
Accept: application/coserv-discovery+json
]]></sourcecode>
            <t>Corresponding HTTP response:</t>
            <sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/coserv-discovery+json
Vary: Accept

Content (JSON)

=============== NOTE: '\' line wrapping per RFC 8792 ================

{
  "version": "1.2.3-beta",
  "capabilities": [
    {
      "media-type": "application/coserv+cose; profile=\"tag:vendor.\
                                       com,2025:cc_platform#1.0.0\"",
      "artifact-support": [
        "source",
        "collected"
      ]
    }
  ],
  "api-endpoints": {
    "CoSERVRequestResponse": "/endorsement-distribution/v1/coserv/{\
                                                             query}",
    "CoSERVRequestResponseQUERY": "/endorsement-distribution/v1/\
                                                              coserv"
  },
  "result-verification-key": [
    {
      "alg": "ES256",
      "crv": "P-256",
      "kty": "EC",
      "x": "usWxHK2PmfnHKwXPS54m0kTcGJ90UiglWiGahtagnv8",
      "y": "IBOL-C3BttVivg-lSreASjpkttcsz-1rb7btKLv8EX4",
      "kid": "key1"
    }
  ]
}
]]></sourcecode>
            <t>Example HTTP request for retrieving the discovery document in CBOR format:</t>
            <sourcecode type="http-message"><![CDATA[
GET /.well-known/coserv-configuration HTTP/1.1
Host: endorsements-distributor.example
Accept: application/coserv-discovery+cbor
]]></sourcecode>
            <t>Corresponding HTTP response:</t>
            <sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/coserv-discovery+cbor
Vary: Accept

Content (in CBOR Extended Diagnostic Notation (EDN))

=============== NOTE: '\' line wrapping per RFC 8792 ================

{
  / version / 1: "1.2.3-beta",
  / capabilities / 2: [
    {
      / media-type / 1: "application/coserv+cose; profile=\"tag:\
                                vendor.com,2025:cc_platform#1.0.0\"",
      / artifact-support / 2: [
        "source",
        "collected"
      ]
    }
  ],
  / api-endpoints / 3: {
    "CoSERVRequestResponse": "/endorsement-distribution/v1/coserv/{\
                                                             query}",
    "CoSERVRequestResponseQUERY": "/endorsement-distribution/v1/\
                                                              coserv"
  },
  / result-verification-key / 4: [
    {
      / kty / 1: 2,
      / alg / 3: -7,
      / crv / -1: 1,
      / x / -2: h'\
   BAC5B11CAD8F99F9C72B05CF4B9E26D244DC189F745228255A219A86D6A09EFF',
      / y / -3: h'\
   20138BF82DC1B6D562BE0FA54AB7804A3A64B6D72CCFED6B6FB6ED28BBFC117E',
      / kid / 2: h'6B657931'
    }
  ]
}
]]></sourcecode>
          </section>
        </section>
        <section anchor="secrrapiquery">
          <name>Execute Query</name>
          <t>This endpoint executes a single CoSERV query and returns a CoSERV result set.</t>
          <t>The HTTP method is <tt>GET</tt>.</t>
          <t>The URI path is formed of the discovered <tt>coserv</tt> endpoint (as set out in <xref target="secrrapidisco"/>), where the <tt>{query}</tt> template variable is substituted with the CoSERV query to be executed, which is represented as a Base64Url encoding of the query's serialized CBOR byte sequence.</t>
          <t>There are no additional URI query parameters.</t>
          <t>The serialized query is carried in the URI, so its size is bounded by the URI length limits of the HTTP infrastructure in use, which are often not known in advance.
<xref section="4.1" sectionFormat="of" target="STD97"/> recommends that senders and recipients support URIs of at least 8000 octets.
Typical CoSERV queries are small: the serialized examples in this document are in the order of 100 to 200 octets, which Base64Url encoding expands by about one third.
A query that is too large for some component on the path can cause that component to return a 414 (URI Too Long) status code, which clients need to be prepared to handle.</t>
          <t>As an optional alternative to <tt>GET</tt>, an implementation <bcp14>MAY</bcp14> also accept CoSERV queries using the <tt>QUERY</tt> method, as described in <xref target="secrrapiquerymethod"/>.</t>
          <t>Clients <bcp14>MUST</bcp14> set the <tt>Accept</tt> header field to one of the profiled <tt>application/coserv+cose</tt> or <tt>application/coserv+cbor</tt> media types that is supported by the server according to the discovery document (see <xref target="secrrapidisco"/>).</t>
          <t>Endpoint implementations <bcp14>MUST</bcp14> respond with an HTTP status code and content according to one of the subheadings below, except where the response is generated by infrastructure layers other than the origin server.</t>
          <section anchor="responses">
            <name>Responses</name>
            <section anchor="successful-transaction-200">
              <name>Successful Transaction (200)</name>
              <t>This response indicates that the CoSERV query was executed successfully.</t>
              <t>Example HTTP request:</t>
              <sourcecode type="http-message"><![CDATA[
# NOTE: '\' line wrapping per RFC 8792

GET /coserv/ogB4I3R... HTTP/1.1
Host: endorsements-distributor.example
Accept: application/coserv+cose; \
        profile="tag:vendor.com,2025:cc_platform#1.0.0"
]]></sourcecode>
              <t>Example HTTP response:</t>
              <sourcecode type="http-message"><![CDATA[
# NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 200 OK
Content-Type: application/coserv+cose; \
              profile="tag:vendor.com,2025:cc_platform#1.0.0"

Content (in CBOR Extended Diagnostic Notation (EDN))

/ signed-coserv / 18([
  / protected / << {
    / alg / 1: -7 / ECDSA 256 /,
    / cty / 3 : "application/coserv+cbor"
  } >>,
  / unprotected / {},
  / payload / <<
{
  / profile / 0: "tag:example.com,2025:cc-platform#1.0.0",
  / query /   1: {
    / artifact-type /         0: 2, / reference-values /
    / environment-selector /  1: {
      / class / 0: [ [
        {
          / class-id /  0: 560(h'00112233'),  / tagged-bytes /
          / vendor /    1: "Example Vendor",
          / model /     2: "Example Model"
        }
      ] ]
    },
    / result-type / 2: 0 / collected-artifacts /
  },
  / results / 2: {
    / rvq / 0: [
      {
        / authorities / 1: [ 560(h'abcdef') ],
        / reference-triple / 2: [
          / environment-map / {
            / class / 0: {
              / class-id /  0: 560(h'00112233'),
              / vendor /    1: "Example Vendor",
              / model /     2: "Example Model"
            }
          },
          [
            / measurement-map / {
              / mval / 1: {
                / digests / 2: [
                  [ 1, h'aa' ],
                  [ 2, h'bb' ]
                ],
                / name / 11: "Component A"
              }
            },
            / measurement-map / {
              / mval / 1: {
                / digests / 2: [
                  [ 1, h'cc' ],
                  [ 2, h'dd' ]
                ],
                / name / 11: "Component B"
              }
            }
          ]
        ]
      }
    ],
    / expiry / 10: 0("2030-12-13T18:30:02Z")
  }
}
  >>,
  / signature / h'face5190'
])
]]></sourcecode>
            </section>
            <section anchor="invalid-query-400">
              <name>Invalid Query (400)</name>
              <t>This response indicates that the supplied CoSERV query is badly formed, or is otherwise un-processable by the server.</t>
              <t>Conditions resulting in this error include the following:</t>
              <ul spacing="normal">
                <li>
                  <t>The request is badly formed.
This could mean that the query is not valid CBOR, or does not conform to the CoSERV data model specified in <xref target="secdatamodel"/>.</t>
                </li>
                <li>
                  <t>The request is well-formed, but cannot be executed by the server.
This could happen when the query goes beyond the advertised capabilities of the server according to the server's discovery document (see <xref target="secrrapidisco"/>).
An example would be a query that uses the RIM Identifier query style, where the server supports only the Environment query style, or vice versa.</t>
                </li>
              </ul>
              <t>The following example shows a badly-formed request with its response:</t>
              <sourcecode type="http-message"><![CDATA[
# NOTE: '\' line wrapping per RFC 8792

GET /coserv/badquery... HTTP/1.1
Host: endorsements-distributor.example
Accept: application/coserv+cose; \
        profile="tag:vendor.com,2025:cc_platform#1.0.0"
]]></sourcecode>
              <sourcecode type="http-message"><![CDATA[
# NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 400 Bad Request
Content-Type: application/concise-problem-details+cbor

Content (in CBOR Extended Diagnostic Notation (EDN))

{
  / title /  -1: "Query validation failed",
  / detail / -2: "The query payload is not in CBOR format"
}
]]></sourcecode>
              <t>The following example shows a well-formed but un-processable request, with response:</t>
              <sourcecode type="http-message"><![CDATA[
# NOTE: '\' line wrapping per RFC 8792

GET /coserv/ogB4I3R... HTTP/1.1
Host: endorsements-distributor.example
Accept: application/coserv+cose; \
        profile="tag:vendor.com,2025:cc_platform#1.0.0"
]]></sourcecode>
              <sourcecode type="http-message"><![CDATA[
# NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 400 Bad Request
Content-Type: application/concise-problem-details+cbor

Content (in CBOR Extended Diagnostic Notation (EDN))

{
  / title /  -1: "Query cannot be processed",
  / detail / -2: "The query style is not supported"
}
]]></sourcecode>
            </section>
            <section anchor="failure-to-negotiate-profile-406">
              <name>Failure to Negotiate Profile (406)</name>
              <t>This response indicates that the client has specified a CoSERV profile that is not understood or serviceable by the server.
Conformant clients will not encounter this error, since this specification constrains clients to request only those CoSERV profiles that are listed in the discovery document.</t>
              <t>Clients can consult the discovery document (<xref target="secrrapidisco"/>) to determine the supported media types.</t>
              <t>Example HTTP request:</t>
              <sourcecode type="http-message"><![CDATA[
# NOTE: '\' line wrapping per RFC 8792

GET /coserv/ogB4I3R... HTTP/1.1
Host: endorsements-distributor.example
Accept: application/coserv+cose; \
        profile="tag:vendor.com,2025:cc_platform#2.0.0"
]]></sourcecode>
              <t>Example HTTP response:</t>
              <sourcecode type="http-message"><![CDATA[
# NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 406 Not Acceptable
Content-Type: application/concise-problem-details+cbor

Content (in CBOR Extended Diagnostic Notation (EDN))

{
  / title /  -1: "Unsupported profile",
  / detail / -2: "Profile tag:vendor.com,2025:cc_platform#2.0.0 \
                  not supported",
}
]]></sourcecode>
            </section>
            <section anchor="too-many-requests-429">
              <name>Too Many Requests (429)</name>
              <t>A server (or infrastructure layer) could apply rate limiting to requests received from clients.
If a client exceeds its request quota, it might receive a 429 (Too Many Requests) response, which can carry a <tt>Retry-After</tt> header field (<xref section="10.2.3" sectionFormat="of" target="STD97"/>) indicating how long to wait before retrying.
Rate limiting is often implemented in infrastructure layers (such as gateways or load balancers), whose error responses are not governed by this specification.
Example HTTP messages are not shown for this case.</t>
            </section>
          </section>
        </section>
        <section anchor="secrrapiquerymethod">
          <name>Execute Query with the QUERY Method</name>
          <t>The <tt>QUERY</tt> method <xref target="RFC10008"/> is a safe, idempotent method that carries the query in the request content instead of the URI.
This avoids the URI size limits and keeps the query out of URIs, which are more likely to be logged.
Support for this method is optional, and clients <bcp14>MUST NOT</bcp14> assume it is available unless the discovery document advertises it (see <xref target="secrrapidisco"/>).</t>
          <t>The request is sent to the URI path given by the <tt>CoSERVRequestResponseQUERY</tt> key of the discovery document.
The <tt>Content-Type</tt> header field <bcp14>MUST</bcp14> be <tt>application/coserv+cbor</tt>, and the content <bcp14>MUST</bcp14> be a CoSERV object with the <tt>results</tt> field absent, which is the serialized CBOR CoSERV query encoded as per <xref target="secencoding"/>.
The <tt>profile</tt> media type parameter is optional in this context, since the profile is carried in the query itself.
The content is not Base64Url-encoded.
The <tt>Accept</tt> header field is set as for <tt>GET</tt> (<xref target="secrrapiquery"/>).</t>
          <t>Successful and unsuccessful transactions use the same status codes and response contents as for <tt>GET</tt>.
In addition, a server that does not support the media type of the request content responds with 415 (Unsupported Media Type) (<xref section="2.1" sectionFormat="of" target="RFC10008"/>) and <bcp14>SHOULD</bcp14> include the <tt>Accept-Query</tt> header field in that response.</t>
          <t>Example HTTP request:</t>
          <sourcecode type="http-message"><![CDATA[
# NOTE: '\' line wrapping per RFC 8792

QUERY /endorsement-distribution/v1/coserv HTTP/1.1
Host: endorsements-distributor.example
Content-Type: application/coserv+cbor
Accept: application/coserv+cose; \
        profile="tag:vendor.com,2025:cc_platform#1.0.0"

Content (binary CBOR-encoded CoSERV query)
]]></sourcecode>
          <t>The response to a <tt>QUERY</tt> request is cacheable as described in <xref section="2.7" sectionFormat="of" target="RFC10008"/>.
The cache key incorporates the request content, so the considerations in <xref target="secrrapicaching"/> apply equally.</t>
        </section>
        <section anchor="secrrapicaching">
          <name>Caching</name>
          <t>In practical usage, the artifacts transacted via CoSERV queries (such as trust anchors and reference values) may change significantly less often than they are used.
For example, a Verifier needs to use the artifacts whenever it needs to verify or appraise Evidence from an Attester.
This might be a very frequent operation, for which a low latency is desirable.
By contrast, the artifacts themselves would vary only as a consequence of impactful changes to the Attester's desired state or environment.
One example of such an impactful change might be the roll-out of a firmware update, which would result in a new reference value for the impacted firmware component(s).
Such changes would tend to be relatively infrequent.
The caching of CoSERV artifacts is therefore beneficial for overall system performance.</t>
          <t>CoSERV is designed to facilitate both client-side and server-side caching by use of the standard HTTP caching mechanisms specified in <xref target="STD98"/>.
This includes use of the <tt>Cache-Control</tt> header field and its associated directives.
It also includes the use of entity-tags (ETags).
The following features of CoSERV and its HTTP binding are specifically designed to favor caching implementations:</t>
          <ul spacing="normal">
            <li>
              <t>CoSERV queries form stable URI paths.
As specified in <xref target="secencoding"/>, any given CoSERV query will always serialize to the same fixed sequence of bytes.
This allows queries to be used as canonical and stable resource identifiers, which in turn allows them to function effectively as cache keys.
If a service can return more than one representation for the same query URI, depending on the <tt>Accept</tt> header field of the request (see <xref target="secrrapiquery"/>), the origin server <bcp14>MUST</bcp14> include <tt>Vary: Accept</tt> in its responses, so that caches do not serve a representation in a different format or profile from the one the client requested.</t>
            </li>
            <li>
              <t>The result set is cryptographically bound to the query.
As specified in <xref target="signed-coserv"/>, the origin server is required to return a signed response that combines the result set with the client's original query, in any deployment where untrusted intermediaries might exist.
This means that the client can always verify the integrity of the result on an end-to-end basis, even in the presence of caching infrastructure.</t>
            </li>
            <li>
              <t>Only safe HTTP methods are used.
CoSERV queries are executed as read-only operations using HTTP <tt>GET</tt>.
The execution of a query does not modify any state on the server, which creates more opportunities for the re-use of cached results.</t>
            </li>
            <li>
              <t>Discovery documents are cacheable resources.
Discovery documents (as described in <xref target="secrrapidisco"/>) are used by clients to locate suitable API endpoints for transacting CoSERV queries.
These documents, like CoSERV responses themselves, can be cached to avoid round trips to the origin server during this bootstrapping phase.</t>
            </li>
          </ul>
          <t>Although reusing cached responses is generally desirable, clients that need to bypass the caching infrastructure can do so by specifying <tt>Cache-Control: no-cache</tt> in their requests.
Note that this only prevents a stored response from being used to satisfy the request: the response to such a request can still be stored by caches.
Preventing storage is a matter for the origin server's <tt>Cache-Control</tt> response directives, as discussed in <xref target="secprivcaching"/>.</t>
          <t>Implementations should be aware that there are specific privacy considerations related to caching.
These are outlined in <xref target="secprivcaching"/>.</t>
          <section anchor="http-caching-and-result-set-expiry">
            <name>HTTP Caching and Result Set Expiry</name>
            <t>CoSERV's data model includes a mandatory expiration timestamp on every result set.
This is an authoritative marker of the point in time at which the entire result set becomes invalid, and the query must be re-executed to obtain fresh results.
This timestamp is established by the origin server.</t>
            <t>In the presence of HTTP caching infrastructure, the origin server <bcp14>MUST NOT</bcp14> set HTTP cache directives (e.g. <tt>Cache-Control: max-age</tt>, <tt>Expires</tt>) such that the freshness lifetime of the HTTP response exceeds the result set expiry timestamp contained within the CoSERV results.</t>
            <t>To avoid the risk of infrastructure layers providing default cache lifetimes that are unsuitable for the returned content, origin servers <bcp14>SHOULD</bcp14> set <tt>Cache-Control</tt> headers explicitly in all CoSERV responses.</t>
          </section>
          <section anchor="weak-validators-for-signed-responses">
            <name>Weak Validators for Signed Responses</name>
            <t>For CoSERV origin servers that return signed responses (of type <tt>application/coserv+cose</tt>), attention should be paid to the generation of suitable <tt>ETag</tt> headers for cache validation.
Any non-determinism in the signing process could give rise to sets of results that are semantically identical, but not byte-for-byte identical due to differences in the signature.
Populating cache infrastructure with such spuriously-differing results would be undesirable.
This problem can be addressed by the use of a weak validator, which computes the <tt>ETag</tt> in such a way that the signature and the result set expiry timestamp are excluded.
The expiry timestamp changes whenever a result set is recomputed, even if the artifacts it carries are unchanged.
Excluding the signature and the expiry timestamp allows semantically-identical result sets to validate successfully, even when they differ in these respects.
Precise details of <tt>ETag</tt> generation are beyond the scope of this document, but a suitable validator might be one that combines the unsigned payload (minus the expiry timestamp) with the public key (or key identity) as input to a strong hash function.
Such a validator would still behave correctly if the signing key were to be rotated, in which case it would not be appropriate to validate any results that were signed with the previous key.
A 304 (Not Modified) response does not update the stored content, so it does not refresh the expiry timestamp embedded in the result set.
A client whose stored result set has passed its embedded expiry therefore needs a full response, even if the HTTP cache considers the entry fresh or revalidated.
Origin servers using this approach <bcp14>MUST</bcp14> label the <tt>ETag</tt> as weak (<tt>W/</tt> prefix), as in the examples below, and <bcp14>MUST</bcp14> evaluate <tt>If-None-Match</tt> using the weak comparison function (<xref section="8.8.3.2" sectionFormat="of" target="STD97"/>).</t>
            <t>For unsigned responses, strong validators are preferred.</t>
          </section>
          <section anchor="example-http-messages-with-caching">
            <name>Example HTTP Messages with Caching</name>
            <t>This section illustrates a caching scenario.</t>
            <t>In this example, the CoSERV HTTP API server endpoint is hosted by an HTTP origin (coserv.example), while a reverse proxy (cache.example) operates a public cache in front of the origin.</t>
            <t>Client A sends a request using a specific CoSERV query.
As the reverse proxy has a "cache miss" for the resource, it forwards the request to the origin.
The origin then constructs the response and returns it to the proxy.
The response includes cache-control headers that are compatible with the time-to-live associated with the computed result set.
For the purposes of this example, the HTTP response <tt>max-age</tt> has been set to 10 minutes and the <tt>s-maxage</tt> to 1 hour.
This means that the origin allows intermediaries (e.g., its CDN) to cache this resource for longer than the client.
The result is different caching behaviours between clients and intermediaries, which reduces the load on the origin by enabling CDNs to cache content for longer, while ensuring that clients receive fresher content.
Before forwarding it to the client, the proxy stores the response in its cache using the request URI as the cache key alongside the entry's time-to-live value.
The proxy also inserts an <tt>Age</tt> header, with a value of zero, to signal that the response has been freshly computed by the origin server.</t>
            <aside>
              <t>This "differential caching" strategy could be useful if the origin and its CDN have control plane APIs that the origin owner can use to instruct the CDN operator to purge certain cached entries <xref target="RFC8007"/>. For instance, in CoSERV, this feature could be used in case of an unexpected revocation.</t>
            </aside>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="640" width="688" viewBox="0 0 688 640" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 40,64 L 40,624" fill="none" stroke="black"/>
                  <path d="M 200,64 L 200,96" fill="none" stroke="black"/>
                  <path d="M 224,112 L 224,624" fill="none" stroke="black"/>
                  <path d="M 248,64 L 248,96" fill="none" stroke="black"/>
                  <path d="M 408,80 L 408,624" fill="none" stroke="black"/>
                  <path d="M 216,48 L 232,48" fill="none" stroke="black"/>
                  <path d="M 216,80 L 232,80" fill="none" stroke="black"/>
                  <path d="M 216,112 L 232,112" fill="none" stroke="black"/>
                  <path d="M 40,144 L 216,144" fill="none" stroke="black"/>
                  <path d="M 224,160 L 248,160" fill="none" stroke="black"/>
                  <path d="M 232,192 L 248,192" fill="none" stroke="black"/>
                  <path d="M 224,256 L 400,256" fill="none" stroke="black"/>
                  <path d="M 408,272 L 432,272" fill="none" stroke="black"/>
                  <path d="M 416,304 L 432,304" fill="none" stroke="black"/>
                  <path d="M 232,400 L 408,400" fill="none" stroke="black"/>
                  <path d="M 224,464 L 248,464" fill="none" stroke="black"/>
                  <path d="M 232,496 L 248,496" fill="none" stroke="black"/>
                  <path d="M 48,608 L 224,608" fill="none" stroke="black"/>
                  <path d="M 216,48 C 207.16936,48 200,55.16936 200,64" fill="none" stroke="black"/>
                  <path d="M 232,48 C 240.83064,48 248,55.16936 248,64" fill="none" stroke="black"/>
                  <path d="M 408,48 C 399.16936,48 392,55.16936 392,64" fill="none" stroke="black"/>
                  <path d="M 408,48 C 416.83064,48 424,55.16936 424,64" fill="none" stroke="black"/>
                  <path d="M 216,80 C 207.16936,80 200,72.83064 200,64" fill="none" stroke="black"/>
                  <path d="M 232,80 C 240.83064,80 248,72.83064 248,64" fill="none" stroke="black"/>
                  <path d="M 408,80 C 399.16936,80 392,72.83064 392,64" fill="none" stroke="black"/>
                  <path d="M 408,80 C 416.83064,80 424,72.83064 424,64" fill="none" stroke="black"/>
                  <path d="M 216,112 C 207.16936,112 200,104.83064 200,96" fill="none" stroke="black"/>
                  <path d="M 232,112 C 240.83064,112 248,104.83064 248,96" fill="none" stroke="black"/>
                  <path d="M 248,160 C 256.83064,160 264,167.16936 264,176" fill="none" stroke="black"/>
                  <path d="M 248,192 C 256.83064,192 264,184.83064 264,176" fill="none" stroke="black"/>
                  <path d="M 432,272 C 440.83064,272 448,279.16936 448,288" fill="none" stroke="black"/>
                  <path d="M 432,304 C 440.83064,304 448,296.83064 448,288" fill="none" stroke="black"/>
                  <path d="M 248,464 C 256.83064,464 264,471.16936 264,480" fill="none" stroke="black"/>
                  <path d="M 248,496 C 256.83064,496 264,488.83064 264,480" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="424,304 412,298.4 412,309.6" fill="black" transform="rotate(180,416,304)"/>
                  <polygon class="arrowhead" points="408,256 396,250.4 396,261.6" fill="black" transform="rotate(0,400,256)"/>
                  <polygon class="arrowhead" points="240,496 228,490.4 228,501.6" fill="black" transform="rotate(180,232,496)"/>
                  <polygon class="arrowhead" points="240,400 228,394.4 228,405.6" fill="black" transform="rotate(180,232,400)"/>
                  <polygon class="arrowhead" points="240,192 228,186.4 228,197.6" fill="black" transform="rotate(180,232,192)"/>
                  <polygon class="arrowhead" points="224,144 212,138.4 212,149.6" fill="black" transform="rotate(0,216,144)"/>
                  <polygon class="arrowhead" points="56,608 44,602.4 44,613.6" fill="black" transform="rotate(180,48,608)"/>
                  <circle cx="40" cy="64" r="6" class="opendot" fill="white" stroke="black"/>
                  <g class="text">
                    <text x="28" y="36">client</text>
                    <text x="64" y="36">A</text>
                    <text x="224" y="36">cache.example</text>
                    <text x="412" y="36">coserv.example</text>
                    <text x="80" y="132">GET</text>
                    <text x="144" y="132">ogB4I3RhZ..</text>
                    <text x="312" y="148">lookup(ogB4I3RhZ..)</text>
                    <text x="252" y="212">MISS</text>
                    <text x="264" y="244">GET</text>
                    <text x="328" y="244">ogB4I3RhZ..</text>
                    <text x="488" y="276">compute</text>
                    <text x="484" y="292">result</text>
                    <text x="472" y="308">set</text>
                    <text x="256" y="324">200</text>
                    <text x="284" y="324">OK</text>
                    <text x="448" y="324">(expiry</text>
                    <text x="488" y="324">=</text>
                    <text x="512" y="324">now</text>
                    <text x="536" y="324">+</text>
                    <text x="560" y="324">1h,</text>
                    <text x="596" y="324">ETag</text>
                    <text x="624" y="324">=</text>
                    <text x="660" y="324">"xyz")</text>
                    <text x="260" y="340">C-C:</text>
                    <text x="332" y="340">max-age=600,</text>
                    <text x="336" y="356">s-maxage=3600</text>
                    <text x="264" y="372">ETag:</text>
                    <text x="320" y="372">W/"xyz"</text>
                    <text x="292" y="388">#6.18([...])</text>
                    <text x="316" y="436">store(K=ogB4I3RhZ..,</text>
                    <text x="328" y="452">ETag="xyz",</text>
                    <text x="340" y="468">V=#6.18([...],</text>
                    <text x="320" y="484">TTL=3600)</text>
                    <text x="72" y="516">200</text>
                    <text x="100" y="516">OK</text>
                    <text x="76" y="532">C-C:</text>
                    <text x="148" y="532">max-age=600,</text>
                    <text x="152" y="548">s-maxage=3600</text>
                    <text x="80" y="564">ETag:</text>
                    <text x="136" y="564">W/"xyz"</text>
                    <text x="76" y="580">Age:</text>
                    <text x="104" y="580">0</text>
                    <text x="108" y="596">#6.18([...])</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
client A             cache.example          coserv.example
                         .---.                   .-.
    o                   |     |                 |   |
    |                   |'---'|                  '+'
    |                   |     |                   |
    |                    '-+-'                    |
    |   GET ogB4I3RhZ..    |                      |
    +--------------------->| lookup(ogB4I3RhZ..)  |
    |                      +---.                  |
    |                      |    |                 |
    |                      |<--'                  |
    |                      | MISS                 |
    |                      |                      |
    |                      |   GET ogB4I3RhZ..    |
    |                      +--------------------->|
    |                      |                      +---.  compute
    |                      |                      |    | result
    |                      |                      |<--'  set
    |                      |  200 OK              | (expiry = now + 1h, ETag = "xyz")
    |                      |  C-C: max-age=600,   |
    |                      |       s-maxage=3600  |
    |                      |  ETag: W/"xyz"       |
    |                      |  #6.18([...])        |
    |                      |<---------------------+
    |                      |                      |
    |                      | store(K=ogB4I3RhZ.., |
    |                      |       ETag="xyz",    |
    |                      +---.   V=#6.18([...], |
    |                      |    |  TTL=3600)      |
    |                      |<--'                  |
    |  200 OK              |                      |
    |  C-C: max-age=600,   |                      |
    |       s-maxage=3600  |                      |
    |  ETag: W/"xyz"       |                      |
    |  Age: 0              |                      |
    |  #6.18([...])        |                      |
    |<---------------------+                      |
    |                      |                      |
]]></artwork>
            </artset>
            <t>At a later point, after 2 minutes, a different client B makes the same request.
This time, the request generates a "cache hit" event on the proxy.
The response is therefore served from the public cache, bypassing the origin.
This reduces the load on the origin, where computing the result set is generally costly, as well as reducing the overall latency of the transaction.
Once again, the cache inserts an <tt>Age</tt> header into the response, now set to 120 to reflect the two minutes of elapsed time since the response was added to the cache.
Client B additionally operates a local cache, where it stores a copy of the response.
Client B's local cache entry has a time-to-live (TTL) value of 480, which is computed from the <tt>max-age</tt> of the publicly-cached entry (600), minus the value in the <tt>Age</tt> header (120).</t>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="448" width="472" viewBox="0 0 472 448" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 24,80 L 24,96" fill="none" stroke="black"/>
                  <path d="M 40,112 L 40,432" fill="none" stroke="black"/>
                  <path d="M 56,80 L 56,96" fill="none" stroke="black"/>
                  <path d="M 200,64 L 200,96" fill="none" stroke="black"/>
                  <path d="M 224,112 L 224,432" fill="none" stroke="black"/>
                  <path d="M 248,64 L 248,96" fill="none" stroke="black"/>
                  <path d="M 408,80 L 408,432" fill="none" stroke="black"/>
                  <path d="M 216,48 L 232,48" fill="none" stroke="black"/>
                  <path d="M 216,80 L 232,80" fill="none" stroke="black"/>
                  <path d="M 216,112 L 232,112" fill="none" stroke="black"/>
                  <path d="M 40,144 L 216,144" fill="none" stroke="black"/>
                  <path d="M 224,160 L 248,160" fill="none" stroke="black"/>
                  <path d="M 232,192 L 248,192" fill="none" stroke="black"/>
                  <path d="M 48,320 L 224,320" fill="none" stroke="black"/>
                  <path d="M 40,384 L 64,384" fill="none" stroke="black"/>
                  <path d="M 48,416 L 64,416" fill="none" stroke="black"/>
                  <path d="M 216,48 C 207.16936,48 200,55.16936 200,64" fill="none" stroke="black"/>
                  <path d="M 232,48 C 240.83064,48 248,55.16936 248,64" fill="none" stroke="black"/>
                  <path d="M 408,48 C 399.16936,48 392,55.16936 392,64" fill="none" stroke="black"/>
                  <path d="M 408,48 C 416.83064,48 424,55.16936 424,64" fill="none" stroke="black"/>
                  <path d="M 40,64 C 31.16936,64 24,71.16936 24,80" fill="none" stroke="black"/>
                  <path d="M 40,64 C 48.83064,64 56,71.16936 56,80" fill="none" stroke="black"/>
                  <path d="M 216,80 C 207.16936,80 200,72.83064 200,64" fill="none" stroke="black"/>
                  <path d="M 232,80 C 240.83064,80 248,72.83064 248,64" fill="none" stroke="black"/>
                  <path d="M 408,80 C 399.16936,80 392,72.83064 392,64" fill="none" stroke="black"/>
                  <path d="M 408,80 C 416.83064,80 424,72.83064 424,64" fill="none" stroke="black"/>
                  <path d="M 40,96 C 31.16936,96 24,88.83064 24,80" fill="none" stroke="black"/>
                  <path d="M 40,96 C 48.83064,96 56,88.83064 56,80" fill="none" stroke="black"/>
                  <path d="M 40,112 C 31.16936,112 24,104.83064 24,96" fill="none" stroke="black"/>
                  <path d="M 40,112 C 48.83064,112 56,104.83064 56,96" fill="none" stroke="black"/>
                  <path d="M 216,112 C 207.16936,112 200,104.83064 200,96" fill="none" stroke="black"/>
                  <path d="M 232,112 C 240.83064,112 248,104.83064 248,96" fill="none" stroke="black"/>
                  <path d="M 248,160 C 256.83064,160 264,167.16936 264,176" fill="none" stroke="black"/>
                  <path d="M 248,192 C 256.83064,192 264,184.83064 264,176" fill="none" stroke="black"/>
                  <path d="M 64,384 C 72.83064,384 80,391.16936 80,400" fill="none" stroke="black"/>
                  <path d="M 64,416 C 72.83064,416 80,408.83064 80,400" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="240,192 228,186.4 228,197.6" fill="black" transform="rotate(180,232,192)"/>
                  <polygon class="arrowhead" points="224,144 212,138.4 212,149.6" fill="black" transform="rotate(0,216,144)"/>
                  <polygon class="arrowhead" points="56,416 44,410.4 44,421.6" fill="black" transform="rotate(180,48,416)"/>
                  <polygon class="arrowhead" points="56,320 44,314.4 44,325.6" fill="black" transform="rotate(180,48,320)"/>
                  <g class="text">
                    <text x="28" y="36">client</text>
                    <text x="64" y="36">B</text>
                    <text x="224" y="36">cache.example</text>
                    <text x="412" y="36">coserv.example</text>
                    <text x="80" y="132">GET</text>
                    <text x="144" y="132">ogB4I3RhZ..</text>
                    <text x="312" y="148">lookup(ogB4I3RhZ..)</text>
                    <text x="248" y="212">HIT</text>
                    <text x="72" y="228">200</text>
                    <text x="100" y="228">OK</text>
                    <text x="76" y="244">C-C:</text>
                    <text x="148" y="244">max-age=600,</text>
                    <text x="152" y="260">s-maxage=3600</text>
                    <text x="80" y="276">ETag:</text>
                    <text x="136" y="276">W/"xyz"</text>
                    <text x="76" y="292">Age:</text>
                    <text x="112" y="292">120</text>
                    <text x="108" y="308">#6.18([...])</text>
                    <text x="132" y="356">store(K=ogB4I3RhZ..,</text>
                    <text x="144" y="372">ETag="xyz",</text>
                    <text x="156" y="388">V=#6.18([...],</text>
                    <text x="132" y="404">TTL=480)</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
client B             cache.example          coserv.example
                         .---.                   .-.
   .-.                  |     |                 |   |
  |   |                 |'---'|                  '+'
  |'-'|                 |     |                   |
   '+'                   '-+-'                    |
    |   GET ogB4I3RhZ..    |                      |
    +--------------------->| lookup(ogB4I3RhZ..)  |
    |                      +---.                  |
    |                      |    |                 |
    |                      |<--'                  |
    |                      | HIT                  |
    |  200 OK              |                      |
    |  C-C: max-age=600,   |                      |
    |       s-maxage=3600  |                      |
    |  ETag: W/"xyz"       |                      |
    |  Age: 120            |                      |
    |  #6.18([...])        |                      |
    |<---------------------+                      |
    |                      |                      |
    | store(K=ogB4I3RhZ.., |                      |
    |       ETag="xyz",    |                      |
    +---.   V=#6.18([...], |                      |
    |    |  TTL=480)       |                      |
    |<--'                  |                      |
    |                      |                      |
]]></artwork>
            </artset>
            <t>After 9 more minutes, B is instructed to make the same request again.
The request generates a "cache hit" event on the local cache.
However, the cached resource has become stale and needs to be revalidated.
Therefore, B sends a conditional request to the proxy.
The request generates a "cache hit" event on the proxy where the resource is still fresh due to the differential caching behaviour dictated by the original response from the origin.
The cached response includes an <tt>Age</tt> header set to 660, reflecting the total 11 minutes of elapsed time since the proxy cache was populated.
The proxy returns a 304 (Not modified) status code, which instructs the client to reuse its local copy of the response.</t>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="448" width="480" viewBox="0 0 480 448" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 24,80 L 24,96" fill="none" stroke="black"/>
                  <path d="M 40,112 L 40,432" fill="none" stroke="black"/>
                  <path d="M 56,80 L 56,96" fill="none" stroke="black"/>
                  <path d="M 200,64 L 200,96" fill="none" stroke="black"/>
                  <path d="M 224,112 L 224,432" fill="none" stroke="black"/>
                  <path d="M 248,64 L 248,96" fill="none" stroke="black"/>
                  <path d="M 408,80 L 408,432" fill="none" stroke="black"/>
                  <path d="M 216,48 L 232,48" fill="none" stroke="black"/>
                  <path d="M 216,80 L 232,80" fill="none" stroke="black"/>
                  <path d="M 216,112 L 232,112" fill="none" stroke="black"/>
                  <path d="M 40,144 L 64,144" fill="none" stroke="black"/>
                  <path d="M 48,176 L 64,176" fill="none" stroke="black"/>
                  <path d="M 40,256 L 216,256" fill="none" stroke="black"/>
                  <path d="M 224,272 L 248,272" fill="none" stroke="black"/>
                  <path d="M 232,304 L 248,304" fill="none" stroke="black"/>
                  <path d="M 48,416 L 224,416" fill="none" stroke="black"/>
                  <path d="M 216,48 C 207.16936,48 200,55.16936 200,64" fill="none" stroke="black"/>
                  <path d="M 232,48 C 240.83064,48 248,55.16936 248,64" fill="none" stroke="black"/>
                  <path d="M 408,48 C 399.16936,48 392,55.16936 392,64" fill="none" stroke="black"/>
                  <path d="M 408,48 C 416.83064,48 424,55.16936 424,64" fill="none" stroke="black"/>
                  <path d="M 40,64 C 31.16936,64 24,71.16936 24,80" fill="none" stroke="black"/>
                  <path d="M 40,64 C 48.83064,64 56,71.16936 56,80" fill="none" stroke="black"/>
                  <path d="M 216,80 C 207.16936,80 200,72.83064 200,64" fill="none" stroke="black"/>
                  <path d="M 232,80 C 240.83064,80 248,72.83064 248,64" fill="none" stroke="black"/>
                  <path d="M 408,80 C 399.16936,80 392,72.83064 392,64" fill="none" stroke="black"/>
                  <path d="M 408,80 C 416.83064,80 424,72.83064 424,64" fill="none" stroke="black"/>
                  <path d="M 40,96 C 31.16936,96 24,88.83064 24,80" fill="none" stroke="black"/>
                  <path d="M 40,96 C 48.83064,96 56,88.83064 56,80" fill="none" stroke="black"/>
                  <path d="M 40,112 C 31.16936,112 24,104.83064 24,96" fill="none" stroke="black"/>
                  <path d="M 40,112 C 48.83064,112 56,104.83064 56,96" fill="none" stroke="black"/>
                  <path d="M 216,112 C 207.16936,112 200,104.83064 200,96" fill="none" stroke="black"/>
                  <path d="M 232,112 C 240.83064,112 248,104.83064 248,96" fill="none" stroke="black"/>
                  <path d="M 64,144 C 72.83064,144 80,151.16936 80,160" fill="none" stroke="black"/>
                  <path d="M 64,176 C 72.83064,176 80,168.83064 80,160" fill="none" stroke="black"/>
                  <path d="M 248,272 C 256.83064,272 264,279.16936 264,288" fill="none" stroke="black"/>
                  <path d="M 248,304 C 256.83064,304 264,296.83064 264,288" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="240,304 228,298.4 228,309.6" fill="black" transform="rotate(180,232,304)"/>
                  <polygon class="arrowhead" points="224,256 212,250.4 212,261.6" fill="black" transform="rotate(0,216,256)"/>
                  <polygon class="arrowhead" points="56,416 44,410.4 44,421.6" fill="black" transform="rotate(180,48,416)"/>
                  <polygon class="arrowhead" points="56,176 44,170.4 44,181.6" fill="black" transform="rotate(180,48,176)"/>
                  <g class="text">
                    <text x="28" y="36">client</text>
                    <text x="64" y="36">B</text>
                    <text x="232" y="36">cache.example</text>
                    <text x="420" y="36">coserv.example</text>
                    <text x="128" y="132">lookup(ogB4I3RhZ..)</text>
                    <text x="64" y="196">HIT</text>
                    <text x="112" y="196">(stale)</text>
                    <text x="64" y="228">GET</text>
                    <text x="128" y="228">ogB4I3RhZ..</text>
                    <text x="128" y="244">If-None-Match:"xyz"</text>
                    <text x="248" y="324">HIT</text>
                    <text x="72" y="340">304</text>
                    <text x="104" y="340">Not</text>
                    <text x="156" y="340">modified</text>
                    <text x="76" y="356">C-C:</text>
                    <text x="148" y="356">max-age=600,</text>
                    <text x="152" y="372">s-maxage=3600</text>
                    <text x="80" y="388">ETag:</text>
                    <text x="136" y="388">W/"xyz"</text>
                    <text x="76" y="404">Age:</text>
                    <text x="112" y="404">660</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
client B              cache.example          coserv.example
                         .---.                   .-.
   .-.                  |     |                 |   |
  |   |                 |'---'|                  '+'
  |'-'|                 |     |                   |
   '+'                   '-+-'                    |
    | lookup(ogB4I3RhZ..)  |                      |
    +---.                  |                      |
    |    |                 |                      |
    |<--'                  |                      |
    | HIT (stale)          |                      |
    |                      |                      |
    | GET ogB4I3RhZ..      |                      |
    | If-None-Match:"xyz"  |                      |
    +--------------------->|                      |
    |                      +---.                  |
    |                      |    |                 |
    |                      |<--'                  |
    |                      | HIT                  |
    |  304 Not modified    |                      |
    |  C-C: max-age=600,   |                      |
    |       s-maxage=3600  |                      |
    |  ETag: W/"xyz"       |                      |
    |  Age: 660            |                      |
    |<---------------------+                      |
    |                      |                      |
]]></artwork>
            </artset>
          </section>
        </section>
      </section>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>[^rfced] please remove this section prior to publication.</t>
      <t>This section records the status of known implementations of the protocol defined by this specification at the time of posting of this Internet-Draft, and is based on a proposal described in <xref target="RFC7942"/>.
The description of implementations in this section is intended to assist the IETF in its decision processes in progressing drafts to RFCs.
Please note that the listing of any individual implementation here does not imply endorsement by the IETF.
Furthermore, no effort has been spent to verify the information presented here that was supplied by IETF contributors.
This is not intended as, and must not be construed to be, a catalog of available implementations or their features.
Readers are advised to note that other implementations may exist.</t>
      <t>According to <xref target="RFC7942"/>, "this will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.
It is up to the individual working groups to use this information as they see fit".</t>
      <section anchor="veraison">
        <name>Veraison</name>
        <t>Responsible Organisation: Veraison (open source project within the Confidential Computing Consortium).</t>
        <t>Location: https://github.com/veraison</t>
        <t>Description: Veraison provides components that can be used to build a Verifier, and also exemplifies adjacent RATS roles such as the Relying Party.
There is an active effort to extend Veraison so that it can act in the capacity of an Endorser or Reference Value Provider, showing how CoSERV can be used as a query language for such services.
This includes library code to assist with the creation, parsing and manipulation of CoSERV queries.</t>
        <t>Level of Maturity: This is a proof-of-concept prototype implementation.</t>
        <t>License: Apache-2.0.</t>
        <t>Coverage: This implementation covers all aspects of the CoSERV query language.</t>
        <t>Contact: Thomas Fossati, Thomas.Fossati@linaro.org</t>
      </section>
    </section>
    <section anchor="secopcons">
      <name>Operational Considerations</name>
      <section anchor="secredirects">
        <name>Redirects</name>
        <t>Redirects are handled as for any other HTTP resource (<xref section="15.4" sectionFormat="of" target="STD97"/>).
A redirect can change other parts of the URI, such as the authority or the path prefix of the endpoint, but is not expected to alter the final path segment, which carries the query.
Since the result set is bound to the query it answers (<xref target="signed-coserv"/>), consumers can detect a response that does not correspond to their query.
No CoSERV-specific handling of redirects is needed beyond this.</t>
      </section>
      <section anchor="secopquery">
        <name>Deployment of the QUERY Method</name>
        <t>The <tt>QUERY</tt> method <xref target="RFC10008"/> is new, and support for it is still being rolled out.
Servers, proxies, gateways, CDNs, and client libraries that predate it, or that have not enabled it, can reject <tt>QUERY</tt> requests (for example with 405 (Method Not Allowed), 501 (Not Implemented) or 400 (Bad Request)), drop them, or fail to cache the responses.
A CoSERV origin server that supports <tt>QUERY</tt> is therefore not sufficient: every infrastructure layer between client and origin has to support it too.</t>
        <t>Clients thus need to establish that <tt>QUERY</tt> works on the path to the service before relying on it.
Advertisement by the <tt>CoSERVRequestResponseQUERY</tt> entry of the discovery document (<xref target="secrrapidisco"/>) only reflects the origin server's capabilities.
A client can additionally look for the <tt>Accept-Query</tt> header field in responses from the endpoint, and can fall back to <tt>GET</tt> (<xref target="secrrapiquery"/>) if the <tt>QUERY</tt> request fails in a way that indicates lack of support.
A fallback to <tt>GET</tt> is not possible for a query that exceeds URI length limits, so services that expect large queries need to ensure that their infrastructure supports <tt>QUERY</tt>.</t>
        <t>Services that offer <tt>QUERY</tt> <bcp14>SHOULD</bcp14> continue to offer <tt>GET</tt>, so that clients unable to use <tt>QUERY</tt> can still interoperate.</t>
      </section>
    </section>
    <section anchor="seccons">
      <name>Security Considerations</name>
      <t>CoSERV implements a conveyance protocol for specific categories of Conceptual Message in <xref target="RFC9334"/>, namely Endorsements and Reference Values.
Consequently, it is used only between the Endorser and Verifier roles, or between the Reference Value Provider and Verifier roles of the RATS architecture.
The relevant security considerations are therefore the ones associated with those roles and their interactions.</t>
      <t>Certain security characteristics are desirable for interactions between the Verifier and the Endorser or Reference Value Provider.
However, these characteristics would be the province of the specific implementations of these roles, and of the transport protocols in between them.
They would not be the province of the CoSERV data object itself.
Examples of such desirable characteristics might be:</t>
      <ul spacing="normal">
        <li>
          <t>The Endorser or Reference Value Provider is available to the Verifier when needed.</t>
        </li>
        <li>
          <t>The Verifier is authorised to query data from the Endorser or Reference Value Provider.</t>
        </li>
        <li>
          <t>Queries cannot be intercepted or undetectably modified by an entity that is interposed between the Verifier and the Endorser or Reference Value Provider.</t>
        </li>
      </ul>
      <section anchor="in-relation-to-corim">
        <name>In Relation to CoRIM</name>
        <t>CoSERV's data model inherits heavily from that of <xref target="I-D.ietf-rats-corim"/>.
CoSERV responses can contain one or more complete CoRIM artifacts.
They can also contain aggregated views that are composed of multiple CoRIM fragments.
The security and privacy considerations set out in <xref section="11" sectionFormat="of" target="I-D.ietf-rats-corim"/> therefore apply equally to CoSERV.</t>
      </section>
      <section anchor="forming-native-database-queries-from-coserv">
        <name>Forming Native Database Queries from CoSERV</name>
        <t>Implementations should take care when transforming CoSERV queries into native query types that are compatible with their underlying storage technology (such as SQL queries).
There is a risk of injection attacks arising from poorly-formed or maliciously-formed CoSERV queries.
Implementations must ensure that suitable sanitization procedures are in place when performing such translations.</t>
      </section>
      <section anchor="aggregators">
        <name>Aggregators</name>
        <t>Aggregation (see <xref target="secaggregation"/>) is the process of combining artifacts from multiple Endorser or Reference Value Provider sources, which is a necessary step in some supply chains.
CoSERV supports aggregation explicitly at the protocol level, but is agnostic with regards to how (or whether) such support is used.
However, there are specific security considerations for deployments that make use of aggregators.</t>
        <t>When used, aggregators feed Endorsements and Reference Values to the Verifier (possibly via further aggregators).
This means that they act in the Endorser and/or Reference Value Provider roles of RATS, both of which are trusted roles.
Aggregators are therefore trusted components.
Further, since the purpose of an aggregator is to provide a consolidated point of consumption for the Verifier, there is a risk of its becoming a single point of failure or vulnerability.
An aggregator that is unavailable, malfunctioning, or malicious, has the potential to impact the security of the overall deployment.
For example, a malicious aggregator might attempt to impersonate or otherwise subvert the authority of other actors in the supply chain, such as hardware or firmware vendors.</t>
        <t>The intent of CoSERV is for aggregators to provide an optional convenience layer for the Verifier, rather than to be a subversive authority.
The design features of CoSERV can be used alongside judicious deployment practices to mitigate the risks.
An informative and non-exhaustive list of mitigations follows:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Use independent chains of trust.</strong>
It is established above that aggregators are trusted components.
This does not mean that they necessarily become a sole or replacement trust authority.
CoSERV's aggregation model allows for deference to other authorities that exist in the supply chain.
This is true even when an aggregator is acting in the Endorser role.
A hardware Endorsement, for example, might be delivered to the Verifier via an aggregator (along with multiple other artifacts, such as Reference Values).
But the authority of that Endorsement can still be chained back to the hardware provider, and this authority can be checked by the Verifier using a trust anchor associated with that hardware provider.</t>
          </li>
          <li>
            <t><strong>Inspect the authority delegation chains.</strong>
The "quads" feature of the CoSERV data model provides explicit tracking of supply chain sources.
Each inner CoMID triple of an aggregated CoSERV response is annotated with an authority delegation chain.
This is a sequence of delegated trust authorities, each of which might be either a further upstream aggregator or a primary supply chain actor.
This information allows the consumer (Verifier) to inspect the provenance of each aggregated result, which can be checked against its own independent record of trustworthy sources.</t>
          </li>
          <li>
            <t><strong>Use source artifacts.</strong>
CoSERV's aggregation model supports the pass-through of artifacts from upstream supply-chain actors, known as "source artifacts" in the data model.
Source artifacts are passed verbatim in CoSERV, meaning that they retain any original signatures.
This provides another means of checking the provenance and integrity of such artifacts, independently of any signature that is applied to the CoSERV result by the aggregator (see <xref target="signed-coserv"/>).</t>
          </li>
          <li>
            <t><strong>Mutual trust between aggregators and primary supply chain actors.</strong>
The default assumption of CoSERV is that trust flows in one direction only: CoSERV consumers trust CoSERV producers, but not the reverse.
When a Verifier sends a CoSERV query to an aggregator, the Verifier is trusting that aggregator, but not the reverse.
Likewise, when an aggregator calls a primary supply chain source (whether using CoSERV or some proprietary mechanism), then the aggregator is trusting that primary supply chain source, but not the reverse.
Indeed, a primary supply chain source might not even be aware of the existence of any aggregator that is consuming artifacts from it, let alone place any trust in such an aggregator.
However, it is perfectly valid for a deployment to deviate from this baseline, provided that the suitable technical and contractual enablers are put in place.
There could exist an aggregator that is trusted - and vouched for - by the primary supply chain actor(s) from which it consumes.
Supply chain actors might even actively provision their artifacts into the aggregator for onward distribution.
The clients of such an aggregator might then be able to make more use of the "shallow trust" model described in <xref target="secaggregation"/>, with a greater reliance on collected artifacts rather than source artifacts.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>A CoSERV query can potentially contain privacy-sensitive information.
Specifically, the <tt>environment-selector</tt> field of the query may reference identifiable Attester instances in some cases.
This concern naturally also extends to the data objects that might be returned to the consumer in response to the query, although the specifications of such data objects are beyond the scope of this document.
Implementations should ensure that appropriate attention is paid to this.
Suitable mitigations include the following:</t>
      <ul spacing="normal">
        <li>
          <t>The use of authenticated secure channels between the producers and the consumers of CoSERV queries and returned artifacts.</t>
        </li>
        <li>
          <t>Collating Attester instances into anonymity groups, and referencing the groups rather than the individual instances.</t>
        </li>
      </ul>
      <section anchor="aggregators-1">
        <name>Aggregators</name>
        <t>Aggregators (as described in <xref target="secaggregation"/>) can pose a specific privacy risk.
This is because they necessarily correlate inputs from multiple supply-chain actors, and can observe repeated CoSERV queries over time.
In doing so, an aggregator might be able to infer details about the composition of an Attester's hardware, firmware or software components.
Such details would not be accessible to individual supply-chain actors implementing the Endorser or Reference Value Provider roles.
There is consequently a risk that such inferred details could be misused to create a covert channel.</t>
      </section>
      <section anchor="domains">
        <name>Domains</name>
        <t>Domain queries and domain result sets can reveal the topology of a Composite Attester, including the relationship between parent and child environments and the trust dependencies between domains.
This information can be sensitive even when the environment identifiers themselves are not individually identifying.
Implementations should apply the same access-control, confidentiality, and minimization considerations to Domain artifacts as to other privacy-sensitive CoSERV query and result data.</t>
      </section>
      <section anchor="query-uris">
        <name>Query URIs</name>
        <t>In the HTTP binding, the serialized query is carried in the request URI.
URIs are more likely than request content to be logged by clients, servers and intermediaries.
Where a query identifies individual Attester instances or other small anonymity groups, such logging can disclose them.
Deployments should treat logs containing CoSERV query URIs as sensitive, and can use the <tt>QUERY</tt> method (<xref target="secrrapiquerymethod"/>) where it is available.</t>
      </section>
      <section anchor="secprivcaching">
        <name>Caching</name>
        <t>Caching is an important characteristic of CoSERV in general, and of the CoSERV HTTP bindings in particular.
CoSERV transactions are expected to benefit from the use of HTTP caching infrastructure as explained in <xref target="secrrapicaching"/>.
CoSERV's deterministic encoding rules allow for encoded queries to be used as cache keys.
Where queries contain privacy-sensitive information, such as references to individual Attester instances or other small anonymity groups, there is a risk of HTTP caches themselves becoming an oracle.
For instance, the time taken to generate a response could indicate whether a client has already queried the same information previously.
An attacker could use these timings to gain intelligence about the use of those instances or groups.</t>
        <t>Safe methods can be replayed, including in TLS 0-RTT early data, so the cost of executing queries is a consideration for origin servers independently of caching.</t>
        <t>Implementations should be intentional about their use of caching, and avoid relying on default behaviours that could lead to side channels.
For example, the <tt>Cache-Control: no-store</tt> or <tt>Cache-Control: private</tt> directives can be used selectively in situations where very fine-grained information is being queried, while still allowing broader queries to benefit from caching.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>[^rfced] replace "RFCthis" with the RFC number assigned to this document.</t>
      <section anchor="media-types-registrations">
        <name>Media Types Registrations</name>
        <t>IANA is requested to add the following media types to the "Media Types" registry <xref target="IANA.media-types"/>.</t>
        <table anchor="tab-mc-regs">
          <name>CoSERV Media Types</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Template</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>coserv+cbor</tt></td>
              <td align="left">
                <tt>application/coserv+cbor</tt></td>
              <td align="left">
                <xref target="secdatamodel"/> of RFCthis</td>
            </tr>
            <tr>
              <td align="left">
                <tt>coserv+cose</tt></td>
              <td align="left">
                <tt>application/coserv+cose</tt></td>
              <td align="left">
                <xref target="signed-coserv"/> of RFCthis</td>
            </tr>
            <tr>
              <td align="left">
                <tt>coserv-discovery+cbor</tt></td>
              <td align="left">
                <tt>application/coserv-discovery+cbor</tt></td>
              <td align="left">
                <xref target="secrrapidisco"/> of RFCthis</td>
            </tr>
            <tr>
              <td align="left">
                <tt>coserv-discovery+json</tt></td>
              <td align="left">
                <tt>application/coserv-discovery+json</tt></td>
              <td align="left">
                <xref target="secrrapidisco"/> of RFCthis</td>
            </tr>
          </tbody>
        </table>
        <section anchor="applicationcoservcbor">
          <name><tt>application/coserv+cbor</tt></name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>coserv+cbor</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>"profile" (CoSERV profile in string format.  OIDs must use the dotted-decimal notation.)</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>binary (CBOR)</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t><xref target="seccons"/> of RFCthis</t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>RFCthis</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Verifiers, Endorsers, Reference Value Providers</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>The syntax and semantics of fragment identifiers are as specified for "application/cbor". (No fragment identification syntax is currently defined for "application/cbor".)</t>
            </dd>
            <dt>Person &amp; email address to contact for further information:</dt>
            <dd>
              <t>RATS WG mailing list (rats@ietf.org)</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>none</t>
            </dd>
            <dt>Author/Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
            <dt>Provisional registration:</dt>
            <dd>
              <t>no</t>
            </dd>
          </dl>
        </section>
        <section anchor="applicationcoservcose">
          <name><tt>application/coserv+cose</tt></name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t><tt>application</tt></t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t><tt>coserv+cose</tt></t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>n/a (cose-type is explicitly not supported, as it is understood to be "cose-sign1")</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>"profile" CoSERV profile in string format.
OIDs must use the dotted-decimal notation.
Note that the <tt>cose-type</tt> parameter is explicitly not supported, as it is understood to be <tt>"cose-sign1"</tt>.</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>binary</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t><xref target="seccons"/> of RFCthis</t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>RFCthis</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Verifiers, Endorsers, Reference Value Providers</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Person and email address to contact for further information:</dt>
            <dd>
              <t>RATS WG mailing list (rats@ietf.org)</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>none</t>
            </dd>
            <dt>Author/Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
            <dt>Provisional registration?</dt>
            <dd>
              <t>no</t>
            </dd>
          </dl>
        </section>
        <section anchor="applicationcoserv-discoverycbor">
          <name><tt>application/coserv-discovery+cbor</tt></name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>coserv-discovery+cbor</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>binary (CBOR)</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t><xref target="seccons"/> of RFCthis</t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>RFCthis</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Verifiers, Endorsers, Reference Value Providers</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>The syntax and semantics of fragment identifiers are as specified for "application/cbor". (No fragment identification syntax is currently defined for "application/cbor".)</t>
            </dd>
            <dt>Person &amp; email address to contact for further information:</dt>
            <dd>
              <t>RATS WG mailing list (rats@ietf.org)</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>none</t>
            </dd>
            <dt>Author/Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
            <dt>Provisional registration:</dt>
            <dd>
              <t>no</t>
            </dd>
          </dl>
        </section>
        <section anchor="applicationcoserv-discoveryjson">
          <name><tt>application/coserv-discovery+json</tt></name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>coserv-discovery+json</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>binary (JSON is UTF-8-encoded text)</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t><xref target="seccons"/> of RFCthis</t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>RFCthis</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Verifiers, Endorsers, Reference Value Providers</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>The syntax and semantics of fragment identifiers are as specified for "application/json". (No fragment identification syntax is currently defined for "application/json".)</t>
            </dd>
            <dt>Person &amp; email address to contact for further information:</dt>
            <dd>
              <t>RATS WG mailing list (rats@ietf.org)</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>none</t>
            </dd>
            <dt>Author/Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
            <dt>Provisional registration:</dt>
            <dd>
              <t>no</t>
            </dd>
          </dl>
        </section>
      </section>
      <section anchor="coap-content-formats">
        <name>CoAP Content-Formats</name>
        <t>IANA is requested to register the following Content-Format IDs in the "CoAP Content-Formats" registry, within the "Constrained RESTful Environments (CoRE) Parameters" registry group <xref target="IANA.core-parameters"/>:</t>
        <table align="left">
          <name>New CoAP Content Formats</name>
          <thead>
            <tr>
              <th align="left">Content-Type</th>
              <th align="left">Content Coding</th>
              <th align="left">ID</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">application/coserv+cbor</td>
              <td align="left">-</td>
              <td align="left">TBD1</td>
              <td align="left">
                <xref target="secdatamodel"/> of RFCthis</td>
            </tr>
            <tr>
              <td align="left">application/coserv+cose</td>
              <td align="left">-</td>
              <td align="left">TBD2</td>
              <td align="left">
                <xref target="signed-coserv"/> of RFCthis</td>
            </tr>
          </tbody>
        </table>
        <t>If possible, TBD1 and TBD2 should be assigned in the 256..9999 range.</t>
      </section>
      <section anchor="well-known-uri-for-coserv-configuration">
        <name>Well-Known URI for CoSERV Configuration</name>
        <t>IANA is requested to register the following in the "Well-Known URIs" registry <xref target="IANA.well-known-uris"/>:</t>
        <t>URI suffix: coserv-configuration</t>
        <t>Change controller: IETF</t>
        <t>Specification document: RFCthis</t>
        <t>Related information: N/A</t>
      </section>
    </section>
  </middle>
  <back>
    <displayreference target="STD98" to="HTTP-CACHING"/>
    <displayreference target="STD97" to="HTTP"/>
    <displayreference target="STD96" to="COSE"/>
    <displayreference target="STD94" to="CBOR"/>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC6570">
          <front>
            <title>URI Template</title>
            <author fullname="J. Gregorio" initials="J." surname="Gregorio"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="M. Hadley" initials="M." surname="Hadley"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="D. Orchard" initials="D." surname="Orchard"/>
            <date month="March" year="2012"/>
            <abstract>
              <t>A URI Template is a compact sequence of characters for describing a range of Uniform Resource Identifiers through variable expansion. This specification defines the URI Template syntax and the process for expanding a URI Template into a URI reference, along with guidelines for the use of URI Templates on the Internet. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6570"/>
          <seriesInfo name="DOI" value="10.17487/RFC6570"/>
        </reference>
        <reference anchor="RFC7515">
          <front>
            <title>JSON Web Signature (JWS)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification. Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7515"/>
          <seriesInfo name="DOI" value="10.17487/RFC7515"/>
        </reference>
        <reference anchor="RFC7517">
          <front>
            <title>JSON Web Key (JWK)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. This specification also defines a JWK Set JSON data structure that represents a set of JWKs. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries established by that specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7517"/>
          <seriesInfo name="DOI" value="10.17487/RFC7517"/>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="STD90">
          <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="RFC8615">
          <front>
            <title>Well-Known Uniform Resource Identifiers (URIs)</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="May" year="2019"/>
            <abstract>
              <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
              <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8615"/>
          <seriesInfo name="DOI" value="10.17487/RFC8615"/>
        </reference>
        <reference anchor="RFC9205">
          <front>
            <title>Building Protocols with HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>Applications often use HTTP as a substrate to create HTTP-based APIs. This document specifies best practices for writing specifications that use HTTP to define new application protocols. It is written primarily to guide IETF efforts to define application protocols using HTTP for deployment on the Internet but might be applicable in other situations.</t>
              <t>This document obsoletes RFC 3205.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="56"/>
          <seriesInfo name="RFC" value="9205"/>
          <seriesInfo name="DOI" value="10.17487/RFC9205"/>
        </reference>
        <reference anchor="RFC9290">
          <front>
            <title>Concise Problem Details for Constrained Application Protocol (CoAP) APIs</title>
            <author fullname="T. Fossati" initials="T." surname="Fossati"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="October" year="2022"/>
            <abstract>
              <t>This document defines a concise "problem detail" as a way to carry machine-readable details of errors in a Representational State Transfer (REST) response to avoid the need to define new error response formats for REST APIs for constrained environments. The format is inspired by, but intended to be more concise than, the problem details for HTTP APIs defined in RFC 7807.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9290"/>
          <seriesInfo name="DOI" value="10.17487/RFC9290"/>
        </reference>
        <reference anchor="STD98">
          <front>
            <title>HTTP Caching</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.</t>
              <t>This document obsoletes RFC 7234.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="98"/>
          <seriesInfo name="RFC" value="9111"/>
          <seriesInfo name="DOI" value="10.17487/RFC9111"/>
        </reference>
        <reference anchor="STD97">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="STD96">
          <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="STD94">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC9334">
          <front>
            <title>Remote ATtestation procedureS (RATS) Architecture</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <author fullname="W. Pan" initials="W." surname="Pan"/>
            <date month="January" year="2023"/>
            <abstract>
              <t>In network protocol exchanges, it is often useful for one end of a communication to know whether the other end is in an intended operating state. This document provides an architectural overview of the entities involved that make such tests possible through the process of generating, conveying, and evaluating evidentiary Claims. It provides a model that is neutral toward processor architectures, the content of Claims, and protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9334"/>
          <seriesInfo name="DOI" value="10.17487/RFC9334"/>
        </reference>
        <reference anchor="RFC9393">
          <front>
            <title>Concise Software Identification Tags</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="J. Fitzgerald-McKay" initials="J." surname="Fitzgerald-McKay"/>
            <author fullname="C. Schmidt" initials="C." surname="Schmidt"/>
            <author fullname="D. Waltermire" initials="D." surname="Waltermire"/>
            <date month="June" year="2023"/>
            <abstract>
              <t>ISO/IEC 19770-2:2015 Software Identification (SWID) tags provide an extensible XML-based structure to identify and describe individual software components, patches, and installation bundles. SWID tag representations can be too large for devices with network and storage constraints. This document defines a concise representation of SWID tags: Concise SWID (CoSWID) tags. CoSWID supports a set of semantics and features that are similar to those for SWID tags, as well as new semantics that allow CoSWIDs to describe additional types of information, all in a more memory-efficient format.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9393"/>
          <seriesInfo name="DOI" value="10.17487/RFC9393"/>
        </reference>
        <reference anchor="I-D.ietf-rats-corim">
          <front>
            <title>Concise Reference Integrity Manifest</title>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Linaro</organization>
            </author>
            <author fullname="Yogesh Deshpande" initials="Y." surname="Deshpande">
              <organization>arm</organization>
            </author>
            <author fullname="Ned Smith" initials="N." surname="Smith">
              <organization>Independent</organization>
            </author>
            <author fullname="Wei Pan" initials="W." surname="Pan">
              <organization>Huawei Technologies</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   Remote Attestation Procedures (RATS) enable Relying Parties to assess
   the trustworthiness of a remote Attester and therefore to decide
   whether or not to engage in secure interactions with it.  Evidence
   about trustworthiness can be rather complex and it is deemed
   unrealistic that every Relying Party is capable of the appraisal of
   Evidence.  Therefore that burden is typically offloaded to a
   Verifier.  In order to conduct Evidence appraisal, a Verifier
   requires not only fresh Evidence from an Attester, but also trusted
   Endorsements and Reference Values from Endorsers and Reference Value
   Providers, such as manufacturers, distributors, or device owners.
   This document specifies the information elements for representing
   Endorsements and Reference Values in CBOR format.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-corim-11"/>
        </reference>
        <reference anchor="RFC9999">
          <front>
            <title>Remote ATtestation procedureS (RATS) Conceptual Message Wrapper (CMW)</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <author fullname="T. Fossati" initials="T." surname="Fossati"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="July" year="2026"/>
            <abstract>
              <t>The conceptual messages introduced by the Remote ATtestation procedureS (RATS) architecture (RFC 9334) are protocol-agnostic data units that are conveyed between RATS roles during RATS interactions. Conceptual messages describe the meaning and function of such data units within RATS data flows without specifying a wire format, encoding, transport mechanism, or processing details. The initial set of conceptual messages is defined in Section 8 of RFC 9334 and includes Evidence, Attestation Results, Endorsements, Reference Values, and Appraisal Policies.</t>
              <t>This document introduces the Conceptual Message Wrapper (CMW) that provides a common structure to encapsulate these messages. It defines a dedicated Concise Binary Object Representation (CBOR) tag, corresponding JSON Web Token (JWT) and CBOR Web Token (CWT) claims, and an X.509 extension.</t>
              <t>Together, these mechanisms allow CMWs to be used in CBOR-based protocols, web APIs using JWTs and CWTs, and PKIX artifacts such as X.509 certificates. Additionally, this document defines media types and CoAP Content-Formats that may be used to identify CMWs when transported over protocols such as HTTP, MIME, and CoAP.</t>
              <t>The goal is to improve the interoperability and flexibility of remote attestation protocols. Introducing a shared message format such as CMW enables consistent support for different attestation message types, enables the evolution of message serialization formats without breaking compatibility, and avoids the need to redefine how messages are handled within each protocol.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9999"/>
          <seriesInfo name="DOI" value="10.17487/RFC9999"/>
        </reference>
        <reference anchor="SEMVER" target="https://semver.org/spec/v2.0.0.html">
          <front>
            <title>Semantic Versioning 2.0.0</title>
            <author>
              <organization/>
            </author>
            <date year="2013"/>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="IANA.media-types" target="https://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.core-parameters" target="https://www.iana.org/assignments/core-parameters">
          <front>
            <title>Constrained RESTful Environments (CoRE) Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.well-known-uris" target="https://www.iana.org/assignments/well-known-uris">
          <front>
            <title>Well-Known URIs</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC6024">
          <front>
            <title>Trust Anchor Management Requirements</title>
            <author fullname="R. Reddy" initials="R." surname="Reddy"/>
            <author fullname="C. Wallace" initials="C." surname="Wallace"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>A trust anchor represents an authoritative entity via a public key and associated data. The public key is used to verify digital signatures, and the associated data is used to constrain the types of information for which the trust anchor is authoritative. A relying party uses trust anchors to determine if a digitally signed object is valid by verifying a digital signature using the trust anchor's public key, and by enforcing the constraints expressed in the associated data for the trust anchor. This document describes some of the problems associated with the lack of a standard trust anchor management mechanism and defines requirements for data formats and push-based protocols designed to address these problems. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6024"/>
          <seriesInfo name="DOI" value="10.17487/RFC6024"/>
        </reference>
        <reference anchor="RFC7942">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC8007">
          <front>
            <title>Content Delivery Network Interconnection (CDNI) Control Interface / Triggers</title>
            <author fullname="R. Murray" initials="R." surname="Murray"/>
            <author fullname="B. Niven-Jenkins" initials="B." surname="Niven-Jenkins"/>
            <date month="December" year="2016"/>
            <abstract>
              <t>This document describes the part of the Content Delivery Network Interconnection (CDNI) Control interface that allows a CDN to trigger activity in an interconnected CDN that is configured to deliver content on its behalf. The upstream CDN can use this mechanism to request that the downstream CDN pre-position metadata or content or to request that it invalidate or purge metadata or content. The upstream CDN can monitor the status of activity that it has triggered in the downstream CDN.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8007"/>
          <seriesInfo name="DOI" value="10.17487/RFC8007"/>
        </reference>
        <reference anchor="RFC9711">
          <front>
            <title>The Entity Attestation Token (EAT)</title>
            <author fullname="L. Lundblade" initials="L." surname="Lundblade"/>
            <author fullname="G. Mandyam" initials="G." surname="Mandyam"/>
            <author fullname="J. O'Donoghue" initials="J." surname="O'Donoghue"/>
            <author fullname="C. Wallace" initials="C." surname="Wallace"/>
            <date month="April" year="2025"/>
            <abstract>
              <t>An Entity Attestation Token (EAT) provides an attested claims set that describes the state and characteristics of an entity, a device such as a smartphone, an Internet of Things (IoT) device, network equipment, or such. This claims set is used by a relying party, server, or service to determine the type and degree of trust placed in the entity.</t>
              <t>An EAT is either a CBOR Web Token (CWT) or a JSON Web Token (JWT) with attestation-oriented claims.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9711"/>
          <seriesInfo name="DOI" value="10.17487/RFC9711"/>
        </reference>
        <reference anchor="RFC10008">
          <front>
            <title>The HTTP QUERY Method</title>
            <author fullname="J. Reschke" initials="J." surname="Reschke"/>
            <author fullname="J.M. Snell" initials="J.M." surname="Snell"/>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <date month="June" year="2026"/>
            <abstract>
              <t>This specification defines the QUERY method for HTTP. A QUERY requests that the request target process the enclosed content in a safe and idempotent manner and then respond with the result of that processing. This is similar to POST requests, but QUERY requests can be automatically repeated or restarted without concern for partial state changes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="10008"/>
          <seriesInfo name="DOI" value="10.17487/RFC10008"/>
        </reference>
        <reference anchor="I-D.ietf-rats-endorsements">
          <front>
            <title>Remote Attestation Procedures (RATS) Endorsements</title>
            <author fullname="Dave Thaler" initials="D." surname="Thaler">
              <organization>Armidale Consulting</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>NVIDIA</organization>
            </author>
            <date day="14" month="October" year="2026"/>
            <abstract>
              <t>   In the IETF Remote Attestation Procedures (RATS) architecture (RFC
   9334), a Verifier accepts Evidence and uses Appraisal Policy for
   Evidence, typically with additional input from Endorsements and
   Reference Values, to generate Attestation Results in formats that are
   useful for Relying Parties.  This document illustrates the purpose
   and role of Endorsements and discusses some considerations in the
   choice of message format for Endorsements in the scope of the RATS
   architecture.

   This document does not aim to define a conceptual message format for
   Endorsements and Reference Values.  Instead, it updates RFC 9334 by
   refining the description of Endorsements and Reference Values.
   Specifically, this document classifies the RATS conceptual messages
   as actual state, reference state, or appraisal policy, and adds
   considerations on conditionally endorsed values, endorsing
   verification keys, timeliness, and multiple Endorsements.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-endorsements-13"/>
        </reference>
        <reference anchor="I-D.ietf-iotops-mud-rats">
          <front>
            <title>MUD-Based RATS Resources Discovery</title>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Michael Richardson" initials="M." surname="Richardson">
              <organization>Sandelman Software Works</organization>
            </author>
            <author fullname="Peter Chunchi Liu" initials="P. C." surname="Liu">
              <organization>Huawei Technologies</organization>
            </author>
            <date day="23" month="July" year="2026"/>
            <abstract>
              <t>   Manufacturer Usage Description (MUD) files and the MUD URIs that
   point to them are defined in RFC 8520.  This document introduces a
   new type of MUD file to be delivered in conjunction with a MUD file
   signature and/or to be referenced via a MUD URI embedded in other
   documents or messages, such as an IEEE 802.1AR Secure Device
   Identifier (DevID) or a CBOR Web Token (CWT).  These signed documents
   can be presented to other entities, e.g., a network management system
   or network path orchestrator.  If this entity also takes on the role
   of a verifier as defined by the IETF Remote ATtestation procedureS
   (RATS) architecture, this verifier can use the references included in
   the MUD file specified in this document to discover, for example,
   appropriate reference value providers, endorsement documents or
   endorsement distribution APIs, trust anchor stores, remote verifier
   services (sometimes referred to as Attestation Verification
   Services), or transparency logs.  All theses references in the MUD
   file pointing to resources and auxiliary RATS services can satisfy
   general RATS prerequisite by enabling discovery or improve discovery
   resilience of corresponding resources or services.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-iotops-mud-rats-03"/>
        </reference>
      </references>
    </references>
    <?line 2225?>

<section anchor="collated-cddl">
      <name>Collated CDDL</name>
      <section anchor="collated-cddl-coserv">
        <name>CoSERV Data Model</name>
        <artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

signed-coserv = #6.18([
    protected: bytes .cbor signed-coserv-protected-hdr,
    unprotected: signed-coserv-unprotected-hdr,
    payload: bytes .cbor coserv,
    signature: bytes,
])
signed-coserv-protected-hdr = {
  1 => int,
  3 => "application/coserv+cbor" / 10000,
  * cose.label => cose.values,
}
signed-coserv-unprotected-hdr = {* cose.label => cose.values}
cose.label = int / text
cose.values = any
coserv = {
  &(profile: 0) => profile,
  &(query: 1) => query,
  ? &(results: 2) => results,
}
profile = comid.oid-type / ~uri
query = {environment-query // rim-query}
environment-query = (
  &(artifact-type: 0) => artifact-type,
  &(environment-selector: 1) => environment-selector-map,
  &(result-type: 2) => result-type,
  )
rim-query = (&(rim-selector: 3) => [+ rim-selector-id])
rim-selector-id = [
    &(comid: 0),
    comid.$tag-id-type-choice,
] / [
    &(coswid: 1),
    coswid.tag-id,
] / [
    &(corim: 2),
    corim.$corim-id-type-choice,
]
artifact-type = &(endorsed-values: 0) / &(trust-anchors: 1) / &(\
                                 reference-values: 2) / &(domains: 3)
result-type = &(collected-artifacts: 0) / &(source-artifacts: 1) / &\
                                                            (both: 2)
results = {
  (environment-result // rim-result),
  &(expiry: 10) => tdate,
}
environment-result = (result-set // &(source-artifacts: 11) => [+ \
                                                cmw.cbor-record] // (
        result-set,
        &(source-artifacts: 11) => [+ cmw.cbor-record],
      ))
rim-result = (&(rims: 5) => cmw.cbor-collection)
result-set //= (reference-values // endorsed-values // trust-\
                                                  anchors // domains)
refval-quad = {
  &(authorities: 1) => [+ comid.$crypto-key-type-choice],
  &(rv-triple: 2) => comid.reference-triple-record,
}
reference-values = (&(rvq: 0) => [* refval-quad])
endval-quad = {
  &(authorities: 1) => [+ comid.$crypto-key-type-choice],
  &(ev-triple: 2) => comid.endorsed-triple-record,
}
cond-endval-quad = {
  &(authorities: 1) => [+ comid.$crypto-key-type-choice],
  &(ce-triple: 2) => comid.conditional-endorsement-triple-record,
}
endorsed-values = (
  &(evq: 1) => [* endval-quad],
  &(ceq: 2) => [* cond-endval-quad],
  )
ak-quad = {
  &(authorities: 1) => [+ comid.$crypto-key-type-choice],
  &(ak-triple: 2) => comid.attest-key-triple-record,
}
cots-stmt = {
  &(authorities: 1) => [+ comid.$crypto-key-type-choice],
  &(cots: 2) => cots,
}
trust-anchors = (
  &(akq: 3) => [* ak-quad],
  &(tas: 4) => [* cots-stmt],
  )
membership-quad = {
  &(authorities: 1) => [+ comid.$crypto-key-type-choice],
  &(membership-triple: 2) => comid.domain-membership-triple-record,
}
dependency-quad = {
  &(authorities: 1) => [+ comid.$crypto-key-type-choice],
  &(dependency-triple: 2) => comid.domain-dependency-triple-record,
}
domains = (
  &(membership: 5) => [* membership-quad],
  &(dependency: 6) => [* dependency-quad],
  )
cots = "TODO COTS"
environment-selector-map = {selector}
stateful-class = [
  class: comid.class-map,
  ? measurements: [+ comid.measurement-map],
]
selector //= (&(class: 0) => [+ stateful-class] // &(instance: 1) =\
        > [+ stateful-instance] // &(group: 2) => [+ stateful-group])
stateful-instance = [
  instance: comid.$instance-id-type-choice,
  ? measurements: [+ comid.measurement-map],
]
stateful-group = [
  group: comid.$group-id-type-choice,
  ? measurements: [+ comid.measurement-map],
]
cmw.start = cmw.cmw
cmw.cmw = cmw.json-cmw / cmw.cbor-cmw
cmw.json-cmw = cmw.json-record / cmw.json-collection
cmw.cbor-cmw = cmw.cbor-record / cmw.cbor-collection / cmw.$cbor-tag
cmw.json-record = [
  type: cmw.media-type,
  value: cmw.base64url-string,
  ? ind: uint .bits cmw.cm-type,
]
cmw.cbor-record = [
  type: cmw.coap-content-format-type / cmw.media-type,
  value: bytes,
  ? ind: uint .bits cmw.cm-type,
]
cmw.tag-cm-cbor<tn, fmt> = #6.<tn>(bytes .cbor fmt)
cmw.tag-cm-data<tn> = #6.<tn>(bytes)
cmw.json-collection = {
  ? __cmwc_t: ~uri / cmw.oid,
  + &(label: text) => cmw.json-cmw,
}
cmw.cbor-collection = {
  ? __cmwc_t: ~uri / cmw.oid,
  + &(label: int / text) => cmw.cbor-cmw,
}
cmw.media-type = text .abnf ("Content-Type" .cat cmw.Content-Type-\
                                                                ABNF)
cmw.base64url-string = text .regexp "[A-Za-z0-9_-]+"
cmw.coap-content-format-type = uint .size 2
cmw.oid = text .regexp "([0-2])((\\.0)|(\\.[1-9][0-9]*))*"
cmw.cm-type = &(
  reference-values: 0,
  endorsements: 1,
  evidence: 2,
  attestation-results: 3,
  appraisal-policy: 4,
)
cmw.Content-Type-ABNF = '

Content-Type   = Media-Type-Name *( *SP ";" *SP parameter )
parameter      = token "=" ( token / quoted-string )

token          = 1*tchar
tchar          = "!" / "#" / "$" / "%" / "&" / "\'" / "*"
               / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~"
               / DIGIT / ALPHA
quoted-string  = %x22 *( qdtext / quoted-pair ) %x22
qdtext         = SP / %x21 / %x23-5B / %x5D-7E
quoted-pair    = "\\" ( SP / VCHAR )

Media-Type-Name = type-name "/" subtype-name

type-name = restricted-name
subtype-name = restricted-name

restricted-name = restricted-name-first *126restricted-name-chars
restricted-name-first  = ALPHA / DIGIT
restricted-name-chars  = ALPHA / DIGIT / "!" / "#" /
                         "$" / "&" / "-" / "^" / "_"
restricted-name-chars =/ "." ; Characters before first dot always
                             ; specify a facet name
restricted-name-chars =/ "+" ; Characters after last plus always
                             ; specify a structured syntax suffix

DIGIT     =  %x30-39           ; 0 - 9
POS-DIGIT =  %x31-39           ; 1 - 9
ALPHA     =  %x41-5A / %x61-7A ; A - Z / a - z
SP        =  %x20
VCHAR     =  %x21-7E           ; printable ASCII (no SP)
'
cmw.$cbor-tag /= cmw.tag-cm-data<1668612070> / cmw.tag-cm-cbor<\
                                         1668612069, cmw.my-evidence>
cmw.my-evidence = {&(eat_nonce: 10) => bytes .size (8 .. 64)}
comid.concise-mid-tag = {
  ? &(language: 0) => text,
  &(tag-identity: 1) => comid.tag-identity-map,
  ? &(entities: 2) => [+ comid.comid-entity-map],
  ? &(linked-tags: 3) => [+ comid.linked-tag-map],
  &(triples: 4) => comid.triples-map,
  * $$concise-mid-tag-extension,
}
comid.attest-key-triple-record = [
  environment: comid.environment-map,
  key-list: [+ comid.$crypto-key-type-choice],
  ? conditions: comid.non-empty<{
            ? &(mkey: 0) => comid.$measured-element-type-choice,
            ? &(authorized-by: 1) => [+ comid.$crypto-key-type-\
                                                             choice],
}>,
]
comid.$class-id-type-choice /= comid.tagged-oid-type / comid.tagged-\
                                       uuid-type / comid.tagged-bytes
comid.class-map = comid.non-empty<{
    ? &(class-id: 0) => comid.$class-id-type-choice,
    ? &(vendor: 1) => tstr,
    ? &(model: 2) => tstr,
    ? &(layer: 3) => uint,
    ? &(index: 4) => uint,
}>
comid.comid-entity-map = comid.entity-map<comid.$comid-role-type-\
                                choice, $$comid-entity-map-extension>
comid.$comid-role-type-choice /= &(tag-creator: 0) / &(creator: 1) \
                                                   / &(maintainer: 2)
comid.conditional-endorsement-series-triple-record = [
  condition: comid.stateful-environment-record,
  series: [+ comid.conditional-series-record],
]
comid.conditional-series-record = [
  selection: [+ comid.measurement-map],
  addition: [+ comid.measurement-map],
]
comid.COSE_Key = {
  1 => tstr / int,
  ? 2 => bstr,
  ? 3 => tstr / int,
  ? 4 => [+ tstr / int],
  ? 5 => bstr,
  * comid.cose-label => comid.cose-value,
}
comid.cose-label = int / tstr
comid.cose-value = any
comid.coswid-triple-record = [
  comid.environment-map,
  [+ comid.concise-swid-tag-id],
]
comid.concise-swid-tag-id = text / bstr .size 16
comid.$crypto-key-type-choice /= comid.tagged-pkix-base64-key-type \
/ comid.tagged-pkix-base64-cert-type / comid.tagged-pkix-base64-cert\
-path-type / comid.tagged-cose-key-type / comid.tagged-pkix-asn1der-\
cert-type / comid.tagged-key-thumbprint-type / comid.tagged-cert-\
thumbprint-type / comid.tagged-cert-path-thumbprint-type / comid.\
                                                         tagged-bytes
comid.tagged-pkix-base64-key-type = #6.554(tstr)
comid.tagged-pkix-base64-cert-type = #6.555(tstr)
comid.tagged-pkix-base64-cert-path-type = #6.556(tstr)
comid.tagged-key-thumbprint-type = #6.557(comid.digest)
comid.tagged-cose-key-type = #6.558(comid.COSE_Key)
comid.tagged-cert-thumbprint-type = #6.559(comid.digest)
comid.tagged-cert-path-thumbprint-type = #6.561(comid.digest)
comid.tagged-pkix-asn1der-cert-type = #6.562(bstr)
comid.domain-dependency-triple-record = [
  comid.domain-type,
  [+ comid.domain-type],
]
comid.domain-membership-triple-record = [
  domain-id: comid.domain-type,
  members: [+ comid.domain-type],
]
comid.conditional-endorsement-triple-record = [
  conditions: [+ comid.stateful-environment-record],
  endorsements: [+ comid.endorsed-triple-record],
]
comid.domain-type = comid.environment-map
comid.endorsed-triple-record = [
  condition: comid.environment-map,
  endorsement: [+ comid.measurement-map],
]
comid.entity-map<role-type-choice, extension-socket> = {
    &(entity-name: 0) => comid.$entity-name-type-choice,
    ? &(reg-id: 1) => uri,
    &(role: 2) => [+ role-type-choice],
    * extension-socket,
}
comid.$entity-name-type-choice /= text
comid.environment-map = comid.non-empty<{
    ? &(class: 0) => comid.class-map,
    ? &(instance: 1) => comid.$instance-id-type-choice,
    ? &(group: 2) => comid.$group-id-type-choice,
}>
comid.flags-map = {
  ? &(is-configured: 0) => bool,
  ? &(is-secure: 1) => bool,
  ? &(is-recovery: 2) => bool,
  ? &(is-debug: 3) => bool,
  ? &(is-replay-protected: 4) => bool,
  ? &(is-integrity-protected: 5) => bool,
  ? &(is-runtime-meas: 6) => bool,
  ? &(is-immutable: 7) => bool,
  ? &(is-tcb: 8) => bool,
  ? &(is-confidentiality-protected: 9) => bool,
  * $$flags-map-extension,
}
comid.$group-id-type-choice /= comid.tagged-uuid-type / comid.tagged\
                                                               -bytes
comid.identity-triple-record = [
  environment: comid.environment-map,
  key-list: [+ comid.$crypto-key-type-choice],
  ? conditions: comid.non-empty<{
            ? &(mkey: 0) => comid.$measured-element-type-choice,
            ? &(authorized-by: 1) => [+ comid.$crypto-key-type-\
                                                             choice],
}>,
]
comid.$instance-id-type-choice /= comid.tagged-ueid-type / comid.\
tagged-uuid-type / comid.tagged-bytes / comid.tagged-pkix-base64-key\
-type / comid.tagged-pkix-base64-cert-type / comid.tagged-cose-key-\
type / comid.tagged-key-thumbprint-type / comid.tagged-cert-\
                thumbprint-type / comid.tagged-pkix-asn1der-cert-type
comid.ip-addr-type-choice = comid.ip4-addr-type / comid.ip6-addr-type
comid.ip4-addr-type = bytes .size 4
comid.ip6-addr-type = bytes .size 16
comid.int-range-type-choice = int / comid.tagged-int-range
comid.int-range = [
  min: int / comid.negative-inf,
  max: int / comid.positive-inf,
]
comid.tagged-int-range = #6.564(comid.int-range)
comid.positive-inf = null
comid.negative-inf = null
comid.linked-tag-map = {
  &(linked-tag-id: 0) => comid.$tag-id-type-choice,
  &(tag-rel: 1) => comid.$tag-rel-type-choice,
}
comid.mac-addr-type-choice = comid.eui48-addr-type / comid.eui64-\
                                                            addr-type
comid.eui48-addr-type = bytes .size 6
comid.eui64-addr-type = bytes .size 8
comid.$measured-element-type-choice /= comid.tagged-oid-type / comid\
                                      .tagged-uuid-type / uint / tstr
comid.measurement-map = {
  ? &(mkey: 0) => comid.$measured-element-type-choice,
  &(mval: 1) => comid.measurement-values-map,
  ? &(authorized-by: 2) => [+ comid.$crypto-key-type-choice],
}
comid.measurement-values-map = comid.non-empty<{
    ? &(version: 0) => comid.version-map,
    ? &(svn: 1) => comid.svn-type-choice,
    ? &(digests: 2) => comid.digests-type,
    ? &(flags: 3) => comid.flags-map,
    ? (
                  &(raw-value: 4) => comid.$raw-value-type-choice,
                  ? &(raw-value-mask-DEPRECATED: 5) => comid.raw-\
                                                     value-mask-type,
          ),
    ? &(mac-addr: 6) => comid.mac-addr-type-choice,
    ? &(ip-addr: 7) => comid.ip-addr-type-choice,
    ? &(serial-number: 8) => text,
    ? &(ueid: 9) => comid.ueid-type,
    ? &(uuid: 10) => comid.uuid-type,
    ? &(name: 11) => text,
    ? &(cryptokeys: 13) => [+ comid.$crypto-key-type-choice],
    ? &(integrity-registers: 14) => comid.integrity-registers,
    ? &(int-range: 15) => comid.int-range-type-choice,
    * $$measurement-values-map-extension,
}>
comid.non-empty<M> = M .and ({+ any => any})
comid.oid-type = bytes
comid.tagged-oid-type = #6.111(comid.oid-type)
comid.$raw-value-type-choice /= comid.tagged-bytes / comid.tagged-\
                                                     masked-raw-value
comid.raw-value-mask-type = bytes
comid.tagged-masked-raw-value = #6.563([
    value: bytes,
    mask: bytes,
])
comid.reference-triple-record = [
  ref-env: comid.environment-map,
  ref-claims: [+ comid.measurement-map],
]
comid.stateful-environment-record = [
  environment: comid.environment-map,
  claims-list: [+ comid.measurement-map],
]
comid.svn-type = uint
comid.svn = comid.svn-type
comid.min-svn = comid.svn-type
comid.tagged-svn = #6.552(comid.svn)
comid.tagged-min-svn = #6.553(comid.min-svn)
comid.svn-type-choice = comid.svn / comid.tagged-svn / comid.tagged-\
                                                              min-svn
comid.$tag-id-type-choice /= tstr / comid.uuid-type
comid.tag-identity-map = {
  &(tag-id: 0) => comid.$tag-id-type-choice,
  ? &(tag-version: 1) => comid.tag-version-type,
}
comid.$tag-rel-type-choice /= &(supplements: 0) / &(replaces: 1)
comid.tag-version-type = uint .default 0
comid.tagged-bytes = #6.560(bytes)
comid.triples-map = comid.non-empty<{
    ? &(reference-triples: 0) => [+ comid.reference-triple-record],
    ? &(endorsed-triples: 1) => [+ comid.endorsed-triple-record],
    ? &(identity-triples: 2) => [+ comid.identity-triple-record],
    ? &(attest-key-triples: 3) => [+ comid.attest-key-triple-record],
    ? &(dependency-triples: 4) => [+ comid.domain-dependency-triple-\
                                                             record],
    ? &(membership-triples: 5) => [+ comid.domain-membership-triple-\
                                                             record],
    ? &(coswid-triples: 6) => [+ comid.coswid-triple-record],
    ? &(conditional-endorsement-series-triples: 8) => [+ comid.\
                       conditional-endorsement-series-triple-record],
    ? &(conditional-endorsement-triples: 10) => [+ comid.conditional\
                                         -endorsement-triple-record],
    * $$triples-map-extension,
}>
comid.ueid-type = bytes .size (7 .. 33)
comid.tagged-ueid-type = #6.550(comid.ueid-type)
comid.uuid-type = bytes .size 16
comid.tagged-uuid-type = #6.37(comid.uuid-type)
comid.version-map = {
  &(version: 0) => text,
  ? &(version-scheme: 1) => comid.$version-scheme,
}
comid.digest = [
  alg: int / text,
  val: bytes,
]
comid.digests-type = [+ comid.digest]
comid.integrity-register-id-type-choice = uint / text
comid.integrity-registers = {+ comid.integrity-register-id-type-\
                                        choice => comid.digests-type}
comid.concise-swid-tag = {
  comid.tag-id => text / bstr .size 16,
  comid.tag-version => integer,
  ? comid.corpus => bool,
  ? comid.patch => bool,
  ? comid.supplemental => bool,
  comid.software-name => text,
  ? comid.software-version => text,
  ? comid.version-scheme => comid.$version-scheme,
  ? comid.media => text,
  ? comid.software-meta => comid.one-or-more<comid.software-meta-\
                                                              entry>,
  comid.entity => comid.one-or-more<comid.entity-entry>,
  ? comid.link => comid.one-or-more<comid.link-entry>,
  ? comid.payload-or-evidence,
  * $$coswid-extension,
  comid.global-attributes,
}
comid.payload-or-evidence //= (comid.payload => comid.payload-entry \
                           // comid.evidence => comid.evidence-entry)
comid.any-uri = uri
comid.label = text / int
comid.$version-scheme /= comid.multipartnumeric / comid.\
multipartnumeric-suffix / comid.alphanumeric / comid.decimal / comid\
                                                 .semver / int / text
comid.any-attribute = (comid.label => comid.one-or-more<text> / \
                                              comid.one-or-more<int>)
comid.one-or-more<T> = T / [2*T]
comid.global-attributes = (
  ? comid.lang => text,
  * comid.any-attribute,
  )
comid.hash-entry = [
  hash-alg-id: int,
  hash-value: bytes,
]
comid.entity-entry = {
  comid.entity-name => text,
  ? comid.reg-id => comid.any-uri,
  comid.role => comid.one-or-more<comid.$role>,
  ? comid.thumbprint => comid.hash-entry,
  * $$entity-extension,
  comid.global-attributes,
}
comid.$role /= comid.tag-creator / comid.software-creator / comid.\
aggregator / comid.distributor / comid.licensor / comid.maintainer \
                                                         / int / text
comid.link-entry = {
  ? comid.artifact => text,
  comid.href => comid.any-uri,
  ? comid.media => text,
  ? comid.ownership => comid.$ownership,
  comid.rel => comid.$rel,
  ? comid.media-type => text,
  ? comid.use => comid.$use,
  * $$link-extension,
  comid.global-attributes,
}
comid.$ownership /= comid.shared / comid.private / comid.abandon / \
                                                           int / text
comid.$rel /= comid.ancestor / comid.component / comid.feature / \
comid.installationmedia / comid.packageinstaller / comid.parent / \
comid.patches / comid.requires / comid.see-also / comid.supersedes \
                          / comid.supplemental / -256 .. 64436 / text
comid.$use /= comid.optional / comid.required / comid.recommended / \
                                                           int / text
comid.software-meta-entry = {
  ? comid.activation-status => text,
  ? comid.channel-type => text,
  ? comid.colloquial-version => text,
  ? comid.description => text,
  ? comid.edition => text,
  ? comid.entitlement-data-required => bool,
  ? comid.entitlement-key => text,
  ? comid.generator => text / bstr .size 16,
  ? comid.persistent-id => text,
  ? comid.product => text,
  ? comid.product-family => text,
  ? comid.revision => text,
  ? comid.summary => text,
  ? comid.unspsc-code => text,
  ? comid.unspsc-version => text,
  * $$software-meta-extension,
  comid.global-attributes,
}
comid.path-elements-group = (
  ? comid.directory => comid.one-or-more<comid.directory-entry>,
  ? comid.file => comid.one-or-more<comid.file-entry>,
  )
comid.resource-collection = (
  comid.path-elements-group,
  ? comid.process => comid.one-or-more<comid.process-entry>,
  ? comid.resource => comid.one-or-more<comid.resource-entry>,
  * $$resource-collection-extension,
  )
comid.file-entry = {
  comid.filesystem-item,
  ? comid.size => uint,
  ? comid.file-version => text,
  ? comid.hash => comid.hash-entry,
  * $$file-extension,
  comid.global-attributes,
}
comid.directory-entry = {
  comid.filesystem-item,
  ? comid.path-elements => {comid.path-elements-group},
  * $$directory-extension,
  comid.global-attributes,
}
comid.process-entry = {
  comid.process-name => text,
  ? comid.pid => integer,
  * $$process-extension,
  comid.global-attributes,
}
comid.resource-entry = {
  comid.type => text,
  * $$resource-extension,
  comid.global-attributes,
}
comid.filesystem-item = (
  ? comid.key => bool,
  ? comid.location => text,
  comid.fs-name => text,
  ? comid.root => text,
  )
comid.payload-entry = {
  comid.resource-collection,
  * $$payload-extension,
  comid.global-attributes,
}
comid.evidence-entry = {
  comid.resource-collection,
  ? comid.date => comid.integer-time,
  ? comid.device-id => text,
  ? comid.location => text,
  * $$evidence-extension,
  comid.global-attributes,
}
comid.integer-time = #6.1(int)
comid.tag-id = 0
comid.software-name = 1
comid.entity = 2
comid.evidence = 3
comid.link = 4
comid.software-meta = 5
comid.payload = 6
comid.hash = 7
comid.corpus = 8
comid.patch = 9
comid.media = 10
comid.supplemental = 11
comid.tag-version = 12
comid.software-version = 13
comid.version-scheme = 14
comid.lang = 15
comid.directory = 16
comid.file = 17
comid.process = 18
comid.resource = 19
comid.size = 20
comid.file-version = 21
comid.key = 22
comid.location = 23
comid.fs-name = 24
comid.root = 25
comid.path-elements = 26
comid.process-name = 27
comid.pid = 28
comid.type = 29
comid.entity-name = 31
comid.reg-id = 32
comid.role = 33
comid.thumbprint = 34
comid.date = 35
comid.device-id = 36
comid.artifact = 37
comid.href = 38
comid.ownership = 39
comid.rel = 40
comid.media-type = 41
comid.use = 42
comid.activation-status = 43
comid.channel-type = 44
comid.colloquial-version = 45
comid.description = 46
comid.edition = 47
comid.entitlement-data-required = 48
comid.entitlement-key = 49
comid.generator = 50
comid.persistent-id = 51
comid.product = 52
comid.product-family = 53
comid.revision = 54
comid.summary = 55
comid.unspsc-code = 56
comid.unspsc-version = 57
comid.multipartnumeric = 1
comid.multipartnumeric-suffix = 2
comid.alphanumeric = 3
comid.decimal = 4
comid.semver = 16384
comid.tag-creator = 1
comid.software-creator = 2
comid.aggregator = 3
comid.distributor = 4
comid.licensor = 5
comid.maintainer = 6
comid.abandon = 1
comid.private = 2
comid.shared = 3
comid.ancestor = 1
comid.component = 2
comid.feature = 3
comid.installationmedia = 4
comid.packageinstaller = 5
comid.parent = 6
comid.patches = 7
comid.requires = 8
comid.see-also = 9
comid.supersedes = 10
comid.optional = 1
comid.required = 2
comid.recommended = 3
corim.corim = corim.concise-rim-type-choice
corim.concise-rim-type-choice /= corim.tagged-unsigned-corim-map / \
                                                   corim.signed-corim
corim.concise-tl-tag = {
  &(tag-identity: 0) => corim.tag-identity-map,
  &(tags-list: 1) => [+ corim.tag-identity-map],
  &(tl-validity: 2) => corim.validity-map,
}
corim.$concise-tag-type-choice /= corim.tagged-concise-swid-tag / \
           corim.tagged-concise-mid-tag / corim.tagged-concise-tl-tag
corim.corim-entity-map = corim.entity-map<corim.$corim-role-type-\
                                choice, $$corim-entity-map-extension>
corim.$corim-id-type-choice /= tstr / corim.uuid-type
corim.corim-locator-map = {
  &(href: 0) => uri / [+ uri],
  ? &(thumbprint: 1) => corim.digest / [corim.digest],
}
corim.corim-map = {
  &(id: 0) => corim.$corim-id-type-choice,
  &(tags: 1) => [+ corim.$concise-tag-type-choice],
  ? &(dependent-rims: 2) => [+ corim.corim-locator-map],
  ? &(profile: 3) => corim.$profile-type-choice,
  ? &(rim-validity: 4) => corim.validity-map,
  ? &(entities: 5) => [+ corim.corim-entity-map],
  * $$corim-map-extension,
}
corim.unsigned-corim-map = corim.corim-map
corim.corim-meta-map = {
  &(signer: 0) => corim.corim-signer-map,
  ? &(signature-validity: 1) => corim.validity-map,
}
corim.$corim-role-type-choice /= &(manifest-creator: 1) / &(manifest\
                                                          -signer: 2)
corim.corim-signer-map = {
  &(signer-name: 0) => corim.$entity-name-type-choice,
  ? &(signer-uri: 1) => uri,
  * $$corim-signer-map-extension,
}
corim.COSE-Sign1-corim = [
  protected: bstr .cbor corim.protected-corim-header-map,
  unprotected: corim.unprotected-corim-header-map,
  payload: bstr .cbor corim.tagged-unsigned-corim-map,
  signature: bstr,
]
corim.$profile-type-choice /= uri / corim.tagged-oid-type
corim.cwt-claims = {
  &(iss: 1) => tstr,
  ? &(sub: 2) => tstr,
  ? &(exp: 4) => int / float,
  ? &(nbf: 5) => int / float,
  * int => any,
}
corim.protected-corim-header-map = {
  &(alg: 1) => int,
  &(content-type: 3) => "application/rim+cbor",
  corim.meta-group,
  * corim.cose-label => corim.cose-value,
}
corim.meta-group = ((
        corim.corim-meta-identity,
        ? corim.cwt-claims-identity,
      ) // corim.cwt-claims-identity)
corim.corim-meta-identity = (&(corim-meta: 8) => bstr .cbor corim.\
                                                      corim-meta-map)
corim.cwt-claims-identity = (&(CWT-Claims: 15) => corim.cwt-claims)
corim.signed-corim = #6.18(corim.COSE-Sign1-corim)
corim.tagged-concise-swid-tag = #6.505(bytes .cbor corim.concise-\
                                                            swid-tag)
corim.tagged-concise-mid-tag = #6.506(bytes .cbor corim.concise-mid-\
                                                                 tag)
corim.tagged-concise-tl-tag = #6.508(bytes .cbor corim.concise-tl-\
                                                                 tag)
corim.tagged-unsigned-corim-map = #6.501(corim.unsigned-corim-map)
corim.unprotected-corim-header-map = {* corim.cose-label => corim.\
                                                          cose-value}
corim.validity-map = {
  ? &(not-before: 0) => time,
  &(not-after: 1) => time,
}
corim.concise-mid-tag = {
  ? &(language: 0) => text,
  &(tag-identity: 1) => corim.tag-identity-map,
  ? &(entities: 2) => [+ corim.comid-entity-map],
  ? &(linked-tags: 3) => [+ corim.linked-tag-map],
  &(triples: 4) => corim.triples-map,
  * $$concise-mid-tag-extension,
}
corim.attest-key-triple-record = [
  environment: corim.environment-map,
  key-list: [+ corim.$crypto-key-type-choice],
  ? conditions: corim.non-empty<{
            ? &(mkey: 0) => corim.$measured-element-type-choice,
            ? &(authorized-by: 1) => [+ corim.$crypto-key-type-\
                                                             choice],
}>,
]
corim.$class-id-type-choice /= corim.tagged-oid-type / corim.tagged-\
                                       uuid-type / corim.tagged-bytes
corim.class-map = corim.non-empty<{
    ? &(class-id: 0) => corim.$class-id-type-choice,
    ? &(vendor: 1) => tstr,
    ? &(model: 2) => tstr,
    ? &(layer: 3) => uint,
    ? &(index: 4) => uint,
}>
corim.comid-entity-map = corim.entity-map<corim.$comid-role-type-\
                                choice, $$comid-entity-map-extension>
corim.$comid-role-type-choice /= &(tag-creator: 0) / &(creator: 1) \
                                                   / &(maintainer: 2)
corim.conditional-endorsement-series-triple-record = [
  condition: corim.stateful-environment-record,
  series: [+ corim.conditional-series-record],
]
corim.conditional-series-record = [
  selection: [+ corim.measurement-map],
  addition: [+ corim.measurement-map],
]
corim.COSE_Key = {
  1 => tstr / int,
  ? 2 => bstr,
  ? 3 => tstr / int,
  ? 4 => [+ tstr / int],
  ? 5 => bstr,
  * corim.cose-label => corim.cose-value,
}
corim.cose-label = int / tstr
corim.cose-value = any
corim.coswid-triple-record = [
  corim.environment-map,
  [+ corim.concise-swid-tag-id],
]
corim.concise-swid-tag-id = text / bstr .size 16
corim.$crypto-key-type-choice /= corim.tagged-pkix-base64-key-type \
/ corim.tagged-pkix-base64-cert-type / corim.tagged-pkix-base64-cert\
-path-type / corim.tagged-cose-key-type / corim.tagged-pkix-asn1der-\
cert-type / corim.tagged-key-thumbprint-type / corim.tagged-cert-\
thumbprint-type / corim.tagged-cert-path-thumbprint-type / corim.\
                                                         tagged-bytes
corim.tagged-pkix-base64-key-type = #6.554(tstr)
corim.tagged-pkix-base64-cert-type = #6.555(tstr)
corim.tagged-pkix-base64-cert-path-type = #6.556(tstr)
corim.tagged-key-thumbprint-type = #6.557(corim.digest)
corim.tagged-cose-key-type = #6.558(corim.COSE_Key)
corim.tagged-cert-thumbprint-type = #6.559(corim.digest)
corim.tagged-cert-path-thumbprint-type = #6.561(corim.digest)
corim.tagged-pkix-asn1der-cert-type = #6.562(bstr)
corim.domain-dependency-triple-record = [
  corim.domain-type,
  [+ corim.domain-type],
]
corim.domain-membership-triple-record = [
  domain-id: corim.domain-type,
  members: [+ corim.domain-type],
]
corim.conditional-endorsement-triple-record = [
  conditions: [+ corim.stateful-environment-record],
  endorsements: [+ corim.endorsed-triple-record],
]
corim.domain-type = corim.environment-map
corim.endorsed-triple-record = [
  condition: corim.environment-map,
  endorsement: [+ corim.measurement-map],
]
corim.entity-map<role-type-choice, extension-socket> = {
    &(entity-name: 0) => corim.$entity-name-type-choice,
    ? &(reg-id: 1) => uri,
    &(role: 2) => [+ role-type-choice],
    * extension-socket,
}
corim.$entity-name-type-choice /= text
corim.environment-map = corim.non-empty<{
    ? &(class: 0) => corim.class-map,
    ? &(instance: 1) => corim.$instance-id-type-choice,
    ? &(group: 2) => corim.$group-id-type-choice,
}>
corim.flags-map = {
  ? &(is-configured: 0) => bool,
  ? &(is-secure: 1) => bool,
  ? &(is-recovery: 2) => bool,
  ? &(is-debug: 3) => bool,
  ? &(is-replay-protected: 4) => bool,
  ? &(is-integrity-protected: 5) => bool,
  ? &(is-runtime-meas: 6) => bool,
  ? &(is-immutable: 7) => bool,
  ? &(is-tcb: 8) => bool,
  ? &(is-confidentiality-protected: 9) => bool,
  * $$flags-map-extension,
}
corim.$group-id-type-choice /= corim.tagged-uuid-type / corim.tagged\
                                                               -bytes
corim.identity-triple-record = [
  environment: corim.environment-map,
  key-list: [+ corim.$crypto-key-type-choice],
  ? conditions: corim.non-empty<{
            ? &(mkey: 0) => corim.$measured-element-type-choice,
            ? &(authorized-by: 1) => [+ corim.$crypto-key-type-\
                                                             choice],
}>,
]
corim.$instance-id-type-choice /= corim.tagged-ueid-type / corim.\
tagged-uuid-type / corim.tagged-bytes / corim.tagged-pkix-base64-key\
-type / corim.tagged-pkix-base64-cert-type / corim.tagged-cose-key-\
type / corim.tagged-key-thumbprint-type / corim.tagged-cert-\
                thumbprint-type / corim.tagged-pkix-asn1der-cert-type
corim.ip-addr-type-choice = corim.ip4-addr-type / corim.ip6-addr-type
corim.ip4-addr-type = bytes .size 4
corim.ip6-addr-type = bytes .size 16
corim.int-range-type-choice = int / corim.tagged-int-range
corim.int-range = [
  min: int / corim.negative-inf,
  max: int / corim.positive-inf,
]
corim.tagged-int-range = #6.564(corim.int-range)
corim.positive-inf = null
corim.negative-inf = null
corim.linked-tag-map = {
  &(linked-tag-id: 0) => corim.$tag-id-type-choice,
  &(tag-rel: 1) => corim.$tag-rel-type-choice,
}
corim.mac-addr-type-choice = corim.eui48-addr-type / corim.eui64-\
                                                            addr-type
corim.eui48-addr-type = bytes .size 6
corim.eui64-addr-type = bytes .size 8
corim.$measured-element-type-choice /= corim.tagged-oid-type / corim\
                                      .tagged-uuid-type / uint / tstr
corim.measurement-map = {
  ? &(mkey: 0) => corim.$measured-element-type-choice,
  &(mval: 1) => corim.measurement-values-map,
  ? &(authorized-by: 2) => [+ corim.$crypto-key-type-choice],
}
corim.measurement-values-map = corim.non-empty<{
    ? &(version: 0) => corim.version-map,
    ? &(svn: 1) => corim.svn-type-choice,
    ? &(digests: 2) => corim.digests-type,
    ? &(flags: 3) => corim.flags-map,
    ? (
                  &(raw-value: 4) => corim.$raw-value-type-choice,
                  ? &(raw-value-mask-DEPRECATED: 5) => corim.raw-\
                                                     value-mask-type,
          ),
    ? &(mac-addr: 6) => corim.mac-addr-type-choice,
    ? &(ip-addr: 7) => corim.ip-addr-type-choice,
    ? &(serial-number: 8) => text,
    ? &(ueid: 9) => corim.ueid-type,
    ? &(uuid: 10) => corim.uuid-type,
    ? &(name: 11) => text,
    ? &(cryptokeys: 13) => [+ corim.$crypto-key-type-choice],
    ? &(integrity-registers: 14) => corim.integrity-registers,
    ? &(int-range: 15) => corim.int-range-type-choice,
    * $$measurement-values-map-extension,
}>
corim.non-empty<M> = M .and ({+ any => any})
corim.oid-type = bytes
corim.tagged-oid-type = #6.111(corim.oid-type)
corim.$raw-value-type-choice /= corim.tagged-bytes / corim.tagged-\
                                                     masked-raw-value
corim.raw-value-mask-type = bytes
corim.tagged-masked-raw-value = #6.563([
    value: bytes,
    mask: bytes,
])
corim.reference-triple-record = [
  ref-env: corim.environment-map,
  ref-claims: [+ corim.measurement-map],
]
corim.stateful-environment-record = [
  environment: corim.environment-map,
  claims-list: [+ corim.measurement-map],
]
corim.svn-type = uint
corim.svn = corim.svn-type
corim.min-svn = corim.svn-type
corim.tagged-svn = #6.552(corim.svn)
corim.tagged-min-svn = #6.553(corim.min-svn)
corim.svn-type-choice = corim.svn / corim.tagged-svn / corim.tagged-\
                                                              min-svn
corim.$tag-id-type-choice /= tstr / corim.uuid-type
corim.tag-identity-map = {
  &(tag-id: 0) => corim.$tag-id-type-choice,
  ? &(tag-version: 1) => corim.tag-version-type,
}
corim.$tag-rel-type-choice /= &(supplements: 0) / &(replaces: 1)
corim.tag-version-type = uint .default 0
corim.tagged-bytes = #6.560(bytes)
corim.triples-map = corim.non-empty<{
    ? &(reference-triples: 0) => [+ corim.reference-triple-record],
    ? &(endorsed-triples: 1) => [+ corim.endorsed-triple-record],
    ? &(identity-triples: 2) => [+ corim.identity-triple-record],
    ? &(attest-key-triples: 3) => [+ corim.attest-key-triple-record],
    ? &(dependency-triples: 4) => [+ corim.domain-dependency-triple-\
                                                             record],
    ? &(membership-triples: 5) => [+ corim.domain-membership-triple-\
                                                             record],
    ? &(coswid-triples: 6) => [+ corim.coswid-triple-record],
    ? &(conditional-endorsement-series-triples: 8) => [+ corim.\
                       conditional-endorsement-series-triple-record],
    ? &(conditional-endorsement-triples: 10) => [+ corim.conditional\
                                         -endorsement-triple-record],
    * $$triples-map-extension,
}>
corim.ueid-type = bytes .size (7 .. 33)
corim.tagged-ueid-type = #6.550(corim.ueid-type)
corim.uuid-type = bytes .size 16
corim.tagged-uuid-type = #6.37(corim.uuid-type)
corim.version-map = {
  &(version: 0) => text,
  ? &(version-scheme: 1) => corim.$version-scheme,
}
corim.digest = [
  alg: int / text,
  val: bytes,
]
corim.digests-type = [+ corim.digest]
corim.integrity-register-id-type-choice = uint / text
corim.integrity-registers = {+ corim.integrity-register-id-type-\
                                        choice => corim.digests-type}
corim.concise-swid-tag = {
  corim.tag-id => text / bstr .size 16,
  corim.tag-version => integer,
  ? corim.corpus => bool,
  ? corim.patch => bool,
  ? corim.supplemental => bool,
  corim.software-name => text,
  ? corim.software-version => text,
  ? corim.version-scheme => corim.$version-scheme,
  ? corim.media => text,
  ? corim.software-meta => corim.one-or-more<corim.software-meta-\
                                                              entry>,
  corim.entity => corim.one-or-more<corim.entity-entry>,
  ? corim.link => corim.one-or-more<corim.link-entry>,
  ? corim.payload-or-evidence,
  * $$coswid-extension,
  corim.global-attributes,
}
corim.payload-or-evidence //= (corim.payload => corim.payload-entry \
                           // corim.evidence => corim.evidence-entry)
corim.any-uri = uri
corim.label = text / int
corim.$version-scheme /= corim.multipartnumeric / corim.\
multipartnumeric-suffix / corim.alphanumeric / corim.decimal / corim\
                                                 .semver / int / text
corim.any-attribute = (corim.label => corim.one-or-more<text> / \
                                              corim.one-or-more<int>)
corim.one-or-more<T> = T / [2*T]
corim.global-attributes = (
  ? corim.lang => text,
  * corim.any-attribute,
  )
corim.hash-entry = [
  hash-alg-id: int,
  hash-value: bytes,
]
corim.entity-entry = {
  corim.entity-name => text,
  ? corim.reg-id => corim.any-uri,
  corim.role => corim.one-or-more<corim.$role>,
  ? corim.thumbprint => corim.hash-entry,
  * $$entity-extension,
  corim.global-attributes,
}
corim.$role /= corim.tag-creator / corim.software-creator / corim.\
aggregator / corim.distributor / corim.licensor / corim.maintainer \
                                                         / int / text
corim.link-entry = {
  ? corim.artifact => text,
  corim.href => corim.any-uri,
  ? corim.media => text,
  ? corim.ownership => corim.$ownership,
  corim.rel => corim.$rel,
  ? corim.media-type => text,
  ? corim.use => corim.$use,
  * $$link-extension,
  corim.global-attributes,
}
corim.$ownership /= corim.shared / corim.private / corim.abandon / \
                                                           int / text
corim.$rel /= corim.ancestor / corim.component / corim.feature / \
corim.installationmedia / corim.packageinstaller / corim.parent / \
corim.patches / corim.requires / corim.see-also / corim.supersedes \
                          / corim.supplemental / -256 .. 64436 / text
corim.$use /= corim.optional / corim.required / corim.recommended / \
                                                           int / text
corim.software-meta-entry = {
  ? corim.activation-status => text,
  ? corim.channel-type => text,
  ? corim.colloquial-version => text,
  ? corim.description => text,
  ? corim.edition => text,
  ? corim.entitlement-data-required => bool,
  ? corim.entitlement-key => text,
  ? corim.generator => text / bstr .size 16,
  ? corim.persistent-id => text,
  ? corim.product => text,
  ? corim.product-family => text,
  ? corim.revision => text,
  ? corim.summary => text,
  ? corim.unspsc-code => text,
  ? corim.unspsc-version => text,
  * $$software-meta-extension,
  corim.global-attributes,
}
corim.path-elements-group = (
  ? corim.directory => corim.one-or-more<corim.directory-entry>,
  ? corim.file => corim.one-or-more<corim.file-entry>,
  )
corim.resource-collection = (
  corim.path-elements-group,
  ? corim.process => corim.one-or-more<corim.process-entry>,
  ? corim.resource => corim.one-or-more<corim.resource-entry>,
  * $$resource-collection-extension,
  )
corim.file-entry = {
  corim.filesystem-item,
  ? corim.size => uint,
  ? corim.file-version => text,
  ? corim.hash => corim.hash-entry,
  * $$file-extension,
  corim.global-attributes,
}
corim.directory-entry = {
  corim.filesystem-item,
  ? corim.path-elements => {corim.path-elements-group},
  * $$directory-extension,
  corim.global-attributes,
}
corim.process-entry = {
  corim.process-name => text,
  ? corim.pid => integer,
  * $$process-extension,
  corim.global-attributes,
}
corim.resource-entry = {
  corim.type => text,
  * $$resource-extension,
  corim.global-attributes,
}
corim.filesystem-item = (
  ? corim.key => bool,
  ? corim.location => text,
  corim.fs-name => text,
  ? corim.root => text,
  )
corim.payload-entry = {
  corim.resource-collection,
  * $$payload-extension,
  corim.global-attributes,
}
corim.evidence-entry = {
  corim.resource-collection,
  ? corim.date => corim.integer-time,
  ? corim.device-id => text,
  ? corim.location => text,
  * $$evidence-extension,
  corim.global-attributes,
}
corim.integer-time = #6.1(int)
corim.tag-id = 0
corim.software-name = 1
corim.entity = 2
corim.evidence = 3
corim.link = 4
corim.software-meta = 5
corim.payload = 6
corim.hash = 7
corim.corpus = 8
corim.patch = 9
corim.media = 10
corim.supplemental = 11
corim.tag-version = 12
corim.software-version = 13
corim.version-scheme = 14
corim.lang = 15
corim.directory = 16
corim.file = 17
corim.process = 18
corim.resource = 19
corim.size = 20
corim.file-version = 21
corim.key = 22
corim.location = 23
corim.fs-name = 24
corim.root = 25
corim.path-elements = 26
corim.process-name = 27
corim.pid = 28
corim.type = 29
corim.entity-name = 31
corim.reg-id = 32
corim.role = 33
corim.thumbprint = 34
corim.date = 35
corim.device-id = 36
corim.artifact = 37
corim.href = 38
corim.ownership = 39
corim.rel = 40
corim.media-type = 41
corim.use = 42
corim.activation-status = 43
corim.channel-type = 44
corim.colloquial-version = 45
corim.description = 46
corim.edition = 47
corim.entitlement-data-required = 48
corim.entitlement-key = 49
corim.generator = 50
corim.persistent-id = 51
corim.product = 52
corim.product-family = 53
corim.revision = 54
corim.summary = 55
corim.unspsc-code = 56
corim.unspsc-version = 57
corim.multipartnumeric = 1
corim.multipartnumeric-suffix = 2
corim.alphanumeric = 3
corim.decimal = 4
corim.semver = 16384
corim.tag-creator = 1
corim.software-creator = 2
corim.aggregator = 3
corim.distributor = 4
corim.licensor = 5
corim.maintainer = 6
corim.abandon = 1
corim.private = 2
corim.shared = 3
corim.ancestor = 1
corim.component = 2
corim.feature = 3
corim.installationmedia = 4
corim.packageinstaller = 5
corim.parent = 6
corim.patches = 7
corim.requires = 8
corim.see-also = 9
corim.supersedes = 10
corim.optional = 1
corim.required = 2
corim.recommended = 3
coswid.tag-id = 0
]]></artwork>
      </section>
      <section anchor="collated-cddl-discovery">
        <name>API Discovery Data Model</name>
        <artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

coserv-well-known-info = {
  version-label => version,
  capabilities-label => [+ capability],
  api-endpoints-label => {+ tstr => tstr},
  ? result-verification-key-label => eat.JC<jwk.JWK_Set, cose.\
                                                        COSE_KeySet>,
}
version-label = eat.JC<"version", 1>
capabilities-label = eat.JC<"capabilities", 2>
api-endpoints-label = eat.JC<"api-endpoints", 3>
result-verification-key-label = eat.JC<"result-verification-key", 4>
version = tstr
capability = {
  media-type-label => cmw.media-type,
  artifact-support-label => artifact-support,
}
media-type-label = eat.JC<"media-type", 1>
artifact-support-label = eat.JC<"artifact-support", 2>
non-empty-array<M> = M .and ([+ any])
artifact-support = non-empty-array<[
    ? "source",
    ? "collected",
    ? "rims",
]>
cmw.start = cmw.cmw
cmw.cmw = cmw.json-cmw / cmw.cbor-cmw
cmw.json-cmw = cmw.json-record / cmw.json-collection
cmw.cbor-cmw = cmw.cbor-record / cmw.cbor-collection / cmw.$cbor-tag
cmw.json-record = [
  type: cmw.media-type,
  value: cmw.base64url-string,
  ? ind: uint .bits cmw.cm-type,
]
cmw.cbor-record = [
  type: cmw.coap-content-format-type / cmw.media-type,
  value: bytes,
  ? ind: uint .bits cmw.cm-type,
]
cmw.tag-cm-cbor<tn, fmt> = #6.<tn>(bytes .cbor fmt)
cmw.tag-cm-data<tn> = #6.<tn>(bytes)
cmw.json-collection = {
  ? __cmwc_t: ~uri / cmw.oid,
  + &(label: text) => cmw.json-cmw,
}
cmw.cbor-collection = {
  ? __cmwc_t: ~uri / cmw.oid,
  + &(label: int / text) => cmw.cbor-cmw,
}
cmw.media-type = text .abnf ("Content-Type" .cat cmw.Content-Type-\
                                                                ABNF)
cmw.base64url-string = text .regexp "[A-Za-z0-9_-]+"
cmw.coap-content-format-type = uint .size 2
cmw.oid = text .regexp "([0-2])((\\.0)|(\\.[1-9][0-9]*))*"
cmw.cm-type = &(
  reference-values: 0,
  endorsements: 1,
  evidence: 2,
  attestation-results: 3,
  appraisal-policy: 4,
)
cmw.Content-Type-ABNF = '

Content-Type   = Media-Type-Name *( *SP ";" *SP parameter )
parameter      = token "=" ( token / quoted-string )

token          = 1*tchar
tchar          = "!" / "#" / "$" / "%" / "&" / "\'" / "*"
               / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~"
               / DIGIT / ALPHA
quoted-string  = %x22 *( qdtext / quoted-pair ) %x22
qdtext         = SP / %x21 / %x23-5B / %x5D-7E
quoted-pair    = "\\" ( SP / VCHAR )

Media-Type-Name = type-name "/" subtype-name

type-name = restricted-name
subtype-name = restricted-name

restricted-name = restricted-name-first *126restricted-name-chars
restricted-name-first  = ALPHA / DIGIT
restricted-name-chars  = ALPHA / DIGIT / "!" / "#" /
                         "$" / "&" / "-" / "^" / "_"
restricted-name-chars =/ "." ; Characters before first dot always
                             ; specify a facet name
restricted-name-chars =/ "+" ; Characters after last plus always
                             ; specify a structured syntax suffix

DIGIT     =  %x30-39           ; 0 - 9
POS-DIGIT =  %x31-39           ; 1 - 9
ALPHA     =  %x41-5A / %x61-7A ; A - Z / a - z
SP        =  %x20
VCHAR     =  %x21-7E           ; printable ASCII (no SP)
'
cmw.$cbor-tag /= cmw.tag-cm-data<1668612070> / cmw.tag-cm-cbor<\
                                         1668612069, cmw.my-evidence>
cmw.my-evidence = {&(eat_nonce: 10) => bytes .size (8 .. 64)}
jwk.JWK = {
  "kty" => tstr,
  ? "use" => tstr,
  ? "key_ops" => [* tstr],
  ? "alg" => tstr,
  ? "kid" => tstr,
  ? "x5u" => tstr,
  ? "x5c" => [* jwk.bytes-b64u],
  ? "x5t" => jwk.bytes-b64u,
  ? "x5t#S256" => jwk.bytes-b64u,
  ? jwk.RSA-Key-Fields,
  ? jwk.EC-Key-Fields,
  ? jwk.Symmetric-Key-Fields,
}
jwk.JWK_Set = [+ jwk.JWK]
jwk.RSA-Key-Fields = (
  "n" => jwk.bytes-b64u,
  "e" => jwk.bytes-b64u,
  ? "d" => jwk.bytes-b64u,
  ? "p" => jwk.bytes-b64u,
  ? "q" => jwk.bytes-b64u,
  ? "dp" => jwk.bytes-b64u,
  ? "dq" => jwk.bytes-b64u,
  ? "qi" => jwk.bytes-b64u,
  )
jwk.EC-Key-Fields = (
  "crv" => tstr,
  "x" => jwk.bytes-b64u,
  "y" => jwk.bytes-b64u,
  ? "d" => jwk.bytes-b64u,
  )
jwk.Symmetric-Key-Fields = ("k" => jwk.bytes-b64u)
jwk.bytes-b64u = tstr .b64u bytes
eat.JC<J, C> = eat.JSON-ONLY<J> / eat.CBOR-ONLY<C>
eat.JSON-ONLY<J> = J .feature "json"
eat.CBOR-ONLY<C> = C .feature "cbor"
cose.COSE_KeySet = [+ cose.COSE_Key]
cose.COSE_Key = {
  1 => tstr / int,
  ? 2 => bstr,
  ? 3 => tstr / int,
  ? 4 => [+ tstr / int],
  ? 5 => bstr,
  * cose.label => cose.values,
}
cose.label = int / tstr
cose.values = any
]]></artwork>
      </section>
    </section>
    <section anchor="openapi-schema">
      <name>OpenAPI Schema</name>
      <t>The OpenAPI schema for the request/response HTTP API described in <xref target="secrrapi"/> is provided below.</t>
      <artwork><![CDATA[
openapi: '3.0.0'

info:
  title: CoSERV HTTP API Binding
  description: CoSERV HTTP API Binding, including request-response
               and discovery
  version: '1.0.0alpha'
paths:
  /coserv/{query}:
    get:
      summary: Query the CoSERV endpoint.
      parameters:
        - in: path
          name: query
          schema:
            type: string
            format: base64url
          required: true
          description: base64url-encoded CoSERV query
      responses:
        '200':
          description: >
            A CoSERV result set has been successfully computed.
          content:
            application/coserv+cose:
              schema:
                type: string
                format: binary
                description: >
                  A CoSERV result set enveloped in a COSE Sign1
                  object.
        '400':
          description: >
            The request was malformed; e.g., the query was not valid
            base64url, or the CoSERV data item could not be
            successfully parsed.
          content:
            application/concise-problem-details+cbor:
              schema:
                type: string
                format: binary
                description: >
                  A CBOR-encoded problem details data item.
        '406':
          description: >
            The server cannot produce a response matching the list
            of acceptable values defined in the request's 'Accept'
            header field.  In particular, the client may have
            specified a CoSERV profile that is not understood or
            serviceable by the server.
          content:
            application/concise-problem-details+cbor:
              schema:
                type: string
                format: binary
                description: >
                  A CBOR-encoded problem details data item.
  /.well-known/coserv-configuration:
    get:
      summary: Retrieve the CoSERV configuration document.
      responses:
        '200':
          description: >
            The CoSERV configuration document has been successfully
            retrieved.
          content:
            application/coserv-discovery+json:
              schema:
                type: string
                format: binary
                description: >
                  A JSON-encoded CoSERV configuration document.
            application/coserv-discovery+cbor:
              schema:
                type: string
                format: binary
                description: >
                  A CBOR-encoded CoSERV configuration document.
]]></artwork>
    </section>
    <section anchor="locating-coserv-services">
      <name>Locating CoSERV Services</name>
      <t>CoSERV facilitates the conveyance of Endorsements and Reference Values to the Verifier.
The question of how the Verifier locates the CoSERV-enabled service(s) that it needs is beyond the scope of this specification.
But it is an important consideration for successful deployments.
When aggregators are used (see <xref target="secaggregation"/>), those might also need to locate upstream CoSERV-enabled services.
This non-normative appendix sets out some illustrative examples of how services might be located.
This list is neither exhaustive nor prescriptive.
Deployments are free to use whatever logistics are sensible.
Note that the goal here is solely one of bootstrapping.
Once the base URI of a suitable service is known, CoSERV provides in-protocol discovery mechanisms, such as the one described in <xref target="secrrapidisco"/>, which cater for the discovery of more specific API endpoints and capabilities.</t>
      <ul spacing="normal">
        <li>
          <t>Some CoSERV-enabled services might exist in locations that are documented publicly by supply chain actors.
A hardware vendor, for example, might document the base URI for the service that endorses their products.
In such a case, the location would be prior knowledge within the Verifier or aggregator that needs to consume the service.
It could be hard-coded, or made available via a configuration file.</t>
        </li>
        <li>
          <t>The locations of suitable services might be carried within the Evidence produced by an Attester.
An example would be a specific claim within an attestation report that is reserved and documented for this purpose.
As part of the verification process, the Verifier would process this claim and use it to locate the required service(s).</t>
        </li>
        <li>
          <t>Services could be located via Manufacturer Usage Description (MUD) files as per <xref target="I-D.ietf-iotops-mud-rats"/>.</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The participants in the "Staircase meeting" at FOSDEM '25:</t>
      <artwork><![CDATA[
@@@@#=+++==+=+++++==+++++++++=========-========================-=======
@@@@@@@@#+*++++=+++****#########+====================================-=
*+@@@@@@%@%@%=***#*########%#####*++===============================-===
%%%%%@@%#@*@@@%%%%##%%%####%%###%#%++++=+=+================--==========
%%%%%%@@@%#%@%@@%###%#%#%%%#%%%#%%####===%%%+==================-=======
%%%%%%%@%%##%%%%%####%++=+=++++*%*=#+*++++++%#=== Mathias Brossard ====
%%%@%%%%%%%%%%%@%%####*##**#***+%%#**=*==*==*%================-========
%%%%%%@%%%%%%%%%#@###**+==%**%###%#+*+++=*+=*%=========================
%%%%%%%%%%%#%%%#*%###%###@#**%##%@#*%#++=+*#*=======================-==
@@@@@@@@%@@@#%#%%####%##%%%**###**%#+++++++++++======================--
%%@@@@@@@@%%#%%#%#==+%##%+%+=**##*%#%@@%%%***+==============-===-===-=:
%-*@%@%%%%#%%%##%==--#**##+*@@%%#*#@@@%%%%%%@%##%%==----======----=---:
%%%@@%#**%%%%%##%---#%@@%%%##**@@@%%%%%%%%@@#***%%=...-== Thomas ==-::+
=###%@@%%%%%%#*+===%#%%##%*#@@@@%%%%%%%%@@%%*+*+#=..:==== Fossati =-:**
+**+#%@@@@@@@@@@@@####*+++*@@@@@%%%@%%%%%#@%=+=--.:====================
+++**+%%@@@@@@%%%%%%%@@+#++#@@%@%%%@%%%%%@#+=-:.:==++++++++++++++++++++
+=++*#%#%@@%%%%%%#%**@+#+-+-%#%*%%%###%%%%#%%++++********++++++++++++++
++++**###=*@%%%%%%%++%*%+*==%##*#%+###@@@@%%%#===++++* Yogesh ++ ++++++
++=+++#**+=@*@@@@%#++#==+=+-%##**#*=+@@@@@%%#*----===+ Deshpande =+=+==
==+**+###++%++**@%*++#====+*##*****@%@#%%##%%*-==========+++++===+=++++
*+++++###++%=++*%#**+%===*++##***++@@%#%@%%%@%###-:::===++=---=-----:==
%++=-=%###+#====****=#===+=*=##*+%*@@%%%%%%@@%*=++#--===*==+=-+==+=-+++
%==----###=%===++*++=%*=+=***@#+***@%%*@%%%##%*##*%%@+=+==+++++++++++++
#*++----##=@*=+=**+*=*++#+=%%#*##%#*+@%@@%%%%%**%@%@@+#+**#*#####***#*+
+*+++@**+#%=%=+++++*=#++#%#+*****##*+@+++%%%%%#@@@@@@=-====-----+**++++
+*+*=%%#**#%=%@%=#++=%+***++*********%%%@%%#-==*+===++===++++++++++++++
#+**++%@%**#%@@%+#+*+%++=+=+*##*****%%%##%==-==**-+====-----:---::::--=
%%***+#%@%**%%=#*#+++%=====+*****#*+*@@+====-==%#*+-.-..-==:==.-.:::...
##**++=@%%#*#%%++#**=%-====+%%+###+++%#=====-+=%%##**+------===::=---::
#***++=+%%%#*%%==#+-+---==+*%%#@@%%++##=====-==%%%%=*++== Paul =:---===
##***+===%%@##@#%#*#=----===+++=+##*+##=====-==%%%%=*=-.. Howard .:-===
##***++==%%%%+**#%%#++-#%====+++%*++==#=====-==%%%%%%+--.:.-::--+=--+=+
##***+=+=%@%%##%##+######=++*=%=---*=+*=====--+%%%%%%+#--:.:--+**#*####
****+++==+%%@@%%%#%*########-%%=-====+*=-===-=+%%%%%%+++++++++*********
*+****++=##%%@@@%%#%+###%###%#@#+=+++==--===-=+%%%%%#+=+++--..====----=
++**+=#++#%%@+#@@@#%%####*#*##@*##%#*++=======+------++=++=--.-----=---
*%++*=+*+%#@#*@*%%#%%*###%#####+##%%=--+======+==:---+=--- Thore -===--
*++##**%=:==-#*+%#%=-=%%#%#%#%%##%*-=====-=--====--*-+-=== Sommer --=-=
-++*=%%*=%++-:#+=:*:####%#%%#%%**++=-==+---*-=*==--**+-===============+
-%#=%%%%%%@%%*%%##*%%%%%%%%%*@#%#++==---------=*+###++========+++++++++
-%@=*%%@%#%%@#@%%%%%%#@++++++@%%@#%%%%%%%---=====++++++++++++++++++++++
-%@=++*#@%#%*@++*#%%%*%*#*##@%+:%##+@@%%#%%#==========+++++++++++++++++
=%%=*==+%###+@%@%%@@%%%%####****+%#%%%%@%*###=:-========++++++++=++++++
==@==-+*##**+#%%%%#%##**###******++*%#%%##%*%#--===========++++++++++++
=-%=+*+-%#**-%@%%%@##**#*******+***%%%%##*%%%%-==++##===== Hannes +++++
+=@+*++++%**=%*+++%##+=@%%@%@@%*@%%%%%%+###+*==+=---%#==== Tschofenig +
+=@=++++*%**+%@+*=%###=-=-=-###%%@%%%#%*%#%%+==--+==%#====+=+++++++++++
*=%%==*+*#**=%@+#@@#==+=%*-----=%%#%%%%##%#%%%@=-+*%*++++++++++++++++++
#*@#+*+++#**=*=++-=+=+*#%%%%%%=-+%%%@@@%##%%%@#=+=+++++++++++++++++++++
****:::::-:::.=*++.=+**#######%%####%####*%%#%%%+++++++++++++++++++++++
*****:-::---==%+++=###+%********%%####%####@%##%%+++++++++++***********
#***##+++%#*++%++=+##*=%++#@@@@@%%%#%#####*%%##%%@*+++++++*************
#####+++*@%#+*@++*+%##+%++===+++++++++==========-=***+*****************
%%%#+***++@%@*@++*%%%%*#+===========================%%+================
%===++*++#***#@**%%%#%#+==========================%%%==================
######*****###*##*##===========================%%%#====================
#######****##*#*##**=====+++=++-----=======++%%#+======================
#########**#***##*#*#=+=======-:::::--====@%##-========================
######*=####**=#####*++++++++=-------+++@%##--=============------------
%%######@@@@@@@%++++=%====%+==----=++%%%#==---=========================
%%%%#%%###@@=**=++=------==#----+++%%%#+====-======================+===
======+##=%@++**=#-:--::---+-+++%%%#===== Ionut Mihalcea ==============
---------=+=*++%#*+=-=::---*++%%%#==================================+==
------------==%==-:::=*=*##%%%%#======*================================
===========-=##------+%%@%%%#+====================== =  /` _____ `\;,
###############*+*****@%%%#+========================   /__(^===^)__\';,
*############++++++#%%%#++==========++==============     /  :::  \   ,;
+++****##*#++=+++@%%%#+==== The Staircase ==========    |   :::   | ,;'
++++++++======++@#%#================================    '._______.'`
++++++++====++@#%#===================================  Dionna Glaze ===
]]></artwork>
      <t>Henk Birkholz and Jag Raman are puppeteering in the shadows.</t>
      <t>The authors would like to thank
Carl Wallace,
Lucas Pardue,
Mark Nottingham
for their reviews and suggestions.
[^rfced]: RFC Editor:</t>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="C." surname="Wallace" fullname="Carl Wallace">
        <organization>Red Hound Software, Inc.</organization>
        <address>
          <email>carl@redhoundsoftware.com</email>
        </address>
      </contact>
      <t>Carl contributed in-depth reviews, resulting in many improvements and clarifications across the document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+y9/37b1pUv+j+fAleZz7XUktQv27HVJlNZlhtP4zi1lOR0
OrkVSIIUapJgAVAym/E8y32W+2R3/d5rA6CkpOmczpzJmdNEILB/rr32+vld
g8GgV+f1PDtJds6K5TivsuQim2fjuiiTKfz/8+WkKKtskS3rKkmXk+RdNs3K
bDnOkm/T+TqrdnrpaFRmN9TAxfm7b3d647TOZkW5OUmqetLrTYrxMl1AD5My
ndaDPKungzKtq8G4qLLyZnDwrFetR4u8qvJiWW9W8Obr88tXSfJJks6rAhrO
l5NslcH/LOudfrKTTXIYXp7O8Y/Xpy/gXzDSndfvLl/t9JbrxSgrT3oTGMRJ
b1wsq2xZrauTpC7XWQ+GedxLyyyFVi+y8brM681O77Yo38/KYr2Cp++yRVFn
yellnVV1WsOQkq/LYpxN1mV2sdN7n23g7clJLxkk704vL/DfaW3v4p9ZWDL8
s7QFu8EF691kyzWMLEke2GOS8JrsfAejzJez5Lf4HT5fpPkcnuNa/gZXdViU
M3yeluNreH5d16vqZH8fX8NH+U021Nf28cH+qCxuq2wfG9jHD2d5fb0e4YLb
Ht3O9ru3Dd+fpzhk15X/bsitDfNiSwtbHg+v68V8p9dL1/V1ARs5SPIlbN/X
w+SL4jYtJ9Avk9PX6XoensGk0mX+V1q/k+S0XMCzjFdoBS8Or+nF36TlYjgu
Ftrq5TB5VVQVfGXNXl4Xi7Ryj+OWv8yXaVmExvn1obz+mzn9jEusXXwxTF7k
5fvrYv5X6+OLbPneP4XXT5JXZbpeXhdALcnF68vQwzW8PBzJy7zRQNZ1Oq61
i4th8rt0kc6t/YvrbJrOc3vK7a//nNfVOjQsbw3prd9M+We/Or8dJm/gzG/S
hbX827zMJ9dp6X6gxk/fvAwNzxb842/SxcS39xLbs6ZeIjHT39zCPB+lozQ5
mxfrSWjrw2a5XOKyrj8MU36FmsSjXZf5aF0jkSSJdHE2TL5L5/N0nMEz7eks
LefRY+rwXTYB8lkDT7sopjVQR9ZPXi/HQ3pDeh/Dl78ps8k1vlfJa9Q/vmRD
IMr4nJ4l3Jv9BJ3kywHwr/oaWMFNnt1WffiPaj2vcf75Eo7xcpPki1VZ3Dg+
O4Yzm0/zMZEdPBqXQGFJfZ0lwE/X+N6w11sW5QJeuCF+8u7V2dMnnx6cJMDV
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
LRyssaxrbIn3cr5Rl5ujSOZ11+wmBYcEYk26O/bGQy61/bchHKlVQtoi6XAZ
KR7W4zJJ2ASfDLRWSUy1OKFZEubSYJiUeqOye7eLnm5AvtMEZ5kkMQm47WEc
yr1BLdT1/uHwsPdFUdUnWsCGODV6gmAYozWWj5aJ9VgwPEnuDfpgr9dZpDhE
zvauMetoKLjh7e96PmD7IX16T39Pv+awhb1e77P4H9Tdzk+SR//2CITWJTru
oQOypcA9+e7VWfLs0+dHSeOjz3qU6mrOLYWOGYyyOiXPX+w70bxJywh1Ds2T
OJPSsaBfKeP/7N8oi5bRLob/1gFP0/mPy7b9U5xt+287lqjZdpVGSZ7Ou2mp
oWqwbyV3kg++YRzSNNidTi0EZ7/vK+cYtREqxaEsx/4PD5509z+smMg0uodC
WsK94/kbxyFw4zuaOrxV7G9RTDqf4eDOL46ePA2bN4a24OnXg+jp+3pD756F
Rx/wwbr67sMXvzv6ejFdfvG72//19cWTx4uD95fj3/7L84Nv8tn8u/y36TVQ
2vLmWfiSmnr94u2Xg7PjF3X9bX4zG8wvyuz04s+r93U9rv46OCxHn47q3315
8+z8fz12w8gn+C1M53An0Iim9/5tbI/uzX9Itoci0X8226M+t7A9XaxzDW5+
mVsu8leF+BN2z19+tffzMkcPuXXYZpD7sSt6P6BpBAihwCWljQcyyvsPqbDS
B3HI/Va0ih8tUfqP55L7cawS/H38P5wy+qfBKfe3RWvBL4/bpAMskGnmyG3j
fMbrPPg0PAQOCv87QHy38PADPoItvn5Es3hxevbkxeHh2enLZ6+eP3/1/OzT
oxcHT85ePX7x/Pzo6cujx49fnh0+e/7q08dPjo6eHT15cnp0+Pz02dOXT08P
np+/evUotIyjGhxby0cHh8fPXrx6dgQNvHj68snToxfnB69Onzw+ffHps4PH
p8enTx/D80+Pzs5enb98+uLpqxdPz18ePXvx4tXZ4eGn567l94SiRYOG9558
+vz48FGb61LineQbcn2FEOvOW99rBDhLduLWrFlKXkcTTxXgASLooEsNsAzJ
kJQcKT+Z2ThExTc0VnhypWVHbFi7HUmnLmL/417feVGDtV/t0cHsj2EfZlB2
Ab7NWk8jzS7OJi7w0kO0UPZuRz6qL4L8KCrOZOWXLB+VFyUYvl3sOC7Ulvhx
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
p4OTLh0IfDTI8NLJ6H8BGeFlbAGcAgA=

-->

</rfc>
