<?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-01" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <front>
    <title abbrev="EAT DA">An EAT Profile for Device Attestation</title>
    <seriesInfo name="Internet-Draft" value="draft-poirier-rats-eat-da-01"/>
    <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="August" day="27"/>
    <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 measurements and a certificates section.</t>
        <sourcecode type="cddl"><![CDATA[
spdm-claims = {
  &(eat_profile: 265) => "tag:linaro.org,2025:device-spdm#1.0.0"
  &(measurements: 3802) => spdm-measurements
  &(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>
      <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: 3804) => 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",
  &(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: 3804) => 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="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: 3804</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 412?>

<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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
7FWzmKZskgEWFPhAB6ESki8/reblGgCoBUTG4aXjFo5X2OpJigFFRvMKd5ZA
WluoZFVrnS4sVttZZ4cag+eqMai1IFPufENIaanqOKzd1vC1trRpRz7Vcwzw
hpQMl/JAdcOGlzA6E8SraWoKmU54QJ3UW+CQ6RkXbgoxWTFJTZnN+Ud19UjD
sVSXd4DzoxAL0Emc1PkJ3uoK7ChRBwl8AOmjuksbC7rlRrSS2rLmyil/rvzJ
JR7rns2DJIkTfd+GUblacclRAZ2JmAboVDObIU4VzyIXHK9f59hjpltbupEh
9uEKYIIfJ/mLY9NW17Eb9Us14UyWd0WV/SQQob8y1s092UxwbNnO+X2+Fsjf
L2tPhRdDDPRRVf55M3pZ/MFrmZMeO3h3wOje5C7hiwWxFfa5OR2wTrtbY2uL
XlrWZkPyy1t4OVzYyXu3Kwo+48d0AzWFim/U4VOBjLZE2dtV29WVtE08Jn/x
zTcb57MzI0CHsXt9xgalBmfHJpHIx84aQajjI8Rm6K4RHRSNUc+2RWwDgrc7
+M7lZog2EHiDgZTjVs3NQG62CsHWBlT4tzbTAwOE70Ccg6YMYbQQj9ewYQiM
vPtRMEfGd3bCKdGMqBnU3Qn16mw03HpJ4GZpAGS1oYq7WC1+fY3/Wjcf5b2u
PlZQm7cce1xwPJaBL8+73XjycoNVchcZ+JBdWsADGcSXW27xauNrXwyUn3Uz
UH7W1QAy+g91O8vFdifi2+hVPrPbWamwb5+QxZ69zx0tt/XOJyjA9k4nTbyz
tvQ2aWZLL1ONb+ldvrMK3UuCW+tWbiUj351k76ytILofSes/03/Up8mxcaP5
SCB7NRu/pNf42VZjudBrLFvvvzRlLj+ZM6OSbsly901ymeOw9hdeCZW/6E4I
Cc7fCSEFeCv0nLYViXazQ/XO2pzR7aj18azzpBVpa5tpc5HpKBVnVPPojydL
qv20b3dkrTlCklQOc+9+xDPaEc/uRmxpRljPbjns6jiQ1q8iIDDkC8ISIPiD
MtNBDWhZBeAvpGUWfC1a/rPrgSwHeH49UH66IEC9+KMFQfnpiqC8R0lgYD5T
ExiQJ4qCbLfPVgUZ1JNlgYF8si4wgE8UBgZsd2VQXpUG2bdkBvjGinlRCt8A
vDq+ymbpmwL9y/4G1IsX7FLcscHPI9OAuaE2QQZAqwKZ3RD56kpMtRL067nm
vl9bh76KKw1eXd2wn8VYfYWBHcImR3qXkkaR3LOHB/O9JGysYc/zX/+kXuXm
2yiW9Wf9WsolfZ9q880XM39Mb6Au1LeqNrAB2H+ZA2tUl5V+tvi/xb1KorOR
t/SSAQrsUB7hd74WODXj0VQgR+n1fZT52cnoFGaK30g61u/L0tKHh833aR6x
L/Lw8C1+FenxMc+CQT7B2c2Cwvs8u1kwKILtw4L6v48Fhfb1VhbsahKu82Cz
YbidCZv49uRC49/ChS19znU24Fd9xtz7iOZ7or7bIXX5P44T2w/49Gv1ANCR
V7K3ZSsYzXp7lvwV/TptBXxVj80O3lmTrph49XrDbXbbk3Zz0vG7jUa9xv16
t9lq8Y7XbFcb41oVfvFq1fWq3cak0W6OJ1612Z50J7Wm385iI+eNqud3Wp5f
r4ox56LdaE3GbndSrXY8V7S4O6nVuQ9/2x3hdnxP+LzrdibtSUscKPp0o4GO
BVmqepmSGgW8ZB6fd/z1GlytL6T8FVb9VAVaVhsw5uYfcMV6DUogtTJ8MIWl
7paySmHdeolVYXVkfWPS8ltuq9NyDzLwR/3pcUVnoXDSdI7zpFWyFjNAEogS
7O48pNVuTWBnAf/cdqNdg8+NVhdE1YVxAVTh73ar2a4d5HaJYizGzC6GUCtH
Lklp/J8mJYBwUUi63F59kagopW0NDAYVz68FRlaw3kWk5bVhKHlREQ5a41aT
ONtseS2v3T3Iwb1fyXm1vLXPAfbQMl2U70l/dRf9baS+gbJv1du1nfR/NT1F
DQQbaIL+9eE3+AXQwgH8c0H7yrnFK92j2u8lFaI1RFGrN5pus93q1ur9k27X
rbbanXq30Wl2O/2Dop7qN651Ptb3PkbxXSj8qUo1HnrqzRnhvyzRfx1QetS5
Gc8ghWP9L1CwpBwFQQAA

-->

</rfc>
