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


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

]>

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

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

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

    <date year="2025"/>

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

    <abstract>


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



    </abstract>



  </front>

  <middle>


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    QueryRequest ------->

                           QueryResponse

                 <-------     or

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

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

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

             Update  ---->

                            Success

                    <----    or

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

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

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

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

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

teep-option = (uint => any)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<t>Pros:</t>

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

<t>Cons:</t>

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

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

             Update  ---->

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

    and then,

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

                     <----

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

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

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

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

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

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

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

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

<t>Pros:</t>

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

<t>Cons:</t>

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

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

             Update  ---->

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

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

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

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

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

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

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

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

             Update  ---->

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

cose-sign1 = 18      ; CoAP Content-Format value

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

</section>
</section>


  </middle>

  <back>


    <references title='Normative References'>



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

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

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

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

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


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

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


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

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

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


<reference anchor='I-D.ietf-suit-manifest'>
   <front>
      <title>A Concise Binary Object Representation (CBOR)-based Serialization Format for the Software Updates for Internet of Things (SUIT) Manifest</title>
      <author fullname='Brendan Moran' initials='B.' surname='Moran'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='Hannes Tschofenig' initials='H.' surname='Tschofenig'>
         </author>
      <author fullname='Henk Birkholz' initials='H.' surname='Birkholz'>
         <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Koen Zandberg' initials='K.' surname='Zandberg'>
         <organization>Inria</organization>
      </author>
      <author fullname='Øyvind Rønningstad' initials='O.' surname='Rønningstad'>
         <organization>Nordic Semiconductor</organization>
      </author>
      <date day='24' month='February' year='2025'/>
      <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 Internet of Things (IoT) device), where to find
   the code/data, the devices to which it applies, and cryptographic
   information protecting the manifest.  Software updates and Trusted
   Invocation both tend to use sequences of common operations, so the
   manifest encodes those sequences of operations, rather than declaring
   the metadata.

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


<reference anchor='I-D.ietf-suit-mti'>
   <front>
      <title>Mandatory-to-Implement Algorithms for Authors and Recipients of Software Update for the Internet of Things manifests</title>
      <author fullname='Brendan Moran' initials='B.' surname='Moran'>
         <organization>Arm Limited</organization>
      </author>
      <author fullname='Øyvind Rønningstad' initials='O.' surname='Rønningstad'>
         <organization>Nordic Semiconductor</organization>
      </author>
      <author fullname='Akira Tsukamoto' initials='A.' surname='Tsukamoto'>
         <organization>ALAXALA Networks Corp.</organization>
      </author>
      <date day='3' month='March' year='2025'/>
      <abstract>
	 <t>   This document specifies cryptographic algorithm profiles to be used
   with the SUIT manifest (see draft-ietf-suit-manifest).  These are the
   mandatory-to-implement algorithms to ensure interoperability.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-mti-09'/>
   
</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='3' month='March' year='2025'/>
      <abstract>
	 <t>   This specification describes extensions to the SUIT Manifest format
   for use in deployments with multiple trust domains.  A device has
   more than one trust domain when it enables delegation of different
   rights to mutually distrusting entities for use for different
   purposes or Components in the context of firmware or software update.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-suit-trust-domains-10'/>
   
</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='3' month='March' year='2025'/>
      <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-11'/>
   
</reference>


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


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

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




    </references>

    <references title='Informative References'>




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

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


<reference anchor='I-D.ietf-rats-ar4si'>
   <front>
      <title>Attestation Results for Secure Interactions</title>
      <author fullname='Eric Voit' initials='E.' surname='Voit'>
         <organization>Cisco Systems</organization>
      </author>
      <author fullname='Henk Birkholz' initials='H.' surname='Birkholz'>
         <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Thomas Hardjono' initials='T.' surname='Hardjono'>
         <organization>MIT</organization>
      </author>
      <author fullname='Thomas Fossati' initials='T.' surname='Fossati'>
         <organization>Linaro</organization>
      </author>
      <author fullname='Vincent Scarlata' initials='V.' surname='Scarlata'>
         <organization>Intel</organization>
      </author>
      <date day='6' month='February' year='2025'/>
      <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.

   This document also defines two serialisations of the proposed
   information model, utilising CBOR and JSON.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-rats-ar4si-08'/>
   
</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='26' month='February' year='2025'/>
      <abstract>
	 <t>   This document describes interaction models for remote attestation
   procedures (RATS) [RFC9334].  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-13'/>
   
</reference>

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


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

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

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


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

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

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

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

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

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




    </references>


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

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

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

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

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

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

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

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

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

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

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

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

teep-option = (uint => any)

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

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

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

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

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

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

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

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

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

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

cose-sign1 = 18      ; CoAP Content-Format value

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

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

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

; freshness-mechanisms
FRESHNESS_NONCE = 0
FRESHNESS_TIMESTAMP = 1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<t>COSE_Sign1 Cryptographic Key:</t>

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

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

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

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

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

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

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

<figure><artwork><![CDATA[
A2025873825824822F5820B39B52B0B747EA79588C190F567BFC2C8437BA
8A73F7EA983182E79F0148D59B584AD28443A10126A0F6584080E54AB485
B320A61654666362928B15EAAABFE6957B1BCB65F16A367E4B19888BFFDB
D6F7EA2892FA36FA18A2FCB5DBFEC9832E09B91ED9CD348AB77E25FA7403
590108A601010203035884A20281844B544545502D446576696365485365
637572654653508D82573A926D4754935332DC29997F7442746104585486
14A40150C0DDD5F15243566087DB4F5B0AA26C2F0250DB42F7093D8C55BA
A8C5265FC5820F4E035824822F58208CF71AC86AF31BE184EC7A05A411A8
C3A14FD9B77A30D046397481469468ECE80E14010F020F05844B54454550
2D446576696365485365637572654653508D82573A926D4754935332DC29
997F7444737569741458458614A115783B68747470733A2F2F6578616D70
6C652E6F72672F38643832353733612D393236642D343735342D39333533
2D3332646332393939376637342E7461150F030F1818448218210F
]]></artwork></figure>

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

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

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

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

<figure><artwork><![CDATA[
A3025873825824822F5820CEDB0457952F7DD0A33FA4692F73BC833A6A6E
2300B16F6605993F0192E3F219584AD28443A10126A0F6584071E3869E4E
134A78C95D7ED81F5911FEA4F189EC33C0F6474C866569ED3DF7FB4E0D88
71367BA3C73612A26C9E3984A4E22CAA4BFBCE84DCAC0539AE87BE9D3D03
58CEA601010203035884A20281844B544545502D44657669636548536563
7572654653508D82573A926D4754935332DC29997F744274610458548614
A40150C0DDD5F15243566087DB4F5B0AA26C2F0250DB42F7093D8C55BAA8
C5265FC5820F4E035824822F58208CF71AC86AF31BE184EC7A05A411A8C3
A14FD9B77A30D046397481469468ECE80E14010F020F05844B544545502D
446576696365485365637572654653508D82573A926D4754935332DC2999
7F744473756974144C8614A11563237463150F030F1818448218210F6323
74635448656C6C6F2C2053656375726520576F726C6421
]]></artwork></figure>

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

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

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

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

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

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

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

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

<figure><artwork><![CDATA[
A2025873825824822F582037522D96C0F9A6B887A21F4B21CDF02767799C
C3A66EAFD5979250CCE11377E2584AD28443A10126A0F6584084A5B76482
0B927C580BF128CC2CA21AE2656F27A6BCE6D63228915CCCCC32DB23C93A
8518A7DB565BD0348F17978474ED7473C4FDED4A2752EEA93B90BE1FF103
590242A801010203035886A301A101A101844B544545502D446576696365
485365637572654653508D82573A926D4754935332DC29997F7444737569
740281834B544545502D4465766963654853656375726546534B636F6E66
69672E6A736F6E04582D880C0014A20150C0DDD5F15243566087DB4F5B0A
A26C2F0250DB42F7093D8C55BAA8C5265FC5820F4E010F020F05834B5445
45502D4465766963654853656375726546534B636F6E6669672E73756974
075831860C0014A2035824822F58208273468FB64BD84BB04825F8371744
D952B751C73A60F455AF681E167726F1160E183D030F0F5872860C0114A3
035824822F5820B39B52B0B747EA79588C190F567BFC2C8437BA8A73F7EA
983182E79F0148D59B0E19018515783D68747470733A2F2F6578616D706C
652E6F72672F38643832353733612D393236642D343735342D393335332D
3332646332393939376637342E7375697415021458D88A0C010B000C0014
A212583DF137C0755EA5642248EC04F3D24BEF771B5CCD72C56F33F254F4
0A2381DC7C122C5708A99FE87A702A11053EF1BA86CF9A12B7E81AF80147
5959864E6313588AD8608440A20139FFFD0550A0DB218209E3C43E871A81
CF1BEBC9F9F6818344A101381CA120A401022001215820A1A58EA321C7E3
28FE7DE66283DFC3B4081FE5FA7EF90C570FC88693F857EFB6225820AE96
AC0E18D691D5A8066BF95913252F57566F5A07EEF8643822ADD9510ADBBD
58183C09CFE4A33D69F0ADDB73EA728E942791139BA864A9369E120F1818
4A880C010B000C0018210F
]]></artwork></figure>

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

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

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

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

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

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

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

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

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

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

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

</section>
</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+y9+14bV7Yg/H89RX12/46hIwndEaSdOUKImI6xaSCdzunx
+BRSAdWWVIpKAhPH8yzzLPNk37rtW9UuIeykk54OnaRB2te11173vVa1Wg2y
ZTQbv40m6SzeD5eLVRwk8wX9li2b9fpevRmM09EsmsLX40V0tawm8fKquozj
eXW+SJfpKJ1Um41gFC33w2w5DrLV5TTJsiSdLe/n0Ol4eHEUzJP9IISvF8kI
mj27j7Nn8Dd0dv4Yx/PlDXzSxr+z++kivspMgyxdLN1PRul0HtkDwtzms1n6
LFgmywms4QJ3E4/D4ft4tFrC0sLh7DZZpLNpPFuGp4v0NsEFJ7PrcOtiODzd
xs9oa0F0ebmIb2EI+Nj6dBFH++E5jLZIlvfB3TU3CN7dPTBZMI6WsKBmvdkJ
otXyJl3sB0FYhbUnM9jZi1p4kY1u0qt4llzDhwz3F9FsFmfuN+kC5nz2jKEa
x0v5YwTLkV8X8TVMrj5Px7H+dTVbLqBVf4UHEsFH8TRKJvvhDc1TW+p5/vN6
+r42i5f2Ek9q4Wmc6LWdANAmSQSQ409pXQeLNBrDSXzO6r49Nwubqklq8zj5
z0sZvYYzWCs7rIXf3cTxJF7o1R1Gt8nY+pRW159GP6azn2tt4+g2voMJ/jOi
YT2LuriJcmuKzWe0opNktEiz9Gr5cy6qtqQ5anhf4SDh8/za+ohtq3fRFLBa
L6//LllEzueMaq/n8Wx0k8zD/wjPYaV3cAXCi3h0M0sn6XUSZ5XwvPay9lkI
ObR2EOEyABVlGfYGZuliGi2T2xhpytnRYK/eacqvrW5zT37tNPZ68mtvt72r
ft1r7+W6HVcPCUbVUZrF1XfxfXV5s5pezhfJbOl8v4iWWTWO3A+zVbKsTqNZ
chVnvm+WSfFDIq7VcQpbgmMofL2I50Dq8PPB6/NhrT+5ToHK3EzxE6CTTNKe
4Heh/i57Ql8qkhLSDx3ccf9VnztGi2s8lpvlcp7t7+zc3d3V4E5FNWi2EwHF
viYKle0gHOg/tfc3y+nkaaQnCZLZlQ18d91XyWKKaFEFRFncz5d02AUARot2
lhThCpQ9XkDHuApgjxdAwqF7dQpYMsnUgbX2dr0HUp3G4ySqEr8pfD9KZ6ME
DnYZVbNluojVaL1uo07LI6xodBTa7LXaej78NahWq2F0CUgNawqC4OImyUJg
iSviHdk8HiVXgP5hFCp2GMLFW+INW0aTCdyL1RyJPvwCnDaE/cTwR6C4xAD4
FfBegDv0gEHG8W0yisM7gDf8VeAlgc24kFdt18KQliQrAT6MLGccXyXIM6JZ
SPBM5wDTy0kc6EXCQYaAt9E1cr3lTRxOAIVH96NJHKZXYXF5NYbENBmPYZjg
aXgMlzYdr+igwg9PE+vPjwim+AG2S6sP8XiA7QPvycLLOMaVIyZCL6A9WTyP
4BBjgAQQj9UkWoS0kSWuObuHwacA1UmWhoQ+C+gV4UmcJaObMpidwayV8GqR
TsNM+Hc1i2dZgkgdRvP5RGCY1WCLeAbDYRDDdZDp5IBu49k4XWQAwvtwlcXh
OLkiBF4WVkgHCwAOYGZCgWIXxNyMwD4cZsTFZsUTCA/j23iCo0PTRXDI6+iP
gTkmiJ1LXA6Oq3r2zV7CEzxp7Ll10T/JthG4gqAKP2309A2R0fewj2QBrYAZ
jOG2IuKnCKS7ZByHC+DQcQDbYBhljMXzdAmrT2Cqe2vLuFMcbZZD0WSCAtUs
xqNcwL1FvCu7coi1Dj4De5iuZrRgAP9lvLxDjIIj7J8EuPqIxbj+NYxT2wRH
faJhtAA2uIxHy9UiDvSqPnwQCvXxI64JxA5YIONycL1KxhGgOUFQ3RNeP+wU
fsuixX0IIICjRG56D2uDC3ZhPuC1Am8K79LFOAufnHx7fvGkwv8fvnpNv58N
//Lt8dnwEH8/f9F/+VL/EkiL8xevv315aH4zPQevT06Grw65M3waOh8FT076
3z9hDHny+vTi+PWr/ssnjNf20aBMsEwB8Hyi80W8pCsZACBGi+Qyxu2HB4PT
//t/Gm0A2f8HMGs2GnsAM/6j19htwx8gT814tnQGWMN/ArTuA7ifMVABJJWT
STiK5gngMJJWIIA36d0svAH0qiky7dJE4ExwPRhtLGALraSlWacIg/SzMH4/
n0TqW5D3aaB2rY2Xlci82jutj9HL8AHQEpZZEEdAjXyXEu7iNm7z3r1QNFAf
KSLDAG98OosmyY9C26NlRBsW6hiMDA+hNeExwMKB12Wy8G+PL0IlpMiokftp
ME2ub5ZIjpewXyAwoebI4XQ1WSZzYAyXyQwuJSxxK4tjAJZfCvr4MSDmAswW
NgbDTbJthma2Gt1UNPw9JG7rYrBdRCtaSYaYFQFLWCLs9Uqcfeb2VNHISJSO
2gREA4BpvgKyJODyLARpdDIbTVZA1uCTUO3nop8hJdkhYjO7Sq5XC/tQAK5w
SbMQ6ReMd3lPxAeXwVwhhl7ApkbLCd7xoY0YZm7YOhCxH1YxoD6QEaCdQO1k
MNqfaXqsvl4EDxyJRt5ebbfWrDXpRJYgiSzV5ZhEuAw8GMAQPCnEsSESMkW6
7PZncQZYkVVQFcaGxUvUatMlehqeIIG7jsPXt/HiNonvQFiY8keZEhScawOA
zYCjEUNUDeGcRzfIXsYPknUcUHejqzBDZYOWNjh4fSZ8TksZilxDu3F1mYL0
OtaSAYzmLM0ZV0aAc0GMhm7zFMgeAC+pxTWhB/0TxTYDs8ZKeLlaqoMPHB6L
eEcCzSWtG8VopKC4JD2bD1+1bFAmGtQ8gJ6lSyawSBYDgg0ujObH1cPFmiPW
gFykABLeLZAELyqkLUJXUkP4xEGfghMPj1YL6LzA61IhrpwpdVEEYRobETlQ
6BmyVrEOfROSbcZEu4i8RBYy4oBDuAiwPhtHL9J3gCdbw/7Ftj20UhuYTuG8
yCpWc9S6ENgT0KFW1zdhittw5uHmfPoEpTmyEWgwrnk5jpLCrxCECnf2w7+s
4sX9WQw3HGmU/JXBSWZxJfhWpLHz1QglAybWw8UCjzDoE0ZBxwWrHCxoPctC
OB0Sq3ClWnuw51HT13AMjYnQEiXA6GqJO12hPLZU4hPdLNInkx+VjrBQi2Yd
NbCBo3XDFJj1BPCOWHRRkRCmJpfO6gVaVgrop08iMIondYnfL1FOx2tCtN4B
nN5f2J+FMYJLfQKnG4AgsloQebqy9wGcczUZ0z24JFFyRKwExiA4I3DUp9TN
OyNhJPA5kijiAIQVwhsgLHD7QO6F88hWlxnOONPHoOlZxg1zoni6yEniDpUA
RPjf8ANa6hdV6+eL0Pw4X1S/gKY/0Zbk5yer6U8WOsBfjxmV7AoOlslXXwVB
WP7jgNHT8k8yihgx1o4V8t1ggATBd4j5eFR8jcwZ0e5HpGsARQQ11eEa1iGE
zN4Dgb/D/D1Ksaaq5j45KCMLQL1RMCTUGCIMAsiGumeI9IDpVouiocCoyhZL
mFlDeNjDObZc4N0XsmJdjlBfDpSzaVWiwsKV1HOhjDkhcT7jEa5WoNBVAqTE
Mz4DNWZAhPMOlDeNqJvj6eZo+jgs1T+CGOHDaKpg5W/0J4WhDyGojZ9PgVGj
QAxgPFGixLnDMj48ZZF5ml2jcIR7doQOZN7Ak43cgQz4LZ5vA/FU/xUylq+U
dGbpXx8+kPdmlMzhmJDPxiioFcUDZ15nhMHh4UvDs8WYBkz6EmSQOzn0cDQe
T9hPpPDC/iN8Hv7B/pusd2ENORfK//Y3VwsQNUDvfRcE/s9hrL+jB4n8TTwq
jbZj/VHV3KOCJm2yTgIr/hD+kSfjT8KP+O0fUSf7MrxiQSYEQjBlxhXXrmss
06C4XwXITavCSuDmvpH1yVDPw60VyIPh869wuO0g+NJAVEnLBLD9wAOJnefE
5u/V+A+0EVrqb8RcpeRL+lDu9LomxFOtTRC4w9lqeglIVEGsQFJ5eY/ixw3a
35i3LqN3SH25HZvd6khtm63AOimAVb1Wa7a2CeOrF9+fDqvO9qFFw/OdcOLn
YdP6krcLH7asD+1twled/FcsMjwPu+qmPg0HqL4rSeivoH+P+U+6Jer6Yku7
aWhfWbjAaTjC7+LcN6weXKUTOH8yFS7juVzweIE3i0TKRo1HzvcOoxHokWOS
ylhU5+vJiEdIxUJWOl+hWocOnyVLhTm5HvV91JrC0CU1GZJZoDBoLQy3bBYP
Y+HQTEa3haWyohyFT5Yocj+pBWiUjjXPHQOFG8eEJGjtSJCV4JUikldVMnN4
F91XQkd+UuPSsOS2gj+0pEdzXCULQI8VgQUURtMWOAWp3FoNPwnJWnZJhspx
OgXthc9mjOs9NzIajRDeRhPYr+5jTJd4/8mmUxTr0JvFQ+pJc8dI+tKLOBrH
C2VsUcI16qRowhYTBzeCEU8jJHQgPWSyZXsMtbxbxE9EHhrKUshclcSzGh/z
SC//AQgCc68ytToX/7K1vOc0up+k0fhL1ADIIYjIrey2lo2AF0iWW32BxO1V
viq9Zb49dFHwDlo3NHLuKPDUW/mOXBNkXs9dKBKDRjFciTEbt3B7pyzHXQB9
UEOJu2IVTcL+6XFgWT2UfaVba9YaeH6WLXG7ErjX3azHe/PD4yu6KOlVwJ4Z
Eue45RUIBxW2nBeOReN3/A+SEfi0/wra4tU927r4+stGrc1HgkBkBGA4+ztP
DSAQd7M1SKQlkLJloAUJoWHjs9z5jA0Tc436QnbkUt7dpED2s3tYw3u2jsTT
CFVXhuQlSKDhagbjZcs0JfsJRYcoFT9dGEOpQUsSdXE9sPh0oeRhUA7xHujB
eDNHdJS0Dw92a0OxwQNG9a0nCBmc4zXBOHuyjegPE9za2Lv+AtQ0EfC1mfPd
w0PF1QmBR5nnqoAw/oPJXwwHN6bRnA9CdUIKHE/GaK1DGewGaeA6XpU3kqCx
ntito0eeKAYKKovPjKHsQUoKRuoOw0/iaDELbJsCSRxLR0nT1k2+lEB4AEdt
C5Aa0+rBaAmbCFhsDkluzpQpgwVmgEnGjsP+eJzg9BHpSEuLFWYgTRLrBexW
sg3ZjhNyFarlWtZCXI4hwx7B09wSoOxsB1KzGoqjt0k4r7ZKwUehgm3erGbD
0cYehgn2fAmUicQXDTtjpKEGdHZ0p7QNvsQilF/IJL2+5o5mEcqVcUbWJ7SD
vExAvGRDnSPAVGx7TR5zAlacK8o0i8bv+BboBys22SyZz2O2CpJPSdSaC7pO
rAZLS61j6bawxP4cnTnJ+3DgqEKuOJ+Xbo0CUyIBu2oLaZz/QyQV0DAwPiGs
ZaD+h1u9Wq3b3q5IE300oC/F2c0MoAACPhqfkgwQDvr+Pfwi/IPny/CNGgM+
gKObodZWmKrTaOq51AVQo8rfZiALu6pCqKqiR0KXJSDPmpZqcrMzHSyjZ6TF
yXR/DP/wBweEVQc5pYWlslnfw9ekChroWTpzlS//PkOu8AXPb3rSOim4CCjF
FSj/qmfhC+7pueL7IamStcsEtlqieypgP5e2dELtAPZUxTuU/xw0OYvuIO9L
lkDcs8BHYZ6H/7GFHNgcyn5Yx7Uu+TJXjQtyP2zgFwaU+2GT4WFOaz9sVYJt
0bQsfw2Zm3J0i5gL0KkP++FtNo9G8fNn9WcfA7wrwT5xQpIJkEBtNbbZv4Zq
4Zgdhn4aQOqNYQ3EPJh7uRECrEvY03Ash1w8TXg1O4IpAZmBuyjdlFYhgMwY
DuxZQ26Vpu9AOV+rE7FBH7Q39s/eYPBgFqH0RtZyWnS0NIb5lDUnkmDcRaQT
lK984EC5B24hcu4sncY5z6ayU9+B9gObGyuvKahDZIfikBClSAYSjgT/AHRA
IsOoHXYxXa0mLFJFYvbMUJTTzmUUrcWLoeCFu0td9x4dBUNfSbvoACa/6ZUJ
GRA7v83NAL9xVaMJBxDIcfuwnU5awnD8o6CeR+NwBItFIMkATD5nkmPHFbGG
pFfkw4YLMInulRUvoTDUUTTnuJckznh/dEWF4/JeUQxbongDp9YjKwuuYavb
xgVl2xJX9D6ZrqbYET/HNrVfW0VeuJjGBzpmqWGVZDcio5JPXKMr30yNGAob
lFXBmjtU8S84PV1AnJnlgflqMQfaajmzI3PTxa9+L4o3hyuJY18H4eFFUu3I
EAJf+nwAxtghYTWowYOsF7+fJ3KJlsk0NlDhHeCZ0frltiIZ0DeSjDU0AFEV
aO9MRP34awtLGCbszWMtT4mNjALaThjmbQ9Of4xSMksqWjkkzIRoEWlAQAQ1
TvHlCYJ1nFMo6romFm2dUDCAps2OAO6odUYXqImdndRG8ioSnlk9OSoAt49S
OVkTVrM15vFgHT8v7KfYxLsfEmb1IP6tENZAZ9IAHOn3s/aIYbO8ytw+fdIF
b2+t6gGjjlGjI+Wcwl+N2K52oi6yq5TB8lnPEdaK/ZhMsURSI/eKTYOBz+NH
+6F4+4A4MuYWJnIZOrNidHaRw8waUSRMlgq1CVIHv2yx4R8dXRhLwD6vYjRM
RW1B3TNeelFGCreaD+xAufhzGyANDRjMOm2KJ7Wc5VvtT5/MYKTNpRhMrk9e
MboIJTdDa5HYj9JbsUvag/AZCwaEGgkcOYj34gj6W73PPnz7FvHc3nOTQBbF
5TA0B+5QNJZYIsLVldi31mtZBfrgVcV8FEI3DHXDLWD3XpoHaxaKYNGDNSTA
twgkASGaHwmwjnwbXWZsCkE+EM3EQodzzFKKEtR6ox1OQ8MZmy0P8pB4BgDV
EpXAzkhYpBHQgmaiEEcTa6VaCgC8XC00/9NwJDOVPbG+5cYP7oTP5ONLfLsR
YbJU3EwZ/U+jLEOwhPSuQSkNCKLv8nIkyZgSJKPRzRHeKS5IrT1PO4lSuc79
NZvi5fMQZgkiIpRMr2Cg1B4lS3IwVv8CaSkg5yid36tDsHY3E78VsKG3jD6j
SZRMwy0TYytGdArU2jYwptbVy4iOuXg7tCaWN2YpUNXgYueiU+W66NHYWKph
y4GVZbeFrwsKSmLISCV0w5wBB64xPoC6R1uPUHWTHkglyZFAG8QQfpH9c0hf
00q+oija4GLwP56tpnQQFgHMWyjXkZC+0afrVuQtLUfUM2VpsG2CagqbfOib
igFWoqUpOHBk7lKcZVqKBCmdTjpZWuhHhEZNWgcolJuRBC5r7Ew+iQWnx3dS
4Qk+JAov0CXNm3NphbZE6UHIX4l6MXUkX7bxWSivDocIslwuWGzaCz7mjyis
swmTSMxIluOSZGv50VLGNQGNT6ynLDsA5S9Gd8sv6b6JwPkc6MI+BkTuL65G
+O/f4OdJIbTb88jq40fGXR0hgTx+RW9+t/H8t86OBlVovUwX+4DwKB8dDUAf
u1TrqbAeDNvCOfH63cbGPY2NOV5AeS2sYPDatstQLOV/6T94AzLEq0z3UMZf
AzJEU3VrZ+Hguwv1nV6agA6NdHYEhxapiSB41lCOltaBapeapjxlgqaAvyjg
IO1YpsqT6NA/dVn5lh+XgstzTzTv97A5tY0cs3AwVc6KXHjlcbrG5mfLLRao
CcieKF64QeeEs9a6xK1cRFCS1Yw4CQcDoNC0ieiQLW16TidSDvonl2m6hAtj
fEPo6kajF8WMgGyMT4rw1R0HPoSvz9lM9n65zQYBWxC1DggBZcUI3VO7t9zO
4170vR79SNZrFfnO7iNys+LADIz4AU0wdJcn8qPY8aCn35JI1pU5yDkoKIsP
zBPka/nscliMdw1b8JMYXDc9MCMnZaIdxAxtx3eTcxTJDM8y37OFmu1xFFnI
RAu40UXyRsEf+yteVhMTaYxYBS+iMABjmCmJ0AYeXDikCAeAQyXGiMqrvBFA
tA1WsywF0posTYCzmGM1VrmSI4WvA+sd34fvZui1oicRKRHA22hxH2AcifER
b+RkKwDm1/WyiaGrECi2zs+mQvA/0dFGnl1Q7rQj5ivFzH8V9xcselSlOHz5
kp+jokUKjnd5XyWJOzPNtVWnmuvofEG+JN1nNeOnTvqphtOR6Ja2TLw1r5XM
AOiesrtod5XHicfn80gvHrrGiht4TierLTLVhMBbul6ciOCpt8kmUdBEJLIR
elvutR53QAtplZ6q3dPppekk+Gi5vfxXZ3MnmN8L1iz3guVmyrnBNKViM70W
F35uNxh5JZSpmKUDs2A1M3+pY5W0COYjmSjYXVH86V2UGW6uDeyO4WGWyrKt
tuqJtvuaAWWF3KVWlpz8XS/TKrzql+4uPEJFzFgers3EfltpAs4A49h7Eo3f
qHO/a06/a07/5pqTypZh76wEIC7JTCQmOpkZCa8QX4AXUG04bwsEpaH2u971
29O7fivK1rF2zFubL7KoPL7p1xjrVBQXaRU6WTuosg2WDXaF+zAzzkqBC7MW
zcKJ17uuZJvarll3bUMt092TrWY6jkYttPxsaqRfeRQBWYiTEpfLjbC+ZD/K
gycOUo45CLQvSpnyS6R2DgXmzBeeKPS12CpBJv6B4QTQcm8M+xRTq0IiVDxE
PjITWQLIMGXfC9ezAj+wATsMPcCxXmMmOsxdhxYVCFyOcgfhp9BuTbm9UW2a
hOeUCQsLiurTY/BBxaPD7MhMRyqO10leoUDBCQTE37qwps4nvKgI4OP30ZQS
eNyH8gQWv16Iq+jb2dKTnURiPNiVy1QyMolK7inUzMlG4O88E8OBvGMOrVep
uRGBFpzpjXhAlE9rYgluuJGikid3hL0alh0Gicx1vGR26Q0Wl3Vc9PMPPsKS
bDGYIME8/wAs8SvGgiolWnMpvrj5W+T1w8iBDGqzj8KZGcYfzq5hMitZyewe
BUc6MEsIrrmvucjInAddMtMvnJmoqiCKXE4WTeFnk2T2Dt+6hJQGRYEk1xpn
0SlQ2KOIIbDU6EQ1svKhHIZbM53YZSmBiAgBp40ynuvkN+hwAqXsSgUxoNhs
gtkUVjhjUPTCyCRt0SAXu59OQoPSiSc1i5MEUMQmdkq6KsEjMffb2eKzcVfZ
ZARbtYnGF6Dgi/yvhW7GrnEaZ/KORvyc6C612/+zCLsVFWMIeoF4E/H4BGuM
bU4C2PXLs/WwCFFmTBK441XCeE4nFUrB8MQSGJ1//qrxyyIvw2FVxPXLOlox
h/7JXOr5LgW3jlNYvWXZckT5gtEBUwoXxs7bxcUWDaAuW28oVjQd4IvUgkJA
cokeZH43t5UESesUCVr8IjFFgGEb65Bo0MJFHlhj+PPKzPIk8aHsSeGHp7bu
FARKfNvNPSCUC+cG1UWcpopTogWJFcniCL3kDkgWcBcx1zMFQLxI7+JbNMFQ
rIaOIcmCdB79sIodr4w2r4jWj74DZh+0lgldnWTBT+T1fOJ+CKw4CrxpGER7
w5NTmiegD164KH8EpgGMZ5SNJxdQuIiRtaXBFN+X4/tivtWYsgLf5aGxkcwu
6u00wwvOFZUCWBW5GBKEBwky8macsz2qpkIURK20EmxwSDySrRSXmaUMSZcf
lh8mruIK4KNANy4e2BwdOve5HF0KOhJljHy4TKvPKO1RhtlBv+V4EnpPioCT
pEd2WDRmb5xYbxA4fAatERRFox/sqcwm8CHnv6wg0hg7HUoYoFjBbVZ59tiT
8x7XaPybyCJ563z/yHPNDyzxIZhlWrKeWsN/5EOQi3SEjY5Bw9SPKVugpFmW
imUKPW7wLUqZGELznSSddIJzXApvVCFbEZrGxHlB9gpsnK/Y6VqyWHU2mQp9
adMQ56wbGyiJROun4syn9xISWoUr86EDKokph5dPgSv9RNKrrA5zqAwosgo/
Vgn9foJGRzp2Cg4VhvhJwvh+CgshWB7bDw0hecY4WZ2R0xYwxipOxs5QzYcG
+yshlMISUTd/CtN4WhiptX4k2G+WFQa6ueOgO3eovJ6cGwoJx020GFP6MrJR
40DK0OwO1XnEUGaEzxhN5VtWCzMKQg7wjxnLrObThiNp6onu+0TF9aEIvOEo
2+jkxdwh8oYmKAkfsAQIfJ2EqZsyeTZPSoKTVFMRO7VRjgAQ4cG4/pkPVKfZ
dRVEVXH950QM/9NjN31UWJ4+KrBU2lt0ZTh7qZGN3nbxK/LDQRVWqEGON5Bh
7jIavfMFVeh0AZxvSr3wolfvgcrASwxzca8zLOahTKkWFYWycq4qixWNGJBd
X3l38PMizaK9IASt1XIrlAsM1Q2IO2VpdcSq1ZO5BNCKs0UpLh0n4wImntxm
Ji5jiVTGcGT19gwYHhLUU7Qbx1ZKNflxk0hxCjX5waxUmk6HnDLt4V788794
AAsk0kJLYZTz6jYMTajXZisK6Wx3wtyKfnJ2ev/AYl316n/psfkGYNcttdBt
+eqncKu4G3dluBvZzvaa6Z2O63fr5gKz233FsHhNh1yABcBH41nuHB4FKbMh
71Kp5xFdh7CxHw7F+iaRvbR4ukwW3DgoYH2kTYEO/TohNpJOSqdZ8oXUSCLD
Twyl+eyoEm8/nm90CfSYhhjOOGfqL/Q8PV4squgRws8lu5X9FbAYNagCQqNW
azR72yaqRbjRowNeTIRJDmU+8311qxhZUlDAN3tajan1RxHfByt4TvQLWFgF
lXjJShbarFc/aCjE1zmDRpIFtFJMTxjaw9SsRNDFO8Zt9XsCTujpSWqquL/I
KEYcudK6pcpgIwUgHo6q0dHzm0TU/LIGZ/YqaJNt8Aib7cMWW/Ws1R3EaJon
/e/FpUuqhohZivULyFS/GrqkMXTV1b03NL36Bc1AXqCZyWH5UzzLc7EFAfh9
UHeBXThPEMJu43stIqrnzi7sORRLJsbQUBvOiFKgdM/GXLQDjjLiPOS0dk+e
aKP0i3iGV/MqEe6B1KpiaU108GIQX7JDQJUxoczU6fUimsPX5LQ0kFOP28Uf
bI7GhonJdC1gyGW5DzgPRq3MFJio5Du+5Pgi9kl+VHqnqHJpsw9Bh06VpkoV
CQLYJE5HLAztXhVlvqqE8xQIFQYZyHWvUTSSeNoq5FKgEA7KE63a6rB9Vhpw
hfb62Pbj2ZIQD3LHLktMpCYHuBp2h57BmZHLzKr/7wWGXfweAPZvGQC2cdDX
v3MglpJMlX9PCaoeeBJzYlBxhlRsmKmMhDpqFk4Qv9WZY9F28lE5U1Xq4ExU
lChDYqooIQ+LBgqM6OGHSwiDnKdPmy9k/SA+W8tHYdo5r5sVMJoqupUoDgyu
3/UszZbJiAVuEvfUPZDArUBlu/z24qjaY2MC1pNDg/0sfBUvq9/OEoKTnfkY
y8xhxRp2O1kpWECSlxwsQWDVGinIy6NowRnSbFNR3uGfUCTMTcz+/SCZ3aaT
W6swCxJ8zu9WkTS8xtrjyRPJXjT2Gga+chLMBFHsoMIYKOwZNq4T/CTk5OEn
PqxY3FM5EA71Ue5zlYdFFVxiC9Sd65DDwj5ZIXpFROexXZtqzIFc18ktFsmS
klqZsXgFGhZk6LqJR+98ygKm08lnurbUD4oTrAVbXNSBJAXsmi+DoRk8yXSw
MB2gNkFN3ol5y/jZL08vr+ezmLL0mgJZphIZCTKFMiwgsKlYHXSmAUl3qliZ
E8z4BMWdxCaFG8rsUoA93eHiCKjdjTB4ADMVroDxCJC1BGcAzamegcApcJv6
dxxwSfn8gEhuYV2h1Wxbf4qZOpX5Qh0XOYWyYGwjMoaWzZRBlxx4yulC56Kk
aqo2MlX7FUOFfq9dC85to2HeLVdKL21N+sTSpKOcHcHKqeNeYJUvlDyJmH8R
16hisrJRjPJsmgn5yd19ub/u9OJfPpeuaGR6Ed0qKuLqWlSVRtJvRuG3Z8eS
eKNw4Afs+/7wdJxgOqZlNP0YBMfCzNQqK8q5rsdnSOC47kxlE3AZkzXSK2ec
wkFn8V35OhFpblICEd3mtWVxnmW4QhYMZw/KzyqXAckTEWiho4SeqbsqqhZt
UK7Bcjjhk+Woulol4yd80zUXpQPE6S/8rRX6YgCnOtJWiJm7FxbVlLcwPBx+
CWvIBXxos0v55jjZpqzIemcvXEZqobCHm3inxUsAP0dx0UBARkOnGNKa+fE+
nS7SjFOP+omXhQtox8FEHpaJBpAMCFM5YpDIezdDgsMrEm1Wzwc7USFJksQq
ZUo8wRKpOQad5VNllc0bBAO0c260rekKLw4g79oRYVGLW5RWeUBxZVLfqxht
QWs7U+x7KlrsbCZUL58crCCQ4Gx9U1jo+BQf8mLMpQkAwVyBQM8l1FPy4ixg
c9Ek1u+3HtqU8bc8oojNujI2jlPgp8eN7LotPCVCvnhe/AmdIuhYWHM7LLbS
y4bVvRXyvfX3cOOfnwK104J1/ZH9raIXj/gx/UPXoIVJTB/ZH+HohrNZRHDr
YmBuiILkF7n+P7ksd+uhrfxU6G92sQkgfP1DJdtsMIC/P5wFXIEFyHRVY9rw
jlbWH3SVRbIfPlHFnEWYoFrOAtHaMnpS2v/jZshT2p/pz6f2/7jZ5CX9N+/t
6/9x+xHdC/19dGDdj4u/bx4ztVqB7v+YfRf7v3nUvvP9H7tvm/7RAMI8ZpWg
SJlt0pxzptrUU9N2a3GhTTR8VH/t2HlvNf9QZSf1HSP6Q/fMHkmBKjTfhxoW
9tLbvbDbCbsD+ucobA7CZj2s1Wq253kd4F0/c3NfyfZrhRR2DR6J8QWLeOXE
ef1UhNpXJHadHSCLhEt62qpHU6seecVAlW9ZLzQVFYyifOkI0qgr+4qxab1A
Vz2/5ty2ykK3aYXU3Vpn+0ElBY0R19rSvYyydyEVvp4kWBnhAVHRfqgmNpbC
pmsPy8ZaT3KhRf6E6SXGR69bhPXWQZf61Q9GCDYGhtrkKrWw8jLx1SK6xs+r
ZNUwlYOfPF2Onui0mLFw7Ye3tlxEs2yaLJ0TF0eXk5lAyfMkVHp8l5sK76aO
Ej9zmxUF41peb5G2qKKkl1Q1ee0MymieU524blZ+qg10iIIKQ/pEJPI1J5Uj
bHxw46If1QoaDAB2Q03FjsmVq8FlrdIFvU4t0wkstTA/qVp9yZwJRfHnlTWN
1E4Usp1Pu3Co/1J6iMsQHtJAFL95jPbxk+6zucZh99lUy7D7bKpZuH0IFq46
UdAhvij0eViD+MnT5yGtwd9nvaZQ1meddlDeR2kESHE3nadcCyjvUy75l/VZ
J7f6+6zXTvx9aOP74c0zW6wCaepZaZ+HNIFin4el4Dy+bSbx2302lfJNn80l
+588NGRD+V2kzNZ+eGwkK6nzxpbQX0TkNCIISZ6u6AmLOV/N5xK0mYuaOET/
iQ63eIT46R0I/TzGDqwtv6X80Jg1yCZrDPW1MoeNYezk3s+s8u/+Fc2K0gR7
UpKlrkIhPDSX5HVdtNU4plnZqC46G7FxKkJCeXupUg1asMfhEw4kr/0D1vek
Yjpo589NbD3wNs9lLclNluiT3YRje7evXMs4tn52VnocxUP4F+b6GzL/zxMD
SmnHp1sic4N8mjkyN8in2SQLg9gAfkCiKKf1j7dOhp8mbGw4SCiP4j5zkNB5
SPPAYOvkE0MIAGvjq+Q9ui0fI0zxz9+FtFbCZ3hSz0pY7LpBNrakrRGdNh1i
3SB21awHEHfddv7+zCLDZfBYP8gjLJOlYt7GVGDNIBaOLOIsnayQRpTh3KcI
0I8YZAMb+5MHB3kEVD5F5t54kJ/ldDb3e6wZBNNhLE1qnSrGdbzHpH2PG+Rn
OmJ5qc6Kw9GwvrvX1krDxoOIqIZBhBgIvR/+6U9kyP3qq40H+Vnw5G6RbOwW
fNTpNB57OiJQVi3h77EreZS7o0SPfMwQn6YkbjDIJ/hOPk2NLK7lE/TKNYN8
qgvJGuTT/UjP86poez8crlWRPkvxzAXhK+1TvUkyBYpJmZIPy14IeytQqXdP
mCrCyV7jMTyvfxdYnP7XeRhIConsKrD/KHkkaDf51KeCDz2j8+fJtnM8vsk9
qpMFfc6ru/yBfOazu07h2V0hv3N+xrLMzmKJD8JfKLOz9cKAmy3tnXgHtuMb
AzehpdpVMYWlJ9+zSmnEn2IwuZ1d1C0ZqrJBz3z3B19z6ehyN7LcxMWrwlMm
stxNz6OygVKaumJEOYd65oPKiyHl0+i9iSSHkda8fvz5EqyWp0fdOMNksHlC
07Un/xtLYppfK2eR4OelJolE8S0EkwXnGepmTEJesRZ4hB7Ffmn7IKPIL+BX
ZBO0rcD8uo5F8EPeIoPYhENs+NraKZTuqUaqyqSXFPsOf55K684gnhqiaoiS
wuHh5rXaHy7WvjnnNJyRET/PODcos66eIO2rl/JYteHLktdJFa60oFoOz87e
ng7PTvqvhq8u3sJfr88AmRr0+bevzr89PX19djE8fDv828Xw1fnx61fwbbPw
7dHZ8PzFq+H5+duT4eBF/9Xx+ck5NGwVGp6cf/32r8MzGahd+H5wfPpiePYW
4TTEETrU4qAP3wzPLo6Pjgf9iyF83qXP+xfQ6qJ/AaO9PRv+5dvjs+EhfLlb
GJbhPsS/4PsefW8NCLs7lb579N3F8ATa9s++NxCp0xcAp+MjmPPt6dnrAez3
+NXXb4/6xy+pb2PXkmJcavGZMkzXlzrAneEBmeU3JrH8OqKKA7Ff4yncJwku
/6xy0P66hpaI5KuQ+jlVoeUtHDHcuwQzTxQLkuqK6kp0A3zQRA06ryUgv4XS
sg/A75MqzP78YPMR8F+tbLeVk+SXKNL9S8DPYjC/TvldCRfNV6p1a6MF3lK5
hUK5LmPZqFKurVytWQH7t5c3awvl5vPNPFgrt7xSrmJx/nq5kv6f31db77Fx
S0o0lNf1FfXOf8MCugjqQqHcf5dSuFZZ+tovcNcsGfK3pbbjAWLXzfV2Rwgq
KLi/UZ39kxIgsJqST4FAKvF2LXzNz7mlrpeUjKdCi5xL5JJSXwB682N6vRR+
YC75dSXfC51aXtpWuadiG8Ye6dunDm01tnWRCqmnJiiusxBYJIzk9JEkLMrw
TbX8pmpUUBtQ4LKlyvgdqKoB3FLRDpE1kUBLEgC5+mfDweuTk5Phq0NQOzC/
kZQN4T0DqVktVKaIQFdEcXauyIBOkK+TFzMQzQtHCu+Svsn1zRLD06VOLsZH
rGaUCka//Jbt4IRAK+DY0KA3cvMn4GNR1EOBXGT4mhdrLowX6XzOLyrvXdsL
cRYGe4VYIz3/nseLJB0TbuFb+BXsf4LQQT2Ld87pECZJfEt5yAhwd3AJQEXh
jBHRNRwZ13XAZPacNHWJCbFHnKKb6ClmSkBaS6A0O+a6DpgxDY5+EWHwmE9v
TOQ1xVj6BCqXOjOG6Poa34biFED8+PHtXbRYRJhtE9C7XAnfaiqc9B2fDm4X
2sx1ncRsYEQFzfCc40mWGuCfh4mrmWYNQejM/wBC4ruOR+DjcsGpIBQlm0SW
wEF1CkgLVuSTsE+n95E0d6rgEStoGgmtKgvF0/AaPbZazsGwCm6VcDAncm/J
D9HkOl3AEqahpXYInBZFIa5vvWhfAxS7t2zMZBYJQsX5DAP3CDTly1hr29lq
b4KfFjxKRQydbmpsViJU+OeHiHcFnq26ZqqtzuZnbisvmW9v/7TDzq9kzSnn
7W9bXdzwqcn3wuVc4sWS+TBzIUwPuY56wKIK9EMevflTCeKgpOqZidbzt9BJ
KseSsLVIFMtIiUGLjSFWZEanHPO+Dov4Nn1nMjNypphP4qSox03nuvI8Ja0G
6WmGM1mzyhl4bZ1bu3gQxyX1QXJLMTRSL0Qy8Wc5rVI9g+RBHtqO537Y9tat
3ro1upfFIQdFOz2pvzmhNpNgZjwbovRWrHb+TtLLKBadCzLpOpWeljVR+qVt
s/AYPQQcPvPy1t42VbaxcQollvj9nApZpAuVDU5Xo2JhPfk0Wc3CMBgtviOM
dW/PJeejYIqBUesoFckW8tLMVqPO658m2SieTKJZnK4oxybMki4wVFzYqSmO
MY1B0sFclTrjhQiocMFGtMsxHuDETR+ljs0lg48VVBVZLBEILHEgCF2BIKQK
GFNOFLPg1DzWi0+le8e55Qjc1jgJthq7Hl6BRqwV5pCPx04is/wLA/IbMPgy
cRKv0XETq5hzknsGrLQEMU1sxGeyJb6LsHBKvVPQWXq1ImNVV6PrjtVoUlVO
Ur03YB5hnuwGwStAUVtLFKEc7fhjFFhBUUOj2OS+QsORoQyY9H3uGAImS2jn
4/yKdFIUqWil4yNbP/EJdbJuxZJAzGLafDONI3wJi5mW8b0oOgaw+FbJoukt
72Uc8MoTU74lofvOmu5SKuDAgZEifhnfRLcJXCVMG2aSwGEqy4BOZr50EwoK
VlecJ6T/QDI3Sa+vdTbEW7I/v4ipYA/p0BbhoyfMZGbQSVaz6J5LTDKpDsy6
9Kqo5JGzk0ty6JOt6lRZz56i9UyeqziyFT4IIHagyiVExWIJRMLD75A6BEX5
UPMMYWLK3kUWQfM7rRLvFz6lpXS2wYcPP6BtsqqMKx8/4j4mySghVVQMCBGw
FHrgSzkG1+WexOpRuSLxsO4g6BcK2DopJkUgSTViWrWkwmItqSBajG4SzA1M
1PNSWcNNf195G+YnKiusXWtAtbjCPKLmFHRtBn0G4ZY4L50M/9u1oD9Bpen6
xjuxrs7EVS5hGMrdFiN9IjRzXJXqVANKwEuyGpWnkzTVmVFaIyJx+ho49bMQ
dS9XyYQyf0a6StWSEwYjMq9Q+sTaTtTWX562LPu1VanFNjJZK6CacaUZSrWA
IA4ItTuNcDPb8kxFjaiIET0PBCDB0v6ovq1Oost4wozE+Uge7RXMYonOoxb8
yZd/96ta8Njsub68uZ6subBoKaL15/PXryrh4OD1WUVlL9ynP4lY1qAh/XES
zbnk22IBF3AoDp59NhISsNDxg+ZstGZiI86uNY3mmR7kfEnuk5LeVemdUSsx
NaKtEG0eMsIpJWJADD6HK6FjWfd5THxzR+IkHtFcN83spmix5dSb0oEqslGy
3xGWlkRnQrWkr17GRXSd7ZtfQ2WbYi/DH6lU9s6fsV72qWQOxzVyRtsyD5jd
q69MD9nDvdAbN7qBpSKeHnBCiXMWhffDw+EBAQPFDpViGjt9E9/r2o0jASHV
96YvQCR6l4y3jXeDCJWI+e+4heAuSMo3rGkyTtLXW6ZSjvUpZ1UjRzyTjAgY
5J3VQpUQc7TWbSrKw9dGBR9a95+kfOhbXQLvv5wD5pRkD0bGArSkijkgPwoO
eBtEyOw4dyY0M1kzdSHAmzThFNy0d20lQrAOseBXxmQnD97X4mRhLgGNgAZi
iGUkkMKUrOzjABAwwRcyUTwsnEtXO1Mo4vdhcepakSjF1Shqlut4cyvHiZOO
fDEo3cUUeEVYysXgrIps2X6AEVEXjnFf1YxbaGI83qcaahUugIb3UAqYVUzJ
sIpJEypZ+WdXa3JBWzlNVYEca17l1qrR8h4GkjnqCMQpTvdvFcIrB1lN7z+7
q1IiTP6aSw366kTfpJOxJv6KbRZKnYaSc1M/MVbTmFyqPBFx0Cj/ctrcQqts
KGiX6fje9rVJ/JsSIMudbNS7zNFmIi6V8EN57umVuRqQBnBTfudibAOvpVlU
Hfz0XpFpVzTNuMA5+RKAykSSuzgKrEosRcFCHpdz1VjygtvmH3YGukaRgAQw
VK+KBdmUCAFCPtAzSiDKTzHYmaEUYCqxBECg8VEmIp22RDkj5iS1SjhxNMLI
NkqVgovNVyDzjEF6YPeuXF3ySHNh61gheODuEylxWd05IlgG2hVTwdaALND1
NfMbo4vJBUvHbEh7+hSFWC5IcZOQFt8/a58fB0FezosW7SyxJD1XOOPrtrhM
lmT1yJVDC1T5SRSQfDKmriGrlUJiUW4FLa7RqzYXCLHRG7M0H209pr2oNVZU
bm8eCGGLkcVoWAjskqTYtkapHAg7AP6T9F5qc0a6bLnSi01+sELBO1dzCOw7
wwQusioMGA/zqVSlC7nCJALWNFcwCRgm0uUgGr27XlCkzwBzXocn3NUpYmel
Woc9JSMr5b56uQR/qjpj7M1juxWVQaqQfKqFdvt6cL4q8pewDhOore9zYniR
3O088lIgXREuie2QuoTsrdSKnnqR8J1ddxB7GghT2nAsrkKbUrYsZAfuBa3I
YhGE7n5UlRfAYLzDsOa7aDFWde554nu+QjPLFDGNMGQgzip0i7NkudL6BZms
pGRtJYwJx8iQAVTvFXIyvs8qjEcSE2su6VQ7RtYjtZJB2kJdCW4LkBU6IDwe
9N03akr/YYuAU3lRQIa/a7BtaQsekAVMHIdcgvYxSuemuhwf1jZrBE4hY10y
wKfxUj0ANSAehdlNqBKlMGapBeIZKI8LnY5FYjIWYE2praD52O0SoSxuAlAU
B/YUllS1jZVtQRskfJFO2v4CB4rj8RGv3SuliS6Ah27lXSq2gaXsmgOMxVpl
15K2kDFPkYkG+nT61j8NdGqktaAjGUrgheO5EEuWhqMTjTBp6mS5l3GeCFc4
u7hCP70PSmWjDGSRBjFPbgpE++QVQAIcTk+s6Xa6yHEqEvBGS3dmToM/ueeI
vaUfbJmXc5EZ8STigBB1KdUDoVNTzQhGJr34JRo+sBz8EhRkzrqPCmYlbxwg
oiwqfwUIOqbZu2XL8DWMx4e3mvGznkB9LMU5kgXqjVmNMzipYko6YBPpHsBA
RWmqsNRaeK6zvoMMMw6fwCCUsh7Lp6EcI7ZBYs/EFMTMTMGJUeCUCmPN1WPd
WalcfYgR4ROyBD0xpqAVRVKyPyaa4yj+2Ck9jNGtpnwMVBn7Fd7ate+U+Sio
LvLaeHRujD8NamziE0tHxp8mNdaxiusbt3LL8IQnm8ZtbiwRaFUVe+AfuUuN
fTWVPI13qfFyxGXsHlhzjxrH75frW3PjPWrslskra9yoc+PsunwJpjEfivKR
PNC4WQYNVQrKbsyHIhQVccMPF27Mh1JSfTHfuMOIZFIvjPODWo276lD0mJkU
I6yyIdNuzCeIdLDKT93XQaMnWGd55Mob8wly5OWaH2rcrOfw2ftUQTU2J0gu
nvUj46FYLwyJegRfhhMmq1gaMZqjVY3oCVxmU/FH0+Lcq7L1rwHDRmC9swub
gXlMF7bWvjmgN2OFW4rPwbwlZcPdQCEYvvrS9wqfeeWK3OIDL3rmCNiv3gXh
H801tf3w+1ZQRGb4uF1SURS/6wQOlsIn3WAdKtLDMhv94IOeE/eMn+wF8poT
MOWBVy/YpqHDePGvljxcexoeiKcvPLc5QxDozxPXREocJ9Nx5ihWzLHsUdg/
PbatO4HydnSxfH2ueBBr5ijZ6GmQmWMFHa0DSbTRgItx4PDsFqJoHCNmZpTR
ruz9Q2G4C0BPJVmUDXmVLDIJUaFQDIZIzlQM2zFfKhMVRrUyQ9XRB1ci3qFM
J4Edx1Y5z3GKrm5lRMkH8CitPRpxSU0VZmH7etnqA9rUQlmYpKaQ18jEz6HV
RRJzkIrFieklDa1Sh+PWArJ9Yiw/SaoUmYD2BSrXSwIzGhOu3F2z8y5TofEc
j+B6283zQfepttKP5osYEGOVcZmvZSElI54UhcBzMA1LQ3Qj2L6cL91CYg6d
rJov0C5JyU1N4OACTQwEU7OLjHnXMwrincGKVpd8azWuZar3rTG583oCWo9U
2bRXSKt/9dq8dUF6yzKhCpyzI2ukOLQTcqsqz0r10kjvxArNxcpnKMMX0j1m
kpz+BfSesKrllhHUWVsoOYH7nVNjWoVrqxt0y0oBXwWOSRlJnel7i4kExmes
rKq0qWgZVYFzTLOqprVKb7CvOd85ukZyFVWJUmzJtnRKTX7vPIogxFPiMx2H
/XzC+4op0ckZgsK7VOiU5dzSylwHuzQwKdIGMtcx+ZoF+TqHJhE7xgnO4drN
F5hO1fB4SlzPjKtGr3ItohL8PERF79DZH1UtpL1ZYUq44GRGzzhyhGEDzAnd
AmDRzCdealBy3bxM+0/sWCethpOR2ae4YxznDIGgSy6vKearcVWur1Vl1ykz
ylECplCud2rcAIVPXK2QpgQm2FyF7+HhqUGEEpSaHrQqzaPVwj7a1KnPagaA
Ta9nyY+g1qoncWpptpHqyoFdyaLLDhl4fLkX1PCEXGXSjKLI4mhs/ASqvDcV
BVDLMxcHLaZoY7eNLFu3cAxkvjZGFrH8a9OeE5ewLW/o7ahXZboIpNSFtiRv
Bz43BtstiInyW63IcQzhqAjU10r9d4rQubAN1EkqBqSWsg7aa3zOTMhtSu5F
/Q9PSwbggC1PD66eRlzzMtZUdmzdcTbL0vrvQx3q6xmK4nV12Tsr7sjEByOD
Q4hmZPvcYEzL0/hkNLt6Ii7LLb+fsWXJob3dNsih2zr6YE34QU6AsqIOlGX7
Vq3UKi2rkyxbYa2U4EMZDGl4tAECO14hTFc6FPYwuUbuoyM1LMETQGcVGc4/
rfa8zcRwrvMX/Wqz09Um0xQdXKB+jM1LBPuq0NNU8mkL5DIAXZsW3s0BkIbk
N692CdADm50LLyH2bx3hVkLiwHYlz6CzSqBgxI/I0VFoitxqkYCbKbXLI95I
5HdBeGBSZNiJvulZRckLZTwTgDbjmuvoVyhOGVheI19h3nSh6vLSA2OYihmL
uD5wnfdzINToRVneLOLY9n3YF0C9t2CPVzHWfmFlBLcfV/gggacNwjn7hJH4
RIuEYllDKZ5bEZOoE1oPwoZUv7yJowlSwC2Oo57EGH7NIdO47W2PyVuhpvdh
BM1iFBh6nFU83K24dl2rIHGa3gHsKuoSW2tUTrh4Oapth4InbJ7ON72MRu/Y
sRah+7y6TKs0OVH1UF5dh3cU6UtuAgeXsSImBgPgiSiJqVg3k6KkOAjE7I4d
XAaBYJYtAdQMumFOKMQU4wMhcR7wEEUo86nlCpcjZk1g28Ba+C57WySxDD8Q
LlbZXit9gsBZ0dIniaL41gi2VPZshci5jb0CrBirTKU+KcHCWFEbOTSDWQ/x
oW3jtsrY3YCegyKesDfciXMw6gbJFynQ83up4UqaknJG+dLrkG/JuxeGySzV
I5EaQF+JIOxH5M1JRpAzeqw7Nyd1pxw0PmfFeGhlcMokHp0JhuQykzVkagmZ
tYSMjBdIcfD9xzJie8JM12t3QfUsU1oNGV/GKxOvRRHo6URqqo7VpOotph0T
EhTezNlRSAnVWr/nd7wkEOL7YDtFGzIfAohk2oTNFB7eqwwTEmvCpgPJ2aaY
cn4rOryeF8veQhbIfWkiyNliEb7oXh18wPUiqIK5ELWItddt8/6ZCqznnreR
VjpNL9Ebyrc9YGRHEjYjtQWf/ZlqtnTaXOqXTAUq2TCZZxQUA9BRFhnXIAc0
XqgXQ5adBE0k2eoKGGLC0R4I2Bq+KDEPED1AMMYM3A0c+HQOyMUsAJCfX0hb
tCbh+IyAWCBfIbhdn3WDNMnI0xsONg+K2sdJ/3t1Kib0q9xCbIwbRrn1UJHA
x4e35cUN2eGKl5uuMADAvdkVHVSSk5GVjkGczYo20fkvc6YflZJL3w/X+lP4
2qfGW/THftbkCHfGB//zGm5caLFwWGaP1XyZhlTxnWzjVMu7QdCI3im8+gHh
8C66NyiuQvCoB76FA5EOMJmiqf2vXVnUKCgcFb6KRduM8JQ1x6ED9nOvHn08
msMQ1j7aTJzQCN/7UbTN+gU9snUKYrORwjG0KTnE59WhEEAJt0XibDvbvIgt
rJanKYWOG6nCp80w8Bxy4B4yUpEPH4qJSz+q1Eo0DXDbeMYOAn5+QrhxI1dO
fCAGvJYrhOPELe+FwOmi73damEFYV88ZyOA/xmsFW6bI2QnmuLs3BFPbg3xf
0jx2hB8bZZAcEd+yiQyiOhnMzKUKkoIaPbpJU0kuyLlaxFUh9g9EKQvZWI0R
OSC46BO2Gr0NlMkHr+a2Pm8Mi1a0PCChTD7UebFEeTZQ5z2xvVnd55DLiKwW
8vYDvxSwMDis6djARY6sZcrWWmQsRAKJeFOPKCixlF6puGA3VgOGZCuvDpyN
9/H5DRpz6A2s15id50sRP5cyOW3gUJm8Is1QftuKjCt+NL5WiIxo10FSKhhp
YstJUNXBMPZ6tNqpWVuUZ5cJW/dlUsvmgmuyXlOnzjtLoa8shy/VM+ta8SKd
kszPsaQP3KgxoBBc6EBfJgthnfwwiojdK7WZVTURHlSUdsCIr1+CSiA/pp1h
dWQ1m1BmTMbvkYptllw3cjMDKxePpvMCcwQkviTfruGFzlJ221mIGSm0DApo
WbimOKcOgqT9JEujUknnABdA09BLVHsuEAMqFh+i16OiMyO/LzkOVZBN4RSn
eF5gbh+OX0PpQsLvAXDAWTkh0FJbUgCHWZ7kCm9I4s09U1QrknyeJFwHFzcr
1HXonYK+uMQwOCCzgBkczTmNyWlvHVJgyCfjydiHKOq8PE5qc7nW4GWeawUb
iybOS2GaKl0ExvqYMxexe0GeJhFdFth8gnfd5lGf4l8vetNx2JkZOyhYNnIp
YC1B7wHnleuTJJcPRsZYmcx9nlMmtVp0luyLfqeiLYvwtmRJjoHdeFKsw9dq
NAtMOoeCFdrqnXOcEGUMlLdlrafNTGdLbznt4DEypptW46HQJnqiZdJWXmlb
yuZn+HPD7rFw29hRGfzuqPznOyrlNWbBVcnH/lhPZV42/o04LEUy2sBdad+Q
X9praUB/kaM0SipGR8BGUn3ee6Te/LiHOdPgsV9eAlKxw1Grr1KIwxowkAeQ
xexEmyQ2qhgGZZ76rKGnpTr7g5mKApekevIUOWaOhymnxgzPzcZE6SR7sHmt
qN4VknUUiC1bsxXCOVx7vRok6TXvUNRbYTKfbJmmvI48vw/YxyawRC3Dyrzz
OU5zpaBf/Bbc5lZw32/Ue45eln8tt7mB6T/fe55HSrFs5oTKgn24YNuSt5js
XCV9DXTLZPYOr0TgvOfW+XmFU5fEMnPe4dSJ9WS7x3qxO1x/DYX7lkxKzWED
nMIBVDfvKDY9S5Y2bXH2z1mr6ISLbgQ3zPkm92g+Cy7vLduLzyVkRgg8L9HV
QEqZycGsWMTpKohUDT5zUET2zMvziWOkezwJfMid9+t78H5+v13wNBxwLsxz
fqDw4amd+SQI2NBp9ASdMYUu7C1WRV+Z5JZkcuu7bZCe4QKczMZh/J5dw2P3
PaKbBksb0ksHHfYvJCG9Fi/tCGn9bg9FzvIJlLlWMRTPhKpQ68Nz+svPhFsX
MhcZdMYxDcfSja5FqcfDtVE7eZpM0llujdvlUMm5Cay10w1SLyceXvUnT2Eu
qTNJntCE55RC1Ou6OJK02ioFHZqytFVaMaC5zvujH0uawmWur41qOfQvMinH
aT+spPeT+SItvsxtJP9SAh9cwJrJ8XbTq2Z+CppQFuULzEdwnYq91HncmNP1
zTWzNCqT/c2b5t0pDaLLqlUCk7lRZA2mzJTVLV2MY06/ROoXJ6YjPi2mWjzu
bWDos9hOPkYRNpJn181VqdOieR5qEl1SbIFXL6nqbKRaYN5ySgugnF6mRjL5
dxnoiFdZgm9YA8tIV1EmuoKarjatkqzadxpdj/xo4KQ/sIFgGVqsN2L2i67g
y9BTlchT7G3nebFhFffdqMbjcRY9tk8GYlgQfHnhoAC+JHdTG1OwFTMElWBI
74/Mx7XgS0no4/TjJFJa9sWcjziSNn8bIMEAzDhP+q8O+xevz74n2ApVtXLa
TvkKvj5FO1j/ZfCl9TWySStMP50ptysiCN63t0go3l5E19fC28loEnwpmFOx
zpK+xoM0lwiLf3EVOVm1DXmsHxiSdkgfVvh36Cxfvynpiyewpi99/UYmLjt1
6r9maW/Ku+vp16wOS+EVjwVPwSX3duZhg00I9+BLc9Lu+dn98kcn1vXgy+LR
0SdSfbmuP8WoxCAwgKRnfvxM80vgFv1T+A9lO6oecWwJGci8uyvbTnH12pQS
fJnDP1vKUQae4/6rPpN+iyMu4muQyxf3avHm5J+H1V1c/HBweN4P73ZCUZ2C
HHZBux61G0M7eYk4JLeOvqZkr2KnmEPjqa4e3Ph4otKDAbuOaI3VvLVTaa5N
8/qw3mmC2sW+Gsl6pgJKxMCvl6D8j5GxN7nsy+TwdxVmHK0MZrAM/Kqmv8LV
pHaxI5ieii3RGvVidPYqthzJWROzVS8xHVKmlhNdprdxTSdTtq1PCo0lYDew
9GMEMIY4oItJ3JXMUKFNPgjNyZXleDi958ceHDzFGxDx7ihFqMWdEhCCeKPp
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
quXe/j9om2l9pm1Gu5jzxpmmVwWV5r+EdaZgot0Ju6HESIUuz9XW2p1wlyZ5
huR7rbHMUDJlcd0Je6GhRIZj7SiXs2NxRSsRmoyQxhdMev36QX1QP6wP60fP
tGsj1FdMm7yryRTjNfUVA0r4pz85xFB6yJXwXi6QqCwrkq+buUn93aNDvEnD
/qDVHB60D4Z8k4Z4kwadQX1vcHS4e9g+tC/FQfPAfyn03LIBjKgeqVxbhqK9
Cb/6KrAvxRvx2dmWldYnWlYKin6YV3HrRVOAEf38hhWF1WRZKWqtaFlp/+qW
la47kp6XFIr85TErqNdL+tXVGuq7JS12t/3Xzgze9m6vvu2ld0/DJ0/UlL2S
KUmwlxv6sJXIAqJt8HAsYS4UnP37r/p+jjmryX3TChSOrM03Or7dryca7lJb
haW2tteTkvySOz1Ub8yaWt3CmnrN5lGn16x/LoWwuVe7lq90X8q22p/ItnQQ
Sp5dtZyLLc1+CTblOmp2MDW44SJ/+pNF+92gkx1HKZLjdJOWVu8WIPTGC1xV
gTOExQ/WsYt9zS+MeQ3tcyyZFQUzDwfZJxZyeNCtN/qHQzj7veZBp9dpNQf9
euvo4KDbbR0O23vwQbvVabW6R41Op3fQ3oNvms3dZrffPBoeHrosBHlDJb+r
HavOmYRkImB7W5796gRhuDroW9Q0CzIpiMvVXTQu5O0t9POxsCJS7mbORB8+
FpsYYgjIOpl4AKqyFTIgOwfNw06r028edA87w9YAQDlo1HfbR6DxHvb3ho36
wWETPtvb67dae43uIQC9NTxs9XqNZqfe7jV2+4N2D2B70Bvu9drDAUK51zk4
bAzajUav14Or22ocNA46e+1OHdXqg2a9cdQ9gkF39/rt/EFsGzbtO5kdN4OT
llZcgOdaWbJbQ6LYy9vmfdaE9S1vH3zoRKP61mC30vYXHKuov/g0GlSd2512
p1NvHrbb3c5ut7vXbXU7oIjbMzwh6nJI/uQnXv0NBoJu3dZuB5C/AyO1nCH0
QPROOj46Lxuld9hrdnZb/b1m97C9C3o93q7m4aC5t7e3e7TbJgsB8MjVKvHr
njfPdtvdxrPiF7mFLCPfEvLKypsSUsFnok8RPm57iJbVQWrA3cbVFNBkkYxj
w87oxEDt9xmOCqzvNp6NU+CAJhCQ0O3mGbDTw8MO0CGkSN1uvbd7eNA+6hzU
+/1md9BURPyB4UeTKMvc0Zv7RAnbzaPd+l7rsDfodA76ffg/OOijAfLRo/Zw
s9EfVAE8cPts6u4bz6LxvcHRbqM/6HX7R0BBhg2kLrv9eqcPhAV22eo32keH
ewe7u/0WCCztbmtvF+hRu7vX7vaGg6HXtlSk9GsBQoFmcIyAQ816oVuB/FpY
OOOweT9WVMJGZ4O+viPHrvmr4JJMH/OQoVXOzJ1wz3vAn3UlCiBks1DTZxdK
F9c7vTERlKgKFGVcRZJSRZpSbTXHIyIqV7vtGhCDPGcslRHUoq/i5eiGZvbB
uQBlPulpxJ1aBQDnwPvR/lOZV+QjDEogcRyVUApVZNlpnJe6PKpn+5dTPR/y
GxQlVFI5f6vO/H7JvA2a15GEH6OsdfZAH2oP7eW18ipKv1lvdnq7LcDcXrOt
tJWHhVFnkPWSaafX7oPE1W4Dfas34NP6URc+q7Og5ipUnyG1udv6DBHOHahd
b3V6h234/4Yol/A37Ajg1gMC3j7wSzXtXm5rrsTSqT8kfbSbKFzU2wCItqsn
dxu0mk79ITYMJ1t3makzUJGz4tYMEqzjVi6MNmBd9WEDIQhrgn/34Pg7tA93
oAboxK2DLua+b+/Wd1stQKAmIMsutO0e7ta7g26nOeweARR3m0etXrfd6rWa
ADho6gK70Txs7cFX3W4bfmtDg06rTZ+1GM7w/80uLBPa7NH/4OCgVbs5dAbC
MwBIH8GxH9kqeKemM6M+qIN3PlEHzz02yGviHYfOOY1/Tn3cQ9g7vxxhz4dz
WcSws71mw0Tei5FeSN4bvx55txCmW5Okug+iS/dz0EU91MgjS7cIO276S5hu
VIj2DkY/gaw0TrJ31SvQ3VHykShP85wAWpHVYH3gez5isKtx8PJxOJgXHSwc
bDEOdgtfuzZgPxx/0wLGoGTeBhnq5bzMzN09tz2+ydnas+YFyrm32wKuedjt
7naALA/Q6uycc9hYF3jJUSgPHbkKfB+6ge8UyH2ind0fnpL8q8KvPz4Y6o5x
Gvk4dzWs8aGP42y0SC5VLh15MwZwqo7jK10GWQ9AZTg5JMQUAzFB7/w+GFYw
B8Vx0aCSSuQ0F1ePlDYXfdWq22tMdqFbV+qb+F5q+2EWrWr1YPj18avw9Oz4
r/h65Zvh9/RpcHL89Yv+9bB/cnDy9cH9D1+fn7T34O+vBwP5/W744uDr+l10
d3zQ/8tfrvvz//r+H/81+Pbrlyed+l8PBsHgH9+fL//2RX3vH19PZ/d/Pl3M
D19e/Lhzk/zt9c1Z/9Wg3z8fTtJhtLhe/fDD3p9v/vo+iXdfpdPbH3542Ttb
3ganX1wmy+++G92Mb/uLi+zqm3fLbPD98P3dN6+Wi1cv/pbsvT5ovfribtb/
dpn9OD1rtk7ay2+S73hbw1eHxU0xYlxQsWBV2RGhbBX6luo+KgkrVZG5lzzE
6tB88Pv24OXxwALf0bu74d33L75J/+v4x3/UB/2/fH8svx/2/zI6BIANb/4c
HXz9Q/vlDz/cnn//19H3s9WP0Z8X3R+SneFlcPnjzrS9+Otkdvy3y7tv6rsv
7ucvL/vTg5PR4B+X0Y9njfbtxfX4x6vsz3dHLy9POu/Gyx9fvzxPJ9fPn1sQ
yC2LAYCsRS4GGmacexHO02TGeY7S8NuzY11YoCzRplwj0HG9NwjJbhlXKlzK
NWzKZ63fCTcy0Fv6vY5m8Ftr8r5bN/iBjTEHrb2DTvOgfgCy5rC/CzJpb9DY
qx91ursHR4PmoAdS4wEQ1N3WEXy/12s1es3h7t4RqFS9w87ewTNRkJVlYp2B
3Sy73K6+oT3dNoWssZ+X2s0L9nIQzTvt/gEoLAetZr0PkjZoKCAMd5t7zd5B
ozNEhnI07O51dkFjGhyAvtDo9lvd3WH7oLGHytTR0eHBYReh1OztNY/gu6N+
owey++CgcwhdBwC85rC+d7DXGB7uDUAe7/VBUxg2O0f9XbGXvxEzuYKnUXtz
1mhLH/YZwa2v19m9d8ISU/dOWG7ddoxLzyw7tWuRfKYMz87Hn2NvfraMjOlP
2Y3fWCd6A9xnvM5EvBM+1gS2E/7chmB7xJ/F9msPuIG595E0I9fpFzLjFt1B
m1lsLaPhTvgo46zd/AF7rDYUGqJj3a9c3E7Huir+y1G8GBtdCt+teIa8SiiH
WpixBTfr+3lm8Rjkt8/g5zX5fqx4luS37trHVGbQfWMdy2pm7b9duv/VbJLM
3uEo7jCB2IE/WlqWreKDDPwifl/K1/1mxM1YbFDOY8tMh4ZnBZ/DtIJP51r1
VtDZqzfqvX738YbBbif4dGNgrxt8ugEQoP3pRr9+L3ikoa9jwyHwAWJTOAQC
iPYudADls91oGyPiQ3bDYJ3h8CFbYbDOWGjbBxt07L0m4HBDWwttEb2ZF9FN
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

-->

</rfc>

