<?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-03" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.2 -->
  <front>
    <title abbrev="EAT DA">An EAT Profile for Device Attestation</title>
    <seriesInfo name="Internet-Draft" value="draft-poirier-rats-eat-da-03"/>
    <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="October" day="02"/>
    <area>Security</area>
    <workgroup>Remote ATtestation ProcedureS</workgroup>
    <keyword>attestation</keyword>
    <keyword>device assignment</keyword>
    <keyword>EAT</keyword>
    <abstract>
      <?line 54?>

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

<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.
The syntax of the device name depends on the type of bus or protocol used.
Each name consists of two parts joined by a semicolon: a namespace and a bus-specific name.
See <xref target="spdm-submod-name"/> for SPDM devices, and <xref target="pcie-legacy-submod-name"/> for legacy PCIe devices.
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 "(legacy-pcie|spdm):.+"

$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 anchor="spdm-submod-name">
          <name>Submodule Naming</name>
          <t>The namespace used for SPDM submodules is "spdm".</t>
          <t>The name associated with an SPDM submodule is extracted from the leaf certificate of the relevant device.</t>
          <ul spacing="normal">
            <li>
              <t>If the leaf certificate contains a Subject Alternative Name of type DMTFOtherName, the submodule name is the value contained in <tt>ub-DMTF-device-info</tt>.
For example: "spdm:ACME:WIDGET:0123456789".</t>
            </li>
            <li>
              <t>Otherwise, the submod name is the string representation of the certificate Subject, as described in <xref target="RFC4514"/>.
For example: "spdm:C=CA,O=ACME,OU=Widget,CN=0123456789".</t>
            </li>
          </ul>
        </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 anchor="pcie-legacy-submod-name">
          <name>Submodule Naming</name>
          <t>The namespace used for legacy PCIe submodules is "legacy-pcie".</t>
          <t>The name is any arbitrary string chosen by the implementation.
For example, "legacy-pcie:0000:01:02.0" where "0000" is the domain, "01" the PCI bus id, "02" the device on the bus and "0" the device function.</t>
        </section>
      </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 "(legacy-pcie|spdm):.+"
$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="RFC4514">
          <front>
            <title>Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names</title>
            <author fullname="K. Zeilenga" initials="K." role="editor" surname="Zeilenga"/>
            <date month="June" year="2006"/>
            <abstract>
              <t>The X.500 Directory uses distinguished names (DNs) as primary keys to entries in the directory. This document defines the string representation used in the Lightweight Directory Access Protocol (LDAP) to transfer distinguished names. The string representation is designed to give a clean representation of commonly used distinguished names, while being able to represent any distinguished name. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4514"/>
          <seriesInfo name="DOI" value="10.17487/RFC4514"/>
        </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 468?>

<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: {
    "spdm:ACME:WIDGET-A:0123456789": {
      / 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 /
      }
    },
    "spdm:C=CA,O=ACME,OU=Widget-B,CN=9876543210": {
      / 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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
V9N3U2V7vwOv3/qXyMGOJsAmGfBH01PufkADNpLVpkTVdaZRbHk+n3+p4g66
smr2u6Mq+vP+gbWcqvphUhWsdZ8tXrwzZj0xcxuNptPqdWad1qzr9ZrNRp17
jV6r3eZdt9WpNaf1GvzFazXHrfWas2anNZ25tVZn1pvVW14niw44b9Zcr9t2
vUZNTDkXnWZ7NnV6s1qt6zqizZ1ZvcE9+LfTFU7Xc4XHe0531pm1xQuJn6og
0bUgTpe/xdhqO1mDYuNJg30aWTbrLXJ9uULBah9rgGN+AGNO8Quu2MzOCaRu
wgedcqsWA6uW1m0mn1XWQJY0Z22v7bS7bedFBv6oPj3meJZSSoXntIhaNevL
iFheRTJ8f4TW7rRncLKA/5xOs1OHz812D1jYg3EBWOHfnXarU39ROCWMME3V
p2hEjQK6T7TjrJfYkOt1YVcQOqf278ZKgHCQk6pakf+eu8zKXfUfBgnjzyVq
V7FcgJuaG8O3PEBpedGetltE/lbbbbud3osC3C+5MOTL24dc4ABRVDWNA/Gv
7cO/g9g3UUDajU59L/5fTJhRTEFRWiCkA/gbjAqI6hD+c0BEzcLiXEApdT6h
PL6OW6ANcVqddq/eGIx6PacGBqXRa3Zbve7gRVmY1a+9VDg7cD+E0V0gvLmM
1B768lGo8E4q9L92qjyq0JZnkMI2/heCNG2vpUoAAA==

-->

</rfc>
