<?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 1.7.29 (Ruby 3.3.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-lake-edhoc-impl-cons-05" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.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-05"/>
    <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="2026" month="January" day="07"/>
    <area>Security</area>
    <workgroup>LAKE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 61?>

<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>
    <?line 65?>

<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, implementers 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>Enforcement of different trust policies, 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="RFC9668"/>. This topic is discussed in <xref target="sec-block-wise"/>.</t>
        </li>
      </ul>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The reader is expected to be familiar with terms and concepts related to the EDHOC protocol <xref target="RFC9528"/>, (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>To provide more concrete guidance, the following considers the case where "applications keys" stands for the keying material and parameters that compose a Security Context for the security protocol Object Security for Constrained RESTful Environments (OSCORE) <xref target="RFC8613"/>, i.e., when specifically those application keys are derived from an EDHOC session (see <xref section="A.1" sectionFormat="of" target="RFC9528"/>).</t>
      <t>Nevertheless, the same considerations are applicable if EDHOC is used to derive other application keys, e.g., when used to key different security protocols than OSCORE or to provide the application with secure values that are 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="568" viewBox="0 0 568 80" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 72,48 L 96,48" fill="none" stroke="black"/>
                <path d="M 312,48 L 336,48" fill="none" stroke="black"/>
                <path d="M 400,48 L 424,48" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="432,48 420,42.4 420,53.6" fill="black" transform="rotate(0,424,48)"/>
                <polygon class="arrowhead" points="344,48 332,42.4 332,53.6" fill="black" transform="rotate(0,336,48)"/>
                <polygon class="arrowhead" points="104,48 92,42.4 92,53.6" fill="black" transform="rotate(0,96,48)"/>
                <g class="text">
                  <text x="32" y="36">Invalid</text>
                  <text x="132" y="36">Delete</text>
                  <text x="176" y="36">the</text>
                  <text x="216" y="36">EDHOC</text>
                  <text x="272" y="36">session</text>
                  <text x="368" y="36">Rerun</text>
                  <text x="460" y="36">Derive</text>
                  <text x="504" y="36">and</text>
                  <text x="24" y="52">EDHOC</text>
                  <text x="120" y="52">and</text>
                  <text x="152" y="52">the</text>
                  <text x="216" y="52">application</text>
                  <text x="284" y="52">keys</text>
                  <text x="368" y="52">EDHOC</text>
                  <text x="464" y="52">install</text>
                  <text x="512" y="52">new</text>
                  <text x="32" y="68">session</text>
                  <text x="136" y="68">derived</text>
                  <text x="188" y="68">from</text>
                  <text x="220" y="68">it</text>
                  <text x="480" y="68">application</text>
                  <text x="548" 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 has expired, or because the peer P has 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 associated with 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 in 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;</t>
          </li>
          <li>
            <t>SET has been established to use for an amount of time that is now elapsed, 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 security algorithms specifically used. 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 and successfully verified 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 an OSCORE Security Context, the key update protocol supported by the peer P can be KUDOS <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 an OSCORE Security Context, the application at P can run the key update protocol 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. In particular, it assumes such a set to be an OSCORE Security Context and the key update protocol to be KUDOS.</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 an access token from an ACE authorization server (AS) that is in a trust relationship with the RS. The access token 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, by means of an EAD item included in an EDHOC message during the EDHOC execution (see below). Alternatively, the AS can upload the access token to the RS on behalf of the client, as per the alternative Short Distribution Chain (SDC) workflow defined in <xref target="I-D.ietf-ace-workflow-and-params"/>.</t>
        <t>Consistent with the 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 to 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 acting as RS, 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 in 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 that 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 believed to be 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 and successfully verified 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 believed to be 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.2" 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, when using the EDHOC and OSCORE profile of the ACE framework.</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="912" width="576" viewBox="0 0 576 912" 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,288" fill="none" stroke="black"/>
                <path d="M 24,368 L 24,400" fill="none" stroke="black"/>
                <path d="M 24,496 L 24,528" fill="none" stroke="black"/>
                <path d="M 24,608 L 24,640" fill="none" stroke="black"/>
                <path d="M 24,704 L 24,736" fill="none" stroke="black"/>
                <path d="M 24,816 L 24,848" fill="none" stroke="black"/>
                <path d="M 264,496 L 264,576" fill="none" stroke="black"/>
                <path d="M 336,496 L 336,784" fill="none" stroke="black"/>
                <path d="M 504,208 L 504,448" fill="none" stroke="black"/>
                <path d="M 560,160 L 560,576" 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,448 L 184,448" fill="none" stroke="black"/>
                <path d="M 456,448 L 504,448" fill="none" stroke="black"/>
                <path d="M 96,576 L 264,576" fill="none" stroke="black"/>
                <path d="M 96,784 L 336,784" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="568,576 556,570.4 556,581.6" fill="black" transform="rotate(90,560,576)"/>
                <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,496 332,490.4 332,501.6" fill="black" transform="rotate(270,336,496)"/>
                <polygon class="arrowhead" points="272,496 260,490.4 260,501.6" fill="black" transform="rotate(270,264,496)"/>
                <polygon class="arrowhead" points="192,448 180,442.4 180,453.6" fill="black" transform="rotate(0,184,448)"/>
                <polygon class="arrowhead" points="152,160 140,154.4 140,165.6" fill="black" transform="rotate(0,144,160)"/>
                <polygon class="arrowhead" points="32,848 20,842.4 20,853.6" fill="black" transform="rotate(90,24,848)"/>
                <polygon class="arrowhead" points="32,736 20,730.4 20,741.6" fill="black" transform="rotate(90,24,736)"/>
                <polygon class="arrowhead" points="32,640 20,634.4 20,645.6" fill="black" transform="rotate(90,24,640)"/>
                <polygon class="arrowhead" points="32,528 20,522.4 20,533.6" fill="black" transform="rotate(90,24,528)"/>
                <polygon class="arrowhead" points="32,400 20,394.4 20,405.6" fill="black" transform="rotate(90,24,400)"/>
                <polygon class="arrowhead" points="32,288 20,282.4 20,293.6" fill="black" transform="rotate(90,24,288)"/>
                <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="84" y="196">believed</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="12" y="212">to</text>
                  <text x="36" y="212">be</text>
                  <text x="76" y="212">valid?</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="276">YES</text>
                  <text x="16" y="324">The</text>
                  <text x="80" y="324">application</text>
                  <text x="148" y="324">keys</text>
                  <text x="16" y="340">are</text>
                  <text x="48" y="340">not</text>
                  <text x="88" y="340">valid</text>
                  <text x="144" y="340">anymore</text>
                  <text x="16" y="436">Are</text>
                  <text x="48" y="436">the</text>
                  <text x="156" y="436">NO</text>
                  <text x="48" y="452">application</text>
                  <text x="116" y="452">keys</text>
                  <text x="220" y="452">Delete</text>
                  <text x="264" y="452">the</text>
                  <text x="328" y="452">application</text>
                  <text x="396" y="452">keys</text>
                  <text x="432" y="452">and</text>
                  <text x="44" y="468">persisted?</text>
                  <text x="208" y="468">the</text>
                  <text x="268" y="468">associated</text>
                  <text x="336" y="468">EDHOC</text>
                  <text x="392" y="468">session</text>
                  <text x="48" y="516">YES</text>
                  <text x="12" y="564">Is</text>
                  <text x="48" y="564">KUDOS</text>
                  <text x="124" y="564">NO</text>
                  <text x="44" y="580">supported?</text>
                  <text x="452" y="612">Derive</text>
                  <text x="496" y="612">and</text>
                  <text x="544" y="612">install</text>
                  <text x="48" y="628">YES</text>
                  <text x="424" y="628">new</text>
                  <text x="488" y="628">application</text>
                  <text x="556" y="628">keys</text>
                  <text x="16" y="676">Run</text>
                  <text x="56" y="676">KUDOS</text>
                  <text x="16" y="772">Has</text>
                  <text x="56" y="772">KUDOS</text>
                  <text x="124" y="772">NO</text>
                  <text x="44" y="788">succeeded?</text>
                  <text x="48" y="836">YES</text>
                  <text x="32" y="884">Install</text>
                  <text x="80" y="884">the</text>
                  <text x="128" y="884">updated</text>
                  <text x="48" y="900">application</text>
                  <text x="116" y="900">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 believed     the application keys      new access              |
to be valid?       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 Policies for Learning New Authentication Credentials</name>
      <t>A peer P relies on authentication credentials associated with 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 associated with 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 field 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 associated with 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 associated with) 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 also be trusted, while it 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. In such a case, 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>When processing a received EDHOC message M that specifies an authentication credential CRED, the peer P can enforce one of the trust policies LEARNING and NO-LEARNING specified in <xref target="sec-policy-learning"/> and <xref target="sec-policy-no-learning"/>, in order to determine whether to trust CRED.</t>
      <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>
      <t>If P stores CRED, then P will consider CRED as valid and trusted until CRED 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>
      <section anchor="sec-policy-learning">
        <name>Trust Policy LEARNING</name>
        <t>When enforcing the LEARNING 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 the ID_CRED_I/ID_CRED_R field of M or in the value of an EAD item of M.</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>
      </section>
      <section anchor="sec-policy-no-learning">
        <name>Trust Policy NO-LEARNING</name>
        <t>When enforcing the NO-LEARNING 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 continues 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 the ID_CRED_I/ID_CRED_R field of M or in the value of an EAD item of M; 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 successfully validate CRED, even though CRED is not already stored upon receiving M.</t>
        <t>Such exceptions typically rely on a trusted party that vouches for CRED, e.g., in the cases discussed in <xref target="sec-trust-models-specific"/>. From the point of view of the peer P, the trusted party might have been involved in the background, so that the vouching information about CRED is conveyed within an EDHOC message received during the EDHOC session (e.g., transported by an EAD item). Alternatively, P might directly interact with the trusted party for retrieving the vouching information about CRED, e.g., after having received M and before continuing the EDHOC execution.</t>
        <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 in <xref target="sec-policy-learning"/>. When doing so, P still attempts to validate CRED, and it aborts the EDHOC session if the validation process is not successful.</t>
      </section>
      <section anchor="sec-trust-models-specific">
        <name>Enforcement of Trust Policies in Specific Scenarios</name>
        <t>The following subsections discuss how an EDHOC peer enforces the trust policies LEARNING and NO-LEARNING in specific scenarios.</t>
        <section anchor="sec-trust-models-ace-prof">
          <name>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 an ACE authorization server (AS) an access token for accessing protected resources at PEER_RS. The AS and PEER_RS are in a trust relationship.</t>
          <t>Together with other information, the access token specifies (by value or by reference) the public authentication credential AUTH_CRED_C associated with PEER_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 in EDHOC, 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 and learn it upon receiving the access token.</t>
          <t>Although the AS can upload the access token to PEER_RS on behalf of PEER_C as per the alternative SDC workflow defined in <xref target="I-D.ietf-ace-workflow-and-params"/>, the access token is typically uploaded to PEER_RS by PEER_C through a dedicated EAD item, when running EDHOC with PEER_RS. Consequently, PEER_RS has to learn AUTH_CRED_C as a new authentication credential during an EDHOC session with PEER_C.</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) a valid access token issued by a trusted AS.  </t>
              <t>
That is, through a successful verification of the access token, PEER_RS is able to trust AUTH_CRED_C (if found valid), even though it did not already store AUTH_CRED_C upon receiving the EDHOC message with the EAD item.</t>
            </li>
          </ul>
        </section>
        <section anchor="sec-trust-models-ela">
          <name>In the Lightweight Authorization using EDHOC (ELA) Procedure</name>
          <t>When the execution of EDHOC embeds the ELA procedure defined in <xref target="I-D.ietf-lake-authz"/>, the EDHOC peer U receives an EDHOC message_2 (message_3) where ID_CRED_R (ID_CRED_I) specifies by value the authentication credential CRED associated with the other peer V.</t>
          <t>In the same EDHOC message, an EAD item specifies a voucher issued by a trusted enrollment server W. The voucher is an assertion to U that W has authorized V and has endorsed CRED.</t>
          <t>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 the EDHOC message.</t>
          <t>Therefore, if U enforces the trust policy "NO-LEARNING", it can additionally enforce an overriding exception when an incoming EDHOC message includes an EAD item conveying a valid voucher issued by a trusted enrollment server.</t>
        </section>
      </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 implementers 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 authentication credential associated with the other peer 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 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 of EDHOC message_2 might contain a voucher to be used for validating the authentication credential associated with the Responder (see <xref target="I-D.ietf-lake-authz"/>).</t>
        </li>
        <li>
          <t>It is possible that some EAD items can be processed only after having successfully verified the EDHOC message, i.e., after a successful verification of the Signature_or_MAC field in EDHOC message_2 or message_3.  </t>
          <t>
For instance, an EAD item within the EAD_3 field of EDHOC message_3 might 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 that the other peer possesses its private key.</t>
        </li>
      </ul>
      <t>In order to conveniently handle such processing, the application can prepare in advance a "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 authentication credentials that the peer P stores as associated with other peers.</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). This results in EDHOC providing 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 authentication credential CRED associated with the other peer, 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.</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. Then, <xref target="sec-consistency-checks-auth-creds"/> describes further special handling of incoming EDHOC messages, as to consistency checks concerning authentication credentials in particular situations.</t>
      <t>After completing the EDHOC execution, control is transferred back to the application. In particular, the application is provided with the overall outcome of the EDHOC execution (i.e., successful completion or failure), together with possible specific results produced by the SPO throughout the EDHOC execution (e.g., due to the processing of EAD items).</t>
      <t>After that, the application might need to perform follow-up actions, depending on the outcome of the EDHOC execution. For example, the SPO might have preliminarily filled application-level data structures, as a result of processing EAD items. In case of successful EDHOC execution, the application might need to finalize such data structures. Instead, in case of unsuccessful EDHOC execution, the application might need to clean-up or amend such data structures, or even roll back what the SPO did, unless the SPO already performed such actions before control was transferred back to the application.</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>
        <t>Future extensions of EDHOC or external security applications integrated into EDHOC might require a processing of EDHOC message_1 that is more advanced than the currently expected one. In particular, an EAD item conveyed in EDHOC message_1 might specify the authentication credential CRED associated with the Initiator (by value or by reference), as wrapped in a cryptographically protected "envelope". In such a case, the processing of an incoming EDHOC message_1 shares similarities with that of an incoming EDHOC message_2 or message_3 (see <xref target="sec-message-side-processing-m2-m3"/>), as it is further elaborated in <xref target="sec-message-side-processing-m1-advanced"/>.</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 (see <xref target="sec-pre-verif-phase-1"/>) and PHASE_2 (see <xref target="sec-pre-verif-phase-2"/>).</t>
          <section anchor="sec-pre-verif-phase-1">
            <name>PHASE_1</name>
            <t>During PHASE_1, the SPO at the recipient peer P determines CRED, i.e., the authentication credential associated with the other peer to be used 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 included 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 verifying that CRED has not expired and has not been revoked.  </t>
                <t>
Performing such a validation might 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 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 via ID_CRED_X or an EAD item considered at Step 1. Then, the SPO 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-policy-no-learning"/>), 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-policy-no-learning"/>).  </t>
                <t>
Consistently, the SPO determines if CRED is currently valid, e.g., by verifying that CRED has not expired and has not been revoked. Then, the SPO moves to Step 7.  </t>
                <t>
Validating CRED might 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 public key 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 associated with 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 <xref target="sec-pre-verif-phase-2"/>).</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>
          </section>
          <section anchor="sec-pre-verif-phase-2">
            <name>PHASE_2</name>
            <t>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> already been 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>
        <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.</t>
          <t>For example, the recipient peer P has to have first verified that the other peer does possess the private key corresponding to the public key specified by CRED, i.e., the authentication credential associated with the other peer that was determined during the pre-verification side processing (see <xref target="sec-pre-verif"/>). This requirement is fulfilled after a successful 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="164" y="756">policy</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="396" y="804">Side-Processor</text>
                    <text x="484" y="804">Object</text>
                    <text x="536" y="804">(SPO)</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 policy       |        : next EDHOC message :         |
| +---------------------------+        :....................:         |
|                                                                     |
|                                         Side-Processor Object (SPO) |
+---------------------------------------------------------------------+
]]></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="2416" width="568" viewBox="0 0 568 2416" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,512 L 8,1408" fill="none" stroke="black"/>
                  <path d="M 8,1456 L 8,1584" fill="none" stroke="black"/>
                  <path d="M 8,1936 L 8,2176" 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,1760 L 16,1792" fill="none" stroke="black"/>
                  <path d="M 16,2352 L 16,2400" fill="none" stroke="black"/>
                  <path d="M 24,560 L 24,640" fill="none" stroke="black"/>
                  <path d="M 24,752 L 24,800" fill="none" stroke="black"/>
                  <path d="M 24,912 L 24,992" fill="none" stroke="black"/>
                  <path d="M 24,1248 L 24,1376" fill="none" stroke="black"/>
                  <path d="M 24,1504 L 24,1552" fill="none" stroke="black"/>
                  <path d="M 24,1984 L 24,2032" fill="none" stroke="black"/>
                  <path d="M 24,2096 L 24,2144" 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,744" fill="none" stroke="black"/>
                  <path d="M 88,808 L 88,904" fill="none" stroke="black"/>
                  <path d="M 88,1000 L 88,1240" fill="none" stroke="black"/>
                  <path d="M 88,1384 L 88,1496" fill="none" stroke="black"/>
                  <path d="M 88,1560 L 88,1632" fill="none" stroke="black"/>
                  <path d="M 88,1712 L 88,1752" fill="none" stroke="black"/>
                  <path d="M 88,1800 L 88,1840" fill="none" stroke="black"/>
                  <path d="M 88,1920 L 88,1976" fill="none" stroke="black"/>
                  <path d="M 88,2040 L 88,2088" fill="none" stroke="black"/>
                  <path d="M 88,2152 L 88,2224" fill="none" stroke="black"/>
                  <path d="M 88,2304 L 88,2344" fill="none" stroke="black"/>
                  <path d="M 152,2352 L 152,2400" fill="none" stroke="black"/>
                  <path d="M 168,752 L 168,800" fill="none" stroke="black"/>
                  <path d="M 168,1760 L 168,1792" 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,1376" fill="none" stroke="black"/>
                  <path d="M 192,912 L 192,992" fill="none" stroke="black"/>
                  <path d="M 200,560 L 200,640" fill="none" stroke="black"/>
                  <path d="M 224,144 L 224,384" fill="none" stroke="black"/>
                  <path d="M 248,560 L 248,640" fill="none" stroke="black"/>
                  <path d="M 248,752 L 248,944" fill="none" stroke="black"/>
                  <path d="M 248,976 L 248,1280" fill="none" stroke="black"/>
                  <path d="M 296,688 L 296,744" fill="none" stroke="black"/>
                  <path d="M 296,1152 L 296,1184" fill="none" stroke="black"/>
                  <path d="M 296,1248 L 296,1376" fill="none" stroke="black"/>
                  <path d="M 320,952 L 320,1144" fill="none" stroke="black"/>
                  <path d="M 320,1192 L 320,1240" fill="none" stroke="black"/>
                  <path d="M 344,752 L 344,944" fill="none" stroke="black"/>
                  <path d="M 368,560 L 368,640" fill="none" stroke="black"/>
                  <path d="M 384,2096 L 384,2144" fill="none" stroke="black"/>
                  <path d="M 392,1984 L 392,2032" fill="none" stroke="black"/>
                  <path d="M 408,752 L 408,864" fill="none" stroke="black"/>
                  <path d="M 416,560 L 416,640" fill="none" stroke="black"/>
                  <path d="M 416,1936 L 416,2176" fill="none" stroke="black"/>
                  <path d="M 432,648 L 432,688" fill="none" stroke="black"/>
                  <path d="M 432,1040 L 432,1088" fill="none" stroke="black"/>
                  <path d="M 480,1504 L 480,1552" fill="none" stroke="black"/>
                  <path d="M 512,648 L 512,744" fill="none" stroke="black"/>
                  <path d="M 512,872 L 512,1032" fill="none" stroke="black"/>
                  <path d="M 512,1096 L 512,1144" fill="none" stroke="black"/>
                  <path d="M 528,560 L 528,640" fill="none" stroke="black"/>
                  <path d="M 544,752 L 544,864" fill="none" stroke="black"/>
                  <path d="M 544,1040 L 544,1088" fill="none" stroke="black"/>
                  <path d="M 544,1152 L 544,1184" fill="none" stroke="black"/>
                  <path d="M 544,1248 L 544,1376" fill="none" stroke="black"/>
                  <path d="M 560,512 L 560,1408" fill="none" stroke="black"/>
                  <path d="M 560,1456 L 560,1584" fill="none" stroke="black"/>
                  <path d="M 16,144 L 176,144" fill="none" stroke="black"/>
                  <path d="M 200,144 L 224,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 224,256 L 248,256" 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 200,384 L 224,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 432,688" fill="none" stroke="black"/>
                  <path d="M 24,752 L 168,752" fill="none" stroke="black"/>
                  <path d="M 248,752 L 344,752" fill="none" stroke="black"/>
                  <path d="M 408,752 L 544,752" fill="none" stroke="black"/>
                  <path d="M 176,768 L 240,768" fill="none" stroke="black"/>
                  <path d="M 352,768 L 400,768" fill="none" stroke="black"/>
                  <path d="M 24,800 L 168,800" fill="none" stroke="black"/>
                  <path d="M 408,864 L 544,864" fill="none" stroke="black"/>
                  <path d="M 24,912 L 192,912" fill="none" stroke="black"/>
                  <path d="M 200,928 L 240,928" fill="none" stroke="black"/>
                  <path d="M 248,944 L 344,944" fill="none" stroke="black"/>
                  <path d="M 200,976 L 248,976" fill="none" stroke="black"/>
                  <path d="M 24,992 L 192,992" fill="none" stroke="black"/>
                  <path d="M 432,1040 L 544,1040" fill="none" stroke="black"/>
                  <path d="M 432,1088 L 544,1088" fill="none" stroke="black"/>
                  <path d="M 296,1152 L 544,1152" fill="none" stroke="black"/>
                  <path d="M 296,1184 L 544,1184" fill="none" stroke="black"/>
                  <path d="M 24,1248 L 176,1248" fill="none" stroke="black"/>
                  <path d="M 296,1248 L 544,1248" fill="none" stroke="black"/>
                  <path d="M 248,1280 L 288,1280" fill="none" stroke="black"/>
                  <path d="M 24,1376 L 176,1376" fill="none" stroke="black"/>
                  <path d="M 296,1376 L 544,1376" fill="none" stroke="black"/>
                  <path d="M 8,1408 L 80,1408" fill="none" stroke="black"/>
                  <path d="M 96,1408 L 560,1408" fill="none" stroke="black"/>
                  <path d="M 8,1456 L 80,1456" fill="none" stroke="black"/>
                  <path d="M 96,1456 L 560,1456" fill="none" stroke="black"/>
                  <path d="M 24,1504 L 480,1504" fill="none" stroke="black"/>
                  <path d="M 24,1552 L 480,1552" fill="none" stroke="black"/>
                  <path d="M 8,1584 L 80,1584" fill="none" stroke="black"/>
                  <path d="M 96,1584 L 560,1584" fill="none" stroke="black"/>
                  <path d="M 16,1760 L 168,1760" fill="none" stroke="black"/>
                  <path d="M 16,1792 L 168,1792" fill="none" stroke="black"/>
                  <path d="M 8,1936 L 80,1936" fill="none" stroke="black"/>
                  <path d="M 96,1936 L 416,1936" fill="none" stroke="black"/>
                  <path d="M 24,1984 L 392,1984" fill="none" stroke="black"/>
                  <path d="M 24,2032 L 392,2032" fill="none" stroke="black"/>
                  <path d="M 24,2096 L 384,2096" fill="none" stroke="black"/>
                  <path d="M 24,2144 L 384,2144" fill="none" stroke="black"/>
                  <path d="M 8,2176 L 80,2176" fill="none" stroke="black"/>
                  <path d="M 96,2176 L 416,2176" fill="none" stroke="black"/>
                  <path d="M 16,2352 L 152,2352" fill="none" stroke="black"/>
                  <path d="M 16,2400 L 152,2400" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="520,1144 508,1138.4 508,1149.6" fill="black" transform="rotate(90,512,1144)"/>
                  <polygon class="arrowhead" points="520,1032 508,1026.4 508,1037.6" fill="black" transform="rotate(90,512,1032)"/>
                  <polygon class="arrowhead" points="520,744 508,738.4 508,749.6" fill="black" transform="rotate(90,512,744)"/>
                  <polygon class="arrowhead" points="416,592 404,586.4 404,597.6" fill="black" transform="rotate(0,408,592)"/>
                  <polygon class="arrowhead" points="360,768 348,762.4 348,773.6" fill="black" transform="rotate(180,352,768)"/>
                  <polygon class="arrowhead" points="328,1240 316,1234.4 316,1245.6" fill="black" transform="rotate(90,320,1240)"/>
                  <polygon class="arrowhead" points="328,952 316,946.4 316,957.6" fill="black" transform="rotate(270,320,952)"/>
                  <polygon class="arrowhead" points="304,744 292,738.4 292,749.6" fill="black" transform="rotate(90,296,744)"/>
                  <polygon class="arrowhead" points="248,928 236,922.4 236,933.6" fill="black" transform="rotate(0,240,928)"/>
                  <polygon class="arrowhead" points="248,768 236,762.4 236,773.6" fill="black" transform="rotate(0,240,768)"/>
                  <polygon class="arrowhead" points="248,592 236,586.4 236,597.6" fill="black" transform="rotate(0,240,592)"/>
                  <polygon class="arrowhead" points="208,976 196,970.4 196,981.6" fill="black" transform="rotate(180,200,976)"/>
                  <polygon class="arrowhead" points="96,2344 84,2338.4 84,2349.6" fill="black" transform="rotate(90,88,2344)"/>
                  <polygon class="arrowhead" points="96,2224 84,2218.4 84,2229.6" fill="black" transform="rotate(90,88,2224)"/>
                  <polygon class="arrowhead" points="96,2088 84,2082.4 84,2093.6" fill="black" transform="rotate(90,88,2088)"/>
                  <polygon class="arrowhead" points="96,1976 84,1970.4 84,1981.6" fill="black" transform="rotate(90,88,1976)"/>
                  <polygon class="arrowhead" points="96,1840 84,1834.4 84,1845.6" fill="black" transform="rotate(90,88,1840)"/>
                  <polygon class="arrowhead" points="96,1752 84,1746.4 84,1757.6" fill="black" transform="rotate(90,88,1752)"/>
                  <polygon class="arrowhead" points="96,1632 84,1626.4 84,1637.6" fill="black" transform="rotate(90,88,1632)"/>
                  <polygon class="arrowhead" points="96,1496 84,1490.4 84,1501.6" fill="black" transform="rotate(90,88,1496)"/>
                  <polygon class="arrowhead" points="96,1240 84,1234.4 84,1245.6" fill="black" transform="rotate(90,88,1240)"/>
                  <polygon class="arrowhead" points="96,904 84,898.4 84,909.6" fill="black" transform="rotate(90,88,904)"/>
                  <polygon class="arrowhead" points="96,744 84,738.4 84,749.6" fill="black" transform="rotate(90,88,744)"/>
                  <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="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="280" y="260">(Core</text>
                    <text x="328" y="260">EDHOC</text>
                    <text x="400" 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="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="452" y="676">NO</text>
                    <text x="536" y="676">YES</text>
                    <text x="112" y="724">YES</text>
                    <text x="188" y="756">NO</text>
                    <text x="384" y="756">YES</text>
                    <text x="44" y="772">2.</text>
                    <text x="68" y="772">Is</text>
                    <text x="100" y="772">this</text>
                    <text x="140" y="772">CRED</text>
                    <text x="272" y="772">11.</text>
                    <text x="312" y="772">Abort</text>
                    <text x="428" y="772">5.</text>
                    <text x="452" y="772">Is</text>
                    <text x="480" y="772">the</text>
                    <text x="516" y="772">used</text>
                    <text x="56" y="788">still</text>
                    <text x="108" y="788">valid?</text>
                    <text x="272" y="788">the</text>
                    <text x="312" y="788">EDHOC</text>
                    <text x="440" y="788">trust</text>
                    <text x="492" y="788">policy</text>
                    <text x="288" y="804">session</text>
                    <text x="476" y="804">"NO-LEARNING",</text>
                    <text x="448" y="820">without</text>
                    <text x="496" y="820">any</text>
                    <text x="460" y="836">acceptable</text>
                    <text x="464" y="852">exceptions?</text>
                    <text x="112" y="884">YES</text>
                    <text x="396" y="900">Here</text>
                    <text x="432" y="900">the</text>
                    <text x="468" y="900">used</text>
                    <text x="532" y="900">NO</text>
                    <text x="212" y="916">NO</text>
                    <text x="400" y="916">trust</text>
                    <text x="452" y="916">policy</text>
                    <text x="492" y="916">is</text>
                    <text x="44" y="932">9.</text>
                    <text x="68" y="932">Is</text>
                    <text x="100" y="932">this</text>
                    <text x="140" y="932">CRED</text>
                    <text x="424" y="932">"LEARNING",</text>
                    <text x="484" y="932">or</text>
                    <text x="52" y="948">good</text>
                    <text x="84" y="948">to</text>
                    <text x="112" y="948">use</text>
                    <text x="140" y="948">in</text>
                    <text x="168" y="948">the</text>
                    <text x="432" y="948">"NO-LEARNING"</text>
                    <text x="64" y="964">context</text>
                    <text x="108" y="964">of</text>
                    <text x="140" y="964">this</text>
                    <text x="412" y="964">together</text>
                    <text x="468" y="964">with</text>
                    <text x="56" y="980">EDHOC</text>
                    <text x="116" y="980">session?</text>
                    <text x="388" y="980">an</text>
                    <text x="444" y="980">overriding</text>
                    <text x="416" y="996">exception</text>
                    <text x="452" y="1060">6.</text>
                    <text x="500" y="1060">Validate</text>
                    <text x="460" y="1076">CRED</text>
                    <text x="112" y="1124">YES</text>
                    <text x="340" y="1124">NO</text>
                    <text x="316" y="1172">7.</text>
                    <text x="340" y="1172">Is</text>
                    <text x="372" y="1172">CRED</text>
                    <text x="420" y="1172">valid?</text>
                    <text x="344" y="1220">YES</text>
                    <text x="48" y="1268">10.</text>
                    <text x="100" y="1268">Continue</text>
                    <text x="148" y="1268">by</text>
                    <text x="316" y="1268">8.</text>
                    <text x="352" y="1268">Store</text>
                    <text x="396" y="1268">CRED</text>
                    <text x="428" y="1268">as</text>
                    <text x="464" y="1268">valid</text>
                    <text x="504" y="1268">and</text>
                    <text x="80" y="1284">considering</text>
                    <text x="148" y="1284">this</text>
                    <text x="340" y="1284">trusted.</text>
                    <text x="52" y="1300">CRED</text>
                    <text x="84" y="1300">as</text>
                    <text x="112" y="1300">the</text>
                    <text x="92" y="1316">authentication</text>
                    <text x="324" y="1316">Pair</text>
                    <text x="364" y="1316">CRED</text>
                    <text x="404" y="1316">with</text>
                    <text x="468" y="1316">consistent</text>
                    <text x="76" y="1332">credential</text>
                    <text x="348" y="1332">credential</text>
                    <text x="444" y="1332">identifiers,</text>
                    <text x="512" y="1332">for</text>
                    <text x="76" y="1348">associated</text>
                    <text x="140" y="1348">with</text>
                    <text x="324" y="1348">each</text>
                    <text x="384" y="1348">supported</text>
                    <text x="444" y="1348">type</text>
                    <text x="476" y="1348">of</text>
                    <text x="48" y="1364">the</text>
                    <text x="88" y="1364">other</text>
                    <text x="132" y="1364">peer</text>
                    <text x="348" y="1364">credential</text>
                    <text x="440" y="1364">identifier.</text>
                    <text x="252" y="1476">Pre-verification</text>
                    <text x="340" y="1476">side</text>
                    <text x="404" y="1476">processing</text>
                    <text x="488" y="1476">(PHASE_2)</text>
                    <text x="64" y="1524">Process</text>
                    <text x="112" y="1524">the</text>
                    <text x="144" y="1524">EAD</text>
                    <text x="184" y="1524">items</text>
                    <text x="228" y="1524">that</text>
                    <text x="268" y="1524">have</text>
                    <text x="304" y="1524">not</text>
                    <text x="340" y="1524">been</text>
                    <text x="400" y="1524">processed</text>
                    <text x="456" y="1524">yet</text>
                    <text x="48" y="1540">and</text>
                    <text x="84" y="1540">that</text>
                    <text x="120" y="1540">can</text>
                    <text x="148" y="1540">be</text>
                    <text x="200" y="1540">processed</text>
                    <text x="268" y="1540">before</text>
                    <text x="328" y="1540">message</text>
                    <text x="412" y="1540">verification</text>
                    <text x="40" y="1668">Control</text>
                    <text x="120" y="1668">transferred</text>
                    <text x="188" y="1668">back</text>
                    <text x="20" y="1684">to</text>
                    <text x="48" y="1684">the</text>
                    <text x="84" y="1684">core</text>
                    <text x="128" y="1684">EDHOC</text>
                    <text x="196" y="1684">processing</text>
                    <text x="52" y="1780">Verify</text>
                    <text x="120" y="1780">message_X</text>
                    <text x="200" y="1780">(Core</text>
                    <text x="248" y="1780">EDHOC</text>
                    <text x="320" y="1780">processing)</text>
                    <text x="40" y="1876">Control</text>
                    <text x="120" y="1876">transferred</text>
                    <text x="180" y="1876">to</text>
                    <text x="24" y="1892">the</text>
                    <text x="100" y="1892">side-processor</text>
                    <text x="188" y="1892">object</text>
                    <text x="248" y="1956">Post-verification</text>
                    <text x="364" y="1956">processing</text>
                    <text x="64" y="2004">Process</text>
                    <text x="112" y="2004">the</text>
                    <text x="144" y="2004">EAD</text>
                    <text x="184" y="2004">items</text>
                    <text x="228" y="2004">that</text>
                    <text x="268" y="2004">have</text>
                    <text x="300" y="2004">to</text>
                    <text x="324" y="2004">be</text>
                    <text x="72" y="2020">processed</text>
                    <text x="140" y="2020">(also)</text>
                    <text x="192" y="2020">after</text>
                    <text x="248" y="2020">message</text>
                    <text x="332" y="2020">verification</text>
                    <text x="52" y="2116">Make</text>
                    <text x="88" y="2116">all</text>
                    <text x="120" y="2116">the</text>
                    <text x="168" y="2116">results</text>
                    <text x="212" y="2116">of</text>
                    <text x="240" y="2116">the</text>
                    <text x="272" y="2116">EAD</text>
                    <text x="332" y="2116">processing</text>
                    <text x="72" y="2132">available</text>
                    <text x="124" y="2132">to</text>
                    <text x="160" y="2132">build</text>
                    <text x="200" y="2132">the</text>
                    <text x="236" y="2132">next</text>
                    <text x="280" y="2132">EDHOC</text>
                    <text x="336" y="2132">message</text>
                    <text x="40" y="2260">Control</text>
                    <text x="120" y="2260">transferred</text>
                    <text x="188" y="2260">back</text>
                    <text x="20" y="2276">to</text>
                    <text x="48" y="2276">the</text>
                    <text x="84" y="2276">core</text>
                    <text x="128" y="2276">EDHOC</text>
                    <text x="196" y="2276">processing</text>
                    <text x="56" y="2372">Advance</text>
                    <text x="104" y="2372">the</text>
                    <text x="184" y="2372">(Core</text>
                    <text x="232" y="2372">EDHOC</text>
                    <text x="304" y="2372">processing)</text>
                    <text x="60" y="2388">protocol</text>
                    <text x="120" y="2388">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                             |
| +------------------+        |     +------------------------------+ |
| | 10. Continue by  |        |     | 8. Store CRED as valid and   | |
| | considering this |        +-----| trusted.                     | |
| | CRED as the      |              |                              | |
| | authentication   |              | Pair CRED with consistent    | |
| | credential       |              | credential identifiers, for  | |
| | associated with  |              | 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-consistency-checks-auth-creds">
        <name>Consistency Checks of Authentication Credentials from ID_CRED and EAD Items</name>
        <t>Typically, an EDHOC peer specifies its associated authentication credential (by value or by reference) only in the ID_CRED field of EDHOC message_2 (if acting as Responder) or EDHOC message_3 (if acting as Initiator).</t>
        <t>In addition to that, there may be cases where an EDHOC peer provides the authentication credential also in an EAD item. In particular, such an EAD item can specify a cryptographically protected "envelope" (by value or by reference), which in turn specifies the authentication credential (by value or by reference).</t>
        <t>A case in point is the EDHOC and OSCORE profile of the ACE framework <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>, where the envelope in question is an access token issued to the ACE client. In such a case, the ACE client can rely on an EAD item specifying the access token by value, or instead on a different EAD item specifying a session identifier as a reference to such access token. In either case, the access token specifies the authentication credential (by value or by reference) associated with the client.</t>
        <t>During an EDHOC session, an EDHOC peer P1 might therefore receive the authentication credential CRED associated with the other EDHOC peer P2 as specified by two items:</t>
        <ul spacing="normal">
          <li>
            <t>ITEM_A: the ID_CRED field specifying CRED. If P2 acts as Initiator (Responder), then ITEM_A is the ID_CRED_I (ID_CRED_R) field.</t>
          </li>
          <li>
            <t>ITEM_B: the envelope specified in an EAD item within an EDHOC message sent by P2.</t>
          </li>
        </ul>
        <t>As part of the process where P1 validates CRED during the EDHOC session, P1 must check that both ITEM_A and ITEM_B specify the same authentication credential, and it must abort the EDHOC session if such a consistency check fails.</t>
        <t>The consistency check is successful only if one of the following conditions holds and it fails otherwise:</t>
        <ul spacing="normal">
          <li>
            <t>If both ITEM_A and ITEM_B specify an authentication credential by value, then both ITEM_A and ITEM_B specify the same value.</t>
          </li>
          <li>
            <t>If one among ITEM_A and ITEM_B specifies an authentication credential by value VALUE while the other one specifies an authentication credential by reference REF, then REF is a valid reference for VALUE.</t>
          </li>
          <li>
            <t>If ITEM_A specifies an authentication credential by reference REF_A and ITEM_B specifies an authentication credential by reference REF_B, then REF_A or REF_B allows to retrieving the value VALUE of an authentication credential from a local or remote storage, such that both REF_A and REF_B are a valid reference for VALUE.</t>
          </li>
        </ul>
        <t>The peer P1 performs the consistency check above as soon as it has both ITEM_A and ITEM_B available. If P1 acts as Responder, that is the case when processing the incoming EDHOC message_3. If P1 acts as Initiator, that is the case when processing the incoming EDHOC message_2 or message_4, i.e., whichever of the two messages includes ITEM_B in an EAD item of its EAD field.</t>
      </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="RFC9668"/> further details the use of EDHOC with CoAP and OSCORE. In particular, it 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="RFC9668"/>. 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 SIZE_BLOCK used 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 does 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="RFC9668"/>), 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 SIZE_BLOCK used 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>This document provides considerations for implementations of the EDHOC protocol. The security considerations compiled in <xref section="9" sectionFormat="of" target="RFC9528"/> and in <xref section="7" sectionFormat="of" target="RFC9668"/> apply. The compliance requirements for implementations that are listed in <xref section="8" sectionFormat="of" target="RFC9528"/> also apply.</t>
      <t>It is foreseeable that the EDHOC protocol will be extended (e.g., as to new cipher suites, new methods, and new types of authentication credentials) and that external security applications will be integrated into EDHOC by embedding the transport of their data in EDHOC EAD items. For implementations that support such extensions and external applications, the related security considerations and compliance requirements also apply.</t>
      <section anchor="assessing-the-correctness-of-implementations">
        <name>Assessing the Correctness of Implementations</name>
        <t>Tools relying on fuzz testing such as EDHOC-Fuzzer <xref target="EDHOC-Fuzzer"/> can help assess the correctness of implementations of the EDHOC protocol and of external security applications integrated into EDHOC.</t>
        <t>Such tools help finding and amending implementation errors especially related to the following points:</t>
        <ul spacing="normal">
          <li>
            <t>Non-conformance with the protocol specification (e.g., unintended deviations in performing the protocol steps), which can be a potential source of security vulnerabilities in addition to performance deficiencies.</t>
          </li>
          <li>
            <t>Presence of inappropriate states and state transitions in the modeling of the EDHOC execution, e.g., states that are impossible to reach and traverse or that are not part of the protocol specification (which is a particular case of non-conformance).  </t>
            <t>
These states and transitions should be amended or removed, in order to reduce the memory footprint and code complexity and to simplify the implementation, thus reducing the risks of bugs and related security vulnerabilities.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no actions for IANA.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-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="RFC9668">
          <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="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="M. Tiloca" initials="M." surname="Tiloca"/>
            <author fullname="R. Höglund" initials="R." surname="Höglund"/>
            <author fullname="S. Hristozov" initials="S." surname="Hristozov"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <date month="November" 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, including 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="RFC" value="9668"/>
          <seriesInfo name="DOI" value="10.17487/RFC9668"/>
        </reference>
      </references>
      <references anchor="sec-informative-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="20" month="October" year="2025"/>
            <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 between the client and resource
   server 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-09"/>
        </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="20" month="October" year="2025"/>
            <abstract>
              <t>   Communications with the Constrained Application Protocol (CoAP) can
   be protected end-to-end at the application-layer by using the
   security protocol Object Security for Constrained RESTful
   Environments (OSCORE).  Under some circumstances, two CoAP endpoints
   need to update their OSCORE keying material before communications can
   securely continue, e.g., due to approaching key usage limits.  This
   document defines Key Update for OSCORE (KUDOS), a lightweight key
   update procedure that two CoAP endpoints can use to update their
   OSCORE keying material by establishing a new OSCORE Security Context.
   Accordingly, this document updates the use of the OSCORE flag bits in
   the CoAP OSCORE Option as well as the protection of CoAP response
   messages with OSCORE.  Also, it deprecates the key update procedure
   specified in Appendix B.2 of RFC 8613.  Therefore, this document
   updates RFC 8613.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-key-update-12"/>
        </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="7" month="July" year="2025"/>
            <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-05"/>
        </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>IN Groupe</organization>
            </author>
            <date day="18" month="August" year="2025"/>
            <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 1.0, RPKI,
   GSMA eUICC, and CA/Browser Forum Baseline Requirements profiles.
   C509 is deployed in different settings including, in-vehicle and
   vehicle-to-cloud communication, Unmanned Aircraft Systems (UAS), and
   Global Navigation Satellite System (GNSS).  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 by 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 TLSA selectors registry defined in RFC
   6698 is extended to include C509 certificates.  The document also
   specifies C509 Certificate 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-15"/>
        </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="20" month="October" year="2025"/>
            <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-06"/>
        </reference>
        <reference anchor="I-D.ietf-ace-workflow-and-params">
          <front>
            <title>Short Distribution Chain (SDC) Workflow and New 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="20" month="October" year="2025"/>
            <abstract>
              <t>   This document updates the Authentication and Authorization for
   Constrained Environments Framework (ACE, RFC 9200) as follows. (1) It
   defines the Short Distribution Chain (SDC) workflow that the
   authorization server (AS) can use for uploading an access token to a
   resource server on behalf of the client. (2) For the OAuth 2.0 token
   endpoint, it defines new parameters and encodings and it extends the
   semantics of the "ace_profile" parameter. (3) For the OAuth 2.0
   authz-info endpoint, it defines a new parameter and its encoding. (4)
   It defines how the client and the AS can coordinate on the exchange
   of the client's and resource server's public authentication
   credentials, when those can be transported by value or identified by
   reference; this extends the semantics of the "rs_cnf" parameter for
   the OAuth 2.0 token endpoint, thus updating RFC 9201. (5) It extends
   the error handling at the AS, for which it defines a new error code.
   (6) It deprecates the original payload format of error responses
   conveying an error code, when CBOR is used to encode message
   payloads.  For those responses, it defines a new payload format
   aligned with RFC 9290, thus updating in this respect also the
   profiles defined in RFC 9202, RFC 9203, and RFC 9431. (7) It amends
   two of the requirements on profiles of the framework.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-workflow-and-params-06"/>
        </reference>
        <reference anchor="EDHOC-Fuzzer" target="https://dl.acm.org/doi/10.1145/3597926.3604922">
          <front>
            <title>EDHOC-Fuzzer: An EDHOC Protocol State Fuzzer</title>
            <author initials="K." surname="Sagonas" fullname="Konstantinos Sagonas">
              <organization/>
            </author>
            <author initials="T." surname="Typaldos" fullname="Thanasis Typaldos">
              <organization/>
            </author>
            <date year="2023" month="July" day="13"/>
          </front>
          <seriesInfo name="ISSTA 2023: Proceedings of the 32nd ACM SIGSOFT International Symposium on Software Testing and Analysis" value=""/>
        </reference>
      </references>
    </references>
    <?line 908?>

<section anchor="sec-message-side-processing-m1-advanced">
      <name>Foreseen Advanced Processing of Incoming EDHOC message_1</name>
      <t>As mentioned in <xref target="sec-message-side-processing-m1"/>, future developments in EDHOC and in related external security applications might rely on an EAD item in EDHOC message_1 that specifies the authentication credential CRED associated with the Initiator (by value or by reference), as wrapped in a cryptographically protected "envelope".</t>
      <t>In order to handle such a case, the processing of an incoming EDHOC message_1 as described in <xref target="sec-message-side-processing-m1"/> is extended with additional steps performed by the SPO.</t>
      <t>Such an extended side processing shares similarities with that of an incoming EDHOC message_2 or message_3 (see <xref target="sec-message-side-processing-m2-m3"/>). In particular, similarly to what is compiled in <xref target="sec-pre-verif-phase-1"/> and <xref target="sec-pre-verif-phase-2"/>, it consists of the following steps.</t>
      <ul spacing="normal">
        <li>
          <t>(0) The SPO checks the presence of an EAD item that specifies the authentication credential CRED associated with the Initiator (by value or by reference).  </t>
          <t>
If no such EAD item is found, the SPO moves to Step 12. Otherwise, the SPO moves to Step 1.</t>
        </li>
        <li>
          <t>(1) The SPO determines CRED based on an EAD item retrieved at Step 0.  </t>
          <t>
The EAD item can 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>(2) The SPO determines if the stored CRED is currently valid, e.g., by verifying that CRED has not expired and has not been revoked.  </t>
          <t>
Performing such a validation might require the SPO to first process an EAD item included in message_1.  </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>(3) The SPO attempts to retrieve CRED via an EAD item considered at Step 1. Then, the SPO moves to Step 4.</t>
        </li>
        <li>
          <t>(4) If the retrieval of CRED has succeeded, the SPO moves to Step 5. Otherwise, the SPO moves to Step 11.</t>
        </li>
        <li>
          <t>(5) 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_1 (see <xref target="sec-policy-no-learning"/>), the SPO moves to Step 11. Otherwise, the SPO moves to Step 6.</t>
        </li>
        <li>
          <t>(6) 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_1 (see <xref target="sec-policy-no-learning"/>).  </t>
          <t>
Consistently, the SPO determines if CRED is currently valid, e.g., by verifying that CRED has not expired and has not been revoked. Then, the SPO moves to Step 7.  </t>
          <t>
Validating CRED might require the SPO to first process an EAD item included in message_1.</t>
        </li>
        <li>
          <t>(7) If CRED has been determined valid, the SPO moves to Step 8. Otherwise, the SPO moves to Step 11.</t>
        </li>
        <li>
          <t>(8) 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>(9) 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>(10) P uses CRED as authentication credential associated with the other peer in the ongoing EDHOC session. Then, the SPO moves to Step 12.</t>
        </li>
        <li>
          <t>(11) 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>
        <li>
          <t>(12) The SPO processes any EAD item included in message_1 that has not already been processed.  </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>
        </li>
      </ul>
      <t>The flowchart in <xref target="fig-flowchart-spo-low-level-m1-advanced"/> shows the different steps taken for the advanced processing of an incoming EDHOC message_1 defined above.</t>
      <figure anchor="fig-flowchart-spo-low-level-m1-advanced">
        <name>Processing Steps for EDHOC message_1.</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1744" width="568" viewBox="0 0 568 1744" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,400 L 8,1504" fill="none" stroke="black"/>
              <path d="M 16,128 L 16,160" fill="none" stroke="black"/>
              <path d="M 16,224 L 16,272" fill="none" stroke="black"/>
              <path d="M 16,1680 L 16,1728" fill="none" stroke="black"/>
              <path d="M 24,448 L 24,496" fill="none" stroke="black"/>
              <path d="M 24,1440 L 24,1472" fill="none" stroke="black"/>
              <path d="M 32,504 L 32,1432" fill="none" stroke="black"/>
              <path d="M 56,752 L 56,800" fill="none" stroke="black"/>
              <path d="M 56,912 L 56,1008" fill="none" stroke="black"/>
              <path d="M 56,1248 L 56,1376" fill="none" stroke="black"/>
              <path d="M 64,560 L 64,640" fill="none" stroke="black"/>
              <path d="M 88,1016 L 88,1240" fill="none" stroke="black"/>
              <path d="M 88,1384 L 88,1432" fill="none" stroke="black"/>
              <path d="M 88,1480 L 88,1552" fill="none" stroke="black"/>
              <path d="M 88,1632 L 88,1672" fill="none" stroke="black"/>
              <path d="M 96,80 L 96,120" fill="none" stroke="black"/>
              <path d="M 96,168 L 96,216" fill="none" stroke="black"/>
              <path d="M 96,280 L 96,304" fill="none" stroke="black"/>
              <path d="M 96,384 L 96,440" fill="none" stroke="black"/>
              <path d="M 96,504 L 96,552" fill="none" stroke="black"/>
              <path d="M 96,648 L 96,744" fill="none" stroke="black"/>
              <path d="M 96,808 L 96,904" fill="none" stroke="black"/>
              <path d="M 152,1680 L 152,1728" fill="none" stroke="black"/>
              <path d="M 176,128 L 176,160" fill="none" stroke="black"/>
              <path d="M 176,224 L 176,272" fill="none" stroke="black"/>
              <path d="M 192,448 L 192,496" fill="none" stroke="black"/>
              <path d="M 200,560 L 200,640" fill="none" stroke="black"/>
              <path d="M 200,752 L 200,800" fill="none" stroke="black"/>
              <path d="M 200,912 L 200,1008" fill="none" stroke="black"/>
              <path d="M 208,1248 L 208,1376" fill="none" stroke="black"/>
              <path d="M 224,128 L 224,272" fill="none" stroke="black"/>
              <path d="M 248,560 L 248,624" fill="none" stroke="black"/>
              <path d="M 248,752 L 248,944" fill="none" stroke="black"/>
              <path d="M 248,976 L 248,1280" fill="none" stroke="black"/>
              <path d="M 296,688 L 296,744" fill="none" stroke="black"/>
              <path d="M 296,1152 L 296,1184" fill="none" stroke="black"/>
              <path d="M 296,1248 L 296,1376" fill="none" stroke="black"/>
              <path d="M 320,952 L 320,1144" fill="none" stroke="black"/>
              <path d="M 320,1192 L 320,1240" fill="none" stroke="black"/>
              <path d="M 344,752 L 344,944" fill="none" stroke="black"/>
              <path d="M 360,560 L 360,624" fill="none" stroke="black"/>
              <path d="M 408,560 L 408,640" fill="none" stroke="black"/>
              <path d="M 408,752 L 408,864" fill="none" stroke="black"/>
              <path d="M 432,648 L 432,688" fill="none" stroke="black"/>
              <path d="M 432,1040 L 432,1088" fill="none" stroke="black"/>
              <path d="M 512,648 L 512,744" fill="none" stroke="black"/>
              <path d="M 512,872 L 512,1032" fill="none" stroke="black"/>
              <path d="M 512,1096 L 512,1144" fill="none" stroke="black"/>
              <path d="M 512,1440 L 512,1472" fill="none" stroke="black"/>
              <path d="M 520,560 L 520,640" fill="none" stroke="black"/>
              <path d="M 544,752 L 544,864" fill="none" stroke="black"/>
              <path d="M 544,1040 L 544,1088" fill="none" stroke="black"/>
              <path d="M 544,1152 L 544,1184" fill="none" stroke="black"/>
              <path d="M 544,1248 L 544,1376" fill="none" stroke="black"/>
              <path d="M 560,400 L 560,1504" fill="none" stroke="black"/>
              <path d="M 16,128 L 176,128" fill="none" stroke="black"/>
              <path d="M 200,128 L 224,128" fill="none" stroke="black"/>
              <path d="M 16,160 L 176,160" fill="none" stroke="black"/>
              <path d="M 224,192 L 248,192" fill="none" stroke="black"/>
              <path d="M 16,224 L 176,224" fill="none" stroke="black"/>
              <path d="M 16,272 L 176,272" fill="none" stroke="black"/>
              <path d="M 200,272 L 224,272" fill="none" stroke="black"/>
              <path d="M 8,400 L 88,400" fill="none" stroke="black"/>
              <path d="M 104,400 L 560,400" fill="none" stroke="black"/>
              <path d="M 24,448 L 192,448" fill="none" stroke="black"/>
              <path d="M 24,496 L 192,496" fill="none" stroke="black"/>
              <path d="M 64,560 L 200,560" fill="none" stroke="black"/>
              <path d="M 248,560 L 360,560" fill="none" stroke="black"/>
              <path d="M 408,560 L 520,560" fill="none" stroke="black"/>
              <path d="M 208,592 L 240,592" fill="none" stroke="black"/>
              <path d="M 368,592 L 400,592" fill="none" stroke="black"/>
              <path d="M 248,624 L 360,624" fill="none" stroke="black"/>
              <path d="M 64,640 L 200,640" fill="none" stroke="black"/>
              <path d="M 408,640 L 520,640" fill="none" stroke="black"/>
              <path d="M 296,688 L 432,688" fill="none" stroke="black"/>
              <path d="M 56,752 L 200,752" fill="none" stroke="black"/>
              <path d="M 248,752 L 344,752" fill="none" stroke="black"/>
              <path d="M 408,752 L 544,752" fill="none" stroke="black"/>
              <path d="M 208,768 L 240,768" fill="none" stroke="black"/>
              <path d="M 352,768 L 400,768" fill="none" stroke="black"/>
              <path d="M 56,800 L 200,800" fill="none" stroke="black"/>
              <path d="M 408,864 L 544,864" fill="none" stroke="black"/>
              <path d="M 56,912 L 200,912" fill="none" stroke="black"/>
              <path d="M 208,928 L 240,928" fill="none" stroke="black"/>
              <path d="M 248,944 L 344,944" fill="none" stroke="black"/>
              <path d="M 208,976 L 248,976" fill="none" stroke="black"/>
              <path d="M 56,1008 L 200,1008" fill="none" stroke="black"/>
              <path d="M 432,1040 L 544,1040" fill="none" stroke="black"/>
              <path d="M 432,1088 L 544,1088" fill="none" stroke="black"/>
              <path d="M 296,1152 L 544,1152" fill="none" stroke="black"/>
              <path d="M 296,1184 L 544,1184" fill="none" stroke="black"/>
              <path d="M 56,1248 L 208,1248" fill="none" stroke="black"/>
              <path d="M 296,1248 L 544,1248" fill="none" stroke="black"/>
              <path d="M 248,1280 L 288,1280" fill="none" stroke="black"/>
              <path d="M 56,1376 L 208,1376" fill="none" stroke="black"/>
              <path d="M 296,1376 L 544,1376" fill="none" stroke="black"/>
              <path d="M 24,1440 L 512,1440" fill="none" stroke="black"/>
              <path d="M 24,1472 L 512,1472" fill="none" stroke="black"/>
              <path d="M 8,1504 L 80,1504" fill="none" stroke="black"/>
              <path d="M 96,1504 L 560,1504" fill="none" stroke="black"/>
              <path d="M 16,1680 L 152,1680" fill="none" stroke="black"/>
              <path d="M 16,1728 L 152,1728" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="520,1144 508,1138.4 508,1149.6" fill="black" transform="rotate(90,512,1144)"/>
              <polygon class="arrowhead" points="520,1032 508,1026.4 508,1037.6" fill="black" transform="rotate(90,512,1032)"/>
              <polygon class="arrowhead" points="520,744 508,738.4 508,749.6" fill="black" transform="rotate(90,512,744)"/>
              <polygon class="arrowhead" points="408,592 396,586.4 396,597.6" fill="black" transform="rotate(0,400,592)"/>
              <polygon class="arrowhead" points="360,768 348,762.4 348,773.6" fill="black" transform="rotate(180,352,768)"/>
              <polygon class="arrowhead" points="328,1240 316,1234.4 316,1245.6" fill="black" transform="rotate(90,320,1240)"/>
              <polygon class="arrowhead" points="328,952 316,946.4 316,957.6" fill="black" transform="rotate(270,320,952)"/>
              <polygon class="arrowhead" points="304,744 292,738.4 292,749.6" fill="black" transform="rotate(90,296,744)"/>
              <polygon class="arrowhead" points="248,928 236,922.4 236,933.6" fill="black" transform="rotate(0,240,928)"/>
              <polygon class="arrowhead" points="248,768 236,762.4 236,773.6" fill="black" transform="rotate(0,240,768)"/>
              <polygon class="arrowhead" points="248,592 236,586.4 236,597.6" fill="black" transform="rotate(0,240,592)"/>
              <polygon class="arrowhead" points="216,976 204,970.4 204,981.6" fill="black" transform="rotate(180,208,976)"/>
              <polygon class="arrowhead" points="104,904 92,898.4 92,909.6" fill="black" transform="rotate(90,96,904)"/>
              <polygon class="arrowhead" points="104,744 92,738.4 92,749.6" fill="black" transform="rotate(90,96,744)"/>
              <polygon class="arrowhead" points="104,552 92,546.4 92,557.6" fill="black" transform="rotate(90,96,552)"/>
              <polygon class="arrowhead" points="104,440 92,434.4 92,445.6" fill="black" transform="rotate(90,96,440)"/>
              <polygon class="arrowhead" points="104,216 92,210.4 92,221.6" fill="black" transform="rotate(90,96,216)"/>
              <polygon class="arrowhead" points="104,120 92,114.4 92,125.6" fill="black" transform="rotate(90,96,120)"/>
              <polygon class="arrowhead" points="96,1672 84,1666.4 84,1677.6" fill="black" transform="rotate(90,88,1672)"/>
              <polygon class="arrowhead" points="96,1552 84,1546.4 84,1557.6" fill="black" transform="rotate(90,88,1552)"/>
              <polygon class="arrowhead" points="96,1432 84,1426.4 84,1437.6" fill="black" transform="rotate(90,88,1432)"/>
              <polygon class="arrowhead" points="96,1240 84,1234.4 84,1245.6" fill="black" transform="rotate(90,88,1240)"/>
              <polygon class="arrowhead" points="40,1432 28,1426.4 28,1437.6" fill="black" transform="rotate(90,32,1432)"/>
              <g class="text">
                <text x="52" y="36">Incoming</text>
                <text x="40" y="52">EDHOC</text>
                <text x="104" y="52">message_1</text>
                <text x="52" y="148">Decode</text>
                <text x="120" y="148">message_1</text>
                <text x="280" y="196">(Core</text>
                <text x="328" y="196">EDHOC</text>
                <text x="400" y="196">Processing)</text>
                <text x="60" y="244">Accepted</text>
                <text x="132" y="244">selected</text>
                <text x="52" y="260">cipher</text>
                <text x="104" y="260">suite</text>
                <text x="40" y="340">Control</text>
                <text x="120" y="340">transferred</text>
                <text x="180" y="340">to</text>
                <text x="24" y="356">the</text>
                <text x="100" y="356">side-processor</text>
                <text x="188" y="356">object</text>
                <text x="412" y="420">Side</text>
                <text x="476" y="420">processing</text>
                <text x="44" y="468">0.</text>
                <text x="76" y="468">Does</text>
                <text x="108" y="468">an</text>
                <text x="136" y="468">EAD</text>
                <text x="52" y="484">item</text>
                <text x="104" y="484">specify</text>
                <text x="160" y="484">CRED?</text>
                <text x="52" y="532">NO</text>
                <text x="120" y="532">YES</text>
                <text x="84" y="580">1.</text>
                <text x="116" y="580">Does</text>
                <text x="148" y="580">an</text>
                <text x="176" y="580">EAD</text>
                <text x="220" y="580">NO</text>
                <text x="268" y="580">3.</text>
                <text x="316" y="580">Retrieve</text>
                <text x="428" y="580">4.</text>
                <text x="452" y="580">Is</text>
                <text x="480" y="580">the</text>
                <text x="92" y="596">item</text>
                <text x="136" y="596">point</text>
                <text x="172" y="596">to</text>
                <text x="276" y="596">CRED</text>
                <text x="312" y="596">via</text>
                <text x="456" y="596">retrieval</text>
                <text x="84" y="612">an</text>
                <text x="128" y="612">already</text>
                <text x="268" y="612">an</text>
                <text x="296" y="612">EAD</text>
                <text x="332" y="612">item</text>
                <text x="428" y="612">of</text>
                <text x="460" y="612">CRED</text>
                <text x="100" y="628">stored</text>
                <text x="152" y="628">CRED?</text>
                <text x="464" y="628">successful?</text>
                <text x="452" y="676">NO</text>
                <text x="536" y="676">YES</text>
                <text x="120" y="724">YES</text>
                <text x="220" y="756">NO</text>
                <text x="384" y="756">YES</text>
                <text x="76" y="772">2.</text>
                <text x="100" y="772">Is</text>
                <text x="132" y="772">this</text>
                <text x="172" y="772">CRED</text>
                <text x="272" y="772">11.</text>
                <text x="312" y="772">Abort</text>
                <text x="428" y="772">5.</text>
                <text x="452" y="772">Is</text>
                <text x="480" y="772">the</text>
                <text x="516" y="772">used</text>
                <text x="88" y="788">still</text>
                <text x="140" y="788">valid?</text>
                <text x="272" y="788">the</text>
                <text x="312" y="788">EDHOC</text>
                <text x="440" y="788">trust</text>
                <text x="492" y="788">policy</text>
                <text x="288" y="804">session</text>
                <text x="476" y="804">"NO-LEARNING",</text>
                <text x="448" y="820">without</text>
                <text x="496" y="820">any</text>
                <text x="460" y="836">acceptable</text>
                <text x="464" y="852">exceptions?</text>
                <text x="120" y="884">YES</text>
                <text x="396" y="900">Here</text>
                <text x="432" y="900">the</text>
                <text x="468" y="900">used</text>
                <text x="532" y="900">NO</text>
                <text x="220" y="916">NO</text>
                <text x="400" y="916">trust</text>
                <text x="452" y="916">policy</text>
                <text x="492" y="916">is</text>
                <text x="76" y="932">9.</text>
                <text x="100" y="932">Is</text>
                <text x="132" y="932">this</text>
                <text x="172" y="932">CRED</text>
                <text x="424" y="932">"LEARNING",</text>
                <text x="484" y="932">or</text>
                <text x="84" y="948">good</text>
                <text x="116" y="948">to</text>
                <text x="144" y="948">use</text>
                <text x="172" y="948">in</text>
                <text x="432" y="948">"NO-LEARNING"</text>
                <text x="80" y="964">the</text>
                <text x="128" y="964">context</text>
                <text x="172" y="964">of</text>
                <text x="412" y="964">together</text>
                <text x="468" y="964">with</text>
                <text x="84" y="980">this</text>
                <text x="128" y="980">EDHOC</text>
                <text x="388" y="980">an</text>
                <text x="444" y="980">overriding</text>
                <text x="100" y="996">session?</text>
                <text x="416" y="996">exception</text>
                <text x="452" y="1060">6.</text>
                <text x="500" y="1060">Validate</text>
                <text x="460" y="1076">CRED</text>
                <text x="112" y="1124">YES</text>
                <text x="340" y="1124">NO</text>
                <text x="316" y="1172">7.</text>
                <text x="340" y="1172">Is</text>
                <text x="372" y="1172">CRED</text>
                <text x="420" y="1172">valid?</text>
                <text x="344" y="1220">YES</text>
                <text x="80" y="1268">10.</text>
                <text x="132" y="1268">Continue</text>
                <text x="180" y="1268">by</text>
                <text x="316" y="1268">8.</text>
                <text x="352" y="1268">Store</text>
                <text x="396" y="1268">CRED</text>
                <text x="428" y="1268">as</text>
                <text x="464" y="1268">valid</text>
                <text x="504" y="1268">and</text>
                <text x="112" y="1284">considering</text>
                <text x="180" y="1284">this</text>
                <text x="340" y="1284">trusted.</text>
                <text x="84" y="1300">CRED</text>
                <text x="116" y="1300">as</text>
                <text x="144" y="1300">the</text>
                <text x="124" y="1316">authentication</text>
                <text x="324" y="1316">Pair</text>
                <text x="364" y="1316">CRED</text>
                <text x="404" y="1316">with</text>
                <text x="468" y="1316">consistent</text>
                <text x="108" y="1332">credential</text>
                <text x="348" y="1332">credential</text>
                <text x="444" y="1332">identifiers,</text>
                <text x="512" y="1332">for</text>
                <text x="108" y="1348">associated</text>
                <text x="172" y="1348">with</text>
                <text x="324" y="1348">each</text>
                <text x="384" y="1348">supported</text>
                <text x="444" y="1348">type</text>
                <text x="476" y="1348">of</text>
                <text x="80" y="1364">the</text>
                <text x="120" y="1364">other</text>
                <text x="164" y="1364">peer</text>
                <text x="348" y="1364">credential</text>
                <text x="440" y="1364">identifier.</text>
                <text x="48" y="1460">12.</text>
                <text x="96" y="1460">Process</text>
                <text x="144" y="1460">the</text>
                <text x="176" y="1460">EAD</text>
                <text x="216" y="1460">items</text>
                <text x="260" y="1460">that</text>
                <text x="300" y="1460">have</text>
                <text x="336" y="1460">not</text>
                <text x="372" y="1460">been</text>
                <text x="432" y="1460">processed</text>
                <text x="488" y="1460">yet</text>
                <text x="40" y="1588">Control</text>
                <text x="120" y="1588">transferred</text>
                <text x="188" y="1588">back</text>
                <text x="20" y="1604">to</text>
                <text x="48" y="1604">the</text>
                <text x="84" y="1604">core</text>
                <text x="128" y="1604">EDHOC</text>
                <text x="196" y="1604">processing</text>
                <text x="56" y="1700">Advance</text>
                <text x="104" y="1700">the</text>
                <text x="184" y="1700">(Core</text>
                <text x="232" y="1700">EDHOC</text>
                <text x="304" y="1700">processing)</text>
                <text x="60" y="1716">protocol</text>
                <text x="120" y="1716">state</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
  Incoming
  EDHOC message_1

           |
           |
           v
 +-------------------+  ---+
 | Decode message_1  |     |
 +-------------------+     |
           |               |
           |               +--- (Core EDHOC Processing)
           v               |
 +-------------------+     |
 | Accepted selected |     |
 | cipher suite      |     |
 +-------------------+  ---+
           |
           |

 Control transferred to
 the side-processor object

           |
+----------|---------------------------------------------------------+
|          |                                     Side processing     |
|          v                                                         |
| +--------------------+                                             |
| | 0. Does an EAD     |                                             |
| | item specify CRED? |                                             |
| +--------------------+                                             |
|  |       |                                                         |
|  | NO    | YES                                                     |
|  |       v                                                         |
|  |   +----------------+     +-------------+     +-------------+    |
|  |   | 1. Does an EAD | NO  | 3. Retrieve |     | 4. Is the   |    |
|  |   | item point to  |---->| CRED via    |---->| retrieval   |    |
|  |   | an already     |     | an EAD item |     | of CRED     |    |
|  |   | stored CRED?   |     +-------------+     | 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  |     +-----------+    "NO-LEARNING"   |     |
|  |  | the context of  |              ^       together with   |     |
|  |  | this EDHOC      |<----+        |       an overriding   |     |
|  |  | session?        |     |        |       exception       |     |
|  |  +-----------------+     |        |                       |     |
|  |      |                   |        |                       v     |
|  |      |                   |        |             +-------------+ |
|  |      |                   |        |             | 6. Validate | |
|  |      |                   |        |             | CRED        | |
|  |      |                   |        |             +-------------+ |
|  |      |                   |        |                       |     |
|  |      | YES               |        | NO                    |     |
|  |      |                   |        |                       v     |
|  |      |                   |     +------------------------------+ |
|  |      |                   |     | 7. Is CRED valid?            | |
|  |      |                   |     +------------------------------+ |
|  |      |                   |        |                             |
|  |      |                   |        | YES                         |
|  |      v                   |        v                             |
|  |  +------------------+    |     +------------------------------+ |
|  |  | 10. Continue by  |    |     | 8. Store CRED as valid and   | |
|  |  | considering this |    +-----| trusted.                     | |
|  |  | CRED as the      |          |                              | |
|  |  | authentication   |          | Pair CRED with consistent    | |
|  |  | credential       |          | credential identifiers, for  | |
|  |  | associated with  |          | each supported type of       | |
|  |  | the other peer   |          | credential identifier.       | |
|  |  +------------------+          +------------------------------+ |
|  |      |                                                          |
|  |      |                                                          |
|  v      v                                                          |
| +------------------------------------------------------------+     |
| | 12. Process the EAD items that have not been processed yet |     |
| +------------------------------------------------------------+     |
|         |                                                          |
+---------|----------------------------------------------------------+
          |
          |
          v

 Control transferred back
 to the core EDHOC processing

          |
          |
          v
 +----------------+
 | Advance the    | (Core EDHOC processing)
 | protocol state |
 +----------------+
]]></artwork>
        </artset>
      </figure>
    </section>
    <section anchor="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <section anchor="sec-04-05">
        <name>Version -04 to -05</name>
        <ul spacing="normal">
          <li>
            <t>Minor clarifications.</t>
          </li>
          <li>
            <t>Editorial fixes and improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-03-04">
        <name>Version -03 to -04</name>
        <ul spacing="normal">
          <li>
            <t>Clarified and re-positioned exceptions to NO-LEARNING policy.</t>
          </li>
          <li>
            <t>Added security considerations.</t>
          </li>
          <li>
            <t>Appendix on foreseen advanced processing of incoming EDHOC message_1.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-02-03">
        <name>Version -02 to -03</name>
        <ul spacing="normal">
          <li>
            <t>Consistent use of "trust policy" instead of "trust model".</t>
          </li>
          <li>
            <t>More modular presentation of trust policies and their enforcement.</t>
          </li>
          <li>
            <t>Alignment with use of EDHOC in the EDHOC and OSCORE profile of ACE.</t>
          </li>
          <li>
            <t>Note on follow-up actions for the application after EDHOC completion.</t>
          </li>
          <li>
            <t>Removed moot section on special handling when using the EDHOC and OSCORE profile of ACE.</t>
          </li>
          <li>
            <t>Consistency checks of authentication credentials from ID_CRED and EAD items.</t>
          </li>
          <li>
            <t>Updated reference.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <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:
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
4uBXbtfP7YQnLIsznN+bY0IrAtcAGTsgVLYAoCaYneUZfRT9V8Ka3VyNQY+F
WPJZP1pmKyZCK7Wkdn704UGgvVwTZeunlR2LQ8SlVS2Y1vtEDuLhF3YQ71le
SJ+zgNQHiQfiIU0udbKbTlIV16fgAjdcYeg6MaaxrFSINb5iAsB36zj8xM5q
3FLXWQ3f2A6hphP9/53VIWf1jiZL31vd7gLt4AEWShZ/b6PnNOjJhT3VgDle
MR6mkzO1ic2SxtnZpWr7dQOQTPOED4EGyd145CsOfvULgmgZB9QoyZVtYACf
x32r/ZCzoBbCcb86pzAyyV6ZeHqVTeonCnrZALX5PGW8afucE0C5TDqtUM3F
qwK7O68SUXDqiXS27OmkTvpGTlpfEwrLXA53a/adHMUO5l5PLcY9pjGxC0dN
0+ctH2NObmk4Ez4DSj+7de016Nz2UqwBk84cVOFwoNORguhlSvkVnUINj9dQ
GpMVQJMlrbtvdCTrnHgEiMxDQAzquCfdghI4VdegRDcZdO+gBPOK9YGF2+/N
46EdsvzNxiSaELs2JoG00NniahhGqz8ACSypmxnRLRji+rRacgUdqOUW27pA
SSB/TXJvu/C+ms+sPfBhwbdhXeizfCT9DRSKdwiUvHmLzncTI6kHSAw7xl/e
Eh+kZelASUTOVAeL/AmktctH/CSx8yD7bl1VGj/+cTOxGIv3ei5gS7D+Sb50
hBwLN/nYMNPnL2qYbp7ups/Nb3eY9eGKDsN08e53GOY+Hz2Mr7FZAbvbDKOu
2joq2e2H6T7zmmF+W3TzW9rwWmy3JSTUMkwoMbslRqyDv05Q8caK9rrzeCw0
FC62gLonbqxh2je8NebsDtPGKFpDyPYw7XTTeZj2T8dh7FhziGY6DtMaa3bC
zS3DhNIWGmfsfIrXBNs7s38zTjDa3pkd3IKsu8a0bztqd9zd7tHPgQE7yt3K
1LoGuj9zrNvRsxuukUgo+sxRsdfEwYFsbxEIj84o2HkiOdwUsvxeXdd/A/S7
70YgD6zr+ioU7ty7x8R5ZbqhNkoXO1vu/Pt+C2O7la47zi6vInooW2hkQIA+
vTA3zpUlOGerR+IC5lLfVSyXc09o5Mm/rtKiw6WZupNlYZuaL+3EfnpeMlWR
6WUpOzROonxVDfLZYIzMZXxtXamRW4SYwOmFSp3BdGBKsmIt90hLJJbgPZEr
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
E+oF4fIIxyHLXRYleSGkqaSlpaK0ocFhkzv2ehuMTSzA6fk4CZAdx2aX/k0X
Kzu+VDM2cSzaAKZaaeAlnWJrcSAVa1SnMou1Z0/0SvQWwr6+ggEvMQpN3SHT
egS0UJyGNolrYlY4h0F+4VAXqjhxYbLC9DYalsOWPO89cy4Fp62+KT2IviuT
4lIa3Vv+AiuYLRrdOq8pjRqIuRTs8LGYSDozKpqn5zzTes7zz2kQyiCtNuHa
Q/KPZOc5cUZyt0lASfmvVKPHwcT5/aOEG6f5ZEVOHx1vdJ8jFT7FCbVNWLpe
aJXkzCE+3VfSGwaBTjMVF1SIel5Hk/P7145eR9zmeigNtgGmlDKxa149H1zd
CSVLy8oH4ZkHAtplPA9JAOJB2NYvYZebMjXctYNIZJ5ObTeRJlTkjCxCbO9i
t0bFDl3w1TwBOToVZohf4FU6drc39oLpmStMa3p5KpDCPT2BxBMQlFNt8mn+
KbubFsLQlY1vdQ1+2YRkCREzR7VakCLMGlwbSlXyOiP4mogHX2/acGfDHjyI
9qkonmGuRQEbvcAMRljXsQs0nIE8z0pKy5XsjNnql1+AyZeV6QclnGLwEn6i
Y27/E0gGnVgXSbaUenzGmWbm7XSAaJnwy116tMLaRyTQaT0EzSxVTpopt0nG
f7iARCAEQAGxI95qK2ohVY7lkg3wJl8gN0GRRPuhUx/MfQcV1aNZ5CysFgg6
nY5pcpnq5fh1+K1bE8my1DnmqiEMQFJJllyZrwo2gjSqLlcZqBnxOM24VWrq
JuLLVAQ2ZipMUCmG50gJPaH2nTwgCBhMmVkWmCXM9zeYDvkqB52WVK+AgkM5
pWmcNzT6VvkMMpTmSbAjquE5e2coYx81i5gTmVQCAz6MwtVLzg0iXLLyqYGM
KYGtmm8v3P3jviDAVEtnofYSRSwj+ue8g5KTeJlwX2/tSwROtRLRNYffC8wj
yStAo2g3VPCMJdjPRNrcx7NEwlTJqy6R9llPpIF1F6i05Csq49W5SovxWIhH
CCQrj/ff7Hty0heD3NVD96tEcYJvweuDwYDvFsFAL1kkLNRtoKlXAfM4mGJo
t0vs0jqXcrERKgClW9td9EzOuAH0NKFscGaSmomLhFXYWsNqVHen+qWFQCdm
FgAdbwf8bVoxu25vMLqmWXKf3sxxsKFp2/aQPaV0BK73P1XVOqWwoek9L2ro
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
Bm/Q/QUbQt3pD/58cno0Gg03/h8gaKKOlDcBAA==

-->

</rfc>
