<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.26 (Ruby 3.0.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>

<rfc ipr="trust200902" docName="draft-ietf-teep-protocol-18" category="std" consensus="true" submissionType="IETF" tocDepth="4" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="TEEP Protocol">Trusted Execution Environment Provisioning (TEEP) Protocol</title>

    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization></organization>
      <address>
        <postal>
          <street></street>
          <city></city>
          <region></region>
          <code></code>
          <country>Austria</country>
        </postal>
        <email>hannes.tschofenig@gmx.net</email>
      </address>
    </author>
    <author initials="M." surname="Pei" fullname="Mingliang Pei">
      <organization>Broadcom</organization>
      <address>
        <postal>
          <street></street>
          <city></city>
          <region></region>
          <code></code>
          <country>US</country>
        </postal>
        <email>mingliang.pei@broadcom.com</email>
      </address>
    </author>
    <author initials="D." surname="Wheeler" fullname="David Wheeler">
      <organization>Amazon</organization>
      <address>
        <postal>
          <street></street>
          <city></city>
          <region></region>
          <code></code>
          <country>US</country>
        </postal>
        <email>davewhee@amazon.com</email>
      </address>
    </author>
    <author initials="D." surname="Thaler" fullname="Dave Thaler">
      <organization>Microsoft</organization>
      <address>
        <postal>
          <street></street>
          <city></city>
          <region></region>
          <code></code>
          <country>US</country>
        </postal>
        <email>dave.thaler.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="A." surname="Tsukamoto" fullname="Akira Tsukamoto">
      <organization>ALAXALA Networks Corp.</organization>
      <address>
        <postal>
          <street></street>
          <city></city>
          <region></region>
          <code></code>
          <country>JP</country>
        </postal>
        <email>akira.tsukamoto@alaxala.com</email>
      </address>
    </author>

    <date year="2023"/>

    <area>Security</area>
    <workgroup>TEEP</workgroup>
    <keyword>Trusted Execution Environment</keyword>

    <abstract>


<t>This document specifies a protocol that installs, updates, and deletes
Trusted Components in a device with a Trusted Execution
Environment (TEE).  This specification defines an interoperable
protocol for managing the lifecycle of Trusted Components.</t>



    </abstract>



  </front>

  <middle>


<section anchor="introduction"><name>Introduction</name>

<t>The Trusted Execution Environment (TEE) concept has been designed to
separate a regular operating system, also referred as a Rich Execution
Environment (REE), from security-sensitive applications. In a TEE
ecosystem, device vendors may use different operating systems in the
REE and may use different types of TEEs. When Trusted Component Developers or
Device Administrators use Trusted Application Managers (TAMs) to
install, update, and delete Trusted Applications and their dependencies on a wide range
of devices with potentially different TEEs then an interoperability
need arises.</t>

<t>This document specifies the protocol for communicating between a TAM
and a TEEP Agent.</t>

<t>The Trusted Execution Environment Provisioning (TEEP) architecture
document <xref target="RFC9397"/> provides design
guidance and introduces the
necessary terminology.</t>

</section>
<section anchor="terminology"><name>Terminology</name>

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" 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>

<t>This specification re-uses the terminology defined in <xref target="RFC9397"/>.</t>

<t>As explained in Section 4.4 of that document, the TEEP protocol treats
each Trusted Application (TA), any dependencies the TA has, and personalization data as separate
components that are expressed in SUIT manifests, and a SUIT manifest
might contain or reference multiple binaries (see <xref target="I-D.ietf-suit-manifest"/>
for more details).</t>

<t>As such, the term Trusted Component (TC) in this document refers to a
set of binaries expressed in a SUIT manifest, to be installed in
a TEE.  Note that a Trusted Component may include one or more TAs
and/or configuration data and keys needed by a TA to operate correctly.</t>

<t>Each Trusted Component is uniquely identified by a SUIT Component Identifier
(see <xref target="I-D.ietf-suit-manifest"/> Section 8.7.2.2).</t>

<t>Attestation related terms, such as Evidence and Attestation Results,
are as defined in <xref target="RFC9334"/>.</t>

</section>
<section anchor="messages"><name>Message Overview</name>

<t>The TEEP protocol consists of messages exchanged between a TAM
and a TEEP Agent.
The messages are encoded in CBOR and designed to provide end-to-end security.
TEEP protocol messages are signed by the endpoints, i.e., the TAM and the
TEEP Agent, but Trusted
Applications may also be encrypted and signed by a Trusted Component Developer or
Device Administrator.
The TEEP protocol not only uses
CBOR but also the respective security wrapper, namely COSE <xref target="RFC9052"/>. Furthermore, for software updates the SUIT
manifest format <xref target="I-D.ietf-suit-manifest"/> is used, and
for attestation the Entity Attestation Token (EAT) <xref target="I-D.ietf-rats-eat"/>
format is supported although other attestation formats are also permitted.</t>

<t>This specification defines five messages: QueryRequest, QueryResponse,
Update, Success, and Error.</t>

<t>A TAM queries a device's current state with a QueryRequest message.
A TEEP Agent will, after authenticating and authorizing the request, report
attestation information, list all Trusted Components, and provide information about supported
algorithms and extensions in a QueryResponse message. An error message is
returned if the request
could not be processed. A TAM will process the QueryResponse message and
determine
whether to initiate subsequent message exchanges to install, update, or delete Trusted
Applications.</t>

<figure><artwork><![CDATA[
  +------------+           +-------------+
  | TAM        |           |TEEP Agent   |
  +------------+           +-------------+

    QueryRequest ------->

                           QueryResponse

                 <-------     or

                             Error
]]></artwork></figure>

<t>With the Update message a TAM can instruct a TEEP Agent to install and/or
delete one or more Trusted Components.
The TEEP Agent will process the message, determine whether the TAM is authorized
and whether the
Trusted Component has been signed by an authorized Trusted Component Signer.
A Success message is returned when the operation has been completed successfully,
or an Error message
otherwise.</t>

<figure><artwork><![CDATA[
 +------------+           +-------------+
 | TAM        |           |TEEP Agent   |
 +------------+           +-------------+

             Update  ---->

                            Success

                    <----    or

                            Error
]]></artwork></figure>

</section>
<section anchor="detailmsg"><name>Detailed Messages Specification</name>

<t>TEEP messages are protected by the COSE_Sign1 or COSE_Sign structure as described in <xref target="teep-ciphersuite"/>.
The TEEP protocol messages are described in CDDL format <xref target="RFC8610"/> below.</t>

<figure><sourcecode type="cddl-teep-message"><![CDATA[
teep-message = $teep-message-type .within teep-message-framework

teep-message-framework = [
  type: $teep-type / $teep-type-extension,
  options: { * teep-option },
  * any; further elements, e.g., for data-item-requested
]

teep-option = (uint => any)

; messages defined below:
$teep-message-type /= query-request
$teep-message-type /= query-response
$teep-message-type /= update
$teep-message-type /= teep-success
$teep-message-type /= teep-error

; message type numbers, in one byte which could take a number from 0 to 23
$teep-type = (0..23)
TEEP-TYPE-query-request = 1
TEEP-TYPE-query-response = 2
TEEP-TYPE-update = 3
TEEP-TYPE-teep-success = 5
TEEP-TYPE-teep-error = 6
]]></sourcecode></figure>

<section anchor="creating-and-validating-teep-messages"><name>Creating and Validating TEEP Messages</name>

<section anchor="creating-a-teep-message"><name>Creating a TEEP message</name>

<t>To create a TEEP message, the following steps are performed.</t>

<t><list style="numbers">
  <t>Create a TEEP message according to the description below and populate
  it with the respective content.  TEEP messages sent by TAMs (QueryRequest
  and Update) can include a "token".
  The TAM can decide, in any implementation-specific way, whether to include a token
  in a message.  The first usage of a token
  generated by a TAM MUST be randomly created.
  Subsequent token values MUST be different for each subsequent message
  created by a TAM.</t>
  <t>Create a COSE Header containing the desired set of Header
  Parameters.  The COSE Header MUST be valid per the <xref target="RFC9052"/> specification.</t>
  <t>Create a COSE_Sign1 or COSE_Sign object
  using the TEEP message as the COSE_Sign1 or COSE_Sign Payload; all
  steps specified in <xref target="RFC9052"/> for creating a
  COSE_Sign1 or COSE_Sign object MUST be followed.</t>
</list></t>

</section>
<section anchor="validation"><name>Validating a TEEP Message</name>

<t>When a TEEP message is received (see the ProcessTeepMessage conceptual API
defined in Section 6.2.1 of <xref target="RFC9397"/>),
the following validation steps are performed. If any of
the listed steps fail, then the TEEP message MUST be rejected.</t>

<t><list style="numbers">
  <t>Verify that the received message is a valid CBOR object.</t>
  <t>Verify that the message contains a COSE_Sign1 or COSE_Sign structure.</t>
  <t>Verify that the resulting COSE Header includes only parameters
  and values whose syntax and semantics are both understood and
  supported or that are specified as being ignored when not
  understood.</t>
  <t>Follow the steps specified in Section 4 of <xref target="RFC9052"/> ("Signing Objects") for
  validating a COSE_Sign1 or COSE_Sign object. The COSE_Sign1 or COSE_Sign payload is the content
  of the TEEP message.</t>
  <t>Verify that the TEEP message is a valid CBOR map and verify the fields of
  the
  TEEP message according to this specification.</t>
</list></t>

</section>
</section>
<section anchor="queryrequest-message"><name>QueryRequest Message</name>

<t>A QueryRequest message is used by the TAM to learn
information from the TEEP Agent, such as
the features supported by the TEEP Agent, including
cipher suites and protocol versions. Additionally,
the TAM can selectively request data items from the
TEEP Agent by using the data-item-requested parameter. Currently,
the following features are supported:</t>

<t><list style="symbols">
  <t>Request for attestation information of the TEEP Agent,</t>
  <t>Listing supported extensions,</t>
  <t>Querying installed Trusted Components, and</t>
  <t>Request for logging information in SUIT Reports.</t>
</list></t>

<t>Like other TEEP messages, the QueryRequest message is
signed, and the relevant CDDL snippet is shown below.
The complete CDDL structure is shown in Appendix C.</t>

<figure><sourcecode type="cddl-query-request"><![CDATA[
query-request = [
  type: TEEP-TYPE-query-request,
  options: {
    ? token => bstr .size (8..64),
    ? supported-freshness-mechanisms => [ + $freshness-mechanism ],
    ? challenge => bstr .size (8..512),
    ? versions => [ + version ],
    ? attestation-payload-format => text,
    ? attestation-payload => bstr,
    ? suit-reports => [ + bstr ],
    * $$query-request-extensions,
    * $$teep-option-extensions
  },
  supported-teep-cipher-suites: [ + $teep-cipher-suite ],
  supported-suit-cose-profiles: [ + $suit-cose-profile ],
  data-item-requested: uint .bits data-item-requested
]

version = uint .size 4
ext-info = uint .size 4

; data items as bitmaps
data-item-requested = &(
  attestation: 0,
  trusted-components: 1,
  extensions: 2,
  suit-reports: 3,
)
]]></sourcecode></figure>

<t>The message has the following fields:</t>

<dl newline="true">
  <dt>type</dt>
  <dd>
    <t>The value of (1) corresponds to a QueryRequest message sent from the TAM to
the TEEP Agent.</t>
  </dd>
  <dt>token</dt>
  <dd>
    <t>The value in the token parameter is used to match responses to requests,
such as to look up any implementation-specific state it might have saved about
that request, or to ignore responses to older QueryRequest messages before
some configuration changes were made that affected their content.
This is particularly useful when a TAM issues multiple concurrent requests
to a TEEP Agent. The token MUST be present if and only if the attestation bit is clear in
the data-item-requested value. When the attestation bit is
clear then a challenge will be included, which offers replay protection
capabilities. The size of the token is at least 8 bytes
(64 bits) and maximum of 64 bytes. The first usage of a token
generated by a TAM MUST be randomly created.
Subsequent token values MUST be different for each request message
to distinguish the correct response from multiple requests.
The token value MUST NOT be used for other purposes, such as a TAM to
identify the devices and/or a device to identify TAMs or Trusted Components.
The TAM SHOULD set an expiration time for each token and MUST ignore any messages with expired tokens.
The TAM MUST expire the token value after receiving the first response
containing the token value and ignore any subsequent messages that have the same token
value.</t>
  </dd>
  <dt>supported-teep-cipher-suites</dt>
  <dd>
    <t>The supported-teep-cipher-suites parameter lists the TEEP cipher suites
supported by the TAM. Details
about the cipher suite encoding can be found in <xref target="teep-ciphersuite"/>.</t>
  </dd>
  <dt>supported-suit-cose-profiles</dt>
  <dd>
    <t>The supported-suit-cose-profiles parameter lists the SUIT profiles
supported by the TAM for parsing SUIT Reports. Details
about the cipher suite encoding can be found in <xref target="eat-suit-ciphersuite"/>.</t>
  </dd>
  <dt>data-item-requested</dt>
  <dd>
    <t>The data-item-requested parameter indicates what information the TAM requests from the TEEP
Agent in the form of a bitmap.
</t>

    <dl>
      <dt>attestation (1)</dt>
      <dd>
        <t>With this value the TAM requests the TEEP Agent to return an attestation payload,
whether Evidence (e.g., an EAT) or an Attestation Result, in the response.</t>
      </dd>
      <dt>trusted-components (2)</dt>
      <dd>
        <t>With this value the TAM queries the TEEP Agent for all installed Trusted Components.</t>
      </dd>
      <dt>extensions (4)</dt>
      <dd>
        <t>With this value the TAM queries the TEEP Agent for supported capabilities
and extensions, which allows a TAM to discover the capabilities of a TEEP
Agent implementation.</t>
      </dd>
      <dt>suit-reports (8)</dt>
      <dd>
        <t>With this value the TAM requests the TEEP Agent to return SUIT Reports
in the response.</t>
      </dd>
    </dl>

    <t>Further values may be added in the future.</t>
  </dd>
  <dt>supported-freshness-mechanisms</dt>
  <dd>
    <t>The supported-freshness-mechanisms parameter lists the freshness mechanism(s) supported by the TAM.
Details about the encoding can be found in <xref target="freshness-mechanisms"/>.
If this parameter is absent, it means only the nonce mechanism is supported.
It MUST be absent if the attestation bit is clear.</t>
  </dd>
  <dt>challenge</dt>
  <dd>
    <t>The challenge field is an optional parameter used for ensuring the freshness of
attestation Evidence returned with a QueryResponse message. It MUST be absent if
the attestation bit is clear or the Passport model is used.
When a challenge is
provided in the QueryRequest and Evidence in the form of an EAT is returned with a QueryResponse message
then the challenge contained in the QueryRequest MUST be used to generate the EAT,
by copying the challenge into the eat_nonce claim (Section 4.1 of <xref target="eat"/>) if
the nonce-based freshness mechanism is used for attestation Evidence.  For more details about freshness
of Evidence see <xref target="freshness-mechanisms"/>.
</t>

    <t>If any format other than EAT is used, it is up to that
format to define the use of the challenge field.</t>
  </dd>
  <dt>versions</dt>
  <dd>
    <t>The versions parameter enumerates the TEEP protocol version(s) supported by the TAM.
A value of 0 refers to the current version of the TEEP protocol.
If this field is not present, it is to be treated the same as if
it contained only version 0.</t>
  </dd>
  <dt>attestation-payload-format</dt>
  <dd>
    <t>The attestation-payload-format parameter indicates the IANA Media Type of the
attestation-payload parameter, where media type parameters are permitted after
the media type.  For protocol version 0, the absence of this parameter indicates that
the format is "application/eat+cwt; eat_profile=urn:ietf:rfc:rfcXXXX" (see <xref target="I-D.ietf-rats-eat-media-type"/>
for further discussion).
(RFC-editor: upon RFC publication, replace XXXX above with the RFC number
of this document.)
It MUST be present if the attestation-payload parameter
is present and the format is not an EAT in CWT format with the profile
defined below in <xref target="eat"/>.</t>
  </dd>
  <dt>attestation-payload</dt>
  <dd>
    <t>The attestation-payload parameter contains Evidence or an Attestation Result
for the TEEP Agent to use to perform attestation of the TAM.
If the attestation-payload-format parameter is absent,
the attestation payload contained in this parameter MUST be
an Entity Attestation Token following the encoding
defined in <xref target="I-D.ietf-rats-eat"/>.  See <xref target="attestation"/> for further discussion.</t>
  </dd>
  <dt>suit-reports</dt>
  <dd>
    <t>If present, the suit-reports parameter contains a set of "boot" (including
starting an executable in an OS context) time SUIT Reports of the TAM
as defined by SUIT_Report in Section 4 of <xref target="I-D.ietf-suit-report"/>,
encoded using COSE as discussed in <xref target="eat-suit-ciphersuite"/>.
SUIT Reports can be useful in QueryRequest messages to
pass additional information about the TAM to the TEEP Agent without depending on a Verifier including
the relevant information in the TAM's Attestation Results.</t>
  </dd>
</dl>

</section>
<section anchor="query-response"><name>QueryResponse Message</name>

<t>The QueryResponse message is the successful response by the TEEP Agent after
receiving a QueryRequest message.  As discussed in <xref target="agent"/>, it can also be sent
unsolicited if the contents of the QueryRequest are already known and do not vary
per message.</t>

<t>Like other TEEP messages, the QueryResponse message is
signed, and the relevant CDDL snippet is shown below.
The complete CDDL structure is shown in Appendix C.</t>

<figure><sourcecode type="cddl-query-response"><![CDATA[
query-response = [
  type: TEEP-TYPE-query-response,
  options: {
    ? token => bstr .size (8..64),
    ? selected-version => version,
    ? attestation-payload-format => text,
    ? attestation-payload => bstr,
    ? suit-reports => [ + bstr ],
    ? tc-list => [ + system-property-claims ],
    ? requested-tc-list => [ + requested-tc-info ],
    ? unneeded-manifest-list => [ + SUIT_Component_Identifier ],
    ? ext-list => [ + ext-info ],
    * $$query-response-extensions,
    * $$teep-option-extensions
  }
]

requested-tc-info = {
  component-id => SUIT_Component_Identifier,
  ? tc-manifest-sequence-number => uint .size 8,
  ? have-binary => bool
}
]]></sourcecode></figure>

<t>The QueryResponse message has the following fields:</t>

<dl newline="true">
  <dt>type</dt>
  <dd>
    <t>The value of (2) corresponds to a QueryResponse message sent from the TEEP Agent
to the TAM.</t>
  </dd>
  <dt>token</dt>
  <dd>
    <t>The value in the token parameter is used to match responses to requests. The
value MUST correspond to the value received with the QueryRequest message
if one was present, and MUST be absent if no token was present in the
QueryRequest.</t>
  </dd>
  <dt>selected-version</dt>
  <dd>
    <t>The selected-version parameter indicates the TEEP protocol version selected by the
TEEP Agent. The absence of this parameter indicates the same as if it
was present with a value of 0.</t>
  </dd>
  <dt>attestation-payload-format</dt>
  <dd>
    <t>The attestation-payload-format parameter indicates the IANA Media Type of the
attestation-payload parameter, where media type parameters are permitted after
the media type.  For protocol version 0, the absence of this parameter indicates that
the format is "application/eat+cwt; eat_profile=urn:ietf:rfc:rfcXXXX" (see <xref target="I-D.ietf-rats-eat-media-type"/>
for further discussion).
(RFC-editor: upon RFC publication, replace XXXX above with the RFC number
of this document.)
It MUST be present if the attestation-payload parameter
is present and the format is not an EAT in CWT format with the profile
defined below in <xref target="eat"/>.</t>
  </dd>
  <dt>attestation-payload</dt>
  <dd>
    <t>The attestation-payload parameter contains Evidence or an Attestation Result.  This parameter
MUST be present if the QueryResponse is sent in response to a QueryRequest
with the attestation bit set.  If the attestation-payload-format parameter is absent,
the attestation payload contained in this parameter MUST be
an Entity Attestation Token following the encoding
defined in <xref target="I-D.ietf-rats-eat"/>.  See <xref target="attestation"/> for further discussion.</t>
  </dd>
  <dt>suit-reports</dt>
  <dd>
    <t>If present, the suit-reports parameter contains a set of "boot" (including
starting an executable in an OS context) time SUIT Reports
as defined by SUIT_Report in Section 4 of <xref target="I-D.ietf-suit-report"/>,
encoded using COSE as discussed in <xref target="eat-suit-ciphersuite"/>.
If a token parameter was present in the QueryRequest
message the QueryResponse message is in response to,
the suit-report-nonce field MUST be present in the SUIT Report with a
value matching the token parameter in the QueryRequest
message.  SUIT Reports can be useful in QueryResponse messages to
pass information to the TAM without depending on a Verifier including
the relevant information in Attestation Results.</t>
  </dd>
  <dt>tc-list</dt>
  <dd>
    <t>The tc-list parameter enumerates the Trusted Components installed on the device
in the form of system-property-claims objects, as defined in Section 4 of <xref target="I-D.ietf-suit-report"/>. The system-property-claims can
be used to learn device identifying information and TEE identifying information
for distinguishing which Trusted Components to install in the TEE.
This parameter MUST be present if the
QueryResponse is sent in response to a QueryRequest with the
trusted-components bit set.</t>
  </dd>
  <dt>requested-tc-list</dt>
  <dd>
    <t>The requested-tc-list parameter enumerates the Trusted Components that are
not currently installed in the TEE, but which are requested to be installed,
for example by an installer of an Untrusted Application that has a TA
as a dependency, or by a Trusted Application that has another Trusted
Component as a dependency.  Requested Trusted Components are expressed in
the form of requested-tc-info objects.
A TEEP Agent can get this information from the RequestTA conceptual API
defined in <xref target="RFC9397"/> section 6.2.1.</t>
  </dd>
  <dt>unneeded-manifest-list</dt>
  <dd>
    <t>The unneeded-manifest-list parameter enumerates the SUIT manifests whose components are
currently installed in the TEE, but which are no longer needed by any
other application.  The TAM can use this information in determining
whether a SUIT manifest can be unlinked.  Each unneeded SUIT manifest is identified
by its SUIT Manifest Component ID (note that this is the Component ID for the manifest
itself, which is different from the Component ID of a component installed by the manifest,
see <xref target="I-D.ietf-suit-trust-domains"/> for more discussion).
A TEEP Agent can get this information from the UnrequestTA conceptual API
defined in <xref target="RFC9397"/> section 6.2.1.</t>
  </dd>
  <dt>ext-list</dt>
  <dd>
    <t>The ext-list parameter lists the supported extensions. This document does not
define any extensions.  This parameter MUST be present if the
QueryResponse is sent in response to a QueryRequest with the
extensions bit set.</t>
  </dd>
</dl>

<t>The requested-tc-info message has the following fields:</t>

<dl newline="true">
  <dt>component-id</dt>
  <dd>
    <t>A SUIT Component Identifier.</t>
  </dd>
  <dt>tc-manifest-sequence-number</dt>
  <dd>
    <t>The minimum suit-manifest-sequence-number value from a SUIT manifest for
the Trusted Component.  If not present, indicates that any sequence number will do.</t>
  </dd>
  <dt>have-binary</dt>
  <dd>
    <t>If present with a value of true, indicates that the TEEP Agent already has
the Trusted Component binary and only needs an Update message with a SUIT manifest
that authorizes installing it.  If have-binary is true, the
tc-manifest-sequence-number field MUST be present.</t>
  </dd>
</dl>

<section anchor="attestation"><name>Evidence and Attestation Results</name>

<t>Section 7 of <xref target="RFC9397"/> lists information that may appear
in Evidence depending on the circumstance.  However, the Evidence is
opaque to the TEEP protocol and there are no formal requirements on the contents
of Evidence.</t>

<t>TAMs however consume Attestation Results and do need enough information therein to
make decisions on how to remediate a TEE that is out of compliance, or update a TEE
that is requesting an authorized change.  To do so, the information in
Section 7 of <xref target="RFC9397"/> is often required depending on the policy.</t>

<t>Attestation Results SHOULD use Entity Attestation Tokens (EATs).  Use of any other
format, such as a widely implemented format for a specific processor vendor, is
permitted but increases the complexity of the TAM by requiring it to understand
the format for each such format rather than only the common EAT format so is not
recommended.</t>

<t>When an EAT is used, the following claims can be used to meet those
requirements, whether these claims appear in Attestation Results, or in Evidence
for the Verifier to use when generating Attestation Results of some form:</t>

<texttable>
      <ttcol align='left'>Requirement</ttcol>
      <ttcol align='left'>Claim</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>Freshness proof</c>
      <c>nonce</c>
      <c>Section 4.1 of <xref target="I-D.ietf-rats-eat"/></c>
      <c>Device unique identifier</c>
      <c>ueid</c>
      <c>Section 4.2.1 of <xref target="I-D.ietf-rats-eat"/></c>
      <c>Vendor of the device</c>
      <c>oemid</c>
      <c>Section 4.2.3 of <xref target="I-D.ietf-rats-eat"/></c>
      <c>Class of the device</c>
      <c>hwmodel</c>
      <c>Section 4.2.4 of <xref target="I-D.ietf-rats-eat"/></c>
      <c>TEE hardware type</c>
      <c>hwversion</c>
      <c>Section 4.2.5 of <xref target="I-D.ietf-rats-eat"/></c>
      <c>TEE hardware version</c>
      <c>hwversion</c>
      <c>Section 4.2.5 of <xref target="I-D.ietf-rats-eat"/></c>
      <c>TEE firmware type</c>
      <c>manifests</c>
      <c>Section 4.2.15 of <xref target="I-D.ietf-rats-eat"/></c>
      <c>TEE firmware version</c>
      <c>manifests</c>
      <c>Section 4.2.15 of <xref target="I-D.ietf-rats-eat"/></c>
</texttable>

<t>The "manifests" claim (see Section 4.2.15 of <xref target="I-D.ietf-rats-eat"/>) should include
information about the TEEP Agent as well as any of its dependencies such as firmware.</t>

</section>
</section>
<section anchor="update-msg-def"><name>Update Message</name>

<t>The Update message is used by the TAM to install and/or delete one or more Trusted
Components via the TEEP Agent.  It can also be used to pass a successful
Attestation Report back to the TEEP Agent when the TAM is configured as
an intermediary between the TEEP Agent and a Verifier, as shown in the figure
below, where the Attestation Result passed back to the Attester can be used
as a so-called "passport" (see section 5.1 of <xref target="RFC9334"/>)
that can be presented to other Relying Parties.</t>

<figure><artwork><![CDATA[
         +---------------+
         |   Verifier    |
         +---------------+
               ^    | Attestation
      Evidence |    v   Result
         +---------------+
         |     TAM /     |
         | Relying Party |
         +---------------+
 QueryResponse ^    |    Update
   (Evidence)  |    | (Attestation
               |    v    Result)
         +---------------+             +---------------+
         |  TEEP Agent   |------------>|     Other     |
         |  / Attester   | Attestation | Relying Party |
         +---------------+    Result   +---------------+

    Figure 1: Example use of TEEP and attestation
]]></artwork></figure>

<t>Like other TEEP messages, the Update message is
signed, and the relevant CDDL snippet is shown below.
The complete CDDL structure is shown in Appendix C.</t>

<figure><sourcecode type="cddl-update"><![CDATA[
update = [
  type: TEEP-TYPE-update,
  options: {
    ? token => bstr .size (8..64),
    ? unneeded-manifest-list => [ + SUIT_Component_Identifier ],
    ? manifest-list => [ + bstr .cbor SUIT_Envelope ],
    ? attestation-payload-format => text,
    ? attestation-payload => bstr,
    ? err-code => (0..23),
    ? err-msg => text .size (1..128),
    * $$update-extensions,
    * $$teep-option-extensions
  }
]
]]></sourcecode></figure>

<t>The Update message has the following fields:</t>

<dl newline="true">
  <dt>type</dt>
  <dd>
    <t>The value of (3) corresponds to an Update message sent from the TAM to
the TEEP Agent. In case of successful processing, a Success
message is returned by the TEEP Agent. In case of an error, an Error message
is returned. Note that the Update message
is used for initial Trusted Component installation as well as for updates
and deletes.</t>
  </dd>
  <dt>token</dt>
  <dd>
    <t>The value in the token field is used to match responses to requests.</t>
  </dd>
  <dt>unneeded-manifest-list</dt>
  <dd>
    <t>The unneeded-manifest-list parameter enumerates the SUIT manifests to be unlinked.
Each unneeded SUIT manifest is identified by its SUIT Manifest Component ID.
The SUIT manifest processor MAY execute uninstall section in the manifest. See
Section 7 of <xref target="I-D.ietf-suit-trust-domains"/> for more information about the 
suit-uninstall Command Sequence.</t>
  </dd>
  <dt>manifest-list</dt>
  <dd>
    <t>The manifest-list field is used to convey one or multiple SUIT manifests
to install.  A manifest is
a bundle of metadata about a Trusted Component, such as where to
find the code, the devices to which it applies, and cryptographic
information protecting the manifest. The manifest may also convey personalization
data. Trusted Component binaries and personalization data can be signed and encrypted
by the same Trusted Component Signer. Other combinations are, however, possible as well. For example,
it is also possible for the TAM to sign and encrypt the personalization data
and to let the Trusted Component Developer sign and/or encrypt the Trusted Component binary.</t>
  </dd>
  <dt>attestation-payload-format</dt>
  <dd>
    <t>The attestation-payload-format parameter indicates the IANA Media Type of the
attestation-payload parameter, where media type parameters are permitted after
the media type.  The absence of this parameter indicates that
the format is "application/eat+cwt; eat_profile=urn:ietf:rfc:rfcXXXX" (see <xref target="I-D.ietf-rats-eat-media-type"/>
for further discussion).
(RFC-editor: upon RFC publication, replace XXXX above with the RFC number
of this document.)
It MUST be present if the attestation-payload parameter
is present and the format is not an EAT in CWT format with the profile
defined below in <xref target="eat"/>.</t>
  </dd>
  <dt>attestation-payload</dt>
  <dd>
    <t>The attestation-payload parameter contains an Attestation Result.  This parameter
If the attestation-payload-format parameter is absent,
the attestation payload contained in this parameter MUST be
an Entity Attestation Token following the encoding
defined in <xref target="I-D.ietf-rats-eat"/>.  See <xref target="attestation"/> for further discussion.</t>
  </dd>
  <dt>err-code</dt>
  <dd>
    <t>The err-code parameter contains one of the error codes listed in the
<xref target="error-message-def"/>, which describes the reasons for the error when
performing QueryResponse in the TAM.</t>
  </dd>
  <dt>err-msg</dt>
  <dd>
    <t>The err-msg parameter is human-readable diagnostic text that MUST be encoded
using UTF-8 <xref target="RFC3629"/> in Net-Unicode format <xref target="RFC5198"/> with a maximum of 128 bytes.</t>
  </dd>
</dl>

<t>Note that an Update message carrying one or more SUIT manifests will inherently
involve multiple signatures, one by the TAM in the TEEP message and one from
a Trusted Component Signer inside each manifest.  This is intentional as they
are for different purposes.</t>

<t>The TAM is what authorizes
apps to be installed, updated, and deleted on a given TEE and so the TEEP
signature is checked by the TEEP Agent at protocol message processing time.
(This same TEEP security wrapper is also used on messages like QueryRequest
so that Agents only send potentially sensitive data such as Evidence to
trusted TAMs.)</t>

<t>The Trusted Component signer on the other hand is what authorizes the
Trusted Component to actually run, so the manifest signature could be
checked at install time or load (or run) time or both, and this checking is
done by the TEE independent of whether TEEP is used or some other update
mechanism.
See section 5 of <xref target="RFC9397"/> for further discussion.</t>

<t>The Update Message has a SUIT_Envelope containing SUIT manifests. Following are some example scenarios using SUIT manifests in the Update Message.</t>

<section anchor="directtam"><name>Scenario 1: Having one SUIT Manifest pointing to a URI of a Trusted Component Binary</name>

<t>In this scenario, a SUIT Manifest has a URI pointing to a Trusted Component Binary.</t>

<t>A Trusted Component Developer creates a new Trusted Component Binary and hosts it at a Trusted Component Developer's URI.  Then the Trusted Component Developer generates an associated SUIT manifest with the filename "tc-uuid" that contains the URI. The filename "tc-uuid" is used in Scenario 3 later.</t>

<t>The TAM receives the latest SUIT manifest from the Trusted Component Developer, and
the URI it contains will not be changeable by the TAM since the SUIT manifest is signed by the Trusted Component Developer.</t>

<t>Pros:</t>

<t><list style="symbols">
  <t>The Trusted Component Developer can ensure that the intact Trusted Component Binary is downloaded by devices</t>
  <t>The TAM does not have to send large Update messages containing the Trusted Component Binary</t>
</list></t>

<t>Cons:</t>

<t><list style="symbols">
  <t>The Trusted Component Developer must host the Trusted Component Binary server</t>
  <t>The device must fetch the Trusted Component Binary in another connection after receiving an Update message</t>
  <t>A device's IP address and therefore location may be revealed to the Trusted Component Binary server</t>
</list></t>

<figure><artwork><![CDATA[
    +------------+           +-------------+
    | TAM        |           | TEEP Agent  |
    +------------+           +-------------+

             Update  ---->

    +=================== teep-protocol(TAM) ==================+
    | TEEP_Message([                                          |
    |   TEEP-TYPE-update,                                     |
    |   options: {                                            |
    |     manifest-list: [                                    |
    |       += suit-manifest "tc-uuid" (TC Developer) ======+ |
    |       | SUIT_Envelope({                               | |
    |       |   manifest: {                                 | |
    |       |     install: {                                | |
    |       |       override-parameters: {                  | |
    |       |         uri: "https://example.org/tc-uuid.ta" | |
    |       |       },                                      | |
    |       |       fetch                                   | |
    |       |     }                                         | |
    |       |   }                                           | |
    |       | })                                            | |
    |       +===============================================+ |
    |     ]                                                   |
    |   }                                                     |
    | ])                                                      |
    +=========================================================+

    and then,

    +-------------+          +--------------+
    | TEEP Agent  |          | TC Developer |
    +-------------+          +--------------+

                     <----

      fetch "https://example.org/tc-uuid.ta"

          +======= tc-uuid.ta =======+
          | 48 65 6C 6C 6F 2C 20 ... |
          +==========================+

    Figure 2: URI of the Trusted Component Binary
]]></artwork></figure>

<t>For the full SUIT Manifest example binary, see <xref target="suit-uri"/>.</t>

</section>
<section anchor="scenario-2-having-a-suit-manifest-include-the-trusted-component-binary"><name>Scenario 2: Having a SUIT Manifest include the Trusted Component Binary</name>

<t>In this scenario, the SUIT manifest contains the entire Trusted Component Binary as an integrated payload (see <xref target="I-D.ietf-suit-manifest"/> Section 7.5).</t>

<t>A Trusted Component Developer delegates the task of delivering the Trusted Component Binary to the TAM inside the SUIT manifest. The Trusted Component Developer creates a SUIT manifest and embeds the Trusted Component Binary, which is referenced in the suit-integrated-payload element containing the fragment-only reference "#tc", in the envelope. The Trusted Component Developer transmits the entire bundle to the TAM.</t>

<t>The TAM serves the SUIT manifest containing the Trusted Component Binary to the device in an Update message.</t>

<t>Pros:</t>

<t><list style="symbols">
  <t>The device can obtain the Trusted Component Binary and the SUIT manifest in one Update message.</t>
  <t>The Trusted Component Developer does not have to host a server to deliver the Trusted Component Binary to devices.</t>
</list></t>

<t>Cons:</t>

<t><list style="symbols">
  <t>The TAM must host the Trusted Component Binary rather than delegating storage to the Trusted Component Developer.</t>
  <t>The TAM must deliver Trusted Component Binaries in Update messages, which increases the size of the Update message.</t>
</list></t>

<figure><artwork><![CDATA[
    +------------+           +-------------+
    | TAM        |           | TEEP Agent  |
    +------------+           +-------------+

             Update  ---->

      +=========== teep-protocol(TAM) ============+
      | TEEP_Message([                            |
      |   TEEP-TYPE-update,                       |
      |   options: {                              |
      |     manifest-list: [                      |
      |       +== suit-manifest(TC Developer) ==+ |
      |       | SUIT_Envelope({                 | |
      |       |   manifest: {                   | |
      |       |     install: {                  | |
      |       |       override-parameters: {    | |
      |       |         uri: "#tc"              | |
      |       |       },                        | |
      |       |       fetch                     | |
      |       |     }                           | |
      |       |   },                            | |
      |       |   "#tc": h'48 65 6C 6C ...'     | |
      |       | })                              | |
      |       +=================================+ |
      |     ]                                     |
      |   }                                       |
      | ])                                        |
      +===========================================+

    Figure 3: Integrated Payload with Trusted Component Binary
]]></artwork></figure>

<t>For the full SUIT Manifest example binary, see <xref target="suit-integrated"/>.</t>

</section>
<section anchor="scenario-3-supplying-personalization-data-for-the-trusted-component-binary"><name>Scenario 3: Supplying Personalization Data for the Trusted Component Binary</name>

<t>In this scenario, Personalization Data is associated with the Trusted Component Binary "tc-uuid" from Scenario 1.</t>

<t>The Trusted Component Developer places encrypted Personalization Data in the SUIT manifest, and it will be delivered by the TAM.
The SUIT manifest processor decrypts it and then store it into file named "config.json", and then install the dependency component.</t>

<t>The TAM delivers the SUIT manifest of the Personalization Data which depends on the Trusted Component Binary from Scenario 1.</t>

<figure><artwork><![CDATA[
    +------------+           +-------------+
    | TAM        |           | TEEP Agent  |
    +------------+           +-------------+

             Update  ---->

      +================== teep-protocol(TAM) ======================+
      | TEEP_Message([                                             |
      |   TEEP-TYPE-update,                                        |
      |   options: {                                               |
      |     manifest-list: [                                       |
      |       +========= suit-manifest(TC Developer) ============+ |
      |       | SUIT_Envelope({                                  | |
      |       |   manifest: {                                    | |
      |       |     common: {                                    | |
      |       |       dependencies: {                            | |
      |       |         dependency-prefix 1: {                   | |
      |       |           [tc-uuid, 'suit']                      | |
      |       |         }                                        | |
      |       |       }                                          | |
      |       |       components: [                              | |
      |       |         ['config.json']                          | |
      |       |       ]                                          | |
      |       |     },                                           | |
      |       |     dependency-resolution: {                     | |
      |       |       override-parameters: {                     | |
      |       |         uri: "https://example.org/tc-uuid"       | |
      |       |       },                                         | |
      |       |       fetch                                      | |
      |       |     },                                           | |
      |       |     install: {                                   | |
      |       |       set-component-index 0,                     | |
      |       |       override-parameters: {                     | |
      |       |         content: h'48FE0794...'                  | |
      |       |         encryption-info: << ... >>               | |
      |       |       },                                         | |
      |       |       write,                                     | |
      |       |       set-component-index 1,                     | |
      |       |       process-dependency                         | |
      |       |     }                                            | |
      |       |   }                                              | |
      |       | })                                               | |
      |       +==================================================+ |
      |     ]                                                      |
      |   }                                                        |
      | ])                                                         |
      +============================================================+

    Figure 4: Encrypted Personalization Data
]]></artwork></figure>

<t>For the full SUIT Manifest example binary, see <xref target="suit-personalization"/>.</t>

</section>
</section>
<section anchor="success-message"><name>Success Message</name>

<t>The Success message is used by the TEEP Agent to return a success in
response to an Update message.</t>

<t>Like other TEEP messages, the Success message is
signed, and the relevant CDDL snippet is shown below.
The complete CDDL structure is shown in Appendix C.</t>

<figure><sourcecode type="cddl-teep-success"><![CDATA[
teep-success = [
  type: TEEP-TYPE-teep-success,
  options: {
    ? token => bstr .size (8..64),
    ? msg => text .size (1..128),
    ? suit-reports => [ + SUIT_Report ],
    * $$teep-success-extensions,
    * $$teep-option-extensions
  }
]
]]></sourcecode></figure>

<t>The Success message has the following fields:</t>

<dl newline="true">
  <dt>type</dt>
  <dd>
    <t>The value of (5) corresponds to corresponds to a Success message sent from the TEEP Agent to the
TAM.</t>
  </dd>
  <dt>token</dt>
  <dd>
    <t>The value in the token parameter is used to match responses to requests.
It MUST match the value of the token parameter in the Update
message the Success is in response to, if one was present.  If none was
present, the token MUST be absent in the Success message.</t>
  </dd>
  <dt>msg</dt>
  <dd>
    <t>The msg parameter contains optional diagnostics information encoded in
UTF-8 <xref target="RFC3629"/> using Net-Unicode form <xref target="RFC5198"/> with max 128 bytes
returned by the TEEP Agent.</t>
  </dd>
  <dt>suit-reports</dt>
  <dd>
    <t>If present, the suit-reports parameter contains a set of SUIT Reports
as defined in Section 4 of <xref target="I-D.ietf-suit-report"/>.
If a token parameter was present in the Update
message the Success message is in response to,
the suit-report-nonce field MUST be present in the SUIT Report with a
value matching the token parameter in the Update
message.</t>
  </dd>
</dl>

</section>
<section anchor="error-message-def"><name>Error Message</name>

<t>The Error message is used by the TEEP Agent to return an error in
response to a message from the TAM.</t>

<t>Like other TEEP messages, the Error message is
signed, and the relevant CDDL snippet is shown below.
The complete CDDL structure is shown in Appendix C.</t>

<figure><sourcecode type="cddl-teep-error"><![CDATA[
teep-error = [
  type: TEEP-TYPE-teep-error,
  options: {
     ? token => bstr .size (8..64),
     ? err-msg => text .size (1..128),
     ? supported-teep-cipher-suites => [ + $teep-cipher-suite ],
     ? supported-freshness-mechanisms => [ + $freshness-mechanism ],
     ? supported-suit-cose-profiles => [ + $suit-cose-profile ],
     ? challenge => bstr .size (8..512),
     ? versions => [ + version ],
     ? suit-reports => [ + SUIT_Report ],
     * $$teep-error-extensions,
     * $$teep-option-extensions
  },
  err-code: (0..23)
]

; The err-code parameter, uint (0..23)
ERR_PERMANENT_ERROR = 1
ERR_UNSUPPORTED_EXTENSION = 2
ERR_UNSUPPORTED_FRESHNESS_MECHANISMS = 3
ERR_UNSUPPORTED_MSG_VERSION = 4
ERR_UNSUPPORTED_CIPHER_SUITES = 5
ERR_BAD_CERTIFICATE = 6
ERR_ATTESTATION_REQUIRED = 7
ERR_UNSUPPORTED_SUIT_REPORT = 8
ERR_CERTIFICATE_EXPIRED = 9
ERR_TEMPORARY_ERROR = 10
ERR_MANIFEST_PROCESSING_FAILED = 17
]]></sourcecode></figure>

<t>The Error message has the following fields:</t>

<dl newline="true">
  <dt>type</dt>
  <dd>
    <t>The value of (6) corresponds to an Error message sent from the TEEP Agent to the TAM.</t>
  </dd>
  <dt>token</dt>
  <dd>
    <t>The value in the token parameter is used to match responses to requests.
It MUST match the value of the token parameter in the
message the Success is in response to, if one was present.  If none was
present, the token MUST be absent in the Error message.</t>
  </dd>
  <dt>err-msg</dt>
  <dd>
    <t>The err-msg parameter is human-readable diagnostic text that MUST be encoded
using UTF-8 <xref target="RFC3629"/> using Net-Unicode form <xref target="RFC5198"/> with max 128 bytes.</t>
  </dd>
  <dt>supported-teep-cipher-suites</dt>
  <dd>
    <t>The supported-teep-cipher-suites parameter lists the TEEP cipher suite(s) supported by the TEEP Agent.
Details about the cipher suite encoding can be found in <xref target="teep-ciphersuite"/>.
This otherwise optional parameter MUST be returned if err-code is ERR_UNSUPPORTED_CIPHER_SUITES.</t>
  </dd>
  <dt>supported-freshness-mechanisms</dt>
  <dd>
    <t>The supported-freshness-mechanisms parameter lists the freshness mechanism(s) supported by the TEEP Agent.
Details about the encoding can be found in <xref target="freshness-mechanisms"/>.
This otherwise optional parameter MUST be returned if err-code is ERR_UNSUPPORTED_FRESHNESS_MECHANISMS.</t>
  </dd>
  <dt>supported-suit-cose-profiles</dt>
  <dd>
    <t>The supported-suit-cose-profiles parameter lists the SUIT profiles
supported by the TEEP Agent. Details
about the cipher suite encoding can be found in <xref target="eat-suit-ciphersuite"/>.
This otherwise optional parameter MUST be returned if err-code is ERR_UNSUPPORTED_SUIT_REPORT.</t>
  </dd>
  <dt>challenge</dt>
  <dd>
    <t>The challenge field is an optional parameter used for ensuring the freshness of
attestation Evidence included with a QueryRequest message.
When a challenge is provided in the Error message and Evidence in the form of an EAT is
returned with a QueryRequest message then the challenge contained in the Error message
MUST be used to generate the EAT, by copying the challenge value into the eat_nonce claim, as described in the
EAT profile <xref target="eat"/>, if the nonce-based freshness mechanism is used.
For more details see <xref target="freshness-mechanisms"/>.
</t>

    <t>If any format other than EAT is used, it is up to that
format to define the use of the challenge field.</t>
  </dd>
  <dt>versions</dt>
  <dd>
    <t>The versions parameter enumerates the TEEP protocol version(s) supported by the TEEP
Agent. This otherwise optional parameter MUST be returned if err-code is ERR_UNSUPPORTED_MSG_VERSION.</t>
  </dd>
  <dt>suit-reports</dt>
  <dd>
    <t>If present, the suit-reports parameter contains a set of SUIT Reports
as defined in Section 4 of <xref target="I-D.ietf-suit-report"/>.  If
a token parameter was present in the Update message the Error message is in response to,
the suit-report-nonce field MUST be present in the SUIT Report with a
value matching the token parameter in the Update
message.</t>
  </dd>
  <dt>err-code</dt>
  <dd>
    <t>The err-code parameter contains one of the
error codes listed below). Only selected values are applicable
to each message.</t>
  </dd>
</dl>

<t>This specification defines the following initial error messages:</t>

<dl newline="true">
  <dt>ERR_PERMANENT_ERROR (1)</dt>
  <dd>
    <t>The received TEEP
message contained incorrect fields or fields that are inconsistent with
other fields.
For diagnosis purposes it is RECOMMMENDED to identify the failure reason
in the error message field.
A TEEP implementation receiving this error might refuse to communicate further with
the problematic TEEP message sender, by silently dropping any TEEP messages
received, for some period of time until it has reason to believe
it is worth trying again, but it should take care not to give up on
communication.  In contrast, ERR_TEMPORARY_ERROR is an indication
that a more aggressive retry is warranted.</t>
  </dd>
  <dt>ERR_UNSUPPORTED_EXTENSION (2)</dt>
  <dd>
    <t>The TEEP implementation does not support an extension included in the
TEEP message it received.
For diagnosis purposes it is RECOMMMENDED to identify the unsupported
extension in the error message field.
A TAM implementation receiving this error might retry sending the last message it sent to
the sender of this error, without using any TEEP extensions.</t>
  </dd>
  <dt>ERR_UNSUPPORTED_FRESHNESS_MECHANISMS (3)</dt>
  <dd>
    <t>The TEEP Agent does not
support any freshness algorithm mechanisms in the request message.
A TAM receiving this error might retry the request using a different
set of supported freshness mechanisms in the request message.</t>
  </dd>
  <dt>ERR_UNSUPPORTED_MSG_VERSION (4)</dt>
  <dd>
    <t>The TEEP implementation does not
support the TEEP protocol version indicated in the received message.
A TAM receiving this error might retry the request using a different
TEEP protocol version.</t>
  </dd>
  <dt>ERR_UNSUPPORTED_CIPHER_SUITES (5)</dt>
  <dd>
    <t>The TEEP Agent does not
support any cipher suites indicated in the request message.
A TAM receiving this error might retry the request using a different
set of supported cipher suites in the request message.</t>
  </dd>
  <dt>ERR_BAD_CERTIFICATE (6)</dt>
  <dd>
    <t>Processing of a certificate failed. For diagnosis purposes it is
RECOMMMENDED to include information about the failing certificate
in the error message field.  For example, the certificate was of an
unsupported type, or the certificate was revoked by its signer.
A TEEP implementation receiving this error might attempt to use an alternate certificate.</t>
  </dd>
  <dt>ERR_ATTESTATION_REQUIRED (7)</dt>
  <dd>
    <t>Indicates that the TEEP implementation sending this error requires
attestation of the TEEP imlementation receiving this error.</t>
  </dd>
  <dt>ERR_UNSUPPORTED_SUIT_REPORT (8)</dt>
  <dd>
    <t>Indicates that the TEEP Agent does not support the suit-cose-profile of
the SUIT Reports which was sent by the TAM. The TEEP Agent must report the
error code ERR_UNSUPPORTED_SUIT_REPORT supplying the
supported-suit-cose-profiles.</t>
  </dd>
  <dt>ERR_CERTIFICATE_EXPIRED (9)</dt>
  <dd>
    <t>A certificate has expired or is not currently
valid.
A TEEP implementation receiving this error might attempt to renew its certificate
before using it again.</t>
  </dd>
  <dt>ERR_TEMPORARY_ERROR (10)</dt>
  <dd>
    <t>A miscellaneous
temporary error, such as a memory allocation failure, occurred while processing the TEEP message.
A TEEP implementation receiving this error might retry the last message it sent to the sender
of this error at some later point, which is up to the implementation.</t>
  </dd>
  <dt>ERR_MANIFEST_PROCESSING_FAILED (17)</dt>
  <dd>
    <t>The TEEP Agent encountered one or more manifest processing failures.
If the suit-reports parameter is present, it contains the failure details.
A TAM receiving this error might still attempt to install or update
other components that do not depend on the failed manifest.</t>
  </dd>
</dl>

<t>New error codes should be added sparingly, not for every implementation
error.  That is the intent of the err-msg field, which can be used to
provide details meaningful to humans.  New error codes should only be
added if the TAM is expected to do something behaviorally different upon
receipt of the error message, rather than just logging the event.
Hence, each error code is responsible for saying what the
behavioral difference is expected to be.</t>

</section>
</section>
<section anchor="eat"><name>EAT Profile</name>

<t>The TEEP protocol operates between a TEEP Agent and a TAM.  While
the TEEP protocol does not require use of EAT, use of EAT is encouraged and
<xref target="query-response"/> explicitly defines a way to carry an Entity Attestation Token
in a QueryResponse.</t>

<t>As discussed in <xref target="attestation"/>, the content of Evidence is opaque to the TEEP
architecture, but the content of Attestation Results is not, where Attestation
Results flow between a Verifier and a TAM (as the Relying Party).
Although Attestation Results required by a TAM are separable from the TEEP protocol
per se, this section is included as part of the requirements for building
a compliant TAM that uses EATs for Attestation Results.</t>

<t>Section 7 of <xref target="I-D.ietf-rats-eat"/> defines the requirement for
Entity Attestation Token profiles.  This section defines an EAT profile
for use with TEEP.</t>

<t><list style="symbols">
  <t>profile-label: The profile-label for this specification is the URI</t>
</list></t>
<t>&lt;urn:ietf:rfc:rfcXXXX&gt;.
(RFC-editor: upon RFC publication, replace XXXX with the RFC number
of this document.)</t>

<t><list style="symbols">
  <t>Use of JSON, CBOR, or both: CBOR only.</t>
  <t>CBOR Map and Array Encoding: Only definite length arrays and maps.</t>
  <t>CBOR String Encoding: Only definite-length strings are allowed.</t>
  <t>CBOR Preferred Serialization: Encoders must use preferred serialization,
and decoders need not accept non-preferred serialization.</t>
  <t>CBOR Tags: CBOR Tags are not used.</t>
  <t>COSE/JOSE Protection: See <xref target="eat-suit-ciphersuite"/>.</t>
  <t>COSE/JOSE Algorithms: See <xref target="eat-suit-ciphersuite"/>.</t>
  <t>Detached EAT Bundle Support: DEB use is permitted.</t>
  <t>Key Identification: COSE Key ID (kid) is used, where
the key ID is the hash of a public key (where the public key may be
used as a raw public key, or in a certificate) as specified in
<xref target="I-D.ietf-cose-key-thumbprint"/>.  See <xref target="attestation-result-tam"/>
and <xref target="attestation-result-agent"/> for
discussion on the choice of hash algorithm.</t>
  <t>Endorsement Identification: Optional, but semantics are the same
as in Verification Key Identification.</t>
  <t>Freshness: See <xref target="freshness-mechanisms"/> for details.  When the
eat_nonce claim is used, the value is a single bstr.</t>
  <t>Claims Requirements:
  <list style="symbols">
      <t>The following claims are required: ueid, oemid,
hwmodel, hwversion, manifests, and cnf.  See <xref target="attestation"/> for discussion.  Other claims are optional.</t>
      <t>See <xref target="freshness-mechanisms"/> for discussion affecting whether the
eat_nonce claim is used.</t>
      <t>The sw-name claim for a Trusted
Component holds the URI of the SUIT manifest for that component.</t>
      <t>The manifests claim uses a SUIT manifest, where the manifest
body contains a SUIT_Reference as defined in Section 4 of
<xref target="I-D.ietf-suit-report"/>, and the content type is as defined
in <xref target="I-D.ietf-suit-report"/>.</t>
    </list></t>
</list></t>

<t>A TAM implementation might simply accept a TEEP Agent as trustworthy based on a
successful Attestation Result, and if not then attempt to update the TEEP Agent
and all of its dependencies.  This logic is simple but it might result in updating
some components that do not need to be updated.</t>

<t>An alternate TAM implementation might use any Additional Claims to determine whether
the TEEP Agent or any of its dependencies are trustworthy, and only update the
specific components that are out of date.</t>

<section anchor="relationship-to-ar4si"><name>Relationship to AR4SI</name>

<t><xref target="I-D.ietf-rats-ar4si"/> defines an EAT profile for arbitrary Relying Parties
to use with Attestation Results.  However the TAM as a Relying Party needs specific
claims that are not required in the AR4SI profile, and so needs its own more
specific profile.</t>

<t>In some deployments, a TAM can be used as an intermediary between Verifier and a
TEEP Agent acting as an Attester in the Passport model or acting as a Relying
Party in the Background Check Model of <xref target="RFC9334"/>.  This is depicted in the
example in Figure 1.  In such a case, both profiles need to be obtained from the
Verifier: one for use by the TAM itself, and the other to pass on to the TEEP
Agent.</t>

<t>When the TAM and Verifier are combined into the same implementation, obtaining
both profiles can be straightforward, but when they are on different machines,
the situation is more complex, especially if Nonces are used to ensure freshness
of Evidence. There are thus several such cases:</t>

<t><list style="numbers">
  <t>The protocol between the TAM and the Verifier (which is outside
the scope of TEEP itself) allows requesting multiple Attestation Results from
the same Evidence.  In this case, the TAM can request both EAT profiles be
returned.</t>
  <t>The protocol between the TAM and the Verifier only allows requesting one
Attestation Result format, but the Evidence freshness mechanism does not use
Nonces.  In this case, the TAM can send the same Evidence in two separate
requests, each requesting a different EAT profile for the Attestation Results.</t>
  <t>The protocol between the TAM and the Verifier only allows requesting one
Attestation Result format, and the Evidence freshness mechanism uses Nonces.
In this case, it is simpler to not have the TAM be an intermediary, since
the Verifier will require a separate Nonce for each Attestation Result, but
have the Attester or Relying Party contact the Verifier directly to get
Attestation Results in the AR4SI profile.</t>
</list></t>

</section>
</section>
<section anchor="tags"><name>Mapping of TEEP Message Parameters to CBOR Labels</name>

<t>In COSE, arrays and maps use strings, negative integers, and unsigned
integers as their keys. Integers are used for compactness of
encoding. Since the word "key" is mainly used in its other meaning, as a
cryptographic key, this specification uses the term "label" for this usage
as a map key.</t>

<t>This specification uses the following mapping:</t>

<texttable>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Label</ttcol>
      <c>supported-teep-cipher-suites</c>
      <c>1</c>
      <c>challenge</c>
      <c>2</c>
      <c>versions</c>
      <c>3</c>
      <c>supported-suit-cose-profiles</c>
      <c>4</c>
      <c>selected-version</c>
      <c>6</c>
      <c>attestation-payload</c>
      <c>7</c>
      <c>tc-list</c>
      <c>8</c>
      <c>ext-list</c>
      <c>9</c>
      <c>manifest-list</c>
      <c>10</c>
      <c>msg</c>
      <c>11</c>
      <c>err-msg</c>
      <c>12</c>
      <c>attestation-payload-format</c>
      <c>13</c>
      <c>requested-tc-list</c>
      <c>14</c>
      <c>unneeded-manifest-list</c>
      <c>15</c>
      <c>component-id</c>
      <c>16</c>
      <c>tc-manifest-sequence-number</c>
      <c>17</c>
      <c>have-binary</c>
      <c>18</c>
      <c>suit-reports</c>
      <c>19</c>
      <c>token</c>
      <c>20</c>
      <c>supported-freshness-mechanisms</c>
      <c>21</c>
      <c>err-code</c>
      <c>23</c>
</texttable>

<figure><sourcecode type="cddl-label"><![CDATA[
; labels of mapkey for teep message parameters, uint (0..23)
supported-teep-cipher-suites = 1
challenge = 2
versions = 3
supported-suit-cose-profiles = 4
selected-version = 6
attestation-payload = 7
tc-list = 8
ext-list = 9
manifest-list = 10
msg = 11
err-msg = 12
attestation-payload-format = 13
requested-tc-list = 14
unneeded-manifest-list = 15
component-id = 16
tc-manifest-sequence-number = 17
have-binary = 18
suit-reports = 19
token = 20
supported-freshness-mechanisms = 21
err-code = 23
]]></sourcecode></figure>

</section>
<section anchor="behavior-specification"><name>Behavior Specification</name>

<t>Behavior is specified in terms of the conceptual APIs defined in
section 6.2.1 of <xref target="RFC9397"/>.</t>

<section anchor="tam"><name>TAM Behavior</name>

<t>When the ProcessConnect API is invoked, the TAM sends a QueryRequest message.</t>

<t>When the ProcessTeepMessage API is invoked, the TAM first does validation
as specified in <xref target="validation"/>, and drops the message if it is not valid.
It may also do additional implementation specific actions such as logging the results
or attempting to update the TEEP Agent to a version that does not send invalid messages.
Otherwise, it proceeds as follows.</t>

<t>If the message includes a token, it can be used to
match the response to a request previously sent by the TAM.
The TAM MUST expire the token value after receiving the first response
from the device that has a valid signature and ignore any subsequent messages that have the same token
value.  The token value MUST NOT be used for other purposes, such as a TAM to
identify the devices and/or a device to identify TAMs or Trusted Components.</t>

<section anchor="handling-a-queryresponse-message"><name>Handling a QueryResponse Message</name>

<t>If a QueryResponse message is received, the TAM verifies the presence of any parameters
required based on the data-items-requested in the QueryRequest, and also validates that
the nonce in any SUIT Report matches the token sent in the QueryRequest message if a token
was present.  If these requirements are not met, the TAM drops the message and sends an
Update message containing an appropriate err-code and err-msg.  It may also do
additional implementation specific actions such as logging the results.  If the requirements
are met, processing continues as follows.</t>

<t>If a QueryResponse message is received that contains an attestation-payload, the TAM
checks whether it contains Evidence or an Attestation Result by inspecting the attestation-payload-format
parameter.  The media type defined in <xref target="eat"/> indicates an Attestation Result, though future
extensions might also indicate other Attestation Result formats in the future. Any other unrecognized
value indicates Evidence.  If it contains an Attestation Result, processing continues as in
<xref target="attestation-result-tam"/>.</t>

<t>If the QueryResponse is instead determined to contain Evidence, the TAM passes
the Evidence (via some mechanism out of scope of this document) to an attestation Verifier
(see <xref target="RFC9334"/>)
to determine whether the Agent is in a trustworthy state.  Once the TAM receives an Attestation
Result from the Verifier, processing continues as in <xref target="attestation-result-tam"/>.</t>

<section anchor="attestation-result-tam"><name>Handling an Attestation Result</name>

<t>The Attestation Result must first be validated as follows:</t>

<t><list style="numbers">
  <t>Verify that the Attestation Result was signed by a Verifier that the TAM trusts.</t>
  <t>Verify that the Attestation Result contains a "cnf" claim (as defined in Section 3.1 of <xref target="RFC8747"/>) where
the key ID is the hash of the TEEP Agent public key used to verify the signature on the TEEP message,
and the hash is computed using the Digest Algorithm specified by one of the SUIT profiles
supported by the TAM (SHA-256 for the ones mandated in this document).  <vspace blankLines='1'/>
See Sections 3.4 and 6 of <xref target="RFC8747"/> for more discussion.</t>
</list></t>

<t>Based on the results of attestation (if any), any SUIT Reports,
and the lists of installed, requested,
and unneeded Trusted Components reported in the QueryResponse, the TAM
determines, in any implementation specific manner, which Trusted Components
need to be installed, updated, or deleted, if any.  There are in typically three cases:</t>

<t><list style="numbers">
  <t>Attestation failed. This indicates that the rest of the information in the QueryResponse
cannot necessarily be trusted, as the TEEP Agent may not be healthy (or at least up to date).
In this case, the TAM might attempt to use TEEP to update any Trusted Components (e.g., firmware,
the TEEP Agent itself, etc.) needed to get the TEEP Agent back into an up-to-date state that
would allow attestation to succeed.  If the TAM does not have permission to update such components
(this can happen if different TAMs manage different components in the device), the TAM instead
responds with an Update message containing an appropriate err-msg, and err-code set to ERR_ATTESTATION_REQUIRED.</t>
  <t>Attestation succeeded (so the QueryResponse information can be accepted as valid), but the set
of Trusted Components needs to be updated based on TAM policy changes or requests from the TEEP Agent.</t>
  <t>Attestation succeeded, and no changes are needed.</t>
</list></t>

<t>If any Trusted Components need to be installed, updated, or deleted,
the TAM sends an Update message containing SUIT Manifests with command
sequences to do the relevant installs, updates, or deletes.
It is important to note that the TEEP Agent's
Update Procedure requires resolving and installing any dependencies
indicated in the manifest, which may take some time, and the resulting Success
or Error message is generated only after completing the Update Procedure.
Hence, depending on the freshness mechanism in use, the TAM may need to
store data (e.g., a nonce) for some time.  For example, if a mobile device
needs an unmetered connection to download a dependency, it may take
hours or longer before the device has sufficient access.  A different
freshness mechanism, such as timestamps, might be more appropriate in such
cases.</t>

<t>If no Trusted Components need to be installed, updated, or deleted, but the QueryResponse included
Evidence, the TAM MAY (e.g., based on attestation-payload-format parameters received from the TEEP Agent
in the QueryResponse) still send an Update message with no SUIT Manifests, to pass the Attestation
Result back to the TEEP Agent.</t>

</section>
</section>
<section anchor="handling-a-success-or-error-message"><name>Handling a Success or Error Message</name>

<t>If a Success or Error message is received containing one or more SUIT Reports, the TAM also validates that
the nonce in any SUIT Report matches the token sent in the Update message,
and drops the message if it does not match.  Otherwise, the TAM handles
the update in any implementation specific way, such as updating any locally
cached information about the state of the TEEP Agent, or logging the results.</t>

<t>If an Error message is received with the error code ERR_ATTESTATION_REQUIRED, it indicates that the TEEP Agent is requesting attestation of the TAM.
In this case, the TAM MUST send another QueryRequest with an attestation-payload and optionally a suit-report to the TEEP Agent.</t>

<t>If any other Error message is received, the TAM can handle it in any implementation
specific way, but <xref target="error-message-def"/> provides recommendations for such handling.</t>

</section>
</section>
<section anchor="agent"><name>TEEP Agent Behavior</name>

<t>When the RequestTA API is invoked, the TEEP Agent first checks whether the
requested TA is already installed.  If it is already installed, the
TEEP Agent passes no data back to the caller.  Otherwise,
if the TEEP Agent chooses to initiate the process of requesting the indicated
TA, it determines (in any implementation specific way) the TAM URI based on
any TAM URI provided by the RequestTA caller and any local configuration,
and passes back the TAM URI to connect to.  It MAY also pass back a
QueryResponse message if all of the following conditions are true:</t>

<t><list style="symbols">
  <t>The last QueryRequest message received from that TAM contained no token or challenge,</t>
  <t>The ProcessError API was not invoked for that TAM since the last QueryResponse
message was received from it, and</t>
  <t>The public key or certificate of the TAM is cached and not expired.</t>
</list></t>

<t>When the RequestPolicyCheck API is invoked, the TEEP Agent decides
whether to initiate communication with any trusted TAMs (e.g., it might
choose to do so for a given TAM unless it detects that it has already
communicated with that TAM recently). If so, it passes back a TAM URI
to connect to.  If the TEEP Agent has multiple TAMs it needs to connect
with, it just passes back one, with the expectation that
RequestPolicyCheck API will be invoked to retrieve each one successively
until there are no more and it can pass back no data at that time.
Thus, once a TAM URI is returned, the TEEP Agent can remember that it has
already initiated communication with that TAM.</t>

<t>When the ProcessError API is invoked, the TEEP Agent can handle it in
any implementation specific way, such as logging the error or
using the information in future choices of TAM URI.</t>

<t>When the ProcessTeepMessage API is invoked, the Agent first does validation
as specified in <xref target="validation"/>, and if it is not valid then the Agent
responds with an Error message.
Otherwise, processing continues as follows based on the type of message.</t>

<section anchor="handling-a-queryrequest-message"><name>Handling a QueryRequest Message</name>

<t>When a QueryRequest message is received, it is processed as follows.</t>

<t>If the TEEP Agent requires attesting the TAM and the QueryRequest message did not
contain an attestation-payload, the TEEP Agent MUST send an Error Message
with the error code ERR_ATTESTATION_REQUIRED supplying the supported-freshness-mechanisms and challenge if needed.
Otherwise, processing continues as follows.</t>

<t>If the TEEP Agent requires attesting the TAM and the QueryRequest message did
contain an attestation-payload, the TEEP Agent checks whether it contains Evidence or an
Attestation Result by inspecting the attestation-payload-format
parameter.  The media type defined in <xref target="eat"/> indicates an Attestation Result, though future
extensions might also indicate other Attestation Result formats in the future. Any other unrecognized
value indicates Evidence.  If it contains an Attestation Result, processing continues as in
<xref target="attestation-result-agent"/>.</t>

<t>If the QueryRequest is instead determined to contain Evidence, the TEEP Agent passes
the Evidence (via some mechanism out of scope of this document) to an attestation Verifier
(see <xref target="RFC9334"/>)
to determine whether the TAM is in a trustworthy state.  Once the TEEP Agent receives an Attestation
Result from the Verifier, processing continues as in <xref target="attestation-result-agent"/>.</t>

<t>The TEEP Agent MAY also use (in any implementation specific way) any SUIT Reports in the
QueryRequest in determining whether it trusts the TAM.  If a SUIT Report
uses a suit-cose-profile that the TEEP Agent does not support, then the TEEP
Agent MUST send an Error Message with the error code ERR_UNSUPPORTED_SUIT_REPORT supplying
the supported-suit-cose-profiles.  Otherwise, processing continues as follows.</t>

<t>Once the Attestation Result is handled, or if the TEEP Agent does not require attesting the TAM,
the Agent responds with a
QueryResponse message if all fields were understood, or an Error message
if any error was encountered.</t>

<section anchor="attestation-result-agent"><name>Handling an Attestation Result</name>

<t>The Attestation Result must first be validated as follows:</t>

<t><list style="numbers">
  <t>Verify that the Attestation Result was signed by a Verifier that the TEEP Agent trusts.</t>
  <t>Verify that the Attestation Result contains a "cnf" claim (as defined in Section 3.1 of <xref target="RFC8747"/>) where
the key ID is the hash of the TAM public key used to verify the signature on the TEEP message,
and the hash is computed using the Digest Algorithm specified by one of the SUIT profiles
supported by the TEEP Agent (SHA-256 for the ones mandated in this document).  <vspace blankLines='1'/>
See Sections 3.4 and 6 of <xref target="RFC8747"/> for more discussion.</t>
</list></t>

</section>
</section>
<section anchor="handling-an-update-message"><name>Handling an Update Message</name>

<t>When an Update message is received, the Agent attempts to unlink any
SUIT manifests listed in the unneeded-manifest-list field of the message,
and responds with an Error message if any error was encountered.
If the unneeded-manifest-list was empty, or no error was encountered processing it,
the Agent attempts to update
the Trusted Components specified in the SUIT manifests
by following the Update Procedure specified
in <xref target="I-D.ietf-suit-manifest"/>, and responds with a Success message if
all SUIT manifests were successfully installed, or an Error message
if any error was encountered.
It is important to note that the
Update Procedure requires resolving and installing any dependencies
indicated in the manifest, which may take some time, and the Success
or Error message is generated only after completing the Update Procedure.</t>

</section>
</section>
</section>
<section anchor="ciphersuite"><name>Cipher Suites</name>

<t>TEEP requires algorithms for various purposes:</t>

<t><list style="symbols">
  <t>Algorithms for signing TEEP messages exchanged between the TEEP Agent and the TAM.</t>
  <t>Algorithms for signing EAT-based Evidence sent by the Attester via the TEEP Agent and the TAM to the Verifier.</t>
  <t>Algorithms for encrypting EAT-based Evidence sent by the TEEP Agent to the TAM. (The TAM will decrypt the encrypted Evidence and will forward it to the Verifier.)</t>
  <t>Algorithms for signing and optionally encrypting SUIT reports sent by the TEEP Agent to the TAM.</t>
  <t>Algorithms for signing and optionally encrypting SUIT manifests sent by the Trusted Component Signer to the TEEP Agent.</t>
</list></t>

<t>Further details are provided for the protection of TEEP messages, SUIT Reports, and EATs.</t>

<section anchor="teep-ciphersuite"><name>TEEP Messages</name>

<t>The TEEP protocol uses COSE for protection of TEEP messages in both directions.
To negotiate cryptographic mechanisms and algorithms, the TEEP protocol defines the following cipher suite structure,
which is used to specify an ordered set of operations (e.g., sign) done as part of composing a TEEP message.
Although this specification only specifies the use of signing and relies on payload encryption to protect sensitive
information, future extensions might specify support for encryption and/or MAC operations if needed.</t>

<figure><sourcecode type="cddl-cipher-suite"><![CDATA[
; teep-cipher-suites
$teep-cipher-suite /= teep-cipher-suite-sign1-eddsa
$teep-cipher-suite /= teep-cipher-suite-sign1-es256

;The following two cipher suites have only a single operation each.
;Other cipher suites may be defined to have multiple operations.
;It is MANDATORY for TAM to support them, and OPTIONAL
;to support any additional ones that use COSE_Sign_Tagged, or other
;signing, encryption, or MAC algorithms.

teep-operation-sign1-eddsa = [ cose-sign1, cose-alg-eddsa ]
teep-operation-sign1-es256 = [ cose-sign1, cose-alg-es256 ]

teep-cipher-suite-sign1-eddsa = [ teep-operation-sign1-eddsa ]
teep-cipher-suite-sign1-es256 = [ teep-operation-sign1-es256 ]

;MANDATORY for TAM and TEEP Agent to support the following COSE
;operations, and OPTIONAL to support additional ones such as
;COSE_Sign_Tagged, COSE_Encrypt0_Tagged, etc.

cose-sign1 = 18      ; CoAP Content-Format value

;MANDATORY for TAM to support the following, and OPTIONAL to implement
;any additional algorithms from the IANA COSE Algorithms registry.

cose-alg-es256 = -7  ; ECDSA w/ SHA-256
cose-alg-eddsa = -8  ; EdDSA
]]></sourcecode></figure>

<t>Each operation in a given cipher suite has two elements:</t>

<t><list style="symbols">
  <t>a COSE-type defined in Section 2 of <xref target="RFC9052"/> that identifies the type of operation, and</t>
  <t>a specific cryptographic algorithm as defined in the COSE Algorithms registry <xref target="COSE.Algorithm"/> to be used to perform that operation.</t>
</list></t>

<t>A TAM MUST support both of the cipher suites defined above.  A TEEP Agent MUST support at least
one of the two but can choose which one.  For example, a TEEP Agent might
choose a given cipher suite if it has hardware support for it.
A TAM or TEEP Agent MAY also support any other algorithms in the COSE Algorithms
registry in addition to the mandatory ones listed above.  It MAY also support use
with COSE_Sign or other COSE types in additional cipher suites.</t>

<t>Any cipher suites without confidentiality protection can only be added if the
associated specification includes a discussion of security considerations and
applicability, since manifests may carry sensitive information. For example,
Section 6 of <xref target="RFC9397"/> permits implementations that
terminate transport security inside the TEE and if the transport security
provides confidentiality then additional encryption might not be needed in
the manifest for some use cases. For most use cases, however, manifest
confidentiality will be needed to protect sensitive fields from the TAM as
discussed in Section 9.8 of <xref target="RFC9397"/>.</t>

<t>The cipher suites defined above do not do encryption at the TEEP layer, but
permit encryption of the SUIT payload using a mechanism such as <xref target="I-D.ietf-suit-firmware-encryption"/>.
See <xref target="security"/> and <xref target="eat-suit-ciphersuite"/> for more discussion of specific payloads.</t>

<t>For the initial QueryRequest message, unless the TAM has more specific knowledge about the TEEP Agent
(e.g., if the QueryRequest is sent in response to some underlying transport message that contains a hint),
the message does not use COSE_Sign1 with one of the above cipher suites, but instead uses COSE_Sign with multiple signatures,
one for each algorithm used in any of the cipher suites listed in the supported-teep-cipher-suites
parameter of the QueryRequest, so that a TEEP Agent supporting any one of them can verify a signature.
If the TAM does have specific knowledge about which cipher suite the TEEP Agent supports,
it MAY instead use that cipher suite with the QueryRequest.</t>

<t>For an Error message with code ERR_UNSUPPORTED_CIPHER_SUITES, the TEEP Agent MUST
protect it with any of the cipher suites mandatory for the TAM.</t>

<t>For all other TEEP messages between the TAM and TEEP Agent,
the selected TEEP cipher suite MUST be used in both directions.</t>

</section>
<section anchor="eat-suit-ciphersuite"><name>EATs and SUIT Reports</name>

<t>TEEP uses COSE for confidentiality of EATs and SUIT Reports sent by a TEEP Agent.
The TEEP Agent obtains a signed EAT and then SHOULD encrypt it using the TAM
as the recipient. A SUIT Report is created by a SUIT processor, which
is part of the TEEP Agent itself. The TEEP Agent is therefore in control of signing
the SUIT Report and SHOULD encrypt it. Again, the TAM is the recipient of the encrypted
content. For content-key distribution Ephemeral-Static Diffie-Hellman (ES-DH) is used
in this specification. See Section 8.5.5 and Appendix B of <xref target="RFC9052"/> for more details.
(If <xref target="I-D.ietf-suit-firmware-encryption"/> is used, it is also the same as discussed in
Section 6.2 of that document.)</t>

<t>ES-DH is a scheme that provides public key encryption given
a recipient's public key. Hence, the TEEP Agent needs to be in possession of the public
key of the TAM. See Section 5 of <xref target="RFC9397"/> for more discussion of TAM keys used by the
TEEP Agent. There are multiple variants of this scheme; this document uses the
variant specified in Section 8.5.5 of <xref target="RFC9052"/>.</t>

<t>The following two layer structure is used:</t>

<t><list style="symbols">
  <t>Layer 0: Has a content encrypted with the Content Encryption Key (CEK), a symmetric key.
For encrypting SUIT Reports and EATs the content MUST NOT be detached.</t>
  <t>Layer 1: Uses the AES Key Wrap algorithm to encrypt the randomly generated CEK with the
Key Encryption Key (KEK) derived with ES-DH, whereby the resulting symmetric key is fed
into the HKDF-based key derivation function.</t>
</list></t>

<t>As a result, the two layers combine ES-DH with AES-KW and HKDF.</t>

<t>This document re-uses the CDDL defined in Section 6.2.3 of
<xref target="I-D.ietf-suit-firmware-encryption"/> and the context information structure defined in
Section 6.2.4 of <xref target="I-D.ietf-suit-firmware-encryption"/> although with an important modification.
The COSE_KDF_Context.SuppPubInfo.other value MUST be set to "SUIT Report Encryption" when a
SUIT Report is encrypted and MUST be set to "EAT Encryption" when an EAT is encrypted. The
COSE_KDF_Context.SuppPubInfo.other field captures the protocol in which the ES-DH content key
distribution algorithm is used.</t>

<t>This specification defines cipher suites for confidentiality protection of EATs and
SUIT Reports. The TAM MUST support each cipher suite defined below, based on definitions in
<xref target="I-D.ietf-suit-mti"/>.  A TEEP Agent MUST support at least one of the cipher
suites below but can choose which one.  For example, a TEEP Agent might
choose a given cipher suite if it has hardware support for it.
A TAM or TEEP Agent MAY also support other algorithms in the COSE Algorithms registry.
It MAY also support use with COSE_Encrypt or other COSE types in additional cipher suites.</t>

<figure><sourcecode type="cddl-suit-cose-profile"><![CDATA[
; suit-cose-profile
$suit-cose-profile /= suit-sha256-es256-ecdh-a128ctr
$suit-cose-profile /= suit-sha256-eddsa-ecdh-a128ctr
$suit-cose-profile /= suit-sha256-es256-ecdh-a128gcm
$suit-cose-profile /= suit-sha256-eddsa-ecdh-chacha-poly
]]></sourcecode></figure>

</section>
</section>
<section anchor="freshness-mechanisms"><name>Attestation Freshness Mechanisms</name>

<t>A freshness mechanism determines how a TAM can tell whether an attestation payload provided
in a QueryResponse is fresh.  There are multiple ways this can be done
as discussed in Section 10 of <xref target="RFC9334"/>.</t>

<t>Each freshness mechanism is identified with an integer value, which corresponds to
an IANA registered freshness mechanism (see the IANA Considerations section of
<xref target="I-D.ietf-rats-reference-interaction-models"/>).
This document uses the following freshness mechanisms which may be added to in the
future by TEEP extensions:</t>

<figure><sourcecode type="cddl-freshness"><![CDATA[
; freshness-mechanisms
FRESHNESS_NONCE = 0
FRESHNESS_TIMESTAMP = 1

$freshness-mechanism /= FRESHNESS_NONCE
$freshness-mechanism /= FRESHNESS_TIMESTAMP
]]></sourcecode></figure>

<t>An implementation MUST support the Nonce mechanism and MAY support additional
mechanisms.</t>

<t>In the Nonce mechanism, the attestation payload MUST include a nonce provided
in the QueryRequest challenge if the Background Check model is used, or in
the QueryRequest token if the Passport model is used.  The timestamp mechanism uses a timestamp
determined via mechanisms outside the TEEP protocol,
and the challenge is only needed in the QueryRequest message
if a challenge is needed in generating the attestation payload for reasons other
than freshness.</t>

<t>If a TAM supports multiple freshness mechanisms that require different challenge
formats, the QueryRequest message can currently only send one such challenge.
This situation is expected to be rare, but should it occur, the TAM can
choose to prioritize one of them and exclude the other from the
supported-freshness-mechanisms in the QueryRequest, and resend the QueryRequest
with the other mechanism if an ERR_UNSUPPORTED_FRESHNESS_MECHANISMS Error
is received that indicates the TEEP Agent supports the other mechanism.</t>

</section>
<section anchor="security"><name>Security Considerations</name>

<t>This section summarizes the security considerations discussed in this
specification:</t>

<dl newline="true">
  <dt>Cryptographic Algorithms</dt>
  <dd>
    <t>TEEP protocol messages exchanged between the TAM and the TEEP Agent
are protected using COSE. This specification relies on the
cryptographic algorithms provided by COSE.  Public key based
authentication is used by the TEEP Agent to authenticate the TAM
and vice versa.</t>
  </dd>
  <dt>Attestation</dt>
  <dd>
    <t>A TAM relies on signed Attestation Results provided by a Verifier,
either obtained directly using a mechanism outside the TEEP protocol
(by using some mechanism to pass Evidence obtained in the attestation payload of
a QueryResponse, and getting back the Attestation Results), or indirectly
via the TEEP Agent forwarding the Attestation Results in the attestation
payload of a QueryResponse. See the security considerations of the
specific mechanism in use (e.g., EAT) for more discussion.
</t>

    <t>An impersonation attack, where one TEEP Agent attempts to use the attestation
payload of another TEEP Agent, can be prevented using a proof-of-possession
approach.  The "cnf" claim is mandatory in the EAT profile for EAT for this
purpose.  See Section 6 of <xref target="RFC8747"/> and <xref target="attestation-result-tam"/> and
<xref target="attestation-result-agent"/> of this document
for more discussion.</t>
  </dd>
  <dt>Trusted Component Binaries</dt>
  <dd>
    <t>Each Trusted Component binary is signed by a Trusted Component Signer. It is the responsibility of the
TAM to relay only verified Trusted Components from authorized Trusted Component Signers.  Delivery of
a Trusted Component to the TEEP Agent is then the responsibility of the TAM,
using the security mechanisms provided by the TEEP
protocol.  To protect the Trusted Component binary, the SUIT manifest format is used and
it offers a variety of security features, including digital
signatures and content encryption, if a SUIT mechanism such as <xref target="I-D.ietf-suit-firmware-encryption"/>
is used.</t>
  </dd>
  <dt>Personalization Data</dt>
  <dd>
    <t>A Trusted Component Signer or TAM can supply personalization data along with a Trusted Component.
This data is also protected by a SUIT manifest. Personalization data is signed and encrypted
by a Trusted Component Signer, if a SUIT mechanism such as <xref target="I-D.ietf-suit-firmware-encryption"/>
is used.</t>
  </dd>
  <dt>TEEP Broker</dt>
  <dd>
    <t>As discussed in section 6 of <xref target="RFC9397"/>,
the TEEP protocol typically relies on a TEEP Broker to relay messages
between the TAM and the TEEP Agent.  When the TEEP Broker is
compromised it can drop messages, delay the delivery of messages,
and replay messages but it cannot modify those messages. (A replay
would be, however, detected by the TEEP Agent.) A compromised TEEP
Broker could reorder messages in an attempt to install an old
version of a Trusted Component. Information in the manifest ensures that TEEP
Agents are protected against such downgrade attacks based on
features offered by the manifest itself.</t>
  </dd>
  <dt>Replay Protection</dt>
  <dd>
    <t>The TEEP protocol supports replay protection as follows.
The transport protocol under the TEEP protocol might provide replay
protection, but may be terminated in the TEEP Broker which is not trusted
by the TEEP Agent and so the TEEP protocol does replay protection itself.
If attestation of the TAM is used, the attestation freshness mechanism
provides replay protection for attested QueryRequest messages.
If non-attested QueryRequest messages are replayed, the TEEP Agent will generate
QueryResponse or Error messages, but the REE can already conduct Denial of Service
attacks against the TEE and/or the TAM even without the TEEP protocol.
QueryResponse messages have replay protection via attestation freshness mechanism,
or the token field in the message if attestation is not used.
Update messages have replay protection via the suit-manifest-sequence-number
(see Section 8.4.2 of <xref target="I-D.ietf-suit-manifest"/>).
Error and Success messages have replay protection via SUIT Reports and/or the token
field in the message, where a TAM can detect which message it is in response to.</t>
  </dd>
  <dt>Trusted Component Signer Compromise</dt>
  <dd>
    <t>A TAM is responsible for vetting a Trusted Component and
before distributing them to TEEP Agents.<br />
It is RECOMMENDED to provide a way to
update the trust anchor store used by the TEE, for example using
a firmware update mechanism such as <xref target="I-D.ietf-rats-concise-ta-stores"/>.  Thus, if a Trusted Component
Signer is later compromised, the TAM can update the trust anchor
store used by the TEE, for example using a firmware update mechanism.</t>
  </dd>
  <dt>CA Compromise</dt>
  <dd>
    <t>The CA issuing certificates to a TEE or a Trusted Component Signer might get compromised.
It is RECOMMENDED to provide a way to update the trust anchor store used by the TEE, for example
by using a firmware update mechanism, Concise TA Stores <xref target="I-D.ietf-rats-concise-ta-stores"/>, Trust
Anchor Management Protocol (TAMP) <xref target="RFC5934"/> or a similar mechanism. If the CA issuing 
certificates to devices gets compromised then these devices will be rejected by a
TAM, if revocation is available to the TAM.</t>
  </dd>
  <dt>TAM Certificate Expiry</dt>
  <dd>
    <t>The integrity and the accuracy of the
clock within the TEE determines the ability to determine an expired
TAM certificate, if certificates are used.</t>
  </dd>
  <dt>Compromised Time Source</dt>
  <dd>
    <t>As discussed above, certificate validity checks rely on comparing
validity dates to the current time, which relies on having a trusted
source of time, such as <xref target="RFC8915"/>.  A compromised time source could
thus be used to subvert such validity checks.</t>
  </dd>
</dl>

</section>
<section anchor="privacy"><name>Privacy Considerations</name>

<t>Depending on
the properties of the attestation mechanism, it is possible to
uniquely identify a device based on information in the
attestation payload or in the certificate used to sign the
attestation payload.  This uniqueness may raise privacy concerns. To lower the
privacy implications the TEEP Agent MUST present its
attestation payload only to an authenticated and authorized TAM and when using
an EAT, it SHOULD use encryption as discussed in <xref target="I-D.ietf-rats-eat"/>, since
confidentiality is not provided by the TEEP protocol itself and
the transport protocol under the TEEP protocol might be implemented
outside of any TEE. If any mechanism other than EAT is used, it is
up to that mechanism to specify how privacy is provided.</t>

<t>Since SUIT Reports can also contain sensitive information, a TEEP Agent
SHOULD also encrypt SUIT Reports as discussed in <xref target="eat-suit-ciphersuite"/>.</t>

<t>In addition, in the usage scenario discussed in <xref target="directtam"/>, a device
reveals its IP address to the Trusted Component Binary server.  This
can reveal to that server at least a clue as to its location, which
might be sensitive information in some cases.</t>

<t>EATs and SUIT Reports from a TAM can also be present in
a QueryRequest. Typically, the ability to uniquely identify a TAM
is less of a concern than it is for TEEP Agents, but where confidentiality
is a concern for the TAM, such EATs and SUIT Reports SHOULD be encrypted
just like ones from TEEP Agents.</t>

</section>
<section anchor="IANA"><name>IANA Considerations</name>

<section anchor="media-type-registration"><name>Media Type Registration</name>

<t>IANA is requested to assign a media type for
application/teep+cbor.</t>

<dl>
  <dt>Type name:</dt>
  <dd>
    <t>application</t>
  </dd>
  <dt>Subtype name:</dt>
  <dd>
    <t>teep+cbor</t>
  </dd>
  <dt>Required parameters:</dt>
  <dd>
    <t>none</t>
  </dd>
  <dt>Optional parameters:</dt>
  <dd>
    <t>none</t>
  </dd>
  <dt>Encoding considerations:</dt>
  <dd>
    <t>Same as encoding considerations of
application/cbor.</t>
  </dd>
  <dt>Security considerations:</dt>
  <dd>
    <t>See Security Considerations Section of this document.</t>
  </dd>
  <dt>Interoperability considerations:</dt>
  <dd>
    <t>Same as interoperability
considerations of application/cbor as specified in <xref target="RFC8949"/>.</t>
  </dd>
  <dt>Published specification:</dt>
  <dd>
    <t>This document.</t>
  </dd>
  <dt>Applications that use this media type:</dt>
  <dd>
    <t>TEEP protocol implementations</t>
  </dd>
  <dt>Fragment identifier considerations:</dt>
  <dd>
    <t>N/A</t>
  </dd>
  <dt>Additional information:</dt>
  <dd>
    <dl>
      <dt>Deprecated alias names for this type:</dt>
      <dd>
        <t>N/A</t>
      </dd>
      <dt>Magic number(s):</dt>
      <dd>
        <t>N/A</t>
      </dd>
      <dt>File extension(s):</dt>
      <dd>
        <t>N/A</t>
      </dd>
      <dt>Macintosh file type code(s):</dt>
      <dd>
        <t>N/A</t>
      </dd>
    </dl>
  </dd>
  <dt>Person to contact for further information:</dt>
  <dd>
    <t>teep@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:</dt>
  <dd>
    <t>See the "Authors' Addresses" section of this document</t>
  </dd>
  <dt>Change controller:</dt>
  <dd>
    <t>IETF</t>
  </dd>
</dl>

</section>
</section>


  </middle>

  <back>


    <references title='Normative References'>



<reference anchor='RFC9052'>
  <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='RFC3629'>
  <front>
    <title>UTF-8, a transformation format of ISO 10646</title>
    <author fullname='F. Yergeau' initials='F.' surname='Yergeau'/>
    <date month='November' year='2003'/>
    <abstract>
      <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
    </abstract>
  </front>
  <seriesInfo name='STD' value='63'/>
  <seriesInfo name='RFC' value='3629'/>
  <seriesInfo name='DOI' value='10.17487/RFC3629'/>
</reference>

<reference anchor='RFC5198'>
  <front>
    <title>Unicode Format for Network Interchange</title>
    <author fullname='J. Klensin' initials='J.' surname='Klensin'/>
    <author fullname='M. Padlipsky' initials='M.' surname='Padlipsky'/>
    <date month='March' year='2008'/>
    <abstract>
      <t>The Internet today is in need of a standardized form for the transmission of internationalized "text" information, paralleling the specifications for the use of ASCII that date from the early days of the ARPANET. This document specifies that format, using UTF-8 with normalization and specific line-ending sequences. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='5198'/>
  <seriesInfo name='DOI' value='10.17487/RFC5198'/>
</reference>

<reference anchor='RFC8747'>
  <front>
    <title>Proof-of-Possession Key Semantics for CBOR Web Tokens (CWTs)</title>
    <author fullname='M. Jones' initials='M.' surname='Jones'/>
    <author fullname='L. Seitz' initials='L.' surname='Seitz'/>
    <author fullname='G. Selander' initials='G.' surname='Selander'/>
    <author fullname='S. Erdtman' initials='S.' surname='Erdtman'/>
    <author fullname='H. Tschofenig' initials='H.' surname='Tschofenig'/>
    <date month='March' year='2020'/>
    <abstract>
      <t>This specification describes how to declare in a CBOR Web Token (CWT) (which is defined by RFC 8392) that the presenter of the CWT possesses a particular proof-of-possession key. Being able to prove possession of a key is also sometimes described as being the holder-of-key. This specification provides equivalent functionality to "Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs)" (RFC 7800) but using Concise Binary Object Representation (CBOR) and CWTs rather than JavaScript Object Notation (JSON) and JSON Web Tokens (JWTs).</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8747'/>
  <seriesInfo name='DOI' value='10.17487/RFC8747'/>
</reference>

<reference anchor='RFC8949'>
  <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='I-D.ietf-cose-key-thumbprint'>
   <front>
      <title>CBOR Object Signing and Encryption (COSE) Key Thumbprint</title>
      <author fullname='Kohei Isobe' initials='K.' surname='Isobe'>
         <organization>SECOM CO., LTD.</organization>
      </author>
      <author fullname='Hannes Tschofenig' initials='H.' surname='Tschofenig'>
         </author>
      <author fullname='Orie Steele' initials='O.' surname='Steele'>
         <organization>Transmute</organization>
      </author>
      <date day='23' month='October' year='2023'/>
      <abstract>
	 <t>   This specification defines a method for computing a hash value over a
   COSE Key. It defines which fields in a COSE Key structure are used in
   the hash computation, the method of creating a canonical form of the
   fields, and how to hash the byte sequence.  The resulting hash value
   can be used for identifying or selecting a key that is the subject of
   the thumbprint.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-cose-key-thumbprint-04'/>
   
</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>Qualcomm Technologies Inc.</organization>
      </author>
      <author fullname='Jeremy O&#x27;Donoghue' initials='J.' surname='O&#x27;Donoghue'>
         <organization>Qualcomm Technologies Inc.</organization>
      </author>
      <author fullname='Carl Wallace' initials='C.' surname='Wallace'>
         <organization>Red Hound Software, Inc.</organization>
      </author>
      <date day='14' month='October' year='2023'/>
      <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-22'/>
   
</reference>


<reference anchor='I-D.ietf-suit-manifest'>
   <front>
      <title>A Concise Binary Object Representation (CBOR)-based Serialization Format for the Software Updates for Internet of Things (SUIT) Manifest</title>
      <author fullname='Brendan Moran' initials='B.' surname='Moran'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='Hannes Tschofenig' initials='H.' surname='Tschofenig'>
         </author>
      <author fullname='Henk Birkholz' initials='H.' surname='Birkholz'>
         <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Koen Zandberg' initials='K.' surname='Zandberg'>
         <organization>Inria</organization>
      </author>
      <author fullname='Øyvind Rønningstad' initials='O.' surname='Rønningstad'>
         <organization>Nordic Semiconductor</organization>
      </author>
      <date day='23' month='October' year='2023'/>
      <abstract>
	 <t>   This specification describes the format of a manifest.  A manifest is
   a bundle of metadata about code/data obtained by a recipient (chiefly
   the firmware for an IoT device), where to find the code/data, the
   devices to which it applies, and cryptographic information protecting
   the manifest.  Software updates and Trusted Invocation both tend to
   use sequences of common operations, so the manifest encodes those
   sequences of operations, rather than declaring the metadata.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-manifest-24'/>
   
</reference>


<reference anchor='I-D.ietf-suit-mti'>
   <front>
      <title>Mandatory-to-Implement Algorithms for Authors and Recipients of Software Update for the Internet of Things manifests</title>
      <author fullname='Brendan Moran' initials='B.' surname='Moran'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='Øyvind Rønningstad' initials='O.' surname='Rønningstad'>
         <organization>Nordic Semiconductor</organization>
      </author>
      <author fullname='Akira Tsukamoto' initials='A.' surname='Tsukamoto'>
         <organization>ALAXALA Networks Corp.</organization>
      </author>
      <date day='23' month='October' year='2023'/>
      <abstract>
	 <t>   This document specifies algorithm profiles for SUIT manifest parsers
   and authors to ensure better interoperability.  These profiles apply
   specifically to a constrained node software update use case.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-mti-03'/>
   
</reference>


<reference anchor='I-D.ietf-suit-trust-domains'>
   <front>
      <title>SUIT Manifest Extensions for Multiple Trust Domains</title>
      <author fullname='Brendan Moran' initials='B.' surname='Moran'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='Ken Takayama' initials='K.' surname='Takayama'>
         <organization>SECOM CO., LTD.</organization>
      </author>
      <date day='11' month='September' year='2023'/>
      <abstract>
	 <t>   This specification describes extensions to the SUIT Manifest format
   (as defined in [I-D.ietf-suit-manifest]) for use in deployments with
   multiple trust domains.  A device has more than one trust domain when
   it enables delegation of different rights to mutually distrusting
   entities for use for different purposes or Components in the context
   of firmware or software update.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-trust-domains-05'/>
   
</reference>


<reference anchor='I-D.ietf-suit-report'>
   <front>
      <title>Secure Reporting of Update Status</title>
      <author fullname='Brendan Moran' initials='B.' surname='Moran'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='Henk Birkholz' initials='H.' surname='Birkholz'>
         <organization>Fraunhofer SIT</organization>
      </author>
      <date day='11' month='September' year='2023'/>
      <abstract>
	 <t>   The Software Update for the Internet of Things (SUIT) manifest
   provides a way for many different update and boot workflows to be
   described by a common format.  However, this does not provide a
   feedback mechanism for developers in the event that an update or boot
   fails.

   This specification describes a lightweight feedback mechanism that
   allows a developer in possession of a manifest to reconstruct the
   decisions made and actions performed by a manifest processor.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-report-07'/>
   
</reference>


<reference anchor="COSE.Algorithm" target="https://www.iana.org/assignments/cose/cose.xhtml#algorithms">
  <front>
    <title>COSE Algorithms</title>
    <author >
      <organization>IANA</organization>
    </author>
    <date year="n.d."/>
  </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 title='Informative References'>




<reference anchor='I-D.ietf-suit-firmware-encryption'>
   <front>
      <title>Encrypted Payloads in SUIT Manifests</title>
      <author fullname='Hannes Tschofenig' initials='H.' surname='Tschofenig'>
         </author>
      <author fullname='Russ Housley' initials='R.' surname='Housley'>
         <organization>Vigil Security, LLC</organization>
      </author>
      <author fullname='Brendan Moran' initials='B.' surname='Moran'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='David Brown' initials='D.' surname='Brown'>
         <organization>Linaro</organization>
      </author>
      <author fullname='Ken Takayama' initials='K.' surname='Takayama'>
         <organization>SECOM CO., LTD.</organization>
      </author>
      <date day='23' month='October' year='2023'/>
      <abstract>
	 <t>   This document specifies techniques for encrypting software, firmware,
   machine learning models, and personalization data by utilizing the
   IETF SUIT manifest.  Key agreement is provided by ephemeral-static
   (ES) Diffie-Hellman (DH) and AES Key Wrap (AES-KW).  ES-DH uses
   public key cryptography while AES-KW uses a pre-shared key.
   Encryption of the plaintext is accomplished with conventional
   symmetric key cryptography.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-firmware-encryption-18'/>
   
</reference>


<reference anchor='I-D.ietf-rats-ar4si'>
   <front>
      <title>Attestation Results for Secure Interactions</title>
      <author fullname='Eric Voit' initials='E.' surname='Voit'>
         <organization>Cisco Systems</organization>
      </author>
      <author fullname='Henk Birkholz' initials='H.' surname='Birkholz'>
         <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Thomas Hardjono' initials='T.' surname='Hardjono'>
         <organization>MIT</organization>
      </author>
      <author fullname='Thomas Fossati' initials='T.' surname='Fossati'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='Vincent Scarlata' initials='V.' surname='Scarlata'>
         <organization>Intel</organization>
      </author>
      <date day='30' month='August' year='2023'/>
      <abstract>
	 <t>   This document defines reusable Attestation Result information
   elements.  When these elements are offered to Relying Parties as
   Evidence, different aspects of Attester trustworthiness can be
   evaluated.  Additionally, where the Relying Party is interfacing with
   a heterogeneous mix of Attesting Environment and Verifier types,
   consistent policies can be applied to subsequent information exchange
   between each Attester and the Relying Party.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-rats-ar4si-05'/>
   
</reference>


<reference anchor='I-D.ietf-rats-reference-interaction-models'>
   <front>
      <title>Reference Interaction Models for Remote Attestation Procedures</title>
      <author fullname='Henk Birkholz' initials='H.' surname='Birkholz'>
         <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Michael Eckel' initials='M.' surname='Eckel'>
         <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Wei Pan' initials='W.' surname='Pan'>
         <organization>Huawei Technologies</organization>
      </author>
      <author fullname='Eric Voit' initials='E.' surname='Voit'>
         <organization>Cisco Systems</organization>
      </author>
      <date day='10' month='September' year='2023'/>
      <abstract>
	 <t>   This document describes interaction models for remote attestation
   procedures (RATS).  Three conveying mechanisms -- Challenge/Response,
   Uni-Directional, and Streaming Remote Attestation -- are illustrated
   and defined.  Analogously, a general overview about the information
   elements typically used by corresponding conveyance protocols are
   highlighted.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-rats-reference-interaction-models-08'/>
   
</reference>

<reference anchor='RFC9397'>
  <front>
    <title>Trusted Execution Environment Provisioning (TEEP) Architecture</title>
    <author fullname='M. Pei' initials='M.' surname='Pei'/>
    <author fullname='H. Tschofenig' initials='H.' surname='Tschofenig'/>
    <author fullname='D. Thaler' initials='D.' surname='Thaler'/>
    <author fullname='D. Wheeler' initials='D.' surname='Wheeler'/>
    <date month='July' year='2023'/>
    <abstract>
      <t>A Trusted Execution Environment (TEE) is an environment that enforces the following: any code within the environment cannot be tampered with, and any data used by such code cannot be read or tampered with by any code outside the environment. This architecture document discusses the motivation for designing and standardizing a protocol for managing the lifecycle of Trusted Applications running inside such a TEE.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='9397'/>
  <seriesInfo name='DOI' value='10.17487/RFC9397'/>
</reference>


<reference anchor='I-D.ietf-rats-eat-media-type'>
   <front>
      <title>EAT Media Types</title>
      <author fullname='Laurence Lundblade' initials='L.' surname='Lundblade'>
         <organization>Security Theory LLC</organization>
      </author>
      <author fullname='Henk Birkholz' initials='H.' surname='Birkholz'>
         <organization>Fraunhofer Institute for Secure Information Technology</organization>
      </author>
      <author fullname='Thomas Fossati' initials='T.' surname='Fossati'>
         <organization>arm</organization>
      </author>
      <date day='23' month='July' year='2023'/>
      <abstract>
	 <t>   Payloads used in Remote Attestation Procedures may require an
   associated media type for their conveyance, for example when used in
   RESTful APIs.

   This memo defines media types to be used for Entity Attestation
   Tokens (EAT).

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-rats-eat-media-type-04'/>
   
</reference>


<reference anchor='I-D.ietf-rats-concise-ta-stores'>
   <front>
      <title>Concise TA Stores (CoTS)</title>
      <author fullname='Carl Wallace' initials='C.' surname='Wallace'>
         <organization>Red Hound Software</organization>
      </author>
      <author fullname='Russ Housley' initials='R.' surname='Housley'>
         <organization>Vigil Security, LLC</organization>
      </author>
      <author fullname='Thomas Fossati' initials='T.' surname='Fossati'>
         <organization>arm</organization>
      </author>
      <author fullname='Yogesh Deshpande' initials='Y.' surname='Deshpande'>
         <organization>arm</organization>
      </author>
      <date day='5' month='June' year='2023'/>
      <abstract>
	 <t>   Trust anchor (TA) stores may be used for several purposes in the
   Remote Attestation Procedures (RATS) architecture including verifying
   endorsements, reference values, digital letters of approval,
   attestations, or public key certificates.  This document describes a
   Concise Reference Integrity Manifest (CoRIM) extension that may be
   used to convey optionally constrained trust anchor stores containing
   optionally constrained trust anchors in support of these purposes.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-rats-concise-ta-stores-01'/>
   
</reference>

<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='RFC8915'>
  <front>
    <title>Network Time Security for the Network Time Protocol</title>
    <author fullname='D. Franke' initials='D.' surname='Franke'/>
    <author fullname='D. Sibold' initials='D.' surname='Sibold'/>
    <author fullname='K. Teichel' initials='K.' surname='Teichel'/>
    <author fullname='M. Dansarie' initials='M.' surname='Dansarie'/>
    <author fullname='R. Sundblad' initials='R.' surname='Sundblad'/>
    <date month='September' year='2020'/>
    <abstract>
      <t>This memo specifies Network Time Security (NTS), a mechanism for using Transport Layer Security (TLS) and Authenticated Encryption with Associated Data (AEAD) to provide cryptographic security for the client-server mode of the Network Time Protocol (NTP).</t>
      <t>NTS is structured as a suite of two loosely coupled sub-protocols. The first (NTS Key Establishment (NTS-KE)) handles initial authentication and key establishment over TLS. The second (NTS Extension Fields for NTPv4) handles encryption and authentication during NTP time synchronization via extension fields in the NTP packets, and holds all required state only on the client via opaque cookies.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8915'/>
  <seriesInfo name='DOI' value='10.17487/RFC8915'/>
</reference>

<reference anchor='RFC5934'>
  <front>
    <title>Trust Anchor Management Protocol (TAMP)</title>
    <author fullname='R. Housley' initials='R.' surname='Housley'/>
    <author fullname='S. Ashmore' initials='S.' surname='Ashmore'/>
    <author fullname='C. Wallace' initials='C.' surname='Wallace'/>
    <date month='August' year='2010'/>
    <abstract>
      <t>This document describes a transport independent protocol for the management of trust anchors (TAs) and community identifiers stored in a trust anchor store. The protocol makes use of the Cryptographic Message Syntax (CMS), and a digital signature is used to provide integrity protection and data origin authentication. The protocol can be used to manage trust anchor stores containing trust anchors represented as Certificate, TBSCertificate, or TrustAnchorInfo objects. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='5934'/>
  <seriesInfo name='DOI' value='10.17487/RFC5934'/>
</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>




    </references>


<section numbered="no" anchor="a-contributors"><name>A. Contributors</name>

<t>We would like to thank Brian Witten (Symantec), Tyler Kim (Solacia), Nick Cook (Arm), and  Minho Yoo (IoTrust) for their contributions
to the Open Trust Protocol (OTrP), which influenced the design of this specification.</t>

</section>
<section numbered="no" anchor="b-acknowledgements"><name>B. Acknowledgements</name>

<t>We would like to thank Eve Schooler for the suggestion of the protocol name.</t>

<t>We would like to thank Kohei Isobe (TRASIO/SECOM), Ken Takayama (SECOM),
Kuniyasu Suzaki (TRASIO/AIST), Tsukasa Oi (TRASIO), and Yuichi Takita (SECOM)
for their valuable implementation feedback.</t>

<t>We would also like to thank Carsten Bormann and Henk Birkholz for their help with the CDDL.</t>

</section>
<section numbered="no" anchor="c-complete-cddl"><name>C. Complete CDDL</name>

<t>Valid TEEP messages adhere to the following CDDL data definitions,
except that <spanx style="verb">SUIT_Envelope</spanx> and <spanx style="verb">SUIT_Component_Identifier</spanx> are
specified in <xref target="I-D.ietf-suit-manifest"/>.</t>

<t>This section is informative and merely summarizes the normative CDDL
snippets in the body of this document.</t>

<figure><sourcecode type="CDDL"><![CDATA[
; DO NOT EDIT this cddl file manually.
; This cddl file is Auto-generated file from md file.
; Edit the md file and run make for generating this cddl file.
; Please do not forget to commit and push this cddl file to git repo
; every time you have revised the md file.

teep-message = $teep-message-type .within teep-message-framework

teep-message-framework = [
  type: $teep-type / $teep-type-extension,
  options: { * teep-option },
  * any; further elements, e.g., for data-item-requested
]

teep-option = (uint => any)

; messages defined below:
$teep-message-type /= query-request
$teep-message-type /= query-response
$teep-message-type /= update
$teep-message-type /= teep-success
$teep-message-type /= teep-error

; message type numbers, in one byte which could take a number from 0 to 23
$teep-type = (0..23)
TEEP-TYPE-query-request = 1
TEEP-TYPE-query-response = 2
TEEP-TYPE-update = 3
TEEP-TYPE-teep-success = 5
TEEP-TYPE-teep-error = 6

query-request = [
  type: TEEP-TYPE-query-request,
  options: {
    ? token => bstr .size (8..64),
    ? supported-freshness-mechanisms => [ + $freshness-mechanism ],
    ? challenge => bstr .size (8..512),
    ? versions => [ + version ],
    ? attestation-payload-format => text,
    ? attestation-payload => bstr,
    ? suit-reports => [ + bstr ],
    * $$query-request-extensions,
    * $$teep-option-extensions
  },
  supported-teep-cipher-suites: [ + $teep-cipher-suite ],
  supported-suit-cose-profiles: [ + $suit-cose-profile ],
  data-item-requested: uint .bits data-item-requested
]

version = uint .size 4
ext-info = uint .size 4

; data items as bitmaps
data-item-requested = &(
  attestation: 0,
  trusted-components: 1,
  extensions: 2,
  suit-reports: 3,
)

; teep-cipher-suites
$teep-cipher-suite /= teep-cipher-suite-sign1-eddsa
$teep-cipher-suite /= teep-cipher-suite-sign1-es256

;The following two cipher suites have only a single operation each.
;Other cipher suites may be defined to have multiple operations.
;It is MANDATORY for TAM to support them, and OPTIONAL
;to support any additional ones that use COSE_Sign_Tagged, or other
;signing, encryption, or MAC algorithms.

teep-operation-sign1-eddsa = [ cose-sign1, cose-alg-eddsa ]
teep-operation-sign1-es256 = [ cose-sign1, cose-alg-es256 ]

teep-cipher-suite-sign1-eddsa = [ teep-operation-sign1-eddsa ]
teep-cipher-suite-sign1-es256 = [ teep-operation-sign1-es256 ]

;MANDATORY for TAM and TEEP Agent to support the following COSE
;operations, and OPTIONAL to support additional ones such as
;COSE_Sign_Tagged, COSE_Encrypt0_Tagged, etc.

cose-sign1 = 18      ; CoAP Content-Format value

;MANDATORY for TAM to support the following, and OPTIONAL to implement
;any additional algorithms from the IANA COSE Algorithms registry.

cose-alg-es256 = -7  ; ECDSA w/ SHA-256
cose-alg-eddsa = -8  ; EdDSA

; suit-cose-profile
$suit-cose-profile /= suit-sha256-es256-ecdh-a128ctr
$suit-cose-profile /= suit-sha256-eddsa-ecdh-a128ctr
$suit-cose-profile /= suit-sha256-es256-ecdh-a128gcm
$suit-cose-profile /= suit-sha256-eddsa-ecdh-chacha-poly

; freshness-mechanisms
FRESHNESS_NONCE = 0
FRESHNESS_TIMESTAMP = 1

$freshness-mechanism /= FRESHNESS_NONCE
$freshness-mechanism /= FRESHNESS_TIMESTAMP

query-response = [
  type: TEEP-TYPE-query-response,
  options: {
    ? token => bstr .size (8..64),
    ? selected-version => version,
    ? attestation-payload-format => text,
    ? attestation-payload => bstr,
    ? suit-reports => [ + bstr ],
    ? tc-list => [ + system-property-claims ],
    ? requested-tc-list => [ + requested-tc-info ],
    ? unneeded-manifest-list => [ + SUIT_Component_Identifier ],
    ? ext-list => [ + ext-info ],
    * $$query-response-extensions,
    * $$teep-option-extensions
  }
]

requested-tc-info = {
  component-id => SUIT_Component_Identifier,
  ? tc-manifest-sequence-number => uint .size 8,
  ? have-binary => bool
}

update = [
  type: TEEP-TYPE-update,
  options: {
    ? token => bstr .size (8..64),
    ? unneeded-manifest-list => [ + SUIT_Component_Identifier ],
    ? manifest-list => [ + bstr .cbor SUIT_Envelope ],
    ? attestation-payload-format => text,
    ? attestation-payload => bstr,
    ? err-code => (0..23),
    ? err-msg => text .size (1..128),
    * $$update-extensions,
    * $$teep-option-extensions
  }
]

teep-success = [
  type: TEEP-TYPE-teep-success,
  options: {
    ? token => bstr .size (8..64),
    ? msg => text .size (1..128),
    ? suit-reports => [ + SUIT_Report ],
    * $$teep-success-extensions,
    * $$teep-option-extensions
  }
]

teep-error = [
  type: TEEP-TYPE-teep-error,
  options: {
     ? token => bstr .size (8..64),
     ? err-msg => text .size (1..128),
     ? supported-teep-cipher-suites => [ + $teep-cipher-suite ],
     ? supported-freshness-mechanisms => [ + $freshness-mechanism ],
     ? supported-suit-cose-profiles => [ + $suit-cose-profile ],
     ? challenge => bstr .size (8..512),
     ? versions => [ + version ],
     ? suit-reports => [ + SUIT_Report ],
     * $$teep-error-extensions,
     * $$teep-option-extensions
  },
  err-code: (0..23)
]

; The err-code parameter, uint (0..23)
ERR_PERMANENT_ERROR = 1
ERR_UNSUPPORTED_EXTENSION = 2
ERR_UNSUPPORTED_FRESHNESS_MECHANISMS = 3
ERR_UNSUPPORTED_MSG_VERSION = 4
ERR_UNSUPPORTED_CIPHER_SUITES = 5
ERR_BAD_CERTIFICATE = 6
ERR_ATTESTATION_REQUIRED = 7
ERR_UNSUPPORTED_SUIT_REPORT = 8
ERR_CERTIFICATE_EXPIRED = 9
ERR_TEMPORARY_ERROR = 10
ERR_MANIFEST_PROCESSING_FAILED = 17

; labels of mapkey for teep message parameters, uint (0..23)
supported-teep-cipher-suites = 1
challenge = 2
versions = 3
supported-suit-cose-profiles = 4
selected-version = 6
attestation-payload = 7
tc-list = 8
ext-list = 9
manifest-list = 10
msg = 11
err-msg = 12
attestation-payload-format = 13
requested-tc-list = 14
unneeded-manifest-list = 15
component-id = 16
tc-manifest-sequence-number = 17
have-binary = 18
suit-reports = 19
token = 20
supported-freshness-mechanisms = 21
err-code = 23
]]></sourcecode></figure>

</section>
<section numbered="no" anchor="d-examples-of-diagnostic-notation-and-binary-representation"><name>D. Examples of Diagnostic Notation and Binary Representation</name>

<t>This section includes some examples with the following assumptions:</t>

<t><list style="symbols">
  <t>The device will have two TCs with the following SUIT Component Identifiers:
  <list style="symbols">
      <t>[ 0x000102030405060708090a0b0c0d0e0f ]</t>
      <t>[ 0x100102030405060708090a0b0c0d0e0f ]</t>
    </list></t>
  <t>SUIT manifest-list is set empty only for example purposes (see Appendix E
for actual manifest examples)</t>
</list></t>

<section numbered="no" anchor="d1-queryrequest-message"><name>D.1. QueryRequest Message</name>

<section numbered="no" anchor="d11-cbor-diagnostic-notation"><name>D.1.1. CBOR Diagnostic Notation</name>

<figure><artwork><![CDATA[
/ query-request = /
[
  / type: / 1 / TEEP-TYPE-query-request /,
  / options: /
  {
    / token / 20 : h'A0A1A2A3A4A5A6A7A8A9AAABACADAEAF',
    / versions / 3 : [ 0 ]  / 0 is current TEEP Protocol /
  },
  / supported-teep-cipher-suites: / [
    [ [ 18, -7 ] ] / Sign1 using ES256 /,
    [ [ 18, -8 ] ] / Sign1 using EdDSA /
  ],
  / supported-suit-cose-profiles: / [
    [-16, -7, -25, -65534] / suit-sha256-es256-ecdh-a128ctr /,
    [-16, -8, -25, -65534] / suit-sha256-eddsa-ecdh-a128ctr /,
    [-16, -7, -25, 1] / suit-sha256-es256-ecdh-a128gcm /,
    [-16, -8, -25, 24] / suit-sha256-eddsa-ecdh-chacha-poly /
  ],
  / data-item-requested: / 3 / attestation | trusted-components /
]
]]></artwork></figure>

</section>
<section numbered="no" anchor="d12-cbor-binary-representation"><name>D.1.2. CBOR Binary Representation</name>

<figure><artwork><![CDATA[
85                  # array(5)
   01               # unsigned(1) / TEEP-TYPE-query-request /
   A2               # map(2)
      14            # unsigned(20) / token: /
      50            # bytes(16)
         A0A1A2A3A4A5A6A7A8A9AAABACADAEAF
      03            # unsigned(3) / versions: /
      81            # array(1) / [ 0 ] /
         00         # unsigned(0)
   82               # array(2) / supported-teep-cipher-suites /
      81            # array(1)
         82         # array(2)
            12      # unsigned(18) / cose-sign1 /
            26      # negative(6) / -7 = cose-alg-es256 /
      81            # array(1)
         82         # array(2)
            12      # unsigned(18) / cose-sign1 /
            27      # negative(7) / -8 = cose-alg-eddsa /
   84               # array(4) / supported-suit-cose-profiles /
      84            # array(4) / suit-sha256-es256-ecdh-a128ctr /,
         2f         # negative(15) / -16 = SHA-256 /
         26         # negative(6) / -7 = ES256 /
         38 18      # negative(24) / -25 = ECDH-ES + HKDF-256 /
         39 fffd    # negative(65533) / -65534 = A128CTR /
      84            # array(4) / suit-sha256-eddsa-ecdh-a128ctr /
         2f         # negative(15) / -16 = SHA-256 /
         27         # negative(7) / -8 = EdDSA /
         38 18      # negative(24) / -25 = ECDH-ES + HKDF-256 /
         39 fffd    # negative(65533) / -65534 = A128CTR /
      84            # array(4) / suit-sha256-es256-ecdh-a128gcm /
         2f         # negative(15) / -16 = SHA-256 /
         26         # negative(6) / -7 = ES256 /
         38 18      # negative(24) / -25 = ECDH-ES + HKDF-256 /
         01         # unsigned(1) / A128GCM /
      84            # array(4) / suit-sha256-eddsa-ecdh-chacha-poly /
         2f         # negative(15) / -16 = SHA-256 /
         27         # negative(7) / EdDSA /
         38 18      # negative(24) / -25 = ECDH-ES + HKDF-256 /
         18 18      # unsigned(24) / 24 = ChaCha20/Poly1305 /
   03               # unsigned(3) / attestation | trusted-components /
]]></artwork></figure>

</section>
</section>
<section numbered="no" anchor="d2-entity-attestation-token"><name>D.2. Entity Attestation Token</name>

<t>This is shown below in CBOR diagnostic form.  Only the payload signed by
COSE is shown.</t>

<section numbered="no" anchor="d21-cbor-diagnostic-notation"><name>D.2.1. CBOR Diagnostic Notation</name>

<figure><artwork><![CDATA[
/ eat-claim-set = /
{
    / cnf /          8: {
                         / kid / 3 : h'ba7816bf8f01cfea414140de5dae2223'
                                     h'b00361a396177a9cb410ff61f20015ad'
                        },
    / eat_nonce /   10: h'948f8860d13a463e8e',
    / ueid /       256: h'0198f50a4ff6c05861c8860d13a638ea',
    / oemid /      258: h'894823', / IEEE OUI format OEM ID /
    / hwmodel /    259: h'549dcecc8b987c737b44e40f7c635ce8'
                          / Hash of chip model name /,
    / hwversion /  260: ["1.3.4", 1], / Multipartnumeric  /
    / manifests /  273: [
                          [ 60, / application/cbor, TO BE REPLACED /
                                / with the format value for a /
                                / SUIT_Reference once one is allocated /
                            {   / SUIT_Reference /
                              / suit-report-manifest-uri / 1: "https://example.com/manifest.cbor",
                              / suit-report-manifest-digest / 0:[
                                / algorithm-id / -16 / "sha256" /,
                                / digest-bytes / h'a7fd6593eac32eb4be578278e6540c5c'
                                                 h'09cfd7d4d234973054833b2b93030609'
                                ]
                            }
                          ]
                        ]
}
]]></artwork></figure>

</section>
</section>
<section numbered="no" anchor="d3-queryresponse-message"><name>D.3. QueryResponse Message</name>

<section numbered="no" anchor="d31-cbor-diagnostic-notation"><name>D.3.1. CBOR Diagnostic Notation</name>

<figure><artwork><![CDATA[
/ query-response = /
[
  / type: / 2 / TEEP-TYPE-query-response /,
  / options: /
  {
    / token / 20 : h'A0A1A2A3A4A5A6A7A8A9AAABACADAEAF',
    / selected-version / 6 : 0,
    / attestation-payload / 7 : h'' / empty only for example purpose /,
    / tc-list / 8 : [
      {
        / system-component-id / 0 : [ h'0102030405060708090A0B0C0D0E0F' ],
        / suit-parameter-image-digest / 3: << [
          / suit-digest-algorithm-id / -16 / SHA256 /,
          / suit-digest-bytes / h'A7FD6593EAC32EB4BE578278E6540C5C09CFD7D4D234973054833B2B93030609'
            / SHA256 digest of tc binary /
        ] >>
      }
    ]
  }
]
]]></artwork></figure>

</section>
<section numbered="no" anchor="d32-cbor-binary-representation"><name>D.3.2. CBOR Binary Representation</name>

<figure><artwork><![CDATA[
82                  # array(2)
   02               # unsigned(2) / TEEP-TYPE-query-response /
   A4               # map(4)
      14            # unsigned(20) / token: /
      50            # bytes(16)
         A0A1A2A3A4A5A6A7A8A9AAABACADAEAF
      06            # unsigned(6) / selected-version: /
      00            # unsigned(0)
      07            # unsigned(7) / attestation-payload: /
      40            # bytes(0)
                    # ""
      08            # unsigned(8) / tc-list: /
      81            # array(1)
         A2         # map(2)
            00      # unsigned(0) / system-component-id: /
            81      # array(1)
               4F   # bytes(15)
                  0102030405060708090A0B0C0D0E0F
            03      # unsigned(3) / suit-parameter-image-digest: /
            58 24   # bytes(36)
               822F5820A7FD6593EAC32EB4BE578278E6540C5C09CFD7D4D234973054833B2B93030609
]]></artwork></figure>

</section>
</section>
<section numbered="no" anchor="d4-update-message"><name>D.4. Update Message</name>

<section numbered="no" anchor="d41-cbor-diagnostic-notation"><name>D.4.1. CBOR Diagnostic Notation</name>

<figure><artwork><![CDATA[
/ update = /
[
  / type: / 3 / TEEP-TYPE-update /,
  / options: /
  {
    / token / 20 : h'A0A1A2A3A4A5A6A7A8A9AAABACADAEAF',
    / manifest-list / 10 : [
      <<
        / SUIT_Envelope / {
          / suit-authentication-wrapper / 2: << [
            << [
              / suit-digest-algorithm-id: / -16 / suit-cose-alg-sha256 /,
              / suit-digest-bytes: / h'DB601ADE73092B58532CA03FBB663DE49532435336F1558B49BB622726A2FEDD'
            ] >>,
            << / COSE_Sign1_Tagged / 18( [
              / protected: / << {
                / algorithm-id / 1: -7 / ES256 /
              } >>,
              / unprotected: / {},
              / payload: / null,
              / signature: / h'5B2D535A2B6D5E3C585C1074F414DA9E10BD285C99A33916DADE3ED38812504817AC48B62B8E984EC622785BD1C411888BE531B1B594507816B201F6F28579A4'
            ] ) >>
          ] >>,
          / suit-manifest / 3: << {
            / suit-manifest-version / 1: 1,
            / suit-manifest-sequence-number / 2: 3,
            / suit-common / 3: << {
              / suit-components / 2: [
                [
                  h'544545502D446576696365',           / "TEEP-Device" /
                  h'5365637572654653',                 / "SecureFS" /
                  h'8D82573A926D4754935332DC29997F74', / tc-uuid /
                  h'7461'                              / "ta" /
                ]
              ],
              / suit-common-sequence / 4: << [
                / suit-directive-override-parameters / 20, {
                  / suit-parameter-vendor-identifier / 1: h'C0DDD5F15243566087DB4F5B0AA26C2F',
                  / suit-parameter-class-identifier / 2: h'DB42F7093D8C55BAA8C5265FC5820F4E',
                  / suit-parameter-image-digest / 3: << [
                    / suit-digest-algorithm-id: / -16 / suit-cose-alg-sha256 /,
                    / suit-digest-bytes: / h'8CF71AC86AF31BE184EC7A05A411A8C3A14FD9B77A30D046397481469468ECE8'
                  ] >>,
                  / suit-parameter-image-size / 14: 20
                },
                / suit-condition-vendor-identifier / 1, 15,
                / suit-condition-class-identifier / 2, 15
              ] >>
            } >>,
            / suit-install / 9: << [
              / suit-directive-override-parameters / 20, {
                / suit-parameter-uri / 21: "https://example.org/8d82573a-926d-4754-9353-32dc29997f74.ta"
              },
              / suit-directive-fetch / 21, 15,
              / suit-condition-image-match / 3, 15
            ] >>
          } >>
        }
      >>
    ] / array of bstr wrapped SUIT_Envelope /
  }
]
]]></artwork></figure>

</section>
<section numbered="no" anchor="d42-cbor-binary-representation"><name>D.4.2. CBOR Binary Representation</name>

<figure><artwork><![CDATA[
82                  # array(2)
   03               # unsigned(3) / TEEP-TYPE-update /
   A2               # map(2)
      14            # unsigned(20) / token: /
      50            # bytes(16)
         A0A1A2A3A4A5A6A7A8A9AAABACADAEAF
      0A            # unsigned(10) / manifest-list: /
      81            # array(1)
         59 014E    # bytes(336)
            A2025873825824822F5820DB601ADE73092B58532CA03FBB663DE495
            32435336F1558B49BB622726A2FEDD584AD28443A10126A0F658405B2D53
            5A2B6D5E3C585C1074F414DA9E10BD285C99A33916DADE3ED38812504817
            AC48B62B8E984EC622785BD1C411888BE531B1B594507816B201F6F28579
            A40358D4A401010203035884A20281844B544545502D4465766963654853
            65637572654653508D82573A926D4754935332DC29997F74427461045854
            8614A40150C0DDD5F15243566087DB4F5B0AA26C2F0250DB42F7093D8C55
            BAA8C5265FC5820F4E035824822F58208CF71AC86AF31BE184EC7A05A411
            A8C3A14FD9B77A30D046397481469468ECE80E14010F020F0958458614A1
            15783B68747470733A2F2F6578616D706C652E6F72672F38643832353733
            612D393236642D343735342D393335332D3332646332393939376637342E
            7461150F030F
]]></artwork></figure>

</section>
</section>
<section numbered="no" anchor="d5-success-message"><name>D.5. Success Message</name>

<section numbered="no" anchor="d51-cbor-diagnostic-notation"><name>D.5.1. CBOR Diagnostic Notation</name>

<figure><artwork><![CDATA[
/ teep-success = /
[
  / type: / 5 / TEEP-TYPE-teep-success /,
  / options: /
  {
    / token / 20 : h'A0A1A2A3A4A5A6A7A8A9AAABACADAEAF'
  }
]
]]></artwork></figure>

</section>
<section numbered="no" anchor="d52-cbor-binary-representation"><name>D.5.2. CBOR Binary Representation</name>

<figure><artwork><![CDATA[
82                  # array(2)
   05               # unsigned(5) / TEEP-TYPE-teep-success /
   A1               # map(1)
      14            # unsigned(20) / token: /
      50            # bytes(16)
         A0A1A2A3A4A5A6A7A8A9AAABACADAEAF
]]></artwork></figure>

</section>
</section>
<section numbered="no" anchor="d6-error-message"><name>D.6. Error Message</name>

<section numbered="no" anchor="d61-cbor-diagnostic-notation"><name>D.6.1. CBOR Diagnostic Notation</name>

<figure><artwork><![CDATA[
/ teep-error = /
[
  / type: / 6 / TEEP-TYPE-teep-error /,
  / options: /
  {
    / token / 20 : h'A0A1A2A3A4A5A6A7A8A9AAABACADAEAF',
    / err-msg / 12 : "disk-full"
  },
  / err-code: / 17 / ERR_MANIFEST_PROCESSING_FAILED /
]
]]></artwork></figure>

</section>
<section numbered="no" anchor="d62-cbor-binary-representation"><name>D.6.2. CBOR binary Representation</name>

<figure><artwork><![CDATA[
83                  # array(3)
   06               # unsigned(6) / TEEP-TYPE-teep-error /
   A2               # map(2)
      14            # unsigned(20) / token: /
      50            # bytes(16)
         A0A1A2A3A4A5A6A7A8A9AAABACADAEAF
      0C            # unsigned(12) / err-msg: /
      69            # text(9)
         6469736B2D66756C6C # "disk-full"
   11               # unsigned(17) / ERR_MANIFEST_PROCESSING_FAILED /
]]></artwork></figure>

</section>
</section>
</section>
<section numbered="no" anchor="suit-examples"><name>E. Examples of SUIT Manifests</name>

<t>This section shows some examples of SUIT manifests described in <xref target="update-msg-def"/>.</t>

<t>The examples are signed using the following ECDSA secp256r1 key with SHA256 as the digest function.</t>

<t>COSE_Sign1 Cryptographic Key:</t>

<figure><artwork><![CDATA[
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgApZYjZCUGLM50VBC
CjYStX+09jGmnyJPrpDLTz/hiXOhRANCAASEloEarguqq9JhVxie7NomvqqL8Rtv
P+bitWWchdvArTsfKktsCYExwKNtrNHXi9OB3N+wnAUtszmR23M4tKiW
-----END PRIVATE KEY-----
]]></artwork></figure>

<t>The corresponding public key can be used to verify these examples:</t>

<figure><artwork><![CDATA[
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhJaBGq4LqqvSYVcYnuzaJr6qi/Eb
bz/m4rVlnIXbwK07HypLbAmBMcCjbazR14vTgdzfsJwFLbM5kdtzOLSolg==
-----END PUBLIC KEY-----
]]></artwork></figure>

<section numbered="no" anchor="suit-uri"><name>Example 1: SUIT Manifest pointing to URI of the Trusted Component Binary</name>

<section numbered="no" anchor="cbor-diagnostic-notation-of-suit-manifest"><name>CBOR Diagnostic Notation of SUIT Manifest</name>

<figure><artwork><![CDATA[
/ SUIT_Envelope / {
  / authentication-wrapper / 2: << [
    << [
      / digest-algorithm-id: / -16 / SHA256 /,
      / digest-bytes: / h'EF53C7F719CB10041233850AE3211D62CEC9528924E656607688E77BC14886A0'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: / h'7E367F9E124859473FBDF3D6312AA8943617B41AE4782FCA0E77A492C51F8A7252EA42C23D722E787AA235B5175DBE61DDF8F16F956E0317B9550A04BF9165DD'
    ]) >>
  ] >>,
  / manifest / 3: << {
    / manifest-version / 1: 1,
    / manifest-sequence-number / 2: 3,
    / common / 3: << {
      / components / 2: [
        [
           'TEEP-Device',
           'SecureFS',
          h'8D82573A926D4754935332DC29997F74', / tc-uuid /
           'ta'
        ]
      ],
      / shared-sequence / 4: << [
        / directive-override-parameters / 20, {
          / parameter-vendor-identifier / 1: h'C0DDD5F15243566087DB4F5B0AA26C2F',
          / parameter-class-identifier / 2: h'DB42F7093D8C55BAA8C5265FC5820F4E',
          / parameter-image-digest / 3: << [
            / digest-algorithm-id: / -16 / SHA256 /,
            / digest-bytes: / h'8CF71AC86AF31BE184EC7A05A411A8C3A14FD9B77A30D046397481469468ECE8'
          ] >>,
          / parameter-image-size / 14: 20
        },
        / condition-vendor-identifier / 1, 15,
        / condition-class-identifier / 2, 15
      ] >>
    } >>,
    / manifest-component-id / 5: [
       'TEEP-Device',
       'SecureFS',
      h'8D82573A926D4754935332DC29997F74',  / tc-uuid /
       'suit'
    ],
    / install / 17: << [
      / directive-override-parameters / 20, {
        / parameter-uri / 21: "https://example.org/8d82573a-926d-4754-9353-32dc29997f74.ta"
      },
      / directive-fetch / 21, 15,
      / condition-image-match / 3, 15
    ] >>,
    / uninstall / 24: << [
      / directive-unlink / 33, 15
    ] >>
  } >>
}
]]></artwork></figure>

</section>
<section numbered="no" anchor="cbor-binary-in-hex"><name>CBOR Binary in Hex</name>

<figure><artwork><![CDATA[
A2025873825824822F5820EF53C7F719CB10041233850AE3211D62CEC952
8924E656607688E77BC14886A0584AD28443A10126A0F658407E367F9E12
4859473FBDF3D6312AA8943617B41AE4782FCA0E77A492C51F8A7252EA42
C23D722E787AA235B5175DBE61DDF8F16F956E0317B9550A04BF9165DD03
590108A601010203035884A20281844B544545502D446576696365485365
637572654653508D82573A926D4754935332DC29997F7442746104585486
14A40150C0DDD5F15243566087DB4F5B0AA26C2F0250DB42F7093D8C55BA
A8C5265FC5820F4E035824822F58208CF71AC86AF31BE184EC7A05A411A8
C3A14FD9B77A30D046397481469468ECE80E14010F020F05844B54454550
2D446576696365485365637572654653508D82573A926D4754935332DC29
997F7444737569741158458614A115783B68747470733A2F2F6578616D70
6C652E6F72672F38643832353733612D393236642D343735342D39333533
2D3332646332393939376637342E7461150F030F1818448218210F
]]></artwork></figure>

</section>
</section>
<section numbered="no" anchor="suit-integrated"><name>Example 2: SUIT Manifest including the Trusted Component Binary</name>

<section numbered="no" anchor="cbor-diagnostic-notation-of-suit-manifest-1"><name>CBOR Diagnostic Notation of SUIT Manifest</name>

<figure><artwork><![CDATA[
/ SUIT_Envelope / {
  / authentication-wrapper / 2: << [
    << [
      / digest-algorithm-id: / -16 / SHA256 /,
      / digest-bytes: / h'526A85341DE35AFA4FAF9EDDDA40164525077DC45DFBE25785B9FF40683EE881'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: / h'4B57A8102D0D86B83BA0368E118917D87DBF7815DC31B19DEB7E154F3D191A1434ADFAE27D5AED39C07A2A4B2A0D78031E73B23D679507C4953DD9E00CA7E541'
    ]) >>
  ] >>,
  / manifest / 3: << {
    / manifest-version / 1: 1,
    / manifest-sequence-number / 2: 3,
    / common / 3: << {
      / components / 2: [
        [
           'TEEP-Device',
           'SecureFS',
          h'8D82573A926D4754935332DC29997F74', / tc-uuid /
           'ta'
        ]
      ],
      / shared-sequence / 4: << [
        / directive-override-parameters / 20, {
          / parameter-vendor-identifier / 1: h'C0DDD5F15243566087DB4F5B0AA26C2F',
          / parameter-class-identifier / 2: h'DB42F7093D8C55BAA8C5265FC5820F4E',
          / parameter-image-digest / 3: << [
            / digest-algorithm-id: / -16 / SHA256 /,
            / digest-bytes: / h'8CF71AC86AF31BE184EC7A05A411A8C3A14FD9B77A30D046397481469468ECE8'
          ] >>,
          / parameter-image-size / 14: 20
        },
        / condition-vendor-identifier / 1, 15,
        / condition-class-identifier / 2, 15
      ] >>
    } >>,
    / manifest-component-id / 5: [
       'TEEP-Device',
       'SecureFS',
      h'8D82573A926D4754935332DC29997F74',  / tc-uuid /
       'suit'
    ],
    / install / 17: << [
      / directive-override-parameters / 20, {
        / uri / 21: "#tc"
      },
      / directive-fetch / 21, 15,
      / condition-image-match / 3, 15
    ] >>,
    / uninstall / 24: << [
      / directive-unlink / 33, 15
    ] >>
  } >>,
  "#tc" : 'Hello, Secure World!'
}
]]></artwork></figure>

</section>
<section numbered="no" anchor="cbor-binary-in-hex-1"><name>CBOR Binary in Hex</name>

<figure><artwork><![CDATA[
A3025873825824822F5820526A85341DE35AFA4FAF9EDDDA40164525077D
C45DFBE25785B9FF40683EE881584AD28443A10126A0F658404B57A8102D
0D86B83BA0368E118917D87DBF7815DC31B19DEB7E154F3D191A1434ADFA
E27D5AED39C07A2A4B2A0D78031E73B23D679507C4953DD9E00CA7E54103
58CEA601010203035884A20281844B544545502D44657669636548536563
7572654653508D82573A926D4754935332DC29997F744274610458548614
A40150C0DDD5F15243566087DB4F5B0AA26C2F0250DB42F7093D8C55BAA8
C5265FC5820F4E035824822F58208CF71AC86AF31BE184EC7A05A411A8C3
A14FD9B77A30D046397481469468ECE80E14010F020F05844B544545502D
446576696365485365637572654653508D82573A926D4754935332DC2999
7F744473756974114C8614A11563237463150F030F1818448218210F6323
74635448656C6C6F2C2053656375726520576F726C6421
]]></artwork></figure>

</section>
</section>
<section numbered="no" anchor="suit-personalization"><name>Example 3: Supplying Personalization Data for Trusted Component Binary</name>

<t>This example uses the following parameters:</t>

<t><list style="symbols">
  <t>Algorithm for payload encryption: AES-CTR-128</t>
  <t>Algorithm id for key wrap: ECDH-ES + HKDF-256</t>
  <t>KEK (Receiver's Private Key):
  <list style="symbols">
      <t>kty: EC2</t>
      <t>crv: P-256</t>
      <t>x: h'5886CD61DD875862E5AAA820E7A15274C968A9BC96048DDCACE32F50C3651BA3'</t>
      <t>y: h'9EED8125E932CD60C0EAD3650D0A485CF726D378D1B016ED4298B2961E258F1B'</t>
      <t>d: h'60FE6DD6D85D5740A5349B6F91267EEAC5BA81B8CB53EE249E4B4EB102C476B3'</t>
    </list></t>
  <t>COSE_KDF_Context
  <list style="symbols">
      <t>AlgorithmID: -65534 (A128CTR)</t>
      <t>SuppPubInfo
      <list style="symbols">
          <t>keyDataLength: 128</t>
          <t>protected: &lt;&lt; {/ alg / 1: -25 / ECDH-ES+HKDF-256 / } &gt;&gt;</t>
          <t>other: 'SUIT Payload Encryption'</t>
        </list></t>
    </list></t>
</list></t>

<section numbered="no" anchor="cbor-diagnostic-notation-of-suit-manifest-2"><name>CBOR Diagnostic Notation of SUIT Manifest</name>

<figure><artwork><![CDATA[
/ SUIT_Envelope / {
  / authentication-wrapper / 2: << [
    << [
      / digest-algorithm-id: / -16 / SHA256 /,
      / digest-bytes: / h'0936A4CF3A75D96B43BF88FA6AFA4220800EDC20C32B489BAAAF02EF72438A26'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: / h'104D09EE04B4B10D67A6CA9D9C638044FE4F09B870CADFBA191997749D43C30BD15E01240FA6B681280769BAA090C0234B7BECD4008C2AD9D35E4349C56C07DC'
    ]) >>
  ] >>,
  / manifest / 3: << {
    / manifest-version / 1: 1,
    / manifest-sequence-number / 2: 3,
    / common / 3: << {
      / dependencies / 1: {
        / component-index / 1: {
          / dependency-prefix / 1: [
             'TEEP-Device',
             'SecureFS',
            h'8D82573A926D4754935332DC29997F74', / tc-uuid /
             'suit'
          ]
        }
      },
      / components / 2: [
        [
          'TEEP-Device',
          'SecureFS',
          'config.json'
        ]
      ],
      / shared-sequence / 4: << [
        / directive-set-component-index / 12, 0,
        / directive-override-parameters / 20, {
          / parameter-vendor-identifier / 1: h'C0DDD5F15243566087DB4F5B0AA26C2F',
          / parameter-class-identifier / 2: h'DB42F7093D8C55BAA8C5265FC5820F4E'
        },
        / condition-vendor-identifier / 1, 15,
        / condition-class-identifier / 2, 15
      ] >>
    } >>,
    / manifest-component-id / 5: [
      'TEEP-Device',
      'SecureFS',
      'config.suit'
    ],
    / validate / 7: << [
      / directive-set-component-index / 12, 0,
      / directive-override-parameters / 20, {
        / NOTE: image-digest and image-size of plaintext config.json /
        / parameter-image-digest / 3: << [
          / digest-algorithm-id: / -16 / SHA256 /,
          / digest-bytes: / h'8273468FB64BD84BB04825F8371744D952B751C73A60F455AF681E167726F116'
        ] >>,
        / image-size / 14: 61
      },
      / condition-image-match / 3, 15
    ] >>,
    / dependency-resolution / 15: << [
      / directive-set-component-index / 12, 1,
      / directive-override-parameters / 20, {
        / parameter-image-digest / 3: << [
          / algorithm-id / -16 / SHA256 /,
          / digest-bytes / h'EF53C7F719CB10041233850AE3211D62CEC9528924E656607688E77BC14886A0'
        ] >>,
        / parameter-image-size / 14: 389,
        / uri / 21: "https://example.org/8d82573a-926d-4754-9353-32dc29997f74.suit"
      },
      / directive-fetch / 21, 2,
      / directive-process-dependency / 11, 15
    ] >>,
    / install / 17: << [
      / directive-set-component-index / 12, 1,
      / directive-process-dependency / 11, 0,

      / NOTE: fetch encrypted firmware /
      / directive-set-component-index / 12, 0,
      / directive-override-parameters / 20, {
        / NOTE: encrypted payload and encryption-info /
        / parameter-content / 18: h'8E8E6E4C63DEC2B1EC68720EBDF9636B9409485C296EF68EB79F93CCB1A1B136DD227BAC33CFD93F7A98F1CD020E559B8EBC33CE7C5009A47EB3D11574',
        / parameter-encryption-info / 19: << 96([
          / protected: / << {
            / alg / 1: -65534 / A128CTR /
          } >>,
          / unprotected: / {
            / IV / 5: h'6CE59E41746D36492CAFCB9E3C2E85A2'
          },
          / payload: / null / detached ciphertext /,
          / recipients: / [
            [
              / protected: / << {
                / alg / 1: -25 / ECDH-ES + HKDF-256 /
              } >>,
              / unprotected: / {
                / ephemeral key / -1: {
                  / kty / 1: 2 / EC2 /,
                  / crv / -1: 1 / P-256 /,
                  / x / -2: h'C32A41E1853B16DA0319654C438EA6882BB119670C8F1C84980CDFD1BBDB60E3',
                  / y / -3: h'764A34B5D63F800A46384BA6474BA8C7FEEE7CCF9C74B84C9E2E4CF62C00A235'
                }
              },
              / payload: / h''
            ]
          ]
        ]) >>
      },

      / decrypt encrypted firmware /
      / directive-write / 18, 15 / consumes the SUIT_Encryption_Info above /
      / NOTE: decrypted payload would be ``{"name":"FOO Bar","secret":"0123456789abfcdef0123456789abcd"}'' /
    ] >>,
    / uninstall / 24: << [
      / directive-set-component-index / 12, 1,
      / directive-process-dependency / 11, 0,
      / directive-set-component-index / 12, 0,
      / directive-unlink / 33, 15
    ] >>
  } >>
}
]]></artwork></figure>

</section>
<section numbered="no" anchor="cbor-binary-in-hex-2"><name>CBOR Binary in Hex</name>

<figure><artwork><![CDATA[
A2025873825824822F58200936A4CF3A75D96B43BF88FA6AFA4220800EDC
20C32B489BAAAF02EF72438A26584AD28443A10126A0F65840104D09EE04
B4B10D67A6CA9D9C638044FE4F09B870CADFBA191997749D43C30BD15E01
240FA6B681280769BAA090C0234B7BECD4008C2AD9D35E4349C56C07DC03
59022CA801010203035886A301A101A101844B544545502D446576696365
485365637572654653508D82573A926D4754935332DC29997F7444737569
740281834B544545502D4465766963654853656375726546534B636F6E66
69672E6A736F6E04582D880C0014A20150C0DDD5F15243566087DB4F5B0A
A26C2F0250DB42F7093D8C55BAA8C5265FC5820F4E010F020F05834B5445
45502D4465766963654853656375726546534B636F6E6669672E73756974
075831860C0014A2035824822F58208273468FB64BD84BB04825F8371744
D952B751C73A60F455AF681E167726F1160E183D030F0F5874880C0114A3
035824822F5820EF53C7F719CB10041233850AE3211D62CEC9528924E656
607688E77BC14886A00E19018515783D68747470733A2F2F6578616D706C
652E6F72672F38643832353733612D393236642D343735342D393335332D
3332646332393939376637342E7375697415020B0F1158C08A0C010B000C
0014A212583D8E8E6E4C63DEC2B1EC68720EBDF9636B9409485C296EF68E
B79F93CCB1A1B136DD227BAC33CFD93F7A98F1CD020E559B8EBC33CE7C50
09A47EB3D11574135872D8608445A10139FFFDA105506CE59E41746D3649
2CAFCB9E3C2E85A2F6818344A1013818A120A401022001215820C32A41E1
853B16DA0319654C438EA6882BB119670C8F1C84980CDFD1BBDB60E32258
20764A34B5D63F800A46384BA6474BA8C7FEEE7CCF9C74B84C9E2E4CF62C
00A23540120F18184A880C010B000C0018210F
]]></artwork></figure>

</section>
</section>
</section>
<section numbered="no" anchor="suit-reports"><name>F. Examples of SUIT Reports</name>

<t>This section shows some examples of SUIT reports.</t>

<section numbered="no" anchor="f1-example-1-success"><name>F.1. Example 1: Success</name>

<t>SUIT Reports have no records if no conditions have failed.
The URI in this example is the reference URI provided in the SUIT manifest.</t>

<figure><artwork><![CDATA[
{
  / suit-report-manifest-digest / 1:<<[
    / algorithm-id / -16 / "sha256" /,
    / digest-bytes / h'a7fd6593eac32eb4be578278e6540c5c'
                     h'09cfd7d4d234973054833b2b93030609'
  ]>>,
  / suit-report-manifest-uri / 2: "tam.teep.example/personalisation",
  / suit-report-records / 4: []
}
]]></artwork></figure>

</section>
<section numbered="no" anchor="f2-example-2-faiure"><name>F.2. Example 2: Faiure</name>

<figure><artwork><![CDATA[
{
  / suit-report-manifest-digest / 1:<<[
    / algorithm-id / -16 / "sha256" /,
    / digest-bytes / h'a7fd6593eac32eb4be578278e6540c5c09cfd7d4d234973054833b2b93030609'
  ]>>,
  / suit-report-manifest-uri / 2: "tam.teep.example/personalisation",
  / suit-report-records / 4: [
    {
      / suit-record-manifest-id / 1:[],
      / suit-record-manifest-section / 2: 7 / dependency-resolution /,
      / suit-record-section-offset / 3: 66,
      / suit-record-dependency-index / 5: 0,
      / suit-record-failure-reason / 6: 404
    }
  ]
}
]]></artwork></figure>

<t>where the dependency-resolution refers to:</t>

<figure><artwork><![CDATA[
{
  authentication-wrapper,
  / manifest / 3:<<{
    / manifest-version / 1:1,
    / manifest-sequence-number / 2:3,
    common,
    dependency-resolution,
    install,
    validate,
    run,
    text
  }>>,
}
]]></artwork></figure>

<t>and the suit-record-section-offset refers to:</t>

<figure><artwork><![CDATA[
<<[
  / directive-set-dependency-index / 13,0,
  / directive-set-parameters / 19,{
    / uri / 21:'tam.teep.example/'
               'edd94cd8-9d9c-4cc8-9216-b3ad5a2d5b8a',
    } ,
  / directive-fetch / 21,2,
  / condition-image-match / 3,15
]>>,
]]></artwork></figure>

</section>
</section>


  </back>

<!-- ##markdown-source:
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
AQA=

-->

</rfc>

