<?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-05" 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-05"/>
    <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="March" day="02"/>
    <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 anchor="aggregators-1">
        <name>Aggregators</name>
        <t>Aggregators (as described in <xref target="secaggregation"/>) can pose a specific privacy risk.
This is because they necessarily correlate inputs from multiple supply-chain actors, and can observe repeated CoSERV queries over time.
In doing so, an aggregator might be able to infer details about the composition of an Attester's hardware, firmware or software components.
Such details would not be accessible to individual supply-chain actors implementing the Endorser or Reference Value Provider roles.
There is consequently a risk that such inferred details could be misused to create a covert channel.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t><cref anchor="rfced_1">RFC Editor:</cref> replace "RFCthis" with the RFC number assigned to this document.</t>
      <section anchor="media-types-registrations">
        <name>Media Types Registrations</name>
        <t>IANA is requested to add the following media types to the "Media Types" registry <xref target="IANA.media-types"/>.</t>
        <table anchor="tab-mc-regs">
          <name>CoSERV Media Types</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Template</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>coserv+cbor</tt></td>
              <td align="left">
                <tt>application/coserv+cbor</tt></td>
              <td align="left">
                <xref target="secdatamodel"/> of RFCthis</td>
            </tr>
            <tr>
              <td align="left">
                <tt>coserv+cose</tt></td>
              <td align="left">
                <tt>application/coserv+cose</tt></td>
              <td align="left">
                <xref target="signed-coserv"/> of RFCthis</td>
            </tr>
            <tr>
              <td align="left">
                <tt>coserv-discovery+cbor</tt></td>
              <td align="left">
                <tt>application/coserv-discovery+cbor</tt></td>
              <td align="left">
                <xref target="secrrapidisco"/> of RFCthis</td>
            </tr>
            <tr>
              <td align="left">
                <tt>coserv-discovery+json</tt></td>
              <td align="left">
                <tt>application/coserv-discovery+json</tt></td>
              <td align="left">
                <xref target="secrrapidisco"/> of RFCthis</td>
            </tr>
          </tbody>
        </table>
        <section anchor="applicationcoservcbor">
          <name><tt>application/coserv+cbor</tt></name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>coserv+cbor</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>"profile" (CoSERV profile in string format.  OIDs must use the dotted-decimal notation.)</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>binary (CBOR)</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t><xref target="seccons"/> of RFCthis</t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>RFCthis</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Verifiers, Endorsers, Reference Value Providers</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>The syntax and semantics of fragment identifiers are as specified for "application/cbor". (No fragment identification syntax is currently defined for "application/cbor".)</t>
            </dd>
            <dt>Person &amp; email address to contact for further information:</dt>
            <dd>
              <t>RATS WG mailing list (rats@ietf.org)</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>none</t>
            </dd>
            <dt>Author/Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
            <dt>Provisional registration:</dt>
            <dd>
              <t>no</t>
            </dd>
          </dl>
        </section>
        <section anchor="applicationcoservcose">
          <name><tt>application/coserv+cose</tt></name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t><tt>application</tt></t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t><tt>coserv+cose</tt></t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>n/a (cose-type is explicitly not supported, as it is understood to be "cose-sign1")</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>"profile" CoSERV profile in string format.
OIDs must use the dotted-decimal notation.
Note that the <tt>cose-type</tt> parameter is explicitly not supported, as it is understood to be <tt>"cose-sign1"</tt>.</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>binary</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t><xref target="seccons"/> of RFCthis</t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>RFCthis</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Verifiers, Endorsers, Reference Value Providers</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Person and email address to contact for further information:</dt>
            <dd>
              <t>RATS WG mailing list (rats@ietf.org)</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>none</t>
            </dd>
            <dt>Author/Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
            <dt>Provisional registration?</dt>
            <dd>
              <t>no</t>
            </dd>
          </dl>
        </section>
        <section anchor="applicationcoserv-discoverycbor">
          <name><tt>application/coserv-discovery+cbor</tt></name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>coserv-discovery+cbor</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>binary (CBOR)</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t><xref target="seccons"/> of RFCthis</t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>RFCthis</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Verifiers, Endorsers, Reference Value Providers</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>The syntax and semantics of fragment identifiers are as specified for "application/cbor". (No fragment identification syntax is currently defined for "application/cbor".)</t>
            </dd>
            <dt>Person &amp; email address to contact for further information:</dt>
            <dd>
              <t>RATS WG mailing list (rats@ietf.org)</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>none</t>
            </dd>
            <dt>Author/Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
            <dt>Provisional registration:</dt>
            <dd>
              <t>no</t>
            </dd>
          </dl>
        </section>
        <section anchor="applicationcoserv-discoveryjson">
          <name><tt>application/coserv-discovery+json</tt></name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>coserv-discovery+json</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>binary (JSON is UTF-8-encoded text)</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t><xref target="seccons"/> of RFCthis</t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>RFCthis</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Verifiers, Endorsers, Reference Value Providers</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>The syntax and semantics of fragment identifiers are as specified for "application/json". (No fragment identification syntax is currently defined for "application/json".)</t>
            </dd>
            <dt>Person &amp; email address to contact for further information:</dt>
            <dd>
              <t>RATS WG mailing list (rats@ietf.org)</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>none</t>
            </dd>
            <dt>Author/Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
            <dt>Provisional registration:</dt>
            <dd>
              <t>no</t>
            </dd>
          </dl>
        </section>
      </section>
      <section anchor="coap-content-formats">
        <name>CoAP Content-Formats</name>
        <t>IANA is requested to register the following Content-Format IDs in the "CoAP Content-Formats" registry, within the "Constrained RESTful Environments (CoRE) Parameters" registry group <xref target="IANA.core-parameters"/>:</t>
        <table align="left">
          <name>New CoAP Content Formats</name>
          <thead>
            <tr>
              <th align="left">Content-Type</th>
              <th align="left">Content Coding</th>
              <th align="left">ID</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">application/coserv+cbor</td>
              <td align="left">-</td>
              <td align="left">TBD1</td>
              <td align="left">
                <xref target="secdatamodel"/> of RFCthis</td>
            </tr>
            <tr>
              <td align="left">application/coserv+cose</td>
              <td align="left">-</td>
              <td align="left">TBD2</td>
              <td align="left">
                <xref target="signed-coserv"/> of RFCthis</td>
            </tr>
          </tbody>
        </table>
        <t>If possible, TBD1 and TBD2 should be assigned in the 256..9999 range.</t>
      </section>
      <section anchor="well-known-uri-for-coserv-configuration">
        <name>Well-Known URI for CoSERV Configuration</name>
        <t>IANA is requested to register the following in the "Well-Known URIs" registry <xref target="IANA.well-known-uris"/>:</t>
        <t>URI suffix: coserv-configuration</t>
        <t>Change controller: IETF</t>
        <t>Specification document: RFCthis</t>
        <t>Related information: N/A</t>
      </section>
    </section>
  </middle>
  <back>
    <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="2" month="March" year="2026"/>
            <abstract>
              <t>   In the IETF Remote Attestation Procedures (RATS) architecture, a
   Verifier accepts Evidence and uses Appraisal Policy for Evidence,
   typically with additional input from Endorsements and Reference
   Values, to generate Attestation Results in formats that are useful
   for Relying Parties.  This document illustrates the purpose and role
   of Endorsements and discusses some considerations in the choice of
   message format for Endorsements in the scope of the RATS
   architecture.

   This document does not aim to define a conceptual message format for
   Endorsements and Reference Values.  Instead, it extends RFC9334 to
   provide further details on Reference Values and Endorsements, as
   these topics were outside the scope of the RATS charter when RFC9334
   was developed.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-iotops-mud-rats-02"/>
        </reference>
        <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 1651?>

<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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
qgy2rmnwMPMPWuop4uYtSCS0N6aZHHmapvhe8+YRdhU2uQYPYwxy0QHMLh85
mYWEYiTmUvZuRLoPeHPc2ZwTd9rlIdGxuOvQAE2fkpGjCDB3Zn95QLlvdGYn
FjHJGXJIuZbnQxODI6jimnQz0wvNx6QhVUFfyAXNLx4y3gob5PiUI8sJhMBz
/0eUQ7I+QfrgcEr2coKP6Di7FOaJRkdxkoHKRJZ7eOKj/qkeI4LmgPKjsbPq
1ibm3GLrtlCVU6yj/ZZaYwPAp3nZfqMJKIVnCO5DOs89KQ/+gooWa9km1pQw
L4J7ia7DTtIBuSm9vLrIDzs144XDtRmONO2bxvKYUFQzIb1bgG+YD4UjIA2Q
3ECymAEmukCCSDX9XlR23lq4w85YDxA5mppMWzoF1s4IfUpL/R6ENJYKBGGJ
gBoc4497Ft+04n3tYx3Bledls6Eo1mPMimQzMowaO2hXmtaDEmLeqnwc1BKc
7/YTbPi+8zCibe8a0KMII9DvRky9xihySl1oqW2fnXnoYYrEvwD0u2RA4iGZ
TZKcg6AaKFVcYY1SJ9dKJgeViSD0xESpIJs+HAWQI4dpSTee8AOa0vzduy8x
88vmJgZURE+clOg9zgmMFEiqKYlg4S1opF79nPsPGEBNa4yEqtBEDqRZSpLq
ctwZKvlz/3g01XnskeTljjv9OI77rc/79FHR8u5X57/h81877e/g2S0Y6lbL
m1uf3Vr+0ZKhVg0U3Yo/i2+1vbDfoLZRtIzn/+j3l3al33wWt/15+Csc2OJi
PlsrBqav9ZVz465aIL7ym1/b363+5ou4DQrXjPP86fHxR8ztg8dp34Lr4Na2
BR8xN9kCuQY/ZnH8H75DPuZ73hsuxLrqY/bYCB9L5VZKynAVfRZtna9f089h
fGh43gd3Njd70Q13Ve/sBzvw1fXfSF2vfr//Zt08vg5LW/589vtjHN13a18/
cI5q72Yn9dsHzrKu+UZP6snJMwLZ+k3mds1JbUeC9q70m9YNv+Yb+hNu+DXf
tG74ym+WbPhN5ha+XPYNGQ8OatRoY8w6S8Ug3p7hj21lTFEb7/B+fLk+onSp
TlUB4X0cCbfn8UTjNDdSjAgT51ndJUVKrTxgK4fvanJJ3BrZoCVXHuoB74il
J5Ubs0IH8buruE711GRK11KFECvE0AJQlQY8Q43haQmn6GX9DHRvBhb9spoI
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
r9o5EcXbWYxutR4wFZbZbNe+NL1mszv2aaet5QNPF7fbafkuaGPEClwDOT4G
E2IRyVuWaRp+KodumuX73nc5BapfAu7kZ8TVJG/9BhzMrQ3edNqHUxZudy0Y
V7k5txusfTqfTDrNGfhvfF2f8Z1wHje0MfwwPLKscyhR27IVtoanwY0mo0+T
4XIsSOfZ7r0WPIDngO2/7ZSHeBSO5WPJnY478rJW95RWrKJu16rfbrqutltm
3hDoA/bP4Rs+girDR5dJsL/uAGzfdPXSAeXevoZyW9LbMn3b+0qmjfJCIqPs
Lk0e+oxbdZn7a4EH7away1mVz6zJQyOrcFPiG5RdCrg2bbXWssXAAidXsTgr
uCr2T83z5Zck//nS7QTGqy7ix0evXh8dHpwcPVaGizvFZh95gJze7cr5z7qj
d5WDrUzc8uPuMNIz+eSu80nLNeHsYFoCLxdzbgbl+tSOwk3wPlb+jns0N7TT
aE5CiYsx5ljZVizwiKelPwojMuAxmvJ3borlZuGGP1aPeezGRYKWFt7nfA/A
R3v+R80rTQWpTz9tP1seu6tyhz1nz1EQfB71MaBg7d1nlFALvYnzxXu9hQxB
E+rYaSd37K2+paoMfa69tKN9g3q2sk4fidmI0/C1Gbhjz0qA9O1LC7/X+3pH
PPJDTyQe0fWKlwHbXWCFu4C3qKRYwc5jC5BTs+m1nmjXqT4+SIrgIUNBYsW4
l0YvgveWfWrIu7bQyyADqX/5a9kFbkFKtu010zDQkdmuqOHOmjfCejDDkDHB
LwOUa3n0W8U8mYyehybXRZoNNg4ENMsuNnatxYa7+wC27ktpbq7V0BytV6t6
+i9n+9gyRQmEVJEmlinJvkNuup32ro2PlqaI3Oy0EAI5cZvG5Y6bWCv1StYh
PHiu5+vKo+nQ8kCN1/Q8XqoyNOTcF+ibNv12id/poWFfb5r4l5ngnV4aSmHr
zRwoY5vq49+I+425NNTIlfIz4VyaCuffey6eMcxoqRxzV9NW5n19A1NppbyM
6XXpIj7E9HqDaVis3QyXZT74AIAuV8a/sYyIczxbuQ+rUvHlrbW76GuzsxPQ
drc5UffNtaAf/cCKTkuUAg0Ri3rcUUuRea4dOmKGobWBPKJ8oyOqxNXwPJ2G
+mP/paWsLHbIzZxMxq7jrvg7W5bC+6bSNdgzQ8+1VZPJDC+cB0bCtAr1FtYU
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
ft6zs5Y7Phb/AQFpyUyOvgEA

-->

</rfc>
