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

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc strict="yes"?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>

<rfc ipr="trust200902" docName="draft-ietf-teep-protocol-10" category="std" submissionType="IETF">

  <front>
    <title abbrev="TEEP Protocol">Trusted Execution Environment Provisioning (TEEP) Protocol</title>

    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization>Arm Ltd.</organization>
      <address>
        <postal>
          <street></street>
          <city>Absam</city>
          <region>Tirol</region>
          <code>6067</code>
          <country>Austria</country>
        </postal>
        <email>hannes.tschofenig@arm.com</email>
      </address>
    </author>
    <author initials="M." surname="Pei" fullname="Mingliang Pei">
      <organization>Broadcom</organization>
      <address>
        <postal>
          <street>350 Ellis St</street>
          <city>Mountain View</city>
          <region>CA</region>
          <code>94043</code>
          <country>USA</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>dthaler@microsoft.com</email>
      </address>
    </author>
    <author initials="A." surname="Tsukamoto" fullname="Akira Tsukamoto">
      <organization>AIST</organization>
      <address>
        <postal>
          <street></street>
          <city></city>
          <region></region>
          <code></code>
          <country>JP</country>
        </postal>
        <email>akira.tsukamoto@aist.go.jp</email>
      </address>
    </author>

    <date year="2022"/>

    <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" title="Introduction">

<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="I-D.ietf-teep-architecture"/> provides design
guidance and introduces the
necessary terminology.</t>

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

<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="I-D.ietf-teep-architecture"/>.</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="I-D.ietf-rats-architecture"/>.</t>

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

<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="RFC8152"/>. 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" title="Detailed Messages Specification">

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

<figure><artwork><![CDATA[
{
    teep-message                => (query-request /
                                    query-response /
                                    update /
                                    teep-success /
                                    teep-error ),
}
]]></artwork></figure>

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

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

<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="RFC8152"/> specification.</t>
  <t>Create a COSE_Sign1 object
  using the TEEP message as the COSE_Sign1 Payload; all
  steps specified in <xref target="RFC8152"/> for creating a
  COSE_Sign1 object MUST be followed.</t>
</list></t>

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

<t>When TEEP message is received (see the ProcessTeepMessage conceptual API
defined in <xref target="I-D.ietf-teep-architecture"/> section 6.2.1),
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 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="RFC8152"/> (“Signing Objects”) for
  validating a COSE_Sign1 object. The COSE_Sign1 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" title="QueryRequest Message">

<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 via the request parameter. Currently, 
the following features are supported:</t>

<t><list style="symbols">
  <t>Request for attestation information,</t>
  <t>Listing supported extensions,</t>
  <t>Querying installed Trusted Components, and</t>
  <t>Listing supported SUIT commands.</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><artwork><![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 ],
    * $$query-request-extensions
    * $$teep-option-extensions
  },
  supported-cipher-suites: [ + $cipher-suite ],
  data-item-requested: data-item-requested  
]
]]></artwork></figure>

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

<t><list style="hanging">
  <t hangText="type"><vspace blankLines='0'/>
  The value of (1) corresponds to a QueryRequest message sent from the TAM to 
the TEEP Agent.</t>
  <t hangText="token"><vspace blankLines='0'/>
  The value in the token parameter is used to match responses to requests.
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. The size of the token is at least 8 bytes
(64 bits) and maximum of 64 bytes, which is the same as in an EAT Nonce
Claim (see <xref target="I-D.ietf-rats-eat"/> Section 3.3). 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>
  <t hangText="supported-cipher-suites"><vspace blankLines='0'/>
  The supported-cipher-suites parameter lists the cipher suites supported by the TAM. Details
about the cipher suite encoding can be found in <xref target="ciphersuite"/>.</t>
  <t hangText="data-item-requested"><vspace blankLines='0'/>
  The data-item-requested parameter indicates what information the TAM requests from the TEEP
Agent in the form of a bitmap.

      <list style="hanging">
        <t hangText="attestation (1)">
        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>
        <t hangText="trusted-components (2)">
        With this value the TAM queries the TEEP Agent for all installed Trusted Components.</t>
        <t hangText="extensions (4)">
        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>
        <t hangText="suit-reports (8)">
        With this value the TAM requests the TEEP Agent to return SUIT Reports
in the response.</t>
      </list>

Further values may be added in the future.</t>
  <t hangText="supported-freshness-mechanisms"><vspace blankLines='0'/>
  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.</t>
  <t hangText="challenge"><vspace blankLines='0'/>
  The challenge field is an optional parameter used for ensuring the freshness of the
attestation payload returned with a QueryResponse message. It MUST be absent if
the attestation bit is clear (since the token is used instead in that case).
When a challenge is 
provided in the QueryRequest and an EAT is returned with a QueryResponse message
then the challenge contained in this request MUST be used to generate the EAT,
such as by copying the challenge into the nonce claim found in the EAT if
using the Nonce freshness mechanism.  For more details see <xref target="freshness-mechanisms"/>.

If any format other than EAT is used, it is up to that
format to define the use of the challenge field.</t>
  <t hangText="versions"><vspace blankLines='0'/>
  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>
</list></t>

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

<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><artwork><![CDATA[
query-response = [
  type: TEEP-TYPE-query-response,
  options: {
    ? token => bstr .size (8..64),
    ? selected-cipher-suite => $cipher-suite,
    ? selected-version => version,
    ? attestation-payload-format => text,
    ? attestation-payload => bstr,
    ? suit-reports => [ + SUIT_Report ],
    ? tc-list => [ + system-property-claims ],
    ? requested-tc-list => [ + requested-tc-info ],
    ? unneeded-tc-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 => .within uint .size 8
  ? have-binary => bool
}
]]></artwork></figure>

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

<t><list style="hanging">
  <t hangText="type"><vspace blankLines='0'/>
  The value of (2) corresponds to a QueryResponse message sent from the TEEP Agent
to the TAM.</t>
  <t hangText="token"><vspace blankLines='0'/>
  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>
  <t hangText="selected-cipher-suite"><vspace blankLines='0'/>
  The selected-cipher-suite parameter indicates the selected cipher suite. If this
parameter is not present, it is to be treated as if the TEEP Agent accepts
any cipher suites listed in the QueryRequest, so the TAM can select one.
Details about the cipher suite encoding can be found in <xref target="ciphersuite"/>.</t>
  <t hangText="selected-version"><vspace blankLines='0'/>
  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>
  <t hangText="attestation-payload-format"><vspace blankLines='0'/>
  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; profile=https://datatracker.ietf.org/doc/html/draft-ietf-teep-protocol-10” (see <xref target="I-D.lundblade-rats-eat-media-type"/>
for further discussion).
(RFC-editor: upon RFC publication, replace URI above with
“https://www.rfc-editor.org/info/rfcXXXX” where XXXX is 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>
  <t hangText="attestation-payload"><vspace blankLines='0'/>
  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>
  <t hangText="suit-reports"><vspace blankLines='0'/>
  If present, the suit-reports parameter contains a set of “boot” (including
starting an executable in an OS context) time SUIT Reports
as defined in Section 4 of <xref target="I-D.ietf-suit-report"/>.
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>
  <t hangText="tc-list"><vspace blankLines='0'/>
  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>
  <t hangText="requested-tc-list"><vspace blankLines='0'/>
  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="I-D.ietf-teep-architecture"/> section 6.2.1.</t>
  <t hangText="unneeded-tc-list"><vspace blankLines='0'/>
  The unneeded-tc-list parameter enumerates the Trusted Components that 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 Trusted Component can be deleted.  Each unneeded Trusted Component is identified
by its SUIT Component Identifier.
A TEEP Agent can get this information from the UnrequestTA conceptual API
defined in <xref target="I-D.ietf-teep-architecture"/> section 6.2.1.</t>
  <t hangText="ext-list"><vspace blankLines='0'/>
  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>
</list></t>

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

<t><list style="hanging">
  <t hangText="component-id"><vspace blankLines='0'/>
  A SUIT Component Identifier.</t>
  <t hangText="tc-manifest-sequence-number"><vspace blankLines='0'/>
  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>
  <t hangText="have-binary"><vspace blankLines='0'/>
  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>
</list></t>

<section anchor="attestation" title="Evidence and Attestation Results">

<t>Section 7 of <xref target="I-D.ietf-teep-architecture"/> 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="I-D.ietf-teep-architecture"/> is often required depending on the policy.
When an Entity
Attestation Token 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><xref target="I-D.ietf-rats-eat"/> section 4.1</c>
      <c>Device unique identifier</c>
      <c>ueid</c>
      <c><xref target="I-D.ietf-rats-eat"/> section 4.2.1</c>
      <c>Vendor of the device</c>
      <c>oemid</c>
      <c><xref target="I-D.ietf-rats-eat"/> section 4.2.3</c>
      <c>Class of the device</c>
      <c>hardware-model</c>
      <c><xref target="I-D.ietf-rats-eat"/> section 4.2.4</c>
      <c>TEE hardware type</c>
      <c>hardware-version</c>
      <c><xref target="I-D.ietf-rats-eat"/> section 4.2.5</c>
      <c>TEE hardware version</c>
      <c>hardware-version</c>
      <c><xref target="I-D.ietf-rats-eat"/> section 4.2.5</c>
      <c>TEE firmware type</c>
      <c>manifests</c>
      <c><xref target="I-D.ietf-rats-eat"/> section 4.2.16</c>
      <c>TEE firmware version</c>
      <c>manifests</c>
      <c><xref target="I-D.ietf-rats-eat"/> section 4.2.16</c>
</texttable>

<t>The “manifests” claim 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" title="Update Message">

<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="I-D.ietf-rats-architecture"/>)
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><artwork><![CDATA[
update = [
  type: TEEP-TYPE-update,
  options: {
    ? token => bstr .size (8..64),
    ? manifest-list => [ + bstr .cbor SUIT_Envelope ],
    ? attestation-payload-format => text,
    ? attestation-payload => bstr,
    * $$update-extensions,
    * $$teep-option-extensions
  }
]
]]></artwork></figure>

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

<t><list style="hanging">
  <t hangText="type"><vspace blankLines='0'/>
  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>
  <t hangText="token"><vspace blankLines='0'/>
  The value in the token field is used to match responses to requests.</t>
  <t hangText="manifest-list"><vspace blankLines='0'/>
  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>
  <t hangText="attestation-payload-format"><vspace blankLines='0'/>
  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; profile=https://datatracker.ietf.org/doc/html/draft-ietf-teep-protocol-10” (see <xref target="I-D.lundblade-rats-eat-media-type"/>
for further discussion).
(RFC-editor: upon RFC publication, replace URI above with
“https://www.rfc-editor.org/info/rfcXXXX” where XXXX is 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>
  <t hangText="attestation-payload"><vspace blankLines='0'/>
  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>
</list></t>

<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="I-D.ietf-teep-architecture"/> for further discussion.</t>

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

<section anchor="example-1-having-one-suit-manifest-pointing-to-a-uri-of-a-trusted-component-binary" title="Example 1: Having one SUIT Manifest pointing to a URI of a Trusted Component Binary">

<t>In this example, 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.suit” that contains the URI. The filename “tc-uuid.suit” is used in Example 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>
</list></t>

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

             Update  ---->

    +=================== teep-protocol(TAM) ==================+
    | TEEP_Message([                                          |
    |   TEEP-TYPE-update,                                     |
    |   options: {                                            |
    |     manifest-list: [                                    |
    |       += suit-manifest "tc-uuid.suit" (TC Developer) =+ |
    |       | SUIT_Envelope({                               | |
    |       |   manifest: {                                 | |
    |       |     install: {                                | |
    |       |       set-parameter: {                        | |
    |       |         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="example-2-having-a-suit-manifest-include-the-trusted-component-binary" title="Example 2: Having a SUIT Manifest include the Trusted Component Binary">

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

<t>A Trusted Component Developer delegates to the TAM the task of delivering the Trusted Component Binary in the SUIT manifest. The Trusted Component Developer creates a SUIT manifest and embeds the Trusted Component Binary, which is referenced in the URI parameter with identifier “#tc”. The Trusted Component Developer provides the SUIT manifest 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 its SUIT manifest together in one Update message</t>
  <t>The Trusted Component Developer does not have to host a server to deliver the Trusted Component Binary directly to devices</t>
</list></t>

<t>Cons:</t>

<t><list style="symbols">
  <t>The TAM must host the Trusted Component Binary itself, rather than delegating such storage to the Trusted Component Developer</t>
  <t>The TAM must deliver Trusted Component Binaries in Update messages, which result in increased Update message size</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({                 | |
      |       |   "#tc": h'48 65 6C 6C ...',    | |
      |       |   manifest: {                   | |
      |       |     install: {                  | |
      |       |       set-parameter: {          | |
      |       |         uri: "#tc"              | |
      |       |       },                        | |
      |       |       fetch                     | |
      |       |     }                           | |
      |       |   }                             | |
      |       | })                              | |
      |       +=================================+ |
      |     ]                                     |
      |   }                                       |
      | ])                                        |
      +===========================================+

    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="example-3-supplying-personalization-data-for-the-trusted-component-binary" title="Example 3: Supplying Personalization Data for the Trusted Component Binary">

<t>In this example, Personalization Data is associated with the Trusted Component Binary “tc-uuid.suit” from Example 1.</t>

<t>The Trusted Component Developer places Personalization Data in a file named “config.json” and hosts it on an HTTPS server.  The Trusted Component Developer then creates a SUIT manifest with the URI, specifying which Trusted Component Binary it correlates to in the parameter ‘dependency-resolution’, and signs the SUIT manifest.</t>

<t>The TAM delivers the SUIT manifest of the Personalization Data which depends on the Trusted Component Binary from Example 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: [                           | |
      |       |         {{digest-of-tc.suit}}                   | |
      |       |       ]                                         | |
      |       |     }                                           | |
      |       |     dependency-resolution: {                    | |
      |       |       set-parameter: {                          | |
      |       |         uri: "https://example.org/tc-uuid.suit" | |
      |       |       }                                         | |
      |       |       fetch                                     | |
      |       |     }                                           | |
      |       |     install: {                                  | |
      |       |       set-parameter: {                          | |
      |       |         uri: "https://example.org/config.json"  | |
      |       |       },                                        | |
      |       |       fetch                                     | |
      |       |       set-dependency-index                      | |
      |       |       process-dependency                        | |
      |       |     }                                           | |
      |       |   }                                             | |
      |       | })                                              | |
      |       +=================================================+ |
      |     ]                                                     |
      |   }                                                       |
      | ])                                                        |
      +===========================================================+

    and then,

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

                     <----
      fetch "https://example.org/config.json"

          +=======config.json========+
          | 7B 22 75 73 65 72 22 ... |
          +==========================+

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

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

</section>
<section anchor="example-4-unlinking-trusted-component" title="Example 4: Unlinking Trusted Component">

<t>This subsection shows an example deleting the Trusted Component Binary in the TEEP Device.</t>

<t>A Trusted Component Developer can also generate SUIT Manifest which unlinks the installed Trusted Component. The TAM deliver it when the TAM want to uninstall the component.</t>

<t>The directive-unlink (see <xref target="I-D.ietf-suit-trust-domains"/> Section-6.5.4) is located in the manifest to delete the Trusted Component. Note that in case other Trusted Components depend on it, i.e. the reference count is not zero, the TEEP Device SHOULD NOT delete it immediately.</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: [                  | |
      |       |       unlink                    | |
      |       |     ]                           | |
      |       |   }                             | |
      |       | })                              | |
      |       +=================================+ |
      |     ]                                     |
      |   }                                       |
      | ])                                        |
      +===========================================+

    Figure 5: Unlink Trusted Component example (summary)
]]></artwork></figure>

<t>For the full SUIT Manifest example binary, see <xref target="suit-unlink">Appendix E. SUIT Example 4</xref></t>

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

<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><artwork><![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
  }
]
]]></artwork></figure>

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

<t><list style="hanging">
  <t hangText="type"><vspace blankLines='0'/>
  The value of (5) corresponds to corresponds to a Success message sent from the TEEP Agent to the
TAM.</t>
  <t hangText="token"><vspace blankLines='0'/>
  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>
  <t hangText="msg"><vspace blankLines='0'/>
  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>
  <t hangText="suit-reports"><vspace blankLines='0'/>
  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>
</list></t>

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

<t>The Error message is used by the TEEP Agent to return an error in
response to an Update message.</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><artwork><![CDATA[
teep-error = [
  type: TEEP-TYPE-teep-error,
  options: {
     ? token => bstr .size (8..64),
     ? err-msg => text .size (1..128),
     ? supported-cipher-suites => [ + $cipher-suite ],
     ? supported-freshness-mechanisms => [ + $freshness-mechanism ],
     ? versions => [ + version ],
     ? suit-reports => [ + SUIT_Report ],
     * $$teep-error-extensions,
     * $$teep-option-extensions
  },
  err-code: uint (0..23)
]
]]></artwork></figure>

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

<t><list style="hanging">
  <t hangText="type"><vspace blankLines='0'/>
  The value of (6) corresponds to an Error message sent from the TEEP Agent to the TAM.</t>
  <t hangText="token"><vspace blankLines='0'/>
  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 Error message.</t>
  <t hangText="err-msg"><vspace blankLines='0'/>
  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>
  <t hangText="supported-cipher-suites"><vspace blankLines='0'/>
  The supported-cipher-suites parameter lists the cipher suite(s) supported by the TEEP Agent.
Details about the cipher suite encoding can be found in <xref target="ciphersuite"/>.
This otherwise optional parameter MUST be returned if err-code is ERR_UNSUPPORTED_CIPHER_SUITES.</t>
  <t hangText="supported-freshness-mechanisms"><vspace blankLines='0'/>
  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>
  <t hangText="versions"><vspace blankLines='0'/>
  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>
  <t hangText="suit-reports"><vspace blankLines='0'/>
  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>
  <t hangText="err-code"><vspace blankLines='0'/>
  The err-code parameter contains one of the 
error codes listed below). Only selected values are applicable
to each message.</t>
</list></t>

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

<t><list style="hanging">
  <t hangText="ERR_PERMANENT_ERROR (1)"><vspace blankLines='0'/>
  The TEEP
request 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.
A TAM receiving this error might refuse to communicate further with
the TEEP Agent 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 agressive retry is warranted.</t>
  <t hangText="ERR_UNSUPPORTED_EXTENSION (2)"><vspace blankLines='0'/>
  The TEEP Agent does not support an extension included in the request
message.
For diagnosis purposes it is RECOMMMENDED to identify the unsupported
extension in the error message.
A TAM receiving this error might retry the request without using extensions.</t>
  <t hangText="ERR_UNSUPPORTED_FRESHNESS_MECHANISMS (3)"><vspace blankLines='0'/>
  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>
  <t hangText="ERR_UNSUPPORTED_MSG_VERSION (4)"><vspace blankLines='0'/>
  The TEEP Agent does not
support the TEEP protocol version indicated in the request message.
A TAM receiving this error might retry the request using a different
TEEP protocol version.</t>
  <t hangText="ERR_UNSUPPORTED_CIPHER_SUITES (5)"><vspace blankLines='0'/>
  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>
  <t hangText="ERR_BAD_CERTIFICATE (6)"><vspace blankLines='0'/>
  Processing of a certificate failed. For diagnosis purposes it is
RECOMMMENDED to include information about the failing certificate
in the error message.  For example, the certificate was of an
unsupported type, or the certificate was revoked by its signer.
A TAM receiving this error might attempt to use an alternate certificate.</t>
  <t hangText="ERR_CERTIFICATE_EXPIRED (9)"><vspace blankLines='0'/>
  A certificate has expired or is not currently
valid.
A TAM receiving this error might attempt to renew its certificate
before using it again.</t>
  <t hangText="ERR_TEMPORARY_ERROR (10)"><vspace blankLines='0'/>
  A miscellaneous
temporary error, such as a memory allocation failure, occurred while processing the request message.
A TAM receiving this error might retry the same request at a later point
in time.</t>
  <t hangText="ERR_MANIFEST_PROCESSING_FAILED (17)"><vspace blankLines='0'/>
  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>
</list></t>

<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" title="EAT Profile">

<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><eref target="https://datatracker.ietf.org/doc/html/draft-ietf-teep-protocol-10">https://datatracker.ietf.org/doc/html/draft-ietf-teep-protocol-10</eref>.
(RFC-editor: upon RFC publication, replace string with
“https://www.rfc-editor.org/info/rfcXXXX” where XXXX is 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>COSE/JOSE Protection: See <xref target="ciphersuite"/>.</t>
  <t>Detached EAT Bundle Support: DEB use is permitted.</t>
  <t>Verification 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).</t>
  <t>Endorsement Identification: Optional, but semantics are the same
as in Verification Key Identification.</t>
  <t>Freshness: See <xref target="freshness-mechanisms"/>.</t>
  <t>Required Claims: None.</t>
  <t>Prohibited Claims: None.</t>
  <t>Additional Claims: Optional claims are those listed in <xref target="attestation"/>.</t>
  <t>Refined Claim Definition: None.</t>
  <t>CBOR Tags: CBOR Tags are not used.</t>
  <t>Manifests and Software Evidence Claims: The sw-name claim for a Trusted
Component holds the URI of the SUIT manifest for that component.</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>
<section anchor="tags" title="Mapping of TEEP Message Parameters to CBOR Labels">

<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-cipher-suites</c>
      <c>1</c>
      <c>challenge</c>
      <c>2</c>
      <c>versions</c>
      <c>3</c>
      <c>selected-cipher-suite</c>
      <c>5</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-tc-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>
</texttable>

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

<t>Behavior is specified in terms of the conceptual APIs defined in
section 6.2.1 of <xref target="I-D.ietf-teep-architecture"/>.</t>

<section anchor="tam" title="TAM Behavior">

<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.
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" title="Handling a QueryResponse Message">

<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 send in the QueryRequest message if a token
was present.  If these requirements are not met, the TAM drops the message.  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 Attesation 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 Attesation Result, processing continues as in
<xref target="attestation-result"/>.</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="I-D.ietf-rats-architecture"/>)
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"/>.</t>

<section anchor="attestation-result" title="Handling an Attestation Result">

<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 can 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.</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.</t>

<t>If no Trusted Components need to be installed, updated, or deleted, but the QueryRequest 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" title="Handling a Success or Error Message">

<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 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" title="TEEP Agent Behavior">

<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 drops the message if it is not valid.
Otherwise, processing continues as follows based on the type of message.</t>

<t>When a QueryRequest message is received, the Agent responds with a
QueryResponse message if all fields were understood, or an Error message
if any error was encountered.</t>

<t>When an Update message is received, 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 anchor="ciphersuite" title="Cipher Suites">

<t>The TEEP protocol uses COSE for protection of TEEP messages.
After a QueryResponse is received, the selected cipher suite is used by both the TAM and the TEEP Agent
in all subsequent TEEP messages.  That is, a cipher suite is used in both directions.</t>

<t>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><artwork><![CDATA[
$cipher-suite /= teep-cipher-suite-sign1-es256
$cipher-suite /= teep-cipher-suite-sign1-eddsa

; The following two cipher suites have only a single operation each.
; Other cipher suites may be defined to have multiple operations.

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

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

cose-sign1 = 18      ; CoAP Content-Format value

cose-alg-es256 = -7  ; ECDSA w/ SHA-256
cose-alg-eddsa = -8  ; EdDSA
]]></artwork></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="RFC8152"/> 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="I-D.ietf-teep-architecture"/> 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="I-D.ietf-teep-architecture"/>.</t>

<t>The cipher suites defined above do not do encryption at the TEEP layer, but
permit encryption of the SUIT payload (e.g., using <xref target="I-D.ietf-suit-firmware-encryption"/>).
See <xref target="security"/> for more discussion of specific payloads.</t>

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

<t>A freshness mechanism determines how a TAM can tell whether an attestation payload provided
in a Query Response is fresh.  There are multiple ways this can be done
as discussed in Section 10 of <xref target="I-D.ietf-rats-architecture"/>.</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:</t>

<figure><artwork><![CDATA[
FRESHNESS_NONCE = 0
FRESHNESS_TIMESTAMP = 1
FRESHNESS_EPOCH_ID = 2

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

<t>In the Nonce mechanism, the attestation payload MUST include a nonce provided
in the QueryRequest challenge.  In other mechanisms, a timestamp
or epoch ID determined via mechanisms outside the TEEP protocol is
used, 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" title="Security Considerations">

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

<t><list style="hanging">
  <t hangText="Cryptographic Algorithms"><vspace blankLines='0'/>
  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>
  <t hangText="Attestation"><vspace blankLines='0'/>
  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.

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
EATS, 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 EATs is used, it is
up to that mechanism to specify how privacy is provided.</t>
  <t hangText="Trusted Component Binaries"><vspace blankLines='0'/>
  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 digitial
signatures and can support symmetric encryption if a SUIT mechanism such as <xref target="I-D.ietf-suit-firmware-encryption"/>
is used.</t>
  <t hangText="Personalization Data"><vspace blankLines='0'/>
  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 signed and encrypted (e.g., via <xref target="I-D.ietf-suit-firmware-encryption"/>)
by a Trusted Component Signer other than
the TAM is opaque to the TAM.</t>
  <t hangText="TEEP Broker"><vspace blankLines='0'/>
  As discussed in section 6 of <xref target="I-D.ietf-teep-architecture"/>,
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>
  <t hangText="Trusted Component Signer Compromise"><vspace blankLines='0'/>
  A TAM is responsible for vetting a Trusted Component and
before distributing them to TEEP Agents.<vspace />
It is RECOMMENDED to provide a way to
update the trust anchor store used by the TEE, for example using
a firmware update mechanism.  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>
  <t hangText="CA Compromise"><vspace blankLines='0'/>
  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 using
a firmware update mechanism. If the CA issuing certificates to
devices gets compromised then these devices might be rejected by a
TAM, if revocation is available to the TAM.</t>
  <t hangText="TAM Certificate Expiry"><vspace blankLines='0'/>
  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>
  <t hangText="Compromised Time Source"><vspace blankLines='0'/>
  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>
</list></t>

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

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

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

<t><list style="hanging">
  <t hangText="Type name:">
  application</t>
  <t hangText="Subtype name:">
  teep+cbor</t>
  <t hangText="Required parameters:">
  none</t>
  <t hangText="Optional parameters:">
  none</t>
  <t hangText="Encoding considerations:">
  Same as encoding considerations of
application/cbor.</t>
  <t hangText="Security considerations:">
  See Security Considerations Section of this document.</t>
  <t hangText="Interoperability considerations:">
  Same as interoperability
considerations of application/cbor as specified in <xref target="RFC7049"/>.</t>
  <t hangText="Published specification:">
  This document.</t>
  <t hangText="Applications that use this media type:">
  TEEP protocol implementations</t>
  <t hangText="Fragment identifier considerations:">
  N/A</t>
  <t hangText="Additional information:">
        <list style="hanging">
        <t hangText="Deprecated alias names for this type:">
        N/A</t>
        <t hangText="Magic number(s):">
        N/A</t>
        <t hangText="File extension(s):">
        N/A</t>
        <t hangText="Macintosh file type code(s):">
        N/A</t>
      </list>
  </t>
  <t hangText="Person to contact for further information:">
  teep@ietf.org</t>
  <t hangText="Intended usage:">
  COMMON</t>
  <t hangText="Restrictions on usage:">
  none</t>
  <t hangText="Author:">
  See the “Authors’ Addresses” section of this document</t>
  <t hangText="Change controller:">
  IETF</t>
</list></t>

</section>
</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference anchor='RFC8152' target='https://www.rfc-editor.org/info/rfc8152'>
<front>
<title>CBOR Object Signing and Encryption (COSE)</title>
<author fullname='J. Schaad' initials='J.' surname='Schaad'><organization/></author>
<date month='July' year='2017'/>
<abstract><t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size.  There is a need for the ability to have basic security services defined 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></abstract>
</front>
<seriesInfo name='RFC' value='8152'/>
<seriesInfo name='DOI' value='10.17487/RFC8152'/>
</reference>



<reference anchor='RFC3629' target='https://www.rfc-editor.org/info/rfc3629'>
<front>
<title>UTF-8, a transformation format of ISO 10646</title>
<author fullname='F. Yergeau' initials='F.' surname='Yergeau'><organization/></author>
<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' target='https://www.rfc-editor.org/info/rfc5198'>
<front>
<title>Unicode Format for Network Interchange</title>
<author fullname='J. Klensin' initials='J.' surname='Klensin'><organization/></author>
<author fullname='M. Padlipsky' initials='M.' surname='Padlipsky'><organization/></author>
<date month='March' year='2008'/>
<abstract><t>The Internet today is in need of a standardized form for the transmission of internationalized &quot;text&quot; 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='RFC5280' target='https://www.rfc-editor.org/info/rfc5280'>
<front>
<title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
<author fullname='D. Cooper' initials='D.' surname='Cooper'><organization/></author>
<author fullname='S. Santesson' initials='S.' surname='Santesson'><organization/></author>
<author fullname='S. Farrell' initials='S.' surname='Farrell'><organization/></author>
<author fullname='S. Boeyen' initials='S.' surname='Boeyen'><organization/></author>
<author fullname='R. Housley' initials='R.' surname='Housley'><organization/></author>
<author fullname='W. Polk' initials='W.' surname='Polk'><organization/></author>
<date month='May' year='2008'/>
<abstract><t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet.  An overview of this approach and model is provided as an introduction.  The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms.  Standard certificate extensions are described and two Internet-specific extensions are defined.  A set of required certificate extensions is specified.  The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions.  An algorithm for X.509 certification path validation is described.  An ASN.1 module and examples are provided in the appendices.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5280'/>
<seriesInfo name='DOI' value='10.17487/RFC5280'/>
</reference>



<reference anchor='RFC7049' target='https://www.rfc-editor.org/info/rfc7049'>
<front>
<title>Concise Binary Object Representation (CBOR)</title>
<author fullname='C. Bormann' initials='C.' surname='Bormann'><organization/></author>
<author fullname='P. Hoffman' initials='P.' surname='Hoffman'><organization/></author>
<date month='October' year='2013'/>
<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></abstract>
</front>
<seriesInfo name='RFC' value='7049'/>
<seriesInfo name='DOI' value='10.17487/RFC7049'/>
</reference>


<reference anchor='I-D.ietf-rats-architecture'>
   <front>
      <title>Remote Attestation Procedures Architecture</title>
      <author fullname='Henk Birkholz'>
	 <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Dave Thaler'>
	 <organization>Microsoft</organization>
      </author>
      <author fullname='Michael Richardson'>
	 <organization>Sandelman Software Works</organization>
      </author>
      <author fullname='Ned Smith'>
	 <organization>Intel Corporation</organization>
      </author>
      <author fullname='Wei Pan'>
	 <organization>Huawei Technologies</organization>
      </author>
      <date day='24' month='July' year='2022'/>
      <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.
   An attempt is made to provide for a model that is neutral toward
   processor architectures, the content of claims, and protocols.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-rats-architecture-19'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-rats-architecture-19.txt' type='TXT'/>
</reference>


<reference anchor='I-D.ietf-rats-eat'>
   <front>
      <title>The Entity Attestation Token (EAT)</title>
      <author fullname='Laurence Lundblade'>
	 <organization>Security Theory LLC</organization>
      </author>
      <author fullname='Giridhar Mandyam'>
	 <organization>Qualcomm Technologies Inc.</organization>
      </author>
      <author fullname='Jeremy O&#39;Donoghue'>
	 <organization>Qualcomm Technologies Inc.</organization>
      </author>
      <date day='10' month='July' year='2022'/>
      <abstract>
	 <t>   An Entity Attestation Token (EAT) provides an attested claims set
   that describes state and characteristics of an entity, a device like
   a phone, IoT device, network equipment or such.  This claims set is
   used by a relying party, server or service to determine how much it
   wishes to trust the entity.

   An EAT is either a CBOR Web Token (CWT) or JSON Web Token (JWT) with
   attestation-oriented claims.  To a large degree, all this document
   does is extend CWT and JWT.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-rats-eat-14'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-rats-eat-14.txt' type='TXT'/>
</reference>


<reference anchor='I-D.ietf-rats-reference-interaction-models'>
   <front>
      <title>Reference Interaction Models for Remote Attestation Procedures</title>
      <author fullname='Henk Birkholz'>
	 <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Michael Eckel'>
	 <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Wei Pan'>
	 <organization>Huawei Technologies</organization>
      </author>
      <author fullname='Eric Voit'>
	 <organization>Cisco Systems</organization>
      </author>
      <date day='26' month='January' year='2022'/>
      <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-05'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-rats-reference-interaction-models-05.txt' type='TXT'/>
</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'>
	 <organization>Arm Limited</organization>
      </author>
      <author fullname='Hannes Tschofenig'>
	 <organization>Arm Limited</organization>
      </author>
      <author fullname='Henk Birkholz'>
	 <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Koen Zandberg'>
	 <organization>Inria</organization>
      </author>
      <date day='11' month='July' year='2022'/>
      <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 that 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-18'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-suit-manifest-18.txt' type='TXT'/>
</reference>


<reference anchor='I-D.ietf-suit-trust-domains'>
   <front>
      <title>SUIT Manifest Extensions for Multiple Trust Domains</title>
      <author fullname='Brendan Moran'>
	 <organization>Arm Limited</organization>
      </author>
      <date day='7' month='March' year='2022'/>
      <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 uses different trust anchors for different purposes or components
   in the context of firmware update.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-trust-domains-00'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-suit-trust-domains-00.txt' type='TXT'/>
</reference>


<reference anchor='I-D.ietf-suit-report'>
   <front>
      <title>Secure Reporting of Update Status</title>
      <author fullname='Brendan Moran'>
	 <organization>Arm Limited</organization>
      </author>
      <author fullname='Henk Birkholz'>
	 <organization>Fraunhofer SIT</organization>
      </author>
      <date day='11' month='July' year='2022'/>
      <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-02'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-suit-report-02.txt' type='TXT'/>
</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' target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author fullname='S. Bradner' initials='S.' surname='Bradner'><organization/></author>
<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' target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author fullname='B. Leiba' initials='B.' surname='Leiba'><organization/></author>
<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>Firmware Encryption with SUIT Manifests</title>
      <author fullname='Hannes Tschofenig'>
	 <organization>Arm Limited</organization>
      </author>
      <author fullname='Russ Housley'>
	 <organization>Vigil Security, LLC</organization>
      </author>
      <author fullname='Brendan Moran'>
	 <organization>Arm Limited</organization>
      </author>
      <date day='11' month='July' year='2022'/>
      <abstract>
	 <t>   This document specifies a firmware update mechanism where the
   firmware image is encrypted.  Firmware encryption uses the IETF SUIT
   manifest with key establishment provided by hybrid public-key
   encryption (HPKE) and AES Key Wrap (AES-KW).  HPKE uses public key
   cryptography while AES-KW uses a pre-shared key-encryption key.
   Encryption of the firmware image is accomplished with convential
   symmetric key cryptography.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-firmware-encryption-06'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-suit-firmware-encryption-06.txt' type='TXT'/>
</reference>


<reference anchor='I-D.ietf-teep-architecture'>
   <front>
      <title>Trusted Execution Environment Provisioning (TEEP) Architecture</title>
      <author fullname='Mingliang Pei'>
	 <organization>Broadcom</organization>
      </author>
      <author fullname='Hannes Tschofenig'>
	 <organization>Arm Limited</organization>
      </author>
      <author fullname='Dave Thaler'>
	 <organization>Microsoft</organization>
      </author>
      <author fullname='David Wheeler'>
	 <organization>Amazon</organization>
      </author>
      <date day='11' month='July' year='2022'/>
      <abstract>
	 <t>   A Trusted Execution Environment (TEE) is an environment that enforces
   that any code within that environment cannot be tampered with, and
   that any data used by such code cannot be read or tampered with by
   any code outside that environment.  This architecture document
   motivates the design and standardization of a protocol for managing
   the lifecycle of trusted applications running inside such a TEE.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-teep-architecture-18'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-teep-architecture-18.txt' type='TXT'/>
</reference>


<reference anchor='I-D.lundblade-rats-eat-media-type'>
   <front>
      <title>EAT Media Types</title>
      <author fullname='Laurence Lundblade'>
	 <organization>Security Theory LLC</organization>
      </author>
      <author fullname='Henk Birkholz'>
	 <organization>Fraunhofer Institute for Secure Information Technology</organization>
      </author>
      <author fullname='Thomas Fossati'>
	 <organization>arm</organization>
      </author>
      <date day='26' month='May' year='2022'/>
      <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-lundblade-rats-eat-media-type-00'/>
   <format target='https://www.ietf.org/archive/id/draft-lundblade-rats-eat-media-type-00.txt' type='TXT'/>
</reference>



<reference anchor='RFC8610' target='https://www.rfc-editor.org/info/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'><organization/></author>
<author fullname='C. Vigano' initials='C.' surname='Vigano'><organization/></author>
<author fullname='C. Bormann' initials='C.' surname='Bormann'><organization/></author>
<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='RFC8126' target='https://www.rfc-editor.org/info/rfc8126'>
<front>
<title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
<author fullname='M. Cotton' initials='M.' surname='Cotton'><organization/></author>
<author fullname='B. Leiba' initials='B.' surname='Leiba'><organization/></author>
<author fullname='T. Narten' initials='T.' surname='Narten'><organization/></author>
<date month='June' year='2017'/>
<abstract><t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters.  To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper.  For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t><t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed.  This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t><t>This is the third edition of this document; it obsoletes RFC 5226.</t></abstract>
</front>
<seriesInfo name='BCP' value='26'/>
<seriesInfo name='RFC' value='8126'/>
<seriesInfo name='DOI' value='10.17487/RFC8126'/>
</reference>



<reference anchor='RFC8915' target='https://www.rfc-editor.org/info/rfc8915'>
<front>
<title>Network Time Security for the Network Time Protocol</title>
<author fullname='D. Franke' initials='D.' surname='Franke'><organization/></author>
<author fullname='D. Sibold' initials='D.' surname='Sibold'><organization/></author>
<author fullname='K. Teichel' initials='K.' surname='Teichel'><organization/></author>
<author fullname='M. Dansarie' initials='M.' surname='Dansarie'><organization/></author>
<author fullname='R. Sundblad' initials='R.' surname='Sundblad'><organization/></author>
<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>




    </references>


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

<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" title="B. Acknowledgements">

<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" title="C. Complete CDDL">

<t>Valid TEEP messages MUST 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>

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

teep-message-framework = [
  type: uint (0..23) / $teep-type-extension,
  options: { * teep-option },
  * uint; further integers, 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, uint (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

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

; data items as bitmaps
data-item-requested = $data-item-requested
attestation = 1
$data-item-requested /= attestation
trusted-components = 2
$data-item-requested /= trusted-components
extensions = 4
$data-item-requested /= extensions

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 ],
    * $$query-request-extensions
    * $$teep-option-extensions
  },
  supported-cipher-suites: [ + $cipher-suite ],
  data-item-requested: data-item-requested
]

;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_Tagged    = 18

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

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

;MANDATORY for TAM to support the following cipher-suites, 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_Tagged, cose-alg-eddsa ]
teep-operation-sign1-es256 = [ COSE_Sign1_Tagged, cose-alg-es256 ]

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

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

; freshness-mechanisms

FRESHNESS_NONCE = 0
FRESHNESS_TIMESTAMP = 1
FRESHNESS_EPOCH_ID = 2

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

query-response = [
  type: TEEP-TYPE-query-response,
  options: {
    ? token => bstr .size (8..64),
    ? selected-cipher-suite => cipher-suite,
    ? selected-version => version,
    ? attestation-payload-format => text,
    ? attestation-payload => bstr,
    ? suit-reports => [ + SUIT_Report ],
    ? tc-list => [ + system-property-claims ],
    ? requested-tc-list => [ + requested-tc-info ],
    ? unneeded-tc-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),
    ? manifest-list => [ + bstr .cbor SUIT_Envelope ],
    * $$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-cipher-suites => [ + $cipher-suite ],
     ? supported-freshness-mechanisms => [ + freshness-mechanism ],
     ? versions => [ + version ],
     ? suit-reports => [ + SUIT_Report ],
     * $$teep-error-extensions,
     * $$teep-option-extensions
  },
  err-code: uint (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_CERTIFICATE_EXPIRED = 9
ERR_TEMPORARY_ERROR = 10
ERR_MANIFEST_PROCESSING_FAILED = 17

; labels of mapkey for teep message parameters, uint (0..23)
supported-cipher-suites = 1
challenge = 2
versions = 3
selected-cipher-suite = 5
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-tc-list = 15
component-id = 16
tc-manifest-sequence-number = 17
have-binary = 18
suit-reports = 19
token = 20
supported-freshness-mechanisms = 21
]]></artwork></figure>

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

<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" title="D.1. QueryRequest Message">

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

<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-cipher-suites: / [ [ [ 18, -7 ] ], / Sign1 using ES256 /
                                 [ [ 18, -8 ] ]  / Sign1 using EdDSA /
                                ],
  / data-item-requested: / 3 / attestation | trusted-components /
]
]]></artwork></figure>

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

<figure><artwork><![CDATA[
85                  # array(5)
   01               # unsigned(1) / TEEP-TYPE-query-request /
   81               # array(1)
      83            # array(3)
         26         # negative(6) / -7 = cose-alg-es256 /
         F6         # primitive(22) / null /
         F6         # primitive(22) / null /
   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-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 /
   03               # unsigned(3) / attestation | trusted-components /
]]></artwork></figure>

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

<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" title="D.2.1. CBOR Diagnostic Notation">

<figure><artwork><![CDATA[
/ eat-claim-set = /
{
    / issuer /                   1: "joe",
    / timestamp (iat) /          6: 1(1526542894)
    / nonce /                   10: h'948f8860d13a463e8e',
    / secure-boot /             15: true,
    / debug-status /            16: 3, / disabled-permanently /
    / security-level /          14: 3, / secure-restricted /
    / device-identifier /    <TBD>: h'e99600dd921649798b013e9752dcf0c5',
    / vendor-identifier /    <TBD>: h'2b03879b33434a7ca682b8af84c19fd4', 
    / class-identifier /     <TBD>: h'9714a5796bd245a3a4ab4f977cb8487f',
    / chip-version /            26: [ "MyTEE", 1 ],
    / component-identifier / <TBD>: h'60822887d35e43d5b603d18bcaa3f08d',
    / version /              <TBD>: "v0.1"
}
]]></artwork></figure>

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

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

<figure><artwork><![CDATA[
/ query-response = /
[
  / type: / 2 / TEEP-TYPE-query-response /,
  / options: /
  {
    / token / 20 : h'A0A1A2A3A4A5A6A7A8A9AAABACADAEAF',
    / selected-cipher-suite / 5 : [ [ 18, -7 ] ] / only use ES256 /,
    / selected-version / 6 : 0,
    / attestation-payload / 7 : h'' / empty only for example purpose /,
    / tc-list / 8 : [
      {
        / component-id / 16 : [ h'0102030405060708100A0B0C0D0E0F' ]
      },
      {
        / component-id / 16 : [ h'1102030405060708090A0B0C0D0E0F' ]
      }
    ]
  }
]
]]></artwork></figure>

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

<figure><artwork><![CDATA[
82                  # array(2)
   02               # unsigned(2) / TEEP-TYPE-query-response /
   A5               # map(5)
      14            # unsigned(20) / token: /
      50            # bytes(16)
         A0A1A2A3A4A5A6A7A8A9AAABACADAEAF
      05            # unsigned(5) / selected-cipher-suite: /
      81            # array(1)
         82         # array(2)
            12      # unsigned(18) / cose-sign1 /
            26      # negative(6) / -7 = cose-alg-es256 /
      06            # unsigned(6) / selected-version: /
      00            # unsigned(0)
      07            # unsigned(7) / attestation-payload: /
      40            # bytes(0)
                    # ""
      08            # unsigned(8) / tc-list: /
      82            # array(2)
         A1         # map(1)
            10      # unsigned(16) / component-id: /
            81      # array(1)
               4F   # bytes(15)
                  0102030405060708090A0B0C0D0E0F
         A1         # map(1)
            10      # unsigned(16) / component-id: /
            81      # array(1)
               4F   # bytes(15)
                  1102030405060708090A0B0C0D0E0F
]]></artwork></figure>

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

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

<figure><artwork><![CDATA[
/ update = /
[
  / type: / 3 / TEEP-TYPE-update /,
  / options: /
  {
    / token / 20 : h'A0A1A2A3A4A5A6A7A8A9AAABACADAEAF',
    / manifest-list / 10 : [ ] / array of SUIT_Envelope /
      / empty, example purpose only /
  }
]
]]></artwork></figure>

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

<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: /
      80            # array(0) / [] /
]]></artwork></figure>

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

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

<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" title="D.5.2. CBOR Binary Representation">

<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" title="D.6. Error Message">

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

<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" title="D.6.2. CBOR binary Representation">

<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" title="E. Examples of SUIT Manifests">

<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" title="Example 1: SUIT Manifest pointing to URI of the Trusted Component Binary">

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

<figure><artwork><![CDATA[
/ SUIT_Envelope_Tagged / 107( {
  / 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
    ] >>
  } >>
} )
]]></artwork></figure>

</section>
<section numbered="no" anchor="cbor-binary-representation" title="CBOR Binary Representation">

<figure><artwork><![CDATA[
D8 6B                                               # tag(107) / SUIT_Envelope_Tagged /
   A2                                               # map(2)
      02                                            # unsigned(2) / suit-authentication-wrapper /
      58 73                                         # bytes(115)
         82                                         # array(2)
            58 24                                   # bytes(36)
               82                                   # array(2)
                  2F                                # negative(15) / -16 = suit-cose-alg-sha256 /
                  58 20                             # bytes(32)
                     DB601ADE73092B58532CA03FBB663DE49532435336F1558B49BB622726A2FEDD
            58 4A                                   # bytes(74)
               D2                                   # tag(18) / COSE_Sign1_Tagged /
                  84                                # array(4)
                     43                             # bytes(3)
                        A1                          # map(1)
                           01                       # unsigned(1) / algorithm-id /
                           26                       # negative(6) / -7 = ES256 /
                     A0                             # map(0)
                     F6                             # primitive(22) / null /
                     58 40                          # bytes(64)
                        5B2D535A2B6D5E3C585C1074F414DA9E10BD285C99A33916DADE3ED38812504817AC48B62B8E984EC622785BD1C411888BE531B1B594507816B201F6F28579A4
      03                                            # unsigned(3) / suit-manifest: /
      58 D4                                         # bytes(212)
         A4                                         # map(4)
            01                                      # unsigned(1) / suit-manifest-version: /
            01                                      # unsigned(1)
            02                                      # unsigned(2) / suit-manifest-sequence-number: /
            03                                      # unsigned(3)
            03                                      # unsigned(3) / suit-common: /
            58 84                                   # bytes(132)
               A2                                   # map(2)
                  02                                # unsigned(2) / suit-components: /
                  81                                # array(1)
                     84                             # array(4)
                        4B                          # bytes(11)
                           544545502D446576696365   # "TEEP-Device"
                        48                          # bytes(8)
                           5365637572654653         # "SecureFS"
                        50                          # bytes(16)
                           8D82573A926D4754935332DC29997F74 # tc-uuid
                        42                          # bytes(2)
                           7461                     # "ta"
                  04                                # unsigned(4) / suit-common-sequence: /
                  58 54                             # bytes(84)
                     86                             # array(6)
                        14                          # unsigned(20) / suit-directive-override-parameters: /
                        A4                          # map(4)
                           01                       # unsigned(1) / suit-parameter-vendor-identifier: /
                           50                       # bytes(16)
                              C0DDD5F15243566087DB4F5B0AA26C2F
                           02                       # unsigned(2) / suit-parameter-class-identifier: /
                           50                       # bytes(16)
                              DB42F7093D8C55BAA8C5265FC5820F4E
                           03                       # unsigned(3) / suit-parameter-image-digest: /
                           58 24                    # bytes(36)
                              82                    # array(2)
                                 2F                 # negative(15) / -16 = suit-cose-alg-sha256 /
                                 58 20              # bytes(32)
                                    8CF71AC86AF31BE184EC7A05A411A8C3A14FD9B77A30D046397481469468ECE8
                           0E                       # unsigned(14) / suit-parameter-image-size: /
                           14                       # unsigned(20)
                        01                          # unsigned(1) / suit-condition-vendor-identifier: /
                        0F                          # unsigned(15)
                        02                          # unsigned(2) / suit-condition-class-identifier: /
                        0F                          # unsigned(15)
            09                                      # unsigned(9) / suit-install: /
            58 45                                   # bytes(69)
               86                                   # array(6)
                  14                                # unsigned(20) / suit-directive-override-parameters: /
                  A1                                # map(1)
                     15                             # unsigned(21) / suit-parameter-uri: /
                     78 3B                          # text(59)
                        68747470733A2F2F6578616D706C652E6F72672F38643832353733612D393236642D343735342D393335332D3332646332393939376637342E7461 # "https://example.org/8d82573a-926d-4754-9353-32dc29997f74.ta"
                  15                                # unsigned(21) / suit-directive-fetch: /
                  0F                                # unsigned(15)
                  03                                # unsigned(3) / suit-condition-image-match: /
                  0F                                # unsigned(15)
]]></artwork></figure>

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

<figure><artwork><![CDATA[
D86BA2025873825824822F5820DB601ADE73092B58532CA03FBB663DE495
32435336F1558B49BB622726A2FEDD584AD28443A10126A0F658405B2D53
5A2B6D5E3C585C1074F414DA9E10BD285C99A33916DADE3ED38812504817
AC48B62B8E984EC622785BD1C411888BE531B1B594507816B201F6F28579
A40358D4A401010203035884A20281844B544545502D4465766963654853
65637572654653508D82573A926D4754935332DC29997F74427461045854
8614A40150C0DDD5F15243566087DB4F5B0AA26C2F0250DB42F7093D8C55
BAA8C5265FC5820F4E035824822F58208CF71AC86AF31BE184EC7A05A411
A8C3A14FD9B77A30D046397481469468ECE80E14010F020F0958458614A1
15783B68747470733A2F2F6578616D706C652E6F72672F38643832353733
612D393236642D343735342D393335332D3332646332393939376637342E
7461150F030F
]]></artwork></figure>

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

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

<figure><artwork><![CDATA[
/ SUIT_Envelope_Tagged / 107( {
  / suit-authentication-wrapper / 2: << [
    << [
      / suit-digest-algorithm-id: / -16 / suit-cose-alg-sha256 /,
      / suit-digest-bytes: / h'14A98BE957DE38FAE37376EA491FD6CAD9BFBD3C90051C8F5B017D7A496C3B05'
    ] >>,
    << / COSE_Sign1_Tagged / 18( [
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: / h'4093B323953785981EB607C8BA61B21E5C4F85726A2AF48C1CB05BD4401B1B1565070728FDA38E6496D631E1D23F966CFF7805EDE721D48507D9192993DA8722'
    ] ) >>
  ] >>,
  / suit-integrated-payload / "#tc": h'48656C6C6F2C2053656375726520576F726C6421', / "Hello, Secure World!" /
  / 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: "#tc"
      },
      / suit-directive-fetch / 21, 15,
      / suit-condition-image-match / 3, 15
    ] >>
  } >>
} )
]]></artwork></figure>

</section>
<section numbered="no" anchor="cbor-binary-representation-1" title="CBOR Binary Representation">

<figure><artwork><![CDATA[
D8 6B                                               # tag(107) / SUIT_Envelope_Tagged /
   A3                                               # map(3)
      02                                            # unsigned(2) / suit-authentication-wrapper /
      58 73                                         # bytes(115)
         82                                         # array(2)
            58 24                                   # bytes(36)
               82                                   # array(2)
                  2F                                # negative(15) / -16 = suit-cose-alg-sha256 /
                  58 20                             # bytes(32)
                     14A98BE957DE38FAE37376EA491FD6CAD9BFBD3C90051C8F5B017D7A496C3B05
            58 4A                                   # bytes(74)
               D2                                   # tag(18) / COSE_Sign1_Tagged /
                  84                                # array(4)
                     43                             # bytes(3)
                        A1                          # map(1)
                           01                       # unsigned(1) / algorithm-id /
                           26                       # negative(6) / -7 = ES256 /
                     A0                             # map(0)
                     F6                             # primitive(22) / null /
                     58 40                          # bytes(64)
                        4093B323953785981EB607C8BA61B21E5C4F85726A2AF48C1CB05BD4401B1B1565070728FDA38E6496D631E1D23F966CFF7805EDE721D48507D9192993DA8722
      63                                            # text(3) / suit-integrated-payload /
         237463                                     # "#tc"
      54                                            # bytes(20)
         48656C6C6F2C2053656375726520576F726C6421   # "Hello, Secure World!"
      03                                            # unsigned(3) / suit-manifest: /
      58 9A                                         # bytes(154)
         A4                                         # map(4)
            01                                      # unsigned(1) / suit-manifest-version: /
            01                                      # unsigned(1)
            02                                      # unsigned(2) / suit-manifest-sequence-number: /
            03                                      # unsigned(3)
            03                                      # unsigned(3) / suit-common: /
            58 84                                   # bytes(132)
               A2                                   # map(2)
                  02                                # unsigned(2) / suit-components: /
                  81                                # array(1)
                     84                             # array(4)
                        4B                          # bytes(11)
                           544545502D446576696365   # "TEEP-Device"
                        48                          # bytes(8)
                           5365637572654653         # "SecureFS"
                        50                          # bytes(16)
                           8D82573A926D4754935332DC29997F74 # tc-uuid
                        42                          # bytes(2)
                           7461                     # "ta"
                  04                                # unsigned(4) / suit-common-sequence: /
                  58 54                             # bytes(84)
                     86                             # array(6)
                        14                          # unsigned(20) / suit-directive-override-parameters: /
                        A4                          # map(4)
                           01                       # unsigned(1) / suit-parameter-vendor-identifier: /
                           50                       # bytes(16)
                              C0DDD5F15243566087DB4F5B0AA26C2F
                           02                       # unsigned(2) / suit-parameter-class-identifier: /
                           50                       # bytes(16)
                              DB42F7093D8C55BAA8C5265FC5820F4E
                           03                       # unsigned(3) / suit-parameter-image-digest: /
                           58 24                    # bytes(36)
                              82                    # array(2)
                                 2F                 # negative(15) / -16 = suit-cose-alg-sha256 /
                                 58 20              # bytes(32)
                                    8CF71AC86AF31BE184EC7A05A411A8C3A14FD9B77A30D046397481469468ECE8
                           0E                       # unsigned(14) / suit-parameter-image-size: /
                           14                       # unsigned(20)
                        01                          # unsigned(1) / suit-condition-vendor-identifier: /
                        0F                          # unsigned(15)
                        02                          # unsigned(2) / suit-condition-class-identifier: /
                        0F                          # unsigned(15)
            09                                      # unsigned(9) / suit-install: /
            4C                                      # bytes(12)
               86                                   # array(6)
                  14                                # unsigned(20) / suit-directive-override-parameters: /
                  A1                                # map(1)
                     15                             # unsigned(21) / suit-parameter-uri: /
                     63                             # text(3)
                        237463                      # "#tc"
                  15                                # unsigned(21) / suit-directive-fetch: /
                  0F                                # unsigned(15)
                  03                                # unsigned(3) / suit-condition-image-match: /
                  0F                                # unsigned(15)
]]></artwork></figure>

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

<figure><artwork><![CDATA[
D86BA3025873825824822F582014A98BE957DE38FAE37376EA491FD6CAD9
BFBD3C90051C8F5B017D7A496C3B05584AD28443A10126A0F658404093B3
23953785981EB607C8BA61B21E5C4F85726A2AF48C1CB05BD4401B1B1565
070728FDA38E6496D631E1D23F966CFF7805EDE721D48507D9192993DA87
22632374635448656C6C6F2C2053656375726520576F726C642103589AA4
01010203035884A20281844B544545502D44657669636548536563757265
4653508D82573A926D4754935332DC29997F744274610458548614A40150
C0DDD5F15243566087DB4F5B0AA26C2F0250DB42F7093D8C55BAA8C5265F
C5820F4E035824822F58208CF71AC86AF31BE184EC7A05A411A8C3A14FD9
B77A30D046397481469468ECE80E14010F020F094C8614A1156323746315
0F030F
]]></artwork></figure>

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

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

<figure><artwork><![CDATA[
/ SUIT_Envelope_Tagged / 107( {
  / suit-authentication-wrapper / 2: << [
    << [
      / suit-digest-algorithm-id: / -16 / suit-cose-alg-sha256 /,
      / suit-digest-bytes: / h'CE596D785169B72712560B3A246AA98F814498EA3625EEBB72CED9AF273E7FFD'
    ] >>,
    << / COSE_Sign1_Tagged / 18( [
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: / h'E9083AA71D2BFCE48253037B9C3116A5EDF23BE0F4B4357A8A835F724660DA7482C64345B4C73DE95F05513BD09FC2E58BD2CC865CC851AD797513A9A951A3CA'
    ] ) >>
  ] >>,
  / suit-manifest / 3: << {
    / suit-manifest-version / 1: 1,
    / suit-manifest-sequence-number / 2: 3,
    / suit-common / 3: << {
      / suit-dependencies / 1: [
        {
          / suit-dependency-digest / 1: [
            / suit-digest-algorithm-id: / -16 / suit-cose-alg-sha256 /,
            / suit-digest-bytes: / h'F8690E5A86D010BF2B5348ABB99F2254DB7B608D0D626B98DB51AB3ECFC51907'
          ]
        }
      ],
      / suit-components / 2: [
        [
          h'544545502D446576696365', / "TEEP-Device" /
          h'5365637572654653',       / "SecureFS" /
          h'636F6E6669672E6A736F6E'  / "config.json" /
        ]
      ],
      / suit-common-sequence / 4: << [
        / suit-directive-set-component-index / 12, 0,
        / 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'AAABCCCDEEEF00012223444566678889ABBBCDDDEFFF01112333455567778999'
          ] >>,
          / suit-parameter-image-size / 14: 64
        },
        / suit-condition-vendor-idnetifier / 1, 15,
        / suit-condition-class-identifier / 2, 15
      ] >>
    } >>,
    / suit-dependency-resolution / 7: << [
      / suit-directive-set-dependency-index / 13, 0,
      / suit-directive-override-parameters / 20, {
        / suit-parameter-uri / 21: "https://example.org/8d82573a-926d-4754-9353-32dc29997f74.suit"
      },
      / suit-directive-fetch / 21, 2,
      / suit-condition-image-match / 3, 15
    ] >>,
    / suit-install / 9: << [
      / suit-directive-set-dependency-index / 13, 0,
      / suit-directive-process-dependency / 18, 0,
      / suit-directive-set-component-index / 12, 0,
      / suit-directive-override-parameters / 20, {
        / suit-parameter-uri / 21: "https://example.org/config.json"
      },
      / suit-directive-fetch / 21, 2,
      / suit-condition-image-match / 3, 15
    ] >>,
    / suit-validate / 10: << [
      / suit-directive-set-component-index / 12, 0,
      / suit-condition-image-match/ 3, 15
    ] >>
  } >>
} )
]]></artwork></figure>

</section>
<section numbered="no" anchor="cbor-binary-represenation" title="CBOR Binary Represenation">

<figure><artwork><![CDATA[
D8 6B                                               # tag(107) / SUIT_Envelope_Tagged /
   A2                                               # map(2)
      02                                            # unsigned(2) / suit-authentication-wrapper: /
      58 73                                         # bytes(115)
         82                                         # array(2)
            58 24                                   # bytes(36)
               82                                   # array(2)
                  2F                                # negative(15) / -16 = suit-cose-alg-sha256 /
                  58 20                             # bytes(32)
                     CE596D785169B72712560B3A246AA98F814498EA3625EEBB72CED9AF273E7FFD
            58 4A                                   # bytes(74)
               D2                                   # tag(18) / COSE_Sign1_Tagged /
                  84                                # array(4)
                     43                             # bytes(3)
                        A1                          # map(1)
                           01                       # unsigned(1) / algorithm-id /
                           26                       # negative(6) / -7 = ES256 /
                     A0                             # map(0)
                     F6                             # primitive(22) / null /
                     58 40                          # bytes(64)
                        E9083AA71D2BFCE48253037B9C3116A5EDF23BE0F4B4357A8A835F724660DA7482C64345B4C73DE95F05513BD09FC2E58BD2CC865CC851AD797513A9A951A3CA
      03                                            # unsigned(3) / suit-manifest: /
      59 0134                                       # bytes(308)
         A6                                         # map(6)
            01                                      # unsigned(1) / suit-manifest-version: /
            01                                      # unsigned(1)
            02                                      # unsigned(2) / suit-manifest-sequence-number: /
            03                                      # unsigned(3)
            03                                      # unsigned(3) / suit-common: /
            58 A7                                   # bytes(167)
               A3                                   # map(3)
                  01                                # unsigned(1) / suit-dependencies: /
                  81                                # array(1)
                     A1                             # map(1)
                        01                          # unsigned(1) suit-dependency-digest: /
                        82                          # array(2)
                           2F                       # negative(15) / -16 = suit-cose-alg-sha256 /
                           58 20                    # bytes(32)
                              F8690E5A86D010BF2B5348ABB99F2254DB7B608D0D626B98DB51AB3ECFC51907
                  02                                # unsigned(2) / suit-components: /
                  81                                # array(1)
                     83                             # array(3)
                        4B                          # bytes(11)
                           544545502D446576696365   # "TEEP-Device"
                        48                          # bytes(8)
                           5365637572654653         # "SecureFS"
                        4B                          # bytes(11)
                           636F6E6669672E6A736F6E   # "config.json"
                  04                                # unsigned(4) / suit-common-sequence: /
                  58 57                             # bytes(87)
                     88                             # array(8)
                        0C                          # unsigned(12) / suit-directive-set-component-index: /
                        00                          # unsigned(0)
                        14                          # unsigned(20) / suit-directive-override-parameters: /
                        A4                          # map(4)
                           01                       # unsigned(1) / suit-parameter-vendor-identifier: /
                           50                       # bytes(16)
                              C0DDD5F15243566087DB4F5B0AA26C2F
                           02                       # unsigned(2) / suit-parameter-class-identifier: /
                           50                       # bytes(16)
                              DB42F7093D8C55BAA8C5265FC5820F4E
                           03                       # unsigned(3) / suit-parameter-image-digest: /
                           58 24                    # bytes(36)
                              82                    # array(2)
                                 2F                 # negative(15) / -16 = suit-cose-alg-sha256 /
                                 58 20              # bytes(32)
                                    AAABCCCDEEEF00012223444566678889ABBBCDDDEFFF01112333455567778999
                           0E                       # unsigned(14) / suit-parameter-image-size: /
                           18 40                    # unsigned(64)
                        01                          # unsigned(1) / suit-condition-vendor-identifier: /
                        0F                          # unsigned(15)
                        02                          # unsigned(2) / suit-condition-class-identifier: /
                        0F                          # unsigned(15)
            07                                      # unsigned(7) / suit-dependency-resolution: /
            58 49                                   # bytes(73)
               88                                   # array(8)
                  0D                                # unsigned(13) / suit-directive-set-dependency-index: /
                  00                                # unsigned(0)
                  14                                # unsigned(20) / suit-directive-override-parameters: /
                  A1                                # map(1)
                     15                             # unsigned(21) / suit-parameter-uri: /
                     78 3D                          # text(61)
                        68747470733A2F2F6578616D706C652E6F72672F38643832353733612D393236642D343735342D393335332D3332646332393939376637342E73756974 # "https://example.org/8d82573a-926d-4754-9353-32dc29997f74.suit"
                  15                                # unsigned(21) / suit-directive-fetch: /
                  02                                # unsigned(2)
                  03                                # unsigned(3) / suit-condition-image-match: /
                  0F                                # unsigned(15)
            09                                      # unsigned(9) / suit-install: /
            58 2F                                   # bytes(47)
               8C                                   # array(12)
                  0D                                # unsigned(13) / suit-directive-set-dependency-index: /
                  00                                # unsigned(0)
                  12                                # unsigned(18) / suit-directive-process-dependency: /
                  00                                # unsigned(0)
                  0C                                # unsigned(12) / suit-directive-set-component-index: /
                  00                                # unsigned(0)
                  14                                # unsigned(20) / suit-directive-override-parameters: /
                  A1                                # map(1)
                     15                             # unsigned(21) / suit-parameter-uri: /
                     78 1F                          # text(31)
                        68747470733A2F2F6578616D706C652E6F72672F636F6E6669672E6A736F6E # "https://example.org/config.json"
                  15                                # unsigned(21) / suit-directive-fetch: /
                  02                                # unsigned(2)
                  03                                # unsigned(3) / suit-condition-image-match: /
                  0F                                # unsigned(15)
            0A                                      # unsigned(10) / suit-validate: /
            45                                      # bytes(5)
               84                                   # array(4)
                  0C                                # unsigned(12) / suit-directive-set-component-index: /
                  00
                  03                                # unsigned(3) / suit-condition-image-match: /
                  0F                                # unsigned(15)
]]></artwork></figure>

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

<figure><artwork><![CDATA[
D86BA2025873825824822F5820CE596D785169B72712560B3A246AA98F81
4498EA3625EEBB72CED9AF273E7FFD584AD28443A10126A0F65840E9083A
A71D2BFCE48253037B9C3116A5EDF23BE0F4B4357A8A835F724660DA7482
C64345B4C73DE95F05513BD09FC2E58BD2CC865CC851AD797513A9A951A3
CA03590134A6010102030358A7A30181A101822F5820DB601ADE73092B58
532CA03FBB663DE49532435336F1558B49BB622726A2FEDD0281834B5445
45502D4465766963654853656375726546534B636F6E6669672E6A736F6E
045857880C0014A40150C0DDD5F15243566087DB4F5B0AA26C2F0250DB42
F7093D8C55BAA8C5265FC5820F4E035824822F5820AAABCCCDEEEF000122
23444566678889ABBBCDDDEFFF011123334555677789990E1840010F020F
075849880D0014A115783D68747470733A2F2F6578616D706C652E6F7267
2F38643832353733612D393236642D343735342D393335332D3332646332
393939376637342E737569741502030F09582F8C0D0012000C0014A11578
1F68747470733A2F2F6578616D706C652E6F72672F636F6E6669672E6A73
6F6E1502030F0A45840C00030F
]]></artwork></figure>

</section>
</section>
<section numbered="no" anchor="suit-unlink" title="E.4. Example 4: Unlink a Trusted Component">

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

<figure><artwork><![CDATA[
/ SUIT_Envelope_Tagged / 107( {
  / suit-authentication-wrapper / 2: << [
    << [
      / suit-digest-algorithm-id: / -16 / suit-cose-alg-sha256 /,
      / suit-digest-bytes: / h'632454F19A9440A5B83493628A7EF8704C8A0205A62C34E425BAA34C71341F42'
    ] >>,
    << / COSE_Sign1_Tagged / 18( [
      / protected / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: / h'A32CDB7C1D089C27408CED3C79087220EB0D77F105BB5330912875F4D94AD108D7658C650463AEB7E1CCA5084F22B2F3993176E8B3529A3202ED735E4D39BBBF'
    ] ) >>
  ] >>,
  / suit-manifest / 3: << {
    / suit-manifest-version / 1: 1,
    / suit-manifest-sequence-number / 2: 18446744073709551615 / UINT64_MAX /,
    / 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-condition-vendor-identifier / 1, 15,
        / suit-condition-class-identifier / 2, 15
      ] >>
    } >>,
    / suit-install / 9: << [
      / suit-directive-set-component-index: / 12, 0,
      / suit-directive-unlink: / 33, 0
    ] >>
  } >>
} )
]]></artwork></figure>

</section>
<section numbered="no" anchor="cbor-binary-representation-2" title="CBOR Binary Representation">

<figure><artwork><![CDATA[
D8 6B                                               # tag(107) / SUIT_Envelope_Tagged /
   A2                                               # map(2)
      02                                            # unsigned(2) / suit-authentication-wrapper /
      58 73                                         # bytes(115)
         82                                         # array(2)
            58 24                                   # bytes(36)
               82                                   # array(2)
                  2F                                # negative(15) / -16 = suit-cose-alg-sha256 /
                  58 20                             # bytes(32)
                     632454F19A9440A5B83493628A7EF8704C8A0205A62C34E425BAA34C71341F42
            58 4A                                   # bytes(74)
               D2                                   # tag(18) / COSE_Sign1_Tagged /
                  84                                # array(4)
                     43                             # bytes(3)
                        A1                          # map(1)
                           01                       # unsigned(1) / algorithm-id /
                           26                       # negative(6) / -7 = ES256 /
                     A0                             # map(0)
                     F6                             # primitive(22) / null /
                     58 40                          # bytes(64)
                        A32CDB7C1D089C27408CED3C79087220EB0D77F105BB5330912875F4D94AD108D7658C650463AEB7E1CCA5084F22B2F3993176E8B3529A3202ED735E4D39BBBF
      03                                            # unsigned(3) / suit-manifest: /
      58 73                                         # bytes(115)
         A4                                         # map(4)
            01                                      # unsigned(1) / suit-manifest-version: /
            01                                      # unsigned(1)
            02                                      # unsigned(2) / suit-manifest-sequence-number: /
            1B FFFFFFFFFFFFFFFF                     # unsigned(18446744073709551615)
            03                                      # unsigned(3) / suit-common: /
            58 5B                                   # bytes(91)
               A2                                   # map(2)
                  02                                # unsigned(2) / suit-components: /
                  81                                # array(1)
                     84                             # array(4)
                        4B                          # bytes(11)
                           544545502D446576696365   # "TEEP-Device"
                        48                          # bytes(8)
                           5365637572654653         # "SecureFS"
                        50                          # bytes(16)
                           8D82573A926D4754935332DC29997F74 # tc-uuid
                        42                          # bytes(2)
                           7461                     # "ta"
                  04                                # unsigned(4) / suit-common-sequence: /
                  58 2B                             # bytes(84)
                     86                             # array(6)
                        14                          # unsigned(20) / suit-directive-override-parameters: /
                        A2                          # map(2)
                           01                       # unsigned(1) / suit-parameter-vendor-identifier: /
                           50                       # bytes(16)
                              C0DDD5F15243566087DB4F5B0AA26C2F
                           02                       # unsigned(2) / suit-parameter-class-identifier: /
                           50                       # bytes(16)
                              DB42F7093D8C55BAA8C5265FC5820F4E
                        01                          # unsigned(1) / suit-condition-vendor-identifier: /
                        0F                          # unsigned(15)
                        02                          # unsigned(2) / suit-condition-class-identifier: /
                        0F                          # unsigned(15)
            09                                      # unsigned(9) / suit-install: /
            46                                      # bytes(6)
               84                                   # array(4)
                  0C                                # unsigned(12) / suit-directive-set-component-index: /
                  00                                # unsigned(0)
                  18 21                             # unsigned(33) / suit-directive-unlink: /
                  00                                # unsigned(0)
]]></artwork></figure>

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

<figure><artwork><![CDATA[
D86BA2025873825824822F5820632454F19A9440A5B83493628A7EF8704C
8A0205A62C34E425BAA34C71341F42584AD28443A10126A0F65840A32CDB
7C1D089C27408CED3C79087220EB0D77F105BB5330912875F4D94AD108D7
658C650463AEB7E1CCA5084F22B2F3993176E8B3529A3202ED735E4D39BB
BF035873A40101021BFFFFFFFFFFFFFFFF03585BA20281844B544545502D
446576696365485365637572654653508D82573A926D4754935332DC2999
7F7442746104582B8614A20150C0DDD5F15243566087DB4F5B0AA26C2F02
50DB42F7093D8C55BAA8C5265FC5820F4E010F020F0946840C00182100
]]></artwork></figure>

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

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

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

<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",
  / suit-report-records / 4: []
}
]]></artwork></figure>

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

<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",
  / 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[
107({
  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.suit',
    } ,
  / directive-fetch / 21,2 ,
  / condition-image-match / 3,15
]>>,
]]></artwork></figure>

</section>
</section>


  </back>

<!-- ##markdown-source:
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
x2Lv+zjc03RLB7eK/ShYHdidWseiul9t1lrNRq3TbRyoLhxW6x29gkSz2+hc
djqtyrRaDxqtetgJDZkk33tgJON4lRqh2jymhJm66TS8WF+V8KbWidu2Ciur
IxWcRgla0KcljOEP5hw0euTMBTdemoW34cweotqQA8jlLKUPCRqizPTI8JUs
vxwa4M/n/eFfcJdht9uqVKbTbq3aanTb3c5FpVoPu+1mbTq5rEyaNmuANTDz
R6pdVOqddveiXm/UG0F7ErQ6tYtOcNlpTKrdy2nj+aFQQ8GNAxudHskM1W1X
G0Gz3W1dTGuNZgDnH1w0Lrvt9uSi0+i0L82iJtfRQosxzunWWsi+7J3eAznc
OwRm6lvTyZIcrCXo6VuVTq3W6bSn9WbYqE+bF61KfVrtXEyCoH5Z6Uwz7FIa
iuRIe7eVcnWPtFvOI66X84rzFPCa9Y/Aa2qdcZbZrHkZB9nhU3Gbfhn1SDSJ
9bSZRZxc1ipUjGJ2FHMbLRigohv4JNsj0abFPod/FcsU1kxKAD0SHVyhog3v
DJFwgQuZ+Bbt5fp5Wu4BSahX6VcGlWFlVBk/F9+qQd4fPmjcalaeyhmX//Gt
0c65bGv9MWxrmvsSGZpbyTJohgXzs60K+pjBS3PGzOA1fxMMXtMdS0/dPMiD
8i24PQ8fkz1W/alqVudh/JZ4IMtVadlDWLO1Djxv0dpmpZLTsaJ3UmnnNGkf
+J+xNXzDe5+V1CmZ3/f29KydnFnp+OSbt+8rh6e2AcfmSxFMq+nbqmRmq7YO
Us/8OH1hClK8MCKPYWztvtr0bt+jgrFQxu9mG8WYL0VzG2WVdXQbYtt4BLHV
Zqwska07aE42/FTE1VWfHeFdIcVAUkrHjvpJ1+alr0mSxMMMKSQaeZRHQRqf
mIJskqayR/vbVw30cqau0tTOHdooKLUEPifq8q9vM0Jjs6zTGW8D/M1HAH/K
2Jl9Ak3nnpzmH/kh5EFp8xNDaZZPcdmBvN0zrGa1cy7e/VVg1YGmVjldx6YA
llqPhSVlOs5CUit7ltz4UyFUZc46Ql4LpDsQ29+WMOn3nq0BNxbVI6zhfCQ2
2Al9GuSWBtGLh4NoGktaICpVuC4LJ7JcnP9Yf/vIdJAzdZUEDHl/1uStrtsB
HQf2u/bUrUar2663+rVhq9VutgatAbKO7s1jyfLc86wS67oZBowJceSaEFP1
1949I4Olsl+938ZoiAq7tMVQjWwSjk7DZLKMLlRAgnR6gQPjekQ6Y6UegnLL
snrQJM0w5kN25YQ1LEB+WFYpHxRZGc9e9FCikMUPp9EVpb5Yzyc64sY4NQo3
M9YX4b2VKbCEn/7o85OX4vWbk3+gQf+L0Tf07e7O6cnnL3pXo95p//Tz/v0P
n5+dNrrw9+eDgfz33ehF//PKXXB30u/9/e9XvcV/ffP9fw2++vzL02blH/0B
rOL7b85W//xjpfv95zfz+7+9Xi6GX57/dHQd/fPV9Zvey0GvdzaaxaNgebX+
4Yfu367/8WMUtl/GN7c//PBl583qdnfn9R8votXXX0+up7e95Xly+cXbVTL4
ZvTj3RcvV8uXL/4ZdV/16y//eDfvfbVKfrp5U6ufNlZfRF/LrY1eDj0bU5BC
2UN19kc8cauSTapQN+VeuZcRyOoCc07yq/6XJwP7IMdv70Z337z4Iv6vk5++
rwx6f//mRP572Pv7ZAhHN7r+W9D//IfGlz/8cHv2zT8m38zXPwV/W7Z+iI5G
F7s7Fz8d3TSW/5jNT/55cfdFpf3ifvHlRe+mfzoZfH8R/PSm2rg9v5r+dJn8
7W785cVp8+109dOrL8/i2dVnn9lHkV6ZRZbki0HFsPNgxCKO5pwKIKZKKyrb
iz9Nzr16X+tllPe0EEXnUbTMg91A4hz+W3l0I6ve3meCdcT+QG76tNIdPIcF
6Sxrx+LPf1aaKPMv3ZFfV0n7JbM4JkrVlmqh5fzkOrD1aukhCDFj3+vnw36r
Uu0NR+16pVvrNzvNem3Qq9TH/X6rVR+OGl34olFv1uutcbXZ7PQbXfilVmvX
Wr3aeDQcPpeaKPGXvxzqlR9lXZnxJDr79p50ngpcCHRyNGT2JrHrMSoyjtJ2
5fdmVuy0njtjvntv/WaUDGRptA9GpdThA2kCfWjWm71avzVsjuoDOJIB3GFj
3Kg2hr3uqFrpD2vwXbfbq9e71dYQDq8+GtY7nWqtWWl0qu3eoNGBM+p3Rt1O
YzTA0+o0+8PqoFGtdjqd/qhZr/ar/Wa30ay0O1UgSJXquDWGQdvdXkMf6AFs
Dv+tj1beofZ7ABn02Dq41M+WBhVOr3rob5T2rCEorLuNsRARjeNMZ/+sLVzY
+1/mHq1/CjzaRqPZaDYrtWGj0Wq2W61uq95qPj+0qO2R2COGZUimjj1X2wAj
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

-->

</rfc>

