<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version  (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-lake-edhoc-impl-cons-02" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title abbrev="Implementation Considerations for EDHOC">Implementation Considerations for Ephemeral Diffie-Hellman Over COSE (EDHOC)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-lake-edhoc-impl-cons-02"/>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <date year="2024" month="October" day="21"/>
    <area>Security</area>
    <workgroup>LAKE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document provides considerations for guiding the implementation of the authenticated key exchange protocol Ephemeral Diffie-Hellman Over COSE (EDHOC).</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Lightweight Authenticated Key Exchange Working Group mailing list (lake@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/lake/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/lake-wg/edhoc-impl-cons"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>Ephemeral Diffie-Hellman Over COSE (EDHOC) <xref target="RFC9528"/> is a lightweight authenticated key exchange protocol, especially intended for use in constrained scenarios.</t>
      <t>During the development of EDHOC, a number of side topics were raised and discussed, as emerging from reviews of the protocol latest design and from implementation activities. These topics were identified as strongly pertaining to the implementation of EDHOC rather than to the protocol in itself. Hence, they are not discussed in <xref target="RFC9528"/>, which rightly focuses on specifying the actual protocol.</t>
      <t>At the same time, implementors of an application using the EDHOC protocol or of an "EDHOC library" enabling its use cannot simply ignore such topics, and will have to take them into account throughout their implementation work.</t>
      <t>In order to prevent multiple, independent re-discoveries and assessments of those topics, as well as to facilitate and guide implementation activities, this document collects such topics and discusses them through considerations about the implementation of EDHOC. At a high-level, the topics in question are summarized below.</t>
      <ul spacing="normal">
        <li>
          <t>Handling of completed EDHOC sessions when they become invalid, and of application keys derived from an EDHOC session when those become invalid. This topic is discussed in <xref target="sec-session-handling"/>.</t>
        </li>
        <li>
          <t>Enforcing of different trust models, with respect to learning new authentication credentials during an execution of EDHOC. This topic is discussed in <xref target="sec-trust-models"/>.</t>
        </li>
        <li>
          <t>Branched-off, side processing of incoming EDHOC messages, with particular reference to: i) fetching and validation of authentication credentials; and ii) processing of External Authorization Data (EAD) items, which in turn might play a role in the fetching and validation of authentication credentials. This topic is discussed in <xref target="sec-message-side-processing"/>.</t>
        </li>
        <li>
          <t>Effectively using EDHOC over the Constrained Application Protocol (CoAP) <xref target="RFC7252"/> in combination with Block-wise transfers for CoAP <xref target="RFC7959"/>, possibly together with the optimized EDHOC execution workflow defined in <xref target="I-D.ietf-core-oscore-edhoc"/>. This topic is discussed in <xref target="sec-block-wise"/>.</t>
        </li>
      </ul>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>The reader is expected to be familiar with terms and concepts related to the EDHOC protocol <xref target="RFC9528"/>, the Constrained Application Protocol (CoAP) <xref target="RFC7252"/>, and Block-wise transfers for CoAP <xref target="RFC7959"/>.</t>
      </section>
    </section>
    <section anchor="sec-session-handling">
      <name>Handling of Invalid EDHOC Sessions and Application Keys</name>
      <t>This section considers the most common situation where, given a certain peer, only the application at that peer has visibility and control of both:</t>
      <ul spacing="normal">
        <li>
          <t>The EDHOC sessions at that peer; and</t>
        </li>
        <li>
          <t>The application keys for that application at that peer, including the knowledge of whether they have been derived from an EDHOC session, i.e., by means of the EDHOC_Exporter interface after the successful completion of an execution of EDHOC (see <xref section="4.2" sectionFormat="of" target="RFC9528"/>).</t>
        </li>
      </ul>
      <t>Building on the above, the following expands on three relevant cases concerning the handling of EDHOC sessions and application keys, in the event that any of those becomes invalid.</t>
      <t>As a case in point to provide more concrete guidance, the following also considers the specific case where "applications keys" stands for the keying material and parameters that compose an OSCORE Security Context <xref target="RFC8613"/> and that are derived from an EDHOC session (see <xref section="A.1" sectionFormat="of" target="RFC9528"/>).</t>
      <t>Nevertheless, the same considerations are applicable in case EDHOC is used to derive other application keys, e.g., to key different security protocols than OSCORE or to provide the application with secure values bound to an EDHOC session.</t>
      <section anchor="sec-session-invalid">
        <name>EDHOC Sessions Become Invalid</name>
        <t>The application at a peer P may have learned that a completed EDHOC session S has to be invalidated. When S is marked as invalid, the application at P purges S and deletes each set of application keys (e.g., the OSCORE Security Context) that was generated from S.</t>
        <t>Then, the application runs a new execution of the EDHOC protocol with the other peer. Upon successfully completing the EDHOC execution, the two peers derive and install a new set of application keys from this latest EDHOC session.</t>
        <t>The flowchart in <xref target="fig-flowchart-session-invalid"/> shows the handling of an EDHOC session that has become invalid.</t>
        <figure anchor="fig-flowchart-session-invalid">
          <name>Handling of an EDHOC Session that Has Become Invalid</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="80" width="552" viewBox="0 0 552 80" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 72,48 L 88,48" fill="none" stroke="black"/>
                <path d="M 312,48 L 328,48" fill="none" stroke="black"/>
                <path d="M 392,48 L 408,48" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="416,48 404,42.4 404,53.6" fill="black" transform="rotate(0,408,48)"/>
                <polygon class="arrowhead" points="336,48 324,42.4 324,53.6" fill="black" transform="rotate(0,328,48)"/>
                <polygon class="arrowhead" points="96,48 84,42.4 84,53.6" fill="black" transform="rotate(0,88,48)"/>
                <g class="text">
                  <text x="32" y="36">Invalid</text>
                  <text x="124" y="36">Delete</text>
                  <text x="168" y="36">the</text>
                  <text x="208" y="36">EDHOC</text>
                  <text x="264" y="36">session</text>
                  <text x="360" y="36">Rerun</text>
                  <text x="444" y="36">Derive</text>
                  <text x="488" y="36">and</text>
                  <text x="24" y="52">EDHOC</text>
                  <text x="112" y="52">and</text>
                  <text x="144" y="52">the</text>
                  <text x="208" y="52">application</text>
                  <text x="276" y="52">keys</text>
                  <text x="360" y="52">EDHOC</text>
                  <text x="448" y="52">install</text>
                  <text x="496" y="52">new</text>
                  <text x="32" y="68">session</text>
                  <text x="128" y="68">derived</text>
                  <text x="180" y="68">from</text>
                  <text x="212" y="68">it</text>
                  <text x="464" y="68">application</text>
                  <text x="532" y="68">keys</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Invalid     Delete the EDHOC session      Rerun     Derive and
EDHOC   --> and the application keys  --> EDHOC --> install new
session     derived from it                         application keys
]]></artwork>
          </artset>
        </figure>
        <t>An EDHOC session may have become invalid, for example, because an authentication credential CRED_X may have expired, or because the peer P may have learned from a trusted source that CRED_X has been revoked. This effectively invalidates CRED_X, and therefore also invalidates any EDHOC session where CRED_X was used as authentication credential of either peer in the session (i.e., P itself or the other peer). In such a case, the application at P has to additionally delete CRED_X and any stored, corresponding credential identifier.</t>
      </section>
      <section anchor="sec-keys-invalid">
        <name>Application Keys Become Invalid</name>
        <t>The application at a peer P may have learned that a set of application keys is not safe to use anymore. When such a set is specifically an OSCORE Security Context, the application may have learned that from the used OSCORE library or from an OSCORE layer that takes part to the communication stack.</t>
        <t>A current set SET of application keys shared with another peer can become unsafe to use, for example, due to the following reasons.</t>
        <ul spacing="normal">
          <li>
            <t>SET has reached a pre-determined expiration time; or</t>
          </li>
          <li>
            <t>SET has been established to use for a now elapsed amount of time, according to enforced application policies; or</t>
          </li>
          <li>
            <t>Some elements of SET have been used enough times to approach cryptographic limits that should not be passed, e.g., according to the properties of the specifically used security algorithms. With particular reference to an OSCORE Security Context, such limits are discussed in <xref target="I-D.ietf-core-oscore-key-limits"/>.</t>
          </li>
        </ul>
        <t>When this happens, the application at the peer P proceeds as follows.</t>
        <ol spacing="normal" type="1"><li>
            <t>If the following conditions both hold, then the application moves to step 2. Otherwise, it moves to step 3.  </t>
            <ul spacing="normal">
              <li>
                <t>Let us define S as the EDHOC session from which the peer P has derived SET or the eldest SET's ancestor set of application keys. Then, since the completion of S with the other peer, the application at P has received from the other peer at least one message protected with any set of application keys derived from S. That is, P has persisted S (see <xref section="5.4.2" sectionFormat="of" target="RFC9528"/>).</t>
              </li>
              <li>
                <t>The peer P supports a key update protocol, as an alternative to performing a new execution of EDHOC with the other peer. When SET is specifically an OSCORE Security Context, this means that the peer P supports the key update protocol KUDOS defined in <xref target="I-D.ietf-core-oscore-key-update"/>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>The application at P runs the key update protocol mentioned at step 1 with the other peer, in order to update SET. When SET is specifically an OSCORE Security Context, this means that the application at P runs KUDOS with the other peer.  </t>
            <t>
If the key update protocol terminates successfully, the updated application keys are installed and no further actions are taken. Otherwise, the application at P moves to step 3.</t>
          </li>
          <li>
            <t>The application at the peer P performs the following actions.  </t>
            <ul spacing="normal">
              <li>
                <t>It deletes SET.</t>
              </li>
              <li>
                <t>It deletes the EDHOC session from which SET was generated, or from which the eldest SET's ancestor set of application keys was generated before any key update occurred (e.g., by means of the EDHOC_KeyUpdate interface defined in <xref section="H" sectionFormat="of" target="RFC9528"/> or other key update methods).</t>
              </li>
              <li>
                <t>It runs a new execution of the EDHOC protocol with the other peer. Upon successfully completing the EDHOC execution, the two peers derive and install a new set of application keys from this latest EDHOC session.</t>
              </li>
            </ul>
          </li>
        </ol>
        <t>The flowchart in <xref target="fig-flowchart-keys-invalid"/> shows the handling of a set of application keys that has become invalid.</t>
        <figure anchor="fig-flowchart-keys-invalid">
          <name>Handling of a Set of Application Keys that Has Become Invalid</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="608" width="568" viewBox="0 0 568 608" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 24,64 L 24,96" fill="none" stroke="black"/>
                <path d="M 24,192 L 24,224" fill="none" stroke="black"/>
                <path d="M 24,304 L 24,336" fill="none" stroke="black"/>
                <path d="M 24,400 L 24,432" fill="none" stroke="black"/>
                <path d="M 24,512 L 24,544" fill="none" stroke="black"/>
                <path d="M 240,176 L 240,272" fill="none" stroke="black"/>
                <path d="M 312,176 L 312,480" fill="none" stroke="black"/>
                <path d="M 472,176 L 472,208" fill="none" stroke="black"/>
                <path d="M 144,128 L 176,128" fill="none" stroke="black"/>
                <path d="M 408,128 L 440,128" fill="none" stroke="black"/>
                <path d="M 96,272 L 240,272" fill="none" stroke="black"/>
                <path d="M 96,480 L 312,480" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="480,208 468,202.4 468,213.6" fill="black" transform="rotate(90,472,208)"/>
                <polygon class="arrowhead" points="448,128 436,122.4 436,133.6" fill="black" transform="rotate(0,440,128)"/>
                <polygon class="arrowhead" points="320,176 308,170.4 308,181.6" fill="black" transform="rotate(270,312,176)"/>
                <polygon class="arrowhead" points="248,176 236,170.4 236,181.6" fill="black" transform="rotate(270,240,176)"/>
                <polygon class="arrowhead" points="184,128 172,122.4 172,133.6" fill="black" transform="rotate(0,176,128)"/>
                <polygon class="arrowhead" points="32,544 20,538.4 20,549.6" fill="black" transform="rotate(90,24,544)"/>
                <polygon class="arrowhead" points="32,432 20,426.4 20,437.6" fill="black" transform="rotate(90,24,432)"/>
                <polygon class="arrowhead" points="32,336 20,330.4 20,341.6" fill="black" transform="rotate(90,24,336)"/>
                <polygon class="arrowhead" points="32,224 20,218.4 20,229.6" fill="black" transform="rotate(90,24,224)"/>
                <polygon class="arrowhead" points="32,96 20,90.4 20,101.6" fill="black" transform="rotate(90,24,96)"/>
                <g class="text">
                  <text x="32" y="36">Invalid</text>
                  <text x="112" y="36">application</text>
                  <text x="180" y="36">keys</text>
                  <text x="156" y="116">NO</text>
                  <text x="16" y="132">Are</text>
                  <text x="48" y="132">the</text>
                  <text x="212" y="132">Delete</text>
                  <text x="256" y="132">the</text>
                  <text x="320" y="132">application</text>
                  <text x="472" y="132">Rerun</text>
                  <text x="48" y="148">application</text>
                  <text x="116" y="148">keys</text>
                  <text x="204" y="148">keys</text>
                  <text x="240" y="148">and</text>
                  <text x="272" y="148">the</text>
                  <text x="312" y="148">EDHOC</text>
                  <text x="368" y="148">session</text>
                  <text x="472" y="148">EDHOC</text>
                  <text x="44" y="164">persisted?</text>
                  <text x="48" y="212">YES</text>
                  <text x="428" y="244">Derive</text>
                  <text x="472" y="244">and</text>
                  <text x="520" y="244">install</text>
                  <text x="12" y="260">Is</text>
                  <text x="48" y="260">KUDOS</text>
                  <text x="108" y="260">NO</text>
                  <text x="416" y="260">new</text>
                  <text x="480" y="260">application</text>
                  <text x="548" y="260">keys</text>
                  <text x="44" y="276">supported?</text>
                  <text x="48" y="324">YES</text>
                  <text x="16" y="372">Run</text>
                  <text x="56" y="372">KUDOS</text>
                  <text x="16" y="468">Has</text>
                  <text x="56" y="468">KUDOS</text>
                  <text x="108" y="468">NO</text>
                  <text x="44" y="484">succeeded?</text>
                  <text x="48" y="532">YES</text>
                  <text x="32" y="580">Install</text>
                  <text x="80" y="580">the</text>
                  <text x="128" y="580">updated</text>
                  <text x="48" y="596">application</text>
                  <text x="116" y="596">keys</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Invalid application keys

  |
  |
  v
                  NO
Are the          ----> Delete the application     ----> Rerun
application keys       keys and the EDHOC session       EDHOC
persisted?
                             ^        ^                   |
  |                          |        |                   |
  | YES                      |        |                   v
  v                          |        |
                             |        |           Derive and install
Is KUDOS    NO               |        |           new application keys
supported? ------------------+        |
                                      |
  |                                   |
  | YES                               |
  v                                   |
                                      |
Run KUDOS                             |
                                      |
  |                                   |
  |                                   |
  v                                   |
                                      |
Has KUDOS   NO                        |
succeeded? ---------------------------+

  |
  | YES
  v

Install the updated
application keys
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="sec-keys-token-invalid">
        <name>Application Keys or Bound Access Rights Become Invalid</name>
        <t>The following considers two peers that use the ACE framework for authentication and authorization in constrained environments <xref target="RFC9200"/>, and specifically the EDHOC and OSCORE profile of ACE defined in <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>.</t>
        <t>When doing so, one of the two peers acts as ACE resource server (RS) hosting protected resources. The other peer acts as ACE client and requests from an ACE authorization server (AS) an access token, which specifies access rights for accessing protected resources at the RS as well as the public authentication credential of the client, namely AUTH_CRED_C.</t>
        <t>After that, C uploads the access token to the RS as part of the ACE workflow. This can occur before running EDHOC with the RS, or by means of an EAD item conveyed within an EDHOC message during the EDHOC execution. Alternatively, the AS can upload the access token to the RS on behalf of the client, as per the alternative workflow defined in <xref target="I-D.ietf-ace-workflow-and-params"/>.</t>
        <t>Consistent with the used EDHOC and OSCORE profile of ACE, the two peers run EDHOC in order to specifically derive an OSCORE Security Context as their shared set of application keys (see <xref section="A.1" sectionFormat="of" target="RFC9528"/>). At the RS, the access token is bound to the successfully completed EDHOC session and the established OSCORE Security Context.</t>
        <t>After that, the peer acting as ACE client can access the protected resources hosted at the other peer, according to the access rights specified in the access token. The communications between the two peers are protected by means of the established OSCORE Security Context.</t>
        <t>Later on, the application at one of the two peers P may have learned that the established OSCORE Security Context CTX is not safe to use anymore, e.g., from the used OSCORE library or from an OSCORE layer that takes part to the communication stack. The reasons that make CTX not safe to use anymore are the same ones discussed in <xref target="sec-keys-invalid"/> when considering a set of application keys in general, plus the event where the access token bound to CTX becomes invalid (e.g., it has expired or it has been revoked).</t>
        <t>When this happens, the application at the peer P proceeds as follows.</t>
        <ol spacing="normal" type="1"><li>
            <t>If the following conditions both hold, then the application moves to step 2. Otherwise, it moves to step 3.  </t>
            <ul spacing="normal">
              <li>
                <t>The access token is still valid. That is, it has not expired yet and the peer P is not aware that it has been revoked.</t>
              </li>
              <li>
                <t>Let us define S as the EDHOC session from which the peer P has derived CTX or the eldest CTX's ancestor OSCORE Security Context. Then, since the completion of S with the other peer, the application at P has received from the other peer at least one message protected with any set of application keys derived from S. That is, P has persisted S (see <xref section="5.4.2" sectionFormat="of" target="RFC9528"/>).</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If the peer P supports the key update protocol KUDOS <xref target="I-D.ietf-core-oscore-key-update"/>, then P runs KUDOS with the other peer, in order to update CTX. If the execution of KUDOS terminates successfully, the updated OSCORE Security Context is installed and no further actions are taken.  </t>
            <t>
If the execution of KUDOS does not terminate successfully or if the peer P does not support KUDOS altogether, then the application at P moves to step 3.</t>
          </li>
          <li>
            <t>The application at the peer P performs the following actions.  </t>
            <ul spacing="normal">
              <li>
                <t>If the access token is not valid anymore, the peer P deletes all the EDHOC sessions associated with the access token, as well as the OSCORE Security Context derived from each of those sessions.      </t>
                <t>
Note that, when specifically considering the EDHOC and OSCORE profile of ACE, an access token is associated with at most one EDHOC session (see <xref section="4.4" sectionFormat="of" target="I-D.ietf-ace-edhoc-oscore-profile"/>).      </t>
                <t>
If the peer P acted as ACE client, then P obtains from the ACE AS a new access token, which is uploaded to the other peer acting as ACE RS.      </t>
                <t>
Finally, the application at P moves to step 4.</t>
              </li>
              <li>
                <t>If the access token is valid while the OSCORE Security Context CTX is not, then the peer P deletes CTX.      </t>
                <t>
After that, the peer P deletes the EDHOC session from which CTX was generated, or from which the eldest CTX's ancestor OSCORE Security Context was generated before any key update occurred (e.g., by means of KUDOS or other key update methods).      </t>
                <t>
Finally, the application at P moves to step 4.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>The peer P runs a new execution of the EDHOC protocol with the other peer. Upon successfully completing the EDHOC execution, the two peers derive and install a new OSCORE Security Context from this latest EDHOC session.  </t>
            <t>
At the RS, the access token is bound to this latest EDHOC session and the newly established OSCORE Security Context.</t>
          </li>
        </ol>
        <t>The flowchart in <xref target="fig-flowchart-keys-token-invalid"/> shows the handling of an access token or of a set of application keys that have become invalid.</t>
        <figure anchor="fig-flowchart-keys-token-invalid">
          <name>Handling of an Access Token or of a Set of Application Keys that Have Become Invalid</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="896" width="576" viewBox="0 0 576 896" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 24,96 L 24,128" fill="none" stroke="black"/>
                <path d="M 24,224 L 24,272" fill="none" stroke="black"/>
                <path d="M 24,352 L 24,384" fill="none" stroke="black"/>
                <path d="M 24,480 L 24,512" fill="none" stroke="black"/>
                <path d="M 24,592 L 24,624" fill="none" stroke="black"/>
                <path d="M 24,688 L 24,720" fill="none" stroke="black"/>
                <path d="M 24,800 L 24,832" fill="none" stroke="black"/>
                <path d="M 264,480 L 264,560" fill="none" stroke="black"/>
                <path d="M 336,480 L 336,768" fill="none" stroke="black"/>
                <path d="M 504,208 L 504,432" fill="none" stroke="black"/>
                <path d="M 560,160 L 560,560" fill="none" stroke="black"/>
                <path d="M 112,160 L 144,160" fill="none" stroke="black"/>
                <path d="M 336,160 L 352,160" fill="none" stroke="black"/>
                <path d="M 456,160 L 472,160" fill="none" stroke="black"/>
                <path d="M 536,160 L 560,160" fill="none" stroke="black"/>
                <path d="M 144,432 L 184,432" fill="none" stroke="black"/>
                <path d="M 456,432 L 504,432" fill="none" stroke="black"/>
                <path d="M 96,560 L 264,560" fill="none" stroke="black"/>
                <path d="M 96,768 L 336,768" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="568,560 556,554.4 556,565.6" fill="black" transform="rotate(90,560,560)"/>
                <polygon class="arrowhead" points="512,208 500,202.4 500,213.6" fill="black" transform="rotate(270,504,208)"/>
                <polygon class="arrowhead" points="480,160 468,154.4 468,165.6" fill="black" transform="rotate(0,472,160)"/>
                <polygon class="arrowhead" points="360,160 348,154.4 348,165.6" fill="black" transform="rotate(0,352,160)"/>
                <polygon class="arrowhead" points="344,480 332,474.4 332,485.6" fill="black" transform="rotate(270,336,480)"/>
                <polygon class="arrowhead" points="272,480 260,474.4 260,485.6" fill="black" transform="rotate(270,264,480)"/>
                <polygon class="arrowhead" points="192,432 180,426.4 180,437.6" fill="black" transform="rotate(0,184,432)"/>
                <polygon class="arrowhead" points="152,160 140,154.4 140,165.6" fill="black" transform="rotate(0,144,160)"/>
                <polygon class="arrowhead" points="32,832 20,826.4 20,837.6" fill="black" transform="rotate(90,24,832)"/>
                <polygon class="arrowhead" points="32,720 20,714.4 20,725.6" fill="black" transform="rotate(90,24,720)"/>
                <polygon class="arrowhead" points="32,624 20,618.4 20,629.6" fill="black" transform="rotate(90,24,624)"/>
                <polygon class="arrowhead" points="32,512 20,506.4 20,517.6" fill="black" transform="rotate(90,24,512)"/>
                <polygon class="arrowhead" points="32,384 20,378.4 20,389.6" fill="black" transform="rotate(90,24,384)"/>
                <polygon class="arrowhead" points="32,272 20,266.4 20,277.6" fill="black" transform="rotate(90,24,272)"/>
                <polygon class="arrowhead" points="32,128 20,122.4 20,133.6" fill="black" transform="rotate(90,24,128)"/>
                <g class="text">
                  <text x="32" y="36">Invalid</text>
                  <text x="92" y="36">access</text>
                  <text x="144" y="36">token</text>
                  <text x="44" y="52">specifying</text>
                  <text x="140" y="52">AUTH_CRED_C,</text>
                  <text x="12" y="68">or</text>
                  <text x="56" y="68">invalid</text>
                  <text x="136" y="68">application</text>
                  <text x="204" y="68">keys</text>
                  <text x="124" y="148">NO</text>
                  <text x="12" y="164">Is</text>
                  <text x="40" y="164">the</text>
                  <text x="180" y="164">Delete</text>
                  <text x="224" y="164">the</text>
                  <text x="284" y="164">associated</text>
                  <text x="388" y="164">Obtain</text>
                  <text x="432" y="164">and</text>
                  <text x="504" y="164">Rerun</text>
                  <text x="28" y="180">access</text>
                  <text x="80" y="180">token</text>
                  <text x="176" y="180">EDHOC</text>
                  <text x="236" y="180">sessions</text>
                  <text x="288" y="180">and</text>
                  <text x="388" y="180">upload</text>
                  <text x="424" y="180">a</text>
                  <text x="504" y="180">EDHOC</text>
                  <text x="24" y="196">still</text>
                  <text x="76" y="196">valid?</text>
                  <text x="168" y="196">the</text>
                  <text x="232" y="196">application</text>
                  <text x="300" y="196">keys</text>
                  <text x="376" y="196">new</text>
                  <text x="420" y="196">access</text>
                  <text x="184" y="212">derived</text>
                  <text x="236" y="212">from</text>
                  <text x="280" y="212">those</text>
                  <text x="384" y="212">token</text>
                  <text x="48" y="260">YES</text>
                  <text x="16" y="308">The</text>
                  <text x="80" y="308">application</text>
                  <text x="148" y="308">keys</text>
                  <text x="16" y="324">are</text>
                  <text x="48" y="324">not</text>
                  <text x="88" y="324">valid</text>
                  <text x="144" y="324">anymore</text>
                  <text x="16" y="420">Are</text>
                  <text x="48" y="420">the</text>
                  <text x="156" y="420">NO</text>
                  <text x="48" y="436">application</text>
                  <text x="116" y="436">keys</text>
                  <text x="220" y="436">Delete</text>
                  <text x="264" y="436">the</text>
                  <text x="328" y="436">application</text>
                  <text x="396" y="436">keys</text>
                  <text x="432" y="436">and</text>
                  <text x="44" y="452">persisted?</text>
                  <text x="208" y="452">the</text>
                  <text x="268" y="452">associated</text>
                  <text x="336" y="452">EDHOC</text>
                  <text x="392" y="452">session</text>
                  <text x="48" y="500">YES</text>
                  <text x="12" y="548">Is</text>
                  <text x="48" y="548">KUDOS</text>
                  <text x="124" y="548">NO</text>
                  <text x="44" y="564">supported?</text>
                  <text x="452" y="596">Derive</text>
                  <text x="496" y="596">and</text>
                  <text x="544" y="596">install</text>
                  <text x="48" y="612">YES</text>
                  <text x="424" y="612">new</text>
                  <text x="488" y="612">application</text>
                  <text x="556" y="612">keys</text>
                  <text x="16" y="660">Run</text>
                  <text x="56" y="660">KUDOS</text>
                  <text x="16" y="756">Has</text>
                  <text x="56" y="756">KUDOS</text>
                  <text x="124" y="756">NO</text>
                  <text x="44" y="772">succeeded?</text>
                  <text x="48" y="820">YES</text>
                  <text x="32" y="868">Install</text>
                  <text x="80" y="868">the</text>
                  <text x="128" y="868">updated</text>
                  <text x="48" y="884">application</text>
                  <text x="116" y="884">keys</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Invalid access token
specifying AUTH_CRED_C,
or invalid application keys

  |
  |
  v
              NO
Is the       ----> Delete the associated --> Obtain and --> Rerun ---+
access token       EDHOC sessions and        upload a       EDHOC    |
still valid?       the application keys      new access              |
                   derived from those        token            ^      |
  |                                                           |      |
  |                                                           |      |
  | YES                                                       |      |
  v                                                           |      |
                                                              |      |
The application keys                                          |      |
are not valid anymore                                         |      |
                                                              |      |
  |                                                           |      |
  |                                                           |      |
  v                                                           |      |
                                                              |      |
Are the           NO                                          |      |
application keys -----> Delete the application keys and ------+      |
persisted?              the associated EDHOC session                 |
                                                                     |
  |                             ^        ^                           |
  | YES                         |        |                           |
  v                             |        |                           |
                                |        |                           |
Is KUDOS      NO                |        |                           |
supported? ---------------------+        |                           v
                                         |
  |                                      |           Derive and install
  | YES                                  |         new application keys
  v                                      |
                                         |
Run KUDOS                                |
                                         |
  |                                      |
  |                                      |
  v                                      |
                                         |
Has KUDOS     NO                         |
succeeded? ------------------------------+

  |
  | YES
  v

Install the updated
application keys
]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="sec-trust-models">
      <name>Trust Models for Learning New Authentication Credentials</name>
      <t>A peer P relies on authentication credentials of other peers, in order to authenticate those peers when running EDHOC with them.</t>
      <t>There are different ways for P to acquire an authentication credential CRED of another peer. For example, CRED can be supplied to P out-of-band by a trusted provider.</t>
      <t>Alternatively, CRED can be specified by the other peer during the EDHOC execution with P. This can rely on EDHOC message_2 or message_3, whose respective ID_CRED_R and ID_CRED_I can specify CRED by value, or instead a URI or other external reference where CRED can be retrieved from (see <xref section="3.5.3" sectionFormat="of" target="RFC9528"/>).</t>
      <t>Also during the EDHOC execution, an External Authorization Data (EAD) field might include an EAD item that specifies CRED by value or reference. This is the case, e.g., for the EAD items defined by the EDHOC and OSCORE profile of the ACE framework <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>. In particular, they can be used for transporting (a reference to) an access token, which in turn specifies by value or by reference the public authentication credential of the EDHOC peer acting as ACE client.</t>
      <t>When obtaining a new credential CRED, the peer P has to validate it before storing it. The validation steps to perform depend on the specific type of CRED (e.g., a public key certificate <xref target="RFC5280"/><xref target="I-D.ietf-cose-cbor-encoded-cert"/>), and can rely on (the authentication credential of) a trusted third party acting as a trust anchor.</t>
      <t>Upon retrieving a new CRED through the processing of a received EDHOC message and following the successful validation of CRED, the peer P stores CRED only if it assesses CRED to be also trusted, and must not store CRED otherwise.</t>
      <t>An exception applies for the two unauthenticated operations described in <xref section="D.5" sectionFormat="of" target="RFC9528"/>, where a trust relationship with an unknown or not-yet-trusted endpoint is established later. That is, CRED is verified out-of-band at a later stage, or an EDHOC session key is bound to an identity out-of-band at a later stage.</t>
      <t>If P stores CRED, then P will consider CRED as valid and trusted until it possibly becomes invalid, e.g., because it expires or because P gains knowledge that it has been revoked.</t>
      <t>When storing CRED, the peer P should generate the authentication credential identifier(s) corresponding to CRED and store them as associated with CRED. For example, if CRED is a public key certificate, an identifier of CRED can be the hash of the certificate. In general, P should generate and associate with CRED one corresponding identifier for each type of authentication credential identifier that P supports and that is compatible with CRED.</t>
      <t>In future executions of EDHOC with the other peer associated with CRED, this allows such other peer to specify CRED by reference, e.g., by indicating its credential identifier as ID_CRED_R/ID_CRED_I in the EDHOC message_2 or message_3 addressed to the peer P. In turn, this allows P to retrieve CRED from its local storage.</t>
      <t>When processing a received EDHOC message M that specifies an authentication credential CRED, the peer P can enforce one of the following trust policies in order to determine whether to trust CRED.</t>
      <ul spacing="normal">
        <li>
          <t>NO-LEARNING: according to this policy, the peer P trusts CRED only if P is already storing CRED at message reception time, unless in cases where situation-specific exceptions apply and are deliberately enforced (see below).  </t>
          <t>
That is, upon receiving M, the peer P should continue the execution of EDHOC only if both the following conditions hold.  </t>
          <ul spacing="normal">
            <li>
              <t>P currently stores CRED, as specified by reference or by value in ID_CRED_I/ID_CRED_R or in the value of an EAD item; and</t>
            </li>
            <li>
              <t>CRED is still valid, i.e., P believes CRED to not be expired or revoked.</t>
            </li>
          </ul>
          <t>
Exceptions may apply and be actually enforced in cases where, during an EDHOC execution, P obtains additional information that allows it to trust and validate CRED, even though CRED is not already stored upon receiving M. Such exceptions typically rely on a trusted party that vouches for CRED, such as in the following cases:  </t>
          <ul spacing="normal">
            <li>
              <t>In the procedure defined in <xref target="I-D.ietf-lake-authz"/>, the EDHOC Initiator U receives an EDHOC message_2 where ID_CRED_R specifies the authentication credential of the EDHOC Responder V by value. In the same EDHOC message_2, an EAD item specifies a voucher issued by a trusted enrollment server W, which conveys authorization information about V and V's authentication credential CRED. Through a successful verification of the voucher, U is able to trust CRED (if found valid), even though it did not already store CRED upon receiving EDHOC message_2.</t>
            </li>
            <li>
              <t>In the EDHOC and OSCORE profile of the ACE framework defined in <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>, the EDHOC peer acting as ACE client C can include an EAD item in an EDHOC message sent to the other EDHOC peer acting as ACE resource server (RS). The EAD item transports (a reference to) an access token issued by a trusted ACE authorization server (AS). In turn, the access token specifies CRED as the authentication credential of C, by value or by reference. Through a successful verification of the access token, the RS is able to trust CRED (if found valid), even if not already storing it upon receiving the EDHOC message with the EAD item.</t>
            </li>
          </ul>
          <t>
If the peer P admits such an exception and actually enforces it on an authentication credential CRED, then P effectively handles CRED according to the trust policy "LEARNING" specified below.</t>
        </li>
        <li>
          <t>LEARNING: according to this policy, the peer P trusts CRED even if P is not already storing CRED at message reception time.  </t>
          <t>
That is, upon receiving M, the peer P performs the following steps.  </t>
          <ol spacing="normal" type="1"><li>
              <t>P retrieves CRED, as specified by reference or by value in ID_CRED_I/ID_CRED_R or in the value of an EAD item.</t>
            </li>
            <li>
              <t>P checks whether CRED is already being stored and if it is still valid. In such a case, P trusts CRED and can continue the EDHOC execution. Otherwise, P moves to step 3.</t>
            </li>
            <li>
              <t>P attempts to validate CRED. If the validation process is not successful, P aborts the EDHOC session with the other peer. Otherwise, P trusts and stores CRED, and can continue the EDHOC execution.</t>
            </li>
          </ol>
        </li>
      </ul>
      <t>Irrespective of the adopted trust policy, P actually uses CRED only if it is determined to be fine to use in the context of the ongoing EDHOC session, also depending on the specific identity of the other peer (see Sections <xref target="RFC9528" section="3.5" sectionFormat="bare"/> and <xref target="RFC9528" section="D.2" sectionFormat="bare"/> of <xref target="RFC9528"/>). If this is not the case, P aborts the EDHOC session with the other peer.</t>
      <section anchor="sec-trust-models-ace-prof">
        <name>Enforcement in the EDHOC and OSCORE Profile of ACE</name>
        <t>As discussed in <xref target="sec-keys-token-invalid"/>, two EDHOC peers can be using the ACE framework <xref target="RFC9200"/> and specifically the EDHOC and OSCORE profile of ACE defined in <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>.</t>
        <t>In this case, one of the two EDHOC peers, namely PEER_RS, acts as ACE resource server (RS). Instead, the other EDHOC peer, namely PEER_C, acts as ACE client, and obtains from the ACE authorization server (AS) an access token for accessing protected resources at PEER_RS.</t>
        <t>Together with other information, the access token specifies (by value or by reference) the public authentication credential AUTH_CRED_C that PEER_C is going to use when running EDHOC with PEER_RS. Note that AUTH_CRED_C will be used as either CRED_I or CRED_R, depending on whether the two peers use the EDHOC forward message flow (i.e., PEER_C is the EDHOC Initiator) or the EDHOC reverse message flow (i.e., PEER_C is the EDHOC Responder), respectively (see <xref section="A.2" sectionFormat="of" target="RFC9528"/>).</t>
        <t>When the AS issues the first access token that specifies AUTH_CRED_C and is intended to be uploaded to PEER_RS, it is expected that the access token specifies AUTH_CRED_C by value, and that PEER_RS is not currently storing AUTH_CRED_C, but instead will obtain it upon receiving the access token.</t>
        <t>While such an access token can be uploaded to PEER_RS before running EDHOC, it is also possible for PEER_C to upload it through a dedicated EAD item, while running EDHOC with PEER_RS. In such a case, PEER_RS has to learn AUTH_CRED_C as a new public authentication credential during an EDHOC session.</t>
        <t>At least for its EDHOC resource used for exchanging the EDHOC messages of the EDHOC session in question, this requires PEER_RS to:</t>
        <ul spacing="normal">
          <li>
            <t>Enforce the trust policy "LEARNING"; or</t>
          </li>
          <li>
            <t>If enforcing the trust policy "NO-LEARNING", additionally enforce an overriding exception when an incoming EDHOC message includes an EAD item conveying (a reference to) an access token, as discussed earlier in this section.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="sec-message-side-processing">
      <name>Side Processing of Incoming EDHOC Messages</name>
      <t>This section describes an approach that EDHOC peers can use upon receiving EDHOC messages, in order to fetch/validate authentication credentials and to process External Authorization Data (EAD) items.</t>
      <t>As per <xref section="9.1" sectionFormat="of" target="RFC9528"/>, the EDHOC protocol provides a transport mechanism for conveying EAD items, but specifications defining those items have to set the ground for "agreeing on the surrounding context and the meaning of the information passed to and from the application".</t>
      <t>The approach described in this section aims to help implementors navigate the surrounding context mentioned above, irrespective of the specific EAD items conveyed in the EDHOC messages. In particular, the described approach takes into account the following points.</t>
      <ul spacing="normal">
        <li>
          <t>The fetching and validation of the other peer's authentication credential relies on ID_CRED_I in EDHOC message_2, or on ID_CRED_R in EDHOC message_3, or on the value of an EAD item. When this occurs upon receiving EDHOC message_2 or message_3, the decryption of the EDHOC message has to be completed first.  </t>
          <t>
The validation of the other peer's authentication credential might depend on using the value of an EAD item, which in turn has to be validated first. For instance, an EAD item within the EAD_2 field may contain a voucher to be used for validating the other peer's authentication credential (see <xref target="I-D.ietf-lake-authz"/>).</t>
        </li>
        <li>
          <t>Some EAD items may be processed only after having successfully verified the EDHOC message, i.e., after a successful verification of the Signature_or_MAC field.  </t>
          <t>
For instance, an EAD item within the EAD_3 field may contain a Certificate Signing Request (CSR) <xref target="RFC2986"/>. Hence, such an EAD item can be processed only once the recipient peer has attained proof of the other peer possessing its private key.</t>
        </li>
      </ul>
      <t>In order to conveniently handle such processing, the application can prepare in advance one "side-processor object" (SPO), which takes care of the operations above during the EDHOC execution.</t>
      <t>In particular, the application provides EDHOC with the SPO before starting an EDHOC execution, during which EDHOC will temporarily transfer control to the SPO at the right point in time, in order to perform the required side-processing of an incoming EDHOC message.</t>
      <t>Furthermore, the application has to instruct the SPO about how to prepare any EAD item such that: it has to be included in an outgoing EDHOC message; and it is independent of the processing of other EAD items included in incoming EDHOC messages. This includes, for instance, the preparation of padding EAD items.</t>
      <t>At the right point in time during the processing of an incoming EDHOC message M at the peer P, EDHOC invokes the SPO and provides it with the following input:</t>
      <ul spacing="normal">
        <li>
          <t>When M is EDHOC message_2 or message_3, an indication of whether this invocation is happening before or after the message verification (i.e., before or after having verified the Signature_or_MAC field).</t>
        </li>
        <li>
          <t>The full set of information related to the current EDHOC session. This especially includes the selected cipher suite and the ephemeral Diffie-Hellman public keys G_X and G_Y that the two peers have exchanged in the EDHOC session.</t>
        </li>
        <li>
          <t>The other peers' authentication credentials that the peer P stores.</t>
        </li>
        <li>
          <t>All the decrypted information elements retrieved from M.</t>
        </li>
        <li>
          <t>The EAD items included in M.  </t>
          <ul spacing="normal">
            <li>
              <t>Note that EDHOC might do some preliminary work on M before invoking the SPO, in order to provide the SPO only with actually relevant EAD items. This requires the application to additionally provide EDHOC with the ead_labels of the EAD items that the peer P recognizes (see <xref section="3.8" sectionFormat="of" target="RFC9528"/>).      </t>
              <t>
With such information available, EDHOC can early abort the current session in case M includes any EAD item which is both critical and not recognized by the peer P.      </t>
              <t>
If no such EAD items are found, EDHOC can remove any padding EAD item (see <xref section="3.8.1" sectionFormat="of" target="RFC9528"/>), as well as any EAD item which is neither critical nor recognized (since the SPO is going to ignore it anyway). As a result, EDHOC is able to provide the SPO only with EAD items that will be recognized and that require actual processing.</t>
            </li>
            <li>
              <t>Note that, after having processed the EAD items, the SPO might actually need to store them throughout the whole EDHOC execution, e.g., in order to refer to them also when processing later EDHOC messages in the current EDHOC session.</t>
            </li>
          </ul>
        </li>
      </ul>
      <t>The SPO performs the following tasks on an incoming EDHOC message M.</t>
      <ul spacing="normal">
        <li>
          <t>The SPO fetches and/or validates the other peer's authentication credential CRED, based on a dedicated EAD item of M or on the ID_CRED field of M (for EDHOC message_2 or message_3).</t>
        </li>
        <li>
          <t>The SPO processes the EAD items conveyed in the EAD field of M.</t>
        </li>
        <li>
          <t>The SPO stores the results of the performed operations, and makes such results available to the application.</t>
        </li>
        <li>
          <t>When the SPO has completed its side processing and transfers control back to EDHOC, the SPO provides EDHOC with the produced EAD items to include in the EAD field of the next outgoing EDHOC message. The production of such EAD items can be triggered, e.g., by:  </t>
          <ul spacing="normal">
            <li>
              <t>The consumption of EAD items included in M; and</t>
            </li>
            <li>
              <t>The execution of instructions that the SPO has received from the application, concerning EAD items to produce irrespective of other EAD items included in M.</t>
            </li>
          </ul>
        </li>
      </ul>
      <t>In the following, <xref target="sec-message-side-processing-m1"/> to <xref target="sec-message-side-processing-m2-m3"/> describe more in detail the actions performed by the SPO on the different, incoming EDHOC messages.</t>
      <t>Then, <xref target="sec-message-side-processing-special"/> describes further, special handling of incoming EDHOC messages in particular situations.</t>
      <section anchor="sec-message-side-processing-m1">
        <name>EDHOC message_1</name>
        <t>During the processing of an incoming EDHOC message_1, EDHOC invokes the SPO only once, after the Responder peer has successfully decoded the message and accepted the selected cipher suite.</t>
        <t>If the EAD_1 field is present, the SPO processes the EAD items included therein.</t>
        <t>Once all such EAD items have been processed the SPO transfers control back to EDHOC. When doing so, the SPO also provides EDHOC with any produced EAD items to include in the EAD field of the next outgoing EDHOC message.</t>
        <t>Then, EDHOC resumes its execution and advances its protocol state.</t>
      </section>
      <section anchor="sec-message-side-processing-m4">
        <name>EDHOC message_4</name>
        <t>During the processing of an incoming EDHOC message_4, EDHOC invokes the SPO only once, after the Initiator peer has successfully decrypted the message.</t>
        <t>If the EAD_4 field is present, the SPO processes the EAD items included therein.</t>
        <t>Once all such EAD items have been processed, the SPO transfers control back to EDHOC, which resumes its execution and advances its protocol state.</t>
      </section>
      <section anchor="sec-message-side-processing-m2-m3">
        <name>EDHOC message_2 and message_3</name>
        <t>The following refers to "message_X" as an incoming EDHOC message_2 or message_3, and to "message verification" as the verification of Signature_or_MAC_X in message_X.</t>
        <t>During the processing of a message_X, EDHOC invokes the SPO two times:</t>
        <ul spacing="normal">
          <li>
            <t>Right after message_X has been decrypted and before its verification starts. Following this invocation, the SPO performs the actions described in <xref target="sec-pre-verif"/>.</t>
          </li>
          <li>
            <t>Right after message_X has been successfully verified. Following this invocation, the SPO performs the actions described in <xref target="sec-post-verif"/>.</t>
          </li>
        </ul>
        <t>The flowcharts in <xref target="sec-m2-m3-flowcharts"/> show the high-level interaction between the core EDHOC processing and the SPO, as well as the different steps taken for processing an incoming message_X.</t>
        <section anchor="sec-pre-verif">
          <name>Pre-Verification Side Processing</name>
          <t>The pre-verification side processing occurs in two sequential phases, namely PHASE_1 and PHASE_2.</t>
          <t>PHASE_1 - During PHASE_1, the SPO at the recipient peer P determines CRED, i.e., the other peer's authentication credential to use in the ongoing EDHOC session. In particular, the SPO performs the following steps.</t>
          <ol spacing="normal" type="1"><li>
              <t>The SPO determines CRED based on ID_CRED_X or on an EAD item in message_X.  </t>
              <t>
Those may specify CRED by value or by reference, including a URI or other external reference where CRED can be retrieved from.  </t>
              <t>
If CRED is already installed, the SPO moves to step 2. Otherwise, the SPO moves to step 3.</t>
            </li>
            <li>
              <t>The SPO determines if the stored CRED is currently valid, e.g., by asserting that CRED has not expired and has not been revoked.  </t>
              <t>
Performing such a validation may require the SPO to first process an EAD item included in message_X. For example, it can be an EAD item in EDHOC message_2, which confirms or revokes the validity of CRED_R specified by ID_CRED_R, as the result of an OCSP process <xref target="RFC6960"/>.  </t>
              <t>
In case CRED is determined to be valid, the SPO moves to step 9. Otherwise, the SPO moves to step 11.</t>
            </li>
            <li>
              <t>The SPO attempts to retrieve CRED, and then moves to step 4.</t>
            </li>
            <li>
              <t>If the retrieval of CRED has succeeded, the SPO moves to step 5. Otherwise, the SPO moves to step 11.</t>
            </li>
            <li>
              <t>If the enforced trust policy for new authentication credentials is "NO-LEARNING" and P does not admit any exceptions that are acceptable to enforce for message_X (see <xref target="sec-trust-models"/>), the SPO moves to step 11. Otherwise, the SPO moves to step 6.</t>
            </li>
            <li>
              <t>If this step has been reached, the peer P is not already storing the retrieved CRED and, at the same time, it enforces either the trust policy "LEARNING" or the trust policy "NO-LEARNING" while also enforcing an exception acceptable for message_X (see <xref target="sec-trust-models"/>).  </t>
              <t>
Consistently, the SPO determines if CRED is currently valid, e.g., by asserting that CRED has not expired and has not been revoked. Then, the SPO moves to step 7.  </t>
              <t>
Validating CRED may require the SPO to first process an EAD item included in message_X. For example, it can be an EAD item in EDHOC message_2 that: i) specifies a voucher for validating CRED_R as a CWT Claims Set (CCS) <xref target="RFC8392"/> transported by value in ID_CRED_R (see <xref target="I-D.ietf-lake-authz"/>); or instead ii) an OCSP response <xref target="RFC6960"/> for validating CRED_R as a certificate transported by value or reference in ID_CRED_R.</t>
            </li>
            <li>
              <t>If CRED has been determined valid, the SPO moves to step 8. Otherwise, the SPO moves to step 11.</t>
            </li>
            <li>
              <t>The SPO stores CRED as a valid and trusted authentication credential associated with the other peer, together with corresponding authentication credential identifiers (see <xref target="sec-trust-models"/>). Then, the SPO moves to step 9.</t>
            </li>
            <li>
              <t>The SPO checks if CRED is fine to use in the context of the ongoing EDHOC session, also depending on the specific identity of the other peer (see Sections <xref target="RFC9528" section="3.5" sectionFormat="bare"/> and <xref target="RFC9528" section="D.2" sectionFormat="bare"/> of <xref target="RFC9528"/>).  </t>
              <t>
If this is the case, the SPO moves to step 10. Otherwise, the SPO moves to step 11.</t>
            </li>
            <li>
              <t>P uses CRED as authentication credential of the other peer in the ongoing EDHOC session.  </t>
              <t>
Then, PHASE_1 ends, and the pre-verification side processing moves to the next PHASE_2 (see below).</t>
            </li>
            <li>
              <t>The SPO has not found a valid authentication credential associated with the other peer that can be used in the ongoing EDHOC session. Therefore, the EDHOC session with the other peer is aborted.</t>
            </li>
          </ol>
          <t>PHASE_2 - During PHASE_2, the SPO processes any EAD item included in message_X such that both the following conditions hold.</t>
          <ul spacing="normal">
            <li>
              <t>The EAD item has <em>not</em> been already processed during PHASE_1.</t>
            </li>
            <li>
              <t>The EAD item can be processed before performing the verification of message_X.</t>
            </li>
          </ul>
          <t>Once all such EAD items have been processed, the SPO transfers control back to EDHOC, which either aborts the ongoing EDHOC session or continues the processing of message_X with its corresponding message verification.</t>
        </section>
        <section anchor="sec-post-verif">
          <name>Post-Verification Side Processing</name>
          <t>During the post-verification side processing, the SPO processes any EAD item included in message_X such that the processing of that EAD item had to wait for completing the successful message verification.</t>
          <t>The late processing of such EAD items is typically due to the fact that a pre-requirement has to be fulfilled first. For example, the recipient peer P has to have first asserted that the other peer does possess the private key corresponding to the public key of the other peer's authentication credential CRED determined during the pre-verification side processing (see <xref target="sec-pre-verif"/>). This requirement is fulfilled after a successful message verification of message_X.</t>
          <t>Once all such EAD items have been processed, the SPO transfers control back to EDHOC. When doing so, the SPO also provides EDHOC with any produced EAD items to include in the EAD field of the next outgoing EDHOC message.</t>
          <t>Then, EDHOC resumes its execution and advances its protocol state.</t>
        </section>
        <section anchor="sec-m2-m3-flowcharts">
          <name>Flowcharts</name>
          <t>The flowchart in <xref target="fig-flowchart-spo-high-level"/> shows the high-level interaction between the core EDHOC processing and the SPO, with particular reference to an incoming EDHOC message_2 or message_3.</t>
          <figure anchor="fig-flowchart-spo-high-level">
            <name>High-Level Interaction Between the Core EDHOC Processing and the Side-Processor Object (SPO), for EDHOC message_2 and message_3</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="832" width="576" viewBox="0 0 576 832" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,128 L 8,384" fill="none" stroke="black"/>
                  <path d="M 8,512 L 8,816" fill="none" stroke="black"/>
                  <path d="M 24,176 L 24,224" fill="none" stroke="black"/>
                  <path d="M 24,560 L 24,768" fill="none" stroke="black"/>
                  <path d="M 56,96 L 56,168" fill="none" stroke="black"/>
                  <path d="M 64,288 L 64,336" fill="none" stroke="black"/>
                  <path d="M 120,176 L 120,224" fill="none" stroke="black"/>
                  <path d="M 144,344 L 144,552" fill="none" stroke="black"/>
                  <path d="M 160,176 L 160,224" fill="none" stroke="black"/>
                  <path d="M 176,232 L 176,280" fill="none" stroke="black"/>
                  <path d="M 184,288 L 184,336" fill="none" stroke="black"/>
                  <path d="M 224,288 L 224,336" fill="none" stroke="black"/>
                  <path d="M 240,344 L 240,552" fill="none" stroke="black"/>
                  <path d="M 248,560 L 248,768" fill="none" stroke="black"/>
                  <path d="M 296,176 L 296,224" fill="none" stroke="black"/>
                  <path d="M 296,560 L 296,608" fill="none" stroke="black"/>
                  <path d="M 336,344 L 336,552" fill="none" stroke="black"/>
                  <path d="M 392,288 L 392,336" fill="none" stroke="black"/>
                  <path d="M 400,176 L 400,224" fill="none" stroke="black"/>
                  <path d="M 416,232 L 416,552" fill="none" stroke="black"/>
                  <path d="M 488,608 L 488,640" fill="none" stroke="black"/>
                  <path d="M 536,176 L 536,224" fill="none" stroke="black"/>
                  <path d="M 536,560 L 536,608" fill="none" stroke="black"/>
                  <path d="M 568,128 L 568,384" fill="none" stroke="black"/>
                  <path d="M 568,512 L 568,816" fill="none" stroke="black"/>
                  <path d="M 8,128 L 48,128" fill="none" stroke="black"/>
                  <path d="M 64,128 L 568,128" fill="none" stroke="black"/>
                  <path d="M 24,176 L 120,176" fill="none" stroke="black"/>
                  <path d="M 160,176 L 296,176" fill="none" stroke="black"/>
                  <path d="M 400,176 L 536,176" fill="none" stroke="black"/>
                  <path d="M 128,192 L 152,192" fill="none" stroke="black"/>
                  <path d="M 24,224 L 120,224" fill="none" stroke="black"/>
                  <path d="M 160,224 L 296,224" fill="none" stroke="black"/>
                  <path d="M 400,224 L 536,224" fill="none" stroke="black"/>
                  <path d="M 64,288 L 184,288" fill="none" stroke="black"/>
                  <path d="M 224,288 L 392,288" fill="none" stroke="black"/>
                  <path d="M 64,336 L 184,336" fill="none" stroke="black"/>
                  <path d="M 224,336 L 392,336" fill="none" stroke="black"/>
                  <path d="M 8,384 L 136,384" fill="none" stroke="black"/>
                  <path d="M 152,384 L 232,384" fill="none" stroke="black"/>
                  <path d="M 248,384 L 328,384" fill="none" stroke="black"/>
                  <path d="M 344,384 L 408,384" fill="none" stroke="black"/>
                  <path d="M 424,384 L 568,384" fill="none" stroke="black"/>
                  <path d="M 8,512 L 136,512" fill="none" stroke="black"/>
                  <path d="M 152,512 L 232,512" fill="none" stroke="black"/>
                  <path d="M 248,512 L 328,512" fill="none" stroke="black"/>
                  <path d="M 344,512 L 408,512" fill="none" stroke="black"/>
                  <path d="M 424,512 L 568,512" fill="none" stroke="black"/>
                  <path d="M 24,560 L 248,560" fill="none" stroke="black"/>
                  <path d="M 296,560 L 536,560" fill="none" stroke="black"/>
                  <path d="M 296,608 L 480,608" fill="none" stroke="black"/>
                  <path d="M 496,608 L 536,608" fill="none" stroke="black"/>
                  <path d="M 256,640 L 312,640" fill="none" stroke="black"/>
                  <path d="M 432,640 L 480,640" fill="none" stroke="black"/>
                  <path d="M 24,768 L 248,768" fill="none" stroke="black"/>
                  <path d="M 8,816 L 568,816" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="424,232 412,226.4 412,237.6" fill="black" transform="rotate(270,416,232)"/>
                  <polygon class="arrowhead" points="344,552 332,546.4 332,557.6" fill="black" transform="rotate(90,336,552)"/>
                  <polygon class="arrowhead" points="248,344 236,338.4 236,349.6" fill="black" transform="rotate(270,240,344)"/>
                  <polygon class="arrowhead" points="184,280 172,274.4 172,285.6" fill="black" transform="rotate(90,176,280)"/>
                  <polygon class="arrowhead" points="160,192 148,186.4 148,197.6" fill="black" transform="rotate(0,152,192)"/>
                  <polygon class="arrowhead" points="152,552 140,546.4 140,557.6" fill="black" transform="rotate(90,144,552)"/>
                  <polygon class="arrowhead" points="64,168 52,162.4 52,173.6" fill="black" transform="rotate(90,56,168)"/>
                  <circle cx="248" cy="640" r="6" class="opendot" fill="white" stroke="black"/>
                  <circle cx="488" cy="608" r="6" class="opendot" fill="white" stroke="black"/>
                  <circle cx="488" cy="640" r="6" class="opendot" fill="white" stroke="black"/>
                  <g class="text">
                    <text x="36" y="36">Incoming</text>
                    <text x="24" y="52">EDHOC</text>
                    <text x="88" y="52">message_X</text>
                    <text x="12" y="68">(X</text>
                    <text x="32" y="68">=</text>
                    <text x="48" y="68">2</text>
                    <text x="68" y="68">or</text>
                    <text x="92" y="68">3)</text>
                    <text x="404" y="148">Core</text>
                    <text x="448" y="148">EDHOC</text>
                    <text x="516" y="148">processing</text>
                    <text x="60" y="196">Decode</text>
                    <text x="204" y="196">Retrieve</text>
                    <text x="256" y="196">the</text>
                    <text x="440" y="196">Advance</text>
                    <text x="488" y="196">the</text>
                    <text x="72" y="212">message_X</text>
                    <text x="204" y="212">protocol</text>
                    <text x="264" y="212">state</text>
                    <text x="444" y="212">protocol</text>
                    <text x="504" y="212">state</text>
                    <text x="104" y="308">Decrypt</text>
                    <text x="260" y="308">Verify</text>
                    <text x="124" y="324">CIPHERTEXT_X</text>
                    <text x="308" y="324">Signature_or_MAC_X</text>
                    <text x="496" y="420">.................</text>
                    <text x="108" y="436">Divert</text>
                    <text x="208" y="436">Get</text>
                    <text x="300" y="436">Divert</text>
                    <text x="384" y="436">Get</text>
                    <text x="432" y="436">:</text>
                    <text x="456" y="436">EAD</text>
                    <text x="496" y="436">items</text>
                    <text x="560" y="436">:</text>
                    <text x="212" y="452">back</text>
                    <text x="388" y="452">back</text>
                    <text x="432" y="452">:</text>
                    <text x="456" y="452">for</text>
                    <text x="488" y="452">the</text>
                    <text x="524" y="452">next</text>
                    <text x="560" y="452">:</text>
                    <text x="432" y="468">:</text>
                    <text x="464" y="468">EDHOC</text>
                    <text x="520" y="468">message</text>
                    <text x="560" y="468">:</text>
                    <text x="496" y="484">:...............:</text>
                    <text x="44" y="580">a)</text>
                    <text x="96" y="580">Retrieval</text>
                    <text x="152" y="580">and</text>
                    <text x="348" y="580">Processing</text>
                    <text x="404" y="580">of</text>
                    <text x="100" y="596">validation</text>
                    <text x="156" y="596">of</text>
                    <text x="200" y="596">CRED_X;</text>
                    <text x="376" y="596">post-verification</text>
                    <text x="464" y="596">EAD</text>
                    <text x="504" y="596">items</text>
                    <text x="44" y="612">b)</text>
                    <text x="80" y="612">Trust</text>
                    <text x="148" y="612">assessment</text>
                    <text x="68" y="628">of</text>
                    <text x="112" y="628">CRED_X;</text>
                    <text x="44" y="644">c)</text>
                    <text x="100" y="644">Processing</text>
                    <text x="156" y="644">of</text>
                    <text x="348" y="644">Shared</text>
                    <text x="400" y="644">state</text>
                    <text x="124" y="660">pre-verification</text>
                    <text x="72" y="676">EAD</text>
                    <text x="112" y="676">items</text>
                    <text x="404" y="676">......................</text>
                    <text x="320" y="692">:</text>
                    <text x="380" y="692">Instructions</text>
                    <text x="456" y="692">about</text>
                    <text x="488" y="692">:</text>
                    <text x="40" y="708">-</text>
                    <text x="64" y="708">(a)</text>
                    <text x="96" y="708">and</text>
                    <text x="128" y="708">(c)</text>
                    <text x="168" y="708">might</text>
                    <text x="212" y="708">have</text>
                    <text x="320" y="708">:</text>
                    <text x="344" y="708">EAD</text>
                    <text x="384" y="708">items</text>
                    <text x="420" y="708">to</text>
                    <text x="488" y="708">:</text>
                    <text x="60" y="724">to</text>
                    <text x="96" y="724">occur</text>
                    <text x="132" y="724">in</text>
                    <text x="180" y="724">parallel</text>
                    <text x="320" y="724">:</text>
                    <text x="392" y="724">unconditionally</text>
                    <text x="488" y="724">:</text>
                    <text x="40" y="740">-</text>
                    <text x="64" y="740">(b)</text>
                    <text x="112" y="740">depends</text>
                    <text x="156" y="740">on</text>
                    <text x="184" y="740">the</text>
                    <text x="320" y="740">:</text>
                    <text x="360" y="740">produce</text>
                    <text x="408" y="740">for</text>
                    <text x="440" y="740">the</text>
                    <text x="488" y="740">:</text>
                    <text x="68" y="756">used</text>
                    <text x="112" y="756">trust</text>
                    <text x="160" y="756">model</text>
                    <text x="320" y="756">:</text>
                    <text x="348" y="756">next</text>
                    <text x="392" y="756">EDHOC</text>
                    <text x="448" y="756">message</text>
                    <text x="488" y="756">:</text>
                    <text x="404" y="772">:....................:</text>
                    <text x="444" y="804">Side-Processor</text>
                    <text x="532" y="804">Object</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![CDATA[
Incoming
EDHOC message_X
(X = 2 or 3)

      |
      |
+-----|---------------------------------------------------------------+
|     |                                         Core EDHOC processing |
|     v                                                               |
| +-----------+    +----------------+            +----------------+   |
| | Decode    |--->| Retrieve the   |            | Advance the    |   |
| | message_X |    | protocol state |            | protocol state |   |
| +-----------+    +----------------+            +----------------+   |
|                    |                             ^                  |
|                    |                             |                  |
|                    v                             |                  |
|      +--------------+    +--------------------+  |                  |
|      | Decrypt      |    | Verify             |  |                  |
|      | CIPHERTEXT_X |    | Signature_or_MAC_X |  |                  |
|      +--------------+    +--------------------+  |                  |
|                |           ^           |         |                  |
|                |           |           |         |                  |
+----------------|-----------|-----------|---------|------------------+
                 |           |           |         |
                 |           |           |         | .................
          Divert |      Get  |    Divert |    Get  | : EAD items     :
                 |      back |           |    back | : for the next  :
                 |           |           |         | : EDHOC message :
                 |           |           |         | :...............:
                 |           |           |         |
+----------------|-----------|-----------|---------|------------------+
|                |           |           |         |                  |
|                v           |           v         |                  |
| +---------------------------+     +-----------------------------+   |
| | a) Retrieval and          |     | Processing of               |   |
| |    validation of CRED_X;  |     | post-verification EAD items |   |
| | b) Trust assessment       |     +-----------------------o-----+   |
| |    of CRED_X;             |                             |         |
| | c) Processing of          o-------- Shared state -------o         |
| |    pre-verification       |                                       |
| |    EAD items              |        ......................         |
| |                           |        : Instructions about :         |
| | - (a) and (c) might have  |        : EAD items to       :         |
| |   to occur in parallel    |        : unconditionally    :         |
| | - (b) depends on the      |        : produce for the    :         |
| |   used trust model        |        : next EDHOC message :         |
| +---------------------------+        :....................:         |
|                                                                     |
|                                               Side-Processor Object |
+---------------------------------------------------------------------+
]]></artwork>
            </artset>
          </figure>
          <t>The flowchart in <xref target="fig-flowchart-spo-low-level"/> shows the different steps taken for processing an incoming EDHOC message_2 and message_3.</t>
          <figure anchor="fig-flowchart-spo-low-level">
            <name>Processing steps for EDHOC message_2 and message_3</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="2400" width="568" viewBox="0 0 568 2400" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,512 L 8,1392" fill="none" stroke="black"/>
                  <path d="M 8,1440 L 8,1568" fill="none" stroke="black"/>
                  <path d="M 8,1920 L 8,2160" fill="none" stroke="black"/>
                  <path d="M 16,144 L 16,176" fill="none" stroke="black"/>
                  <path d="M 16,240 L 16,288" fill="none" stroke="black"/>
                  <path d="M 16,352 L 16,384" fill="none" stroke="black"/>
                  <path d="M 16,1744 L 16,1776" fill="none" stroke="black"/>
                  <path d="M 16,2336 L 16,2384" fill="none" stroke="black"/>
                  <path d="M 24,560 L 24,640" fill="none" stroke="black"/>
                  <path d="M 24,736 L 24,784" fill="none" stroke="black"/>
                  <path d="M 24,896 L 24,976" fill="none" stroke="black"/>
                  <path d="M 24,1248 L 24,1360" fill="none" stroke="black"/>
                  <path d="M 24,1488 L 24,1536" fill="none" stroke="black"/>
                  <path d="M 24,1968 L 24,2016" fill="none" stroke="black"/>
                  <path d="M 24,2080 L 24,2128" fill="none" stroke="black"/>
                  <path d="M 88,96 L 88,136" fill="none" stroke="black"/>
                  <path d="M 88,184 L 88,232" fill="none" stroke="black"/>
                  <path d="M 88,296 L 88,344" fill="none" stroke="black"/>
                  <path d="M 88,392 L 88,416" fill="none" stroke="black"/>
                  <path d="M 88,496 L 88,552" fill="none" stroke="black"/>
                  <path d="M 88,648 L 88,728" fill="none" stroke="black"/>
                  <path d="M 88,792 L 88,888" fill="none" stroke="black"/>
                  <path d="M 88,984 L 88,1240" fill="none" stroke="black"/>
                  <path d="M 88,1368 L 88,1480" fill="none" stroke="black"/>
                  <path d="M 88,1544 L 88,1616" fill="none" stroke="black"/>
                  <path d="M 88,1696 L 88,1736" fill="none" stroke="black"/>
                  <path d="M 88,1784 L 88,1824" fill="none" stroke="black"/>
                  <path d="M 88,1904 L 88,1960" fill="none" stroke="black"/>
                  <path d="M 88,2024 L 88,2072" fill="none" stroke="black"/>
                  <path d="M 88,2136 L 88,2208" fill="none" stroke="black"/>
                  <path d="M 88,2288 L 88,2328" fill="none" stroke="black"/>
                  <path d="M 152,2336 L 152,2384" fill="none" stroke="black"/>
                  <path d="M 168,736 L 168,784" fill="none" stroke="black"/>
                  <path d="M 168,1744 L 168,1776" fill="none" stroke="black"/>
                  <path d="M 176,144 L 176,176" fill="none" stroke="black"/>
                  <path d="M 176,240 L 176,288" fill="none" stroke="black"/>
                  <path d="M 176,352 L 176,384" fill="none" stroke="black"/>
                  <path d="M 176,1248 L 176,1360" fill="none" stroke="black"/>
                  <path d="M 192,896 L 192,976" fill="none" stroke="black"/>
                  <path d="M 200,560 L 200,640" fill="none" stroke="black"/>
                  <path d="M 208,160 L 208,240" fill="none" stroke="black"/>
                  <path d="M 208,272 L 208,368" fill="none" stroke="black"/>
                  <path d="M 224,960 L 224,1264" fill="none" stroke="black"/>
                  <path d="M 248,560 L 248,640" fill="none" stroke="black"/>
                  <path d="M 248,736 L 248,928" fill="none" stroke="black"/>
                  <path d="M 296,688 L 296,728" fill="none" stroke="black"/>
                  <path d="M 296,1136 L 296,1168" fill="none" stroke="black"/>
                  <path d="M 296,1232 L 296,1360" fill="none" stroke="black"/>
                  <path d="M 320,936 L 320,1128" fill="none" stroke="black"/>
                  <path d="M 320,1176 L 320,1224" fill="none" stroke="black"/>
                  <path d="M 344,736 L 344,928" fill="none" stroke="black"/>
                  <path d="M 368,560 L 368,640" fill="none" stroke="black"/>
                  <path d="M 384,2080 L 384,2128" fill="none" stroke="black"/>
                  <path d="M 392,1968 L 392,2016" fill="none" stroke="black"/>
                  <path d="M 408,736 L 408,848" fill="none" stroke="black"/>
                  <path d="M 416,560 L 416,640" fill="none" stroke="black"/>
                  <path d="M 416,1920 L 416,2160" fill="none" stroke="black"/>
                  <path d="M 424,648 L 424,688" fill="none" stroke="black"/>
                  <path d="M 432,1024 L 432,1072" fill="none" stroke="black"/>
                  <path d="M 480,1488 L 480,1536" fill="none" stroke="black"/>
                  <path d="M 512,648 L 512,728" fill="none" stroke="black"/>
                  <path d="M 512,856 L 512,1016" fill="none" stroke="black"/>
                  <path d="M 512,1080 L 512,1128" fill="none" stroke="black"/>
                  <path d="M 528,560 L 528,640" fill="none" stroke="black"/>
                  <path d="M 544,736 L 544,848" fill="none" stroke="black"/>
                  <path d="M 544,1024 L 544,1072" fill="none" stroke="black"/>
                  <path d="M 544,1136 L 544,1168" fill="none" stroke="black"/>
                  <path d="M 544,1232 L 544,1360" fill="none" stroke="black"/>
                  <path d="M 560,512 L 560,1392" fill="none" stroke="black"/>
                  <path d="M 560,1440 L 560,1568" fill="none" stroke="black"/>
                  <path d="M 16,144 L 176,144" fill="none" stroke="black"/>
                  <path d="M 16,176 L 176,176" fill="none" stroke="black"/>
                  <path d="M 16,240 L 176,240" fill="none" stroke="black"/>
                  <path d="M 16,288 L 176,288" fill="none" stroke="black"/>
                  <path d="M 16,352 L 176,352" fill="none" stroke="black"/>
                  <path d="M 16,384 L 176,384" fill="none" stroke="black"/>
                  <path d="M 8,512 L 80,512" fill="none" stroke="black"/>
                  <path d="M 96,512 L 560,512" fill="none" stroke="black"/>
                  <path d="M 24,560 L 200,560" fill="none" stroke="black"/>
                  <path d="M 248,560 L 368,560" fill="none" stroke="black"/>
                  <path d="M 416,560 L 528,560" fill="none" stroke="black"/>
                  <path d="M 208,592 L 240,592" fill="none" stroke="black"/>
                  <path d="M 376,592 L 408,592" fill="none" stroke="black"/>
                  <path d="M 24,640 L 200,640" fill="none" stroke="black"/>
                  <path d="M 248,640 L 368,640" fill="none" stroke="black"/>
                  <path d="M 416,640 L 528,640" fill="none" stroke="black"/>
                  <path d="M 296,688 L 424,688" fill="none" stroke="black"/>
                  <path d="M 24,736 L 168,736" fill="none" stroke="black"/>
                  <path d="M 248,736 L 344,736" fill="none" stroke="black"/>
                  <path d="M 408,736 L 544,736" fill="none" stroke="black"/>
                  <path d="M 176,752 L 240,752" fill="none" stroke="black"/>
                  <path d="M 352,752 L 400,752" fill="none" stroke="black"/>
                  <path d="M 24,784 L 168,784" fill="none" stroke="black"/>
                  <path d="M 408,848 L 544,848" fill="none" stroke="black"/>
                  <path d="M 24,896 L 192,896" fill="none" stroke="black"/>
                  <path d="M 200,912 L 240,912" fill="none" stroke="black"/>
                  <path d="M 248,928 L 344,928" fill="none" stroke="black"/>
                  <path d="M 200,960 L 224,960" fill="none" stroke="black"/>
                  <path d="M 24,976 L 192,976" fill="none" stroke="black"/>
                  <path d="M 432,1024 L 544,1024" fill="none" stroke="black"/>
                  <path d="M 432,1072 L 544,1072" fill="none" stroke="black"/>
                  <path d="M 296,1136 L 544,1136" fill="none" stroke="black"/>
                  <path d="M 296,1168 L 544,1168" fill="none" stroke="black"/>
                  <path d="M 296,1232 L 544,1232" fill="none" stroke="black"/>
                  <path d="M 24,1248 L 176,1248" fill="none" stroke="black"/>
                  <path d="M 224,1264 L 288,1264" fill="none" stroke="black"/>
                  <path d="M 24,1360 L 176,1360" fill="none" stroke="black"/>
                  <path d="M 296,1360 L 544,1360" fill="none" stroke="black"/>
                  <path d="M 8,1392 L 80,1392" fill="none" stroke="black"/>
                  <path d="M 96,1392 L 560,1392" fill="none" stroke="black"/>
                  <path d="M 8,1440 L 80,1440" fill="none" stroke="black"/>
                  <path d="M 96,1440 L 560,1440" fill="none" stroke="black"/>
                  <path d="M 24,1488 L 480,1488" fill="none" stroke="black"/>
                  <path d="M 24,1536 L 480,1536" fill="none" stroke="black"/>
                  <path d="M 8,1568 L 80,1568" fill="none" stroke="black"/>
                  <path d="M 96,1568 L 560,1568" fill="none" stroke="black"/>
                  <path d="M 16,1744 L 168,1744" fill="none" stroke="black"/>
                  <path d="M 16,1776 L 168,1776" fill="none" stroke="black"/>
                  <path d="M 8,1920 L 80,1920" fill="none" stroke="black"/>
                  <path d="M 96,1920 L 416,1920" fill="none" stroke="black"/>
                  <path d="M 24,1968 L 392,1968" fill="none" stroke="black"/>
                  <path d="M 24,2016 L 392,2016" fill="none" stroke="black"/>
                  <path d="M 24,2080 L 384,2080" fill="none" stroke="black"/>
                  <path d="M 24,2128 L 384,2128" fill="none" stroke="black"/>
                  <path d="M 8,2160 L 80,2160" fill="none" stroke="black"/>
                  <path d="M 96,2160 L 416,2160" fill="none" stroke="black"/>
                  <path d="M 16,2336 L 152,2336" fill="none" stroke="black"/>
                  <path d="M 16,2384 L 152,2384" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="520,1128 508,1122.4 508,1133.6" fill="black" transform="rotate(90,512,1128)"/>
                  <polygon class="arrowhead" points="520,1016 508,1010.4 508,1021.6" fill="black" transform="rotate(90,512,1016)"/>
                  <polygon class="arrowhead" points="520,728 508,722.4 508,733.6" fill="black" transform="rotate(90,512,728)"/>
                  <polygon class="arrowhead" points="416,592 404,586.4 404,597.6" fill="black" transform="rotate(0,408,592)"/>
                  <polygon class="arrowhead" points="360,752 348,746.4 348,757.6" fill="black" transform="rotate(180,352,752)"/>
                  <polygon class="arrowhead" points="328,1224 316,1218.4 316,1229.6" fill="black" transform="rotate(90,320,1224)"/>
                  <polygon class="arrowhead" points="328,936 316,930.4 316,941.6" fill="black" transform="rotate(270,320,936)"/>
                  <polygon class="arrowhead" points="304,728 292,722.4 292,733.6" fill="black" transform="rotate(90,296,728)"/>
                  <polygon class="arrowhead" points="248,912 236,906.4 236,917.6" fill="black" transform="rotate(0,240,912)"/>
                  <polygon class="arrowhead" points="248,752 236,746.4 236,757.6" fill="black" transform="rotate(0,240,752)"/>
                  <polygon class="arrowhead" points="248,592 236,586.4 236,597.6" fill="black" transform="rotate(0,240,592)"/>
                  <polygon class="arrowhead" points="208,960 196,954.4 196,965.6" fill="black" transform="rotate(180,200,960)"/>
                  <polygon class="arrowhead" points="96,2328 84,2322.4 84,2333.6" fill="black" transform="rotate(90,88,2328)"/>
                  <polygon class="arrowhead" points="96,2208 84,2202.4 84,2213.6" fill="black" transform="rotate(90,88,2208)"/>
                  <polygon class="arrowhead" points="96,2072 84,2066.4 84,2077.6" fill="black" transform="rotate(90,88,2072)"/>
                  <polygon class="arrowhead" points="96,1960 84,1954.4 84,1965.6" fill="black" transform="rotate(90,88,1960)"/>
                  <polygon class="arrowhead" points="96,1824 84,1818.4 84,1829.6" fill="black" transform="rotate(90,88,1824)"/>
                  <polygon class="arrowhead" points="96,1736 84,1730.4 84,1741.6" fill="black" transform="rotate(90,88,1736)"/>
                  <polygon class="arrowhead" points="96,1616 84,1610.4 84,1621.6" fill="black" transform="rotate(90,88,1616)"/>
                  <polygon class="arrowhead" points="96,1480 84,1474.4 84,1485.6" fill="black" transform="rotate(90,88,1480)"/>
                  <polygon class="arrowhead" points="96,1240 84,1234.4 84,1245.6" fill="black" transform="rotate(90,88,1240)"/>
                  <polygon class="arrowhead" points="96,888 84,882.4 84,893.6" fill="black" transform="rotate(90,88,888)"/>
                  <polygon class="arrowhead" points="96,728 84,722.4 84,733.6" fill="black" transform="rotate(90,88,728)"/>
                  <polygon class="arrowhead" points="96,552 84,546.4 84,557.6" fill="black" transform="rotate(90,88,552)"/>
                  <polygon class="arrowhead" points="96,344 84,338.4 84,349.6" fill="black" transform="rotate(90,88,344)"/>
                  <polygon class="arrowhead" points="96,232 84,226.4 84,237.6" fill="black" transform="rotate(90,88,232)"/>
                  <polygon class="arrowhead" points="96,136 84,130.4 84,141.6" fill="black" transform="rotate(90,88,136)"/>
                  <g class="text">
                    <text x="52" y="36">Incoming</text>
                    <text x="40" y="52">EDHOC</text>
                    <text x="104" y="52">message_X</text>
                    <text x="28" y="68">(X</text>
                    <text x="48" y="68">=</text>
                    <text x="64" y="68">2</text>
                    <text x="84" y="68">or</text>
                    <text x="108" y="68">3)</text>
                    <text x="200" y="148">\</text>
                    <text x="52" y="164">Decode</text>
                    <text x="120" y="164">message_X</text>
                    <text x="60" y="260">Retrieve</text>
                    <text x="112" y="260">the</text>
                    <text x="216" y="260">&gt;</text>
                    <text x="248" y="260">(Core</text>
                    <text x="296" y="260">EDHOC</text>
                    <text x="368" y="260">Processing)</text>
                    <text x="60" y="276">protocol</text>
                    <text x="120" y="276">state</text>
                    <text x="56" y="372">Decrypt</text>
                    <text x="128" y="372">message_X</text>
                    <text x="200" y="388">/</text>
                    <text x="40" y="452">Control</text>
                    <text x="120" y="452">transferred</text>
                    <text x="180" y="452">to</text>
                    <text x="24" y="468">the</text>
                    <text x="100" y="468">side-processor</text>
                    <text x="188" y="468">object</text>
                    <text x="252" y="532">Pre-verification</text>
                    <text x="340" y="532">side</text>
                    <text x="404" y="532">processing</text>
                    <text x="488" y="532">(PHASE_1)</text>
                    <text x="44" y="580">1.</text>
                    <text x="76" y="580">Does</text>
                    <text x="136" y="580">ID_CRED_X</text>
                    <text x="220" y="580">NO</text>
                    <text x="268" y="580">3.</text>
                    <text x="316" y="580">Retrieve</text>
                    <text x="436" y="580">4.</text>
                    <text x="460" y="580">Is</text>
                    <text x="488" y="580">the</text>
                    <text x="44" y="596">or</text>
                    <text x="68" y="596">an</text>
                    <text x="96" y="596">EAD</text>
                    <text x="132" y="596">item</text>
                    <text x="276" y="596">CRED</text>
                    <text x="312" y="596">via</text>
                    <text x="464" y="596">retrieval</text>
                    <text x="56" y="612">point</text>
                    <text x="92" y="612">to</text>
                    <text x="116" y="612">an</text>
                    <text x="160" y="612">already</text>
                    <text x="296" y="612">ID_CRED_X</text>
                    <text x="348" y="612">or</text>
                    <text x="436" y="612">of</text>
                    <text x="468" y="612">CRED</text>
                    <text x="60" y="628">stored</text>
                    <text x="112" y="628">CRED?</text>
                    <text x="268" y="628">an</text>
                    <text x="296" y="628">EAD</text>
                    <text x="332" y="628">item</text>
                    <text x="472" y="628">successful?</text>
                    <text x="444" y="676">NO</text>
                    <text x="536" y="676">YES</text>
                    <text x="112" y="708">YES</text>
                    <text x="188" y="740">NO</text>
                    <text x="384" y="740">YES</text>
                    <text x="44" y="756">2.</text>
                    <text x="68" y="756">Is</text>
                    <text x="100" y="756">this</text>
                    <text x="140" y="756">CRED</text>
                    <text x="272" y="756">11.</text>
                    <text x="312" y="756">Abort</text>
                    <text x="428" y="756">5.</text>
                    <text x="452" y="756">Is</text>
                    <text x="480" y="756">the</text>
                    <text x="516" y="756">used</text>
                    <text x="56" y="772">still</text>
                    <text x="108" y="772">valid?</text>
                    <text x="272" y="772">the</text>
                    <text x="312" y="772">EDHOC</text>
                    <text x="440" y="772">trust</text>
                    <text x="492" y="772">policy</text>
                    <text x="288" y="788">session</text>
                    <text x="476" y="788">"NO-LEARNING",</text>
                    <text x="448" y="804">without</text>
                    <text x="496" y="804">any</text>
                    <text x="460" y="820">acceptable</text>
                    <text x="464" y="836">exceptions?</text>
                    <text x="112" y="868">YES</text>
                    <text x="396" y="884">Here</text>
                    <text x="432" y="884">the</text>
                    <text x="468" y="884">used</text>
                    <text x="532" y="884">NO</text>
                    <text x="212" y="900">NO</text>
                    <text x="400" y="900">trust</text>
                    <text x="452" y="900">policy</text>
                    <text x="492" y="900">is</text>
                    <text x="44" y="916">9.</text>
                    <text x="68" y="916">Is</text>
                    <text x="100" y="916">this</text>
                    <text x="140" y="916">CRED</text>
                    <text x="424" y="916">"LEARNING",</text>
                    <text x="484" y="916">or</text>
                    <text x="52" y="932">good</text>
                    <text x="84" y="932">to</text>
                    <text x="112" y="932">use</text>
                    <text x="140" y="932">in</text>
                    <text x="168" y="932">the</text>
                    <text x="432" y="932">"NO-LEARNING"</text>
                    <text x="64" y="948">context</text>
                    <text x="108" y="948">of</text>
                    <text x="140" y="948">this</text>
                    <text x="412" y="948">together</text>
                    <text x="468" y="948">with</text>
                    <text x="56" y="964">EDHOC</text>
                    <text x="116" y="964">session?</text>
                    <text x="388" y="964">an</text>
                    <text x="444" y="964">overriding</text>
                    <text x="416" y="980">exception</text>
                    <text x="452" y="1044">6.</text>
                    <text x="500" y="1044">Validate</text>
                    <text x="460" y="1060">CRED</text>
                    <text x="112" y="1108">YES</text>
                    <text x="340" y="1108">NO</text>
                    <text x="316" y="1156">7.</text>
                    <text x="340" y="1156">Is</text>
                    <text x="372" y="1156">CRED</text>
                    <text x="420" y="1156">valid?</text>
                    <text x="344" y="1204">YES</text>
                    <text x="316" y="1252">8.</text>
                    <text x="352" y="1252">Store</text>
                    <text x="396" y="1252">CRED</text>
                    <text x="428" y="1252">as</text>
                    <text x="464" y="1252">valid</text>
                    <text x="504" y="1252">and</text>
                    <text x="48" y="1268">10.</text>
                    <text x="100" y="1268">Continue</text>
                    <text x="148" y="1268">by</text>
                    <text x="340" y="1268">trusted.</text>
                    <text x="80" y="1284">considering</text>
                    <text x="148" y="1284">this</text>
                    <text x="52" y="1300">CRED</text>
                    <text x="84" y="1300">as</text>
                    <text x="112" y="1300">the</text>
                    <text x="324" y="1300">Pair</text>
                    <text x="364" y="1300">CRED</text>
                    <text x="404" y="1300">with</text>
                    <text x="468" y="1300">consistent</text>
                    <text x="92" y="1316">authentication</text>
                    <text x="348" y="1316">credential</text>
                    <text x="444" y="1316">identifiers,</text>
                    <text x="512" y="1316">for</text>
                    <text x="76" y="1332">credential</text>
                    <text x="132" y="1332">of</text>
                    <text x="324" y="1332">each</text>
                    <text x="384" y="1332">supported</text>
                    <text x="444" y="1332">type</text>
                    <text x="476" y="1332">of</text>
                    <text x="48" y="1348">the</text>
                    <text x="88" y="1348">other</text>
                    <text x="132" y="1348">peer</text>
                    <text x="348" y="1348">credential</text>
                    <text x="440" y="1348">identifier.</text>
                    <text x="244" y="1460">Pre-verification</text>
                    <text x="332" y="1460">side</text>
                    <text x="396" y="1460">processing</text>
                    <text x="480" y="1460">(PHASE_2)</text>
                    <text x="64" y="1508">Process</text>
                    <text x="112" y="1508">the</text>
                    <text x="144" y="1508">EAD</text>
                    <text x="184" y="1508">items</text>
                    <text x="228" y="1508">that</text>
                    <text x="268" y="1508">have</text>
                    <text x="304" y="1508">not</text>
                    <text x="340" y="1508">been</text>
                    <text x="400" y="1508">processed</text>
                    <text x="456" y="1508">yet</text>
                    <text x="48" y="1524">and</text>
                    <text x="84" y="1524">that</text>
                    <text x="120" y="1524">can</text>
                    <text x="148" y="1524">be</text>
                    <text x="200" y="1524">processed</text>
                    <text x="268" y="1524">before</text>
                    <text x="328" y="1524">message</text>
                    <text x="412" y="1524">verification</text>
                    <text x="40" y="1652">Control</text>
                    <text x="120" y="1652">transferred</text>
                    <text x="188" y="1652">back</text>
                    <text x="20" y="1668">to</text>
                    <text x="48" y="1668">the</text>
                    <text x="84" y="1668">core</text>
                    <text x="128" y="1668">EDHOC</text>
                    <text x="196" y="1668">processing</text>
                    <text x="52" y="1764">Verify</text>
                    <text x="120" y="1764">message_X</text>
                    <text x="200" y="1764">(core</text>
                    <text x="248" y="1764">EDHOC</text>
                    <text x="320" y="1764">processing)</text>
                    <text x="40" y="1860">Control</text>
                    <text x="120" y="1860">transferred</text>
                    <text x="180" y="1860">to</text>
                    <text x="24" y="1876">the</text>
                    <text x="100" y="1876">side-processor</text>
                    <text x="188" y="1876">object</text>
                    <text x="248" y="1940">Post-verification</text>
                    <text x="364" y="1940">processing</text>
                    <text x="64" y="1988">Process</text>
                    <text x="112" y="1988">the</text>
                    <text x="144" y="1988">EAD</text>
                    <text x="184" y="1988">items</text>
                    <text x="228" y="1988">that</text>
                    <text x="268" y="1988">have</text>
                    <text x="300" y="1988">to</text>
                    <text x="324" y="1988">be</text>
                    <text x="72" y="2004">processed</text>
                    <text x="140" y="2004">(also)</text>
                    <text x="192" y="2004">after</text>
                    <text x="248" y="2004">message</text>
                    <text x="332" y="2004">verification</text>
                    <text x="52" y="2100">Make</text>
                    <text x="88" y="2100">all</text>
                    <text x="120" y="2100">the</text>
                    <text x="168" y="2100">results</text>
                    <text x="212" y="2100">of</text>
                    <text x="240" y="2100">the</text>
                    <text x="272" y="2100">EAD</text>
                    <text x="332" y="2100">processing</text>
                    <text x="72" y="2116">available</text>
                    <text x="124" y="2116">to</text>
                    <text x="160" y="2116">build</text>
                    <text x="200" y="2116">the</text>
                    <text x="236" y="2116">next</text>
                    <text x="280" y="2116">EDHOC</text>
                    <text x="336" y="2116">message</text>
                    <text x="40" y="2244">Control</text>
                    <text x="120" y="2244">transferred</text>
                    <text x="188" y="2244">back</text>
                    <text x="20" y="2260">to</text>
                    <text x="48" y="2260">the</text>
                    <text x="84" y="2260">core</text>
                    <text x="128" y="2260">EDHOC</text>
                    <text x="196" y="2260">processing</text>
                    <text x="56" y="2356">Advance</text>
                    <text x="104" y="2356">the</text>
                    <text x="184" y="2356">(core</text>
                    <text x="232" y="2356">EDHOC</text>
                    <text x="304" y="2356">processing)</text>
                    <text x="60" y="2372">protocol</text>
                    <text x="120" y="2372">state</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![CDATA[
  Incoming
  EDHOC message_X
  (X = 2 or 3)

          |
          |
          v
 +-------------------+  \
 | Decode message_X  |   |
 +-------------------+   |
          |              |
          |              |
          v              |
 +-------------------+   |
 | Retrieve the      |    > (Core EDHOC Processing)
 | protocol state    |   |
 +-------------------+   |
          |              |
          |              |
          v              |
 +-------------------+   |
 | Decrypt message_X |   |
 +-------------------+  /
          |
          |

 Control transferred to
 the side-processor object

          |
+---------|----------------------------------------------------------+
|         |            Pre-verification side processing (PHASE_1)    |
|         v                                                          |
| +---------------------+     +--------------+     +-------------+   |
| | 1. Does ID_CRED_X   | NO  | 3. Retrieve  |     | 4. Is the   |   |
| | or an EAD item      |---->| CRED via     |---->| retrieval   |   |
| | point to an already |     | ID_CRED_X or |     | of CRED     |   |
| | stored CRED?        |     | an EAD item  |     | successful? |   |
| +---------------------+     +--------------+     +-------------+   |
|         |                                         |          |     |
|         |                                         | NO       | YES |
|         |                         +---------------+          |     |
|         | YES                     |                          |     |
|         v                         v                          v     |
| +-----------------+ NO      +-----------+   YES +----------------+ |
| | 2. Is this CRED |-------->| 11. Abort |<------| 5. Is the used | |
| | still valid?    |         | the EDHOC |       | trust policy   | |
| +-----------------+         | session   |       | "NO-LEARNING", | |
|         |                   |           |       | without any    | |
|         |                   |           |       | acceptable     | |
|         |                   |           |       | exceptions?    | |
|         |                   |           |       +----------------+ |
|         | YES               |           |                    |     |
|         v                   |           |    Here the used   | NO  |
| +--------------------+ NO   |           |    trust policy is |     |
| | 9. Is this CRED    |----->|           |    "LEARNING", or  |     |
| | good to use in the |      +-----------+    "NO-LEARNING"   |     |
| | context of this    |               ^       together with   |     |
| | EDHOC session?     |<--+           |       an overriding   |     |
| +--------------------+   |           |       exception       |     |
|         |                |           |                       |     |
|         |                |           |                       v     |
|         |                |           |             +-------------+ |
|         |                |           |             | 6. Validate | |
|         |                |           |             | CRED        | |
|         |                |           |             +-------------+ |
|         |                |           |                       |     |
|         | YES            |           | NO                    |     |
|         |                |           |                       v     |
|         |                |        +------------------------------+ |
|         |                |        | 7. Is CRED valid?            | |
|         |                |        +------------------------------+ |
|         |                |           |                             |
|         |                |           | YES                         |
|         |                |           v                             |
|         v                |        +------------------------------+ |
| +------------------+     |        | 8. Store CRED as valid and   | |
| | 10. Continue by  |     +--------| trusted.                     | |
| | considering this |              |                              | |
| | CRED as the      |              | Pair CRED with consistent    | |
| | authentication   |              | credential identifiers, for  | |
| | credential of    |              | each supported type of       | |
| | the other peer   |              | credential identifier.       | |
| +------------------+              +------------------------------+ |
|         |                                                          |
+---------|----------------------------------------------------------+
          |
          |
+---------|----------------------------------------------------------+
|         |           Pre-verification side processing (PHASE_2)     |
|         v                                                          |
| +--------------------------------------------------------+         |
| | Process the EAD items that have not been processed yet |         |
| | and that can be processed before message verification  |         |
| +--------------------------------------------------------+         |
|         |                                                          |
+---------|----------------------------------------------------------+
          |
          |
          v

 Control transferred back
 to the core EDHOC processing

          |
          |
          v
 +------------------+
 | Verify message_X | (core EDHOC processing)
 +------------------+
          |
          |
          v

 Control transferred to
 the side-processor object

          |
+---------|----------------------------------------+
|         |           Post-verification processing |
|         v                                        |
| +---------------------------------------------+  |
| | Process the EAD items that have to be       |  |
| | processed (also) after message verification |  |
| +---------------------------------------------+  |
|         |                                        |
|         |                                        |
|         v                                        |
| +--------------------------------------------+   |
| | Make all the results of the EAD processing |   |
| | available to build the next EDHOC message  |   |
| +--------------------------------------------+   |
|         |                                        |
+---------|----------------------------------------+
          |
          |
          v

 Control transferred back
 to the core EDHOC processing

          |
          |
          v
 +----------------+
 | Advance the    | (core EDHOC processing)
 | protocol state |
 +----------------+
]]></artwork>
            </artset>
          </figure>
        </section>
      </section>
      <section anchor="sec-message-side-processing-special">
        <name>Special Cases of Message Handling</name>
        <t>This section describes methods to perform special handling of incoming EDHOC messages in particular situations.</t>
        <section anchor="sec-message-side-processing-ace-prof">
          <name>EDHOC and OSCORE Profile of ACE</name>
          <t><xref target="sec-trust-models-ace-prof"/> discusses the case where two EDHOC peers use the ACE framework <xref target="RFC9200"/> and specifically the EDHOC and OSCORE profile of ACE defined in <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>.</t>
          <t>In particular, <xref target="sec-trust-models-ace-prof"/> considers a peer PEER_C that, when running EDHOC with a peer PEER_RS, uses a dedicated EAD item for uploading an access token at PEER_RS. In turn, the access token specifies AUTH_CRED_C as the public authentication credential of PEER_C.</t>
          <t>As also discussed in <xref target="sec-trust-models-ace-prof"/>, this practically requires PEER_RS to enforce either the trust policy "LEARNING" or the trust policy "NO-LEARNING" with situation-specific, overriding exceptions (see <xref target="sec-trust-models"/>), at least for the EDHOC resource used for exchanging the EDHOC messages of the EDHOC session in question.</t>
          <t>However, PEER_RS might have reasons to enforce the trust policy "NO_LEARNING" with no exceptions. In such a case, unless PEER_RS already stores AUTH_CRED_C, the upload of the access token by means of the EAD item has to consistently fail, and PEER_RS has to consequently abort the EDHOC session.</t>
          <t>This requires PEER_RS to perform an early check of the access token conveyed in the EAD item, in order to retrieve AUTH_CRED_C and determine whether it is already storing AUTH_CRED_C. The SPO can perform such a task, as part of steps 3 and 4 of PHASE_1 of the pre-verification side processing (see <xref target="sec-pre-verif"/>).</t>
          <t>In order to be reliable, this task requires to perform a cryptographic validation of the access token. Moreover, the access token can be encrypted, which makes the actual retrieval of AUTH_CRED_C not straightforward. In practice, the SPO has a number of viable options.</t>
          <ul spacing="normal">
            <li>
              <t>The SPO can directly perform the necessary cryptographic processing of the access token, including decryption if necessary.  </t>
              <t>
This requires to provide the SPO with the same security context, parameters, and cryptographic material that are available at a token validator component of PEER_RS, and that are shared with the ACE authorization server that has issued the access token.  </t>
              <t>
If the SPO fails the validation and cryptographic processing of the access token, or if it does not already store the AUTH_CRED_C specified by the access token, then the SPO aborts the EDHOC session.  </t>
              <t>
A downside of this approach is that the token validator component of PEER_RS will later repeat the cryptographic processing of the access token, when eventually provided by the SPO with the access token like if the latter was uploaded to PEER_RS as normally expected in the ACE framework.</t>
            </li>
            <li>
              <t>The SPO can engage in an internal, synchronous exchange with a token validator component of PEER_RS that is normally responsible for the validation and cryptographic processing of access tokens. For example, the SPO can proceed as follows.  </t>
              <ol spacing="normal" type="1"><li>
                  <t>The SPO creates a copy CREDS_BEFORE of the stored authentication credentials of its other EDHOC peers.</t>
                </li>
                <li>
                  <t>The SPO provides the token validator component of PEER_RS with the access token to undergo cryptographic processing and validation. If such process succeeds, the token validator component stores the access token, and adds AUTH_CRED_C to the current set of authentication credentials of other EDHOC peers.</t>
                </li>
                <li>
                  <t>After learning of the successful validation of the access token from the token validator component, the SPO checks whether the set of currently stored authentication credentials of other EDHOC peers includes an element that is not included in CREDS_BEFORE.</t>
                </li>
                <li>
                  <t>In case of a positive match, then the found element is AUTH_CRED_C, which PEER_RS was not supposed to learn as per the enforced "NO-LEARNING" policy.      </t>
                  <t>
Consequently, the SPO requests the token validator element to purge the access token, deletes CREDS_BEFORE, deletes AUTH_CRED_C from the set of currently stored authentication credentials of other EDHOC peers, and aborts the EDHOC session.</t>
                </li>
              </ol>
            </li>
          </ul>
        </section>
        <section anchor="sec-consistency-checks-auth-creds">
          <name>Consistency Checks of Authentication Credentials</name>
          <t>Editor's note: TODO</t>
          <ul spacing="normal">
            <li>
              <t>The following are placeholder notes that specifically consider the EDHOC and OSCORE profile of ACE <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>.</t>
            </li>
            <li>
              <t>While that profile is a relevant case in point to consider, the content of this section should discuss the topic in general. With respect to ID_CRED_R/ID_CRED_I, an access token is just an example of additional means to specify an authentication credential.</t>
            </li>
            <li>
              <t>When it comes specifically to the EDHOC and OSCORE profile of ACE, some of this content might better fit in <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>, while this document can keep only implementation-specific guidelines from a general point of view.</t>
            </li>
          </ul>
          <t>AUTH_CRED_C is always specified (by value or by reference) in ID_CRED_R (ID_CRED_I) of EDHOC message_2 (EDHOC message_3).</t>
          <t>AUTH_CRED_C can also be specified (by value or by reference) within an access token, which can be conveyed by an EAD item in an EDHOC message that PEER_C sends to PEER_RS. The details also depend on the two EDHOC peers using either the EDHOC forward message flow or the EDHOC reverse message flow (see <xref section="A.2" sectionFormat="of" target="RFC9528"/>).</t>
          <t>When such an access token is uploaded by means of an EAD item, PEER_RS has to perform consistency checks between the AUTH_CRED_C specified in ID_CRED_R or ID_CRED_I on one hand, and the AUTH_CRED_C specified within the access token on the other hand.</t>
          <t>This needs to explain in general terms <em>when</em> PEER_RS becomes able to perform the consistency check in different cases, which differ as to the use of the EDHOC forward message flow or of the EDHOC reverse message flow, and as to the specific EDHOC message including the EAD item that conveys the access token including AUTH_CRED_C.</t>
        </section>
      </section>
    </section>
    <section anchor="sec-block-wise">
      <name>Using EDHOC over CoAP with Block-Wise</name>
      <t><xref section="A.2" sectionFormat="of" target="RFC9528"/> specifies how to transfer EDHOC over CoAP <xref target="RFC7252"/>. In such a case, the EDHOC messages (possibly prepended by an EDHOC connection identifier) are transported in the payload of CoAP requests and responses, according to the EDHOC forward message flow or the EDHOC reverse message flow. Furthermore, <xref section="A.1" sectionFormat="of" target="RFC9528"/> specifies how to derive an OSCORE Security Context <xref target="RFC8613"/> from an EDHOC session.</t>
      <t>Building on that, <xref target="I-D.ietf-core-oscore-edhoc"/> further details the use of EDHOC with CoAP and OSCORE, and specifies an optimization approach for the EDHOC forward message flow that combines the EDHOC execution with the first subsequent OSCORE transaction. This is achieved by means of an "EDHOC + OSCORE request", i.e., a single CoAP request message that conveys both EDHOC message_3 of the ongoing EDHOC session and the OSCORE-protected application data, where the latter is protected with the OSCORE Security Context derived from that EDHOC session.</t>
      <t>This section provides guidelines and recommendations for CoAP endpoints supporting Block-wise transfers for CoAP <xref target="RFC7959"/> and specifically for CoAP clients supporting the EDHOC + OSCORE request defined in <xref target="I-D.ietf-core-oscore-edhoc"/>. The use of Block-wise transfers can be desirable, e.g., for EDHOC messages that include a large ID_CRED_I or ID_CRED_R, or that include a large EAD field.</t>
      <t>The following especially considers a CoAP endpoint that may perform only "inner" Block-wise, but not "outer" Block-wise operations (see <xref section="4.1.3.4" sectionFormat="of" target="RFC8613"/>). That is, the considered CoAP endpoint does not (further) split an OSCORE-protected message like an intermediary (e.g., a proxy) might do. This is the typical case for CoAP endpoints using OSCORE (see <xref section="4.1.3.4" sectionFormat="of" target="RFC8613"/>).</t>
      <section anchor="notation">
        <name>Notation</name>
        <t>The rest of this section refers to the following notation.</t>
        <ul spacing="normal">
          <li>
            <t>SIZE_BODY: the size in bytes of the data to be transmitted with CoAP. When Block-wise is used, such data is referred to as the "body" to be fragmented into blocks, each of which to be transmitted in one CoAP message.  </t>
            <t>
With the exception of EDHOC message_3, the considered body can also be an EDHOC message, possibly prepended by an EDHOC connection identifier encoded as per <xref section="3.3" sectionFormat="of" target="RFC9528"/>.  </t>
            <t>
When specifically using the EDHOC + OSCORE request, the considered body is the application data to be protected with OSCORE, (whose first block is) to be sent together with EDHOC message_3 as part of the EDHOC + OSCORE request.</t>
          </li>
          <li>
            <t>SIZE_EDHOC_M3: the size in bytes of EDHOC message_3, if this is sent as part of the EDHOC + OSCORE request. Otherwise, the size in bytes of EDHOC message_3, plus, if included, the size in bytes of a prepended EDHOC connection identifier encoded as per <xref section="3.3" sectionFormat="of" target="RFC9528"/>.</t>
          </li>
          <li>
            <t>SIZE_MTU: the maximum amount of transmittable bytes before having to use Block-wise. This is, for example, 64 KiB as maximum datagram size when using UDP, or 1280 bytes as the maximum size for an IPv6 MTU.</t>
          </li>
          <li>
            <t>SIZE_OH: the size in bytes of the overall overhead due to all the communication layers underlying the application. This takes into account also the overhead introduced by the OSCORE processing.</t>
          </li>
          <li>
            <t>LIMIT = (SIZE_MTU - SIZE_OH): the practical maximum size in bytes to be considered by the application before using Block-wise.</t>
          </li>
          <li>
            <t>SIZE_BLOCK: the size in bytes of inner blocks.</t>
          </li>
          <li>
            <t>ceil(): the ceiling function.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-block-wise-pre-req">
        <name>Pre-requirements for the EDHOC + OSCORE Request</name>
        <t>Before sending an EDHOC + OSCORE request, a CoAP client has to perform the following checks. Note that, while the CoAP client is able to fragment the plain application data before any OSCORE processing, it cannot fragment the EDHOC + OSCORE request or the EDHOC message_3 added therein.</t>
        <ul spacing="normal">
          <li>
            <t>If inner Block-wise is not used, hence SIZE_BODY &lt;= LIMIT, the CoAP client must verify whether all the following conditions hold:  </t>
            <ul spacing="normal">
              <li>
                <t>COND1: SIZE_EDHOC_M3 &lt;= LIMIT</t>
              </li>
              <li>
                <t>COND2: (SIZE_BODY + SIZE_EDHOC_M3) &lt;= LIMIT</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If inner Block-wise is used, the CoAP client must verify whether all the following conditions hold:  </t>
            <ul spacing="normal">
              <li>
                <t>COND3: SIZE_EDHOC_M3 &lt;= LIMIT</t>
              </li>
              <li>
                <t>COND4: (SIZE_BLOCK + SIZE_EDHOC_M3) &lt;= LIMIT</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>In either case, if not all the corresponding conditions hold, the CoAP client should not send the EDHOC + OSCORE request. Instead, the CoAP client can continue by switching to the purely sequential, original EDHOC workflow (see <xref section="A.2.1" sectionFormat="of" target="RFC9528"/>). That is, the CoAP client first sends EDHOC message_3 prepended by the EDHOC Connection Identifier C_R encoded as per <xref section="3.3" sectionFormat="of" target="RFC9528"/>, and then sends the OSCORE-protected CoAP request once the EDHOC execution is completed.</t>
      </section>
      <section anchor="effectively-using-block-wise">
        <name>Effectively Using Block-Wise</name>
        <t>In order to avoid further fragmentation at lower layers when sending an EDHOC + OSCORE request, the CoAP client has to use inner Block-wise if <em>any</em> of the following conditions holds:</t>
        <ul spacing="normal">
          <li>
            <t>COND5: SIZE_BODY &gt; LIMIT</t>
          </li>
          <li>
            <t>COND6: (SIZE_BODY + SIZE_EDHOC_M3) &gt; LIMIT</t>
          </li>
        </ul>
        <t>In particular, consistently with <xref target="sec-block-wise-pre-req"/>, the used SIZE_BLOCK has to be such that the following condition also holds:</t>
        <ul spacing="normal">
          <li>
            <t>COND7: (SIZE_BLOCK + SIZE_EDHOC_M3) &lt;= LIMIT</t>
          </li>
        </ul>
        <t>Note that the CoAP client might still use Block-wise due to reasons different from exceeding the size indicated by LIMIT.</t>
        <t>The following shows the number of round trips for completing both the EDHOC execution and the first OSCORE-protected exchange, under the assumption that the exchange of EDHOC message_1 and EDHOC message_2 do not result in using Block-wise.</t>
        <t>If <em>both</em> the conditions COND5 and COND6 hold, the use of Block-wise results in the following number of round trips experienced by the CoAP client.</t>
        <ul spacing="normal">
          <li>
            <t>If the original EDHOC execution workflow is used (see <xref section="A.2.1" sectionFormat="of" target="RFC9528"/>), the number of round trips RT_ORIG is equal to 1 + ceil(SIZE_EDHOC_M3 / SIZE_BLOCK) + ceil(SIZE_BODY / SIZE_BLOCK).</t>
          </li>
          <li>
            <t>If the optimized EDHOC execution workflow is used (see <xref section="3" sectionFormat="of" target="I-D.ietf-core-oscore-edhoc"/>), the number of round trips RT_COMB is equal to 1 + ceil(SIZE_BODY / SIZE_BLOCK).</t>
          </li>
        </ul>
        <t>It follows that RT_COMB &lt; RT_ORIG, i.e., the optimized EDHOC execution workflow always yields a lower number of round trips.</t>
        <t>Instead, the convenience of using the optimized EDHOC execution workflow becomes questionable if <em>both</em> the following conditions hold:</t>
        <ul spacing="normal">
          <li>
            <t>COND8: SIZE_BODY &lt;= LIMIT</t>
          </li>
          <li>
            <t>COND9: (SIZE_BODY + SIZE_EDHOC_M3) &gt; LIMIT</t>
          </li>
        </ul>
        <t>That is, since SIZE_BODY &lt;= LIMIT, using Block-wise would not be required when using the original EDHOC execution workflow, provided that SIZE_EDHOC_M3 &lt;= LIMIT still holds.</t>
        <t>At the same time, using the combined workflow is in itself what actually triggers the use of Block-wise, since (SIZE_BODY + SIZE_EDHOC_M3) &gt; LIMIT.</t>
        <t>Therefore, the following round trips are experienced by the CoAP client.</t>
        <ul spacing="normal">
          <li>
            <t>The original EDHOC execution workflow run without using Block-wise results in a number of round trips RT_ORIG equal to 3.</t>
          </li>
          <li>
            <t>The optimized EDHOC execution workflow run using Block-wise results in a number of round trips RT_COMB equal to 1 + ceil(SIZE_BODY / SIZE_BLOCK).</t>
          </li>
        </ul>
        <t>It follows that RT_COMB &gt;= RT_ORIG, i.e., the optimized EDHOC execution workflow might still be not worse than the original EDHOC execution workflow in terms of round trips. This is the case only if the used SIZE_BLOCK is such that ceil(SIZE_BODY / SIZE_BLOCK) is equal to 2, i.e., the plain application data is fragmented into only 2 inner blocks, and thus the EDHOC + OSCORE request is followed by only one more request message transporting the last block of the body.</t>
        <t>However, even in such a case, there would be no advantage in terms or round trips compared to the original workflow, while still requiring the CoAP client and the CoAP server to perform the processing due to using the EDHOC + OSCORE request and Block-wise transferring.</t>
        <t>Therefore, if both the conditions COND8 and COND9 hold, the CoAP client should not send the EDHOC + OSCORE request. Instead, the CoAP client should continue by switching to the original EDHOC execution workflow. That is, the CoAP client first sends EDHOC message_3 prepended by the EDHOC Connection Identifier C_R encoded as per <xref section="3.3" sectionFormat="of" target="RFC9528"/>, and then sends the OSCORE-protected CoAP request once the EDHOC execution is completed.</t>
      </section>
    </section>
    <section anchor="sec-security-considerations">
      <name>Security Considerations</name>
      <t>TBD</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no actions for IANA.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC7959">
          <front>
            <title>Block-Wise Transfers in the Constrained Application Protocol (CoAP)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="Z. Shelby" initials="Z." role="editor" surname="Shelby"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful transfer protocol for constrained nodes and networks. Basic CoAP messages work well for small payloads from sensors and actuators; however, applications will need to transfer larger payloads occasionally -- for instance, for firmware updates. In contrast to HTTP, where TCP does the grunt work of segmenting and resequencing, CoAP is based on datagram transports such as UDP or Datagram Transport Layer Security (DTLS). These transports only offer fragmentation, which is even more problematic in constrained nodes and networks, limiting the maximum size of resource representations that can practically be transferred.</t>
              <t>Instead of relying on IP fragmentation, this specification extends basic CoAP with a pair of "Block" options for transferring multiple blocks of information from a resource representation in multiple request-response pairs. In many important cases, the Block options enable a server to be truly stateless: the server can handle each block transfer separately, with no need for a connection setup or other server-side memory of previous block transfers. Essentially, the Block options provide a minimal way to transfer larger representations in a block-wise fashion.</t>
              <t>A CoAP implementation that does not support these options generally is limited in the size of the representations that can be exchanged, so there is an expectation that the Block options will be widely used in CoAP implementations. Therefore, this specification updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7959"/>
          <seriesInfo name="DOI" value="10.17487/RFC7959"/>
        </reference>
        <reference anchor="RFC8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration. Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="RFC9528">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Preuß Mattsson" initials="J." surname="Preuß Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <date month="March" year="2024"/>
            <abstract>
              <t>This document specifies Ephemeral Diffie-Hellman Over COSE (EDHOC), a very compact and lightweight authenticated Diffie-Hellman key exchange with ephemeral keys. EDHOC provides mutual authentication, forward secrecy, and identity protection. EDHOC is intended for usage in constrained scenarios, and a main use case is to establish an Object Security for Constrained RESTful Environments (OSCORE) security context. By reusing CBOR Object Signing and Encryption (COSE) for cryptography, Concise Binary Object Representation (CBOR) for encoding, and Constrained Application Protocol (CoAP) for transport, the additional code size can be kept very low.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9528"/>
          <seriesInfo name="DOI" value="10.17487/RFC9528"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-edhoc">
          <front>
            <title>Using Ephemeral Diffie-Hellman Over COSE (EDHOC) with the Constrained Application Protocol (CoAP) and Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Stefan Hristozov" initials="S." surname="Hristozov">
              <organization>Fraunhofer AISEC</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson</organization>
            </author>
            <date day="9" month="April" year="2024"/>
            <abstract>
              <t>   The lightweight authenticated key exchange protocol Ephemeral Diffie-
   Hellman Over COSE (EDHOC) can be run over the Constrained Application
   Protocol (CoAP) and used by two peers to establish a Security Context
   for the security protocol Object Security for Constrained RESTful
   Environments (OSCORE).  This document details this use of the EDHOC
   protocol, by specifying a number of additional and optional
   mechanisms.  These especially include an optimization approach for
   combining the execution of EDHOC with the first OSCORE transaction.
   This combination reduces the number of round trips required to set up
   an OSCORE Security Context and to complete an OSCORE transaction
   using that Security Context.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-edhoc-11"/>
        </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>
        <name>Informative References</name>
        <reference anchor="RFC2986">
          <front>
            <title>PKCS #10: Certification Request Syntax Specification Version 1.7</title>
            <author fullname="M. Nystrom" initials="M." surname="Nystrom"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <date month="November" year="2000"/>
            <abstract>
              <t>This memo represents a republication of PKCS #10 v1.7 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series, and change control is retained within the PKCS process. The body of this document, except for the security considerations section, is taken directly from the PKCS #9 v2.0 or the PKCS #10 v1.7 document. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2986"/>
          <seriesInfo name="DOI" value="10.17487/RFC2986"/>
        </reference>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="RFC6960">
          <front>
            <title>X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP</title>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="M. Myers" initials="M." surname="Myers"/>
            <author fullname="R. Ankney" initials="R." surname="Ankney"/>
            <author fullname="A. Malpani" initials="A." surname="Malpani"/>
            <author fullname="S. Galperin" initials="S." surname="Galperin"/>
            <author fullname="C. Adams" initials="C." surname="Adams"/>
            <date month="June" year="2013"/>
            <abstract>
              <t>This document specifies a protocol useful in determining the current status of a digital certificate without requiring Certificate Revocation Lists (CRLs). Additional mechanisms addressing PKIX operational requirements are specified in separate documents. This document obsoletes RFCs 2560 and 6277. It also updates RFC 5912.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6960"/>
          <seriesInfo name="DOI" value="10.17487/RFC6960"/>
        </reference>
        <reference anchor="RFC8392">
          <front>
            <title>CBOR Web Token (CWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="May" year="2018"/>
            <abstract>
              <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties. The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection. A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value. CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8392"/>
          <seriesInfo name="DOI" value="10.17487/RFC8392"/>
        </reference>
        <reference anchor="RFC9200">
          <front>
            <title>Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This specification defines a framework for authentication and authorization in Internet of Things (IoT) environments called ACE-OAuth. The framework is based on a set of building blocks including OAuth 2.0 and the Constrained Application Protocol (CoAP), thus transforming a well-known and widely used authorization solution into a form suitable for IoT devices. Existing specifications are used where possible, but extensions are added and profiles are defined to better serve the IoT use cases.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9200"/>
          <seriesInfo name="DOI" value="10.17487/RFC9200"/>
        </reference>
        <reference anchor="I-D.ietf-ace-edhoc-oscore-profile">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC) and Object Security for Constrained Environments (OSCORE) Profile for Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE</organization>
            </author>
            <date day="21" month="October" year="2024"/>
            <abstract>
              <t>   This document specifies a profile for the Authentication and
   Authorization for Constrained Environments (ACE) framework.  It
   utilizes Ephemeral Diffie-Hellman Over COSE (EDHOC) for achieving
   mutual authentication between an ACE-OAuth Client and Resource
   Server, and it binds an authentication credential of the Client to an
   ACE-OAuth access token.  EDHOC also establishes an Object Security
   for Constrained RESTful Environments (OSCORE) Security Context, which
   is used to secure communications when accessing protected resources
   according to the authorization information indicated in the access
   token.  This profile can be used to delegate management of
   authorization information from a resource-constrained server to a
   trusted host with less severe limitations regarding processing power
   and memory.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-edhoc-oscore-profile-06"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-key-update">
          <front>
            <title>Key Update for OSCORE (KUDOS)</title>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   This document defines Key Update for OSCORE (KUDOS), a lightweight
   procedure that two CoAP endpoints can use to update their keying
   material by establishing a new OSCORE Security Context.  Accordingly,
   it updates the use of the OSCORE flag bits in the CoAP OSCORE Option
   as well as the protection of CoAP response messages with OSCORE, and
   it deprecates the key update procedure specified in Appendix B.2 of
   RFC 8613.  Thus, this document updates RFC 8613.  Also, this document
   defines a procedure that two endpoints can use to update their OSCORE
   identifiers, run either stand-alone or during a KUDOS execution.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-key-update-08"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-key-limits">
          <front>
            <title>Key Usage Limits for OSCORE</title>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   Object Security for Constrained RESTful Environments (OSCORE) uses
   AEAD algorithms to ensure confidentiality and integrity of exchanged
   messages.  Due to known issues allowing forgery attacks against AEAD
   algorithms, limits should be followed on the number of times a
   specific key is used for encryption or decryption.  Among other
   reasons, approaching key usage limits requires updating the OSCORE
   keying material before communications can securely continue.  This
   document defines how two OSCORE peers can follow these key usage
   limits and what steps they should take to preserve the security of
   their communications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-key-limits-03"/>
        </reference>
        <reference anchor="I-D.ietf-cose-cbor-encoded-cert">
          <front>
            <title>CBOR Encoded X.509 Certificates (C509 Certificates)</title>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Shahid Raza" initials="S." surname="Raza">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Joel Höglund" initials="J." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Martin Furuhed" initials="M." surname="Furuhed">
              <organization>Nexus Group</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   This document specifies a CBOR encoding of X.509 certificates.  The
   resulting certificates are called C509 Certificates.  The CBOR
   encoding supports a large subset of RFC 5280 and all certificates
   compatible with the RFC 7925, IEEE 802.1AR (DevID), CNSA, RPKI, GSMA
   eUICC, and CA/Browser Forum Baseline Requirements profiles.  When
   used to re-encode DER encoded X.509 certificates, the CBOR encoding
   can in many cases reduce the size of RFC 7925 profiled certificates
   with over 50% while also significantly reducing memory and code size
   compared to ASN.1.  The CBOR encoded structure can alternatively be
   signed directly ("natively signed"), which does not require re-
   encoding for the signature to be verified.  The document also
   specifies C509 Certificate Signing Requests, C509 COSE headers, a
   C509 TLS certificate type, and a C509 file format.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-cbor-encoded-cert-11"/>
        </reference>
        <reference anchor="I-D.ietf-lake-authz">
          <front>
            <title>Lightweight Authorization using Ephemeral Diffie-Hellman Over COSE (ELA)</title>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Mališa Vučinić" initials="M." surname="Vučinić">
              <organization>INRIA</organization>
            </author>
            <author fullname="Geovane Fedrecheski" initials="G." surname="Fedrecheski">
              <organization>INRIA</organization>
            </author>
            <author fullname="Michael Richardson" initials="M." surname="Richardson">
              <organization>Sandelman Software Works</organization>
            </author>
            <date day="21" month="October" year="2024"/>
            <abstract>
              <t>   Ephemeral Diffie-Hellman Over COSE (EDHOC) is a lightweight
   authenticated key exchange protocol intended for use in constrained
   scenarios.  This document specifies Lightweight Authorization using
   EDHOC (ELA).  The procedure allows authorizing enrollment of new
   devices using the extension point defined in EDHOC.  ELA is
   applicable to zero-touch onboarding of new devices to a constrained
   network leveraging trust anchors installed at manufacture time.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lake-authz-03"/>
        </reference>
        <reference anchor="I-D.ietf-ace-workflow-and-params">
          <front>
            <title>Alternative Workflow and OAuth Parameters for the Authentication and Authorization for Constrained Environments (ACE) Framework</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   This document updates the Authentication and Authorization for
   Constrained Environments Framework (ACE, RFC 9200) as follows.
   First, it defines a new, alternative workflow that the Authorization
   Server can use for uploading an access token to a Resource Server on
   behalf of the Client.  Second, it defines new parameters and
   encodings for the OAuth 2.0 token endpoint at the Authorization
   Server.  Third, it defines a method for the ACE framework to enforce
   bidirectional access control by means of a single access token.
   Fourth, it amends two of the requirements on profiles of the
   framework.  Finally, it deprecates the original payload format of
   error responses that convey an error code, when CBOR is used to
   encode message payloads.  For such error responses, it defines a new
   payload format aligned with RFC 9290, thus updating in this respect
   also the profiles of ACE defined in RFC 9202, RFC 9203, and RFC 9431.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-workflow-and-params-02"/>
        </reference>
      </references>
    </references>
    <section anchor="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <section anchor="sec-01-02">
        <name>Version -01 to -02</name>
        <ul spacing="normal">
          <li>
            <t>Improved content on the EDHOC and OSCORE profile of ACE.</t>
          </li>
          <li>
            <t>Admit situation-specific exceptions to the "NO-LEARNING" policy.</t>
          </li>
          <li>
            <t>Using the EDHOC and OSCORE profile of ACE with the "NO-LEARNING" policy.</t>
          </li>
          <li>
            <t>Revised guidelines on using EDHOC with CoAP and Block-wise.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-00-01">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>
            <t>Added considerations on trust policies when using the EDHOC and OSCORE profile of the ACE framework.</t>
          </li>
          <li>
            <t>Placeholder section on special processing when using the EDHOC and OSCORE profile of the ACE framework.</t>
          </li>
          <li>
            <t>Added considerations on using EDHOC with CoAP and Block-wise.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The author sincerely thanks <contact fullname="Christian Amsüss"/>, <contact fullname="Geovane Fedrecheski"/>, <contact fullname="Rikard Höglund"/>, <contact fullname="John Preuß Mattsson"/>, <contact fullname="Göran Selander"/>, and <contact fullname="Mališa Vučinić"/> for their comments and feedback.</t>
      <t>The work on this document has been partly supported by the Sweden's Innovation Agency VINNOVA and the Celtic-Next project CYPRESS.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+V9W3vbVrbYO38FqjyMFJOMJTuOrZlkKktKrMayVMnOpadn
/EHkloQxCXAAUIomcl/71N/Q9k+cpz51Tv9X121fsQFCsj0n7fD7ZiKTwL6s
vfa6X0aj0eBqO3k0GNRZPVPbycF8MVNzlddpnRV5slvkVTZVJf2rSs6LMtlf
XMIDZTpL9rLz80yNXqjZbJ7mydGVKpPdo9P9ZH1/78XR7sYgPTsr1VWvQfGF
wbSY5OkcVjEt0/N6lKn6fDRL36mRml4Wk1EGw4wm8Ap8WauqHkzSejvJ8vNi
UC3P5llVwXj1zQK3sf/628EgW5TbSV0uq3rr4cNnD7cGaanS7eRUTZZlVt8M
ri+2k5c73+8nPxbluyy/SL4ri+Vi8O4aBshrVeaqHu3hUgaDSTGFB7aTJSzp
6WCQLuvLotweJKMk4SUfpuWkSF5ns2KSDhL4FCU8fnIA4Nh5Tl9UdakULPig
Ss//XJTT6iKtAWxbW/TrBBa0nXyfVTW/DhPCqKf7o80njx8/TE7rYvLuspjN
5cdlXpfw/Om1mqqcvlPzNJttJ3Ncx7imdfz7MhtXajDIi3IOwL5SsODk5Nvd
r7a+3NJ/Pvvymfz59MnmI/nz2ZdbT/HPg9HemE5hUpRqVFT0HzqMbYAuAN4f
d+vZ0yfyJwzwUP588uyJ/vPpo2d64mdwJN4U6USfs8yzKIvzbKZa1/FO3YyW
iymgQucjs2ye1VXwSKVGk7OiHKkc4TwdTVRZe48Q2uEp/7WxyGtAlvNZcT1K
8+lokZbpHEYfAHbjCcLDp/svv91O1v4JNjn6CT7/vDYYjEajJD0DDEgngEyv
L7MqAWRf4p1IYJ9XcB2qZNK8FxfLDPEuqS9Vkvm3qDinb3GNODfcBTVNYMOJ
+mVymeYXCgcGrClmd7iyY17qPJtOZ4A4n+E9KIvpckJTfpb8+lmGX7wfDPqP
mfz6q6DU+/cJbDxNZtnFZX2t8P/7rH+YqGqhJlk6m93Ada9VDkdG4FlWAJac
AAegzXL4upqoPC2zooKt7ME1F+BN1ZWaFQsCOECOVjaEpeTL+RmsF75C0Cd1
scgmVXKtSpXAgBUMCKecTLNqsqzgX/BKleC+L3Dg87KYJ0DhMnVd6fMwQGca
BRNX2UVOo9DjwSkCPmRXWZ2papy8vlSVvwRYEoAGoDvFeWGPRX4BMFgAtsJu
aW9FC27QDmEP8GsJj8DByKNmgQA4uBhqdj5OXsA9UEP8+SYBGpnkRW33jA86
RzhMri+zyWVS4vHBYs4BjyvAXpiWTun8RsMc9rYE/NATwoHs1PRDBRQzqbM5
TGkWXpQEQlhnuljMEB1wI8tKD8b7MYsvSnl6jX+YZWdlWt6sJXD6ZzN8CfZG
+DFJc9xOhTMB+lwAMYQVLGEHDOkhnc11Npsll+mVIjDB5cdJ54htBeyD6C18
A+zh4rJY0i6yMoQ6EgbY5AHAv5wi1AtYL+AdvDpfzuoMHoYNA/IuEIPhW6BQ
COUCbgwgAK0jBYhXFY4pGFUYlCDcu4Zbhv+Fsc/TSTbLYG5FbyKpaCCCRS88
XZfqABBnagKzOKDwcL1iCMimQ+KUngkY2lBvnMBhp8klYMlohpeP0EtPBCj1
lyVcD1ojncccGFf2V8C2M7in1wDGz5MXsBw6ShhzUuA0SCL4vBFKtJBroB6M
uGcKHkJ6cJXOsikfK+KIg05AXgAEAO0rJdcRMMgbUI+HYPcHxPuZVbwBJGPB
/ajUZCRjjC5l4e/f0z72kVFOZCNToJZwtRGdUDBJ5sB/ZnA611kNd4oIXY2n
O1NpSTc8V9cukcQ1TkpFhCGdwTKYxsE+1C8g1wRnsHLJtIgRL0KW+7xM88kl
MMXi/HzIZBGu3QT3xlvIgGnO8W+G3Bx+SS+U3gNwRFjocpaWsB3a6gSPHQS1
jeRc1ZNLXu40IagapGnf4u/p6Qxe95ex/wuKaEBgdkgYy/7Kb+6BVAWsZ2dv
A0iAmleaXsGW62WZA29DtrOYpUDqkrKYEQdB1LzX4nqAWOAzQkiO7BY0cgA6
4CVVQJyY2jFUkSjQsnYd5rbj4PKxJoXru8XOsXBZlOyQyyJPnJ9luRAmPJfn
IBG+G11nSE/ghCs4GpYx8HV5G4RBJPCLAlZ4BguqiwtFDIRGwNUUC6DbdE95
mRbptFgE9+ucFksAaJcgYf+rYXdmFk3g+uyz5LUqAfeKWXFxk3yGAkltv3iP
opUiIeIaBexk7fDN6eu1If83eXVEf5/s/8c3Byf7e/j36Yudly/NHwN54vTF
0ZuXe/Yv++bu0eHh/qs9fhm+TbyvBmuHOz+vMeVZOzp+fXD0auflGuOXS3uR
4sEVP1MkzZTAJGri8AMQFiZldsYQeL57/L//x+ZjgMS/Q9l6cxPORv7xdPOr
x/APpFVC53I4Lf4n0sIBED2gHzgKCE3AAhfAJ2bMQarL4jpP4FAV4t8/IWT+
eTv5w9lksfn4G/kCN+x9qWHmfUkwa37TeJmBGPkqMo2Bpvd9AGl/vTs/e//W
cHe+ZLQA3Q+5MhyE+gWpLECZD+E8nQMjTTWWAz4xJwSWN1ELYJGlmqXyeEQU
8WSje95YPsXeVxSvgsceD5hHydJONXPEQd0VfI/8Dy9NlFuJYlIplvY1xydB
APhUhULDfI5yXgaCXS3csgSh5gLoF6BaMmHBFARUVQ4ZKUkQdJaQotQA/4eP
gMBVJVcZ0BoUZG400EHMneGmzor6chtp5GsDdMP23WGIQejnGuwe4UePtq0C
ZbLJbGn0rHd5cT1TU1BAYA2wQZGggaiQfHimYKudMgQMOFbjYXJ2A7wRjlGr
BvTQ2/1fFkVZIyLi3QchDtZ8XguxB2EM2cP5cqYlHs2BYvw9Wa+UArw4lRN7
PN7C3ww6ojr3fJnNaGsFczkQ3K5Y1AfIzIBe429wIQCEFT9TKrwrILOlKCam
FWumcLS5htClg3nhuaAMGxzBUHNYloX5MPIbK9+yoFUZSQsUBVQTcW58dVFk
ec3SNGnKgItAQHFNSDhJ8E21/uJsCgheESAxKyjAbWhoQt5kzVluRetdA02L
wMGoQwwFB5wDESiB6dMmSfGH6WnklK7GAveCGvDp7tHJvjEzIT2o1S81X2C0
sgDpxiEYEKVaIZEGh7wz3mwc8iuAbAkrncErQ6tihTJ7aa7HGYs9BAaeLSNt
iWgcLycpCPGbh6nGF4Dc8BzyWSvOVnq7mjBWrHYKNIrSPcGQKhDlpREUil6g
GsDtX+a0nBAgLAcElO45y+qaDn4WEjlBLZEQAlKQMjU6hhOWS07St9JH1KZ9
JKdEwTQrF5lRgarwI2oRpwhUUGvesfpuFJMISTxOFssSZGh4h3QwhbMBo0on
CJY6qsesy0HAaC0Yt8Hrv4bJL1SOeKCR7HRMgMibiymXiCmkdXgEJ8L4rFBI
mIIwHCdvFsggDBkDDqAJmafIm7FFLbwu6H2tnbHID2wUxRdeTRsYaD8kX4nF
JUQWPHAUTCeXoJmwaHmeXYzMVw0ceU8yUtUgdY2bSdBFDAg0xcHgv9hPkqbV
1cVAYyZ+9uh4HWjoAelzouAM5DkNiwE/lySj0TdCOyKsjn7lJ/EvDT+A3sCd
wSM3WZ20fcLx3V0Nft1OPusEY0Ieha/XXsQgeOpC8EUa3t81oFU1KhQj+NdF
/vXaRCGzXIPruxMegrmzof6P1Fv9ks7J7AI/pksmz63KXLILEu7bn+yIwBaz
Eo1+MJIegExoLdSC6Tcr9miKLJYl6r64RxmakQVoQ6muindKGxWUowRaOlLJ
W0N94qBPI+cjxuY+hsy0YcWAB2VSvP9E2+G/7ZuH41GZuciaZRsmxCLNsZgM
E+GM9uZvjOHw2JjEnLuFzgnBTKfTDL8kmy6TO71cEiFgR1VdEPBBZUS7SJGT
GOOs2FhHS2YJDUm3jSkgMn8gR2ijRnCYZG1Mz0nFY5S7QYFFmIJACN9HWVsE
EgJDu+jQhGV8XUILFR+3DCamUTwyLWDoX9IbJcIxmjwrst1oLQdl/WWu5wNK
MkHj5k4CKxN+Xyen+6+jUKiAIKgpM4g0t0iCxlh9T4HPWCAFt3W6VHoZVp4D
/a0CVk9WE5wYMalEDomYjZbW0VSxMQC+oKvLK0JD8+9h9+57dAeBWaCtuLpk
sQfPClcB7KYA5jdLF3Rn5mT7RQ5IBms0BpdTMb0rsuwpX+RdFPBnpiozJ+5W
sY2UdAFehFYl6KhUTkZWnIKvxwK4LDL/SXmzqIuLMl1cgtjKviw+MeBRy9mU
sA2kj0XK7gmWCbxFitEfnQZoZRZe7mEercEIcOnsooA/LucV4GyHSa8TYQnP
Zb0k4/rGnRXuOlJxf2RTLFyTS7Rn5FWUpDgEmYxrCgT3tBK8QWzZBMp0HuDS
BKkJS8WoZSaXxYwFs7x500BfojMBmr5ItsbJEaIzKulDZJ7+z49gPuCcnycv
4XYsK7GFoVRXRdg9XUe2Tjq7QPzULJouGJNaNZuidAPf/A4pPshXQB/b6BA5
k3K03tJR8XV21MnTmPDWQbFLNVFWZvBfw6eACsHaCtiqWDtJSmQji1CBm1aa
6ckjp7j0FInjUOYGxK0yYqinoS705Tim8tIBvLYArZYLVLlRrEWVhX3GjncR
2SIaysicjFyYNBXQzYuSzNwRaZjPMSoAs+gP53Y38o6qAhkLmBxHVi+aaLj+
5Ps3e0enPayu1l9Ot2tr3LCX0HGTAtA2F9IweBIpXs0YvxnHpMxxgskgAJOP
CJ34uhkWsXMhtBA6ENsZcw4Sp1zthe8EP9y0bBBlEzFbXMV5kZwvS1adJ1bv
Rv6ae7QjuokmNXkUPSaX6DGiVqH1gyfX1+GgNkolnkPz207qhAfmaZFDI01Y
8nUnAhUopWci2QKVcA6nmJCwMdWqbtygBqLeG37eWtS826CpxQuPUpALmc7J
mXGu6stiWm04APoHVIg9+bhVG25dwH3U4oauCfC/lf9dDZq66aujwU7JnM18
RiPUeh3l2h3UPkD69aCpPNOHb7Uo2BHlXCLVDE/6Y2RtzudPjT+cD+2v/d3b
xh+Nd3/eP73HuwjPqz7zdu8tOsdeA1sHB5osJ3hsfQYhl3eIEMIHAeR0jv7n
Qc8123m7YR881wpn77kOmHrP9fncDk6WuYXbRxjvLvvt99zH3S9agfR+G2ji
PEekVE3jeGARwhAQPDwiIkBrmHw6HL1BBlbYuFzKGDVwgfRCRLFhi7i7pStm
0QCe9Zzs4jvET5ITDGZYYeioCxA9AnOHpwlpB4lhObRWbeza2d0HlpLOFa6S
FWTfhkT2Gi8EIwjJU/lVVhY567/sLd16+FA7PT0p0FJd/EkEQgkEJbDCYuKS
blv4qNUkpwXutyqGpKcIB7ebTjEYCs4HpyiV2O4qVWIcxvrJ6QboiBXxbKvZ
6MdY3fJUImewySwjp3+OL1DUU2UMMfi7Dzs94w7MiFoJnzOdoY5kEYih4Y9/
LRkL6GwmOkImskwtOZ6ceqFkKEsuzwDRuq2DpEXSXoYU8wzHtfPm9Yu3ZLbb
RduQuDFTeGAXbtisSKc8vLsLbZLgRZDFSQZHYOgoEjGMor2IpEAtIQLrzm2Q
jBG4Tk7ZSOsIiGhr3tmjGCDExit1I7ooBkVoI7LWVqc2UjQQx8bJjlUMtT6w
c0or4y127bBAc9dligZTH4Cs1/KrjuK5IoimJfyYcJyi6kEkAVQzYCG7zor7
FMqb6HwQl6Cjw3m31Iikra5ORqus1JbAVh/WKt9mslObA27AOXO8hL733ErZ
DZ+dFu5c61/LNgKcNkoX6laoYnn3e+Lc1ksVvX5IQVh1DtXlhsHOv9n6xk+1
Wd4FAxMfz1yLond9rcSa5dC40l1YqE71g8hL9IInRcR1mNZxytpmRe85Z7L7
+qcOu7q2eX5q2zdBWWzQ/N4cw4RxcS0rY8VfO+MBNNEQt0DZovhTzZTZ+tTq
a8hFg54Nk8VsWTkxFuz/aVwYc1tw1UHUhVayM9bdxPeFkMvqht9q4/9x8+zr
CCkB7g4M0cT6ig1SNo9HrEFyo2pDRWRrgp7pNR85vtsE2ke2DeMZ+rZh+MY1
vbTd4X9k2/CWwba7mVd72FQFQVdZIqO2UTg5szDPysTD9DJOtpHPrLqLidK1
k0ZWMi0Uo7pZks91kVx48DUvCKBlHBB6JLa45V5/YnPoeVSawHWKPUozF3cr
YirVOmQY+lZVxSRLDVqHEwxDobvtwDycpxAgEymnJ+N9gKJc1EqkE2Icnpjm
cpEeitUw1DcoWSvYFLK9Qq5zZ5ja4/FjCkxdrZ9t6M34FzOdcFC0I2OZG1ac
YZhpZSkOPgNCORtGYzoThreRtG7DeH11zRHoTk71ir7NKEChl7H+8QrcYryC
1cxU5+lbace5GQEGIrmQJUYF1ON+Zn2cqq9Zvx9v+WCzPlOH1ab5u5/N47Hr
E/zNWvXbALvSqo+40FtXahnGiDWwEthSP4WgnzvBt0J1hNh5q5Y0v1Wuhkb0
V7evwZlh4OQsOtaM4QAZ2T18E6+O0N5t3RJNn4QlqPjLEVEygrvxTSRkv/Tg
wJ9IrLV8xBKReg+yudRKtX+UX8MLY90fDvUMrK4RU6zHppg96QmcNdPnT3aY
Psblts/tJxhmtWm/xzB9LOE9hvmQjxkmFI8c59ZdhtFpwJ44dPdh+s+8Ypjf
Ft78lg684QftcJ90DNPAmVGnP9U4Sj0H3K3jGfXnCWhfzLXqLOoDYeMM033g
nf5Zf5guQtHpbnWH6cab3sN0f3oO4/plYzjTc5hOv6znmu0YJubib52x9y1e
4ZjuTf7tOFHPdG9ycAe07uv/veuo/WF3t0c/BQRcj3AnUevrFP7EfmFPxG1J
fxC/7WtPul3hMwa07e80Tl5TWYFDyugnl+BLXUngFSDvju/h23UqCWinsVcS
ACO+tcqkZhnX+egoRwDbsGpS5du63FIvIjCyMkSmi7hnb84KhhjTbbbZdSqp
ncc08uQvy6zskd3Bp+Aqct+6cef0CMeok71qlrG54DgplvWoOB+dIf04u3GS
PCSjDQMMA0ehN5hx4JzdhMaHdt8jQ+HY8YWW6HUtAu/l2y3EJP2PR2jyQNhK
MQmkegd7rNecEP3T/zqgIUUB4uXC6ij9jgwBSCcVaRVvTg6sTq503QUbC27T
TfSGS1WXmTLqQWAcejT+cvyoYZvdwbyWdmiQfWp10QeA8mwqVR44sVd5vmAO
njcudG/buEmzKwF7xuocp7SIq0nM7nrMyrhrz1aHMGhzlY2p6BfFgOk1NhBf
ivUItMnlRavCtHFkxwjD9dQL12+NJ9CVMSxQXHjA384od4gVEDNKm8NUe5DY
lmfjrIMb61m1JHlIZz6hk0VMTGiU4qo/bOZx6negBahyQroTLsCjE6JNTjBW
jsO1E0aIaSrVu0VDFGa3k3G1VhzGgkXO3r/3XAOxwmKA3Rzq4t7gdRKIO2C4
4RCZ+jIrKeUYszMMLOV3NMrBVQB4klFKbp4FKO1Hl/ER17RTRiW1Dhw/JoJK
VhkDuu9fD+qjNA6KcrfkclEZgOwcD4urG+kfOG+WstlkowymOW6KXAY4igyi
vXpjSgFUv2BlBrJYEZW2udpoYlvmflUxzH0Rv7hXYcMSpL3xlx45GgpJ0yCm
ChA4wGW20E4rmAZLBRAbh9WOblQ90gcG+MVZ65jc51jR0OhWOl4s2hsah0E6
Jfbg8hlKNKM30AV9wUS5kYSKmJn56dKcGAe40jUaVqo694/K2NepGpZ2H/Ai
08qYAqYGL5cwzQwP1lSMCZzKmmLq7MlMe1ErN6fyOLkgc76tvNDhQuUsOrnu
TcTjrChtgk66b5nNIFyvNoJEQ/SS08YxRo0QEcURuneBTwQfCwSJ7NwcbRsJ
GdqTwgUYyiMknS2j1aUJHLJvEiswnv/mnqWOGK/RLpF8Nv4enekp/w59TZoM
9oEan5ObYaPLGqC8UswX8C6WGrBgovJo58saE/0NZ686U2qi8JakkJSiCDjZ
zHnDBCxZscbwMIOSmGo7pe1Jtbj4FuHAjfj0hRWdJBCnSxDDJNdSVZV1OTGS
0vkhx/U3QZKslpt43ZKhXSVYzXNGaMg3ly6BQ8dbifhhKO+sFJG964TIKEmO
bmyPwxaIPOqUR0/cN9mYtoiKEHqNCp+DUjd6ub9z8urg1XfbYRAUQIbGvfFW
RAMEnIXiL9IZFvi58UgDuSsFEgighUkIHQLtwmoZugpGJQTflLYZGbnA8JqK
mA2XqeGyHTPgJHjl0FeiU0FJ1KUiduKqMsR+yewZzwkXeBgjXFj+JsuXqul/
l7JgsmUKi2kNmsF4Ge2OPNYZu7Mbn9anla+WWCmPpT6WAAE+Bum/sHpEYTLE
RVD0Ai6lIg/Nr+mg44jQBXKOEU6I7VYgkHRWJ/rIC57Zt2eBMWX2PM50uUn3
KPyzHTq18hqqhfUp28z0xFS41ZUK5KZmtUVlp1icEsBiCBbqtyhv6d1TdJCD
ocg8A3QYJ6dIxhx0A1IsrnwtNTp6JwmDtKqrAt4TEYhXwEnmlalsZ3EEwbGt
HdW5FQeny1K1BJ3aUri6wBVD7yAHOKXoDH6jqU/ViKwFksgXy6KOpUWrRGBn
shNmWnBVfjC4OdY7oPi6YNqhp/Q59E/AhYXAqqUKtHmVlwCrOee3UyD2j1pL
4hjiqhHqblGEa2L+QCjxw++6ai2wxPBaZPLUE6xJEpx4NX5lxUMANBI65Kge
KU3WgSKckwBIqLjh42CGxVynTRTkdwM0DMA49nHlbortXSP1XexqD7TdJa4U
U+1jkd2Vyms/4qN1/FjUP2uT1nig9etqpXYdxa/OeH9PLgjc94HBIu1xeXaH
rXr8HXDPNxhweMHdsBC+DVGPJa4Q9RrylJUG9QF44Wk6UGhKRQaY5nmqIfLp
gCkQ8abf+ohBqAu5tVkoVMGcQRiz7chCN8malmvWXC5ratt+gNSjgXoc4yur
JZ+7CCUtwXRkUeFxNsdkGWah9e8gWfCsWzgrkMTJu8oIl0bfEmicKV4q8Vpy
+5AJIgz0DYvW+LDWVhtPLGtkiDghx7GYRVjwI1xwWsMGsJ6ka8JiViAY7VhV
RLg3ge/mluIcwGl0yGpQ9ycWq+QtT3ZntFpzZn12Ctpb6ZiVNYmYFguyUjn4
P+QIvqUuL9K0BWFBVFuvRSpxorYgQfSCBBOJf5K5ivyisGzKFFwkIxLb9Zxa
h0aEtwaR81C59C3TFZqmCRZ7jeBhPqTMHIm1Ct/xQLh+HdMjEjWyFuZ67Ce+
xRw0xE2Rgb6noolt+QVB9NWQzGSWEVbWkKwJcWiiNll7f7ekvQPJLmAYB5kl
ztpNNtrx/v7JWwx+W5XKh7eeXBvDqFjgD7jrj2cSuNCCHAtD7Z3O1y9fTzaF
bjCvGDMv2hE/O4WG9TZJYKOfSd8JjRObD4EGrwLfR7m0bZ48vQsbsOwNSfZG
7cfA5JPMkPS35Hli3jD0r7hTm9WJrNR5qzw7gOc6LaeGF1JynS5mZvYQUWo2
dG6FNFLACpuV6j2O0VdACrIUE3CqkfHWzFH4UUf97pyyECn8NytR3/QSDX3b
jgtS4niVbZfBBNaNgTbXhYmxLYpsSqzEccmdxfoLjeVPhtVU0jc+hGGWydmy
Nn5GwgK+Uy3SoZf2hoBCCqMFP2+5mp419xvNJNVAID4ixmyuBiaHS6kaFGOZ
mUYQIDPA0OJj0ALKUEK8uy5BQ+aQlYl7i5Lk/MPUscorL2po4rDxwTs6E+ec
Uroqg9hCH40PUfqvRCVyv/SK4XJOOwexaWKmM5n59d7qYtv2QlBd8rKumwbs
VpnOCc3nHdMhllx36wlqiyUmD8O1LbmHjlUMiEqxDhlpZKBVyyqSQtzPrZq6
jBgOc5bpgoq2vDaV8D7FWrjHnjvuwF/ToYa7Zv5t3QSC4t3az8UGX11Nji5o
yPaRYHYZAYIoDmqT8IWRXztiQVJ2SGlJtme/Bq7+jMnRlko+C/KCPUOBjtM3
fZRSq6bDHhCZs2pOqG0P0bjumQQZeUZ7Cc+lvQ5FUrCPX3eHwVh0nP6iJF0X
x11LL0qlXMkTqB7+KnZZzomW2HrMdZDDxn+6FiSu4sdePCefzglGWhubepV8
pJ5D00WwJM3mRE4u1Wzh99nJ06vsQnvHYkt1ynxxufAsIvYb6dqGQZg8+5h3
pIqFMDjrt1hK+bhB6x1X/yTXKheCRFh0NO7wJe9Om5wNb/KcPA2zIsbB5I45
s/HMI/1Mqw6b2NRZyoWpVhjhgvAeBhtVhmxkrWgaZutS2zx4EiC0+q/uDymO
rbFRFFZpiO02jDKxKzP1smVl5EKl4Exy07nUV+o2iCkIICJRPilluXEKhTHs
iqij+Znep6yx5yZFTotawTfGpq6nxX1cy5kJrlDSk4NL+wPpIGOEmy9kXP6N
w9PuEX53pYXuNLvIU3Sovi3Kt4c7uwwbPufeEH0UheiuE/GC0+AmTriGSbK+
e3oiPSyw7x9GKEkbMS2QWd7JwlgAmkIHFAHeZwsy7ZqmEGldc+0YeKc4j6jt
KKMJ00RZZlFmV7hIUHaDDlxEkvKMRVC23/ECLe9sppDhghelWnB5PxAurtJc
PKBrLuPFe372ZyCLa8n66fHRhsZ1pmATfF0vfeG2zrrqrDhCGwjppFdhVnO6
wGcOS7DxUCkHgcWcXTI3r1WPgQGwag5MMy0zVOqlAYlpyCFGTpxD9IOSOylx
nIt2q7qigg644kMmgXCaBIKLUIu4KAag+JYzlW0yrgsIoSWI4eVyUtsFkifm
ElQ07sFGB0lVso1DaCni0LYOM9FV/En2m4ovAYZx7U2yLOlIJanVtp+bbQHo
bE6sC4ZOuDO0dNLSkYcih3LAob3GPAduytCBBcq/rlhjm+1FTslFvp4nkRz6
edZDUyMGvbOVhXw+teiZOaVoLPfO8sWyJmWA2OAhQrGb4dGqpg7Zs5o/gemq
kJ9MLQqcR24CGllMfxW9G4+OihofPi9E26PTcVq7YUURIO06WdEV7IIOQrqG
tq+jSS14t9elKCIkbqkZ6+dALHHv1TKTWB/8VbW147TBR1XynVRX/+7tz1bL
t5YTqXnP3TcDGc7qkZ8Hta6q33XpAI1qtmRzpmF2JOReRBma0ULMFMwOIokP
zRLiV+qQGd/IsTQJcrHUAvI78u0FintYwKCkXmHvUI451ChASK0vCGB1QNWc
HiaI8tx7i2ICtcHbtM+x95EP16jFISULS+LrSQIKr9Lp21l6pmZWETdQCEEN
bLUAlv1X1Siz9Gj8NFY0GT5U7ptoo+fYvkqzGTr89K2nsCDQa2/Y8O3htGMT
oPYyh64+7VBgk5dPoSygAyD+zKRARW1Xb4KqJXhKL/UA3Yq8VgsDpPPkgnRX
Wir0ydDsIZ2MQCYsQeWVbYjvIBd7pdlETnErZgPrttQKIoxrNJV+pBl1RLpO
b7DiVUXhXNVyVhsqa/2t7dgXYIK2qTrrMDY6QUOnQ6vwgMblGfrE0IpwHu4N
zXL4lpmLkCsmek4Apd9FFXMVZpFQf6lF5Fw7srkIAZ2zoe46iILj6NbAYKX9
SFGSy8o0LrzF1Vmn1btKHMZtnNFQJByHlFFu5vqFVT7kxvfUPdgjd5ayqBw1
MyKOHjp6puijIsXTj+umsXoLY93wFq6PtgrISkOn33Fn8YYQhyKLe4i/tisy
Q9eLxZZgbxKV6Rrrdwy5McXQLKEcG7lBYxzKblbHpUiAoGUpRyzrfnpanj1L
J+9wArH/1hYMUdl6QW2wnRMQyZOjUGKwwS9ycl1GhUgpR2G7a8MrATXTocAg
wl2o0rZ3OLvZdupYYZz2cm5sAS1s0Q3Jw7e82EItQGemtpkL3WaBJ+dAhm5z
OA82ArGG7ahLID7Ufj/nDg67+6iO5pvv3+N8K57aGs2x8Zq2N3ETuQwtpaBq
zsS9wBCw2CqshwktSys6BW3YKr3r1lrdCxIxz1lSpcsyDRP50auN0TIddciz
DTpMAGvl9knTd37T1obtAKfXOb2ngvB2s00lMMr+0BHEbTyf0fk96wgIhcVU
aYOpTUhBQzsHG7SJxJzXoO0am3IfMawG0FAXEeqkeAYh8SxUhjTnCPk35ogG
N9S2cfE5Iw6/guSIFdBWpTUqFPmgImSIBJiPToY0thp30JLyN+rKIREEeTaC
VGJvEaN7hf3HY5j2uAemPb4fpj2+E6bZMNVWTBP1w8E1H4ke/92RaNgXi7TF
6aOd2xZzZZPDsPoUibCGZaVJWiPcXNNj/bQmnVZajrWp9U/d9z2dfU1HQIYG
0VBBB40XLoVZwrgL4exjbQiGujL1aCLzxQnLuoRp5lWbsmQRiwPUWbWsK3/N
ZKir0PZtM+08o4aDaq6IqnlVkNCGJ4WtsGgOaTG+Yp1Rq/THXVBR1c6KCFN0
6nxlHyNMskn1lVSJotEvYQ8jUKrVjLt88GxemVsMILI+QU/402p8UIDPaV7K
OaKpDsvxBrAI6+LRZ3AzjgHSP7inGTp09eWxR8LbN/82aBDIrOIXQoJ+jS7H
vyxFN1hcYgi/DVF6sXO6D1wOt8l/Y8i2/naUCLbLFw6TqWOm92MbkqfjAtk2
dgflxQ/fi8brRR2BHUqYjjfdHBtVI1inVZa0Y+4nUY6C+HD3BMkPhv5ddHpE
0+DDaCm3VfSHZ8WbYOYwdNWU63T06o4yt/FnHtkeTwHApECnhMbqyW2gjp+5
eUNZu6X4z6SVZaMmLuKf/q5Z8/bYNtOSwBfH+YjQ1wYJQ2gLCXfSwQP+MVqF
wZ5nkIBZa5gHCNDw55rsDphwXtmMo0p7NLOpRI4G+SukHRg/8FATFdZiRYI5
2j09NnsgX9mTZ08eEhXEoxcTmT6CRjys0zC4ecDPeiDB5qatmcrX3oYge6mG
psdoWFFZSieKNCTvSIKBRgRTfaVtGV/2XeqXtgquTuLyon6QNlMNnnaLM8DR
iw1i0mjr0FK6AMnSbqaVbsXN+oU2PuhAovPC5ZxiM2zUSkFbYeveVgPgCez/
iY0ypu+c/GdqdOlF57eE/zvnpK93igZRIfmULCW+utqmRYgJE59oy2MoYj97
oObQN1JgbOiWn5Nh4dsXqHxXbHsDXfOzSdU+MSmTutnx0/uKl/mDDTagwf9N
iVsiDs6NaP5bEBuhC8TgI7s/vk52ZxRAhLWJ1nd3T8XV//TRsy00t+gAK6aC
jYSOk+74id+75WWybMOQSs5Nr5RLK7sW6pbkiK7JLejiLRCO66uxYb6O0G5I
cCfxfdqXoj0dh+ZRncCVRgoqtItVserSXnl2LzrcT/Pvk8pfdd3ATsx/Brt8
ZncpaTnOdfxNZ3XYhLKw1k/LoT7se/L45LGT+7Kq+3awhU4Bmp1gfCpa2Aco
VYaNr9YwzIqNgUj0hyCDfdORujVZ5Cw/g8D3RFqmwW4Jo26l4bXugO6Gf3Yk
2rDbjAiC0Ym2Qp1oK2bK8dx8UYpsA0j6peL7LmsC5FuA5FumOpqFWyPi1NPb
mgM0QqrEvuC0rY2ZR1z151Oao0SacNKiomeacEwuJZyZtjmOScaCm46XinR4
lC1mG9K6ORod+inn1jzhm4fM9y136INRp7ljDliwaEKawHWa1RK/7NUYdwID
WwCBODOTdhbOLMGJZ26pAbf3ekoxVVQ5COmJCDKUs2ZDpmD684yaSzhhnEZW
iVoZ5GXCNElrIcHMzT5xK+Sh7C4RfwIzE+7XrNpDD9iSO3eLbSVK7QgBXqTU
CorqMFDHBLfhh35wwl/lQC0S5hkNU/o7XN//33wSnyXfWjujMWSHZsYeJewB
v0bWBOmXr/8olkkCpuPGczNMetvMW6re85sD/82fBus/JV8nNMCjDR1Uc2v+
+4DKpd52V1Nd+Xkw4Bqy/ctu70ZhdSvjfEjdbd7XbfIgLE78oLFq95XorzjO
bbJHTkoaF77/5jY50SYVPNdg17fJjoQR84/0K49jWcMt/+CjcjhO5NePua8Y
2DqBGqmdfa9xIr+2jNOzjHZknAcRiDQgIb90jUOHj+4dZ8rbhMSNm3Ax3ePs
Hhy/2D95vf/Ta3v+ES/WinE+1r68hZvPn6Lf332c+N/RcRqLv135d4RYPWjW
m+6xnnu9lIzDjzPMXgasvNaPf6dqedX9Xr7ddtgofrZbV0Osu7Ea+XbbVMQk
RtsxTOemtoNgt/sOE4DmfsN8NKT4WEja+NIlTLfR71vGid5VvV56qusJlyml
G5oNSTRtMPVtkHDaBASPg6tuFHl9+9Pv7ThN/chirh3nbENKknPxV5J/3fW0
7asI9gUfdxEtgI5A14PzbTLZaANAoadOTqVrLfFXvZ5gHPg0NII+63FWpsfx
L3xz5Q3KQp/mOKsgsE11L0ygH2fJbAfjjJL1dIMQZx1AxfG8pFO443iSvv4y
XA/8xL2bOUINPZqzYD3L3JhKSPmMjAPrARRiK2ClbYDhvnSsoaZ50fWQiYm9
F2TajMCHaGVA8bxxVt9THCd2XP44H+Nz93HQAjI6NrlrR5S7FqOr9/o8WNEk
wVeiTIME/OYlfXPg6E/PHf3J0QmOI/pTdFOSjxeLgfYCnDp6KfTSCrETd1Mp
vHNkSecao3pdYkoFDJIk1O2SJKbdMdLE/74aRHEbcPo/D6yqYzUVofBtL/nz
hHjb66erxk8dczV0Lz32N8l6FH02Bk1NKvnt7UprGb6K2P7WF61HPaCWfZTJ
KUagkuIMBmxKjGW1+nhjZ/wAq4Are3lQOl5pXRNb+Aavxr78ATaBdooelbli
X1oBZXOc7KGh0kYg4Raxbc0t1n8z+GnkJwyrqBxTAQ8jNd61CZifxZm+uWXr
5FWWel/amAx3GE74ZOORdi/oib0YKf2lDuhIvGGcICHT0Eu/4S1Tf2mtmH+M
WiY+AMT+/L3ON/zzvsOY5kPcMarfMOG2HfNLbDVtrag61tkcpv0ydFyTKzNM
86QemL2H9iVcb8SIxHizJbidifPTkAxAWPQo7lDe4O0f+MtbjBCSu0BS2q1B
P797pQsv6wO8td+5sSmJDBPblB3G9qCzwwTFhW5XHnhMZ7wloy6K2GgkN6u5
+zBOzMyHDGPDnf54/2FaDtw+1sTiNt06+HIVFjeGeaEkpoYwxtDaNnojiNwY
xkOZrHJWc4shdh4WJ0J1EYuDYdYcfAGq6g1zURTTIAAiYrYjpPTjqfxhvKCJ
rIrBUxvq/GgQfxjPA8tEHe+haxzWw/oFtNxh2myL0dO24V/u953otxJpPt4w
lvrdY5iQU91zmNvkyVjHjqlVV7NrGMPCk5U3/JNvKvy+k1D4w8Sb/f0bHPgK
zbgvbG6Tr4iUsADnNmOWn/+uq4n96D/Zf5jOtqh9h1nhz+niDHeDTeShB/4w
txjad2rL43t9j/RJ3VIY2K4ulXx2owcw49/qkL5xEvvcWpJOPZZMmk2oOXYC
xgzj1oSPvXebHKeZlMiW+EAdTesOE4RFRIaJhw6ymcVuygtriw1DjYZM41jT
csjfVBAE0nc1Y2+Y1gM3nw+7U/0/H02Bdof8BMPHN9tXPd/akNX0UUl6wKzb
4tq9FW8Y4/YI8jQp3ojs2ybe2wbV3ajagYJcEl1Eoy0ELxq8EwzzkTYVO6k7
g/gTo6X9+6rFBoUey4EpjRSL/7i/AfMBGtHELe/a0Naj82y0jXHvvX1a+1rr
bW145iKxNLTsDszwPndH2gd97x1HEZpNiPnK3Kp1jD3b8NNX/bt1+wHLi0Fv
JSA+6KVPB3JrijxM33FsoE1I8wpGudhgXvLKrpwts9nUhg/4LjHz0r2Wdw/o
3etquAPE//77EyQiR404sFZi1Iz1io652u1mvFTa6+b40dhD9SGOss8+S06l
YMku9VvDykCCK6b/+cpCArogSmsl67mqL4up18r3o9VJ0WUQOrpvrNyA04qj
mUZjf31vioPbbBPJFQ67cuheBr+JZhxuwnb3/rRWQ81PKeJbiuhTQbG2HhHu
s9iWgDJnorWvEFe5Gr+4Ub3S/07TjF4NtYJC+074eGe6Du+Jq5VzolKz90oL
gKRG/oJ83brBX6Nevsk+/TipmVTZr9HdchitkN+VDEaJpLaTgMW3j91JAED7
orjGvhu2Q4ITjlLCEih11wIqBoK3AQjywtlmsxWDdAXV83n98iq/dQWZnrkn
RKRXGhoFsNJ7o1CjTn6YOAmtyTmwXs7dCnpB4FNc/MErttisYhfvuWAIpSnY
SOl50QXHCr1xAW+/DJ+4McNmI812r7qlhp+e7LznJA1ipVJN0/k8sPIeJdUj
3aGkFeJTj2iyx3QDJfHNlN29Z36GXzCayjTMMi53SfcUV+JU7nSAmpBzvrgo
08Ul0ItmRXWvYUlyCEhUED43gc/KpMqlZoxOpOLyePw41Wr0MvDdM+CG6WWK
N0S63nCdDaYyTq7iJbcTWc7PuO30FW02KRaaHX7uncsUtj1B9HPLOecKF4/V
U30QhNlMYQNBWz/DqWCPHQL1eJTaGNRKbVa9NNl+lM0OJ7osMRFUPCRDCjeb
I0JKRqS/yDnWiaRaJSbt38i+lOzEZyLHKXlXRS4lnm2bKW0JwBEqDhk0C2tt
BSWKT6X7QzbQBAEgRRCooCSszKlFkZrkl7sBHhOuqe+aLYTg9QKlNTvo5FW5
aA5XuyUY27qf0VZ2YMZrkgeM48p0esicaoN9YM5FTbnMZ6kWSl69GyRI/sAm
ilKjVHDLK/ZnjtG7pLMM1CqpnjLDUhplcp1W0SZDlChbzrkdje6sJITVk+Ya
103lF9yEhuPDuKrMMKlu8sllWeTFsjI1mrXc1At0ui27WZbk2ptOR3dEMRcy
VSTpz5B1fIvbenGCLHeOdLKKQa6iCqlATosFV+A5fft8/1uUXAuvVk1H2Q8U
/FHJrf1ebjyZUwfHJLHdAediuIDuXKxfeFG0Q8nvR0LVBtzWA7puipTPbV+M
U1c1aDREOXBTX4YNaoxLNfJu0MXB9mic7JDZhTpSORfK7UjRyfNsydDW3TnY
4jf0pIl48UEH81WI0NiN19JJKos7F6L2EnVd/CMwPB6bSj1UJm5RgByNxUyB
j0wuHVrIafF6/CyQF5mhG6xKdWPPBYzHxIMbf6Xc/QgHNEVwfFmepVtdCXvX
EREtMEtu0xHHcwMC4KzL8kJFUAukfVVL6QINDfuti2/miD/SYQlat/MU1MRN
ORiQ8ncZb1Ae8mfadWay6vvEvjpilKO6JCNcFyaD7k8zWPfv6HjUdvL6aO/I
lPc3Gf7I8hczUOkwvx/Wj88KM/PUca0K99LL+yrjWAEZX6Pp9BgZlw2XwvOE
rWjx0GGAeiFDMWrltelY4RhbqstiOZtqVVZwZ4G1NvLkQuXYYGDMReKlpi8O
bWqqmC6+B8NIN+zkz5QFkms2QZfJ1LwXZQkraEgltq4WzbYMNNbCKTA72LeC
FH0APuReABoIGiisZJ4pYvDnWd3bTqJ7/9Fo02KypEuGTPCdUgtpfqsbcfl6
eHKxhNOZUSUjulCphrccIcnpCptHu3eP9Kvr9MZtuNzR69Ov0GNOa4PqRgfG
v/Wgq9VGMPWEAksrUph6TS4dhxrd8qQAGytARgk9uwmLGzVau7uNSCvKDrEC
GDN8ru1cuYVkdAZJ09RGFhBraunoH9qjM2jPLp/R3pWZI1K6VgSvqVZgJ9C6
mUPcND91M9HjEr6HFrA52wANuXquyLxqS8vEB3EaSnm7EXgzmceBtLkCewOw
+eYXoKTUDcfgPJoSquRzFNU/dxp38k03rRAcfbSxbyrtbbIwJlw0k1GNv05S
U/1mWZk+Td2n7j0UO3jhXWZk2yMv0mHS2MU0krNbmW5AU9pzXnJNKNhG8k1l
TaloXwDuuHPMcuvzWTF5N/oxg3Vq/ndGX2H5IjJUt+GoYyGVRkqmJVQ4Exmk
v9r6cgubgIUWtYjlb106rN5QGyPuTyv3nZt2FHkuq7JxHRvEc90iX4Jti/RG
G+FoNUbywaPQBcVQqpgAtXaLhHzIDQeFx21M5YJxcwUYMdyH2pFopnSqzRe7
EuDJldaebGK9emYGzXauz9FBZ6pioV3dYVHEloQ7EavCgXi9hiY6iO8Y4QmC
lmEOXQcDi89oJpprm4bR5H1TcBSmgt3zM2Jy9mFb0sM2i6KaMNXyTARbDSk6
fU4Q0z2yYE2TSy51GNDKNR7+gX5Z8GLNtNdL8NrMlIc1PnPRd5FKPAX8sLN2
maGVPPfINvd2m/6AMJ4OtevH2hSyymkGbmDShiyMTqY5QxprceJIeEb/dQQO
vihwNCCXTKVLHR4oAQa+4n6bOmALN/vc0BCnpIx5henBsy+fxRxU5inupO4N
a5EiPLUWn1UE0ZnzC2ZH1ymiBgAhK9nMy/UhGy5QEeh1JZsUDgiVJYc9lm4B
2KKMP29K34zDKulOry/XZ+bBncfEOpKa35EcuZYBjSzXnB1yJ1vUKdeKZe3/
5vYfDGSTx+PN8aPxYyFaTHWoZhFpx0PLXaeKMoG8tRlj4rqQFyw1OaP6qk3U
11eLzGjauDVX0wzNyOt8BlhoqvjlZsO067L3nKQ2LlPF6k0ERVmKE9TptVHy
Xr8qWBzn8ykR30LNyBa0r70jzOVVbgl68J/23z4/2vt5m7l/9ldSws5uauvv
wksvfgZCyXlWm3uOu5EaTM7ZZeQInkpjTXqfzOMmxEi7LdfOiunNmi7LVaYX
qGfQncGvcEA4T4q9pB561KmysZCMRT4CrK3HJK3ByChhovkbWsOjBrrgijxV
IZTih8l9hAF0lFB/kDRsFf1o/Mjjv7z2S+vxZSpke9bG6U18I1mzcZtznAHR
1hx0/ZqKjDNPo1OAcTbknYrNMG62RshnHBdY+3ot+tHvbw8ftaBg48AyW/uS
FtNvurAG5up5FrNlRbNpW1vLi6mDBx8LAwQ0h6/fMFTm6S/ZfAly1Zy6S+NW
9Q0g5YIXI/Gc0vpM8nfsvTSUaSjObjF+P3mcfJ89x3XpaRBHLsp0zpsl/wPj
35u9Y2Ibm1tPH8qkcpX1q/TGOeeEHhxfPUlgD3ZDRy86CA3K5xgDhv+9xEK7
UtlPx4Uhv1/mGo9n6Q2pwWjTnt3oy+F23uLtRppz09XWM9JMGcZUcU04capY
+4vtNPd58vLg8OB18nWyro8nGemNbWyLU1diJHyImL3qHtf2nt40rqicI4Pc
OT9LsV8e7X7fAklis0I86Y2Jymbrsjr8Gwc9X+YTU3qSYqWdan9VIBybu6Q7
KTcVs5FUWwQF7bn085UauIYsNglW6opVoV3AZ1psGRi7bf605Up5oziNBzU/
4WMhhb1BBwXSmO/YOHBdtprqx7pjtQh8Hswcajj1m+p8jl4VPiSfZeI8zDYv
qY6e4c3JH75mxBs2tjtHC+UVRwtrN4S+Lq3VXakX2yjZPXq1t7nt02AzlX1k
a1uwnZbywH9+w3mhdWNLU9HxYy790eqlPzZLx/vStfaDXFvS2AaADn7yOGvK
45bsDNbU3JoYpclbovJpJ1s64KLizUFQBpk4CTsV8FpQHN2SoSU2VLGtVpAy
ZxcZ2qZFQS7Kdy3WvbBpaCA/uwsR3ZbslSFyexKQ3eauZYAHlgHuvj3pzwSd
/g5iKo0pp54mbPqzh2p65jRclBZS5+fc3w8A+MYhs2h38qNr0qsimxpbhKYD
YkyoE4AuuhuZF13r1a4gfCGEhfRxtm14f86Tt0Ce3mom2Xo1uMUTov2X2w7t
+MZeT/ztSfdt/sa5EG74pBf7RUIfhyVFOMD7obbUTB1m5ZTf9asJR/bD/Nnf
01e9r7Jto9ygOKShcYa+LxlpSUOH6Fk7LBkpUIFQxvopHFcHeQLi08wNXdkW
17GRSyU5XOsykwBmpz6yqcodYq+2zPA9bFwBHVsxZFGIhYnKNNg0kDAxGA1Z
l5sxhe6UaSFtjak7TJbHxBEg+G9x3W+18qERktCQhiWkc+hk086hw/2zoI1m
C9gwOKXMkEMaouMcsmawJN351NAx22m6KMypB30cdhzkyeu3RycH3+FocMO5
o9QmoCgJXj6P+sK5EhveI3QfvZ+9rbAN02gY/fdCVLXL/LRqa7tHh887thZd
90GtQ2cY//Qwf9Cw8tp0rd6buAxv0CaF9iamutElU3Ckw1LJIpoTvuCTVo3u
Ma323+gAX5IsMw/nuyQVplxPtyOSnP7xWU9ybJgzN+aOiYbh9YRtaCGEIkRJ
vJ+6ylyvOzK04WZ0lHGZS6gq0Wx0uzY699gZxaA+9TAXnWl1pWZo5UmddtzS
SbiKkw4Njh4gZOrsdmNwWj86CI8umx4Uhky2q+lLucxNTZXG+Th0L11BWczd
e+TMvhp/cfp7TkvX9WNc+W++vuedd7n1GSe7wm+UX5Lmfel7Lo7ZgEZ4JlqO
k6JQh/Oo6JJVjszSBQaPTG65+21RP7GsfmD1pIVseVq8FoWXrhOqoX5mOlyR
sVZay0rb6IazSHsl9a2cpcbWJ4Im2g/djAYMQEWAhr7SUlMaOiSucF9LQKgA
v/SwC2WeVOzA3jFaksO6PZ89Uy69Tlee04IRfaeDlX0LghPbKCLeKjsqjRrx
wpRsAnKICGCLkdkC0eepEX2efUoVUQbp1BJXXpJ/KM3P80aSBU58TNqkpSPz
RxPvd8zxe76HAxzsvNoJXhaHpYmf4qZDpr8syvn4Fsw/Go04VxMG2tOPv1lM
KZpYL0GPM1ryD+8Hv26XCrsfZXl5PuH0xR+AKeIGRw838aRHD7dsvuLDTfjn
e5Ie58i81dSGz+UOmFrDzIjJ7FDbwWYClteFkHGsJdjzc1Gte8xovcatY52o
qwwJs+MGLjR7i8UDBHZTDpKkyhsMFLJ0jgNgPmRgOl3nHz6Ef75ngEwZki7e
IEBtAhdGHAQCVtfG8fdmbP2xE6WpnXlFbjJHHZL2wVO1bekjQDXZmbzLi+uZ
ml6wTRkBmvrfIWaLCKKmX6/lhS5iy3koLN2RkQt5/jtsSPrr7mWZAWMAEWBn
Xv3tf1XVe6QY8MN3qgDOo5Jv1bRUk0tVvcv0TyfZOwzuePG3f7mYAR/SX/+H
4jJH2/fyb/89OUzrugLd34z2t38Bwg/kYpaiVv1ekyX46TCdZf/nf6bJD8t/
/W9Znv3rf30vLf8Axhmp9LxhfPxcqSleeDEOUDYs3cGQXnAdj7SkKGRTZ0Yn
eFxjGOnvKuAEOWySddQLCh374eDVq6MfdiwvVLM6m4xeYaAFHAhVFt79+fhk
//R0PPi/4VZQEj0DAQA=

-->

</rfc>
