<?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-poirier-rats-eat-da-02" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.1 -->
  <front>
    <title abbrev="EAT DA">An EAT Profile for Device Attestation</title>
    <seriesInfo name="Internet-Draft" value="draft-poirier-rats-eat-da-02"/>
    <author fullname="Mathieu Poirier">
      <organization>Linaro</organization>
      <address>
        <email>mathieu.poirier@linaro.org</email>
      </address>
    </author>
    <author fullname="Thomas Fossati">
      <organization>Linaro</organization>
      <address>
        <email>thomas.fossati@linaro.org</email>
      </address>
    </author>
    <date year="2025" month="September" day="16"/>
    <area>Security</area>
    <workgroup>Remote ATtestation ProcedureS</workgroup>
    <keyword>attestation</keyword>
    <keyword>device assignment</keyword>
    <keyword>EAT</keyword>
    <abstract>
      <?line 53?>

<t>In confidential computing, device assignment (DA) is the method by which a device (e.g., network adapter, GPU), whether on-chip or behind a PCIe Root Port, is assigned to a Trusted Virtual Machine (TVM).
For the TVM to trust the device, the device must provide the TVM with attestation Evidence confirming its identity and the state of its firmware and configuration.</t>
      <t>Since Evidence claims can be consumed by 3rd party attestation services external to the TVM, there is a need to standardise the representation of Evidence to ensure interoperability.
This document defines an attestation Evidence format for DA as an EAT (Entity Attestation Token) profile.</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-device-attestation.github.io/draft-poirier-rats-eat-da/draft-poirier-rats-eat-da.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-poirier-rats-eat-da/"/>.
      </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-device-attestation/draft-poirier-rats-eat-da"/>.</t>
    </note>
  </front>
  <middle>
    <?line 61?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>In confidential computing, device assignment (DA) is the method by which a device (e.g., network adapter, GPU), whether on-chip or behind a PCIe Root Port, is assigned to a Trusted Virtual Machine (TVM).
Most confidential computing platforms (e.g., Arm CCA, AMD SEV-SNP, Intel TDX) provide DA capabilities.
Such capabilities prevent agents which are untrusted by the TVM (including other TVMs and the host hypervisor) from accessing or controlling a device that has been assigned to the TVM.
This includes, for example, protection of device MMIO interfaces and device caches.
From a trust perspective, DA allows a device to be included in the TVM's Trusted Computing Base (TCB).
For the TVM to trust the device, the device must provide the TVM with attestation Evidence confirming its identity and the state of its firmware and configuration.</t>
      <t>This document defines an attestation Evidence format for DA as an EAT <xref target="RFC9711"/> profile.
The format is designed to be generic, extensible and architecture agnostic.
Ongoing work on DA concentrates on PCIe devices that support the SPDM protocol <xref target="SPDM"/>, but other bus architecture and protocols are expected to be supported as the technology gains wider adoption.
As such we focus on the formalization of an Evidence format for SPDM compliant devices while leaving room for the definition of other Evidence format such as CXL and CHI.
This list is by no means exhaustive and is expected to expand.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</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?>

</section>
    <section anchor="device-attestation-claims">
      <name>Device Attestation Claims</name>
      <t>The Device Attestation claim is the encompassing envelope for the individual device claims to be presented.
It can be used as a standalone entity but typically enclosed in a wider platform specific attestation token.
The Device attestation claim consists of an EAT profile identifier, a nonce and an EAT submodule (<xref section="4.2.18" sectionFormat="of" target="RFC9711"/>) that contains any number of individual device claims.
Each individual device claim is the combination of a device name and a standard claims format based on the bus or protocol the device supports.
As previously mentioned, this draft currently defines the claims set for SPDM compliant devices and PCIe legacy devices that do not support the SPDM protocol.
Careful condideration was also given to the overall design in order to leave room for future expansion.</t>
      <sourcecode type="cddl"><![CDATA[
da-token = {
  &(eat_profile: 265) => "tag:linaro.org,2025:device#1.0.0"
  &(eat_nonce: 10) => bytes .size 64 ; same as realm nonce
  &(eat_submods: 266) => {
    + device-name => $device-claims-set
  }
}

device-name = text .regexp "dev-[A-Za-z0-9]+"

$device-claims-set /= spdm-claims
$device-claims-set /= cxl-claims
$device-claims-set /= chi-claims
$device-claims-set /= pcie-legacy-claims
]]></sourcecode>
      <section anchor="spdm-claims">
        <name>SPDM Claims</name>
        <t>A SPDM claim instance is expected to be present for each SPDM compatible device to be attested.
Each instance consists of either a measurements section or a certificates section, or both.
Optionally, the Negotiated State preamble (version, capabilities and algorithms) bytes can be included to present the full negotiated state between the SPDM requester and responder.</t>
        <sourcecode type="cddl"><![CDATA[
spdm-claims = {
  &(eat_profile: 265) => "tag:linaro.org,2025:device-spdm#1.0.0"
  spdm-artefacts
  ? &(vca: 3804) => bytes
}

spdm-artefacts //= (
  &(measurements: 3802) => spdm-measurements
  &(certificates: 3803) => spdm-certificates
)

spdm-artefacts //= (
  &(measurements: 3802) => spdm-measurements
)

spdm-artefacts //= (
  &(certificates: 3803) => spdm-certificates
)
]]></sourcecode>
        <section anchor="spdm-measurements">
          <name>Measurements Claim</name>
          <t>There can be up to 239 measurements per device with the entire measurement log optionally signed by the certificate populated in one of the 8 certificate slots.
It should be noted that measurements formalized herein follow the DMTF measurement specification.</t>
          <sourcecode type="cddl"><![CDATA[
spdm-measurements = {
  + block-id => spdm-measurement
  ? "signature" => spdm-measurement-blocks-signature
}

block-id = 1..239
]]></sourcecode>
          <section anchor="measurement">
            <name>Measurement</name>
            <t>SPDM measurements start with a component type that reflects one of the 10 categories defined by the SPDM specification.
Following is the measurement itself represented by either a raw bitstream or a digest.
The size of the digest value is derived from the measurement hash algorithm conveyed by the SPDM ALGORITHMS message response.</t>
            <sourcecode type="cddl"><![CDATA[
spdm-measurement = {
  &(component-type: 1) => component-type
  measurement
}

measurement //= ( &(digest-measurement: 2) => digest-measurement )
measurement //= ( &(raw-measurement: 3) => raw-measurement )

component-type /= &(immutable-rom: 0)
component-type /= &(mutable-firmware: 1)
component-type /= &(hardware-config: 2)
component-type /= &(firmware-config: 3)
component-type /= &(freeform-measurement-manifest: 4)
component-type /= &(device-mode: 5)
component-type /= &(mutable-firmware-version: 6)
component-type /= &(mutable-firmware-svn: 7)
component-type /= &(hash-extend-measurement: 8)
component-type /= &(informational: 9)
component-type /= &(structured-measurement-manifest: 10)

raw-measurement = bytes
digest-measurement = digest

digest = [
  alg: uint / text
  val: bytes
]
]]></sourcecode>
          </section>
          <section anchor="measurements-signature">
            <name>Measurements Signature</name>
            <t>SPDM compliant devices can optionally support the capability to sign measurements.
Included in the measurement claim signature are all the elements needed by a third party entity to reconstruct the original measurement log signed by the device.
Those elements include L1 (see CDDL below), the combined SPDM prefix, the hash algorithm used to generate a digest of the measurement log and nonces provided by the requester and responder.
The slot number of the leaf certificate used to sign the measurement log is also provided.</t>
            <sourcecode type="cddl"><![CDATA[
;
; What follows is based on SPDM v1.3.2 (DSP0274_1.3.2.pdf)
;

;
; Algorithms currently supported by SPDM.
; See "MeasurementHashAlgo", table 21, page 79.
;
hash-algorithm-type /= &(tpm_alg_sha_256: 0)
hash-algorithm-type /= &(tpm_alg_sha_384: 2)
hash-algorithm-type /= &(tpm_alg_sha_512: 4)
hash-algorithm-type /= &(tpm_alg_sha3_256: 8)
hash-algorithm-type /= &(tpm_alg_sha3_384: 16)
hash-algorithm-type /= &(tpm_alg_sha3_512: 32)
hash-algorithm-type /= &(tpm_alg_sm3_256: 64)

;
; See signature generation and verification algorithms for
; MEASUREMENTS messages on page 126.
;
; L1 = Concatenate(VCA, GET_MEASUREMENTS_REQUEST1,
;               MEASUREMENTS_RESPONSE1, ...,
;               GET_MEASUREMENTS_REQUESTn-1,
;               MEASUREMENTS_RESPONSEn-1,
;               GET_MEASUREMENTS_REQUESTn, MEASUREMENTS_RESPONSEn)
;
spdm-measurement-blocks-signature = {
   &(slot: 1) => 0..7, ; Slot of the certificate chain used to
                       ; authenticate the measurement.  Default
                       ; should be 0.
   &(requester-nonce: 2) => bytes .size 32,
   &(responder-nonce: 3) => bytes .size 32,
   &(combined-spdm-prefix: 4) => bytes .size 100,
   &(IL1: 5) => bytes, ; L1 (see comment above)
   &(base-hash-algo: 6) => hash-algorithm-type,
   &(signature: 7) => bytes
}
]]></sourcecode>
          </section>
        </section>
        <section anchor="spdm-certificates">
          <name>Certificate Claims</name>
          <t>According to the specification, SPDM compliant devices should support at most 8 slots, with slot 0 populated by default.
Slot 0 <bcp14>SHALL</bcp14> contain a certificate chain that follows the Device certificate model or the Alias certificate model.
Regardless of the certificate model used, a certificate chain comprises one or more DER-encoded X.509 v3 certificates <xref target="RFC5280"/>.
The certificates <bcp14>MUST</bcp14> be concatenated with no intermediate padding.</t>
          <sourcecode type="cddl"><![CDATA[
spdm-certificates = {
  default-cert-slot => cert-chain
  ? aux-cert-slots => cert-chain
}

; ASN.1 DER-encoded certificates concatenated with no intermediate
; padding.
cert-chain = bytes

default-cert-slot = 0
aux-cert-slots = 1..7
]]></sourcecode>
        </section>
        <section anchor="spdm-vca">
          <name>Negotiated State Preamble (Version, Capabilities and Algorithms)</name>
          <t>The Negotiated State Preamble (i.e., <tt>vca</tt>) claim contains the concatenation of messages GET_VERSION, VERSION, GET_CAPABILITIES, CAPABILITIES, NEGOTIATE_ALGORITHMS, and ALGORITHMS last exchanged between the SPDM Requester and Responder.</t>
        </section>
      </section>
      <section anchor="pcie-legacy-device">
        <name>PCIe Legacy Device Claims</name>
        <t>The definition of a device claims set for PCIe legacy devices that do not implement the extensions needed to attest for their provenance and configuration is provided, making it is possible to keep using current assets as secures ones are being provisioned.
This legacy device claims set simply mirrors the type 0/1 common registers of the PCIe configuration space, mandating only that the vendor and device identification code be provided.
Other fields of the configuration space header may optionally be included should they add value.</t>
        <sourcecode type="cddl"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

pcie-legacy-claims = {
  &(eat_profile: 265) => "tag:linaro.org,2025:device-pcie-legacy#1.0\
                                                                  .0"
  &(legacy-header: 3805) => pcie-type-0-1-config-space
  ? $$pcie-legacy-claim-extension
}

pcie-type-0-1-config-space = {
  &(vendorID: 1) => bytes .size 2
  &(deviceID: 2) => bytes .size 2
  ? &(command: 3) => bytes .size 2
  ? &(status: 4) => bytes .size 2
  ? &(revisionID: 5) => bytes .size 1
  ? &(classCode: 6) => bytes .size 3
  ? &(cacheLineSize: 7) => bytes .size 1
  ? &(latencyTimer: 8) => bytes .size 1
  ? &(headerType: 9) => bytes .size 1
  ? &(BITS: 10) => bytes .size 1
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="collated-cddl">
      <name>Collated CDDL</name>
      <sourcecode type="cddl"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

da-token = {
  &(eat_profile: 265) => "tag:linaro.org,2025:device#1.0.0",
  &(eat_nonce: 10) => bytes .size 64,
  &(eat_submods: 266) => {+ device-name => $device-claims-set},
}
device-name = text .regexp "dev-[A-Za-z0-9]+"
$device-claims-set /= spdm-claims / cxl-claims / chi-claims / pcie-\
                                                        legacy-claims
spdm-claims = {
  &(eat_profile: 265) => "tag:linaro.org,2025:device-spdm#1.0.0",
  spdm-artefacts,
  ? &(vca: 3804) => bytes,
}
spdm-artefacts //= ((
        &(measurements: 3802) => spdm-measurements,
        &(certificates: 3803) => spdm-certificates,
      ) // &(measurements: 3802) => spdm-measurements // &(\
                            certificates: 3803) => spdm-certificates)
spdm-measurement = {
  &(component-type: 1) => component-type,
  measurement,
}
measurement //= (&(digest-measurement: 2) => digest-measurement // &\
                             (raw-measurement: 3) => raw-measurement)
component-type /= &(immutable-rom: 0) / &(mutable-firmware: 1) / &(\
hardware-config: 2) / &(firmware-config: 3) / &(freeform-measurement\
-manifest: 4) / &(device-mode: 5) / &(mutable-firmware-version: 6) \
/ &(mutable-firmware-svn: 7) / &(hash-extend-measurement: 8) / &(\
           informational: 9) / &(structured-measurement-manifest: 10)
raw-measurement = bytes
digest-measurement = digest
digest = [
  alg: uint / text,
  val: bytes,
]
spdm-certificates = {
  default-cert-slot => cert-chain,
  ? aux-cert-slots => cert-chain,
}
cert-chain = bytes
default-cert-slot = 0
aux-cert-slots = 1 .. 7
spdm-measurements = {
  + block-id => spdm-measurement,
  ? "signature" => spdm-measurement-blocks-signature,
}
block-id = 1 .. 239
hash-algorithm-type /= &(tpm_alg_sha_256: 0) / &(tpm_alg_sha_384: 2\
) / &(tpm_alg_sha_512: 4) / &(tpm_alg_sha3_256: 8) / &(\
tpm_alg_sha3_384: 16) / &(tpm_alg_sha3_512: 32) / &(tpm_alg_sm3_256\
                                                                : 64)
spdm-measurement-blocks-signature = {
  &(slot: 1) => 0 .. 7,
  &(requester-nonce: 2) => bytes .size 32,
  &(responder-nonce: 3) => bytes .size 32,
  &(combined-spdm-prefix: 4) => bytes .size 100,
  &(IL1: 5) => bytes,
  &(base-hash-algo: 6) => hash-algorithm-type,
  &(signature: 7) => bytes,
}
cxl-claims = {&(eat_profile: 265) => "tag:linaro.org,2025:device-cxl\
                                                             #1.0.0"}
chi-claims = {&(eat_profile: 265) => "tag:linaro.org,2025:device-chi\
                                                             #1.0.0"}
pcie-legacy-claims = {
  &(eat_profile: 265) => "tag:linaro.org,2025:device-pcie-legacy#1.0\
                                                                 .0",
  &(legacy-header: 3805) => pcie-type-0-1-config-space,
  ? $$pcie-legacy-claim-extension,
}
pcie-type-0-1-config-space = {
  &(vendorID: 1) => bytes .size 2,
  &(deviceID: 2) => bytes .size 2,
  ? &(command: 3) => bytes .size 2,
  ? &(status: 4) => bytes .size 2,
  ? &(revisionID: 5) => bytes .size 1,
  ? &(classCode: 6) => bytes .size 3,
  ? &(cacheLineSize: 7) => bytes .size 1,
  ? &(latencyTimer: 8) => bytes .size 1,
  ? &(headerType: 9) => bytes .size 1,
  ? &(BITS: 10) => bytes .size 1,
}
]]></sourcecode>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="new-cwt-claims-registrations">
        <name>New CWT Claims Registrations</name>
        <t>IANA is requested to register the following claims in the "CBOR Web Token (CWT) Claims" registry <xref target="IANA.cwt"/>.</t>
        <section anchor="spdm-measurements-claim">
          <name> SPDM Measurements Claim</name>
          <ul spacing="normal">
            <li>
              <t>Claim Name: spdm-measurements</t>
            </li>
            <li>
              <t>Claim Description: SPDM Measurements</t>
            </li>
            <li>
              <t>JWT Claim Name: N/A</t>
            </li>
            <li>
              <t>Claim Key: 3802</t>
            </li>
            <li>
              <t>Claim Value Type(s): map</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s): <xref target="spdm-measurements"/> of RFCthis</t>
            </li>
          </ul>
        </section>
        <section anchor="spdm-certificates-claim">
          <name> SPDM Certificates Claim</name>
          <ul spacing="normal">
            <li>
              <t>Claim Name: spdm-certificates</t>
            </li>
            <li>
              <t>Claim Description: SPDM Certificates</t>
            </li>
            <li>
              <t>JWT Claim Name: N/A</t>
            </li>
            <li>
              <t>Claim Key: 3803</t>
            </li>
            <li>
              <t>Claim Value Type(s): map</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s): <xref target="spdm-certificates"/> of RFCthis</t>
            </li>
          </ul>
        </section>
        <section anchor="spdm-vca-claim">
          <name> SPDM VCA Claim</name>
          <ul spacing="normal">
            <li>
              <t>Claim Name: spdm-vca</t>
            </li>
            <li>
              <t>Claim Description: SPDM Version, Capabilities and Algorithms</t>
            </li>
            <li>
              <t>JWT Claim Name: N/A</t>
            </li>
            <li>
              <t>Claim Key: 3804</t>
            </li>
            <li>
              <t>Claim Value Type(s): bytes</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s): <xref target="spdm-vca"/> of RFCthis</t>
            </li>
          </ul>
        </section>
        <section anchor="pcie-legacy-device-claim">
          <name> PCIe Legacy Device Claim</name>
          <ul spacing="normal">
            <li>
              <t>Claim Name: pcie-legacy-device</t>
            </li>
            <li>
              <t>Claim Description: PCIe Legacy Device</t>
            </li>
            <li>
              <t>JWT Claim Name: N/A</t>
            </li>
            <li>
              <t>Claim Key: 3805</t>
            </li>
            <li>
              <t>Claim Value Type(s): map</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Specification Document(s): <xref target="pcie-legacy-device"/> of RFCthis</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9711">
          <front>
            <title>The Entity Attestation Token (EAT)</title>
            <author fullname="L. Lundblade" initials="L." surname="Lundblade"/>
            <author fullname="G. Mandyam" initials="G." surname="Mandyam"/>
            <author fullname="J. O'Donoghue" initials="J." surname="O'Donoghue"/>
            <author fullname="C. Wallace" initials="C." surname="Wallace"/>
            <date month="April" year="2025"/>
            <abstract>
              <t>An Entity Attestation Token (EAT) provides an attested claims set that describes the state and characteristics of an entity, a device such as a smartphone, an Internet of Things (IoT) device, network equipment, or such. This claims set is used by a relying party, server, or service to determine the type and degree of trust placed in the entity.</t>
              <t>An EAT is either a CBOR Web Token (CWT) or a JSON Web Token (JWT) with attestation-oriented claims.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9711"/>
          <seriesInfo name="DOI" value="10.17487/RFC9711"/>
        </reference>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="IANA.cwt" target="https://www.iana.org/assignments/cwt">
          <front>
            <title>CBOR Web Token (CWT) Claims</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="SPDM" target="https://www.dmtf.org/sites/default/files/standards/documents/DSP0274_1.3.2.pdf">
          <front>
            <title>Security Protocol and Data Model (SPDM) Specification Version: 1.3.2</title>
            <author>
              <organization>DMTF</organization>
            </author>
            <date year="2024" month="August" day="21"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 445?>

<section anchor="examples">
      <name>Examples</name>
      <sourcecode type="cbor-diag"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

{
  / profile / 265: "tag:linaro.org,2025:device#1.0.0",
  / nonce / 10: h'\
f9efc3341597f75f8d94432ad39566a8c5704b2004ba001c094f475bfc057f9f25d7\
       aa40cd86cd30ebaae746fb19f008c1e6a1f23ad6a178e18dceda918f7f6e',
  / submods / 266: {
    "dev-a": {
      / profile / 265: "tag:linaro.org,2025:device-spdm#1.0.0",
      / measurements / 0x0eda: {
        1: {
          / component-type /  1: 2, / hardware config /
          / raw-measurement / 3: h'4f6d616861'
        }
      },
      / certificates / 0x0edb: {
        / device certs / 0: h'\
                          676f616e6e61747261646974696f6e6d6f6e676572'
        / no aux certs /
      }
    },
    "dev-b": {
      / profile / 265: "tag:linaro.org,2025:device-spdm#1.0.0",
      / measurements / 0x0eda: {
        1: {
          / component-type / 1: 1, / mutable firmware /
          / digest-measurement / 2: [
            / alg / 1,
            / val / h'6b656e6e656c6c79'
          ]
        },
        6: {
          / component-type / 1: 2, / hardware config /
          / digest measurement / 2: [
            / alg / 0,
            / val / h'756e646572637279'
          ]
        }
      },
      / certificates / 0x0edb: {
        / device certs / 0: h'61746865697A656178696C6C6172',
        / aux certs (slot=2) / 2: h'23451576923AE99106783948598A'
      }
    }
  }
}
]]></sourcecode>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
