<?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-03" 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-03"/>
    <author initials="P." surname="Howard" fullname="Paul Howard">
      <organization>Arm</organization>
      <address>
        <email>paul.howard@arm.com</email>
      </address>
    </author>
    <author initials="T." surname="Fossati" fullname="Thomas Fossati">
      <organization>Linaro</organization>
      <address>
        <email>Thomas.Fossati@linaro.org</email>
      </address>
    </author>
    <author initials="H." surname="Birkholz" fullname="Henk Birkholz">
      <organization>Fraunhofer SIT</organization>
      <address>
        <email>henk.birkholz@ietf.contact</email>
      </address>
    </author>
    <author initials="S." surname="Kamal" fullname="Shefali Kamal">
      <organization>Fujitsu</organization>
      <address>
        <email>Shefali.Kamal@fujitsu.com</email>
      </address>
    </author>
    <author initials="G." surname="Mandyam" fullname="Giridhar Mandyam">
      <organization>AMD</organization>
      <address>
        <email>gmandyam@amd.com</email>
      </address>
    </author>
    <author initials="D." surname="Ma" fullname="Ding Ma">
      <organization>Alibaba Cloud</organization>
      <address>
        <email>xynnn@linux.alibaba.com</email>
      </address>
    </author>
    <date year="2026" month="February" day="12"/>
    <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>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>A CoSERV query can potentially contain privacy-sensitive information.
Specifically, the <tt>environment-selector</tt> field of the query may reference identifiable Attester instances in some cases.
This concern naturally also extends to the data objects that might be returned to the consumer in response to the query, although the specifications of such data objects are beyond the scope of this document.
Implementations should ensure that appropriate attention is paid to this.
Suitable mitigations include the following:</t>
      <ul spacing="normal">
        <li>
          <t>The use of authenticated secure channels between the producers and the consumers of CoSERV queries and returned artifacts.</t>
        </li>
        <li>
          <t>Collating Attester instances into anonymity groups, and referencing the groups rather than the individual instances.</t>
        </li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t><cref anchor="rfced_1">RFC Editor:</cref> replace "RFCthis" with the RFC number assigned to this document.</t>
      <section anchor="media-types-registrations">
        <name>Media Types Registrations</name>
        <t>IANA is requested to add the following media types to the "Media Types" registry <xref target="IANA.media-types"/>.</t>
        <table anchor="tab-mc-regs">
          <name>CoSERV Media Types</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Template</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>coserv+cbor</tt></td>
              <td align="left">
                <tt>application/coserv+cbor</tt></td>
              <td align="left">
                <xref target="secdatamodel"/> of RFCthis</td>
            </tr>
            <tr>
              <td align="left">
                <tt>coserv+cose</tt></td>
              <td align="left">
                <tt>application/coserv+cose</tt></td>
              <td align="left">
                <xref target="signed-coserv"/> of RFCthis</td>
            </tr>
            <tr>
              <td align="left">
                <tt>coserv-discovery+cbor</tt></td>
              <td align="left">
                <tt>application/coserv-discovery+cbor</tt></td>
              <td align="left">
                <xref target="secrrapidisco"/> of RFCthis</td>
            </tr>
            <tr>
              <td align="left">
                <tt>coserv-discovery+json</tt></td>
              <td align="left">
                <tt>application/coserv-discovery+json</tt></td>
              <td align="left">
                <xref target="secrrapidisco"/> of RFCthis</td>
            </tr>
          </tbody>
        </table>
        <section anchor="applicationcoservcbor">
          <name><tt>application/coserv+cbor</tt></name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>coserv+cbor</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>"profile" (CoSERV profile in string format.  OIDs must use the dotted-decimal notation.)</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>binary (CBOR)</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t><xref target="seccons"/> of RFCthis</t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>RFCthis</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Verifiers, Endorsers, Reference Value Providers</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>The syntax and semantics of fragment identifiers are as specified for "application/cbor". (No fragment identification syntax is currently defined for "application/cbor".)</t>
            </dd>
            <dt>Person &amp; email address to contact for further information:</dt>
            <dd>
              <t>RATS WG mailing list (rats@ietf.org)</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>none</t>
            </dd>
            <dt>Author/Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
            <dt>Provisional registration:</dt>
            <dd>
              <t>no</t>
            </dd>
          </dl>
        </section>
        <section anchor="applicationcoservcose">
          <name><tt>application/coserv+cose</tt></name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t><tt>application</tt></t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t><tt>coserv+cose</tt></t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>n/a (cose-type is explicitly not supported, as it is understood to be "cose-sign1")</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>"profile" CoSERV profile in string format.
OIDs must use the dotted-decimal notation.
Note that the <tt>cose-type</tt> parameter is explicitly not supported, as it is understood to be <tt>"cose-sign1"</tt>.</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>binary</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t><xref target="seccons"/> of RFCthis</t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>RFCthis</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Verifiers, Endorsers, Reference Value Providers</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Person and email address to contact for further information:</dt>
            <dd>
              <t>RATS WG mailing list (rats@ietf.org)</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>none</t>
            </dd>
            <dt>Author/Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
            <dt>Provisional registration?</dt>
            <dd>
              <t>no</t>
            </dd>
          </dl>
        </section>
        <section anchor="applicationcoserv-discoverycbor">
          <name><tt>application/coserv-discovery+cbor</tt></name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>coserv-discovery+cbor</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>binary (CBOR)</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t><xref target="seccons"/> of RFCthis</t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>RFCthis</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Verifiers, Endorsers, Reference Value Providers</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>The syntax and semantics of fragment identifiers are as specified for "application/cbor". (No fragment identification syntax is currently defined for "application/cbor".)</t>
            </dd>
            <dt>Person &amp; email address to contact for further information:</dt>
            <dd>
              <t>RATS WG mailing list (rats@ietf.org)</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>none</t>
            </dd>
            <dt>Author/Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
            <dt>Provisional registration:</dt>
            <dd>
              <t>no</t>
            </dd>
          </dl>
        </section>
        <section anchor="applicationcoserv-discoveryjson">
          <name><tt>application/coserv-discovery+json</tt></name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>coserv-discovery+json</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>binary (JSON is UTF-8-encoded text)</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t><xref target="seccons"/> of RFCthis</t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>n/a</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>RFCthis</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Verifiers, Endorsers, Reference Value Providers</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>The syntax and semantics of fragment identifiers are as specified for "application/json". (No fragment identification syntax is currently defined for "application/json".)</t>
            </dd>
            <dt>Person &amp; email address to contact for further information:</dt>
            <dd>
              <t>RATS WG mailing list (rats@ietf.org)</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>none</t>
            </dd>
            <dt>Author/Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
            <dt>Provisional registration:</dt>
            <dd>
              <t>no</t>
            </dd>
          </dl>
        </section>
      </section>
      <section anchor="coap-content-formats">
        <name>CoAP Content-Formats</name>
        <t>IANA is requested to register the following Content-Format IDs in the "CoAP Content-Formats" registry, within the "Constrained RESTful Environments (CoRE) Parameters" registry group <xref target="IANA.core-parameters"/>:</t>
        <table align="left">
          <name>New CoAP Content Formats</name>
          <thead>
            <tr>
              <th align="left">Content-Type</th>
              <th align="left">Content Coding</th>
              <th align="left">ID</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">application/coserv+cbor</td>
              <td align="left">-</td>
              <td align="left">TBD1</td>
              <td align="left">
                <xref target="secdatamodel"/> of RFCthis</td>
            </tr>
            <tr>
              <td align="left">application/coserv+cose</td>
              <td align="left">-</td>
              <td align="left">TBD2</td>
              <td align="left">
                <xref target="signed-coserv"/> of RFCthis</td>
            </tr>
          </tbody>
        </table>
        <t>If possible, TBD1 and TBD2 should be assigned in the 256..9999 range.</t>
      </section>
      <section anchor="well-known-uri-for-coserv-configuration">
        <name>Well-Known URI for CoSERV Configuration</name>
        <t>IANA is requested to register the following in the "Well-Known URIs" registry <xref target="IANA.well-known-uris"/>:</t>
        <t>URI suffix: coserv-configuration</t>
        <t>Change controller: IETF</t>
        <t>Specification document: RFCthis</t>
        <t>Related information: N/A</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC7517">
          <front>
            <title>JSON Web Key (JWK)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. This specification also defines a JWK Set JSON data structure that represents a set of JWKs. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries established by that specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7517"/>
          <seriesInfo name="DOI" value="10.17487/RFC7517"/>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC8615">
          <front>
            <title>Well-Known Uniform Resource Identifiers (URIs)</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="May" year="2019"/>
            <abstract>
              <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
              <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8615"/>
          <seriesInfo name="DOI" value="10.17487/RFC8615"/>
        </reference>
        <reference anchor="STD96">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
              <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9052"/>
          <seriesInfo name="DOI" value="10.17487/RFC9052"/>
        </reference>
        <reference anchor="STD94">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC9334">
          <front>
            <title>Remote ATtestation procedureS (RATS) Architecture</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <author fullname="W. Pan" initials="W." surname="Pan"/>
            <date month="January" year="2023"/>
            <abstract>
              <t>In network protocol exchanges, it is often useful for one end of a communication to know whether the other end is in an intended operating state. This document provides an architectural overview of the entities involved that make such tests possible through the process of generating, conveying, and evaluating evidentiary Claims. It provides a model that is neutral toward processor architectures, the content of Claims, and protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9334"/>
          <seriesInfo name="DOI" value="10.17487/RFC9334"/>
        </reference>
        <reference anchor="I-D.ietf-rats-corim">
          <front>
            <title>Concise Reference Integrity Manifest</title>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Linaro</organization>
            </author>
            <author fullname="Yogesh Deshpande" initials="Y." surname="Deshpande">
              <organization>arm</organization>
            </author>
            <author fullname="Ned Smith" initials="N." surname="Smith">
              <organization>Independent</organization>
            </author>
            <author fullname="Wei Pan" initials="W." surname="Pan">
              <organization>Huawei Technologies</organization>
            </author>
            <date day="20" month="October" year="2025"/>
            <abstract>
              <t>   Remote Attestation Procedures (RATS) enable Relying Parties to assess
   the trustworthiness of a remote Attester and therefore to decide
   whether or not to engage in secure interactions with it.  Evidence
   about trustworthiness can be rather complex and it is deemed
   unrealistic that every Relying Party is capable of the appraisal of
   Evidence.  Therefore that burden is typically offloaded to a
   Verifier.  In order to conduct Evidence appraisal, a Verifier
   requires not only fresh Evidence from an Attester, but also trusted
   Endorsements and Reference Values from Endorsers and Reference Value
   Providers, such as manufacturers, distributors, or device owners.
   This document specifies the information elements for representing
   Endorsements and Reference Values in CBOR format.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-corim-09"/>
        </reference>
        <reference anchor="I-D.ietf-rats-msg-wrap">
          <front>
            <title>RATS Conceptual Messages Wrapper (CMW)</title>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Ned Smith" initials="N." surname="Smith">
              <organization>Independent</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Linaro</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>University of Applied Sciences Bonn-Rhein-Sieg</organization>
            </author>
            <author fullname="Dionna Glaze" initials="D." surname="Glaze">
              <organization>Google LLC</organization>
            </author>
            <date day="11" month="December" year="2025"/>
            <abstract>
              <t>   The Conceptual Messages introduced by the RATS architecture (RFC
   9334) are protocol-agnostic data units that are conveyed between RATS
   roles during remote attestation procedures.  Conceptual Messages
   describe the meaning and function of such data units within RATS data
   flows without specifying a wire format, encoding, transport
   mechanism, or processing details.  The initial set of Conceptual
   Messages is defined in Section 8 of RFC 9334 and includes Evidence,
   Attestation Results, Endorsements, Reference Values, and Appraisal
   Policies.

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

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

   The goal is to improve the interoperability and flexibility of remote
   attestation protocols.  Introducing a shared message format such as
   CMW enables consistent support for different attestation message
   types, evolving message serialization formats without breaking
   compatibility, and avoiding the need to redefine how messages are
   handled within each protocol.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-msg-wrap-23"/>
        </reference>
        <reference anchor="SEMVER" target="https://semver.org/spec/v2.0.0.html">
          <front>
            <title>Semantic Versioning 2.0.0</title>
            <author>
              <organization/>
            </author>
            <date year="2013"/>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC7515">
          <front>
            <title>JSON Web Signature (JWS)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification. Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7515"/>
          <seriesInfo name="DOI" value="10.17487/RFC7515"/>
        </reference>
        <reference anchor="RFC6570">
          <front>
            <title>URI Template</title>
            <author fullname="J. Gregorio" initials="J." surname="Gregorio"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="M. Hadley" initials="M." surname="Hadley"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="D. Orchard" initials="D." surname="Orchard"/>
            <date month="March" year="2012"/>
            <abstract>
              <t>A URI Template is a compact sequence of characters for describing a range of Uniform Resource Identifiers through variable expansion. This specification defines the URI Template syntax and the process for expanding a URI Template into a URI reference, along with guidelines for the use of URI Templates on the Internet. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6570"/>
          <seriesInfo name="DOI" value="10.17487/RFC6570"/>
        </reference>
        <reference anchor="IANA.media-types" target="https://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.core-parameters" target="https://www.iana.org/assignments/core-parameters">
          <front>
            <title>Constrained RESTful Environments (CoRE) Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.well-known-uris" target="https://www.iana.org/assignments/well-known-uris">
          <front>
            <title>Well-Known URIs</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <referencegroup anchor="STD98" target="https://www.rfc-editor.org/info/std98">
          <reference anchor="RFC9111" target="https://www.rfc-editor.org/info/rfc9111">
            <front>
              <title>HTTP Caching</title>
              <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
              <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
              <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
              <date month="June" year="2022"/>
              <abstract>
                <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.</t>
                <t>This document obsoletes RFC 7234.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="98"/>
            <seriesInfo name="RFC" value="9111"/>
            <seriesInfo name="DOI" value="10.17487/RFC9111"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC6024">
          <front>
            <title>Trust Anchor Management Requirements</title>
            <author fullname="R. Reddy" initials="R." surname="Reddy"/>
            <author fullname="C. Wallace" initials="C." surname="Wallace"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>A trust anchor represents an authoritative entity via a public key and associated data. The public key is used to verify digital signatures, and the associated data is used to constrain the types of information for which the trust anchor is authoritative. A relying party uses trust anchors to determine if a digitally signed object is valid by verifying a digital signature using the trust anchor's public key, and by enforcing the constraints expressed in the associated data for the trust anchor. This document describes some of the problems associated with the lack of a standard trust anchor management mechanism and defines requirements for data formats and push-based protocols designed to address these problems. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6024"/>
          <seriesInfo name="DOI" value="10.17487/RFC6024"/>
        </reference>
        <reference anchor="RFC7942">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC9711">
          <front>
            <title>The Entity Attestation Token (EAT)</title>
            <author fullname="L. Lundblade" initials="L." surname="Lundblade"/>
            <author fullname="G. Mandyam" initials="G." surname="Mandyam"/>
            <author fullname="J. O'Donoghue" initials="J." surname="O'Donoghue"/>
            <author fullname="C. Wallace" initials="C." surname="Wallace"/>
            <date month="April" year="2025"/>
            <abstract>
              <t>An Entity Attestation Token (EAT) provides an attested claims set that describes the state and characteristics of an entity, a device such as a smartphone, an Internet of Things (IoT) device, network equipment, or such. This claims set is used by a relying party, server, or service to determine the type and degree of trust placed in the entity.</t>
              <t>An EAT is either a CBOR Web Token (CWT) or a JSON Web Token (JWT) with attestation-oriented claims.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9711"/>
          <seriesInfo name="DOI" value="10.17487/RFC9711"/>
        </reference>
        <reference anchor="I-D.ietf-rats-endorsements">
          <front>
            <title>RATS Endorsements</title>
            <author fullname="Dave Thaler" initials="D." surname="Thaler">
              <organization>Armidale Consulting</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Linaro</organization>
            </author>
            <date day="25" month="August" year="2025"/>
            <abstract>
              <t>   In the IETF Remote Attestation Procedures (RATS) architecture, a
   Verifier accepts Evidence and, using Appraisal Policy typically with
   additional input from Endorsements and Reference Values, generates
   Attestation Results in formats that are useful for Relying Parties.
   This document illustrates the purpose and role of Endorsements and
   discusses some considerations in the choice of message format for
   Endorsements in the scope of the RATS architecture.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-endorsements-07"/>
        </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 1600?>

<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>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+x9a2PbxrHod/wKHDqpJZug3rKtxE5kWW7c+FVLSW6b+EYg
CVGoSIABQMmMo/6W+1vuL7vz3AcAUrKdntN7TtTGtoDF7uzs7Lx2diaKoqBK
q3GyF3YO8myQlkl4lIyTQZUX4Sn8d5gN86JMJklWlWGcDcM3yWlSJNkgCb+P
x7Ok7ARxv18kF9TB0eGb7zvBIK6SUV7M98I0O82DYJgPsngCQwyL+LSK0qQ6
jYq4KqNBXibFRbS+FZSz/iQtyzTPqvkUWj47PH4ahrfCeFzm0HOaDZNpAn9k
VacbdpJhCvCl8Rh/ebb/GP4CUDvP3hw/7QTZbNJPir1gCFDsBYM8K5OsnJV7
YVXMkgDg3AriIomh16NkMCvSat4JLvPifFTksyk8fZNM8ioJ94+rpKziCkAK
Xxf5IBnOiuSoE5wnc2g93AvCKHyzf3yEf8eVaYu/JhZn+GthMHaBGAsukmwG
kIXhDUcMQ8ZJ5weAMs1G4Z/xO3w+idMxPEdcfo1Y7eXFCJ/HxeAMnp9V1bTc
W1vDZvgovUh62mwNH6z1i/yyTNawgzX8cJRWZ7M+Itys0eVorX3ZsP04RpCd
odzvetxbL80X9LDgce+smow7QRDPqrMcFjICMoLle90Lv8kv42II4zI5vY5n
Y/sMJhVn6a+Ev71wv5jAs4QxNIWGvTNq+HVcTHqDfKK9HvfCp3lZwlem2+Oz
fBKXzmO/5+dpFhe57Zyb96T512N6jSjWIb7phY/T4vwsH/9qxvgmyc7dp9B8
L3xaxLPsLAdqCY+eHdsRzqBxry+NeaGBrKt4UOkQR73w23gSj03/R2fJaTxO
zVPuf/aPtCpntmNp1aNWX5/yaxc7f+6FL2DTz+OJ6fnPaZEOz+LCeUGd7794
YjseTfjl1/Fk6Pb3BPszXT1BYqbfuYdx2o/7cXgwzmdD29e7eZZliNbZu17M
TajLIMuLCWD8gvbSm6cH27vb9/fCflwmu9v85N7Oxr298B+X5/zr/d2N9b1w
MByO5ffNnQfwusRdK+939sLLZDyOzrP8Ep8eHT95sIv9h2EEnwJ90r8f7mH7
B+s7m9Jm27bp54XT5v6D7Qfc+4Otre29kOgc9x48fBY96bnEX6QTaUD/brSY
lKPosoin2mhyiaMfvvj+8A0Pr5z8CFCXVekg/D4pkKcinjd76731DjUjzhhu
rm9s8VdxMUpgE+seBs51kRTEJMppMli7oE9pVwYBcnQH7Th3QPo3x8evw4MY
WEw24tnurm/CbI/3gfv9MksLFiCyKg+2N4HDT6ZFfoGQ7cO+TLKkLMP8NHwz
ywjcg3yYSPPNnU3cZQk8y8qqiNMsGYb70+k4HRhmWeWDfByuHOT7r1cF3fc2
NvizQ0BFNQ/3LZMOj/PzJAtXDvePVxtYdrh3KZh2H7ntUxh3CusyG9KnIO/8
B0GQ0NiEqcPnT5HXPz2ozlKQmkEUgeDo44RgHwfPsrACWFUUVC2ioAxXUOCs
EntPK5DR8LCLa5yeprDQiurrZXZY5WFclohyHBQEY1mBUAPAdBkYAOi0FxwD
uCGI8Bn2FyJF4HD85cepDLhOqCmsdsM4BATMaCbD8JdZUszXYKKzcRUymYXD
pExHuOAA8mk8SMcpoCWhwYdpOciBUuc0SJFURZqAhEXw4TVAFRdVCt8AFKdF
PgHpW6T5rAyJ7oY0N4YDBjnFmQM0BAKItWw0i0cJdQx7EUCa5tkQ6VKgM1CH
s5LI9cmT593w8iwdnIWDOAv7SQiiDDSU9FeAPc3Cg8ev3sicuqAgxP0xfpac
nqaDFPGaZoDtfJoUcR/nCHMaFCBRYJIwQ5hLOYflmADIRDeTFJhYEgS3wmdZ
VeRDgAVJ5f2tMhlEKT66CoIb0RKBgnQ3niNArxFnTCCIy5niuoVECrd7JL8+
AD2dwv4kjBwijmHNhYDkDSxPlgygB1pGeDwYEBXm11ONoheYBQxfwf4FAoA1
788qQLGgawKLk05hQmaRu4DawXhGiwdia4jMBhSnbIaUAZjAFqdpMaHnw+Qi
GeMqwEOEoYSB6MUFswCcTALkMThHDABWsyF0SWs8SUBbGZa0A4iKcECHMPHX
OllOQZ6U4eAsHo+TbAT/BEJBJsqtyySejBE7ddoAIjj+9M0XxsMhEEJJWzl1
wMCFpB1BM2jbEvF1mwIhYbKJszJm4gSE2Zn3k+oygSWMzUKZjkFZn4D4oSnW
xhaeIJ+UDuu7BFWTmAmvSHgZz5GomFvNCZYku0iLPCMuBnNFtguflyAmfY7X
DcsZkFl1BiPhdwWg9wLEqQO97PC8X7EwIvYimC9a0Y47T5kOsvpZkXWld5fb
wQqAQg4vgDBu2iHOcwoUiQjCHi2YiBSkKIsWs0KyKy1HZX5u+dES5moQcj2t
EWKcrTiJ36UT5g88+WhW4m6GZZ9MgEbMfqvyfMx9gsZXAONOzHRqdFWa3UCs
vEYxKe8esBxZggCaqYM0m84qVIRiMq6YYM2YaIWkA8KJJbcP4VU9FyTdHUm1
EBx/O+WzqgYdopGJogmkzP8a8r5+rZj/FSBvhjog9AoaBSw7dQrsJplWxKQO
8jfPXoTv3zua69WVEafwIdi8OfQHujBamGDBxBfpeM790sfCXwFQGLrMJ4md
LvPQFMV2moyHMMH9bNgFQjhP9NvKYrccnIG2i5hlKT50JDJCiOo+wBbu+xSy
WEjjNwD31ZVsyh4pZ8AsU2JjsGw0OjSN0NYYMuDclkF3BkK65Q2Eq1uiFCNm
K2qUKLDo5TBKyP7rZ2E/JUrgb/vJGWAvnxWl4avJO1hiZNWwsstGk22eljX1
yTAEEi2ykQxTlh6npFgo/1HGDH0e6dcIKhDzNE+VqhxYL9PxGN4O4BdlTSMg
BuDTALQj0kBYt2z7CYw9RnRleRXmGdIOzH0aF6XK1WSSVhWbCgguUOEETALk
S7gg3RD0AkYsURO8I+JX1jMYp2Yr+Ns9S3hzGhyTOKBFvjxDkTWgToQTDWLg
vaivsdZpmSOqV2GRj80iED76tGSjIoFVKOC3DBa9UpoyaEjA0CR9DyHKXGp3
aA0ml2fAyI+SBGgWFL94mirdMPHShw45+VSHjOPWrfA4KSZplo/z0Vz4grXX
wufCR5nFnCfzEH1fZdh58d3RMTrf8O/w5Sv695vDv3737M3hE/z30Tf7z5+b
fwTS4uibV989f2L/Zb88ePXixeHLJ/wxPA29R0Hnxf7fOswyOq9eHz979XL/
eYeXwDVOmIQQyURfUxBbqBqWASgLA9AUeZc/Pnj9f//PxjYg7T/AGtvc2HgA
6OJf7m/c24ZfcJ15NKI8/hWQOQ9AjU3igvQ0WE1EeQU0Bm1hS5/ll1mIrA8Q
e+dHxMzbvfDL/mC6sf1IHuCEvYeKM+8h4az5pPExI7HlUcswBpve8xqmfXj3
/+b9rnh3Hn75FVgxSRht3P/qURDULMUZaZZAXYZ/sPhQNt1ntYz2iWvR9oKn
QLqoCeKeBWY1GqNrrZiDYkakfpSwQrmNWykyDhUUQB8HAkszb3PcGIiNHvzP
AmJEYSskqLkQND930PgAdQoNs6TzM4H3c8d6is1zCyzQnB120w7pOidkZB5G
dzULXU+0dWvikcY/eHV0SI9Az8BH6GFJyi8CGHiKSuVgNo6LLvc0TONRlqN2
gQyapVi6ANb7BCsPHOBA9tWf+ZWI6OPmSuGOjsegzZfWjY47GoUTSA8YfJah
iddLel02Ag54T4bPk4r9F2Ak74+A445E1kL3x2jNhi/yYQLShozm2La4YgwS
63Y0pwKPGBYp4WCQj84q0mOqdJKgKA1PZ+NTYPlMZtp/Xhg7dpCP0W7j5TF2
azkDtM9Rg0tRHZ4VAxSCMDRYphm3zVG/8nuEtsCXk4JsgSL/B/Ybh2f5mBTA
8CJNLlVACbkMxaPAmiqsoZhoJOxA5tjucV1RCCfv0OOWVir5WjYu6ElT0iYG
SRdGvwSYi643JV5R3lXvWNDjzKNxPAfEDkGatcyflDW24gFBoMMAedRNeLDc
YdSFhv1ZPiPlS8QqiodRIcgT8W/tFFFA/BkBSdHeRblgjEXEDeql47nIndjM
jT1/XRLWgG22cUArI7lK6yguC8K4h6NeoM4TELezMWpVNMolWvvWXyYEj0cB
5AUhHY56HqanRKdodIxYksvqK+C34QksDgqxOAM8TOagZRt7mpQHgssAMgGD
GvY2bG2yBIAYyUyEWctRRI1oYvSmoa5G6h0uI4FQzADiG/kpUOt3O2RMgHbJ
wn08TkfUOu6DuVSfm2HbMjlW8xwcw8pWbpdkOIvnzZ0TCnmDX9SgXPKM0eti
lPIU1YJhCghDxn4Dd1afbSThA6KYEm3mREdnSQnGGNqNrIsAt0JnoGkoWqNZ
NAfl3TApRnmWT2Dzi2+AN/q1k2FGhv2XyfiCOZko2OwqHBK3UU9nKairr1OZ
kPKUIOfCnQQPQIag6VEzV2gSaNjK+MjaQdgovTp8GfcnGuBAGGNY5YzOIMaw
w4AiGWoAlZ2LIKexY/QtsOMuUuGOndBZAY0MHSMrrbvlRAIBritnSVxwYENb
455MLUHvWY6cRA0p6XgKg8ZgppYsIqfjfI50EZkzbV5f9MFBV8iC2AJBfpJZ
04WxMEyqOB3X8ZMXzKvQ+UaM2fIqn5ODPKA974m1eLFgi+B9l5eQGR3QLQgg
2j8iGGJyxAJ/rkhoqueU3QDcyLQYz6MJit1EMDyPMwdfNRZCDkEl717wjQoU
MsPYHkUyZmbqftr1NwbyLrLqLtIylU2+mL666JaFdszT2dqukNfBJ9gL7T/Y
obNhqg5C9O+Q/xuY99TuZZcfkMNJLMxBPEmsiwU0xlGaoS7Y3I7GpVLz1SIc
3RDjLIgdgMkGnIpNZFwdOy2xlbM8i9xnbVoGao45vcmLyiFTda66+oZCxe5K
HPYUZF6KtjydFIQT1q1ifEmN8OAivHPn6Iy+YQ3szp09Y8PRB11xhrGngbsq
a3QO8hqIbDyXXcp8HsmSVR/21IGUSegAlA2/KcvGZRqQGXSYJ0zW6gdoLvQy
3oSTfJIk05vN8Ix4NqOsSMZsl5+lU0Z5feLo0TDgDRNyD7BrBz1ZM/Xd1iaE
yhPv+plwa5E4ydDMyBBj63645I1cCYdyZP8QCCZ3XC2Is9JFGnJ2GQQoYD+b
h6P0wrqY3PMBhJM8QhW5WkGflZ2WpMSlCX/1xQKujgcBLI6ohTJ+YhIpe9bN
yV6bX3Yaz8d5PKTxmSfxHqrxe2mNVEdveIIF8uKYNySqr9i9dlimv7LehKsz
wcOVgqEiX49sBIYZEAswDxmTVasgCavLXLdVKhMqCXGef4tJSPQFs4UR92NY
jdnoTGdPosiereq+dwigK0vOPN45x+8FP5AjzKEVacaTUM8sEZ2YQbyNaU+d
ksQxLkhHDkwSdLml5cRM3J7w4IzsicgSW4xNPoHhmYYrAIxk77G5h1EMhMsr
8oG9ukATILkMgnbkOJ5TIqNIpb53EOEfapHrtHGo9cyxnRyGYNrDwELuNxbR
XUOTZlsQfVjB2TjlFr28yqfRGE88naMGEVDkHMfVtDKl5mCWIw3A9l/1RcGc
Ny+sa8WAtKLgrJL9O07cPlo/NThZuYkFvop81i4LC27Z8/ue9zTvs3nMXgXS
9Mku1dZE25YOCAnkDp6iBKadoIB37SjYtEjkPBA9syNU5NwjPjz/IexeAr+Y
48mGzhWeGe6ES8dS1TjccXTU+09B5gE/qYDTuXyBhzc9l8KaXRRaEqk3nvVL
2NfwCQhUAH9WIPhG+FjI0TCHcQkMPbVg5MD+BnAGMfJc0sSrdETniaVEV0JP
6O7GReaTP9HX5uEsI8lH/qLTIrbHx8jQ0IELhnPKZ38EMWv5ABRi1kWBt91c
siMjMnkXI3dksc2nIQMOVUKaodCl9+8pkEkdYfk+PpLYI/SpPXNMDCCEJCPL
jAzFCeh1jXVmFkfIVncP20WT+DwxoyOLoQMQR7dNTy1wJbozwHRjD1Lm4ctg
Z05EmFltGwg0Lc8ZY+rNaf/SIBTXHR0seAo5qFRgdw0rGqCUhX2COiYadDE6
gvJZOQaSfR2napJaVZbJjOgogdm4qDGH9wAWaGJRlaMHkw1TNLnddTXcA1fF
ErPQGCuy2DvMV45cHX4MYEwxMLfIbkYr1tdijv7Nq34yQh5RD2nAZSGu5UZK
8IkSH7ikja3IVrqwF2ZFojVoA1iCJL0Qd7GQkJBZaZdGTuVh4bC/LLn0+1S3
k1HsVNMj1mR3uL9iveBlzqgbz5uCqYNnoNmo4/Xnclr1aDiz72OojLSxmxJl
7r4xt9kBq7+CRLavUC5cNlbDyhJROF33p3JKFLwcc5RYL5ZBh/qKDGeUA2s8
5LHH8v3Z+Nwe7IlsUfWOIiuaeqxqqBTP0B6UACucj0DNoTUuEut64ONv6qF0
gwIUg9xawutTdk877n+nH0eK09ZFdIEZKD6ThS7cPbbS2D++n4EWWqAJsy8m
SkxPiMnUfP0S8Ym80ue4sf+ps8cAk7P+mBxUjr+nnE8mGGwyCFH9QirCU0ea
jwpj0Q+MDxa1V2hrVrkewGP8AIgQIQ+ip2I+rfJREU/PZLjYCY2B//8DAUcn
lsynF7wifsgmBbsz7dSQVsVzkFidS8216ThGZyVIPY0kgE3nxsYiYx1ogCv+
aligasfQQKJl3HHJkThHIrkUJMVjkLfDeegdetISYQiyyDiN3aifHrUer/mN
WGVTr2vMgbho+gu7dcIUHNqEzjztAZYV2diYXFkS2UdOCXVm8EkqkuOhGuyk
8hFBZtaKp0sVbTR53REdLXORoFrHXtpa3EzdZ26okMzvFEUlgCmf86DYvEaG
ABXwz8pOnJRQMvbFv2DDEtGPoicWHADBCKgpvbwla9dKPgYDzU5seC8duRj3
VUx+rZZTBNJh0JeC1lEveOP3xxzcHotJ9Dgu7yCms7HOKAdFOJPmnSb7qEPo
cRDUxciRcRaXZ7SDzpLBOUgJ/raPdzHmFqd4qqExFumEWLGEm8vaORNz4qmc
85iGABF4SAXTI6rBOE7R59B2MuGe+6pq2GBSFTs4J1OSf1Ybr+O2spLNxtci
pkHEsonuSVIR5qpOOq7WldIEkTgHoVerrASwC490HMu7YJLA60wwCW9ekR8H
xsFkRDnSLLvDaRpE+AY4tkcSJwBNeLwDIjxxTkpYIaSdR5o0hcXQ4WirN9U9
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
cVyhF+LWBtZmPgFxnDpZG0/aTs5ObBEijJhcr12FkkwDyg4ZBCc7ruCIg+yI
WXgLBtip6ORdXQBuRKb4KKSuG0op3F7JMAtQmV4zoTNr4fpe2LnZnDtd+pQx
vRaG4cYeqeb40I93WDNBA9D7Zhd+b9h9a/JhG97we9M3NmJPFsH6Ix1X8c97
8y/TCH0uazTszu76ytnt9fWNjc3Nra3bQC/wAiY6AvbG/GzN+1wwRqDD4B3Z
QeH39JzmbhtzfBhPc9NpTGGHHdP0Sv71lgwI+L0rs3YDNdawhw34q+4rIACv
wFYxjDFL3lWGZHGD8FUrSQc/HJYs/XMKd60KU05BQm71DEZ0GI9mOcgNdzGV
7cU86bWLoCr3WO0c6kV/UpQlA9p/ExIz6/fjTUjs/oMHD+7d393Z2f0vIrLw
bfeGEHsRPVv3APitjaePd/YfP13f3DpE1+T+/vbhg52nDw7QMfn46f7tVezl
u++ePXFmciXkHF5L1pvwF5+nWXcflSqpXQJtUPonChg9RQBFbGTijJdIGObC
LTIidu4GoABlnzgVuV/A8jFRhsf2N2ps3zmQWcD6se6ABkVzRmfd8s1UGOV/
9rb7fbabmckaPnd33M4O8e3NJ4f7Tx4fHj7Fv4EK3+KY3x16dPhjyw4EXitD
tG7D6wh2HfdMy51sj0Ctl/pfoWuZVeeg/va634lN8UfFaaxcqGXIb6bzlMTR
Grupx0yLgjKpD4wkEZj4JJuIc8/ZMfXTBBqlfoQgkXDkIGoGwB07Ib3YkgE1
kJjzOjn+M3JsCoYr5kY3aO15xwWLZmI3GcyDPfo+vCZ07+KX2vxEpeQXTfzG
w1V7NWJapMoNUIwWrK+aKxGmugm9oysfKc/BpNWo7TS9XpFqAVQtd2NyJmNA
Y4twj218YFc9I4rKVn0gdKoW0GGrCeR07o0WmFJB86O5uKYuG7EK/o2tRQnm
fm+OZngPca8gDD12tEStbJXy1+l3yEcC+W3NOESJvxgodDg7GPJBGSzuDwBJ
xPXM602XTfpAUof+g+sgd6F3IBe+6jVr6fiGqkO39uVGE0pWijhD11rbNGTE
zkZvs7fVqfcovW7sbt3fbry6arYGJfsiY3rY2dla2azHOF8tRNDboP4vfisr
tAEwrq90Nte31qONzWhj63jj/t7W+t765t87q9crN2npp8zAfWcvfLpu9b6p
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
vuDX2n94K6+UaG09aJK1WGG2qjbYqqbBw8w/eFJPN27egUVCa2OayZYnMCX2
mhePqCu3yTV4GHMgF+4DdNnQySwkHCM2QtmTiCQPeHFcaM5IO+3wkBhY3HF4
gKZPSSlQBJQ7s748oMgbhezYEiYFQw4o1/JsYO7gCKm4R7qp6YXgMWlI1dAX
dkHwRQOmW1GDnJhyVDmBEXjh/0hyyNbHyB8cTckKJ/iItrPLYZ7q7ShOMlCa
m+Uenfikf6LbiLDZp/xoHKy6sY45t/h0W7jKCdbRfketsQHQ06xol2iCStEZ
avKQ9nNXyoO/pKLFWraJPSWsi+BaYuiwk3RAJKWXVxf1YadmvGi4NsORpn3T
uzzmKqoBSGUL6A2zgWgE5AESCSST6WOiC2SIVNPvZWnh1sIdFmLdQBRoajJt
KQjsnRH+lBT6PRhpbBUIwRIDNTTGH3ctvWnF+8qnOsIrw2WzoSjV450VyWZk
FDUO0C41rQclxLxd+jSoJTjf78XY8Cp4FNKydwzq0YQR7HdC5l4jNDmlLrTU
tk9PPfIwReJfAvldMCJxk0zHccaXoBoklV9ijVIn10oqG5WZIPTETCmnM33Y
CmBHDpKCJJ7oA5rS/P37rzDzy/o6XqgInzop0bucExg5kFRTEsPCm9BQo/o5
9x8ogJrWGBlVrokcyLMUx+XFKBgo+3N/PJ7qPPZY8uLAnV4URb3W5z36KG95
95vzZ/35b0H7O3h2G4a63fLm9t3biz9aMNSygcLb0d3odtsL+w16G8XLePb3
Xm9hV/rN3ajt59FvsGHz89l0Je+bvlaXwsZdtWB86Te/tb9b/s2XURsWrhnn
xbOjo4+A7YPHaV+C6/DWtgQfAZssgYjBj5kc/8Ey5GO+57XhQqzLPuaIjfpj
qdxKSRkuw7vhxtnqNf0cRAdG5324u77eDW+4qiqzH27BV9d/I3W9er3e21Xz
+Doqbfm5+/tTHMm7lW8fOlu1e7Od+v1DZ1rXfKM79fj4OaFs9SawXbNT24mg
vSv9pnXBr/mGfuoLfs03rQu+9JsFC34T2OovF31Dhwf7FXq08c46W8Vg3p7i
L5uqmKI33tH9WLg+pnSpTlUB0X0cC7fr6USjJDNWjBgTZ2nVIUdKpTpgq4bv
enLJ3BraS0uuPdQF3RFLT6o2Zo0O0neXaZ0aqcmcrqUKIVaIoQmgKw10hgqv
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
378GQMFmDyDhrwdMzvYJfHbojTOFjcZhi/tHB8+ehStZDhthNbgdeMpHuMZa
iytfN3Z37+9ubK7fW38k8syV2B8gaLSj3Qdd1h3mkXLhR0HtAQpUsJTi6ucs
Z3WX9WLRBkh4rNwPe71wd3sVDRKxzKh4xAS1xnhkhDKKXb6mo+o1MhI1HEYR
H2NUxjPEvblvrIKPzpRK7JxN386hPyP7wVv9Ypxm5wmBVBoDRj+y78wn6JdB
g8tYNAIPP1RQ7oSffVabcEShuXgYwUbaMjNOFD3HDNozNrZXxgvHwq/xZGXv
ZkbdVzYNhrGTYBkjrF8//9IvBIX4mUAnujLSuyjzgM6xWNe+FeB3INbnr1S+
7Xr78xOVIzPTq0ekw8ogUr7MhZS2kxITFpdznIfe8xtDNJst6IE2RlCzSY3T
so59RJoCXMN82zy65iMug6IoroBB2nd0OKO7wn81jud4NMC0PxNPM78CCyF5
p5TOr64eBe07yszHPvpSwaameFfppmssU6Nt5A9j99GjYEH3dn2ZhdAVR0SM
+DPN74CojyI37GQSp5xZuyAf5nL3U0nB4K2b3Hyim9GY3+5eV/dOGHJXey5n
s2PKOMbj+bYFLq+NAMHuDgJiickemvK111n29Obg1dHhz98m6n/fUMoD9AmR
fcUHGn0hx6/CrbY228Iw7HNhZDvux3cMOoDnOscW5hkZHZb3uu3U5IOugvoX
5iBDHl+mwwXruIA/uwtFAoG7IAHmL1H9rdpdazRJEawbu8ECzrmArU3P03cR
m4mmLZD92uJWmHu4lY/VG/0URFg3pLUtYdCM19ZRXGYbw6QAbrBwQPr+bDbp
k4rUPg5++1Nwk1YM64KGnyB3Wrj8MtyTP2RnZ3sF6W118QcWK/LFzo2+sCsi
n+22fdaGWWl/b4VbcgHI2nf+ssoX91f8HV//hibSPtiDpYMtXDX+endj2dce
kdWRubu50newMsyRn0fDZIqxKNmgXSHz2qpfzexv57mzr+XpJMFrM+VZOm3t
WVqhwG8dRD7fu260G51/1CWP2+0S6fO26a0xn7Wf/TTRICvQyiyDZV0tkpYt
DNcB8UZyytFX6jpENzTaRlTmg/OEvJ+spomxMSc7t6anOW/aVbUiGdFis6o2
K9Ku9IkQOMZLHSApZHqnAZcVbIsGR8Egp/QtiLteG/Wn6B2tqLLoHn8YXCw5
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

-->

</rfc>
