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

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

<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>Both the query language and the result set are designed for extensibility.
This addresses the need for a common baseline format to optimise for interoperability and software reuse, while maintaining the flexibility demanded by a dynamic and diverse ecosystem.</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.
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.</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 timestamp, denoting the time at which the CoSERV query was sent.</t>
          </li>
          <li>
            <t>A switch to select the desired supply chain depth.
A CoSERV query can request collected artifacts, source artifacts, or both.
This switch is especially relevant when the CoSERV query is fulfilled by an aggregator.
The collected artifacts are intended for convenient consumption (according to the shallow trust model), while the source artifacts are principally useful for auditing (according to the deep trust model).
It is possible for a query to select for source artifacts only, without the collected artifacts.
This might happen when the consumer needs to inspect or audit artifacts from across the deep supply chain, while not requiring the convenience of the aggregated view.
It could also happen when the consumer is acting as an intermediate broker, gathering artifacts for delivery to another aggregator.
See <xref target="secaggregation"/> for details on aggregation, auditing and trust models.</t>
          </li>
        </ul>
      </section>
      <section anchor="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.
In the future, it may be possible to support additional artifact types via an extension mechanism.
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"/>.</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="I-D.ietf-rats-eat"/>.</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
  &(timestamp: 2) => tdate ; RFC3339 date
  &(result-type: 3) => 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 implementation of the artifact producer <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 implementation of the artifact producer <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="timestamp">
          <name>Timestamp</name>
          <t>The <tt>timestamp</tt> field records the date and time at which the query was made, formatted according to <xref section="3.4.1" sectionFormat="of" target="STD94"/>.
Implementations <bcp14>SHOULD</bcp14> populate this field with the current date and time when forming a CoSERV query.</t>
        </section>
        <section anchor="result-type">
          <name>Result Type</name>
          <t>The <tt>result-type</tt> field selects for either <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
result-set //= $$result-set-extensions

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"
        }
      ] ]
    },
    / timestamp /   2: 0("2030-12-01T18:30:01Z"),
    / result-type / 3: 1 / source-material /
  }
}
]]></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 /
        } ]
      ]
    },
    / timestamp /   2: 0("2030-12-01T18:30:01Z"),
    / result-type / 3: 2 / both collected and source material /
  }
}
]]></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 /
      ]
    },
    / timestamp /   2: 0("2030-12-01T18:30:01Z"),
    / result-type / 3: 0 / collected material /
  }
}
]]></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("2030-12-01T18:30:01Z"),
    3: 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"
        }
      ] ]
    },
    / timestamp /   2: 0("2030-12-01T18:30:01Z"),
    / result-type / 3: 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, and <bcp14>MUST</bcp14> return an HTTP 200 (OK) response code unless prevented by an error condition outside the scope of this specification.</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).
In either case, the endpoint implementation <bcp14>MUST</bcp14> provide a document that conforms to the CDDL schema as follows:</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>
            <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>
            </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"
        }
      ] ]
    },
    / timestamp /   2: 0("2030-12-01T18:30:01Z"),
    / result-type / 3: 0 / collected-material /
  },
  / 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: {
                / name / 11: "Component A",
                / digests / 2: [
                  [ 1, h'aa' ],
                  [ 2, h'bb' ]
                ]
              }
            },
            / measurement-map / {
              / mval / 1: {
                / name / 11: "Component B",
                / digests / 2: [
                  [ 1, h'cc' ],
                  [ 2, h'dd' ]
                ]
              }
            }
          ]
        ]
      }
    ],
    / 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>The CoSERV data type serves an auxiliary function in the RATS architecture.
It does not directly convey Evidence, Endorsements, Reference Values, Policies or Attestation Results.
CoSERV exists only to facilitate the interactions between the Verifier and the Endorser or Reference Value Provider roles.
Consequently, there are fewer security considerations for CoSERV, particularly when compared with data objects such as EAT or CoRIM.</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="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>Intel</organization>
            </author>
            <author fullname="Wei Pan" initials="W." surname="Pan">
              <organization>Huawei Technologies</organization>
            </author>
            <date day="7" month="July" 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-08"/>
        </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="29" month="September" year="2025"/>
            <abstract>
              <t>   The Conceptual Messages introduced by the RATS Architecture (RFC9334)
   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 RFC9334 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.  By introducing a shared message format like
   the CMW, we can consistently support different attestation message
   types, evolve message serialization formats without breaking
   compatibility, and avoid having to redefine how messages are handled
   in each protocol.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-msg-wrap-18"/>
        </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="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-rats-eat">
          <front>
            <title>The Entity Attestation Token (EAT)</title>
            <author fullname="Laurence Lundblade" initials="L." surname="Lundblade">
              <organization>Security Theory LLC</organization>
            </author>
            <author fullname="Giridhar Mandyam" initials="G." surname="Mandyam">
              <organization>Mediatek USA</organization>
            </author>
            <author fullname="Jeremy O'Donoghue" initials="J." surname="O'Donoghue">
              <organization>Qualcomm Technologies Inc.</organization>
            </author>
            <author fullname="Carl Wallace" initials="C." surname="Wallace">
              <organization>Red Hound Software, Inc.</organization>
            </author>
            <date day="6" month="September" year="2024"/>
            <abstract>
              <t>   An Entity Attestation Token (EAT) provides an attested claims set
   that describes state and characteristics of an entity, a device like
   a smartphone, 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.

   An EAT is either a CBOR Web Token (CWT) or JSON Web Token (JWT) with
   attestation-oriented claims.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-eat-31"/>
        </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 1578?>

<section anchor="collated-cddl">
      <name>Collated CoSERV CDDL</name>
      <artwork><![CDATA[
;# import comid-autogen

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

profile = comid.oid-type / ~uri

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

concise-mid-tag = {
  ? &(language: 0) => text
  &(tag-identity: 1) => tag-identity-map
  ? &(entities: 2) => [ + comid-entity-map ]
  ? &(linked-tags: 3) => [ + linked-tag-map ]
  &(triples: 4) => triples-map
  * $$concise-mid-tag-extension
}

attest-key-triple-record = [
  environment: environment-map
  key-list: [ + $crypto-key-type-choice ]
  ? conditions: non-empty< {
    ? &(mkey: 0) => $measured-element-type-choice,
    ? &(authorized-by: 1) => [ + $crypto-key-type-choice ]
  }>
]

$class-id-type-choice /= tagged-oid-type
$class-id-type-choice /= tagged-uuid-type
$class-id-type-choice /= tagged-bytes

class-map = non-empty<{
  ? &(class-id: 0) => $class-id-type-choice
  ? &(vendor: 1) => tstr
  ? &(model: 2) => tstr
  ? &(layer: 3) => uint
  ? &(index: 4) => uint
}>

comid-entity-map =
  entity-map<$comid-role-type-choice, $$comid-entity-map-extension>

$comid-role-type-choice /= &(tag-creator: 0)
$comid-role-type-choice /= &(creator: 1)
$comid-role-type-choice /= &(maintainer: 2)

conditional-endorsement-series-triple-record = [
  condition: stateful-environment-record
  series: [ + conditional-series-record ]
]

conditional-series-record = [
  selection: [ + measurement-map]
  addition: [ + measurement-map ]
]

COSE_KeySet = [ + COSE_Key ]

COSE_Key = {
    1 => tstr / int
    ? 2 => bstr 
    ? 3 => tstr / int 
    ? 4 => [+ (tstr / int) ]
    ? 5 => bstr
    * cose-label => cose-value
}

cose-label = int / tstr
cose-value = any

coswid-triple-record = [
  environment-map
  [ + concise-swid-tag-id ]
]

concise-swid-tag-id = text / bstr .size 16

$crypto-key-type-choice /= tagged-pkix-base64-key-type
$crypto-key-type-choice /= tagged-pkix-base64-cert-type
$crypto-key-type-choice /= tagged-pkix-base64-cert-path-type
$crypto-key-type-choice /= tagged-cose-key-type
$crypto-key-type-choice /= tagged-thumbprint-type
$crypto-key-type-choice /= tagged-cert-thumbprint-type
$crypto-key-type-choice /= tagged-cert-path-thumbprint-type
$crypto-key-type-choice /= tagged-pkix-asn1der-cert-type
$crypto-key-type-choice /= tagged-bytes

tagged-pkix-base64-key-type = #6.554(tstr)
tagged-pkix-base64-cert-type = #6.555(tstr)
tagged-pkix-base64-cert-path-type = #6.556(tstr)
tagged-thumbprint-type = #6.557(digest)
tagged-cose-key-type = #6.558(COSE_KeySet / COSE_Key)
tagged-cert-thumbprint-type = #6.559(digest)
tagged-cert-path-thumbprint-type = #6.561(digest)
tagged-pkix-asn1der-cert-type = #6.562(bstr)

domain-dependency-triple-record = [
  $domain-type-choice
  [ + $domain-type-choice ]
]

domain-membership-triple-record = [
  $domain-type-choice
  [ + environment-map ]
]

conditional-endorsement-triple-record = [
  conditions: [ + stateful-environment-record ]
  endorsements: [ + endorsed-triple-record ]
]

$domain-type-choice /= uint
$domain-type-choice /= text
$domain-type-choice /= tagged-uuid-type
$domain-type-choice /= tagged-oid-type

endorsed-triple-record = [
  condition: environment-map
  endorsement: [ + measurement-map ]
]

entity-map<role-type-choice, extension-socket> = {
  &(entity-name: 0) => $entity-name-type-choice
  ? &(reg-id: 1) => uri
  &(role: 2) => [ + role-type-choice ]
  * extension-socket
}

$entity-name-type-choice /= text

environment-map = non-empty<{
  ? &(class: 0) => class-map
  ? &(instance: 1) => $instance-id-type-choice
  ? &(group: 2) => $group-id-type-choice
}>

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
}

$group-id-type-choice /= tagged-uuid-type
$group-id-type-choice /= tagged-bytes

identity-triple-record = [
  environment: environment-map
  key-list: [ + $crypto-key-type-choice ]
  ? conditions: non-empty<{
    ? &(mkey: 0) => $measured-element-type-choice,
    ? &(authorized-by: 1) => [ + $crypto-key-type-choice ] 
  }>
]

$instance-id-type-choice /= tagged-ueid-type
$instance-id-type-choice /= tagged-uuid-type
$instance-id-type-choice /= $crypto-key-type-choice
$instance-id-type-choice /= tagged-bytes

ip-addr-type-choice = ip4-addr-type / ip6-addr-type
ip4-addr-type = bytes .size 4
ip6-addr-type = bytes .size 16

raw-int-type-choice = int / tagged-int-range
int-range = [min: int / negative-inf, max: int / positive-inf]
tagged-int-range = #6.564(int-range)
positive-inf = null
negative-inf = null

linked-tag-map = {
  &(linked-tag-id: 0) => $tag-id-type-choice
  &(tag-rel: 1) => $tag-rel-type-choice
}

mac-addr-type-choice = eui48-addr-type / eui64-addr-type
eui48-addr-type = bytes .size 6
eui64-addr-type = bytes .size 8

$measured-element-type-choice /= tagged-oid-type
$measured-element-type-choice /= tagged-uuid-type
$measured-element-type-choice /= uint
$measured-element-type-choice /= tstr

measurement-map = {
  ? &(mkey: 0) => $measured-element-type-choice
  &(mval: 1) => measurement-values-map
  ? &(authorized-by: 2) => [ + $crypto-key-type-choice ]
}

measurement-values-map = non-empty<{
  ? &(version: 0) => version-map
  ? &(svn: 1) => svn-type-choice
  ? &(digests: 2) => digests-type
  ? &(flags: 3) => flags-map
  ? (
      &(raw-value: 4) => $raw-value-type-choice,
      ? &(raw-value-mask: 5) => raw-value-mask-type
    )
  ? &(mac-addr: 6) => mac-addr-type-choice
  ? &(ip-addr: 7) =>  ip-addr-type-choice
  ? &(serial-number: 8) => text
  ? &(ueid: 9) => ueid-type
  ? &(uuid: 10) => uuid-type
  ? &(name: 11) => text
  ? &(cryptokeys: 13) => [ + $crypto-key-type-choice ]
  ? &(integrity-registers: 14) => integrity-registers
  ? &(raw-int: 15) => raw-int-type-choice
  * $$measurement-values-map-extension
}>

non-empty<M> = (M) .and ({ + any => any })

oid-type = bytes
tagged-oid-type = #6.111(oid-type)

$raw-value-type-choice /= tagged-bytes
$raw-value-type-choice /= tagged-masked-raw-value

raw-value-mask-type = bytes

tagged-masked-raw-value = #6.563([
  value: bytes
  mask : bytes
])

reference-triple-record = [
  ref-env: environment-map
  ref-claims: [ + measurement-map ]
]

stateful-environment-record = [
  environment: environment-map,
  claims-list: [ + measurement-map ]
]

svn-type = uint
svn = svn-type
min-svn = svn-type
tagged-svn = #6.552(svn)
tagged-min-svn = #6.553(min-svn)
svn-type-choice = svn / tagged-svn / tagged-min-svn

$tag-id-type-choice /= tstr
$tag-id-type-choice /= uuid-type

tag-identity-map = {
  &(tag-id: 0) => $tag-id-type-choice
  ? &(tag-version: 1) => tag-version-type
}

$tag-rel-type-choice /= &(supplements: 0)
$tag-rel-type-choice /= &(replaces: 1)

tag-version-type = uint .default 0

tagged-bytes = #6.560(bytes)

triples-map = non-empty<{
  ? &(reference-triples: 0) =>
    [ + reference-triple-record ]
  ? &(endorsed-triples: 1) =>
    [ + endorsed-triple-record ]
  ? &(identity-triples: 2) =>
    [ + identity-triple-record ]
  ? &(attest-key-triples: 3) =>
    [ + attest-key-triple-record ]
  ? &(dependency-triples: 4) =>
    [ + domain-dependency-triple-record ]
  ? &(membership-triples: 5) =>
    [ + domain-membership-triple-record ]
  ? &(coswid-triples: 6) =>
    [ + coswid-triple-record ]
  ? &(conditional-endorsement-series-triples: 8) =>
    [ + conditional-endorsement-series-triple-record ]
  ? &(conditional-endorsement-triples: 10) =>
    [ + conditional-endorsement-triple-record ]
  * $$triples-map-extension
}>

ueid-type = bytes .size (7..33)
tagged-ueid-type = #6.550(ueid-type)

uuid-type = bytes .size 16
tagged-uuid-type = #6.37(uuid-type)

version-map = {
  &(version: 0) => text
  ? &(version-scheme: 1) => $version-scheme
}

digest = [
  alg: (int / text),
  val: bytes
]

digests-type = [ + digest ]

integrity-register-id-type-choice = uint / text

integrity-registers = {
  + integrity-register-id-type-choice => digests-type
}

concise-swid-tag = {
  tag-id => text / bstr .size 16,
  tag-version => integer,
  ? corpus => bool,
  ? patch => bool,
  ? supplemental => bool,
  software-name => text,
  ? software-version => text,
  ? version-scheme => $version-scheme,
  ? media => text,
  ? software-meta => one-or-more<software-meta-entry>,
  entity => one-or-more<entity-entry>,
  ? link => one-or-more<link-entry>,
  ? payload-or-evidence,
  * $$coswid-extension,
  global-attributes,
}

payload-or-evidence //= ( payload => payload-entry )
payload-or-evidence //= ( evidence => evidence-entry )

any-uri = uri
label = text / int

$version-scheme /= multipartnumeric
$version-scheme /= multipartnumeric-suffix
$version-scheme /= alphanumeric
$version-scheme /= decimal
$version-scheme /= semver
$version-scheme /= int / text

any-attribute = (
  label => one-or-more<text> / one-or-more<int>
)

one-or-more<T> = T / [ 2* T ]

global-attributes = (
  ? lang => text,
  * any-attribute,
)

hash-entry = [
  hash-alg-id: int,
  hash-value: bytes,
]

entity-entry = {
  entity-name => text,
  ? reg-id => any-uri,
  role => one-or-more<$role>,
  ? thumbprint => hash-entry,
  * $$entity-extension,
  global-attributes,
}

$role /= tag-creator
$role /= software-creator
$role /= aggregator
$role /= distributor
$role /= licensor
$role /= maintainer
$role /= int / text

link-entry = {
  ? artifact => text,
  href => any-uri,
  ? media => text,
  ? ownership => $ownership,
  rel => $rel,
  ? media-type => text,
  ? use => $use,
  * $$link-extension,
  global-attributes,
}

$ownership /= shared
$ownership /= private
$ownership /= abandon
$ownership /= int / text

$rel /= ancestor
$rel /= component
$rel /= feature
$rel /= installationmedia
$rel /= packageinstaller
$rel /= parent
$rel /= patches
$rel /= requires
$rel /= see-also
$rel /= supersedes
$rel /= supplemental
$rel /= -256..64436 / text

$use /= optional
$use /= required
$use /= recommended
$use /= int / text

software-meta-entry = {
  ? activation-status => text,
  ? channel-type => text,
  ? colloquial-version => text,
  ? description => text,
  ? edition => text,
  ? entitlement-data-required => bool,
  ? entitlement-key => text,
  ? generator =>  text / bstr .size 16,
  ? persistent-id => text,
  ? product => text,
  ? product-family => text,
  ? revision => text,
  ? summary => text,
  ? unspsc-code => text,
  ? unspsc-version => text,
  * $$software-meta-extension,
  global-attributes,
}

path-elements-group = ( ? directory => one-or-more<directory-entry>,
                        ? file => one-or-more<file-entry>,
                      )

resource-collection = (
  path-elements-group,
  ? process => one-or-more<process-entry>,
  ? resource => one-or-more<resource-entry>,
  * $$resource-collection-extension,
)

file-entry = {
  filesystem-item,
  ? size => uint,
  ? file-version => text,
  ? hash => hash-entry,
  * $$file-extension,
  global-attributes,
}

directory-entry = {
  filesystem-item,
  ? path-elements => { path-elements-group },
  * $$directory-extension,
  global-attributes,
}

process-entry = {
  process-name => text,
  ? pid => integer,
  * $$process-extension,
  global-attributes,
}

resource-entry = {
  type => text,
  * $$resource-extension,
  global-attributes,
}

filesystem-item = (
  ? key => bool,
  ? location => text,
  fs-name => text,
  ? root => text,
)

payload-entry = {
  resource-collection,
  * $$payload-extension,
  global-attributes,
}

evidence-entry = {
  resource-collection,
  ? date => integer-time,
  ? device-id => text,
  ? location => text,
  * $$evidence-extension,
  global-attributes,
}

integer-time = #6.1(int)

tag-id = 0
software-name = 1
entity = 2
evidence = 3
link = 4
software-meta = 5
payload = 6
hash = 7
corpus = 8
patch = 9
media = 10
supplemental = 11
tag-version = 12
software-version = 13
version-scheme = 14
lang = 15
directory = 16
file = 17
process = 18
resource = 19
size = 20
file-version = 21
key = 22
location = 23
fs-name = 24
root = 25
path-elements = 26
process-name = 27
pid = 28
type = 29
entity-name = 31
reg-id = 32
role = 33
thumbprint = 34
date = 35
device-id = 36
artifact = 37
href = 38
ownership = 39
rel = 40
media-type = 41
use = 42
activation-status = 43
channel-type = 44
colloquial-version = 45
description = 46
edition = 47
entitlement-data-required = 48
entitlement-key = 49
generator = 50
persistent-id = 51
product = 52
product-family = 53
revision = 54
summary = 55
unspsc-code = 56
unspsc-version = 57

multipartnumeric = 1
multipartnumeric-suffix = 2
alphanumeric = 3
decimal = 4
semver = 16384

tag-creator=1
software-creator=2
aggregator=3
distributor=4
licensor=5
maintainer=6

abandon=1
private=2
shared=3

ancestor=1
component=2
feature=3
installationmedia=4
packageinstaller=5
parent=6
patches=7
requires=8
see-also=9
supersedes=10

optional=1
required=2
recommended=3

]]></artwork>
    </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 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:
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
rC9n62n5x729BbNi3r5T26PVNPuP8c5/fP9nbHbirBANFsNCeY7dNEM2vvRq
oVEUIysvIRUiT4MnqIb6LneP8nJUEMnI+QxKaxDP/jcvfOrJckuKQWf+oLzq
6KqVwCBgMVjcZe60e5LETwnv3IUWTaX5kyVfoUzTuPerbDwaYs2P5ZPVk5Wm
VODDTOxTDi9+Dfm2j5fvol+RJH9/6rWgtchX3YUhQcJayhsu1U+UffDm0LzK
h/0mWftdbG+ene4mp2fxxtZ2Gu88ebIVJ8lOGj/ZPXsy3Nzd2D49SxZUH0Mu
e6yeCrGTredC7SjMXMb6sOKTljLcrQgkF3o0SUZpTwratoLTnPtqu78jyaJc
RhIs7IaNKYVPp8V0Nuajl0zqR7tkRY2BDiEjzokQcFh2eIxK05a4DM9B4Dk8
nAk5TlVNEX/hSYcfpGGkgxXfdIE07HwUNCeoG7Qs91sDUAKrXaOB6PCgKxMu
CD5pOgO94/hf5+CfXFmLb64lqHUD2PkmeIah2cVGx/5g42zc5if7qtuvJIYR
WiyTqz7SUczkCrbKjfVh4SzRWmn6TZrvG76X5uvAc9N8+cUX7kFso0UqhOEM
uovxLMp5H90ZmzXurNX1Beeoxx/Sa99SgxmRu/Ay5nMztbj4Izc1fitoYCSE
swYolqWrv1k72KwaH9D30Qoa8KPfEvK0G3KL9BbgIL1G8W8MhEVQCAQOJfEK
fu3dNkwNErG4TBGXmxaXPtQ68N+sjQwNWnMjjCcffrOJQlddE+UcDP6mje+6
iqt6Uv8miC7cIR3+jgMEG8iiLvnwN3V8I2YUB9xNnUAvOx7aFETC15fRl8py
DorjI/gbG6AYPH774q05eHt8tGDP/Q5zYLXIzIJq6JLuyq8wfarp50ywpk11
oTkl3uUCzWNfMr2KnHNN7SlRFaReekFNzRSxWwpyajVbB8wFVxTyixBVHacj
HS4IiTiyt3OQisNRct6xlYjKl4WaMXr4pqUHoUecxmWqAdJYqRI+xiMvyppr
lv2zxzVShMtDpIbgUolMCp3jw32O06AT99PrWgI/NHOjgX1SiKVrhJXP6SW2
gbPpdZWpsLsfJecfqW0FGslLzl7rHs0bhiQzGvT5OZY/koFYCB8EJUeeS9n+
5xIv9EdbP8gT1kCUVIdOboG8mVejDm/zLFOHcL/kEiq2UgvIq00nZWhdGBgY
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
ew0p0/rKrJnNi5U7+jmID6zOu/dwY6Nn7rmqKrP3tuGru7+R62z6/f77Ffv4
Lirt+Fn77SmO5N3yH/a8rdq73079fs+b1h3f6E49Pn5NKFu5D2x37NRuIuju
Sr/pXPA7vqGf5oLf8U3ngt/6zZwFvw9szZfzvqHDg/0aPdoYBMJWMZi3Z/jH
liqm6I33dD8Wrs+pfJ5XuVp0H8/C7QU60XmaWytGjImLrF4gR0qtOmCnhu97
csncGrksJ98e6oHuiDeuqTbmjA7Sd2/TOjW0kzldx+VbeG0BTQBdaaAz1Fii
LuGSjeyfge7twOJf1iMCrUHmXyN/oGj0jDusbzTWuTBAmLDM+iceEEx97xRh
p0vveR6s8t9X7+l3iug5VKd6z8/db2/Xe+B1x8s79B74tOPVv/QeevxZes/X
r45v+eZXc+Cdx5/DgeGru785xGNXs/Dx+qeFe8P2T8m1+WW3mL7tm3li+k7Y
REwDlhUJd+Kgi7DuHOcXfMOSi+TUE/ZSW2H1nKtnsLnKrlhb6dWXVCbBC2xU
2PwCIeWx6eASzNTzhNuCkuw7Rl+7XKVhz6nJYyxRM3j+7SWsPreOO+9O5KZP
LZCVv1TGeqkMPrRVjYdi7LIezexpWJf7wTl/4PWwTuqm+5ogFhlu5bXvCGRA
XKrH9saOWf5GzyiydLTih/S7gzLfYygij86h0FOBfg5Zn8+Slv8Slx0d3iUu
u2Vc1xdNVtQJ3txxOlv8HVgRyrhl2rEr9/6m++Xt33QoGXd+8+os/qbI0/gN
1oEaiDT7PNXkl8/n/2XVBLmLz1xu66pTNSHF5BerJhsP71RN/lGG3qIJC5Wa
I+Ku0Q//WZ4N09F7Ay/RzVqmk+JSjgncDVqZunpPNbiu3zhQ05s9JNoFGTfw
Xy4q28zi0mNYrUetFTNIgjSrfmoBVD1anGJsnqbBQeNXeM6Qp3X8ogTTlY9n
KQ5Z7tWiq7fho2TcLK2DRT+e7GxJCQx5O9XD8ybQjRLbYaX9Ak+QsoohfXV4
/FIPCUZ4t7fcQoZpXnyvJPxxDmKJjNURgk06AcBT9aNveR2w/otzzI8zO2k8
vMcIm8tsNMNr7sNVJcFuz/vx5bUfDqpCGkG0BZMnpHbkBYaZYDquO6WaingN
QiVc0VyXq+jqaQe3VMFohAw6c+AY1Mqd0nPkr6AwkbJMdJ6Ob05TPSBMJRqs
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
+lmW1mdofK/w4pInk1Ks8buDt2/evP0GSRyJUu98zF0DEEIpXz9XlOsHnI8r
4dnjtMQW6D0F6HFpKj0Hdiyf+7hlkyJjm79J/U9O2tv0JOxl/kbl1BYuMUSZ
ENhrhgsTZKxTyBSXq/ZqK/BZ+AL1gOx3c2HlHhv/rn0f3X/bR98EnvYTO5cT
N/rnTuvEn9dJ/x4M5l+cxYLKWxZZy3+rTfvV7Zu2qTT8KhnbqmH7GdKW3v1L
MP5LMP4/tMfuEIxNrfm32mNchv7vuMeo6j9epnr8Mn5sbzCp04/1v3be32nn
4Zr+ljuP+/sfsPP4CnYtzvSSoJ/no+Ae5Eok56gIPzao0slh1EJX585x0fMP
gBcOKIyAk8r1fvFD50+s0Ix8d7iCB6qyJz0XCPmArCNkWJRp7Pbuzc0AnSF+
BSpj/4R/aTv/DIA3/SOdlbeAJ0O7GN0qz19s3su9MUfpd91s3cev8QkY3Ria
7C2M07N6QT0C36RXwSIaxTPyDQrEoYP5HoOLG44GFB/jaeo8WbISW7sP+/0n
8GNKJCz2Z/0JbxH4g7182rs6/cC/TeCXUY4ufdh5l2vLuzgWuCevKN9VfXaW
fbRMfhjC0t4Zsi+OgtAl9dwFTPId1jQipLgtbb5Z34+iOI4NRmOgL5F9mM7d
T/fuflocyuMYr9q9oYhW/17dYpKN9IpcvRtXrlj9t2WxlgZmYwXvTJU/6RW5
oQdmk17QH/D4K3ghpSsGZoteyZ94varaXns8ar+AkaXK7H8BJqP5YHX58qnm
JwBqbC1fGIJqlMBujbnU6x5V6qTfBzIol3mFbwlcr4ZoNeCrfKlVs7bo++g9
dG6LBq/vmWWYqnTMyMGR1kwIQPTerHhAqe9X4NI/FbQv9EEsiImHF0U2TH8D
SN1Qm13A6usGvMzJGFj63UJKf/32YMogW10w0jsGUKv0IY3UybmQKxKfxkPo
oqCiQ+QKzWIWwrWlWv+ZpYh/W6YHWWop2E4idk2p+CoNmOUfUoIC2m/b9u6x
bQ0wUOliaLfDw/OfMvKq+eKLxrxiOkCia3OBtBM6mKCrlPnLmAMoZX28LTJo
lkKG13QDc4alHhG8L7jeE3fmVlBmZZMIqoG7X1NLieOkJ/CdYvgLWVnADp8b
+R327CdyNP0TlcS2VHgHKDdPkUq+0MrMwXugGCmxrWzkzoaz2X1bUt0uoDPl
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
XOHdPXpJz4Au4jkcZVjdLPr/AbYNr62QaAEA

-->

</rfc>
