<?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.27 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-howard-rats-coserv-01" 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-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>
    <date year="2025" month="April" day="08"/>
    <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="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="queries">
        <name>Queries</name>
        <t>The purpose of a query is to allow the consumer (Verifier) to specify the artifacts (Endorsements and Reference Values) that it needs.
Consequently, a query corresponds to the environmental characteristics of one or more Attesters.
Such environmental characteristics are identical to those used in the information model of CoRIM <xref target="I-D.ietf-rats-corim"/>.
In summary, they can include the following:</t>
        <ul spacing="normal">
          <li>
            <t>An individual Attester instance.</t>
          </li>
          <li>
            <t>A group (identifiable collection) of Attester instances.</t>
          </li>
          <li>
            <t>A class of Attester, defined by characteristics such as the vendor or model, of which there may be an arbitrary number of instances.</t>
          </li>
        </ul>
        <t>To facilitate efficient transactions, a single query can specify either multiple instances, multiple groups or multiple classes.</t>
      </section>
      <section anchor="result-sets">
        <name>Result Sets</name>
        <t>The result set contains the Endorsements and Reference Values that are needed by the Verifier in order to verify and appraise Evidence from one or more Attesters.</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
  ? result-set
}

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
}

artifact-type = &(endorsed-values: 0)
                / &(trust-anchors: 1)
                / &(reference-values: 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).
These correspond to the following three categories of endorsement artifact that can be identified in the RATS architecture:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Trust Anchor</strong> (<tt>trust-anchors</tt>): 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 is able to verify the cryptographic signature.</t>
            </li>
            <li>
              <t><strong>Endorsed Value</strong> (<tt>endorsed-values</tt>): An endorsed value is as defined in <xref section="1.1.1" sectionFormat="of" target="I-D.ietf-rats-corim"/>.</t>
            </li>
            <li>
              <t><strong>Reference Value</strong> (<tt>reference-values</tt>): 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>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>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 must be used for the query to be valid.
All three methods correspond to environments that are also defined within 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>
          <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 (such as a 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>
      </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[
result-set //= ? reference-values
result-set //= ? endorsed-values
result-set //= ? trust-anchors
result-set //= ? $$result-set-extensions

reference-values = (
  &(rvt: 10) => [ * reference-triple-record ]
)

endorsed-values = (
  &(evt: 20) => [ * endorsed-triple-record ]
  &(cet: 21) => [ * conditional-endorsement-triple-record ]
)

trust-anchors = (
  &(akt: 30) => [ * attest-key-triple-record ]
  &(tas: 31) => [ * cots ]
)

;
; import CoTS
;
cots = "TODO COTS"
]]></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>
      <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"
        }
      ]
    }
  }
}
]]></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 /
        }
      ]
    }
  }
}
]]></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 /
      ]
    }
  }
}
]]></sourcecode>
    </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 590?>

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

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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
2OOAto+Hhwv30BgWDZEU7OojOm1QzQIlkStO6GTy8ok/2KxrnWVReKJj22Fo
f9odjGcpYqo/PPkGhL6361d4L1Z7OzDASLSR0vjCSEsOdi2ZQJYd9uEp+oOJ
Nxjt223jpYOy3ahhoKlRZEwhNY6czaD2IrZ81H7UMLDUQWQNEnUY8RlTzyNj
OaoXkRiM6igSrKRGMHJgMqrRKArsUDUaR20TUY32oqZpqEb7EYNrNTqIPBmL
/gVJbB89j6woU6MXkRNWanQUsQxR490olB1qPIqIG9V4HLktUeO9yPKfGu9H
zHdqfBA1Dr0aH0bhsVRjmAnRfvwiEkfC+CgKoLraG0UGoqu9ccTIXO3tRT4G
V3v7EfOV2oNlOz5Se4eRA69q73nEsFXtvYg8YKr2jiICo2p/N/JBqNofRQQ+
1f446oAnan8vCmGJ2t+PuuCI2seJeTBE7R9GFn6o/efRPbBD7b+IWnBD7R9F
HsxQB7tRA02og1FkUYQ6GEdN9KAO9iKHGtQBMLRBC+rgIApQgjo4jJroQB08
j6KmWUsnZ4OtS0fJN27pOJmranSiyHwlht17sc/nU6yfk1HUNIhOoDdrCZ1A
T84EOoGTILbPyUHkjJ6TQ7B+GdufIHkI+0M/bBpAH5HB8/DZInmoIBgearTQ
O4zVxO0neAAQscN4gtVPnkcGpZ+8iAw+PzmKHDI/AWEQGZB9MjL1pzC8B6xx
kvJK4GmCb/ZlejrnvwHx9ZjDi1CpN4PuNd7Qob8gEduaeNvGXHM/pqvs58CH
RXkc/V+ahji+OJ0AAA==

-->

</rfc>
