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


<!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-13" 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>dthaler@microsoft.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="2023"/>

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

    <abstract>


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



    </abstract>



  </front>

  <middle>


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

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

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

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

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

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

<t>This specification re-uses the terminology defined in <xref target="I-D.ietf-teep-architecture"/>.</t>

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

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

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

<t>Attestation related terms, such as Evidence and Attestation Results,
are as defined in <xref target="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 TEEP message is received (see the ProcessTeepMessage conceptual API
defined in <xref target="I-D.ietf-teep-architecture"/> section 6.2.1),
the following validation steps are performed. If any of
the listed steps fail, then the TEEP message MUST be rejected.</t>

<t><list style="numbers">
  <t>Verify that the received message is a valid CBOR object.</t>
  <t>Verify that the message contains a COSE_Sign1 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 via the request parameter. Currently,
the following features are supported:</t>

<t><list style="symbols">
  <t>Request for attestation information,</t>
  <t>Listing supported extensions,</t>
  <t>Querying installed Trusted Components, and</t>
  <t>Listing supported SUIT commands.</t>
</list></t>

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

<figure><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 ],
    * $$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. The size of the token is at least 8 bytes
(64 bits) and maximum of 64 bytes, which is the same as in an EAT Nonce
Claim (see <xref target="I-D.ietf-rats-eat"/> Section 3.3). The first usage of a token
generated by a TAM MUST be randomly created.
Subsequent token values MUST be different for each request message
to distinguish the correct response from multiple requests.
The token value MUST NOT be used for other purposes, such as a TAM to
identify the devices and/or a device to identify TAMs or Trusted Components.
The TAM SHOULD set an expiration time for each token and MUST ignore any messages with expired tokens.
The TAM MUST expire the token value after receiving the first response
containing the token value and ignore any subsequent messages that have the same token
value.</t>
  </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. 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 (since the token is used instead in those cases).
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 this request MUST be used to generate the EAT,
by copying the challenge into the eat_nonce in the EAT profile <xref target="eat"/> if
using the Nonce freshness mechanism.  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 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>
</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-teep-cipher-suite => $teep-cipher-suite,
    ? 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-teep-cipher-suite</dt>
  <dd>
    <t>The selected-teep-cipher-suite parameter indicates the selected TEEP cipher suite. If this
parameter is not present, it is to be treated as if the TEEP Agent accepts
any TEEP cipher suites listed in the QueryRequest, so the TAM can select one.
Details about the TEEP cipher suite encoding can be found in <xref target="teep-ciphersuite"/>.</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=https://datatracker.ietf.org/doc/html/draft-ietf-teep-protocol-12" (see <xref target="I-D.ietf-rats-eat-media-type"/>
for further discussion).
(RFC-editor: upon RFC publication, replace URI above with
"https://www.rfc-editor.org/info/rfcXXXX" where XXXX is the RFC number
of this document.)
It MUST be present if the attestation-payload parameter
is present and the format is not an EAT in CWT format with the profile
defined below in <xref target="eat"/>.</t>
  </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="I-D.ietf-teep-architecture"/> 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="I-D.ietf-teep-architecture"/> 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="I-D.ietf-teep-architecture"/> lists information that may appear
in Evidence depending on the circumstance.  However, the Evidence is
opaque to the TEEP protocol and there are no formal requirements on the contents
of Evidence.</t>

<t>TAMs however consume Attestation Results and do need enough information therein to
make decisions on how to remediate a TEE that is out of compliance, or update a TEE
that is requesting an authorized change.  To do so, the information in
Section 7 of <xref target="I-D.ietf-teep-architecture"/> is often required depending on the policy.</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 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.</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=https://datatracker.ietf.org/doc/html/draft-ietf-teep-protocol-12" (see <xref target="I-D.ietf-rats-eat-media-type"/>
for further discussion).
(RFC-editor: upon RFC publication, replace URI above with
"https://www.rfc-editor.org/info/rfcXXXX" where XXXX is the RFC number
of this document.)
It MUST be present if the attestation-payload parameter
is present and the format is not an EAT in CWT format with the profile
defined below in <xref target="eat"/>.</t>
  </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="I-D.ietf-teep-architecture"/> 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.suit" that contains the URI. The filename "tc-uuid.suit" 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.suit" (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.suit" from Scenario 1.</t>

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

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

    and then,

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

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

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

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

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

</section>
<section anchor="unlinking"><name>Scenario 4: Unlinking a Trusted Component</name>

<t>A Trusted Component Developer can also generate a SUIT Manifest that unlinks the installed Trusted Component. The TAM delivers it when the TAM wants to uninstall the component.</t>

<t>The suit-directive-unlink (see <xref target="I-D.ietf-suit-trust-domains"/> Section-6.5.4) is located in the manifest to unlink the Trusted Component, meaning that the reference count
is decremented and the component is deleted when the reference count becomes zero.
(If other Trusted Components depend on it, the reference count will not be zero.)</t>

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

             Update  ---->

      +=========== teep-protocol(TAM) ============+
      | TEEP_Message([                            |
      |   TEEP-TYPE-update,                       |
      |   options: {                              |
      |     manifest-list: [                      |
      |       +== suit-manifest(TC Developer) ==+ |
      |       | SUIT_Envelope({                 | |
      |       |   manifest: {                   | |
      |       |     install: [                  | |
      |       |       unlink                    | |
      |       |     ]                           | |
      |       |   }                             | |
      |       | })                              | |
      |       +=================================+ |
      |     ]                                     |
      |   }                                       |
      | ])                                        |
      +===========================================+

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

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

</section>
</section>
<section anchor="success-message"><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 ],
     ? 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_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>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 TEEP
request contained incorrect fields or fields that are inconsistent with
other fields.
For diagnosis purposes it is RECOMMMENDED to identify the failure reason
in the error message.
A TAM receiving this error might refuse to communicate further with
the TEEP Agent for some period of time until it has reason to believe
it is worth trying again, but it should take care not to give up on
communication.  In contrast, ERR_TEMPORARY_ERROR is an indication
that a more aggressive retry is warranted.</t>
  </dd>
  <dt>ERR_UNSUPPORTED_EXTENSION (2)</dt>
  <dd>
    <t>The TEEP Agent does not support an extension included in the request
message.
For diagnosis purposes it is RECOMMMENDED to identify the unsupported
extension in the error message.
A TAM receiving this error might retry the request without using extensions.</t>
  </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 Agent does not
support the TEEP protocol version indicated in the request message.
A TAM receiving this error might retry the request using a different
TEEP protocol version.</t>
  </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.  For example, the certificate was of an
unsupported type, or the certificate was revoked by its signer.
A TAM receiving this error might attempt to use an alternate certificate.</t>
  </dd>
  <dt>ERR_CERTIFICATE_EXPIRED (9)</dt>
  <dd>
    <t>A certificate has expired or is not currently
valid.
A TAM receiving this error might attempt to renew its certificate
before using it again.</t>
  </dd>
  <dt>ERR_TEMPORARY_ERROR (10)</dt>
  <dd>
    <t>A miscellaneous
temporary error, such as a memory allocation failure, occurred while processing the request message.
A TAM receiving this error might retry the same request at a later point
in time.</t>
  </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><eref target="https://datatracker.ietf.org/doc/html/draft-ietf-teep-protocol-12">https://datatracker.ietf.org/doc/html/draft-ietf-teep-protocol-12</eref>.
(RFC-editor: upon RFC publication, replace string with
"https://www.rfc-editor.org/info/rfcXXXX" where XXXX is the RFC number
of this document.)</t>

<t><list style="symbols">
  <t>Use of JSON, CBOR, or both: CBOR only.</t>
  <t>CBOR Map and Array Encoding: Only definite length arrays and maps.</t>
  <t>CBOR String Encoding: Only definite-length strings are allowed.</t>
  <t>CBOR Preferred Serialization: Encoders must use preferred serialization,
and decoders need not accept non-preferred serialization.</t>
  <t>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).  See <xref target="attestation-result"/>
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-teep-cipher-suite</c>
      <c>5</c>
      <c>selected-version</c>
      <c>6</c>
      <c>attestation-payload</c>
      <c>7</c>
      <c>tc-list</c>
      <c>8</c>
      <c>ext-list</c>
      <c>9</c>
      <c>manifest-list</c>
      <c>10</c>
      <c>msg</c>
      <c>11</c>
      <c>err-msg</c>
      <c>12</c>
      <c>attestation-payload-format</c>
      <c>13</c>
      <c>requested-tc-list</c>
      <c>14</c>
      <c>unneeded-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-teep-cipher-suite = 5
selected-version = 6
attestation-payload = 7
tc-list = 8
ext-list = 9
manifest-list = 10
msg = 11
err-msg = 12
attestation-payload-format = 13
requested-tc-list = 14
unneeded-manifest-list = 15
component-id = 16
tc-manifest-sequence-number = 17
have-binary = 18
suit-reports = 19
token = 20
supported-freshness-mechanisms = 21
]]></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="I-D.ietf-teep-architecture"/>.</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.  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"/>.</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"/>.</t>

<section anchor="attestation-result"><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 can attempt to use TEEP to update any Trusted Components (e.g., firmware,
the TEEP Agent itself, etc.) needed to get the TEEP Agent back into an up-to-date state that
would allow attestation to succeed.</t>
  <t>Attestation succeeded (so the QueryResponse information can be accepted as valid), but the set
of Trusted Components needs to be updated based on TAM policy changes or requests from the TEEP Agent.</t>
  <t>Attestation succeeded, and no changes are needed.</t>
</list></t>

<t>If any Trusted Components need to be installed, updated, or deleted,
the TAM sends an Update message containing SUIT Manifests with command
sequences to do the relevant installs, updates, or deletes.
It is important to note that the TEEP Agent's
Update Procedure requires resolving and installing any dependencies
indicated in the manifest, which may take some time, and the resulting Success
or Error message is generated only after completing the Update Procedure.
Hence, depending on the freshness mechanism in use, the TAM may need to
store data (e.g., a nonce) for some time.  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 QueryRequest included
Evidence, the TAM MAY (e.g., based on attestation-payload-format parameters received from the TEEP Agent
in the QueryResponse) still send an Update message with no SUIT Manifests, to pass the Attestation
Result back to the TEEP Agent.</t>

</section>
</section>
<section anchor="handling-a-success-or-error-message"><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 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>

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

<t>When an Update message is received, the Agent attempts to 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 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. (If evidence is not encrypted by the TEEP Agent then it will be opaque to the TEEP Agent and to the TAM.)</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.
;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="I-D.ietf-teep-architecture"/> permits implementations that
terminate transport security inside the TEE and if the transport security
provides confidentiality then additional encryption might not be needed in
the manifest for some use cases. For most use cases, however, manifest
confidentiality will be needed to protect sensitive fields from the TAM as
discussed in Section 9.8 of <xref target="I-D.ietf-teep-architecture"/>.</t>

<t>The cipher suites defined above do not do encryption at the TEEP layer, but
permit encryption of the SUIT payload 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 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>To perform encryption with ECDH the TEEP Agent needs to be in possession of the public
key of the recipient, i.e., the TAM. See Section 5 of <xref target="I-D.ietf-teep-architecture"/>
for more discussion of TAM keys used by the TEEP Agent.</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-a128gcm
$suit-cose-profile /= suit-sha256-eddsa-ecdh-a128gcm
]]></sourcecode></figure>

</section>
</section>
<section anchor="freshness-mechanisms"><name>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"/> 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="I-D.ietf-teep-architecture"/>,
the TEEP protocol typically relies on a TEEP Broker to relay messages
between the TAM and the TEEP Agent.  When the TEEP Broker is
compromised it can drop messages, delay the delivery of messages,
and replay messages but it cannot modify those messages. (A replay
would be, however, detected by the TEEP Agent.) A compromised TEEP
Broker could reorder messages in an attempt to install an old
version of a Trusted Component. Information in the manifest ensures that TEEP
Agents are protected against such downgrade attacks based on
features offered by the manifest itself.</t>
  </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>

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



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



<reference anchor='RFC8747'>
<front>
<title>Proof-of-Possession Key Semantics for CBOR Web Tokens (CWTs)</title>
<author fullname='M. Jones' initials='M.' surname='Jones'><organization/></author>
<author fullname='L. Seitz' initials='L.' surname='Seitz'><organization/></author>
<author fullname='G. Selander' initials='G.' surname='Selander'><organization/></author>
<author fullname='S. Erdtman' initials='S.' surname='Erdtman'><organization/></author>
<author fullname='H. Tschofenig' initials='H.' surname='Tschofenig'><organization/></author>
<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 &quot;Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs)&quot; (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'><organization/></author>
<author fullname='P. Hoffman' initials='P.' surname='Hoffman'><organization/></author>
<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='RFC9334'>
<front>
<title>Remote ATtestation procedureS (RATS) Architecture</title>
<author fullname='H. Birkholz' initials='H.' surname='Birkholz'><organization/></author>
<author fullname='D. Thaler' initials='D.' surname='Thaler'><organization/></author>
<author fullname='M. Richardson' initials='M.' surname='Richardson'><organization/></author>
<author fullname='N. Smith' initials='N.' surname='Smith'><organization/></author>
<author fullname='W. Pan' initials='W.' surname='Pan'><organization/></author>
<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>


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

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

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


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

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-rats-reference-interaction-models-07'/>
   
</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'>
         <organization>Arm Limited</organization>
      </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='27' month='February' year='2023'/>
      <abstract>
	 <t>   This specification describes the format of a manifest.  A manifest is
   a bundle of metadata about code/data obtained by a recipient (chiefly
   the firmware for an IoT device), where to find the that code/data,
   the devices to which it applies, and cryptographic information
   protecting the manifest.  Software updates and Trusted Invocation
   both tend to use sequences of common operations, so the manifest
   encodes those sequences of operations, rather than declaring the
   metadata.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-manifest-22'/>
   
</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'>
         </author>
      <date day='13' month='March' year='2023'/>
      <abstract>
	 <t>   This document specifies algorithm profiles for SUIT manifest parsers
   and authors to ensure better interoperability.  These profiles apply
   specifically to a constrained node software update use case.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-mti-00'/>
   
</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='13' month='March' year='2023'/>
      <abstract>
	 <t>   This specification describes extensions to the SUIT manifest format
   (as defined in [I-D.ietf-suit-manifest]) for use in deployments with
   multiple trust domains.  A device has more than one trust domain when
   it enables delegation of different rights to mutually distrusting
   entities for use for different purposes or components in the context
   of firmware or software update.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-trust-domains-02'/>
   
</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='13' month='March' year='2023'/>
      <abstract>
	 <t>   The Software Update for the Internet of Things (SUIT) manifest
   provides a way for many different update and boot workflows to be
   described by a common format.  However, this does not provide a
   feedback mechanism for developers in the event that an update or boot
   fails.

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

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-report-05'/>
   
</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'><organization/></author>
<date month='March' year='1997'/>
<abstract><t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>



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




    </references>

    <references title='Informative References'>




<reference anchor='I-D.ietf-suit-firmware-encryption'>
   <front>
      <title>Encrypted Payloads in SUIT Manifests</title>
      <author fullname='Hannes Tschofenig' initials='H.' surname='Tschofenig'>
         </author>
      <author fullname='Russ Housley' initials='R.' surname='Housley'>
         <organization>Vigil Security, LLC</organization>
      </author>
      <author fullname='Brendan Moran' initials='B.' surname='Moran'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='David Brown' initials='D.' surname='Brown'>
         <organization>Linaro</organization>
      </author>
      <author fullname='Ken Takayama' initials='K.' surname='Takayama'>
         <organization>SECOM CO., LTD.</organization>
      </author>
      <date day='13' month='April' year='2023'/>
      <abstract>
	 <t>   This document specifies techniques for encrypting software, firmware
   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 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-12'/>
   
</reference>


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

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


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

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-teep-architecture-19'/>
   
</reference>


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

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

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-rats-eat-media-type-02'/>
   
</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='6' month='December' year='2022'/>
      <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-00'/>
   
</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'><organization/></author>
<author fullname='C. Vigano' initials='C.' surname='Vigano'><organization/></author>
<author fullname='C. Bormann' initials='C.' surname='Bormann'><organization/></author>
<date month='June' year='2019'/>
<abstract><t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049).  Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t></abstract>
</front>
<seriesInfo name='RFC' value='8610'/>
<seriesInfo name='DOI' value='10.17487/RFC8610'/>
</reference>



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



<reference anchor='RFC5934'>
<front>
<title>Trust Anchor Management Protocol (TAMP)</title>
<author fullname='R. Housley' initials='R.' surname='Housley'><organization/></author>
<author fullname='S. Ashmore' initials='S.' surname='Ashmore'><organization/></author>
<author fullname='C. Wallace' initials='C.' surname='Wallace'><organization/></author>
<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>




    </references>


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

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

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

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

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

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

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

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

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

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

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

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

teep-option = (uint => any)

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

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

query-request = [
  type: TEEP-TYPE-query-request,
  options: {
    ? token => bstr .size (8..64),
    ? supported-freshness-mechanisms => [ + $freshness-mechanism ],
    ? challenge => bstr .size (8..512),
    ? versions => [ + version ],
    * $$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.
;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-a128gcm
$suit-cose-profile /= suit-sha256-eddsa-ecdh-a128gcm

; 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-teep-cipher-suite => $teep-cipher-suite,
    ? 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 ],
     ? 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_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-teep-cipher-suite = 5
selected-version = 6
attestation-payload = 7
tc-list = 8
ext-list = 9
manifest-list = 10
msg = 11
err-msg = 12
attestation-payload-format = 13
requested-tc-list = 14
unneeded-manifest-list = 15
component-id = 16
tc-manifest-sequence-number = 17
have-binary = 18
suit-reports = 19
token = 20
supported-freshness-mechanisms = 21
]]></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 /
                                    ],
  / 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 /
   82               # array(2) / supported-suit-cose-profiles /
      82            # array(2) / suit-sha256-es256-hpke-a128gcm /
         26         # negative(6) / -7 = cose-alg-es256 /
         01         # unsigned(1) / 1 = A128GCM */
      82            # array(2) / suit-sha256-eddsa-hpke-a128gcm /
         27         # negative(7) / -8 = cose-alg-eddsa /
         01         # unsigned(1) / 1 = A128GCM */
   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-teep-cipher-suite / 5 : [ [ 18, -7 ] ] / only use ES256 /,
    / 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 /
        ] >>
      },
      {
        / system-component-id / 0 : [ h'1102030405060708090A0B0C0D0E0F' ],
        / suit-parameter-version / 28 : [1, 0, 0] / ver 1.0.0 /
      }
    ]
  }
]
]]></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 /
   A5               # map(5)
      14            # unsigned(20) / token: /
      50            # bytes(16)
         A0A1A2A3A4A5A6A7A8A9AAABACADAEAF
      05            # unsigned(5) / selected-teep-cipher-suite: /
      81            # array(1)
         82         # array(2)
            12      # unsigned(18) / cose-sign1 /
            26      # negative(6) / -7 = cose-alg-es256 /
      06            # unsigned(6) / selected-version: /
      00            # unsigned(0)
      07            # unsigned(7) / attestation-payload: /
      40            # bytes(0)
                    # ""
      08            # unsigned(8) / tc-list: /
      82            # array(2)
         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
         A2         # map(2)
            00      # unsigned(0) / system-component-id: /
            81      # array(1)
               4F   # bytes(15)
                  1102030405060708090A0B0C0D0E0F
            18 1C   # unsigned(28) / suit-parameter-version: /
            83      # array(3)
               01   # unsigned(1)
               00   # unsigned(0)
               00   # unsigned(0)
]]></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 / cose-alg-sha256 /,
      / digest-bytes: / h'B892B75B262B728EC2C16C2774A730DC804BC87252DAFC57A0098284C3E73587'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: / h'B888EE88553CF894A4921F5FF8B3289C354AFAC504E2526D0DB0EE576069D9599BDF68C7EE6E41B8C1BE78524F082FF62E760F3814F57B18BDB96249CBD8B3E1'
    ]) >>
  ] >>,
  / manifest / 3: << {
    / manifest-version / 1: 1,
    / manifest-sequence-number / 2: 3,
    / common / 3: << {
      / components / 2: [
        [
          h'544545502D446576696365',           / "TEEP-Device" /
          h'5365637572654653',                 / "SecureFS" /
          h'8D82573A926D4754935332DC29997F74', / tc-uuid /
          h'7461'                              / "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 / cose-alg-sha256 /,
            / digest-bytes: / h'8CF71AC86AF31BE184EC7A05A411A8C3A14FD9B77A30D046397481469468ECE8'
          ] >>,
          / parameter-image-size / 14: 20
        },
        / condition-vendor-identifier / 1, 15,
        / condition-class-identifier / 2, 15
      ] >>
    } >>,
    / manifest-component-id / 5: [
      h'544545502D446576696365',              / "TEEP-Device" /
      h'5365637572654653',                    / "SecureFS" /
      h'8D82573A926D4754935332DC29997F74',    / tc-uuid /
      h'73756974'                             / "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
    ] >>
  } >>
}
]]></artwork></figure>

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

<figure><artwork><![CDATA[
A2025873825824822F5820B892B75B262B728EC2C16C2774A730DC804BC8
7252DAFC57A0098284C3E73587584AD28443A10126A0F65840B888EE8855
3CF894A4921F5FF8B3289C354AFAC504E2526D0DB0EE576069D9599BDF68
C7EE6E41B8C1BE78524F082FF62E760F3814F57B18BDB96249CBD8B3E103
590101A501010203035884A20281844B544545502D446576696365485365
637572654653508D82573A926D4754935332DC29997F7442746104585486
14A40150C0DDD5F15243566087DB4F5B0AA26C2F0250DB42F7093D8C55BA
A8C5265FC5820F4E035824822F58208CF71AC86AF31BE184EC7A05A411A8
C3A14FD9B77A30D046397481469468ECE80E14010F020F05844B54454550
2D446576696365485365637572654653508D82573A926D4754935332DC29
997F7444737569741158458614A115783B68747470733A2F2F6578616D70
6C652E6F72672F38643832353733612D393236642D343735342D39333533
2D3332646332393939376637342E7461150F030F
]]></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 / cose-alg-sha256 /,
      / digest-bytes: / h'C20DE9B1378EC787D9A9F7C3B0F196E4C51FB519E3FFD45A6B985CE3E9222993'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: / h'3A95608085653743E582395417CC381DCD77370D353D938A71B72411289EF406D5A7783AB6DE6901FAD0D4EF85B777A3C3F46C5631D24EADE7A4AD2E76D2AF4A'
    ]) >>
  ] >>,
  / manifest / 3: << {
    / manifest-version / 1: 1,
    / manifest-sequence-number / 2: 3,
    / common / 3: << {
      / components / 2: [
        [
          h'544545502D446576696365',            / "TEEP-Device" /
          h'5365637572654653',                  / "SecureFS" /
          h'8D82573A926D4754935332DC29997F74',  / tc-uuid /
          h'7461'                               / "ta" /
        ]
      ],
      / shared-sequence / 4: << [
        / directive-override-parameters / 20, {
          / vendor-id / 1: h'C0DDD5F15243566087DB4F5B0AA26C2F' / c0ddd5f1-5243-5660-87db-4f5b0aa26c2f /,
          / class-id / 2: h'DB42F7093D8C55BAA8C5265FC5820F4E' / db42f709-3d8c-55ba-a8c5-265fc5820f4e /,
          / image-digest / 3: << [
            / algorithm-id: / -16 / SHA-256 /,
            / digest-bytes: / h'8CF71AC86AF31BE184EC7A05A411A8C3A14FD9B77A30D046397481469468ECE8'
          ] >>,
          / image-size / 14: 20
        },
        / condition-vendor-identifier / 1, 15,
        / condition-class-identifier / 2, 15
      ] >>
    } >>,
    / manifest-component-id / 5: [
      h'544545502D446576696365',              / "TEEP-Device" /
      h'5365637572654653',                    / "SecureFS" /
      h'8D82573A926D4754935332DC29997F74',    / tc-uuid /
      h'73756974'                             / "suit" /
    ],
    / install / 17: << [
      / directive-override-parameters / 20, {
        / uri / 21: "#tc"
      },
      / directive-fetch / 21, 15,
      / condition-image-match / 3, 15
    ] >>
  } >>,
  "#tc" : h'48656C6C6F2C2053656375726520576F726C6421' / "Hello, Secure World!" /
}
]]></artwork></figure>

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

<figure><artwork><![CDATA[
A3025873825824822F5820C20DE9B1378EC787D9A9F7C3B0F196E4C51FB5
19E3FFD45A6B985CE3E9222993584AD28443A10126A0F658403A95608085
653743E582395417CC381DCD77370D353D938A71B72411289EF406D5A778
3AB6DE6901FAD0D4EF85B777A3C3F46C5631D24EADE7A4AD2E76D2AF4A03
58C7A501010203035884A20281844B544545502D44657669636548536563
7572654653508D82573A926D4754935332DC29997F744274610458548614
A40150C0DDD5F15243566087DB4F5B0AA26C2F0250DB42F7093D8C55BAA8
C5265FC5820F4E035824822F58208CF71AC86AF31BE184EC7A05A411A8C3
A14FD9B77A30D046397481469468ECE80E14010F020F05844B544545502D
446576696365485365637572654653508D82573A926D4754935332DC2999
7F744473756974114C8614A11563237463150F030F632374635448656C6C
6F2C2053656375726520576F726C6421
]]></artwork></figure>

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

<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 / cose-alg-sha256 /,
      / digest-bytes: / h'99D1AD5D2C44320B247BB37B8CDB418CADA53590DF4EF928E30240F5717088FA'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: / h'447D94B8249CB15AA544EF2315BCBBC8DC1F8A790DC863D6CC83F799DF3576AFAEDC2E63512E5C0699F62B20A555CF4176E1D7018FE748D9BFEF47A4E1C8889E'
    ]) >>
  ] >>,
  / manifest / 3: << {
    / manifest-version / 1: 1,
    / manifest-sequence-number / 2: 3,
    / common / 3: << {
      / dependencies / 1: {
        / component-index / 1: {
          / dependency-prefix / 1: [
            h'544545502D446576696365',           / "TEEP-Device" /
            h'5365637572654653',                 / "SecureFS" /
            h'8D82573A926D4754935332DC29997F74', / tc-uuid /
            h'73756974'                          / "suit" /
          ]
        }
      },
      / components / 2: [
        [
          h'544545502D446576696365',  / "TEEP-Device" /
          h'5365637572654653',        / "SecureFS" /
          h'636F6E6669672E6A736F6E'   / "config.json" /
        ]
      ],
      / shared-sequence / 4: << [
        / directive-set-component-index / 12, 0,
        / directive-override-parameters / 20, {
          / vendor-id / 1: h'C0DDD5F15243566087DB4F5B0AA26C2F' / c0ddd5f1-5243-5660-87db-4f5b0aa26c2f /,
          / class-id / 2: h'DB42F7093D8C55BAA8C5265FC5820F4E' / db42f709-3d8c-55ba-a8c5-265fc5820f4e /,
          / image-digest / 3: << [
            / algorithm-id: / -16 / SHA-256 /,
            / digest-bytes: / h'AAABCCCDEEEF00012223444566678889ABBBCDDDEFFF01112333455567778999'
          ] >>,
          / image-size / 14: 64
        },
        / condition-vendor-identifier / 1, 15,
        / condition-class-identifier / 2, 15
      ] >>
    } >>,
    / manifest-component-id / 5: [
      h'544545502D446576696365',  / "TEEP-Device" /
      h'5365637572654653',        / "SecureFS" /
      h'636F6E6669672E73756974'   / "config.suit" /
    ],
    / validate / 7: << [
      / directive-set-component-index / 12, 0,
      / condition-image-match / 3, 15
    ] >>,
    / dependency-resolution / 15: << [
      / directive-set-component-index / 12, 1,
      / directive-override-parameters / 20, {
        / uri / 21: "https://example.org/8d82573a-926d-4754-9353-32dc29997f74.suit"
      },
      / directive-fetch / 21, 2,
      / condition-image-match / 3, 15
    ] >>,
    / install / 17: << [
      / directive-set-component-index / 12, 1,
      / directive-process-dependency / 11, 0,
      / directive-set-component-index / 12, 0,
      / directive-override-parameters / 20, {
        / uri / 21: "https://example.org/config.json"
      },
      / directive-fetch / 21, 2,
      / condition-image-match / 3, 15
    ] >>
  } >>
}
]]></artwork></figure>

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

<figure><artwork><![CDATA[
A2025873825824822F582099D1AD5D2C44320B247BB37B8CDB418CADA535
90DF4EF928E30240F5717088FA584AD28443A10126A0F65840447D94B824
9CB15AA544EF2315BCBBC8DC1F8A790DC863D6CC83F799DF3576AFAEDC2E
63512E5C0699F62B20A555CF4176E1D7018FE748D9BFEF47A4E1C8889E03
590160A7010102030358B0A301A101A101844B544545502D446576696365
485365637572654653508D82573A926D4754935332DC29997F7444737569
740281834B544545502D4465766963654853656375726546534B636F6E66
69672E6A736F6E045857880C0014A40150C0DDD5F15243566087DB4F5B0A
A26C2F0250DB42F7093D8C55BAA8C5265FC5820F4E035824822F5820AAAB
CCCDEEEF00012223444566678889ABBBCDDDEFFF01112333455567778999
0E1840010F020F05834B544545502D446576696365485365637572654653
4B636F6E6669672E737569740745840C00030F0F5849880C0114A115783D
68747470733A2F2F6578616D706C652E6F72672F38643832353733612D39
3236642D343735342D393335332D3332646332393939376637342E737569
741502030F11582F8C0C010B000C0014A115781F68747470733A2F2F6578
616D706C652E6F72672F636F6E6669672E6A736F6E1502030F
]]></artwork></figure>

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

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

<figure><artwork><![CDATA[
/ SUIT_Envelope / {
  / authentication-wrapper / 2: << [
    << [
      / digest-algorithm-id: / -16 / cose-alg-sha256 /,
      / digest-bytes: / h'F9D837B7118A8972360022D51AC5319023D245A76F7504079B9ED01C0B4934F2'
    ] >>,
    << / COSE_Sign1_Tagged / 18([
      / protected: / << {
        / algorithm-id / 1: -7 / ES256 /
      } >>,
      / unprotected: / {},
      / payload: / null,
      / signature: / h'332BE0CC2D109F23ADF1D220CECA17EA38047814A6CE0389AC370A32AB2008B44C67789CEFEEEC9208FEBC55EA60AC2E88365498D70689C190BBDAD2E60072B9'
    ]) >>
  ] >>,
  / manifest / 3: << {
    / manifest-version / 1: 1,
    / manifest-sequence-number / 2: 18446744073709551615 / UINT64_MAX /,
    / common / 3: << {
      / components / 2: [
        [
          h'544545502D446576696365',            / "TEEP-Device" /
          h'5365637572654653',                  / "SecureFS" /
          h'8D82573A926D4754935332DC29997F74',  / tc-uuid /
          h'7461'                               / "ta" /
        ]
      ],
      / common-sequence / 4: << [
        / directive-override-parameters / 20, {
          / vendor-id / 1: h'C0DDD5F15243566087DB4F5B0AA26C2F' / c0ddd5f1-5243-5660-87db-4f5b0aa26c2f /,
          / class-id / 2: h'DB42F7093D8C55BAA8C5265FC5820F4E' / db42f709-3d8c-55ba-a8c5-265fc5820f4e /
        },
        / condition-vendor-identifier / 1, 15,
        / condition-class-identifier / 2, 15
      ] >>
    } >>,
    / manifest-component-id / 5: [
      h'544545502D446576696365',              / "TEEP-Device" /
      h'5365637572654653',                    / "SecureFS" /
      h'8D82573A926D4754935332DC29997F74',    / tc-uuid /
      h'73756974'                             / "suit" /
    ],
    / install / 17: << [
      / directive-set-component-index / 12, 0,
      / directive-unlink / 33, 0
    ] >>
  } >>
}
]]></artwork></figure>

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

<figure><artwork><![CDATA[
A2025873825824822F5820F9D837B7118A8972360022D51AC5319023D245
A76F7504079B9ED01C0B4934F2584AD28443A10126A0F65840332BE0CC2D
109F23ADF1D220CECA17EA38047814A6CE0389AC370A32AB2008B44C6778
9CEFEEEC9208FEBC55EA60AC2E88365498D70689C190BBDAD2E60072B903
58A0A50101021BFFFFFFFFFFFFFFFF03585BA20281844B544545502D4465
76696365485365637572654653508D82573A926D4754935332DC29997F74
42746104582B8614A20150C0DDD5F15243566087DB4F5B0AA26C2F0250DB
42F7093D8C55BAA8C5265FC5820F4E010F020F05844B544545502D446576
696365485365637572654653508D82573A926D4754935332DC29997F7444
737569741146840C00182100
]]></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",
  / 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",
  / 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.suit',
    } ,
  / directive-fetch / 21,2 ,
  / condition-image-match / 3,15
]>>,
]]></artwork></figure>

</section>
</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+y96Xobx7Uo+p/fx3foI+U7ImMAxDwwkXcwWoxNiSGpON45
Ot5NoEl2BKJpdIMULes+y32W+2R3TTX1AIKkHDuJlb0TCV1dXbVq1ZqHcrm8
vRUn/mL2vT+PFsG+lyxXwfZWeL2kv8ZJvVrtVevbW7NouvCvYMBs6Z8n5TBI
zstJEFyXr5dREk2jeXnuJ0GcbG9N/WTfi5MZTLw6uwrjOIwWyd01vHowPp1s
b12H+9tbHoxYhlMY+eIuiF/gDzCL+69ZcJ1cwk9N+iG+u1oG57E1JI6WSeqn
aXR17TuzwhrMj4sIfkvCZA6LOcXdBTNv/CGYrhJYozde3ITLaHEVLBLvaBnd
hLjycHHh7ZyOx0e7+BvtdHvLPztbBjcwB/xu/7wM/H3vBOZbhsnd9tbtBQ/Z
3np/e88HAcAAvn2vXq03YKJVchktAUywgzLuIlzALl9VvNN4ehmdB4vwAn/l
A3nlLxZBnHoULeHbL14IoIMgUf+awsrU35fBBSxDP4lmgfn7apEsYWB/hefk
42/BlR/O971L+lwl0Z/708XVh8oiSFKrPax4R0FolnkIkJyHPoBTfqYlDpaR
P4MDevJC355Ya7xS36pcB+GfzuQbFfqOs8hRxfv2MgjmwdIsdOTfhDP7Z1po
/8r/MVp83mXO/JvgFr7zJ58mz1/f6aWfXl5g/UiLOwynyyiOzpPPvL6EPvOn
KzV9zgr7iJSr9/4VXAKzyP77cOm7Dz4XRv75yFqhj98BXJTvACrCz2qVi2h5
5SfhTUD05ngy7FVbdfX3RrveU39v1Xpd9fdup9nRf+81e3nv9hqNJv39oDyq
ECVc+klcDoDwZX8FChUsg8U0KIeLJFgCIYIdlq9ga/PYHR6vwqR85S/Cc6Cj
eY+SMOdXotLlWQQ7X+RNuAyugU7Sg+Gbk3GlP7+IgDxdXtFPQGiZHD7Dh55+
GD/jp5oSefSHDvGg/7ov7/rLCzzIyyS5jvf39m5vbytw7fwKjNvzgfJfEHGL
96ZRHNB/VT5cJlfz577+DvCaxblzUO7yz8Pl1S0Q1jKAcHl3nRB6ZKHsL5tx
CjrEnfzl9DJMgmmyWgZ578GZla+CWeiXiUVlB0yjxTSMg3Lil+MkWgaxRo52
rcozEqbUWhqbeoQd21vlctnzzwDZ4czx39tbp5dh7AEnXRGPia+DaXgeAu32
PcVFPbhyCd6sxJ/P45K3uka+AH8BFu0BygTwD5hHWMkQOBtwbYAwvAKzzIKb
cBp4twBZ+FeG4Wxv2SwOudpuxfNoUbIW4N3ImGbBeYg8xV94hLTRNSDu2RwE
A71OODMPcNW/QAaZXAbeHNB2ejedB1507mUXWFEQuQpnM5xpe+u5dwBXOpqt
6Ep4H5+H1j8/MbyCe/g0bcLDQwJhAXhT7J0FAW4AcQ/eQtoTB9c+nGUAIAH6
spr7S482lODS4zuY/QrgO48jj+7qEl7z8UyOw+llIfCO4bsl73wZXXmxMPxy
HCziEPHY86+v5wLMuALbxNMYj7e3ArgD8kE5q5tgMYuWMcDyzlvFgTcLz4le
JJk10hkDpLe34NuED9l3EIljOoDxOCbetsiehTcKboI5Tg9DgYmMeCX9GbDN
ENE1wQXhxOrVvtmOd4iHjq/unPYP412CsOCrQlcbW/PmiOk5bCVcwqhrgABc
brwHEQLqNpwF3hKYN+wUdsJwihmpr6MENhDCt+6sXeNmcbpFCmHDOYlhiwBP
dAm3mLGw6BYiFjv4DXzkarWgRcMpnAXJLeIWHGX/EGQ02ILPEmD/AiaqbIaw
eYKlTaRI0uaVffxYTMs+fcKlgqAC62Zk3966WIUzHy4CQVfdJd4XAgH+GvvL
Ow/AAwcdzaOLuwqTpefeqflNbeN9cOfdRstZ7D07fHty+qzE/+u9fkN/Px7/
5e3B8XiEfz951f/mG/2XLRlx8urN229G5m/mzeGbw8Px6xG/DL96zk9bzw77
3z1jHHr25uj04M3r/jfPGPntgwOmAMgHx8JHfr0MErq5WwCP6TI8CxAI3mB4
9P/9v7UmAPN/AW2u12o9AB3/o1vrNOEfIIEt+GvRAtCK/wkwu9uCWxwAsUDS
Op97U/86BCxHWgz08jK6XXiXgH8VQ9ldIgo8C+4Qo5UFcyGutLj1J0yn04+9
4MP13FevgHZBszcrTbznxC4USGjZjJKGn4BOkgDLCHwgZnn3Ga7xLm7/zr2K
NFMfKSrDBqlFtPDn4Y/CIvzEJ0AIcQW9zzAjWhWeDywdWGYsS397cOop+Uam
9d1ft7euwovLBAl6AlsG8uRp+cm7Ws2T8BoYzFm4gOsMi9yJg8AGoiNBfQIW
QlwKuDbsDeabx7sKpvFqelnSR5NDI3dOh7tZnKPFxIh2PvKVBI9Ar8bZbGpj
JY2qRClpDNAQPCxgwa+BrAnQcpaCZD5cTOcroIvwi6f2dNqPiQztEalanIcX
q6V9OABeuMSxh/QPJjy7I9KFC2HWEsBbwO2myZwJwdhGEfN52D8QwR9WAVwO
oDdAfoFaynS0RzP0QD0GrnLP2WhE7lY6lXqlLieToA1B3R+0KMzogABb8MQQ
4cZI9BSVs8cfBzEgSFwiPRxHOhdNxHa5Vc+9Q6SGF4H35iZY3oTBLYgfV/xT
bEQP5yYBiGNgj8Re1VA48+klsqrZBuwBp9Qv0u1YoIZDCxwO3hwL19SSi6Lw
MG5WTiKQgGda1sDpnNU5E8sUcESI4fDedQQ0EoAYVoKKUIn+oeLCMhUts+Sd
rRKFBHAeNtNGPCQx6YyWjtI4Elxclf5eHv5qcaNQ2qjkwXsRJUyRkYpubxGE
cHG0BNwCXLZrRCKQtxRYvNslEu1lifRQeJe0Gj59UODg9L3JagkvL/EGlYjL
o2KLGoaStWluRGwgRoKuHmso69A5JIlpRlSN6Y5v4SZOOYarASu0UfY0eg8Y
szPun+7acyvNRCgYfhm5y+oaNTkE+RyUstXFpRfhTpwP8XDGAgLUNXIeGDCr
FLApJeufIxwVFu17f1kFy7vjAK49Ei/5VwwnGgdww96KnHeymqJYwbR8vFzS
UQLaEHrBu0vWbliGexF7cEokseFytZ5if0qtoEKTaLSEoShe+ucJ7neFsl6i
5DK6aaSmhj8qZWSpFs7aL1xHC0Za4YyA0c8BB4m9Z1UWYXxyCa23QKuLABH1
gcD0Wp+ld4IPCaoCeGmIFTjg01v0+gsvQJipX+CUt7dAjFktiWyd21tB/rqa
z+hWnJGcOiVeA7MQsBFA6ld6L/ebjJ3ADEkegZsP0g7hEFAbuI4gWcOxxKuz
GD+60KehyVzMA1PSfrRMCfsu4SCU+H/gDyrIX5StP1945o/zoPwFjv2JdiZ/
frLG/mRhBvzrYfOy6cJBOnn4pXpY8McBae7YP8pMYiy5Zz6Pr4wCDv7nW7wS
eHx8w8y5ESimpN8A0QQd2eEu1rF4LBHgKdOROBJDnlquKa+5aQ4iyRJQYxW0
8TTWCCMBoqJuIN0GuALWkBx7hdHULdaxsCbJYSMnOHJJhEHIjnVvPH1tUH6n
hYn+DNdVfwxF1DmpCTHPcL4CTRLoGZLrBZ+GmhR+xA3cgtpoI/AD8PcB6PtQ
7NV/BE28TdBXga1o2B8V5t6PuCm8fQ48HuVrAOyhkkNOHC7z8TlL4FfxBYtX
CAFHZkG+D9zciC3Iur/HQ68h/up/eYz+KyXjWbrex4+kRU3Dazg4ZNCsRGVF
C+fDzhTD0egbw+3FzAfs/QwkmFuNB950Npuzyqaxxf6X99L7nf1vMi56FeR3
qFLYT86XIKiAnv0e585/ArP9nVxi5ETjiWnCPesfZc1zSmRtJ0sp8PGP3u/5
g/yL94ke/x4Vvj945ywLeUAprpjjBZWLCotFqEOUAYRXZeFAeLPf6VXKdC+9
nRWIlt7LL3HGXXz8BwNeJYET9Pa3t3KAsveS5IS7suZz6wcp4ps/ijlS0VP6
MVaXYM2YgNHb2gsB31usrs4As0qIKUhXz+5QirlEOyFz58R/j7Sax7F1sIq0
GZ161sEB1KqVSr2xyxehfPrd0bjsgAGG1PIeCjt/6dXtp7xt+LVh/2pvF561
Ms9Y+Hjpta2b/NwbosVACVZ/BY1/xv+kK6SuN4+1B3v2laYrHnlTfBqknrH+
cR7NASfIupkE10ICgiVePZFVaxWePf2+509Bb52RqMeKAN9gRkhCNRbcouvV
nLDB88KEhc2U2oBmBtTNPM+lRzFSZiBDaOH0dmxRASfDyZnu7gpHZt3c954l
KNA/q+CoU+GNOGIGpHAWENqgoSVELoQXjmhjWcnj3q1/V/IciUxNTPOyzw3+
pQVI+sh5uAR8WRFoQDW1BgODIT1f6/6HHpnwzsi+OouuQEHiI5rRkk+M4Edz
eDf+HDatXzIWVyQQZFHKyorkrONJ9Wcz50lq2avAnwVLZetRojsqwGiCF+sK
D8JJj3wkiCCCxLJxexK1xBvEV0QkmstS/FytJ3dBecwmOvtHMKVTX8VqhS4y
xmuZ1ZF/N4/82R9QxWDXJyK7sjlbtgleJFmd9ZVSPrvihel983WSm4MX07q4
vnN1gRXfyDPxsrCXwN4UyVPTAK7IjG1suMUjlglPgXKoqcTvsvLnXv/oAEXO
DU2bqLDTdW1X6pXaLvAklyaYFeaSB+/gnC5SdM4vohKHKENDz0HMKLE7IHNa
Gv2Df5CsofDgr6Cpnt+xCY5phOzegogvyEWGCAZ/0etXBj6I2vEaBNPSTPFS
0KyFQLHxXUhDzBaSa301FH2Sm3t7GQG3iO9gGR/YUhNc+ag6M0TPQMT1VguY
ME6iaMbaoWdZGqKlseUapCVxGlcEG4iWSuYGzZTuiZ5O7WhCx0qbyUF/bdDG
227fhZ1nCCD8zBsCdvxsF+8HfuPGRu71N6SiSUXemGu+nni8uDzhByRAnWew
p+iE0lfHQZQr/5oPRL2EBDuYz2JCXo/1I28tg0ubbMRrI+zaUWQPDftFPSnP
sqIsVUrMRq4An5kH/nJhOePRloTiS+Joh9oMKxcWKBWgrm2bUrNarzCuwna2
t1g090g2j5V5hWVyAFDM7tL+bBbiAnzWzRKLkcYgqRLrBqRXkhIZu0NykKoV
2xZN7yb0bUOKuSxA/tkcpT9jCJDeGWG+2p1EZHkKpGkzn21ZooHfAGEiGUfD
x5iGeAQdEd0l7RkosEQVTEgmePRUwhA2tXwTghDKpkFHrCnZdqE0TmxvsSZe
UlZhtL8HN0AsWCeKF+H1dcCGSPJ9KY3olO4N69UyVCtoejDc8/41epfCD94w
pUalxP+0GGypPgWyckrhYc31v0SEAcUEQzC8Shz+GHg73Uql3dwtqTEajKBt
BfHlAsABGgHausIY8Ale/rv3hfe7nIfeOz0J/ALntkC1L/OxVq1uvqZQXM0r
/9ZT/d773e+cnZVdbJEhlv5lDcDnrNyZTVnqcJnv3D5vKPNA1mBeJfs2Ruxg
gOc5qPbq1cwDeTVHX9z3SDesnIVJvEafVGB4KcMJeM3tLdhbGW9U5gHqZdat
R3YUJkBoY4qiTH8FXv/fO8QXzU3d96q06ISvWtn4Lve9Gj0xgN336gIbHU0F
vzXgt12jN1m+HTI3pagJUXyiHh/3vZv42p8GL19UX4D4hZi9vbVPXIqYNnKe
ndou++ZQ3ZuxvzH/4pKmYgg10XJhK+nYBFEL7E9xQIncFE0XNYeAzwIxA3qv
9E5aiQA2FqCwVw45SBS9BwV8rYbDdn/QxtjNe4mxjLGPghaZ1HnlfmLs9xEr
QiRnuMuI5igH5QEFpROgw8RX4+gqSDlHlSX7FlQZ2N9MeV5BtyHzE8elKNWQ
VTmACPwfQAhEJwwgYq/U+WrOoo8vVtAYZS7tpkbpWPwdCma0wch1DNJ58BEo
8RT9yOR6PTdxCeIOsNkNYD0uazrnKAV17nl3gM6bP0W3SMQb/izKLAlKAADD
Lhk1aKE77SZ+It6VYKMP4dXqCt/E3+8oKo1tHyI9xYA+iAuk5Xrj/qn3GvUD
0mLmfniVcdcbP5eWAhuVxm7ll1drly5GybHNmPmuwvhSxEVyn2u85Iuoz18d
ujYHWF/3VCwNLoAuG36bmfb1ankN9NXyefvWzRYX/J0oyxwcJVEAOgIQ74wa
R0YMeJhr/Dd2CgnSQbUbTi/4cB3KfUnCq8BAhveACEE7kJuJd17fPrK00ARE
Q2C8+yV6kZ9bSMhgYQ8fq19K32ZMMKY/L20ycCbA2CezqKx9QqJTiPRorNW4
xfcEyeU6Lqqo6LoxFj2dU9iAJsmOEOzqW0Ymr4hJnTU68jcSylnvcvwAAgFF
YzICrBbrDOH2prL8Pbup7JjcTZEEamb5WfaDcbq8nMyecgUL3koeJbTYHIij
U/L433LQrVF9FDNVV9jVhXALrFsIA8UXmUixIFIR/4lNrIGn02/7nvj4gGoy
ymY+5jJv5rno3SIXmTWlaK8iGmrLoY6Q2WFrPhPjXY+dXNmQmZLahrpiavlZ
6cjbqd+3C+X1T22CVKX5fK2ao75ruc93mk/4nsHDqX/N4aAhY6jnpfz0ipX5
KLIZgoskfxrdiDnRnoWPW2GDpxHCEXzUhmzREdSCpyMCXbljnlC+X3CGEu6i
eB7G8MDN8mcSd0TYu9L2p/X6UJZC5GpNeTRCD/T0wB0QLHIpBa5biIVFKdYQ
h7xVEHHw0FBIAHaEW/8sZsMEMgV/IUY0/MgiokBDreTZYTc8nzG58iz3yWUE
Vq0hKggalZFUA1rUQnRYf26tVosGgKerpeaIGppsRLI/HqjbbzziTphNOggl
b0dKkiwUNiO+EEd+HCNwPEpn0XrDThziAhwBc8VxkXDjfUE8tExOfZBzdgmy
37IgbSATEmZL+I1GVkfgp6gjtd80LWYR1AkNWAMI2TLPYRYhkob6Ps0mpjYB
mtKUlFTKsV79U6LKgNXT6PpOnZu1uYX4roCxfc9YJ+vHRSvNmvgeBpedux4I
kqvz7lQFLnwq5NVjobvwjsgtQWFJ/N6RBG4YCHJkGyMAaHi0dJ+0NXkFKSXZ
/ml5mDogCkYK0SuWvq/JiTaLGLQPFqsrgqZFA9OWwrX0o2+U6aoVtUtLEp1M
mR1sS6/6hkM79BXF2CtRzRQ0OKo3EX+XowWdi+PRoBCRGfXZasU14Ao6Gi+N
6/LVQan5cV1KBdNhLUYpyVhkWcjGSDMlZRfE4AEYY+KAKxXV/PGjjzN8+kT7
R0qsAkJjspuvFnE0D6dhYuLXRJGOFZzdC0xhigC92Z33foGWQoqBjQjUN/7y
bnsLfXm2AX4j62YGOr+8eVNpLxlP/loDp464fLSFkyzmeRoKvpg1BGZf1Oa5
LxXu6jEWfyiLMFoWigCjExCv1g1VK7essZaYJDZS2pqxtSbTMkVsylPOjEL1
BNAkuStP0c4QW+O13F9Ovek8ICujeWm14JB5Hd/rvImy1/daaP3exLxbM6Dp
0n5HmzLzTL18xg+29Yr1NLuRl4whWmovhwTqwnXT5wi0er+sM0+DskSywOuW
CbYrb6AOXab0hzs6ywiT4D+5RtH8C/kgE2mRkbRebCRNfS5lJdWUUOw6hnF8
fispGbO0ZYGlBrNq9XV+qL3OOlYljywTWzmn+KNbAKNmSNom48imi0gWbo3V
iYRuGCxrAIX0Qkv/xRQlT7dOrFey9o+K4rIk69mwvZfZEo/NsLYpBiSIG/wu
x96iYgVyxMmSF2tcsLyNCOkCnSQz/WNMMik6mwGzor9FwM0VjgzImf1rH7Nl
cyYkmYqo5upI7ulpiQbOASeyUUlkaiNt0aaKGYPa3hrWUbQOzDsH+WgWgt6N
UXQsUKT0H81c9CwUUoWmfnqT4u9MvIQKLOEcCSUZeRLFoV4QsToD5CoLHZsB
0k/UxCan45mVKLwHaP3F9Db5A+kEogK8VKn1aMrCTPL3wZKM55RiP4ume5hP
v1dYlKVWf1ZodrcS3zHThIR5HRIqYh+si9WznePJsAzjk2i5DzoAGo8mQ+96
daaWT7kWc6Da3tvjA7wjN5zggS8/swsELM+nMhHtAVnWHvz2N/jzTI4K/65E
WvwMcyEdlmFl5FV2U1q55TpJ8tHMHA9RUoPKSjI0x4M0SGlBC2/47al6pgm0
HBM5QO1gV221lFues441N8HCIB1CpPXcIjOeSuV3tlcAFpdNhhLxGC6M1pBx
OdLFV9tOGwbiAD9/UAjznKutzTB5xgYFh6z6bWaQrTGpL86uMiKGbUWyD8yN
VjNOKdjRCd0ca2USo5e9JWI+MwIsHi8ARLMwVs8sATfnjH0V9fgMZKkEbq4V
OoOxg+h/pMBcECgxuRxrMoi77c0Ja1ofkl322KRNhFZCJLAEEgb5aU4QVl4F
kU8cXKByFtkYQSFpfkZJLLTWs6khI0plZZMM6uk47HUqsIvAGrOsXZTZ1sIq
feZyLIw/Q2DD7M3IbyTpuX4nm9qvWzqik3UmSkIQPzK8m7utWNx+134cuy4K
I6vgIlEk4QRuXB0VUqA4tVAHCwoWObqvPWGYR1TYJi+6k6JYSpUqttfk1SdR
dn9xr7Cnkkiwa7gr0Ok4nI+z762buxHmiuM7f2I4BzLVGVMexcIpV6ryo3KM
lpUDuCBxtui54qeWzxhHsJchBz5WAleoA1dN9EGG7KUouiXLP4Soa4qeHwyj
aXtG0bTRIatjPwQxVHwprgD57VTF5Dm58goinJ8svpql9e10fn1JHUDwwb+i
ogF3nmTP4fOlmIjfLpKcmgjiIWY/kBBP39RHuKO4FCfbOf/thdipVFakZ6Wz
paYE6nCs95IDpnQ1BVuWxL1kzQByYcQcaulISHgugoT5aW7Ap6zktJ+J8C7i
mvfGeBMK5RtWFB4VmF0KkcmtJyGxzlMHZGQHeRBCLTCQaXEBX7PKJizuSPak
w7Qk9oqb5YFm7wxMw4XOmxQCrNy0qQoRmh8s5uHiPQa5e1SQQUElNRo/o4sx
iKsBw+xo1KEaZZVmGHk7C11mIpGIJgSCM+ZcPDumIAfasEGZPLeCfayAGYUx
ziTkGp2aAhIa7GKK1kUxSKrJKRPh1DQTkYt9Gimt5IF4/Xax/JkwWxn8FC5r
A2CeMzQvGrjiuWWJZlEQq5B6ca2gQcN+4Z/HGSyHvM0RMsSf6M4jbXy2uRKh
2C8uLqJkkiJzpToEvHMYsubUasjYNlmwIxxJX0lJN8jlXKzvuFYqR9vn+CP5
mEoJpOzqWUQ7sMynrrKQMapgUdbM9Nr247PlS9wol35cuGZPjLU6qBBJC7me
U+nmsoBUbR4JztRZ2lqqI9lHIGIbhZHC0NKVhLHGxJwrkut0pvuqvngfn9ta
Gr6mJMNOSjLMu9B8N90IIJ8r73ARKMyMMItwBG1ycoVLuLdYSHeKcv6r6Da4
QcsTOXS1gxoOJrr2f1gFWnh3THdif0CXGDMiWs2crli45Axd/UHxqlGJNPUF
vpQY7nfJC6CaNUBPciGmPG1YHS1YUD2RVAjUMkA+GWEdlPcBJTEyDcCUekzo
QSs32ZBUjiZDDU4dtRFYGDnOQgQKSUySpiq18NRYoSCi2FolADhQF+lchAuN
I4any10fds64tHMAnILpLHuU1+jAvMtUI1JQkzBJ5PVFJoeYKrrEWFvxLXvC
KVcNAarqudihnVjvbm6FTHPAB1pLKGZK5/6oogzwIxcNLBFGGeMlCjKg6gEZ
UGXH2HH5AVepvNwgq5zdyfb52uI5StIWZZlYJjArzRP+S34EAUzHB+jAGUxA
idhSJsPiSCxo5GiGxyjocgDAt1Kqz4kucFmF0c1sxewqIPYeoR/VvhUlu9wE
CoH8tqnfllcnCjHSutRctAdXofVmBEwccIi3hHfg2vLQAvXWiONkr4jB/URC
tCwQyz9wCDT+rOqZ/YSjJjqIA44XZvlJYpB+siq91VKYbcVN0xxSUomrdBmx
cAmTrIJw5sxVv3e2vxJyKYQRLfgnLwquMlM17pkK9hzHmZkubzlcyJ0rrcCn
50LycukvZ1Sqiaz4OJOyxLtztR4yl5niKdOpOrVqaUYvSUH/QZOZ9TxyPhbS
num3n/HdwLgFrFegMsyzxY3SfjXMl8AUZlJriZxQUo9dMlCRNLV6FeAisoWJ
bGE+UL6KL8og2urIlpQMkp+n6Fa58YqL3GxvWdqzygG0XWDoNbAjWBSRIUub
b4XSpBkBGQbP/Ol7h41L9RyddsxlcVTqCfkrsTIOF6skrrm800Xj0tCm4nGK
DlkFJ5WpjKbc3iJXg/Jv4YMsaaLtIBSt9fIoFA8MeeWTBSJWnrKu9uxagvvE
gaR0npYiILqi3q7wcplNRDcGJuvMx8DgkHIeoQE7cAtCyR+30I0UgJI/WDtH
E2VPCj5t8B7/+b88hQUaNURLZlSc58bzBGYPWJZHB73npZf1k7Pnu3uX7Gpo
/1dP/1YKmsBfd9Ryd+XZT95Ozqbc5eGmZFe765bgvHnPpt3qRfbALxkkb+jQ
syABOGnUSx3JwwBmNpW/Wn53QrfEq+17Y7EBSmAia014x2zwqaiV9QFmGSL1
y0WWqWI3uvpLbiSZFGl7fATZ06Ohcl/kL07PgGzTHOMFV4m03vvM4WXBcllG
5xU+kPo7zjPgR2peBYpapVKrd3etgCzhXY8K1rLjolJ49BlyRhvZcKiMXr9h
uihWLMfQbBJrTUipKCCwuhIaB1QhJc9m2TrYOhN26szqS+nDUk7dNc+ep2IV
x83ePxmso+S5hmFOMUclN4iIw9IMCStaL9W1M6TM/kbhYDo2eJNQsJ/dBM4+
EG1Bxg1tbEO+34BM689dtrvaDExACLoJ7rSQpvIj3cVLLJ6cE8Ye2wulswEN
dzHjBgMADZ+rHJO0mlN21qjYIh4Rop+HQqSREJQsvYSAJxbuhI38qu0CVbqN
Lpb+NTxmh6WRlqVsnXIJqyVXHLiY0rkCilQ1bTLywm4qRSa7UFXLyKvCLXKX
VFKkvCZVnVccAzqKq7CqovBs4Ef4PSnSjxVyL5Up6zqCm4/xBnJ5KhQSJd61
ksS6Y1QHVZ1Vg5VOLdI7rtFeIVtccjal7iJ5Y5MCa6YpLKzm3aNMGTN1kQX0
3zRIbfOovt+C0X4LRntCMNrmAWj/8TFhSurUnkElheaAlTgkA4xrM+LAVMgy
rhIOEx/r4pVoRfmkHLSqnmksyogfIzFXhJjnRTMFRRVxSTWERMpHqK0YehMg
Htt7QGnZObrLFbC7MjqhKCwNbvPFIoqTcMoSNUlw6mJIFBkugQPJ3p5Oyl02
KmBnLjTVL7zXQVJ+uwgJWnZNVuzXhY072EllFaYAWZ0rU9Cira4KGUF46i+5
7JJtOUoHFIQUjHMZcPgAuoBuovmN1YgC2Q7XiSpJPVBj+8mpPsduN/Y1UvOH
Am6MQhDV/UfZzUgUug5JSL4fThVlveGOmx5wwJFyzqs6EqYzDdukbl0n3jb2
OYkz8TMiFc/sZj4zDiy7CG+4YiCXlDNGMNaFfaXCTi8DYBE5qgCWG0kX47W0
CwpghFXvcLl6Elzw3XSVfy1ukKAJS9Mxc3PU4d04vJiTFnkBkvIbB1Qn1PQU
Mh2cSLLK9JxAIVIFDKGjrbKb7vpjzjLmsxS3EhsULqk8ReYI+F5np0Adbooh
CljubLXQCQparjTg5vqzSPoU1E0fMQ4IBdwg+rmDTVVWi139K1YBVNYLdWrk
GsJ6SjZaY7TbQpl8ycGn3C50PErip54KV2rLykphclTRZWfZEzdw260hr442
fWhp037KrGDVDHHvuSpQSA5IrPaGa1dRY/E0QPE7ioVOpUiE3HL389ppfSIv
ownqlX+jyI2rYVFrDqn155O4wpUFMsgwYJ/6x+ezEKvOJP4VWc4PhAmqlZaU
315/gaGBM7vfKvqEauGwRt7m8jo47SK4LV4r4tRlRICiO7+2O8iLGNfIUuzi
XolfpVuTLOLHcTQN/SSj4WrRCOUibAniPUum5dUqnFUwKOQZkwTNf+kscQ2n
a14xyezmgBseVhpeOpRWsrl4Vm6Omw4v0YaY4o1K6T9ZmZVPLPxJ+kGwr5wY
r8WETB5+RvF3W8SsWYDcsqNlFKvyh/n0zsIOtO5gvQLLbgOIB6SsGFVIjL5d
IIXiZYlabj4I+1FBUVK9J2ICPsculCkGH6drBBV9GLc0jBYb7+1qhTcKcHrt
rLCw5Q0JwDyj+D7p5fMALURr36aQ/kg08sVCKGW6NlJGqqHP9U23lYMjLPSB
IaMmtgQLowEfkFBVKQeyhO3580CnI967Ldt985COHut6ejh+hZ8eOnfK/ZHb
F+GLl9k/nqOiYk/DXS87yiwe1vi90Pmdv3sb//lJTeBlTfMPncCq7f+AP9YE
nmuww8KOD50AgenG1aXJ5M7p0FwbgOkX6Ql+chn0zn27+Sk7gdnIJsDIncBT
QtIGMxRMACcCl2IJImLZ2GxypyucANSgZbhvTBMifpBNQoE18Z8VT/BpMywq
noCp0qMn+LTZ54sm2Pz13Ak+7T7g/ewEeXRh3Z8UKr97yMfVGswED9l7zgTv
HrT3zAQP3btDE3kK4S1YFiKHattkO+WqdaiqpvzWEj2bhuTyhPWzZ3zi/Ica
3ZinjPr33T13NgU2z4zwDFzsLTS7XrvltYf0fxOvPvTqVa9SqTge7nXHkPZn
1/eVlrBerlHexolYfrDXUUoz0Lkx9EpJYvGJrAM9Ur0SbU2mrjWZtJahQonu
E7ay+kpWPnUEclTO83pXaSVD96m+4KqgylC4aQfKTqW1u4HOgyaQC23nT/z4
vUftiech1na/R8y00/XEupPZduV+wVqrXS68yKNydYax3OsWYaVw6K6qOheG
oGOgqK2/0hsoLU+fL/0L/L1MhhTTpPXZ82T6TFcUDIS537+1ZOkv4qswcc5c
/H2pEh1KGyBhNMcPuqnob9rHcKLfIitRV/JUHxmPWk50Rm1q135FWfJTKhh3
EMp8bgMVJKMFkTrii3DOtbgIKe/dvehYlVwlCCC8obJjRwTLLeHGPtGSUnaL
lApbx0x/VW2h4KMhJR+klT6N4E4UtF3wOOd4/xU1GZdh3KfDaI70EP3lJ/PS
5jqL89Kmeorz0qa6SeolAoirkKQVECO2PUQH+Snvpfv0joKX1usahS+t0y/W
vKR0CiTIG3+pWI9Y81Kx7lD40jqht+Cl9SpOwUu0+33v8oUthoH09aL4pfuU
iZyX7heiM7i3mdLgvLSpomC9tLly8FMeYdlYBRDRtLHvHRg5THpfsRH255JT
jcQi4mpKYIUlnayuryW0NBVpMkInjw5ReZDQmjsV+qOMKVobnwsZZ8pkQvZg
4zQwws4aYYCiHOKC5aCzjgqJoh175j3jaPTKP2DoM9c4TwUNvFenp0cnIkeo
5OZ1Mhsa6otkUr17UFZKksR0t6YEgrZ9JhzGOGdRO1KipPE1vzBZ81g9L5qv
cMsvSroVeY5M6AiOIlvkiY4iJuSCU7nX8eM6Ea9wH3mH+a8vamwmcDxR9Cik
TY83nz5SNFk7yePMqPmii8B1vQCzhp083Jz6SNFmw0k8yQh84iSek2G0HsJr
RaGPH2fhBZ5UdF5OpkRvP+Xx0zWTbG7me5TUs/EkudSvAM6PkikfMMkmdmvm
betkzs0Asn4lm9qvf+7T2dyb8MuejiMKPE4jeMBKPsPpYKWQpGwhP4aifHjw
JBJlZE304JV8Bjx5mM3/UWrKBpM83Pb/SDUms5bHqDVrJnmsD+SRak+OkPOv
7Qnhf6zxg9jUIt8RYo2wwGLvoDPw6nWv0/I6DVTFO3X851McIc39XDn9qRpl
Kh0hzwsCX35LSTbSXjmjA3x8vlLPP20QTaWykHUPibRzhcJoeMpYwmkK2+hU
vIyeE6YSk299KTm3WugQwUurdpbWlgggHG8GM5V5BfmOlXTNJvGulNuVVqW5
i6oxRZ0Yh4PWuWgdNHGuQlWiJi1szNc9kZW7YRqtsIw3Rg8F06Wqn+HrJB+d
/hXrEFYNidQs3hmWqQCd88dgiQV6dg7OPad+m12OjdkHKoGh1PZMz2ZHZ9GM
u/8eGuBvxmbvX83YnLOrNRKS3MWHfGmdFPAoCeg3w2z2pacYZluKYeXwIcUK
d+LV1RUww91HM9C/61T1cYWHq8T75rud5xxWQKvYlcogkkJsty1HrqN+LqoE
ktsaTyUqU00op65drlN3fZZ/dgW/XJo/0dtYJVvb/ypK+bfHPCHx/958+PyO
LXZp6Xfp7HhZ1dPz59Mn9BkS6FuZBPpMe5H0V4sai4jPG5f+szUWwclVriGP
S+zt5M5spyvg+3ZVbbW3bB3tnHYjqvoh/4pTOYXO3XbGqhvJIu9ucVa5yS1z
88pMapzqjWfyytyCfaowOZfGzeaTcf5GOqUsm1B25X8weWQ41ZqKBp+15vua
gu0b17kmnNiwwvp6LPjVVVXPLFeVl+LqEaa6VDY1UtEMp87EZlxFylRkmYqe
xq6msQFnSa/hF+YrtDvhKrzTdTyFS3bkcZSNWMqmdVaIsazprCyMJtu8TPMb
Z4bcJqVqjpyH9iy6N6GMVwXZnA9txgMNi2MMzbDA+3gg91+Q9OF9VcJG2oD9
oSC5uMSNu/Tg8fHx90fj48P+6/Fr0EWOj98cw5HX+MHb1ydvj47eHJ+OR9+P
/3Y6fn1y8OY1PK5nH0+OxyevXo9PTr4/HA9f9V8fnByewMhGduThyVff/3V8
LFM1swOGB0evxsffI8zGOEeLhwz68Gh8fHowORj2T8fwoM0PrB9hlUcHx+MR
POzxw9PxIUzbP/7O7K3KT2DLB5Pxyen3R8dvhrDwg9dffT/pH3xDb9c6rnjh
XtPPIFy086rzuF+5R5j4FUoSv5QI4cDtl0pQf5RA8U9sLZ/fH9UWXvJamj2p
m5mkqBPzuw2x0lO2o7GCsBarADM02YKX11KHX0mT6vuA+Lhe1Z8fdnlE+udv
wSs90XWnuc+9K4uh/PokcCRq9O7mIrhDQjMy6q9Z+n5cbRMRY9LlTUiw3a14
b7gyg7QvlL711CiYyxOdcYUbYGBcH8NaD9eLkHrZUkyKDjDNvlWduMCGdj47
zxOYdmq7assK21VbcLs6DTH8qRREi7EugvxN9byhMSDhxYmq+k+yNekOPJQI
w4TKehC3wmo3UtZD6m0dj4dvDg8Px69HIMhguJz0I+IdA2FaLVUVGJxLJWak
OCi10tBJ64wMMLkMCy8uE3RwrFj5wdCe1YJqSemyDGrxKdHlXBWDuA6WYTQj
DMCyEytY4xx3gKIVr44rkMzD4IbL+tHubgFhQRzhWi3+BUCWG7ZgFwouYZxg
bfopV8wnUQmrk2CXct6vWSs3bMEahHBESx/7feYJjKGkE83kHd4UFS+gIjH+
xQVmVONHgGBx5vqtv1z66HkiLCyWpHfqDt4IjHQ+h5BS7u8mor/Kq9Jus2W2
sdjTcGS10CScbqb15cejCgLGWq1uUcZCk9XFJA9gubrFTmMd7HBZBnx3Fiv3
5xfREr5+5Vnc34XlUzfHm/JN6R1aDfMUwx5zpIs1C1mvR+00NwVGIe/W5eDS
mPWzQCN3CbnbdLXBndZDTt3t9PtP3WDmuNNrWXvOaV0X1EXc9pEpicQ9lYJl
wqyNSTuWR1138XFhmbu/tuQ7zkqCq/lSIdfwnAqQrD1YC0R5hyq9khJliAyZ
lqj7Qt4by+Amem+qkXIRpc1OCkuyXV0nqm0DBVWACLLAqa3PaKDn2RF2ervc
fMheF/Ko4MM19QuJdHNq3VdMJKlw9uBlwvvBLe0zBe8zrtPBmIa1c5Dz6YWn
WdZOrSqrvgrjaTCf+4sgWnFFVfhUtMR4dCm3a/qOXAXAz7Asqa4GItICnM2U
NoexEpg9YFfmevo1onpeag7iq1Q7h4sTKWTjAmD3Gm52ap08+oD61wrr7Acz
p8CbDjmxdiSbjpXtfI3GEFrd1sNUlrKStGasDG4GlDjBIBELIVQ0TmTqZil5
0GpsR+IItu6JEisQRa0C9uxkPbwGFLPFbZGb0KgyQ7kChF1MX57flWhC6vkC
BNrqSCNyEE1CaSFckJLjkBIpBZZYZheSXVUyptvDZXsLYI/l1BSkVHQPFpjG
XFY00mBzs4JlU7oxljnjxYemrU1Il5S1hkQ6BsG5kWZzFlz6NyFcBKykZirk
YelQak8ThNeJW3lRkLvkJLf+AzNT59HFhS4decNGgFcB9TgihcQsmhOtSXfT
xXBjX5JgOJQJeziopemFUa8oZzNn4u2g6p9HXOYTXR1+op0bLofFMBTS3VWH
CT/bXwLtiZ737SWVDM3KCVoslU47qno+LKFk/Z2WivcNc31nXK3q48cfsPZe
WSmunz7hbkB5C7ENo1LJfCD4lIZMxRjXFeyk7lu+W6ISlk6RdZnmw05lTmFL
kUZTqxuXl23GhWUUTeU5VjVSE+R1/2GOoGr4Ok0Z1JBzrMNqDkO3s9BH4e2I
kdnpg4CFCfpzlJ0vLnM/rRtZcTtSmIdq2AVItQjnHHuyOlxqGwWjSpLWJqYN
MjeIuuET5dO3wmlChoh8tgrnXDXV132+Eq7zTMGKKIRgGywaXNRYuKh3l9XE
xlbgrUVwb77CCq9SCld3SVQ71LjHhXR1xVwqAx9L4zsEFS3v92pAee6Dasp8
xvlJsgczZodQF5Pb3vrjk8smf4nhiJvXPI4TqkfBKvnnKnecV+wYISQtzv58
8uZ1yRsO3hyXVE3JffonUewKjqR/HfrX3MMPNOY7uPBsKN1nqw+dDhqe58Hi
Ao1UOIiLl13517GZ5YR3WPB6WV5nOIjxCE0/pKDLFEcUsIk35wTuog733edJ
MWqW6hAgUlzrobE9lGxxXBxV3qBeelSneYq9RdG5US542Szk1L+I981fPWXK
QIbJo96cjPf+jJ3Wj6TYPC6TyxAXdlq3X+srFTje4DW0Zk8vYbl4PwZcgOOE
Zfd9bzQeEERQElL1yOmtr4M73aBzKoCk5vD0AAS19+Fs1zR7I1RT5qL3PERw
DoTtS9Z2GLfp8Y5pcWT9ytXr2EfDFMsHdn1rDVFN3hzVaTeviDPyKiBLXHvc
1BjV/RYvo5CLqtP6tFGBNj/Ghmkxk6U0EN6IvZt5CQwCKomhK75sB6VhsTXD
OpktCA3JwpS+pjvGqcPMdylwMWCRRpHNB9plhyXd2WbMzcCcHnziUCSzOIqF
AfnzGaO4rZ7V2A5Npui3PnWsq6r93lJT7Nk+daIrcRc5ujjSBa5kuq6VTGFV
abywOF9Tb9sqBKtaDlkfVn6GCi/wfkiZI/dBCuOODlZXwTVwqxgYxLdlKhnK
z7l/Y27378toPtMsQvHYTPNZT8qTmrB89SFTgpY/Rew2lYJtNwazm7iCehnN
7mz/h4QrKOGz2O/Brxc5P0pW4D3LS9TIgLLi1Yw8g1tePR3DRPkSKNE7CojS
mfDXO0VhXbE25h72ZDQG0uBLWWgffUS6i01WFuF1h9zNN6HmlJYpgX00rl0b
O7nNPNLUso3wlMwBigJQIaq1yqGybLdW+jC1rwJA0AdIkCJDeYGeR6xF+rtw
YW4GlG3kKIQZm0NATpoB72f3m9xlKgLE7ckDhe6WMsBwRTQu6PlHZMzAvGRa
Cxu4wcZUC9P05uimcq/YmTLNPH+OIjD3ILkMr3GJ/ePmyQE5Z1Iior9sxqEl
JLpiHV/A5VmYkAUk1YUOAymMzJcnoepGvlrHJBbjNirjFspqh9tbQoP09iwN
ShsiaT9qlSVVRZ1nQhBj6BYaLCzIyeCKVKMgVIGTmEd30gHV133olbJtCqNl
+g266gcokNYlYtLnW00ejBvwSHoCetzBE8FrhivAbG8xZOSdAQi8F0vygA+x
tLh3yO86PQSt6vawq3Bq9ztQoebwb9XSjR05bMuinlIlkji12G9fF67RRQZ4
VoW2t9T297kcv8j+dvV+aXmv6BmbYFRzSPZVGZ3RBIN+a2dZ4csG0FSjHbvr
0M7kfbKFuVe2JAsmQLqbUo1+AJ3xWsO6b/3ljCULldV0x3dqYVk5rnx07wYY
ZkbfDJOVVlLILCZtgkteQOhGRhKghq+R1fEVV1FEUtVZ81G3/TRyJulenVyu
UOmCuwO0hs4JT4k9rLWK0qPY0OA0wRS44d817HZ02TqgFVg7j5gI7WUaXZuW
fnxquyzrO42ldceGPBWa2zGoGfFEzI48VfmFkUwtEU9CmTDpjCyqE4tMalqY
bW/VH7plIqHZfQC60tQ5fT5VY2llstCGjhy/k7HtrGKekM967X6p1nYGRHRL
byOxOCRq5xxZJhYxu8O3hZdpSk2UMddQ0PjngU9NtRZ8JG0JyGhCF2phYrg+
UQ1TrE8WfBakSXOJi7VrPNRboTxCZYLzNZz586ZDd55UA6hA8+lPa3IeLVNc
jITBaeJ+mhM/52SjuwiSAtDFuVxN7JWg7l+L+4quqArTPjLNrWByUn6/QXtK
7H18noAWrFoboA5ZStsBiFqLcl8CUo/1Bm/YFn0BM/IhrhYcWI22Q/5deqWE
S9QM4wqXqlLttXQLQSSGAAk6cRR4VSxXxTvR1fRB2Jl5z2AW6gaAGa8o8IgF
khg48QuxbFP/XmCyTh851k5zLEcrVbYQccN7RlamZ8bMtOJEKfbg+Nc4TVHo
i57JaGZXfBzSofw1XuS1uWd8KNyYem1EIo/GPzUeDVdljmaYwg/w6DqP1vFn
60c30ithG0YUB2VNfM3opoyWUKLssp25W6nRyk2ev5I2j85rl5UzusOjkyk3
SLxnl10eHXxI1g/n0T0e7bZgLBpdq8ro+KJ4FWa0nKVy69wzul4IE9Xqyx4t
ZynUGY8nHzo8Ws6yoD9merScpdY2yuEsPa01uq1PR88a46rgtpfZ+mmPlrNE
mlrm5Md1MOkqjLUcisWj5Sw5Bm/NHxpdr6ZvQ26gqxptnSX5ptbP3eDm8SZb
hOgQphnMmUxjD07/Gq1wRJrgaplGTpq2p5MP1md1YBaCIRuUdWDSLzCzYO29
p9SCNXed8goyt5uSCnKbB3sdEJcFJV96XVRDVANjzDVI9TSmLANKbIFbo8PR
8V/1dY0mcUADPZDpSwC/N4uaxeJD2IuD3fBTm9ZbiMKc42CjLfzSdaNn8aee
JBjgAVTvC7bGQTWTOfHcG4g30zuxWRE+008MnxIdD/hcrExgU5RqrrHlldc/
OrDtUHh4bIhqV+qqB/26rlHKmIDylv44ShfcN0mrahJkM+RGK/hZ9oNRHIoR
gWOq+uc7XcWcOJ70hKewJCXuFE16Hi5jCWeiCBKBlp8C0ceP5qkys82W0TWz
dx0sfC6SJ4qbKiDlwGo+O4vQ5a8sQClLkbY0+FNu/6oiRWx/N1utUO1bKhuZ
tJPKNZNxppy6a2LOUsGOAYXE0zp1BC4smCy5GCpOcjQFaqBZhFo1k0DPJpBz
d+vstYxV2DXHZ6QCD0xqi5vJpxS562UAOLKKuQ9cYtkDKqZ2JMVXczAQS2l0
V9honm7QQ7IXnbD64PaW9sdKFXECCnfoYlCYlm5klLxYUNDpAta0OuM7rdEu
Vm/fGF+CJ9lBtCKp4Wmvkdb/+s2phgySbxZXVeyYHSSkWoQ7EaOqY7I03PX1
XqzIUuyOh2pGtnaKLqfzCt6fs1LoNp+0ygFQMqv71Gk2Ti22rAt1w7oLXwwO
1plKw/E7izExyWW/ubIS0878xC8DCbmKy5omK/XGvvh8BelSyc3UXXVxKDsJ
qKD8nRN6Tyio5Hs6FTtIP4+04K321aFmsqfgrTjlm1c2R9ioAUuGWFQo48ui
DBRQ8xlIg16XsypuT0lLskKvUOkMFxTen7ndG5y65zZv8xd5oqeGgTRGjLVT
x47g0to+mbrz7AMYj7hAQOhW3+vaR2tMkxtotXV2OsxyiINpzJz7bdwCxX+c
r5AukCQi4dMqpBDPUM0it7nQxqH1dZ6u4vXRtk/vrBYA2+hiEf6IerNKLVSL
s61i5w74CpZddNTIzPOdrzZtTzWkjSk4LvBnxmGhmstTDwa1OoP0aKslM79t
ztm5gYMg67kx54gHQhsTnTiHXcnVtFsRKwvJ9paUwtJ27F3yKmRcKmwfuZBK
VOSQtj1VOC+C9Y0yMDj9A13oqpAiE9mjVrMO4AXObkWLbWKci/4fn+e8rkLP
csZzpzvifWeBppEz66IrUzCt/s7Ttb1yJkOyZ/oVWsFT+iViUwjQmI2tG0xq
uT+fTRfnz8SRupPv/GwoiRNOuttpduCkTRDDmiiGlDxkBS8ok/qNWqrVTlgX
l7bqB3CSuDJP0vxocAS2ukLArnR47ogK3ZqgD0uUBOhZLaaJMSn9iWbP5vJh
XNrJq3653mprG22EnjbQM2Ymtt6+LxWpPYQudwFfDPBr0trbKSjSpOSESPV1
HdhsWXgL8XHrJHdC4uu7pTSfRVeHghSnd6Lv0rQ21rxdxik9K6/SG6tGGTGA
yZLFXfSdj0uK8xexUYDdAq9rQSV0OAvLfZXXkTlaqmp2lFgN32I+I84XXOnd
NVBtdOQkl8sgcL0v9m1QaQTsfdO03iq1Z6qi2ykDedCgYwepm/3VSIn8ZUjh
up40TS6JDda+EyiESJ28y8CfIz3cIfXCmwc+RmCRC3hGgTs5xnbbRZHKAKCP
GN0EjyTngHeCykWlhMTq6hagV9I32lqj8gcGybSy6wmysFU8PfTMn75nB5+P
vv1yEpXp60TjRUaED9xSNDO5KBycxqamGKug3Eb2WcmDAFtbRXk80jofUX44
TIIJL1HhXeMhisWkj7b5LFjYG+1EHBhZmdhrBKTsTjrPkqyv3D55RQzYi5O7
GxamF5GeikRYeqSlwfyj2/yaSEyD0eOzHeFT/aEPdYQNxQdgHiHFNiu7SixB
5nxJpGSLrCJWi4itRcSsjeM1w5yMxGf9eKG71LsAewFkQJZIBoXZyoRTUVh5
NJcusDP1Wf7nnROhge6PVBqUHR8UUof5O86iJLEIUy/sYjRIeQkoqgIZbCiT
pKwKl0rsByvCUp1G8aX0ZkzYPK+XHXQsmeb43EJyaJj7TmQjENUeW01Jz3a5
zj4rYbsmA5VySlI5S6RcXUVn6IJkJZZpLyHIakEiPOZymSa8dOjcp5gUX1VF
miwOCpLbWyCwL2NuuQ4ovVQJPZbijzp/vDoHfhBy2AVCt4JJI1ZeWQ4gjHaO
G4Jzv7oGLGM9AO4B56heA1u/XmIbEoQbvgDqD7IAdaHgtj3pPmki4uisKnh8
eysrjR/2v1NnYwKzig2jRlc3+l4OWaHMgAwl3JXMGrIxZa86XWiAgHvPSzq+
IyUxaombSLsV+WFVAUvZM1QhFH1X0iaNzIA8/dYiSXYWkyPoGB/4ZzZGuDAT
QanI6KitejSnisdkK55a4CWCR+ljwpLvEZRu/TuD7ipOjt7AnLU5pt5NOVg5
P5uReW5GDC/xxczaLixuwwpx4dm4cgdvjayveRuywrhoR3h3QPfP1Cn75Elu
FH0HGE6wYJsvJ1EQIC4FybR120gelpHbxx9cM7fc0dN+vjHaStknrS1lLEkw
bMqYxGAWjOqcYzGdO0MrtGUg72GJJ7G1IVLQ8SYS5bavF54uWU8MIsFVz+hT
08soilWbICzpICZoUYTx6K3wD5ZhhRvCSvpEtI3gDgrFvfi4qw8eA3cVJcPb
cad/lVPUWpQBPW+LjYcKiz0unb5aqqQCfCqgYZBYH2SDBzkqkoiNeEhY6fIT
7aI3/O2tAuvZuQpadeMCYE42/umIzmCf0ztQv5+jGJ5rnEyTZp8zgEwRDDhb
Ji0YWaF8eyU1sXhK+JYhWqKmj2REcNPEQJPkpuMv7AUZ1UOTdz/NM0I22KrP
Wlo4LsvK9I2cdEKhLSydJioFuJJ3rY5IGOb4xnvu1wyQaYZ0UN8tC3mdchVS
qQUQRdQntqoLF1WhxGjYxFugkx4l7hzrYLCkvlrMqSoX4/pUBd9K9Q25qORQ
VGU9dPMyAT2CE1Oddyt4weOIfTMWjvoKQ8n+5aJo5tbiV3VEHm0pTIy+IS8D
fGAJ9CFKu7S/BtywZBqMcaKkqE/E9goOhUKpSLZh7OI6j0usOMJBVMhlJVIc
gIfsheuUJFq1BnxmCQulbnYxmWunCJkvxcQki/n0coV6AEXW64tMvITjAzMY
wtGFVwH5ba2jAtKgiSrjyywPYdSp5XolzV1bg6JpnsbkbSMu7WTH0rcwT89Y
p1I2BLZBS3oN0WsB0KNcqjYDe5RTNetCxXkXZnJVBXQWq8uZKUZniT73+Dpc
3xN5BzCsIu1Tzvc5Z6UR3n1qffdwAilIdIv4vVpgElsSRSzqp7dG/BfxgI8V
qayVZ28tNyNvF6xUrDWx1QACpt/ecpJYdHkoEUsLQiK4+FXkeIWFla4/MO+e
TQn1KvgsjYc9cKIZ3P/caWw8AFbEEnAODCTjny5jVjlzgyYuU+lCQBzO7iyO
nqdxmylIbSpujc6XIQW4bGngcyRI89Q6GJdMvs3cEQEfg1f3GU1+DXaSn8M6
gvE0Q64ic8IhUh+f2/ma3O2UyLber05MZJXhBtvVrExZGBHq+u4o9DvgOpxy
xcBW2R43c8Ot3SoCiQ6QKJx13D8tM6HTTjg7vELHJKNjrvgLSjFQvp+Kh/1Z
Aiubn0S0BQXZ5ld1RuIUJloKyGb/2181JVd3c/Ym39lge/llXL2dU9kWrQZ7
19xd69qRsgU9Hy6IxknGB+4iDY68VaoToJwsyYcE/LMWT1dXBX/dv+zHf8OQ
B+crmWYUJ1Tvp8DIMpFac6pyCApkWtdS3qlrnSOtg85NBW7XdIJrxhIFFdU3
2IlRp1D0dJXT/GobFGlN6c64ijUrQNJC+SLSU4kroJ1i7tdFJBqAEyVuhdpx
xIkCviWzmYodubUOnYquukZ4CfUPyapRrkhp0osUOlrOAs5ZJ+8PlxMh/VC0
Dzz3XRCyFoFdKYJiEqU8lr1xu4pFTsw7kUXFnHj9UmDERq8lFgek7CsVpKmw
jO2yAnfEsDjEjACk6VraLClZMxM9obatKonZF5z6IlOU02F/aIMBs0WNi8LE
ydoxpxgum1fhN6dw+d7L7Mgybr5WDmaz2H/wS3G91aa64KcOMmCqjluZjKLH
mC+phG+9TdKKYIN/kPRq50XOvtfOcqzdg1Npxc4AC2c47L8e9U/fHH9H4BWC
bhWpu+Lr+Obo9ODN6/438Ib1HJm1FZ4ULZSHErEE7933SDe+P/UvLkTIIPMd
TCL4U7IOlJ7jaZrLxGW1ufK6LNoGPtbE9yjamH4s8d/hdXn8ruhlPIQ1L9Pj
d/rbRWdPM6xZ3bs17+sVrFkg14/PHhCeh8sH7KKCBqfwAGACc97uUdovpg9R
tEZ4O3uK9MuYj62qf0UPLK7XQJTimDl2/Q/ASfpH8F+UfV6esCuB4pgK9li0
qewWtPYL86Tw0Ra6lIvioP+6zyzBYpjL4AK0huWd2YHBg5deuYM7GA9HJ33v
ds+TsAt7oGBDuUsDZzDQxF6PyYChby7FGLEJyGEAVMoeiEAw1wUckKv7tNZy
OkJNhb/UTbputVX/9EmsElKcQvkQRIHVi9BGN98YC1z2ZopzumE3OF0R8GAd
+KiiH+FyIivSF0uTUCl2WqRejVVYgIJg1bkTP1bh5w6FUwvyz6KbgFxz1nVw
5lDBCiD/m/gaBDOa+tGaIiY6ZrkwJu2IdOoYuGa93GNkQwUe5iUIhLdU88li
XyEKTLzXaOmsWhmLbdLKvg4Li/NPAG0fcgSIXYL/SlbjgCCsKEg3W7R2BbqD
nE9T7inplvrya9LN30aMiu2PobXcPiKpgZCu/KmqzZJlnZDUn2OdKEsyw0OR
WnKeXUoO7URxNGXjWqqmkwkytwvEnGNxqdUy5CxKTE9WMgJhv6paHeIKJMvT
EoeRi3L9My222DayioMmpmBW+/78B6nQE6fsdto1SE4Pcpgs/QVn9euNhLQP
JWIq0xghdWawrugXZ+BNKpd1dpZUxaKXxP1IQA0aGm3F2/jukc+z/5rgcRVJ
ZSb6reRdcpmGklXmJL0UpfWZ2J2MuKiMYXZHH2JOToE5dQK9SnfDHJTT9YRF
V3KMHKnTigeZ+3e4OUrn5UO1RzrRfCIYqxK1JnxC2WfTRh8V9lQ2M9KyuWCO
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
vT14fdpufn/Y/5tVvu43N+pndaNuUEvhP1ab/rfRMVN48R/qXHyomsKMGSkN
KATVf54+sBlDhLcLWWKh906zlu2tpzAX1CYey17Ye9evKu9dbTBJ/UFZGO5t
gTcPJLxHerAQCUGy1f68+oD8V/XNvXn49lopvsDzxveRtIlHrrsJK7c8b22W
wWvdeq1adZDQm+Rk6B1Lnx6ROKVtz5PT82QeKesOX65VnEwn1dA79yvOwqin
ziKCGafRchZ74Tn+S9NNGXDuh/NgVuHsMsyWwp7tuFhV7DbkrL2lrmaNg0Ak
uwGKO+PRgZtZWDGXUaTh9ZWna/t//OPfFdnZrL70Z6whvWGd6HdaYFtTqht4
JQgIVxVMoq0IAPe0nzQmXYAtWTlzqXMiaeHvmRLRE+o5YOJI///mrmaHQRAG
v4o3L5L4PzGe9xI7IcxsJ5Mty05791EoDrSYHb3ZULGUtnwtQc7irteL3VB4
IO0fUsd2NB7aRVbg+X0W4dYl2GGhGJ17GxlP8RJspB98nc3TBHcwGDDethFm
r2u36DZ9sOb63ODk2lg0KZ72N9h9UudY7ze7ZKG5vW/anOxhXXIIJhjouDD3
K2Oj014q0xmG/TznzzTHbbxayI0EKTS2IaxByhXokXy8HBscDDeYxJikpxq4
Mg0UszNzlHbQx9bQiZjGosryJKOYg/Sg4NmiwKWom24cYxv10qtSvJaqY1xx
yWop9VNZtGyshGpEqZqxE8aB3HGuz1Ycr/pbutZ45RewuPVtq4wvU8UGKlzI
AQA=

-->

</rfc>

