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

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

<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 the environment characteristics of Attesters, such that the relevant artifacts can be obtained from Endorsers and Reference Value Providers.
In turn, the result format allows those Endorsers and Reference Value Providers to package the 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.</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.</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 Arfifacts</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>The 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.
There are three mutually-exclusive methods for defining the environment within a CoSERV query.
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>
      <section anchor="queries">
        <name>Queries</name>
        <t>The purpose of a query is to allow the consumer (Verifier) to specify the artifacts that it needs.
The information that is conveyed in a CoSERV query includes the following:</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>
        <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>
        <t>A CoSERV implementation <bcp14>MAY</bcp14> log the time at which a query was received and fulfilled.
This might sometimes be desirable for transparency or audit purposes.
Implementations are free to define their own transparency events, which can then include timestamps or other suitable information.</t>
      </section>
      <section anchor="result-sets">
        <name>Result Sets</name>
        <t>The result set contains the artifacts that the producer collected in response to the query.
The top-level structure of the result set consists of the following three items:</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 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>
          </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>
    <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[
query = {
  &(artifact-type: 0) => artifact-type
  &(environment-selector: 1) => environment-selector-map
  &(result-type: 2) => result-type
}

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

result-type = &(collected-artifacts: 0)
              / &(source-artifacts: 1)
              / &(both: 2)
]]></sourcecode>
        <t>The meanings of these fields are detailed in the following subsections.</t>
        <section anchor="artifact-type">
          <name>Artifact Type</name>
          <t>The <tt>artifact-type</tt> field is the foremost discriminator of the query.
It is a top-level 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>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>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="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 = {
  result-set
  &(expiry: 10) => tdate ; RFC3339 date
  ? &(source-artifacts: 11) => [ + cmw.cbor-record ]
}

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>
      </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 a 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>
      </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: {
    / rvq / 0: [ ],
    / expiry / 10: 0("2030-12-13T18:30:02Z"),
    / source artifacts / 11: [
      [ "application/vnd.example.refvals", h'afaeadac' ],
      [ "application/vnd.example.refvals", h'adacabaa' ]
    ]
  }
}
]]></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 HTTP <tt>GET</tt> verb 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="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 available via an HTTP GET method with no additional query parameters.</t>
          <t>The response body can be formatted using either JSON or CBOR, governed by standard HTTP content-type negotiation.
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 an 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 body <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" ]>
]]></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 artifact categories are <tt>source</tt> and <tt>collected</tt>, as described in <xref target="secartifacts"/>.
Each profile is paired with a non-empty set of artifact categories, allowing the service implementation to indicate whether it supports the retrieval of source artifacts, collected artifacts, or both.
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>In the following examples, the contents of bodies are informative examples 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

Body (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

Body (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 HTTP <tt>Accept</tt> header 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 response body 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"

Body (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

Body (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

Body (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>
        <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 HTTP <tt>Cache-Control</tt> header 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>The use of safe HTTP methods.
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>
          <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 result set payload.</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 an independent trust anchor.</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>
    <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>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </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="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="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="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="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="20" month="October" year="2025"/>
            <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-09"/>
        </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="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="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="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>
        <referencegroup anchor="STD98" target="https://www.rfc-editor.org/info/std98">
          <reference anchor="RFC9111" target="https://www.rfc-editor.org/info/rfc9111">
            <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>
        </referencegroup>
        <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="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="25" month="February" year="2026"/>
            <abstract>
              <t>   In the IETF Remote Attestation Procedures (RATS) architecture, a
   Verifier accepts Evidence and, using Appraisal Policy typically with
   additional input from Endorsements and Reference Values, generates
   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-08"/>
        </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>
        <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>
      </references>
    </references>
    <?line 1643?>

<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 = {
  &(artifact-type: 0) => artifact-type,
  &(environment-selector: 1) => environment-selector-map,
  &(result-type: 2) => result-type,
}
artifact-type = &(endorsed-values: 0) / &(trust-anchors: 1) / &(\
                                                 reference-values: 2)
result-type = &(collected-artifacts: 0) / &(source-artifacts: 1) / &\
                                                            (both: 2)
results = {
  result-set,
  &(expiry: 10) => tdate,
  ? &(source-artifacts: 11) => [+ cmw.cbor-record],
}
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
]]></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",
]>
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>
  </back>
  <!-- ##markdown-source:
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
QTQdxxVqIe5sYG3mU7iOUydr42mb5ezUFiFCj8n1WiiUZBpQcshTcLLjCozY
yY6IhbdhAJ2KLO+qAnA9MkVHIXXd8JbC45UMswCZ6TXjOrMWru+FndutudOl
TxnSa2EYbuwRa44PfX+HNeM0AL1vduF3Q+5bkw/b4Ibfm76xEWuyaK4/kLmK
/7w3/zKNUOeyRsPu7K6vnN9dX9/Y2Nzc2roL+AIvYKEjIG9Mz9a8zwViNHUY
vCMnKPyOntPabWP2D+NlbjqNye2wY5pey7/ekgABv7uyatdRYw172IC/6roC
muA1yCqGMGbJu8qgLB4QDrWSdPDDYcm3f07urlVhyimIy63aYISH8XCWndzw
FFPZXsyTXgsE1XuP2c6hBvoToywZ0P6boJjZvx9ug2IPHj58eP/B7s7O7n8R
koVvu7ecsefRs3UfJr+18ezJzv6TZ+ubW4eomtzf3z58uPPs4QEqJp8827+7
ir18++3RU2cl14LO4Y1ovQl/sT3NqvuoVEktCLSB6b/zglErAjBiI+NnvOSG
YSrcckfETmwAXqCsE6ci9wtIPibK8Mj+Ro3sOwaZBaQf6w6oUzRndNYj30yF
Uf5nH7tPc9zMStbwuXvidnaIbm8+Pdx/+uTw8Bn+DVj4Fsf89tDDwx9aTiDQ
Whmi9RjehLDreGZaYrI9BLVa6n8Fr2V2nZ362+t+JzbFHxWnsfdCLUN+M52n
JI5W3001My1yyqQ+0JNE5sSWbELOPefE1K0JNErdhCCecKQgajrAnTguvdiS
J2pmYux1Yv4z99gUBFfMjW7A2vPMBYtWYg8ZrIM1+v58jeve5S+19QlLyS+a
8I2HqzY0YlqkSg3wGi2YXzUhEaa6Cb2jkI+U12DSatROmoZXpFoAVcvdmJzJ
6NDYcrnH1j+wq5oRBWUrPxA6VQvI2GocOZ240QJTKmh+NBfW1GXDV8GP2FqU
YO5TUzRDe4h6BWHokaMlbGXrLX8Tf4d0JJBfa0YhSvTFzEKHs4MhHZTB4v4A
gERUz7zedMmkP0nq0H9w08zd2TszF7rqNWvp+JasQ7f25UZzlswUcYautbZl
yIidjd5mb6tT71F63djderDdeHXdbA1M9mXG+LCzs7WyWfdxvl4IoLdB/V/8
VnZoA+a4vtLZXN9ajzY2o42tk40He1vre+ub/+is3szcpKWfMgPPnQ34dNXq
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
ccfH4n8zTbHrLbwBAA==

-->

</rfc>
