<?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-howard-rats-coserv-02" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="CoSERV">Concise Selector for Endorsements and Reference Values</title>
    <seriesInfo name="Internet-Draft" value="draft-howard-rats-coserv-02"/>
    <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>
    <date year="2025" month="June" day="12"/>
    <area>Security</area>
    <workgroup>Remote ATtestation ProcedureS</workgroup>
    <keyword>RATS</keyword>
    <keyword>attestation</keyword>
    <keyword>endorsement</keyword>
    <keyword>reference value</keyword>
    <abstract>
      <?line 60?>

<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://rats-endorsements-distribution.github.io/draft-howard-rats-coserv/draft-howard-rats-coserv.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-howard-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/rats-endorsements-distribution/draft-howard-rats-coserv"/>.</t>
    </note>
  </front>
  <middle>
    <?line 66?>

<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.
This document does not define the complete APIs or interaction models for such tools and services.
The scope of this document is limited to the definitions of the query language and the result set only.</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>
      <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>
      <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.
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[
coserv = {
  &(profile: 0) => profile
  &(query: 1) => query
  ? &(results: 2) => results
}

profile = 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[
environment-selector-map = { selector }

selector //= ( &(class: 0) => [ + class-map ] )
selector //= ( &(instance: 1) => [ + $instance-id-type-choice ] )
selector //= ( &(group: 2) => [ + $group-id-type-choice ] )
]]></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>
          <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[
results = {
  result-set
  &(expiry: 10) => tdate ; RFC3339 date
  ? &(source-artifacts: 11) => [ + cmw-record ]
}

result-set //= reference-values
result-set //= endorsed-values
result-set //= trust-anchors
result-set //= $$result-set-extensions

refval-quad = {
  &(authorities: 1) => [ + $crypto-key-type-choice ]
  &(rv-triple: 2) => reference-triple-record
}

reference-values = (
  &(rvq: 0) => [ * refval-quad ]
)

endval-quad = {
  &(authorities: 1) => [ + $crypto-key-type-choice ]
  &(ev-triple: 2) => endorsed-triple-record
}

cond-endval-quad = {
  &(authorities: 1) => [ + $crypto-key-type-choice ]
  &(ce-triple: 2) => conditional-endorsement-triple-record
}

endorsed-values = (
  &(evq: 1) => [ * endval-quad ]
  &(ceq: 2) => [ * cond-endval-quad ]
)

ak-quad = {
  &(authorities: 1) => [ + $crypto-key-type-choice ]
  &(ak-triple: 2) => attest-key-triple-record
}

cots-stmt = {
  &(authorities: 1) => [ + $crypto-key-type-choice ]
  &(cots: 2) => cots
}

trust-anchors = (
  &(akq: 3) => [ * ak-quad ]
  &(tas: 4) => [ * cots-stmt ]
)

;
; import CoTS
;
cots = "TODO COTS"
;
; import CMW
;
cmw-record = "TODO CMW"
]]></sourcecode>
      </section>
      <section anchor="encoding-requirements">
        <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 an end-to-end secure channel without any 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 = [
  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[
signed-coserv-protected-hdr = {
  1 => int                            ; alg
  2 => "application/coserv+cbor" / 10000 ; cty
  * cose.label => cose.values
}

signed-coserv-unprotected-hdr = {
  * cose.label => cose.values
}

cose.label = int / text
cose.values = any
]]></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>reference-value triples</tt> (codepoint 0).
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: {
    10: 0("2030-12-13T18:30:02Z"),
    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)
              }
            }
          ]
        ]
      }
    ]
  }
}
]]></sourcecode>
      </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>
          </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>
      <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>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="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="3" month="March" 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-07"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="IANA.media-types" target="https://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.core-parameters" target="https://www.iana.org/assignments/core-parameters">
          <front>
            <title>Constrained RESTful Environments (CoRE) Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
      </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="3" month="March" 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-06"/>
        </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>
      </references>
    </references>
    <?line 827?>

<section anchor="collated-cddl">
      <name>Collated CoSERV CDDL</name>
      <artwork><![CDATA[
coserv = {
  &(profile: 0) => profile
  &(query: 1) => query
  ? &(results: 2) => results
}

profile = oid-type / ~uri

environment-selector-map = { selector }

selector //= ( &(class: 0) => [ + class-map ] )
selector //= ( &(instance: 1) => [ + $instance-id-type-choice ] )
selector //= ( &(group: 2) => [ + $group-id-type-choice ] )

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 numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
ue+KUb5eHrrfUfj1xOR6IKF1Pwrq1r6iSFvEN70k3AIne/Pc8DOZrSL7FyLQ
IgGazhUzygN3DevLpl21iD+ZD8ucIyjww4eo3p+RBPa3bNF25DdBcrhK08jv
35RFNcOIIftesadQ888aQWTFs0CteeCqwe+QHkbRIh637YteJftPg52BkkNv
N6J6jRD+h1Gtfu37U0Dku85Kq+XigQ08jL6vBQsU9/aLilpUZ+COfTyYAtDG
LEDbM7vi98m3KT3+V6MSwwdYg27DabouW7mvXLIxU5ef3gzK68zMFP5s4bks
FVsjoPw0LzFgDeIGhvtZ1kAft+TSDMghcFJproYBfmFLmgRUBBpbYRGXHw0/
DEvNPJTaNjsl2G64Yxv2G663lJrMKFUL/TJQogugPY4iMfxTbKr4Hcmx4ZOO
NMu3FUllvAEOcfkjy3eSltHrkLcfdh+Tz+09AC2MPGXkCOOawfYM8JZvkQN0
glx04ECcNNAaGX875vlSAIhfDgvfoDy79WZb9dHLsPUZVoBXbDAXH/xzC9qT
NdUL7YhqFIGJ7GAw2DIl0KgddRr86N5qiEDwj63G/KSGXHZm0YZWhg/sbaFU
IjjOTZTCyspmKNr2s022yTTwFbWrNnkGP9HDM+UdysZdKtr9UhMePh7Ck5za
xxFSoYS+4vW6E0tAImCuvVqRAI9LSUUfIu2x2rZrQh/3tqRgO6qRJe7U8ffg
hzQCFGmyTEvmN3xzRzOqO0Qse34IX34m9SzpdU4WQ35plFuZZY1js/WXrnkZ
VRptyhtrSugbP+YS1UeRDVL9iZ7GeBN61+Ix82pB3t0t+ok9OG9MK0epI7DR
7YgIk4a5AcMNjaop3Ca7pm2/0WggJC7UCQxjss036AymecN7ZDiX7WCjf8l0
0TD1GE+W7eI+m5DpqWHbKYXL1XvaaAQyPQUWZaMZ2l5a7c2u6QMcC6UwPa/L
X+COuG8ohwm7Dxqk2TsyJw9zaxzJsuSaiLr1pN/f27M0yK9GVGh3yxbBybAE
oqmI1MVS7mDvyZYtgfae8GUJSk0+8yQAU7scz/XCGUjCYiQiLJEJeY/T2bHa
cgne6DI2SaMmSV7kS3DiXZEu4GNTSKhTSiEokj+upYFJW/2HFomj0VlNoLxt
ejSkN+Pb+KrVudGVGuZOuRF3dNEVBb9YrkpjxeCyJaXGD4oc1Y1T/0uZT6ub
uNBkCjNzkCbmkze0+xruVssGcjWOX2rvd6Er+pRnuodRC3mh/xh87FHeqK+6
1tNZry300FV7Rm75ejUsCypJFkWsYC69dq2DnrbHnjIsn6X5CM4pkE+6jqzL
LkVlNDuRUAeTpBEjP6QSZ8DavqOR/YlZsuVv2ywCqbK3KhLE0SKJjCtOEAbl
lKgGfmShnDQrLqoMo+GT8UPq9Cil6qe2qnG6nMd3dCWhfm2fgLpBYdsX/8Th
Ii2QJZ+09Uj6G4rVv4Jmfhl09BXmkPbLLlFKv4SKP6rhY/gDyEBjL2WcZ3SP
0sfUxyqYTxc7n8flXDaFqRIVAGki2Qmm0DVlvrTc9azlpvFn575vHj02eIs2
gfuOxWjfrgPiCywUpHbeH6zlZmow20zgfsymXkWbMP5/V2iPaOOLeXnAL5tg
0Bpf4neFKd2G9UtcTIAr81HDHWFrurCJtj3QzUFEq4GtlQblNxkLHUS47C8C
M6PbF/Cv11x4it8HxmhiRfjXgJhn+QAAu/ERoHO82FkrpMtOla6VxiNQN4H1
h6U+oHDeVBPvlzDQucBeM7clkufA/iZraMr3tWjR9ssyHn+MZ1oq6ML7UPg9
EuMh/ZR/FxzD7ApKrXt4L8oVrJYaRWK/jseqbGGPIvUO9/f3Dt1ScQfgWy7R
y7ZAhp14BfgsLUWe2jIfaC1cx6EZ3o4nmPQkQ0mABXIlqQU/MEwwh4nA9rdy
UD9zSPBBs2RYK8woBpKERAzA7JlFhnzer4Zp3II+6A1cejYQbUKbpI1neI8P
b89jH04wkU902apqLexN40WSruukjKNyazLAarHA6x3hgcrKZTnu0RX+tg8t
UMRDV9u8hzDuam4MnGWPw2mRAz+T6+h50RA07AdPjGj/75niUM2wPZbd05Tf
P+Wkm+7pAOFOLVO2oMcEMfXxpDgQekzv9bp2VFf5MT9kUp+MD1yYrluUHBZ6
angNiLPo4SuRstWIWRLJxiXUrvVIINNqZ1481v17W9uouyYWwBRH/dwGZk66
hFPwun4AjvkbILMwZU1+v+Rj5gn2OKDt4/7hwj00ikWNJAW7+oBOa1CzgpLQ
FUd0UsmD4g82bVtnkece6dh2MrQ/7RbEsxAx1e+ffE2EvrPrZ/wGlNuBHnqi
DZXGfCMNOti2ZBKy7LD3T9EfTKzBqN9uGysdlO1GNQVNDSKjCqlh5HQGtRex
5qP2o5qCpQ4iq5Cow4jPmHoSGc1RPY1EYVRHkchKagAjByqjGgyiQA9Vg2HU
VBHVYC+qq4ZqsB+xcK0GB5FHY9G+IIHtgyeRJWVq8DRyxEoNjiKmIWq4G4W0
Qw0HEWGjGg4jtyVquBdZ/FPD/YjxTg0PotqhV8PDKDyWaggzIdgPn0ZiSBge
RYGorvYGkRHR1d4wYslc7e1Fvgyu9vYjxiu1B8t2eKT2DiMnvKq9JxGLrWrv
aeQJpmrvKCJhVO3vRr4QqvYHEQmfan8YtYgnan8vCsUStb8ftYkjah8n5okh
av8wsuKH2n8S3SF2qP2nUUPcUPtHkSdmqIPdqCZNqINBZKUIdTCM6tKDOtiL
nNSgDgChjbSgDg6iQEpQB4dRXTpQB0+iqK7W0snZoOvSUfKVWzpO5uIanShS
XwlhMS9f5OlFJ4OorhCdQG9WEzqBnpwKdAInQXSfk4PIKT0nh6D9smx/guAh
2R/6YdUA+oiMPA+frSQPFUSGhxoN6R3GqsvtJ3gAUGKH8URWP3kSGSn95Glk
5POTo8hJ5idADCIjZJ8MTP0JDO8J1jhJyRl4OsYMfqmezPippc/H7F6ESp0p
dK/xvg690xTbmnj3xlx6P6aL7eeAh3lxHP1fGlfkRkvOAAA=

-->

</rfc>
