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


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

]>

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

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

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

    <date year="2024"/>

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

    <abstract>


<?line 108?>

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


<?line 116?>

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

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

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

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

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

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.
<?line -6?></t>

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

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

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

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

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

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

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

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

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

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

    QueryRequest ------->

                           QueryResponse

                 <-------     or

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

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

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

             Update  ---->

                            Success

                    <----    or

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

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

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

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

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

teep-option = (uint => any)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<t>Pros:</t>

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

<t>Cons:</t>

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

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

             Update  ---->

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

    and then,

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

                     <----

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

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

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

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

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

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

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

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

<t>Pros:</t>

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

<t>Cons:</t>

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

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

             Update  ---->

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

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

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

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

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

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

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

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

             Update  ---->

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

cose-sign1 = 18      ; CoAP Content-Format value

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

</section>
</section>


  </middle>

  <back>


    <references title='Normative References'>



<reference anchor="RFC9052">
  <front>
    <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
    <author fullname="J. Schaad" initials="J." surname="Schaad"/>
    <date month="August" year="2022"/>
    <abstract>
      <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
      <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="96"/>
  <seriesInfo name="RFC" value="9052"/>
  <seriesInfo name="DOI" value="10.17487/RFC9052"/>
</reference>

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

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

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

<reference anchor="RFC8949">
  <front>
    <title>Concise Binary Object Representation (CBOR)</title>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
    <date month="December" year="2020"/>
    <abstract>
      <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
      <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="94"/>
  <seriesInfo name="RFC" value="8949"/>
  <seriesInfo name="DOI" value="10.17487/RFC8949"/>
</reference>


<reference anchor="I-D.ietf-cose-key-thumbprint">
   <front>
      <title>CBOR Object Signing and Encryption (COSE) Key Thumbprint</title>
      <author fullname="Kohei Isobe" initials="K." surname="Isobe">
         <organization>SECOM CO., LTD.</organization>
      </author>
      <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
         <organization>University of Applied Sciences Bonn-Rhein-Sieg</organization>
      </author>
      <author fullname="Orie Steele" initials="O." surname="Steele">
         <organization>Transmute</organization>
      </author>
      <date day="6" month="September" year="2024"/>
      <abstract>
	 <t>   This specification defines a method for computing a hash value over a
   CBOR Object Signing and Encryption (COSE) Key. It specifies which
   fields within the COSE Key structure are included in the
   cryptographic hash computation, the process for creating a canonical
   representation of these fields, and how to hash the resulting byte
   sequence.  The resulting hash value, referred to as a &quot;thumbprint,&quot;
   can be used to identify or select the corresponding key.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-cose-key-thumbprint-06"/>
   
</reference>


<reference anchor="I-D.ietf-rats-eat">
   <front>
      <title>The Entity Attestation Token (EAT)</title>
      <author fullname="Laurence Lundblade" initials="L." surname="Lundblade">
         <organization>Security Theory LLC</organization>
      </author>
      <author fullname="Giridhar Mandyam" initials="G." surname="Mandyam">
         <organization>Mediatek USA</organization>
      </author>
      <author fullname="Jeremy O&#x27;Donoghue" initials="J." surname="O&#x27;Donoghue">
         <organization>Qualcomm Technologies Inc.</organization>
      </author>
      <author fullname="Carl Wallace" initials="C." surname="Wallace">
         <organization>Red Hound Software, Inc.</organization>
      </author>
      <date day="6" month="September" year="2024"/>
      <abstract>
	 <t>   An Entity Attestation Token (EAT) provides an attested claims set
   that describes state and characteristics of an entity, a device like
   a smartphone, IoT device, network equipment or such.  This claims set
   is used by a relying party, server or service to determine the type
   and degree of trust placed in the entity.

   An EAT is either a CBOR Web Token (CWT) or JSON Web Token (JWT) with
   attestation-oriented claims.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-rats-eat-31"/>
   
</reference>


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

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


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

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


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

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


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

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

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


<reference anchor="COSE.Algorithm" target="https://www.iana.org/assignments/cose/cose.xhtml#algorithms">
  <front>
    <title>COSE Algorithms</title>
    <author >
      <organization>IANA</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>

<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>




    </references>

    <references title='Informative References'>




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

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


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

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


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

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

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


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

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

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


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

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

<reference anchor="RFC8610">
  <front>
    <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
    <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
    <author fullname="C. Vigano" initials="C." surname="Vigano"/>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <date month="June" year="2019"/>
    <abstract>
      <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8610"/>
  <seriesInfo name="DOI" value="10.17487/RFC8610"/>
</reference>

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

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

<reference anchor="RFC9334">
  <front>
    <title>Remote ATtestation procedureS (RATS) Architecture</title>
    <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
    <author fullname="D. Thaler" initials="D." surname="Thaler"/>
    <author fullname="M. Richardson" initials="M." surname="Richardson"/>
    <author fullname="N. Smith" initials="N." surname="Smith"/>
    <author fullname="W. Pan" initials="W." surname="Pan"/>
    <date month="January" year="2023"/>
    <abstract>
      <t>In network protocol exchanges, it is often useful for one end of a communication to know whether the other end is in an intended operating state. This document provides an architectural overview of the entities involved that make such tests possible through the process of generating, conveying, and evaluating evidentiary Claims. It provides a model that is neutral toward processor architectures, the content of Claims, and protocols.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9334"/>
  <seriesInfo name="DOI" value="10.17487/RFC9334"/>
</reference>




    </references>


<?line 1958?>

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

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

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

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

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

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

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

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

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

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

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

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

teep-option = (uint => any)

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

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

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

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

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

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

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

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

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

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

cose-sign1 = 18      ; CoAP Content-Format value

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

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

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

; freshness-mechanisms
FRESHNESS_NONCE = 0
FRESHNESS_TIMESTAMP = 1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<t>COSE_Sign1 Cryptographic Key:</t>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<t><list style="symbols">
  <t>SUIT Profile: suit-sha256-es256-ecdh-a128ctr (see <xref target="I-D.ietf-suit-mti"/> Section 3.2)
  <list style="symbols">
      <t>Algorithm for payload encryption: A128CTR (-65534)</t>
      <t>Algorithm for key wrap: ECDH-ES + A128KW (-29)</t>
    </list></t>
  <t>KEK (Receiver's Private Key):
  <list style="symbols">
      <t>kty: EC2</t>
      <t>crv: P-256</t>
      <t>x: h'5886CD61DD875862E5AAA820E7A15274C968A9BC96048DDCACE32F50C3651BA3'</t>
      <t>y: h'9EED8125E932CD60C0EAD3650D0A485CF726D378D1B016ED4298B2961E258F1B'</t>
      <t>d: h'60FE6DD6D85D5740A5349B6F91267EEAC5BA81B8CB53EE249E4B4EB102C476B3'</t>
    </list></t>
  <t>COSE_KDF_Context
  <list style="symbols">
      <t>AlgorithmID: -3 (A128KW)</t>
      <t>SuppPubInfo
      <list style="symbols">
          <t>keyDataLength: 128</t>
          <t>protected: &lt;&lt; {/ alg / 1: -29 / ECDH-ES+A128KW / } &gt;&gt;</t>
          <t>other: 'SUIT Payload Encryption'</t>
        </list></t>
    </list></t>
</list></t>

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

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

      / NOTE: fetch encrypted firmware /
      / directive-set-component-index / 12, 0,
      / directive-override-parameters / 20, {
        / NOTE: encrypted payload and encryption-info /
        / parameter-content / 18: h'6D5BE4F569E98AE01F38B071EF025437B742FF28854AB32C868BC6A76CD33B5CA112FF22BA95EA4672B7199C89A7829183794A21A6BE345C4371DCB0DC',
        / parameter-encryption-info / 19: << 96([
          / protected: / h'',
          / unprotected: / {
            / alg / 1: -65534 / A128CTR /,
            / IV / 5: h'67E3BA7CD42D02BBC39C508B5EA0F1C4'
          },
          / payload: / null / detached ciphertext /,
          / recipients: / [
            [
              / protected: / << {
                / alg / 1: -29 / ECDH-ES + A128KW /
              } >>,
              / unprotected: / {
                / ephemeral key / -1: {
                  / kty / 1: 2 / EC2 /,
                  / crv / -1: 1 / P-256 /,
                  / x / -2: h'F2452399667F57993B14C5F1107F667884854C190894FC08531C1E2290A7BA19',
                  / y / -3: h'275EDDE29FD75C9393AFFA706F8FAD3C49D03D67D47F8B0C027BE5F0BCA884CB'
                }
              },
              / payload: / h'7D806DA1ACEC6F704D803F0CFE7420525C81E1957699FCCE'
            ]
          ]
        ]) >>
      },

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

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

<figure><artwork><![CDATA[
A2025873825824822F5820FE6CF752367398A8BEBF0EE521242560FF495C
BA08883AEDAF8CC4DC5E0DA444584AD28443A10126A0F65840DEA71FE757
D211B86796EDB058A82F85F93DD95B5494AEC284E19330E376BFDDCAFA97
D336F776890ED37B7B068904AD92E0F1657FE3935D78B4AB083ACFCA0903
590242A801010203035886A301A101A101844B544545502D446576696365
485365637572654653508D82573A926D4754935332DC29997F7444737569
740281834B544545502D4465766963654853656375726546534B636F6E66
69672E6A736F6E04582D880C0014A20150C0DDD5F15243566087DB4F5B0A
A26C2F0250DB42F7093D8C55BAA8C5265FC5820F4E010F020F05834B5445
45502D4465766963654853656375726546534B636F6E6669672E73756974
075831860C0014A2035824822F58208273468FB64BD84BB04825F8371744
D952B751C73A60F455AF681E167726F1160E183D030F0F5872860C0114A3
035824822F5820EF53C7F719CB10041233850AE3211D62CEC9528924E656
607688E77BC14886A00E19018515783D68747470733A2F2F6578616D706C
652E6F72672F38643832353733612D393236642D343735342D393335332D
3332646332393939376637342E7375697415021158D88A0C010B000C0014
A212583D6D5BE4F569E98AE01F38B071EF025437B742FF28854AB32C868B
C6A76CD33B5CA112FF22BA95EA4672B7199C89A7829183794A21A6BE345C
4371DCB0DC13588AD8608440A20139FFFD055067E3BA7CD42D02BBC39C50
8B5EA0F1C4F6818344A101381CA120A401022001215820F2452399667F57
993B14C5F1107F667884854C190894FC08531C1E2290A7BA19225820275E
DDE29FD75C9393AFFA706F8FAD3C49D03D67D47F8B0C027BE5F0BCA884CB
58187D806DA1ACEC6F704D803F0CFE7420525C81E1957699FCCE120F1818
4A880C010B000C0018210F
]]></artwork></figure>

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

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

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

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

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

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

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

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

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

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

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

</section>
</section>


  </back>

<!-- ##markdown-source:
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
xOkyiFQNPnNQRPbMy/OpY6R7PAl8yJ3323vwvrzfLngaHnAuzDN+oPDhqZ35
JAjY0Gn0BJ0xhS7sLVZFX5nklmRyG7htkJ7hApzMxmH8nl3DE/c9opsGSxvS
SwcdDc4lIb0WL+0Iaf1uD0XO8gmUuVYxFM+EqlDrw3P6y8+EW+cyFxl0JjEN
x9KNrkWpx8O1UTt5mkzSWW6N2+VQybkJrLXTDVIvJx5e9SdPYS6pM0me0IRn
lELU67o4lLTaKgUdmrK0VVoxoBud90c/ljSFy1xfG9VyGJxnUo7TflhJ7yfz
RVp8mdtI/qUEPriANZPj7aZXzfwUNKEsyueYj+AqFXup87gxp+uba2ZpVCb7
mzfNu1MaRJdVqwQmc6PIGkyZKatbupjEnH6J1C9OTEd8Wky1eNzbwNDnsZ18
jCJsJM+um6tSp0XzPNQkuqTYAq9eUtXZSLXAvOWUFkA5vUyNZPLvMtARr7IE
37AGlpGuokx0BTVdbVolWbXvNLoe+dHA8eDABoJlaLHeiNkvuoKvQ09VIk+x
t53nxYZV3HejGk8mWfTYPhmIYUHw9bmDAviS3E1tTMFWzBBUgiG9PzIf14Kv
JaGP04+TSGnZF3M+4kja/G2ABAMw4zwevBoOzl+f/kiwFapq5bSd8RV8fYJ2
sMHL4Gvra2STVph+OlduV0QQvG9vkVC8PY+uroS3k9Ek+Fowp2KdJX2NB2ku
ERb/4ipysmob8lg/MCTtkD6s8O/QWb5+U9IXT2BNX/r6jUxcdurUf83S3pR3
19OvWR2WwiseC56CS+7tzMMGmxDuwdfmpN3zs/vlj06s68HXxaOjT6T6cl1/
ilGJQWAASc/8+Jnm18AtBifwH8p2VD3k2BIykHl3V7ad4uq1KSX4Ood/tpSj
DDxHg1cDJv0WR1zEVyCXL+7V4s3JPw+rPVz86GB4NgjvdkJRnYIcdkG7PrWb
QDt5iTgit46+pmSvYqeYQ+Oprh7c+Hiq0oMBu45ojdW8tVNprk3z+rDeaYLa
xb4ayXqmAkrEwK+XoPyPkbE3uezL5PB3FWYcrQxmsAz8qqa/wtWkdrEjmJ6K
LdEa9WJ09iq2HMlZE7NVLzEdUqaWE12kt3FNJ1O2rU8KjSVgN7D0YwQwhjig
i0nclcxQoU0+CM3JleV4OL3nxx4cPMVrEPHuKEWoxZ0SEIJ4o+nCaxa0iSfb
kC289QM/0MBHpBKEV9IX6/GYsZousajBCmxHnpkx+wlpbPqea9LMMyMmZfZc
GCpgnw6l2cpXBlAFKSiogFAzmmJaUUvewuOQLMOhnWU4iLIsHbOjMZcE1LzD
tJMNXmIq0tUi4VQemBdHMX9EeVWCJ8H5Jc+IJdsil+QMuVoasV2GNQc9dG5V
Y/rgF8CSMjLL2XZVGBhZaikkZBHNOVuUXnJCK1YiovILEt4WGgc6HicPVzLL
WidkyUUsPElwu0SNJ/PAVlxNYCYyaw5QlPpfkiKUPquE15z3y+QeDPILUb5u
E55ekPaUydOuXoysxkk2rCC9W+sXX1ufr6cQOl936siHln1xGt1TCZ/VMuCT
sxs6ZjURYFVJCuPuUO7nvF1ERfBXzYi4Zs6pqA4SMIazavqTlfosaYTnOu8Z
Lwvv3qGoUapElM/ZV1FhGAraFAeRGhPPOHw3T++m8QTfceoQPivAU4V9+D1L
KnDRfvrM6IQGbXGRamw2RcOcV5LhdTJfbrOtSzsprSRNhkI12MZkkXg+dgcl
pDSS+Ly01sckjquUKklYm2uzSqASoFFchuGJKs+NZPorsijX4ri24KlJcZ8W
wVkJMy6L57IiGVDZo8zWZ0RHxfYcma1oO6R+uEHSf+l5Swp5m7nlbAqyBIBR
wnzEgq2cpd1be37s3Qm+FiyqEs/vcQ45pWq8nvxAEZhkaWKWvGdkuKOyPXDA
Ci0JI9KWhdLp3lRbVjQru6lU5bdCTVq3+KPPoEAl5DGhNw7sOP4o+XyROIg5
zzVj5Kkw5473DKpMOZFjqMl5LTnnXiboJPmSxdYGlPnF6+9fDhXBRKgbnwW+
P4tUXnFYdULvygdO3DN6OxZxtFQuIOW+QLNoqh6jBYmbJ73wDKpQHIUdNQuO
7k+kslk6tWwTgabqshKCTn43sFyurGa5m5396AoGyuYXSBpXZpnyB2ZaRuq9
XCRAh5B+j+AMsSLltHqG0sE4HCaXwAmrL+LpFDAz3BqdVYcvdCrpQLliHBmo
Zrtiwn6tU+vQNgY39Grjfbif1w4MK1G1MraOikUgvVwrX7OTBEdCeMwGEbnl
AYxsVGsyiCgZh8mjTtuTPMljBAU30SKN5VKzmDEJ3UFkwP/MblkLX3hjFuxX
UgDHmxRDGDKLufMQAYVgmmhvB7idvIxXwpQRRzC1Gt9xNpNascV2LkjNcdDo
Hs2XmY6TYIh87TrfdEKzQNq7Ph0XC9xjFyHJtSuR1GPsiup4Qemshi/pu/pe
+IKyc6jMxMawrem5qPHhyBwSpt3eOhh9h69fw+x+NsPoRj4gKcGXNy4reqQs
ukytZWQ7k8hEcrbX9Bobe5iQXx6IjM5o8h8WmHRfc+ulFvz46sIs6Qw0DeNg
gcXqHcEScYz8fr6D/cD0C/P2gDBYkkVfqJJl6kGWs20E7SVlcdbZTV98NzwU
nwORBhxYHr+u5mOlFVOqdx21FJtjy1TCVF6FJOeF37/7gYCIw6useBp/4D7r
nHgHw+FLnzkBExq1MOffZiTBSV39fumEVxrMshIn2fN468+WzKOs0MoFa5x6
s3RipXc/FxX5LQDg7QGvqoZZ/U9WF0ewuBpzdStHzYV+4fnE5gbm/J9wBtko
yLEtcxkQCvmxkEkWx5hbRVy4MxGEYIMls396HN2QaKp9JeQ/gANkiQ0/ZYxQ
twewK3AYj7kXOgn7usqzrszkky5cp4kSNGxoZcKe8yYekqodAUlhCpXStR6l
SakLtuHPC8g5WyaUIvlhS5CtJvDMgWyNpvy9W4Y2tApZZswSK09orDyCpZ9g
6DEelEJAVvB1MaYs+FMxzGznObfLrqNmp8um1mo8nlxXo0azP14uNumEdtdH
d3JnuhrPHjcTKP7wT/Umnd7rdHN2GJKuMhEeG0/gh6feMgpo//QmJTZvgK7x
Ub5+0LUEIVHH+eXiKJWNQnlWPfWciB/hfE5+Bi2O3GGaWf1MH7kuZgrOCXia
YzTq+VTlYu8uKSivTdMTQ8w5CS1TZV2/DEtPSxDJMg2gGRnsGbPJx+mbgIJH
jXXfNQBmmkwVMuQvVBmHKiUi5vRRVUrinn38uF3LsVJPbllvuVkTAaLNmvTE
hgQN8WxeFMrz7tlXy6QU/zr0YU9gKve+ev3qYBQ+D+vWZ+dHxxiqfnxCmSqD
P3mGQCzPDbJBOz2woP9gng9ldQgwAovzNJvxiG8CcSp6nQKzP87m7+nOIpEP
9WliVX1Vnps796FgtXJC8fHbQlJ+zuevVSAquBMUxuGnZTJGrhaAYreSK0+9
Es9n0o7MV4EVm43xLhZiScr3YiyByS9j7Slj07o29xYBYAdUuT1NJ5GXPQH7
GvKXlGACK5ZLAuiAavhpZFJJ0+j5nFiQDOHxXiFSC1WgrZUTRK0xkED8Summ
mKGrGqQStcClG1WKEjWY3HOnEoBbFRDUB1WwTmojAmOn4p/Om1vrJdzNIkG2
nPwcO4Y6yjHynnEUO4qUp4owPPB+pDRjIGXvKz70ME9ZVF5uTZL5nfUm5cDJ
ShcUUtvZD6u9NkLfvBSpdqbcHjlC/eGpNo0r4VRId7aazUD7/VkmK3P1OJwK
WVngSLdAYD/shbfZTTSOnz+rP/sYHDjeT8u/tpcL1Xko3s16aGMZzEMV7LRk
VGIbGXlLQ4/wbUJmWCEt8c1mzqNeHi08MYYTEp9x7hWa6pZW9TzLOJHPn2ra
6kxvUvWL0mNgdtUIdVPr6cSeLreqli2WQl+OfHvJJuIbw6DjhFBEFyTRSfeL
7pZS8gfDbF2oHrknKSqXhHmdpGaS2+SjaFS9Kcpn10JwXMVLooX6PbRnt9vC
KdRWsAByMXBRYgIVYV1TWcBaIQxl1lis2HkmclDZDWEyhNWfdfqvXD4XFTEG
Gt12STA3aFzE9QEngGuLX20J8FA1tJDg2RGadrhyFj+wpbllgZdsESKQYvpc
+Ds2njg4//SyCv8Y4x6eGyZcicYi5zoPARLbASDQzVfgwL9V2QFcG8fE1pwA
+GLce2mBPMpmSLpxuL6CXv65FLT3w78YfrmPSbUxLHkvJCG82ELSbifuy4uy
QM5aeLQ0Nm+pq5sorwJjkATpwO2PhLtKilxv3jricEhlUiTjniYyMz7pGQJB
oZLIcguLbQtxprLYefmK+X1OaPkp9B2xGGw+XQI9cAo1nUGMMs7spTcUliFd
Me5j28E+42LOXIaKUALlCJRuOEMzHCKvWC/uMhavpIi2uPpJcpUsI6R6xmvJ
b0tdiy2F/CT68dcn+q1xkdpmdMKXXpX4DIfRMmJOUBYTLPFcVDuHHnaFN7kx
+OE6pmZS7wYKg6EJmXUxbKvcEIazGieSLsUd5pequsoFIElMu2/C9RfiS4OR
MHd/AXrDAqGXE12ykgiTShAWeZ+VXtFwYjFU8QzmmioxBrf7oPhilb90RiOq
iKHDcKUTWjEbzzAzkRW1PaEZsfPE3GfzvUgXVI333nK1cvU/yd1IVl4cJDVv
5oBCbA2kX6DyF17EVlwKJ5nwiTq1bcBUe+lyv2VnYxprEVM4tRMDHjm1DlXR
eAxemiLuqOTzxJKLyBseFdNVaqrANcRE45H10GKznPQYoUsyWzLWYdIzkAwn
sbBe87Yf2YbQDKYsBhB6TnGfBsEpg9+U3Q32jE9VY5iW6OW0LNuv/bxSVFwd
42HC7TECxIO5HJWkatTrIzXDs8YlhhQdQaUlNxsrdXg8FafUNUSL0q5UFCyu
hgIkijtUsOJntN4MUW4tWLuNR7flDaqMSvnZLqXmAWGQT63NZCVYd3l9Qykm
izN4cm1QjJbyhcGQrqkw/zIpM2nmTkcjuu4qIwhm7FkBNxzGcww9AqicxQvK
3Bdq3FSouzQBbjsm+iJEsU5HCxYOplZYnd4hhbMUgYjC9gOngPRHVsDWG3a0
qMtpPfKzxkl0HBLVsHUfK65dDckb9ou5fIUU1GAyx6vfrjV9njLz5I6S0PIp
URCD+9Zu7XLy7tcdGxRIQDzAUMK9sUcznVXWTgUylUrcigPzyqwiHhxoaqwV
SjI1iAgnMvmtaF0+Ds1ylKR0NE4vlvJI/zNoj+JlEIp0ezo6eH18PHo1HA0l
RpHoUISmcDQ+h3a9ESIpMNf4GsMkKb1lTp2ucMyY1OUkOZPEVyUNqNHWyg9k
lsYSNAAQUB2qNFMmlUAxmU/iZTEwkcATK+pG6s2gsDk3L1zJplCa3HBb6zYF
Z30wcE+VvLOYoQ0QGB84mVxXGddHQZKQLtaIX8IpMMmxta3apif5GefILOTB
XVfQloVnhqnozujMNjnVCu+YNGpa0DElQSZnw4niS1tobt9mObCzi74WBlaW
zJJpZBvXVLIrC9goquXgrQqsADQzRxhSClRmirCoSN5F/C8jaLPyR6gIGnlq
7EvRbQQrwjtrvz0MEPEOrARnI8xhdi+IQV4g0nSUBBqhWTUaW6rmeJqO3xGD
MIzfdpNRL9H2nKwhgO2SME0UVgsWtH4HNqoYIqKwLSMmM6DL6WoxjvOyOoWc
VpzsbZQZgSwvnCgHBG9Uj7m44oJpgm4zUWdClnu2VctbYaaqRqLHRIqEg0a2
yWhNBCbqYsgJmiV2Gx3xjjtnjJuRjiTukkqxyuz3GtnqAgRaETRz+yED7gmG
rYw99tsb/uJjEAytDMKBRC3cxFRaWsfrWpzVukiSNirNmPoDHV7NE+CV+Cxc
1f/RRYF0qEAxIXzgtevpks32memNY1hwSVdVipkXw8IEEJdFhJde9s21wxZz
jHxIQxCKJVGl+ho9ZWKOLVjNyXslVXhQ5vQvf87FSFH8siy2rMza1hVR6Cj8
hDkRB6EQeCXcEU1xdmh8TgnNky9Ks6RqtOajQUQy8plPrHgVkqSJXy8/RVG4
sCpDwwVQ1mCpwQQ9iADi75bJeMlZg0wMjhXMGHBGf9K8HIOxemWK/nd9eMY6
BJeAS6I6chQLxZnJpuR9TOIGkQRyFtRPhau50lnhWPzPBdhhqnypFZ32goSy
bByjgTDND8UGarJQVvSlCtDMCguieq5HJzjmgt4NpCUWr322LWYg9kuyLgAt
ZxLEgTSIuYEJyomAsK8ohhR1aszYIbxExf/qY/dCkiwlaOtXybT90c5sedTS
D0H6IjZXDQNLnfD08FwZVCp5zuKjROgpQaFLMrxGiggw0jE1u3QCfDJdoZyK
jTs3KUgyawgrRF3Iu3+PgkUXdkAy5a2cJu8kuwuBwRaEkZD7wiU+PMVPP1JQ
+jGlXDvHd4SnHFvEFvuAOprkyUw+o4wIaGRnaoMdqNdX2HMHn0J8Nb5IFygX
YIN5NIv3gK9ajeB2rS6W9pe6V0DpNam+mklLji3mGKwSvJZMBt4vR1LPOOcT
wQZnEssc+5uIIdrahuzgzO9moSFZmfM6Os9M4Jxj8ac7DIumN5KCdeWLTXJN
ySqX9/bkFx0Wc1KSsNDeJRJCbsTsOv/qbo+ENXelgxuHmckjb9qPOf+9gic1
9zguCA4X0RUJvDpEaOHZ9KudAUxpVYAzdAC/BnEDKBmzwmmC6XsBSJmpHs1r
CUMZKARB+yoZh6x7b2XbzneH6AnScTn5b4+jMcbzZtchZ0xDPMVXK247Nj7r
3Hpjjvi7lFwYudUjev87ctpaurhiHJhPyM0FxBsboHbz+hUiP2q3koIpnZsG
jOEDkgAU9iHheMIfZc/CAVPxOHtiBUTlHE7BAfm21bOJaUxjHY3OD4OgWq2S
zzOgkLcaRYCTog2jo1udQRlPnj+bp88wz3csplkiQcwC5u/CfYxhD39IQLiZ
h1tn97MINjveBkXoHrNRf4fJus7SKcA4gg9fJSD3H6Tpu3BrsJhtswc2PE7m
12n4Y5qGW0cpsaNtRSkTfnuhwl6zQJjWa6w5Q00tver1+eJkW0nacCRTMshM
xGZNtEyH5jvvL6jIbC0cjPUDKi4iuDkYRsDKzjBYBDetqHy2usJsX/YLBbVW
ROda6WjfpbDz8ChLgQFsnZ8Ozo5e75yhSgy7+w43Hr2L7qNZBKDlT4PvgJPd
R9kqPFv9HL1LdK/B0dk5Hka2ehdlUfhafyOw/3EFsEpwwGSphwsM8DGWjxTA
XFDYZRxPEHvsPRAndjdyEC0yRIx9vB3zOQe1x4g2yeLddTr92Trn63h6Yz1I
GA5fchqkGkkmWBuDPvQdyt8pza77xiuaEDsWfLGyJ1DIPLqOrGjkShC/x9o9
TPf+g5IXjua38RTI8X/QqvkzLSO9PdLE7T9QzwxyNLjMxlfLBcKQaU1oxy3n
F5rFpGLmQmTmug0BIZsnNzexiSi4SCf3PvZDAYjU4+tw+JreX4yGIGhwXOhk
MmWiBwtcoYBUg2bn7lfwB9CctGqeWbBjHcWPGf+BvUaThE298hk7g1agCWLO
LDxlJ+7MngK7n6AEqd/4QvMrDsDHpNQJ2/hvVtl1ft1YKCtZUuIkGCQmpxRp
xPfpStlLb5UtxCyXs3coC+fz8E/235yjoaasE/Y3lyiE3KWLd+4I5nNM/IEK
OHInGZVG27H+qGpORDbrG2aJ4YfwzyplCGEGOQf/jNrP15rNqIwSlVAKi2HZ
GFWJ1hSiDd7ovCo01PNwiyqhP/8Gh9sOAFT6mjih+nuBBxI7z8OfUJxW4z/Q
RhLn+xtJcjv/l/ShpI1b14TSxFmbYJbNNIHL42G8ysX9MtYxyEieKHlbJO0Y
f+uIQM1WYJ3Uc10vHslJ9fzHk1HV2T4F4Ba/E9s4Vo43X4pVESvImw/tbcJX
nfxXnAUP68cH+YkNbpUszsUoTPIY/pv4Q+DwL0DYCGsZhjBu9Wu1bnu7Ik0e
qs3+TfjP8KvQG038Ro1hwk2LU3UaTT2X+Fb1qMrXqgdaV9z+mxDf1axpqSY3
O7NL0vOMtDiZ7s/hn/7kgNBcz8y0sG6T9T18Tbd03cPwPYZcMYnUG7dnMReu
9Cy+ZqCenmu/F9Itr12g6l1CFhSwn0tbOqE2Zs+uIh/Kfw6XjKMssNI1qhow
9iy6yQLP8ND3f2yxj1Adyl5YpxAHtjBUTQHAvbBBoYImVj5sMjzMae2FrUpA
xOqPTF5/ZPL6I5PXH5m8vkQmr/9WL9p+t2+NgoLYtE60kXDtT5VtJJFHVfO+
b5TM8ZtIHLDoMaeNli+z+wwZqTjU7qsU2ZyZ5prDVnMdnS+Ifes+JYmqpWOp
LmsGQInA7qIlBI/cxOfzSMEJpZHiBp7TyWpBoZoQeEvXixMRPMvCcLC3JdH0
uQNy2qpEUOPppek0+BgEWlz3ISN/+alI+Nnn4e3H85EZ2DFZ/EqytK6lDJ+L
lmR/Ncuu1KAKCI1aDWjYtsEHhuInoEpOa/KdkN3kU8/poT34rzcXu+CUAm9y
O5IFfeqWlTZYumFq4NnuJvvd8OAcBbEojGv1sETJ+UIapjNIUV3SQ5QoTI/Q
UR9WUjfHA3POXIozjwYbqJfq2u1p0wRKnRRso2+k9o9VmNyplvgg8GR0CkLc
6BXQh9PT16fE1fMPBUf/OB+9OgPBjSwYGz0jRKtGvuHx2bdv/z46lYHahe+d
xF9k/MAW+wP4ZnR6fnR4dDA4H5Hto7Q+1/OwVxjWLjbzPOzT99aAsLsT6btL
352PjqHt4PRHA5E6fQFwOjqEOd+enL4+gP0evfr27eHg6CX1bfQQ7NPoIp6S
Kw4UYXyeRxZsOEBtjjK+ytxhrL9EcCoWesIpGBwESK9HfQB1UcwBKHqJOgBQ
CxIALMPpATo5NoNwIeoQNhqBJhVho+kbWTOWsNEKPEJL2GgHZXwwbHQCl+uH
jW6wlrHjeTiMHBSawL2VYWM3ECIYNusPPcaFNrxJ5nFoGFQpIYa1cMTxg3Ty
wyS6mqcZ5vt6lYpHBHUfCZw4jSUYgb3fHoeF6wNQGVAp+CFW82hXiNEXoyxb
zYTMY36n82td75wC+8iCgCaK8wNvf4oxMHEeRs7I0NNZDf/XP8P6+3q93qg3
6616u96pd+u9er++W4/qF/VxfVKP65fh/3pjGjc2aFx1H/LwidP+l1w1hc0n
dlSqqlvBMdQ6D9oo4Cd00Xi5AiXSPLkQmG1TkMOw1qj5ax16TuKpdIAuB/tA
CjxH6+tGiLET5g20OwHy6R3h1DthA/4tsyPvVKipZts78Cez7h3h3DuAtOFe
eP1sUB80Bs1Ba9AedAbdQW/QH+wOBoP9wcFgOBgNDp9VpJ8mGTthK0QDYj18
g5/XKUGfxCOSZUJ7TXcUm9l5wI65QzJICIP+E25aBbXvN/C/nZCzd3JI7egM
VfOdituy72uJ6jjN/iY/u88WqmevNro4N/zb3IX/dDudVvsNdV+nreslcff+
+u4FvT3XXc3eeMMWlLWzgwZfMnuz/cbX3avL25Dy2n7xxHecGMxfPIZXGOaN
omqC+U3B/I2JF3fvd8LCz9MwWiyi+63ONm633ih8vZrzY72txva6m4G9B81C
b2C4W81tFpuAmZQM3axvqxvElwp/OnW3NXqHsq1GV42GEz5wyaRlvVUyb2vb
uoBm5n7Dbc8Qov3z9dwxS6jXfQPXaZH9Ijx4qOb2A1f3waWYBViTmOEDu1ej
WVhfo48rsEyLO06PZlf1mMdX5MLe6mIHoB/P89bc33ilvcJKe7TSvrNSsipS
z76Dg9ZS2tsPEDSz0/aa/ptQNF75pTWEXnyjQ6tvoK1UVYizdqwOpuxshJab
Dq1+2DgodGgSUIGgYZeD4YsqSPZfhQNY5Xc/OL13w8vLy0l+OiDAdHOYFMMY
2PPg/PTREPIQ7c8FUM/XyaCEYWH/JQDkYUv/tTDIYih5VoKNvz04/gykyfPa
z4JLOeJ8YZxp9LUbx2aBtNEmIsvBdQT/NOs7J7CxRqve4d4uF3N7E7ZtIEgo
MQKkCJAhRqBKgChvZz05p9eHZeoPagDX6d1cUjYmcxZDJkYAR32Syv9O+fWB
0mB1xgtKuKkHqimZpvmJ0jwG4pPxvYqqCUrzSh4fzy/hv/qnr41svp+d8B0o
sCyBXz+7iHr9Rvfisn9Zb4wv46jdgP/VJ3FnEsXNZrP1rHwg+wcGqtdb3UbU
2u02er1od3zRbtQvL7uNyyboYJ1oUj7QR6UewAbfcho13Eyjjuvbbfcv+/1u
fdJoRe1uK+7HWptYxbQP/gEUx+b1xm7/slOP2jD1uN7pdxtj1bvb6seR7pzG
M9O72elj5z5MBjuuwMdHo9EofP39kUqi8Xp0jJVZd6T39R1nW9vh3rvYu9Pe
nYzj8bh/sdvvjXut3kW7Hbfrl71xt9UZx/11kNzBFMhUiGZ8ndxIKjcMwlRs
FKdUlpMdpGwAnH8+adRatfYTFPRxzcfkm48WS8CfGJMC6+Wa0iPYt9faE23F
//PPsFvH8fKx3JXw/HW4PwpPRycvBwejYU488e/LUvON35a15I36i81S8iaG
Kf8n5pwc9IADrtr6gT74Bnpo7h3bgmrMPKtFgnrzXvjkerm8yfZ2dkS5rwHt
2dHJQBBcTyqfNsWEa/CCVry37pTUGNpVXSV8RqK/Ez5hBvLEkcJKh+AZq6R0
IKY9i3qXk25ntxVH41YzvmhfxJ1ev9nrx91Ouz7ujDckCvYPXM3d8eWkN2lP
mq32bg9Ifbvfal00L3Zb9Va9W999eNA3a1t8XPNtec83wUebU7Rqubf/D9pm
Wp9pm9Eu5rxxpulVQaX5r2GdKZhod8JuKDFSoctztbV2J+zRJM+QfK81lhlK
piyuO2E/NJTIcKwd5XJ2LK5oJUKTEdL4gklvUN+vH9SH9VH98Jl2bYT6immT
dzWZYbymvmJACf/yF4cYSg+5Et7LBRKVZUXydTM3adA7HOJNGg0OWs3Rfnt/
xDdphDfpoHNQ3z04HPaG7aF9Kfab+/5LoeeWDWBE9Vjl2jIU7U34zTeBfSne
iM/Otqy0PtGyUlD0w7yKWy+aAozo5zesKKwmy0pRa0XLSvs3t6x03ZH0vKRQ
5C+PWUG9XtKvrtZQ75W06G37r50ZvO3dXn3bS++ehk+eqCn7JVOSYC839GEr
kQVE2+DhWMJcKDj791/1vRxzVpP7phUoHFqbb3R8u19PNNyltgpLbW2vJyX5
JXf6qN6YNbW6hTX1m83DTr9Z/1wKYXOvdi1f6b6UbbU/kW3pIJQ8u2o5F1ua
/RpsynXU7GBqcMNF/vIXi/a7QSc7jlIkx+kmLa3eLUDojRe4qgJnCIsfrGMX
e5pfGPMa2udYMisKZh4OskcsZLjfrTcGwxGc/W5zv9PvtJoHg3rrcH+/220N
R+1d+KDd6rRa3cNGp9Pfb+/CN81mr9kdNA9Hw6HLQpA3VPK72rHqnElIJgK2
v+XZr04QhquDvkVNsyCTgrhc7aFxIW9voZ+PhRWRcjd3JvrwsdjEEENA1unU
A1CVrZAB2dlvDjutzqC53x12Rq0DAOVBo95rH4LGOxzsjhr1/WETPtvdHbRa
u43uEIDeGg1b/X6j2am3+43e4KDdB9ju90e7/fboAKHc7+wPGwftRqPf78PV
bTX2G/ud3Xanjmr1frPeOOwewqC93UE7fxDbhk37TmbHzeCkpRUX4LlWluzW
kCj28rZ5nzVhfcvbBx860ai+NdittP0FxyrqLz6NBlXndqfd6dSbw3a72+l1
u7vdVrcDirg9wxOiLkPyJz/x6m8wEHTrtnodQP4OjNRyhtAD0Tvp+PCsbJT+
sN/s9FqD3WZ32O6BXo+3qzk8aO7u7vYOe22yEACPXK0Sv+55/azX7jaeFb/I
LWQZ+ZaQV1belJAKPhN9ivBx20O0rA5SA+42rqaAJotkEht2RicGar/PcFRg
fbfxfJICBzSBgIRu18+AnQ6HHaBDSJG63Xq/N9xvH3b264NBs3vQVET8geHH
0yjL3NGbe0QJ283DXn23NewfdDr7gwH8Hxz04QHy0cP2aLPRH1QBPHD7bOru
G8+i8f2Dw15jcNDvDg6BgowaSF16g3pnAIQFdtkaNNqHw939Xm/QAoGl3W3t
9oAetbu77W5/dDDy2paKlH4tQCjQDI4RcKhZL3QrkF8LC+ccNu/HikrY6GzQ
13fk2DV/FVyS6WMeMrTKmbkT7noP+LOuRAGEbBZq+uxC6eJqpz8hghJVgaJM
qkhSqkhTqq3mZExE5bLXrgExyHPGUhlBLfoyXo6vaWYfnAtQ5pOeRdypVQBw
Drwf7T+VeUU+wqAEEsdRCaVQRZadJnmpy6N6tn891fMhv0FRQiWV8/fqzB+U
zNugeR1J+DHKWmcX9KH2yF5eK6+iDJr1ZqffawHm9pttpa08LIw6g6yXTDv9
9gAkrnYb6Fu9AZ/WD7vwWZ0FNVeh+gypzd3WZ4hw7kDteqvTH7bh/xuiXMLf
sCOAWx8IeHvfL9W0+7mtuRJLp/6Q9NFuonBRbwMg2q6e3G3Qajr1h9gwnGzd
ZabOQEXOilszSLCOW7kw2oB11UcNhCCsCf7dhePv0D7cgRqgE7f2u5j7vt2r
91otQKAmIEsP2naHvXr3oNtpjrqHAMVe87DV77Zb/VYTAAdNXWA3msPWLnzV
7bbhtzY06LTa9FmL4Qz/3+zCMqHNLv0PDg5atZsjZyA8A4D0IRz7oa2Cd2o6
M+qDOnjnE3Xw3GODvCbeceic0/hL6uMewt759Qh7PpzLIoad7TUbJvJejPRC
8t747ci7hTDdmiTVfRBdup+DLuqhRh5ZukXYcdNfw3SjQrR3MPoJZKVJkr2r
XoLujpKPRHma5wTQiqwG6wPf8xGDXY2DF4/DwbzoYOFgi3GwW/jatQH74fi7
FjAOSuZtkKFezsvM3N112+ObnK1da16gnLu9FnDNYbfb6wBZPkCrs3POYWNd
4CVHoTx05CrwfeQGvlMg97F2dn94SvKvCr/++GCoO8Zp5OPc1bDGhz6Js/Ei
uVC5dOTNGMCpOokvdRlkPQCV4eSQEFMMxAS98/tgWMENKI6LBpVUIqe5uHqk
tLnoq1bdXmOyC926Ut/F91LbD7NoVav7o2+PXoUnp0d/x9cr341+pE+D46Nv
XwyuRoPj/eNv9+9/+vbsuL0Lf397cCC/341e7H9bv4vujvYHf/vb1eDmf/74
r/958P23L4879b/vHwQH//rxbPmPr+q7//p2Nr//68niZvjy/Oed6+Qfr69P
B68OBoOz0TQdRYur1U8/7f71+u/vk7j3Kp3d/vTTy/7p8jY4+eoiWf7ww/h6
cjtYnGeX371bZgc/jt7fffdquXj14h/J7uv91quv7uaD75fZz7PTZuu4vfwu
+YG3NXo1LG6KEeOcigWryo4IZavQt1T3UUlYqYrMveQhVofmg9/3+y+PDizw
Hb67G939+OK79H8e/fyv+sHgbz8eye/Dwd/GQwDY6Pqv0f63P7Vf/vTT7dmP
fx//OF/9HP110f0p2RldBBc/78zai79P50f/uLj7rt57cX/z8mIw2z8eH/zr
Ivr5tNG+Pb+a/HyZ/fXu8OXFcefdZPnz65dn6fTq+XMLArllMQCQtcjFQMOM
cy/CmzSZc56jNPz+9EgXFihLtCnXCHRc7w1CslvGlQqXcg2b8lnrd8KNDPSW
fq+jGfzWmrzv1g1+YGPM6LDTOgBJu7F7sN+o19uNZqvV79QHo1az0Rh2mwej
g91Os7/bbI+6KF33uv3+qNfbP2i0+yAT15+JgqwsE+sM7GbZ5Xb1De3ptilk
jf281G5esJf3Rq1u7xA0LJD8QR/qgZY3PGwNu61GExSE3Xar2+jttxuDUbvX
bx6CGghAGLR3mwedxmF/0GuCRD5oNw+arWGv2Rz1+j3QPlqd/U6j1xnuj7qN
4fCwf9joHu52uqBgwFi7oCwN6u39Q1DjOspx8UbM5AqeRu3NWaMtfdhnBLe+
Xmf33glLTN07Ybl12zEuPbPs1K5F8pkyPDsff469+dkyMqY/ZTd+Y53oNXCf
yToT8U74WBPYTvilDcH2iF/E9msPuIG595E0I9fpVzLjFt1Bm1lsLaPhTvgo
46zd/AF7rDYUGqJj3a9c3E7Huir+y1G8GBtdCt+teIa8SiiHWpixBTd6e3lm
8Rjkt8/gy5p8P1Y8S/Jbd+1jKjPovrGOZTU3+2+2S/e/mk+T+TscxR0mEDvw
R0vLslV8kIFfxO9L+brfjLgZiw3KeWyZ6dDwrOBzmFbw6Vyr3go6u/VGvT/o
Pt4w2O0En24M7HeDTzcA7g+CTzf6DfrBIw19HRsOgQ8Qm8IhEEDAUYPCCXM2
GsaI+JDdMFhnOHzIVhisMxba9sEGHXu/2YB/tLXQFtGbeRHd1F7cRDLnmiYY
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
npHL2QEA

-->

</rfc>

