<?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.36 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-rats-coserv-06" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="CoSERV">Concise Selector for Endorsements and Reference Values</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-rats-coserv-06"/>
    <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="May" day="11"/>
    <area>Security</area>
    <workgroup>Remote ATtestation ProcedureS</workgroup>
    <keyword>RATS</keyword>
    <keyword>attestation</keyword>
    <keyword>endorsement</keyword>
    <keyword>reference value</keyword>
    <abstract>
      <?line 108?>

<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 114?>

<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.
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 three artifact types.
These correspond to the three categories of endorsement artifact that can be identified natively in the RATS architecture:</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>
        </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>
      <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.
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 or Trust Anchor.
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 Attester's environment.
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>
      <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 or trust anchors.
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"/>.
Each CoMID triple will demonstrate the association between an environment matching that of the CoSERV query, and a single artifact such as a reference value, trust anchor or endorsed value.
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="I-D.ietf-rats-msg-wrap"/>.</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>
    </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)

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 three permissible values are <tt>trust-anchors</tt> (codepoint 1), <tt>endorsed-values</tt> (codepoint 0) and <tt>reference-values</tt> (codepoint 2).</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: collectect-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

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 ]
)

;
; 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>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="I-D.ietf-rats-msg-wrap"/>, 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>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>For error responses (4xx or 5xx status codes), the <tt>Content-Type</tt> header field <bcp14>MUST</bcp14> be <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>
        </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 any media type other than these two options in its HTTP <tt>Accept</tt> header, the implementation <bcp14>SHOULD</bcp14> respond with an HTTP 406 (Not Acceptable) status code.
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).
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>
            </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 URL for making HTTP API calls.
The field is a map whose keys are the symbolic names of the APIs, and whose values are the URL 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 URL 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>
            </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

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}"
  },
  "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

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}"
  },
  / result-verification-key / 4: [
    {
      / kty / 1: 2,
      / alg / 3: -7,
      / crv / -1: 1,
      / x / -2: h'1A2B3C4D',
      / y / -3: h'5E6F7A8B',
      / kid / 2: h'ABCDEF1234'
    }
  ]
}
]]></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 URL 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 URL query parameters.</t>
          <t>Clients <bcp14>MUST</bcp14> set the <tt>Accept</tt> header field to a suitably-profiled <tt>application/coserv+cose</tt> or <tt>application/coserv+cbor</tt> media type.</t>
          <t>Endpoint implementations <bcp14>MUST</bcp14> respond with an HTTP status code and content according to one of the subheadings below.</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 / 2 : "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="failure-to-validate-query-400">
              <name>Failure to Validate Query (400)</name>
              <t>This response indicates that the supplied query is badly formed.</t>
              <t>Example HTTP request:</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>
              <t>Example HTTP response:</t>
              <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>
            </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 receiving endpoint implementation.</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>
          <section anchor="too-many-requests-429">
            <name>Too Many Requests (429)</name>
            <t>A server could apply rate limiting to requests received from clients.
This is a common practice for services that require significant processing power to generate a response, such as a CoSERV endpoint.
If this is the case, and a client exceeds their request quota, the server can return a 429 (Too Many Requests) response.
The response headers <bcp14>MAY</bcp14> include a <tt>Retry-After</tt> header field indicating how long the client should wait before making a new request.</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 429 Too Many Requests
Content-Type: application/concise-problem-details+cbor
Retry-After: 120

Content (in CBOR Extended Diagnostic Notation (EDN))

{
  / title /  -1: "Too many requests",
  / detail / -2: "You're doing that too often! Try again in 2 minutes",
}
]]></sourcecode>
          </section>
        </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 URL 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.</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>
          </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.</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>
          </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.</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="576" width="576" viewBox="0 0 576 576" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 40,64 L 40,560" fill="none" stroke="black"/>
                  <path d="M 200,64 L 200,96" fill="none" stroke="black"/>
                  <path d="M 224,112 L 224,560" fill="none" stroke="black"/>
                  <path d="M 248,64 L 248,96" fill="none" stroke="black"/>
                  <path d="M 408,80 L 408,560" 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,384 L 408,384" fill="none" stroke="black"/>
                  <path d="M 224,432 L 248,432" fill="none" stroke="black"/>
                  <path d="M 232,464 L 248,464" fill="none" stroke="black"/>
                  <path d="M 48,544 L 224,544" 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,432 C 256.83064,432 264,439.16936 264,448" fill="none" stroke="black"/>
                  <path d="M 248,464 C 256.83064,464 264,456.83064 264,448" 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,464 228,458.4 228,469.6" fill="black" transform="rotate(180,232,464)"/>
                  <polygon class="arrowhead" points="240,384 228,378.4 228,389.6" fill="black" transform="rotate(180,232,384)"/>
                  <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,544 44,538.4 44,549.6" fill="black" transform="rotate(180,48,544)"/>
                  <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(obB4I3RhZ..)</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="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="292" y="372">#6.18([...])</text>
                    <text x="316" y="420">store(K=obB4I3RhZ..,</text>
                    <text x="340" y="436">V=#6.18([...],</text>
                    <text x="320" y="452">TTL=3600)</text>
                    <text x="72" y="484">200</text>
                    <text x="100" y="484">OK</text>
                    <text x="76" y="500">C-C:</text>
                    <text x="148" y="500">max-age=600,</text>
                    <text x="152" y="516">s-maxage=3600</text>
                    <text x="108" y="532">#6.18([...])</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
client A             cache.example          coserv.example
                         .---.                   .-.
    o                   |     |                 |   |
    |                   |'---'|                  '+'
    |                   |     |                   |
    |                    '-+-'                    |
    |   GET ogB4I3RhZ..    |                      |
    +--------------------->| lookup(obB4I3RhZ..)  |
    |                      +---.                  |
    |                      |    |                 |
    |                      |<--'                  |
    |                      | MISS                 |
    |                      |                      |
    |                      |   GET ogB4I3RhZ..    |
    |                      +--------------------->|
    |                      |                      +---.  compute
    |                      |                      |    | result
    |                      |                      |<--'  set
    |                      |  200 OK              | (expiry = now + 1h)
    |                      |  C-C: max-age=600,   |
    |                      |       s-maxage=3600  |
    |                      |  #6.18([...])        |
    |                      |<---------------------+
    |                      |                      |
    |                      | store(K=obB4I3RhZ.., |
    |                      +---.   V=#6.18([...], |
    |                      |    |  TTL=3600)      |
    |                      |<--'                  |
    |  200 OK              |                      |
    |  C-C: max-age=600,   |                      |
    |       s-maxage=3600  |                      |
    |  #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.
Client B operates a local cache, where it stores a copy of the response.</t>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="416" width="472" viewBox="0 0 472 416" 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,400" 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,400" fill="none" stroke="black"/>
                  <path d="M 248,64 L 248,96" fill="none" stroke="black"/>
                  <path d="M 408,80 L 408,400" 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,304 L 224,304" fill="none" stroke="black"/>
                  <path d="M 40,352 L 64,352" fill="none" stroke="black"/>
                  <path d="M 48,384 L 64,384" 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,352 C 72.83064,352 80,359.16936 80,368" fill="none" stroke="black"/>
                  <path d="M 64,384 C 72.83064,384 80,376.83064 80,368" 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,384 44,378.4 44,389.6" fill="black" transform="rotate(180,48,384)"/>
                  <polygon class="arrowhead" points="56,304 44,298.4 44,309.6" fill="black" transform="rotate(180,48,304)"/>
                  <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(obB4I3RhZ..)</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=480,</text>
                    <text x="152" y="260">s-maxage=3480</text>
                    <text x="80" y="276">Etag:</text>
                    <text x="128" y="276">"xyz"</text>
                    <text x="108" y="292">#6.18([...])</text>
                    <text x="132" y="340">store(K=obB4I3RhZ..,</text>
                    <text x="156" y="356">V=#6.18([...],</text>
                    <text x="132" y="372">TTL=480)</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
client B             cache.example          coserv.example
                         .---.                   .-.
   .-.                  |     |                 |   |
  |   |                 |'---'|                  '+'
  |'-'|                 |     |                   |
   '+'                   '-+-'                    |
    |   GET ogB4I3RhZ..    |                      |
    +--------------------->| lookup(obB4I3RhZ..)  |
    |                      +---.                  |
    |                      |    |                 |
    |                      |<--'                  |
    |                      | HIT                  |
    |  200 OK              |                      |
    |  C-C: max-age=480,   |                      |
    |       s-maxage=3480  |                      |
    |  Etag: "xyz"         |                      |
    |  #6.18([...])        |                      |
    |<---------------------+                      |
    |                      |                      |
    | store(K=obB4I3RhZ.., |                      |
    +---.   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 is 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 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="416" width="480" viewBox="0 0 480 416" 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,400" 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,400" fill="none" stroke="black"/>
                  <path d="M 248,64 L 248,96" fill="none" stroke="black"/>
                  <path d="M 408,80 L 408,400" 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,384 L 224,384" 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,384 44,378.4 44,389.6" fill="black" transform="rotate(180,48,384)"/>
                  <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(obB4I3RhZ..)</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="140" y="356">max-age=0,</text>
                    <text x="152" y="372">s-maxage=3060</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
client B              cache.example          coserv.example
                         .---.                   .-.
   .-.                  |     |                 |   |
  |   |                 |'---'|                  '+'
  |'-'|                 |     |                   |
   '+'                   '-+-'                    |
    | lookup(obB4I3RhZ..)  |                      |
    +---.                  |                      |
    |    |                 |                      |
    |<--'                  |                      |
    | HIT (stale)          |                      |
    |                      |                      |
    | GET ogB4I3RhZ..      |                      |
    | If-None-Match:"xyz"  |                      |
    +--------------------->|                      |
    |                      +---.                  |
    |                      |    |                 |
    |                      |<--'                  |
    |                      | HIT                  |
    |  304 Not modified    |                      |
    |  C-C: max-age=0,     |                      |
    |       s-maxage=3060  |                      |
    |<---------------------+                      |
    |                      |                      |
]]></artwork>
            </artset>
          </section>
        </section>
      </section>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t><cref anchor="rfced">RFC Editor:</cref> 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="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>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t><cref anchor="rfced_1">RFC Editor:</cref> 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"/>
    <displayreference target="STD97" to="HTTP-CACHING"/>
    <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="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="2" month="March" 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-10"/>
        </reference>
        <reference anchor="I-D.ietf-rats-msg-wrap">
          <front>
            <title>RATS Conceptual Messages Wrapper (CMW)</title>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Ned Smith" initials="N." surname="Smith">
              <organization>Independent</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Linaro</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>University of Applied Sciences Bonn-Rhein-Sieg</organization>
            </author>
            <author fullname="Dionna Glaze" initials="D." surname="Glaze">
              <organization>Google LLC</organization>
            </author>
            <date day="11" month="December" year="2025"/>
            <abstract>
              <t>   The Conceptual Messages introduced by the RATS architecture (RFC
   9334) are protocol-agnostic data units that are conveyed between RATS
   roles during remote attestation procedures.  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.

   This document introduces the Conceptual Message Wrapper (CMW) that
   provides a common structure to encapsulate these messages.  It
   defines a dedicated CBOR tag, corresponding JSON Web Token (JWT) and
   CBOR Web Token (CWT) claims, and an X.509 extension.

   This allows CMWs to be used in CBOR-based protocols, web APIs using
   JWTs and CWTs, and PKIX artifacts like X.509 certificates.
   Additionally, the draft defines a media type and a CoAP content
   format to transport CMWs over protocols like HTTP, MIME, and CoAP.

   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, evolving message serialization formats without breaking
   compatibility, and avoiding the need to redefine how messages are
   handled within each protocol.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-msg-wrap-23"/>
        </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="I-D.ietf-rats-endorsements">
          <front>
            <title>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>Linaro</organization>
            </author>
            <date day="2" month="March" year="2026"/>
            <abstract>
              <t>   In the IETF Remote Attestation Procedures (RATS) architecture, 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 extends RFC9334 to
   provide further details on Reference Values and Endorsements, as
   these topics were outside the scope of the RATS charter when RFC9334
   was developed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-endorsements-09"/>
        </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="28" month="November" year="2025"/>
            <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-02"/>
        </reference>
      </references>
    </references>
    <?line 1946?>

<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,
  2 => "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)
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)
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],
  )
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 URL 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 URL 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
for their reviews and suggestions.</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:
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
j03YEX6pal2ZifO4EAcOx3AsMLYYK1botga5N9auxGPDPa+GbShgecIXPzbW
J7w/v2jvbzLZ9PlYFljFRNLpAb9TsmDhMoooruZ3lGcm4zW4XJ0NlKg5XRDU
ztDpWe3NevHIYb2DC0u8//dAtVq6lZ2MW+Ry1lE0qcko5vRjtM3OlyXYa+qy
5W4WpolaVwv0n4ZiiMz0oiigG1fw/53s2HWMOCL8nvzacspsIgRuFjqcHwwJ
lgyWjMawSUSe3OtdS8/CSVKH4YPrZm5nb2YuqDH4rKPjG/J4g0bLnfYsmXvl
EP+trmXIiH1E33f6zR6l1537dz6723r1rv01SEMXOcPDvXt3NnabkUDv1m6Q
D53Sf/FbOaEdmOP2Rh9rYcU7u/HOneOdz/bubO9t7/6tv3k9F5pVYa56vHc+
y5w1iYxSJSzuMvabfG9fsoxrIlNKFGs5hSB2PKWas5IV3cTQ27SXXA2MkmCo
Fkn4EUBiaPfAeO1WXvAmYlaXI0SbjB8Ra2H2DFsd4BpvISAjLpEw5j948W3E
VtgqTM8zYOsbYKZG/pMk2pgnE6x3uekW7udMPFvfKvAu8slQEQ6b+av+fx+h
9H+a3mMtTt7S7KRbV19mHbMtbAJsWgb2WiAaRIDpTxPg0JPxLcuY3qwltEpG
SXKri0P9LyJKHJ81s3WFCWZ9/rmzpAp5z3ZiMWmKDF7DyndFbjHP4TSTphqD
8QjxWC0qWSzNzbUVnNK/kaWRDHOUSW4ldTWSskxWUrKReTq8MrR5ZZrM4sui
RL/LDHqWOjpso6Z2rnCvYD3kKWdpnRLqU8ts1RHr3k6t909lrf7Vpbe1N/+e
x43rZmp5r+B2wtefoIXHIDS4msktxVSDKzrefe+OR6MbdLz7ATMej13HPY9p
b8zUfBTtv3qmngDigpIsMjHfVq3kMGh+1vhkMZoLle7OCiO5OQVjpW+5hvXE
1Ms4rcNy29xU3EwqMbDCJKuhzefATrtsf8tqoJenJCRO84L8K6SqJXknjZez
pKRlMrFy+d+LUnI94jtdsefRXB5Jl7qYCueqU453BPAsG1YS4CoF5Dnf8N9B
b5VlNtN0y4ILTpdcQiTROu62OiR7SpDdVcNVyfhNmUektilWEI59BWFct1tf
VHDm5ZLjkmQHtCWXunQhxn6dkjK+4q2x/tpjQGzouJxnc6z+6c3/6ppvi5dX
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
gkAJpzr7Aah05FaqujS1kProo/DccsJdte4w8+xbXAh+K9r4uGTrfYvA1fCS
+Pj6RnkhbdCkdUzC5o5fLuyprQyVrqiE1b5iPYOh0wdqNuo01NYNJ2aueEof
7ppfX/nrA/k6w7+JxC3aLyRkg+ErsDK6gFzcpKgJ57EErFPpUvAK+wA1Wx9r
rSK4SX8hUdPuG70vgn7LpGrzrkooZzCAVX88W44Cl6BNtv0tXdDbIzOkqODB
ltPCtsehH5hgTU/lAkm3XeZJZtR8qEZdtLPBhwOezTKdzezTYh3drRHWfSaL
a7fqH0cr18q28sZm1wv7+GSKwKTURpo8mZJITHRNNwmT1ne0FFzobhIwBHLG
7eord1zEnFLXhg7+xLNvvtZOTcuWe9t41ZvH0S1Dbc7dBX31TD+84rcoVM7X
q0f8sSN4i0plU9jcZvY2Y6vbx7fU/QovlW1k/d7B56W64XzXvDiHYXqXyjru
qp6VObVXOCotVSyjqUY7sc7R6wpsGK3d9bulK6wh0Phm/JkJRKzpGYw+zJaK
u97auo93bQ4OPNtuFyfrvrvl0VEVzNIpsilQWWIRxQN1UqTTFUFrmaFtrbce
UXGjtVTJyt5VMfL3j91MY1l52SE9cz68tC/uyvvOJqRw6pSqD2bOULoqVQ0y
fYfT1StMs6EeCE2x761o5KqJrq5HqvnQ0su/aKUOkuUA2J5Qyd8/Wd5xyknB
y6eoxWUxU5ue3Mxsuijd3WW5+4Jf5xzKMB4vH9r5MleCNMoLmLaGeAUsxvwy
rrLUaJGpwvgPde2NinluSOE3VuNzlMms+DRQ8NbhDohndv3IyIV9XF370gua
iqoHuHlVVxHzA9Xkq2YsrK78mUttpFaWdVJsXg4n52BDwZ8SgjE/OY7S43c1
TrZhVJUnzupv6NzTe2H6buIjL4XJKMsECzR8To8zeDZQW3/yFoicEiYG97TG
LLoYGDWfzccIMjvoWXvcflbGt1J1iXw4vcr9agr7a82tL+vTBt+COKv3RMUw
YZf1sAgtdu+OjK0dWBnvk67LR5USMPNIr4et9Be4fMZrzj/vpy+U3a2okHxd
ptU5x/cNZqKqKz9OB9WjMsy4yssrqUXsJigBfAUF/fKCEaW5S1LvZFhReO/N
yail4tNd67keK52ZLHisWzcxP8ICzpw0Jwymnumemp6K4bWmJzXmbCioG3Na
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
/PfZRa/on3Xoyd/T/gC/VjL5P3EDMfBPRQIA

-->

</rfc>
