<?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-08" 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>

</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 
ciphersuites 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-cipher-suites => [ + suite ],
    ? supported-freshness-mechanisms => [ + freshness-mechanism ],
    ? challenge => bstr .size (8..512),
    ? versions => [ + version ],
    * $$query-request-extensions
    * $$teep-option-extensions
  },
  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="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. Each value in the bitmap corresponds to an 
IANA registered information element. This 
specification defines the following initial set of information elements:

      <list style="hanging">
        <t hangText="attestation (1)">
        With this value the TAM requests the TEEP Agent to return attestation
evidence (e.g., an EAT) 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>
      </list>

Further values may be added in the future via IANA registration.</t>
  <t hangText="supported-cipher-suites"><vspace blankLines='0'/>
  The supported-cipher-suites parameter lists the ciphersuites supported by the TAM. If this parameter is not present, it is to be treated the same as if
it contained all ciphersuites defined in this document that are listed as “MUST”. Details
about the ciphersuite encoding can be found in <xref target="ciphersuite"/>.</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 evidence 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 => suite,
    ? selected-version => version,
    ? evidence-format => text,
    ? evidence => bstr,
    ? tc-list => [ + tc-info ],
    ? requested-tc-list => [ + requested-tc-info ],
    ? unneeded-tc-list => [ + SUIT_Component_Identifier ],
    ? ext-list => [ + ext-info ],
    * $$query-response-extensions,
    * $$teep-option-extensions
  }
]

tc-info = {
  component-id => SUIT_Component_Identifier,
  ? tc-manifest-sequence-number => .within uint .size 8
}

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 ciphersuite. Details
about the ciphersuite 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 absense of this parameter indicates the same as if it
was present with a value of 0.</t>
  <t hangText="evidence-format"><vspace blankLines='0'/>
  The evidence-format parameter indicates the IANA Media Type of the
attestation evidence contained in the evidence parameter.  It MUST be
present if the evidence parameter is present and the format is not an EAT.</t>
  <t hangText="evidence"><vspace blankLines='0'/>
  The evidence parameter contains the attestation evidence.  This parameter
MUST be present if the QueryResponse is sent in response to a QueryRequest
with the attestation bit set.  If the evidence-format parameter is absent,
the attestation evidence 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="evidence"/> for further discussion.</t>
  <t hangText="tc-list"><vspace blankLines='0'/>
  The tc-list parameter enumerates the Trusted Components installed on the device
in the form of tc-info objects.  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 tc-info object 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 suit-manifest-sequence-number value from the SUIT manifest for the Trusted Component,
if a SUIT manifest was used.</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="evidence" 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:</t>

<texttable>
      <ttcol align='left'>Requirement</ttcol>
      <ttcol align='left'>Claim</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>Device unique identifier</c>
      <c>ueid</c>
      <c><xref target="I-D.ietf-rats-eat"/> section 3.4</c>
      <c>Vendor of the device</c>
      <c>oemid</c>
      <c><xref target="I-D.ietf-rats-eat"/> section 3.6</c>
      <c>Class of the device</c>
      <c>class-identifier</c>
      <c><xref target="I-D.birkholz-rats-suit-claims"/> section 3.1.2</c>
      <c>TEE hardware type</c>
      <c>chip-version</c>
      <c><xref target="I-D.ietf-rats-eat"/> section 3.7</c>
      <c>TEE hardware version</c>
      <c>chip-version</c>
      <c><xref target="I-D.ietf-rats-eat"/> section 3.7</c>
      <c>TEE firmware type</c>
      <c>sw-name</c>
      <c><xref target="I-D.ietf-rats-eat"/> section 3.9</c>
      <c>TEE firmware version</c>
      <c>sw-version</c>
      <c><xref target="I-D.ietf-rats-eat"/> section 3.10</c>
      <c>Freshness proof</c>
      <c>nonce</c>
      <c><xref target="I-D.ietf-rats-eat"/> section 3.3</c>
</texttable>

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

<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 ],
    * $$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>
</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 1: 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 2: 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 3: 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.moran-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 4: 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.moran-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 => [ + 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 ciphersuite(s) supported by the TEEP Agent.
Details about the ciphersuite 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.moran-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 when there is no attestation evidence indicating that
the error is genuine.  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 ciphersuites indicated in the request message.
A TAM receiving this error might retry the request using a different
set of supported ciphersuites 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
evidence in a QueryResponse.</t>

<t>As discussed in <xref target="evidence"/>, the content of attestation 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-08">https://datatracker.ietf.org/doc/html/draft-ietf-teep-protocol-08</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="evidence"/>.</t>
  <t>Refined Claim Definition: None.</t>
  <t>CBOR Tags: CBOT 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>

</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>version</c>
      <c>3</c>
      <c>selected-cipher-suite</c>
      <c>5</c>
      <c>selected-version</c>
      <c>6</c>
      <c>evidence</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>evidence-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>

<t>If a QueryResponse message is received that contains evidence, the evidence
is passed to an attestation Verifier (see <xref target="I-D.ietf-rats-architecture"/>)
to determine whether the Agent is in a trustworthy state.
Based on the results of attestation, 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.
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 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 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="Ciphersuites">

<t>The TEEP protocol uses COSE for protection of TEEP messages.
After a QueryResponse is received, the selected cryptographic algorithm is used in subsequent TEEP messages (Install, Success, and Error).
To negotiate cryptographic mechanisms and algorithms, the TEEP protocol defines the following ciphersuite structure.</t>

<figure><artwork><![CDATA[
ciphersuite = [
    teep-cose-sign-algs / nil,
    teep-cose-encrypt-algs / nil ,
    teep-cose-mac-algs / nil 
]
]]></artwork></figure>

<t>The ciphersuite structure is used to present the combination of mechanisms and cryptographic algorithms.
Each suite value corresponds with a COSE-type defined in Section 2 of <xref target="RFC8152"/>.</t>

<figure><artwork><![CDATA[
supported-cipher-suites = [ + suite ]
]]></artwork></figure>

<t>Cryptographic algorithm values are defined in the COSE Algorithms registry <xref target="COSE.Algorithm"/>.
A TAM MUST support both of the following ciphersuites.  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 ciphersuite if it has hardware support for it.</t>

<figure><artwork><![CDATA[
teep-cose-sign-algs /= cose-alg-es256,
teep-cose-sign-algs /= cose-alg-eddsa
]]></artwork></figure>

<t>A TAM or TEEP Agent MUST also support the following algorithms:</t>

<figure><artwork><![CDATA[
teep-cose-encrypt-algs /= cose-alg-accm-16-64-128

teep-cose-mac-algs /= cose-alg-hmac-256
]]></artwork></figure>

<t>A TAM or TEEP Agent MAY also support one or more of the following algorithms:</t>

<figure><artwork><![CDATA[
teep-cose-sign-algs /= cose-alg-ps256,
teep-cose-sign-algs /= cose-alg-ps384,
teep-cose-sign-algs /= cose-alg-ps512,
teep-cose-sign-algs /= cose-alg-rsa-oaep-256,
teep-cose-sign-algs /= cose-alg-rsa-oaep-512
]]></artwork></figure>

<t>Any ciphersuites 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>

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

<t>A freshness mechanism determines how a TAM can tell whether evidence 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 <xref target="freshness-mechanism-registry"/>.
This document defines the following freshness mechanisms:</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Freshness mechanism</ttcol>
      <c>1</c>
      <c>Nonce</c>
      <c>2</c>
      <c>Timestamp</c>
      <c>3</c>
      <c>Epoch ID</c>
</texttable>

<t>In the Nonce mechanism, the evidence 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 evidence 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 can rely on the attestation evidence provided by the TEEP
Agent.  To sign the attestation evidence, it is necessary
for the device to possess a public key (usually in the form of a
certificate <xref target="RFC5280"/>) along with the corresponding private key. Depending on
the properties of the attestation mechanism, it is possible to
uniquely identify a device based on information in the attestation
evidence or in the certificate used to sign the attestation
evidence.  This uniqueness may raise privacy concerns. To lower the
privacy implications the TEEP Agent MUST present its attestation
evidence 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 symmetric encryption.</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 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 anchor="freshness-mechanism-registry" title="Freshness Mechanism Registry">

<t>IANA is also requested to create a new registry for freshness mechanisms.</t>

<t>Name of registry: TEEP Freshness Mechanisms</t>

<t>Policy: Specification Required <xref target="RFC8126"/></t>

<t>Additional requirements: The specification must document relevant security considerations.</t>

<t>Initial values:</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Freshness mechanism</ttcol>
      <ttcol align='left'>Specification</ttcol>
      <c>1</c>
      <c>Nonce</c>
      <c>RFC TBD <xref target="freshness-mechanisms"/></c>
      <c>2</c>
      <c>Timestamp</c>
      <c>RFC TBD <xref target="freshness-mechanisms"/></c>
      <c>3</c>
      <c>Epoch ID</c>
      <c>RFC TBD <xref target="freshness-mechanisms"/></c>
</texttable>

<t>(RFC Editor: please replace TBD above with the number assigned to this document.)</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='8' month='February' 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-15'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-rats-architecture-15.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='24' month='February' 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-12'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-rats-eat-12.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='25' month='October' year='2021'/>
      <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-16'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-suit-manifest-16.txt' type='TXT'/>
</reference>


<reference anchor='I-D.moran-suit-trust-domains'>
   <front>
      <title>SUIT Manifest Extensions for Multiple Trust Domains</title>
      <author fullname='Brendan Moran'>
	 <organization>Arm Limited</organization>
      </author>
      <date day='25' month='October' year='2021'/>
      <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-moran-suit-trust-domains-00'/>
   <format target='https://www.ietf.org/archive/id/draft-moran-suit-trust-domains-00.txt' type='TXT'/>
</reference>


<reference anchor='I-D.moran-suit-report'>
   <front>
      <title>Secure Reporting of Update Status</title>
      <author fullname='Brendan Moran'>
	 <organization>Arm Limited</organization>
      </author>
      <date day='22' month='February' year='2021'/>
      <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-moran-suit-report-01'/>
   <format target='https://www.ietf.org/archive/id/draft-moran-suit-report-01.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-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='28' month='February' 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-16'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-teep-architecture-16.txt' type='TXT'/>
</reference>


<reference anchor='I-D.birkholz-rats-suit-claims'>
   <front>
      <title>Trustworthiness Vectors for the Software Updates of Internet of Things (SUIT) Workflow Model</title>
      <author fullname='Henk Birkholz'>
	 <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Brendan Moran'>
	 <organization>Arm Limited</organization>
      </author>
      <date day='12' month='January' year='2022'/>
      <abstract>
	 <t>   The IETF Remote Attestation Procedures (RATS) architecture defines
   Conceptual Messages as input and output of the appraisal process that
   assesses the trustworthiness of remote peers: Evidence and
   Attestation Results.  Based on the Trustworthiness Vectors defined in
   Trusted Path Routing, this document defines a core set of Claims to
   be used in Evidence and Attestation Results for the Software Update
   for the Internet of Things (SUIT) Workflow Model.  Consecutively,
   this document is in support of the Trusted Execution Environment
   Provisioning (TEEP) architecture, which defines the assessment of
   remote peers via RATS and uses SUIT for evidence generation as well
   as a remediation measure to improve trustworthiness of given remote
   peers.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-birkholz-rats-suit-claims-03'/>
   <format target='https://www.ietf.org/archive/id/draft-birkholz-rats-suit-claims-03.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><![CDATA[
teep-message = $teep-message-type .within teep-message-framework

SUIT_Envelope = any

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 = .within uint .size 4
ext-info = .within uint .size 4

; data items as bitmaps
data-item-requested = $data-item-requested .within uint .size 8
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-cipher-suites => [ + suite ],
    ? supported-freshness-mechanisms => [ + freshness-mechanism ],
    ? challenge => bstr .size (8..512),
    ? versions => [ + version ],
    * $$query-request-extensions
    * $$teep-option-extensions
  },
  data-item-requested: data-item-requested
]

; ciphersuites
suite = [
    teep-cose-sign-algs / nil,
    teep-cose-encrypt-algs / nil,
    teep-cose-mac-algs / nil
]

teep-cose-sign-algs /= cose-alg-es256,
teep-cose-sign-algs /= cose-alg-eddsa
teep-cose-sign-algs /= cose-alg-ps256,
teep-cose-sign-algs /= cose-alg-ps384,
teep-cose-sign-algs /= cose-alg-ps512,
teep-cose-sign-algs /= cose-alg-rsa-oaep-256,
teep-cose-sign-algs /= cose-alg-rsa-oaep-512

teep-cose-encrypt-algs /= cose-alg-accm-16-64-128

teep-cose-mac-algs /= cose-alg-hmac-256

; algorithm identifiers defined in the IANA COSE Algorithms Registry
cose-alg-es256 = -7
cose-alg-eddsa = -8
cose-alg-ps256 = -37
cose-alg-ps384 = -38
cose-alg-ps512 = -39
cose-alg-rsa-oaep-256 = -41
cose-alg-rsa-oaep-512 = -42
cose-alg-accm-16-64-128 = 10
cose-alg-hmac-256 = 5

; freshness-mechanisms

freshness-mechanism = $TEEP-freshness-mechanism .within uint .size 4

FRESHNESS_NONCE = 0
FRESHNESS_TIMESTAMP = 1
FRESHNESS_EPOCH_ID = 2

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

query-response = [
  type: TEEP-TYPE-query-response,
  options: {
    ? token => bstr .size (8..64),
    ? selected-cipher-suite => suite,
    ? selected-version => version,
    ? evidence-format => text,
    ? evidence => bstr,
    ? tc-list => [ + tc-info ],
    ? requested-tc-list => [ + requested-tc-info ],
    ? unneeded-tc-list => [ + SUIT_Component_Identifier ],
    ? ext-list => [ + ext-info ],
    * $$query-response-extensions,
    * $$teep-option-extensions
  }
]

tc-info = {
  component-id => SUIT_Component_Identifier,
  ? tc-manifest-sequence-number => .within uint .size 8
}

requested-tc-info = {
  component-id => SUIT_Component_Identifier,
  ? tc-manifest-sequence-number => .within 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 => [ + 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
evidence = 7
tc-list = 8
ext-list = 9
manifest-list = 10
msg = 11
err-msg = 12
evidence-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 = /
[
  1,  / type : TEEP-TYPE-query-request = 1 (uint (0..23)) /
  / options : /
  {
    20 : 0xa0a1a2a3a4a5a6a7a8a9aaabacadaeaf,
            / token = 20 (mapkey) :
              h'a0a1a2a3a4a5a6a7a8a9aaabacadaeaf' (bstr .size (8..64)),
              generated by TAM /
    1 : [ 1 ], / supported-cipher-suites = 1 (mapkey) :
                 TEEP-AES-CCM-16-64-128-HMAC256--256-X25519-EdDSA =
                 [ 1 ] (array of .within uint .size 4) /
    3 : [ 0 ] / version = 3 (mapkey) :
                 [ 0 ] (array of .within uint .size 4) /
  },
  3   / data-item-requested :
        attestation | trusted-components = 3 (.within uint .size 8) /
]
]]></artwork></figure>

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

<figure><artwork><![CDATA[
83                       # array(3)
  01                     # unsigned(1) uint (0..23)
  A4                     # map(4)
    14                   # unsigned(20) uint (0..23)
    4F                   # bytes(16) (8..64)
      A0A1A2A3A4A5A6A7A8A9AAABACADAEAF
    01                   # unsigned(1) uint (0..23)
    81                   # array(1)
      01                 # unsigned(1) within uint .size 4
    03                   # unsigned(3) uint (0..23)
    81                   # array(1)
      00                 # unsigned(0) within uint .size 4
    04                   # unsigned(4) uint (0..23)
    43                   # bytes(3)
      010203             # "\x01\x02\x03"
  03                     # unsigned(3) .within uint .size 8
]]></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 = /
[
  2,  / type : TEEP-TYPE-query-response = 2 (uint (0..23)) /
  / options : /
  {
    20 : 0xa0a1a2a3a4a5a6a7a8a9aaabacadaeaf,
            / token = 20 (mapkey) :
              h'a0a1a2a3a4a5a6a7a8a9aaabacadaeaf' (bstr .size (8..64)),
              given from TAM's QueryRequest message /
    5 : 1,  / selected-cipher-suite = 5 (mapkey) :
              TEEP-AES-CCM-16-64-128-HMAC256--256-X25519-EdDSA =
              1 (.within uint .size 4) /
    6 : 0,  / selected-version = 6 (mapkey) :
              0 (.within uint .size 4) /
    7 : ... / evidence = 7 (mapkey) :
              Entity Attestation Token /
    8 : [   / tc-list = 8 (mapkey) : (array of tc-info) /
      {
        16 : [ 0x000102030405060708090a0b0c0d0e0f ] / component-id =
               16 (mapkey) : [ h'000102030405060708090a0b0c0d0e0f' ]
               (SUIT_Component_Identifier =  [* bstr]) /
      },
      {
        16 : [ 0x100102030405060708090a0b0c0d0e0f ] / component-id =
               16 (mapkey) : [ h'100102030405060708090a0b0c0d0e0f' ]
               (SUIT_Component_Identifier =  [* bstr]) /
      }
        ]
    }
]
]]></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) uint (0..23)
  A5                     # map(5)
    14                   # unsigned(20) uint (0..23)
    4F                   # bytes(16) (8..64)
      A0A1A2A3A4A5A6A7A8A9AAABACADAEAF
    05                   # unsigned(5) uint (0..23)
    01                   # unsigned(1) .within uint .size 4
    06                   # unsigned(6) uint (0..23)
    00                   # unsigned(0) .within uint .size 4
    07                   # unsigned(7) uint (0..23)
      ...                # Entity Attestation Token
    08                   # unsigned(8) uint (0..23)
    82                   # array(2)
      81                 # array(1)
        4F               # bytes(16)
          000102030405060708090A0B0C0D0E0F
      81                 # array(1)
        4F               # bytes(16)
          100102030405060708090A0B0C0D0E0F
]]></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 = /
[
  3,  / type : TEEP-TYPE-update = 3 (uint (0..23)) /
  / options : /
  {
    20 : 0xa0a1a2a3a4a5a6a7a8a9aaabacadaeaf,
             / token = 20 (mapkey) :
               h'a0a1a2a3a4a5a6a7a8a9aaabacadaeaf' (bstr .size (8..64)),
               generated by TAM /
    10 : [ ] / manifest-list = 10 (mapkey) :
               [ ] (array of bstr wrapped SUIT_Envelope(any)) /
             / 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) uint (0..23)
  A3                     # map(3)
    14                   # unsigned(20) uint (0..23)
    4F                   # bytes(16) (8..64)
      A0A1A2A3A4A5A6A7A8A9AAABACADAEAF
    0A                   # unsigned(10) uint (0..23)
    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 = /
[
  5,  / type : TEEP-TYPE-teep-success = 5 (uint (0..23)) /
  / options : /
  {
    20 : 0xa0a1a2a3a4a5a6a7a8a9aaabacadaeaf,
             / token = 20 (mapkey) :
               h'a0a1a2a3a4a5a6a7a8a9aaabacadaeaf' (bstr .size (8..64)),
               given from TAM's Update message /
  }
]
]]></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) uint (0..23)
  A1                     # map(1)
    14                   # unsigned(20) uint (0..23)
    4F                   # bytes(16) (8..64)
      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 = /
[
  6,  / type : TEEP-TYPE-teep-error = 6 (uint (0..23)) /
  / options : /
  {
    20 : 0xa0a1a2a3a4a5a6a7a8a9aaabacadaeaf,
           / token = 20 (mapkey) :
             h'a0a1a2a3a4a5a6a7a8a9aaabacadaeaf' (bstr .size (8..64)),
             given from TAM's Update message /
    12 : "disk-full"  / err-msg = 12 (mapkey) :
                        "disk-full" (text .size (1..128)) /
  },
  17, / err-code : ERR_MANIFEST_PROCESSING_FAILED = 17 (uint (0..23)) /
]
]]></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) uint (0..23)
  A2                     # map(2)
    14                   # unsigned(20) uint (0..23)
    4F                   # bytes(16) (8..64)
      A0A1A2A3A4A5A6A7A8A9AAABACADAEAF
    0C                   # unsigned(12) uint (0..23)
    69                   # text(9) (1..128)
      6469736B2D66756C6C # "disk-full"
  11                     # unsigned(17) uint (0..23)
]]></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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
XwYglw3C8B1opNH8gB094jRYXIfi2zAU+ychSdUHyuodcN5kVoCIOEu559US
w+xJNH6tCPn+q/Po9YGSgoB+zejZ3lQq1SQoKCqSuBFSOumXRW/ybhHezvzp
FV+f+23GCA7jDB1muHRlt4/XV1j8WZMw33AeZAblgvG+DGEHxEkcgpS1f/6m
d3by6ugMlQdY5Je4fu+dd+fNPdhi+nZ358v1Irjz4rU4W//ivQt0r97J2Tke
Srx+58WeeKV/kWfw7Rq2LMABg5U1nDkFvPgkrafi0S99f4rIlFwGkcvkWgZe
hLmdRR+ZymJBs77wEYOC6N11OPvFOvJrf7Y0WI0VRrjAyTMxKJO6pSuP5JzP
1/QoOhksyhFmU86cE6bCB6iKCZm4pjrFC9pc/J8pwRBJE/+TqJj3P7QC/k5r
gD+caHnhf1A70G66jK09FRydDrpTPt/Pxf+1/+YIyrLSbOxfLlHgvA0jutYJ
SGEQb3GnQ98yHZJ1WOzyH+JITo8/mbIhqbIs4i/Cqi4i64n8hQb6D0uaUBlg
+B0NHjbudylY+chzJWelCFYJqBzvc7FPMH3+N1wGUbD/MKeqojkpZTpwf8d2
HX0uVOI86UEubqTeNrlbqYB69692nbHCNj47oK21sKDGuIyviRNlWEx1nMRS
YHOqrh9lRNHnomb/Kq0An4u6/W2qqFsz85sq1tOyCibAnwoLCVAurtPAC7Mq
oeSY2wBXzJZoOHh6tHERrDB10O6OAx/wAri+dozdAZ3P8j7Szjj7whEkPG9S
Ny5ZuUBp4/I6Z9vTsmXmbejbyO9rl97Z3UmfpbMcUqLRIyrq3avO0ccoc/Sf
VthNFrRmtWZg21QOCSsYJfYhVcNouxpHjjM5LiBC/5GIYOXyGh8pkn9DIL9N
BT9e+PW/ZcDxpw4CRzSwHqVo9h6n3xGwaSv1mECpmhj8ah8aYFGpbX+JJ4Rf
dqwvl6plvZ34Fnafvk22hd2gb7vWt/bO4o+NqutH2bNRs35M7hgS04r1q9oe
Zhe4Re4CRJi4JksfgKQTdXP9lsczTBDXy1cvByMYo2J/eX5yOjo7752+ZrJv
fhi9fjV48QNoZUTRgS7nzgzHn5pk69Z69q17KLBsJqB5diEXkLlaHsEGnJna
oA/9I9tMM/y/Kaqs26STkslKe5nfFUT6B5VsTFJ7+JNEBsM4sinMZNPED6lO
mVxmsk+uiG711fngZB8txrg4EJ/Bw8rIAumZKAHpvXIM66xqMHsutDTJfxZm
VoPubsGIlKLs3v2WIGBHO9Mb4kSIGZIJNi2aOpFfll5/ONInU/jJM+b2ZIhO
6kv2mfPUDz7r/8UFk59KfW4n2/6RSn0iKz+/dpUvSyukrlpgxHvzqzQRC94q
Ops01KI6PaRjFVe4IdHEVQWGFNm8SiWfi667GghLQBsKZ0CjNm/ijDPmYgCP
t8TwXDJuwcFobd94CNNbm//kFcU3o1Lhdhrkwi3L4e24E1l+jttgOLRoE2di
+oj02nBE3JIUAaXNoBsnqlVdXhT/qplBtVggqvUU91GjNDDXR5pri2qT0qJY
PElUWwRePtuhnU/wF1HtJEsi4lddWSYWd6+y8W0CNKqaN43PxLAsRhxlQUc7
NCVSX4bS7IBGwT5D8MaXwb7SzuC0VCZeA+jnjPTCzldTaUuo9aI0jtfzpfJE
7u6U6NrK6Gl6WMf5HW9DcT5wjkARfyZ0xTD5mJyEJfHf34nKz5VKpVqpVeqV
RqVZaVXalU6lW/EqF5VJZVrxK5fiv7+3Wle3aV1KBhvyodMmrARGi8mAVjuk
Rddfohdjuqz0SIXHexPKpWrCw+TOHUgv4LBcLSff1Jyq50HOQ3km+0Avyn/t
OOicnowrRyJt2Tna3SEGWD0UoOKTpS/XxoN4Km2ekiYcYH/sKBkk9KUvJJus
VeCLys9exat6Na/uNbym1/LaXsfrep534U28qed7l4pHyM+RMDdB7DOZOhDH
yUZCXD/fNO5zsZ9lzgeH6YFMwooLTtp1xC2qAPx38P+/PwSQCmhfAYyCC6GV
eqOz0mBwahTX0ovT3gAU1RJqq6V/1ZrNarc0mg7PeuJzxyAEhtinnOZ4wV3a
6IGCu05wV6DDkTBEtV4MJnfYagZm1nU6KZc10Rretnv+6rBPMlwuuZzmsvIn
KMyvScy/DynjMTr1zKL584xzxVO9QSEq1ZxGKjn8fvUgxReF6DVyOsGWU+k+
widXI2vcWiU7sBCNsbMXVaXer7YOFF6rTe9VetVerVfvNXrNXqvX7nV63V6v
1+8NesPeqDfmds5VFq9RiI67E+9eVUPgGDs5stOUQj1dR2T1rT8GqkrRyJUi
qDacW8N5bO6l8LHVrb1CtpRqtPffP1eq8H81+L/6HiGlG3eTW+NWb80FgvsD
tye/6FK+GBBQPa7bBTuz0LBId9CqxI4SFSZopAdC6En27mahNzUPS3Z3yASp
RiqbO117BDfzvVWJalGUkEkTN5Os54jCR0EAO3LsW/VY7P0Y+nuHqq1+Hiz2
A291YHdqHYvqfrVZazUbtU5X3bMj+TDZOXrlGJhTt9G57HRalWkV+FOr7nf8
53o6CmgBgTAMV6kRqs1jSreom079i/VVCU9qHSfbVgGyOrKmaRCjA3xawiQO
3oJf4R4l5oITL838G39mD1FtyAEkOJGMjEKHkJkeBbeSFW1GA/z1vD/8G67S
73Zblcp02q1VW41uu9u5qFTrfrfdrE0nl5VJ06z5xsdCLvkj1S4q9U67e1Gv
N+oNrz3xWp3aRce77DQm1e7ltPH8UKih4MRBHE6PZIbqtqsgEbS7rYtprdEk
+eCicdlttycXnUanfWmAmlwHS614JHa31kImund6B/x775CkAN3J0gAsEPT0
rUqnVut02tN602/Up82LVqU+rXYuJp5Xv6x0pvaeOGbWC9m7qZSre2SHSlzi
ejmVw2obmbH+EWRGbQhWQmOtWGg0zt5/R6mREhjRCzaQGZ/H7qfx8iI1YUUs
YedqwgUwP16ErDqFLCMytnDHk/BZ6ngBaJUNA7dh4HK5DAPbGn3BgLkF3eSA
HRJu6biNUcAazxJhpTFZw6IRjHakxVLyZkXy+9SVdwjoVXuLYNTr55tGfS6+
z4yyn+8P+BwE9L+QpfF7azkfDosWtlHnfdDCNo36cRZmhpCjfXAoA/XHKAM1
4f4owbHGyoC7mS20O5SBZk4nVAaaf0RlwAWwBUvTBcoWGoTbZ0qdW8WdW84Z
sxJ8WoYvmLFd3LntmlEQ7cp0yhehaaZO8UwdpxLjQrQkLlIzl2qV1nQcaGKh
iH07nVSqV+lXBpVhZVQZf6JpnTQkMW1C3mmUVb7QbQSdxiMEHe3sUwJO3S3g
mHi130Cw2Vay+XiiTb5FrEJcABlH1u5eBNp3CdsSwXAbecslzJDwcO5jIKXF
CPQOkP31MG13ZYPskXHtJRlE4zdgENso5hkGkdcJGUT9j8ggesWwVJ2wdNz0
mrcPS9gnbnmzrFMub3PNm4+45innt7rsTfdlT4eh/pte+bQ6k8ronXvJmr/B
JcsTqIoklF6eHRcvWfUPdskSN6FVlkm1t7kHrcfeAxUGoW5Bq+AW6IDrT38H
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

-->

</rfc>

