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

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

  |
  | YES
  v

Install the updated
application keys
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="sec-keys-token-invalid">
        <name>Application Keys or Bound Access Rights Become Invalid</name>
        <t>The following considers two peers that use the ACE framework for authentication and authorization in constrained environments <xref target="RFC9200"/>, and specifically the EDHOC and OSCORE profile of ACE defined in <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>.</t>
        <t>When doing so, one of the two peers acts as ACE Resource Server (RS) hosting protected resources. The other peer acts as ACE Client, requests from an ACE Authorization Server (AS) an Access Token that specifies access rights for accessing protected resources at the RS, and uploads the Access Token to the RS as part of the ACE workflow.</t>
        <t>Consistent with the used EDHOC and OSCORE profile of ACE, the two peers run EDHOC in order to specifically derive an OSCORE Security Context as their shared set of application keys (see <xref section="A.1" sectionFormat="of" target="RFC9528"/>). The successfully completed EDHOC session is bound to the Access Token.</t>
        <t>After that, the peer acting as ACE Client can access the protected resources hosted at the other peer, according to the access rights specified in the Access Token. The communications between the two peers are protected by means of the established OSCORE Security Context, which is also bound to the used Access Token.</t>
        <t>Later on, the application at one of the two peers P may have learned that the established OSCORE Security Context CTX is not safe to use anymore, e.g., from the used OSCORE library or from an OSCORE layer that takes part to the communication stack. The reasons that make CTX not safe to use anymore are the same ones discussed in <xref target="sec-keys-invalid"/> when considering a set of application keys in general, plus the event where the Access Token bound to CTX becomes invalid (e.g., it has expired or it has been revoked).</t>
        <t>When this happens, the application at the peer P proceeds as follows.</t>
        <ol spacing="normal" type="1"><li>
            <t>If the following conditions both hold, then the application moves to step 2. Otherwise, it moves to step 3.  </t>
            <ul spacing="normal">
              <li>
                <t>The Access Token is still valid. That is, it has not expired yet and the peer P is not aware that it has been revoked.</t>
              </li>
              <li>
                <t>Let us define S as the EDHOC session from which the peer P has derived CTX or the eldest CTX's ancestor OSCORE Security Context. Then, since the completion of S with the other peer, the application at P has received from the other peer at least one message protected with any set of application keys derived from S. That is, P has persisted S (see <xref section="5.4.2" sectionFormat="of" target="RFC9528"/>).</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If the peer P supports the key update protocol KUDOS <xref target="I-D.ietf-core-oscore-key-update"/>, then P runs KUDOS with the other peer, in order to update CTX. If the execution of KUDOS terminates successfully, the updated OSCORE Security Context is installed and no further actions are taken.  </t>
            <t>
If the execution of KUDOS does not terminate successfully or if the peer P does not support KUDOS altogether, then the application at P moves to step 3.</t>
          </li>
          <li>
            <t>The application at the peer P performs the following actions.  </t>
            <ul spacing="normal">
              <li>
                <t>If the Access Token is not valid anymore, the peer P deletes all the EDHOC sessions associated with the Access Token, as well as the OSCORE Security Context derived from each of those sessions.      </t>
                <t>
If the peer P acted as ACE Client, then P obtains a new Access Token from the ACE AS, and uploads it 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>
          </li>
        </ol>
        <t>The flowchart in <xref target="fig-flowchart-keys-token-invalid"/> shows the handling of an Access Token or of a set of application keys that have become invalid.</t>
        <figure anchor="fig-flowchart-keys-token-invalid">
          <name>Handling of an Access Token or of a set of Application Keys that have Become Invalid</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="864" width="576" viewBox="0 0 576 864" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 24,80 L 24,112" fill="none" stroke="black"/>
                <path d="M 24,192 L 24,240" fill="none" stroke="black"/>
                <path d="M 24,320 L 24,352" fill="none" stroke="black"/>
                <path d="M 24,448 L 24,480" fill="none" stroke="black"/>
                <path d="M 24,560 L 24,592" fill="none" stroke="black"/>
                <path d="M 24,656 L 24,688" fill="none" stroke="black"/>
                <path d="M 24,768 L 24,800" fill="none" stroke="black"/>
                <path d="M 264,448 L 264,528" fill="none" stroke="black"/>
                <path d="M 336,448 L 336,736" fill="none" stroke="black"/>
                <path d="M 504,192 L 504,400" fill="none" stroke="black"/>
                <path d="M 560,144 L 560,528" fill="none" stroke="black"/>
                <path d="M 112,144 L 144,144" fill="none" stroke="black"/>
                <path d="M 336,144 L 352,144" fill="none" stroke="black"/>
                <path d="M 456,144 L 472,144" fill="none" stroke="black"/>
                <path d="M 536,144 L 560,144" fill="none" stroke="black"/>
                <path d="M 144,400 L 184,400" fill="none" stroke="black"/>
                <path d="M 456,400 L 504,400" fill="none" stroke="black"/>
                <path d="M 96,528 L 264,528" fill="none" stroke="black"/>
                <path d="M 96,736 L 336,736" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="568,528 556,522.4 556,533.6" fill="black" transform="rotate(90,560,528)"/>
                <polygon class="arrowhead" points="512,192 500,186.4 500,197.6" fill="black" transform="rotate(270,504,192)"/>
                <polygon class="arrowhead" points="480,144 468,138.4 468,149.6" fill="black" transform="rotate(0,472,144)"/>
                <polygon class="arrowhead" points="360,144 348,138.4 348,149.6" fill="black" transform="rotate(0,352,144)"/>
                <polygon class="arrowhead" points="344,448 332,442.4 332,453.6" fill="black" transform="rotate(270,336,448)"/>
                <polygon class="arrowhead" points="272,448 260,442.4 260,453.6" fill="black" transform="rotate(270,264,448)"/>
                <polygon class="arrowhead" points="192,400 180,394.4 180,405.6" fill="black" transform="rotate(0,184,400)"/>
                <polygon class="arrowhead" points="152,144 140,138.4 140,149.6" fill="black" transform="rotate(0,144,144)"/>
                <polygon class="arrowhead" points="32,800 20,794.4 20,805.6" fill="black" transform="rotate(90,24,800)"/>
                <polygon class="arrowhead" points="32,688 20,682.4 20,693.6" fill="black" transform="rotate(90,24,688)"/>
                <polygon class="arrowhead" points="32,592 20,586.4 20,597.6" fill="black" transform="rotate(90,24,592)"/>
                <polygon class="arrowhead" points="32,480 20,474.4 20,485.6" fill="black" transform="rotate(90,24,480)"/>
                <polygon class="arrowhead" points="32,352 20,346.4 20,357.6" fill="black" transform="rotate(90,24,352)"/>
                <polygon class="arrowhead" points="32,240 20,234.4 20,245.6" fill="black" transform="rotate(90,24,240)"/>
                <polygon class="arrowhead" points="32,112 20,106.4 20,117.6" fill="black" transform="rotate(90,24,112)"/>
                <g class="text">
                  <text x="32" y="36">Invalid</text>
                  <text x="88" y="36">token</text>
                  <text x="156" y="36">specifying</text>
                  <text x="232" y="36">CRED_I,</text>
                  <text x="12" y="52">or</text>
                  <text x="56" y="52">invalid</text>
                  <text x="136" y="52">application</text>
                  <text x="204" y="52">keys</text>
                  <text x="124" y="132">NO</text>
                  <text x="12" y="148">Is</text>
                  <text x="40" y="148">the</text>
                  <text x="80" y="148">token</text>
                  <text x="180" y="148">Delete</text>
                  <text x="224" y="148">the</text>
                  <text x="284" y="148">associated</text>
                  <text x="388" y="148">Obtain</text>
                  <text x="432" y="148">and</text>
                  <text x="504" y="148">Rerun</text>
                  <text x="24" y="164">still</text>
                  <text x="76" y="164">valid?</text>
                  <text x="176" y="164">EDHOC</text>
                  <text x="236" y="164">sessions</text>
                  <text x="288" y="164">and</text>
                  <text x="388" y="164">upload</text>
                  <text x="424" y="164">a</text>
                  <text x="504" y="164">EDHOC</text>
                  <text x="168" y="180">the</text>
                  <text x="232" y="180">application</text>
                  <text x="300" y="180">keys</text>
                  <text x="376" y="180">new</text>
                  <text x="416" y="180">token</text>
                  <text x="184" y="196">derived</text>
                  <text x="236" y="196">from</text>
                  <text x="280" y="196">those</text>
                  <text x="48" y="228">YES</text>
                  <text x="16" y="276">The</text>
                  <text x="80" y="276">application</text>
                  <text x="148" y="276">keys</text>
                  <text x="16" y="292">are</text>
                  <text x="48" y="292">not</text>
                  <text x="88" y="292">valid</text>
                  <text x="144" y="292">anymore</text>
                  <text x="16" y="388">Are</text>
                  <text x="48" y="388">the</text>
                  <text x="156" y="388">NO</text>
                  <text x="48" y="404">application</text>
                  <text x="116" y="404">keys</text>
                  <text x="220" y="404">Delete</text>
                  <text x="264" y="404">the</text>
                  <text x="328" y="404">application</text>
                  <text x="396" y="404">keys</text>
                  <text x="432" y="404">and</text>
                  <text x="44" y="420">persisted?</text>
                  <text x="208" y="420">the</text>
                  <text x="268" y="420">associated</text>
                  <text x="336" y="420">EDHOC</text>
                  <text x="392" y="420">session</text>
                  <text x="48" y="468">YES</text>
                  <text x="12" y="516">Is</text>
                  <text x="48" y="516">KUDOS</text>
                  <text x="124" y="516">NO</text>
                  <text x="44" y="532">supported?</text>
                  <text x="452" y="564">Derive</text>
                  <text x="496" y="564">and</text>
                  <text x="544" y="564">install</text>
                  <text x="48" y="580">YES</text>
                  <text x="424" y="580">new</text>
                  <text x="488" y="580">application</text>
                  <text x="556" y="580">keys</text>
                  <text x="16" y="628">Run</text>
                  <text x="56" y="628">KUDOS</text>
                  <text x="16" y="724">Has</text>
                  <text x="56" y="724">KUDOS</text>
                  <text x="124" y="724">NO</text>
                  <text x="44" y="740">succeeded?</text>
                  <text x="48" y="788">YES</text>
                  <text x="32" y="836">Install</text>
                  <text x="80" y="836">the</text>
                  <text x="128" y="836">updated</text>
                  <text x="48" y="852">application</text>
                  <text x="116" y="852">keys</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Invalid token specifying CRED_I,
or invalid application keys

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

  |
  | YES
  v

Install the updated
application keys
]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="sec-trust-models">
      <name>Trust Models for Learning New Authentication Credentials</name>
      <t>A peer P relies on authentication credentials of other peers, in order to authenticate those peers when running EDHOC with them.</t>
      <t>There are different ways for P to acquire an authentication credential CRED of another peer. For example, CRED can be supplied to P out-of-band by a trusted provider.</t>
      <t>Alternatively, CRED can be specified by the other peer during the EDHOC execution with P. This relies on EDHOC message_2 or message_3, whose respective ID_CRED_R and ID_CRED_I can specify CRED by value, or instead a URI or other external reference where CRED can be retrieved from (see <xref section="3.5.3" sectionFormat="of" target="RFC9528"/>).</t>
      <t>Also during the EDHOC execution, an External Authorization Data (EAD) field might include an EAD item that specifies CRED by value or reference. This is the case, e.g., for the EAD item defined in <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>, which is used in the EAD_3 field of EDHOC message_3 and transports (a reference to) an Access Token that in turn specifies CRED_I by value or by reference.</t>
      <t>When obtaining a new credential CRED, the peer P has to validate it before storing it. The validation steps to perform depend on the specific type of CRED (e.g., a public key certificate <xref target="RFC5280"/><xref target="I-D.ietf-cose-cbor-encoded-cert"/>), and can rely on (the authentication credential of) a trusted third party acting as a trust anchor.</t>
      <t>Upon retrieving a new CRED through the processing of a received EDHOC message and following the successful validation of CRED, the peer P stores CRED only if it assesses CRED to be also trusted, and must not store CRED otherwise.</t>
      <t>An exception applies for the two unauthenticated operations described in <xref section="D.5" sectionFormat="of" target="RFC9528"/>, where a trust relationship with an unknown or not-yet-trusted endpoint is established later. That is, CRED is verified out-of-band at a later stage, or an EDHOC session key is bound to an identity out-of-band at a later stage.</t>
      <t>If P stores CRED, then P will consider CRED as valid and trusted until it possibly becomes invalid, e.g., because it expires or because P gains knowledge that it has been revoked.</t>
      <t>When storing CRED, the peer P should generate the authentication credential identifier(s) corresponding to CRED and store them as associated with CRED. For example, if CRED is a public key certificate, an identifier of CRED can be the hash of the certificate. In general, P should generate and associate with CRED one corresponding identifier for each type of authentication credential identifier that P supports and that is compatible with CRED.</t>
      <t>In future executions of EDHOC with the other peer associated with CRED, this allows such other peer to specify CRED by reference, e.g., by indicating its credential identifier as ID_CRED_R/ID_CRED_I in the EDHOC message_2 or message_3 addressed to the peer P. In turn, this allows P to retrieve CRED from its local storage.</t>
      <t>When processing a received EDHOC message M that specifies an authentication credential CRED, the peer P can enforce one of the following trust policies in order to determine whether to trust CRED.</t>
      <ul spacing="normal">
        <li>
          <t>NO-LEARNING: according to this policy, the peer P trusts CRED if and only if P is already storing CRED at message reception time.  </t>
          <t>
That is, upon receiving M, the peer P can continue the execution of EDHOC only if both the following conditions hold.  </t>
          <ul spacing="normal">
            <li>
              <t>P currently stores CRED, as specified by reference or by value in ID_CRED_I/ID_CRED_R or in the value of an EAD item; and</t>
            </li>
            <li>
              <t>CRED is still valid, i.e., P believes CRED to not be expired or revoked.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>LEARNING: according to this policy, the peer P trusts CRED even if P is not already storing CRED at message reception time.  </t>
          <t>
That is, upon receiving M, the peer P performs the following steps.  </t>
          <ol spacing="normal" type="1"><li>
              <t>P retrieves CRED, as specified by reference or by value in ID_CRED_I/ID_CRED_R or in the value of an EAD item.</t>
            </li>
            <li>
              <t>P checks whether CRED is already being stored and if it is still valid. In such a case, P trusts CRED and can continue the EDHOC execution. Otherwise, P moves to step 3.</t>
            </li>
            <li>
              <t>P attempts to validate CRED. If the validation process is not successful, P aborts the EDHOC session with the other peer. Otherwise, P trusts and stores CRED, and can continue the EDHOC execution.</t>
            </li>
          </ol>
        </li>
      </ul>
      <t>Irrespective of the adopted trust policy, P actually uses CRED only if it is determined to be fine to use in the context of the ongoing EDHOC session, also depending on the specific identity of the other peer (see Sections <xref target="RFC9528" section="3.5" sectionFormat="bare"/> and <xref target="RFC9528" section="D.2" sectionFormat="bare"/> of <xref target="RFC9528"/>). If this is not the case, P aborts the EDHOC session with the other peer.</t>
      <section anchor="sec-trust-models-ace-prof">
        <name>Enforcement in the EDHOC and OSCORE Profile of ACE</name>
        <t>As discussed in <xref target="sec-keys-token-invalid"/>, two EDHOC peers can be using the ACE framework <xref target="RFC9200"/> and specifically the EDHOC and OSCORE profile of ACE defined in <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>. In particular:</t>
        <ul spacing="normal">
          <li>
            <t>One of the two EDHOC peers, namely PEER_RS, acts as ACE Resource Server (RS).</t>
          </li>
          <li>
            <t>The other EDHOC peer, namely PEER_C, acts as ACE Client, and obtains from the ACE Authorization Server (AS) an Access Token for accessing protected resources at PEER_RS.  </t>
            <t>
Together with other information, the Access Token specifies (by value or by reference) the public authentication credential AUTH_CRED_C that PEER_C is going to use when running EDHOC with PEER_RS.  </t>
            <t>
Note that AUTH_CRED_C will be used as either CRED_I or CRED_R, depending on whether the two peers use the EDHOC forward message flow (i.e., PEER_C is the EDHOC Initiator) or the EDHOC reverse message flow (i.e., PEER_C is the EDHOC Responder), respectively (see <xref section="A.2" sectionFormat="of" target="RFC9528"/>).</t>
          </li>
        </ul>
        <t>When using the EDHOC and OSCORE profile of ACE, it is also possible for PEER_C to upload the Access Token at PEER_RS by means of a dedicated EDHOC EAD item, while running EDHOC with PEER_RS.</t>
        <t>In order to ensure that this effectively works, PEER_RS has to support the trust policy "LEARNING", at least for its EDHOC resource used for exchanging the EDHOC messages of the EDHOC session in question.</t>
        <t>That is, PEER_RS is expected to not store AUTH_CRED_C in advance, and instead to gain knowledge of it as specified in the Access Token issued by the AS and uploaded by PEER_C. If PEER_RS has to learn AUTH_CRED_C as a new public authentication credential during an EDHOC session, indeed this requires PEER_RS to enforce the trust policy "LEARNING".</t>
        <t>In fact, when the AS issues the first Access Token ever such that it 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.</t>
      </section>
    </section>
    <section anchor="sec-message-side-processing">
      <name>Side Processing of Incoming EDHOC Messages</name>
      <t>This section describes an approach that EDHOC peers can use upon receiving EDHOC messages, in order to fetch/validate authentication credentials and to process External Authorization Data (EAD) items.</t>
      <t>As per <xref section="9.1" sectionFormat="of" target="RFC9528"/>, the EDHOC protocol provides a transport mechanism for conveying EAD items, but specifications defining those items have to set the ground for "agreeing on the surrounding context and the meaning of the information passed to and from the application".</t>
      <t>The approach described in this section aims to help implementors navigate the surrounding context mentioned above, irrespective of the specific EAD items conveyed in the EDHOC messages. In particular, the described approach takes into account the following points.</t>
      <ul spacing="normal">
        <li>
          <t>The fetching and validation of the other peer's authentication credential relies on ID_CRED_I in EDHOC message_2, or on ID_CRED_R in EDHOC message_3, or on the value of an EAD item. When this occurs upon receiving EDHOC message_2 or message_3, the decryption of the EDHOC message has to be completed first.  </t>
          <t>
The validation of the other peer's authentication credential might depend on using the value of an EAD item, which in turn has to be validated first. For instance, an EAD item within the EAD_2 field may contain a voucher to be used for validating the other peer's authentication credential (see <xref target="I-D.ietf-lake-authz"/>).</t>
        </li>
        <li>
          <t>Some EAD items may be processed only after having successfully verified the EDHOC message, i.e., after a successful verification of the Signature_or_MAC field.  </t>
          <t>
For instance, an EAD item within the EAD_3 field may contain a Certificate Signing Request (CSR) <xref target="RFC2986"/>. Hence, such an EAD item can be processed only once the recipient peer has attained proof of the other peer possessing its private key.</t>
        </li>
      </ul>
      <t>In order to conveniently handle such processing, the application can prepare in advance one "side-processor object" (SPO), which takes care of the operations above during the EDHOC execution.</t>
      <t>In particular, the application provides EDHOC with the SPO before starting an EDHOC execution, during which EDHOC will temporarily transfer control to the SPO at the right point in time, in order to perform the required side-processing of an incoming EDHOC message.</t>
      <t>Furthermore, the application has to instruct the SPO about how to prepare any EAD item such that: it has to be included in an outgoing EDHOC message; and it is independent of the processing of other EAD items included in incoming EDHOC messages. This includes, for instance, the preparation of padding EAD items.</t>
      <t>At the right point in time during the processing of an incoming EDHOC message M at the peer P, EDHOC invokes the SPO and provides it with the following input:</t>
      <ul spacing="normal">
        <li>
          <t>When M is EDHOC message_2 or message_3, an indication of whether this invocation is happening before or after the message verification (i.e., before or after having verified the Signature_or_MAC field).</t>
        </li>
        <li>
          <t>The full set of information related to the current EDHOC session. This especially includes the selected cipher suite and the ephemeral Diffie-Hellman public keys G_X and G_Y that the two peers have exchanged in the EDHOC session.</t>
        </li>
        <li>
          <t>The other peers' authentication credentials that the peer P stores.</t>
        </li>
        <li>
          <t>All the decrypted information elements retrieved from M.</t>
        </li>
        <li>
          <t>The EAD items included in M.  </t>
          <ul spacing="normal">
            <li>
              <t>Note that EDHOC might do some preliminary work on M before invoking the SPO, in order to provide the SPO only with actually relevant EAD items. This requires the application to additionally provide EDHOC with the ead_labels of the EAD items that the peer P recognizes (see <xref section="3.8" sectionFormat="of" target="RFC9528"/>).      </t>
              <t>
With such information available, EDHOC can early abort the current session in case M includes any EAD item which is both critical and not recognized by the peer P.      </t>
              <t>
If no such EAD items are found, EDHOC can remove any padding EAD item (see <xref section="3.8.1" sectionFormat="of" target="RFC9528"/>), as well as any EAD item which is neither critical nor recognized (since the SPO is going to ignore it anyway). As a result, EDHOC is able to provide the SPO only with EAD items that will be recognized and that require actual processing.</t>
            </li>
            <li>
              <t>Note that, after having processed the EAD items, the SPO might actually need to store them throughout the whole EDHOC execution, e.g., in order to refer to them also when processing later EDHOC messages in the current EDHOC session.</t>
            </li>
          </ul>
        </li>
      </ul>
      <t>The SPO performs the following tasks on an incoming EDHOC message M.</t>
      <ul spacing="normal">
        <li>
          <t>The SPO fetches and/or validates the other peer's authentication credential CRED, based on a dedicated EAD item of M or on the ID_CRED field of M (for EDHOC message_2 or message_3).</t>
        </li>
        <li>
          <t>The SPO processes the EAD items conveyed in the EAD field of M.</t>
        </li>
        <li>
          <t>The SPO stores the results of the performed operations, and makes such results available to the application.</t>
        </li>
        <li>
          <t>When the SPO has completed its side processing and transfers control back to EDHOC, the SPO provides EDHOC with the produced EAD items to include in the EAD field of the next outgoing EDHOC message. The production of such EAD items can be triggered, e.g., by:  </t>
          <ul spacing="normal">
            <li>
              <t>The consumption of EAD items included in M; and</t>
            </li>
            <li>
              <t>The execution of instructions that the SPO has received from the application, concerning EAD items to produce irrespective of other EAD items included in M.</t>
            </li>
          </ul>
        </li>
      </ul>
      <t>In the following, <xref target="sec-message-side-processing-m1"/> to <xref target="sec-message-side-processing-m2-m3"/> describe more in detail the actions performed by the SPO on the different, incoming EDHOC messages.</t>
      <t>Then, <xref target="sec-message-side-processing-particular"/> describes further, special handling of incoming EDHOC messages in particular situations.</t>
      <section anchor="sec-message-side-processing-m1">
        <name>EDHOC message_1</name>
        <t>During the processing of an incoming EDHOC message_1, EDHOC invokes the SPO only once, after the Responder peer has successfully decoded the message and accepted the selected cipher suite.</t>
        <t>If the EAD_1 field is present, the SPO processes the EAD items included therein.</t>
        <t>Once all such EAD items have been processed the SPO transfers control back to EDHOC. When doing so, the SPO also provides EDHOC with any produced EAD items to include in the EAD field of the next outgoing EDHOC message.</t>
        <t>Then, EDHOC resumes its execution and advances its protocol state.</t>
      </section>
      <section anchor="sec-message-side-processing-m4">
        <name>EDHOC message_4</name>
        <t>During the processing of an incoming EDHOC message_4, EDHOC invokes the SPO only once, after the Initiator peer has successfully decrypted the message.</t>
        <t>If the EAD_4 field is present, the SPO processes the EAD items included therein.</t>
        <t>Once all such EAD items have been processed, the SPO transfers control back to EDHOC, which resumes its execution and advances its protocol state.</t>
      </section>
      <section anchor="sec-message-side-processing-m2-m3">
        <name>EDHOC message_2 and message_3</name>
        <t>The following refers to "message_X" as an incoming EDHOC message_2 or message_3, and to "message verification" as the verification of Signature_or_MAC_X in message_X.</t>
        <t>During the processing of a message_X, EDHOC invokes the SPO two times:</t>
        <ul spacing="normal">
          <li>
            <t>Right after message_X has been decrypted and before its verification starts. Following this invocation, the SPO performs the actions described in <xref target="sec-pre-verif"/>.</t>
          </li>
          <li>
            <t>Right after message_X has been successfully verified. Following this invocation, the SPO performs the actions described in <xref target="sec-post-verif"/>.</t>
          </li>
        </ul>
        <t>The flowcharts in <xref target="sec-m2-m3-flowcharts"/> show the high-level interaction between the core EDHOC processing and the SPO, as well as the different steps taken for processing an incoming message_X.</t>
        <section anchor="sec-pre-verif">
          <name>Pre-Verification Side Processing</name>
          <t>The pre-verification side processing occurs in two sequential phases, namely PHASE_1 and PHASE_2.</t>
          <t>PHASE_1 - During PHASE_1, the SPO at the recipient peer P determines CRED, i.e., the other peer's authentication credential to use in the ongoing EDHOC session. In particular, the SPO performs the following steps.</t>
          <ol spacing="normal" type="1"><li>
              <t>The SPO determines CRED based on ID_CRED_X or on an EAD item in message_X.  </t>
              <t>
Those may specify CRED by value or by reference, including a URI or other external reference where CRED can be retrieved from.  </t>
              <t>
If CRED is already installed, the SPO moves to step 2. Otherwise, the SPO moves to step 3.</t>
            </li>
            <li>
              <t>The SPO determines if the stored CRED is currently valid, e.g., by asserting that CRED has not expired and has not been revoked.  </t>
              <t>
Performing such a validation may require the SPO to first process an EAD item included in message_X. For example, it can be an EAD item in EDHOC message_2, which confirms or revokes the validity of CRED_R specified by ID_CRED_R, as the result of an OCSP process <xref target="RFC6960"/>.  </t>
              <t>
In case CRED is determined to be valid, the SPO moves to step 9. Otherwise, the SPO moves to step 11.</t>
            </li>
            <li>
              <t>The SPO attempts to retrieve CRED, and then moves to step 4.</t>
            </li>
            <li>
              <t>If the retrieval of CRED has succeeded, the SPO moves to step 5. Otherwise, the SPO moves to step 11.</t>
            </li>
            <li>
              <t>If the enforced trust policy for new authentication credentials is "NO-LEARNING" (see <xref target="sec-trust-models"/>), the SPO moves to step 11. Otherwise, the SPO moves to step 6.</t>
            </li>
            <li>
              <t>If this step has been reached, the peer P enforces the trust policy "LEARNING" (see <xref target="sec-trust-models"/>) and it is not already storing the retrieved CRED.  </t>
              <t>
Consistently, the SPO determines if CRED is currently valid, e.g., by asserting that CRED has not expired and has not been revoked. Then, the SPO moves to step 7.  </t>
              <t>
Validating CRED may require the SPO to first process an EAD item included in message_X. For example, it can be an EAD item in EDHOC message_2 that: i) specifies a voucher for validating CRED_R as a CWT Claims Set (CCS) <xref target="RFC8392"/> transported by value in ID_CRED_R (see <xref target="I-D.ietf-lake-authz"/>); or instead ii) an OCSP response <xref target="RFC6960"/> for validating CRED_R as a certificate transported by value or reference in ID_CRED_R.</t>
            </li>
            <li>
              <t>If CRED has been determined valid, the SPO moves to step 8. Otherwise, the SPO moves to step 11.</t>
            </li>
            <li>
              <t>The SPO stores CRED as a valid and trusted authentication credential associated with the other peer, together with corresponding authentication credential identifiers (see <xref target="sec-trust-models"/>). Then, the SPO moves to step 9.</t>
            </li>
            <li>
              <t>The SPO checks if CRED is fine to use in the context of the ongoing EDHOC session, also depending on the specific identity of the other peer (see Sections <xref target="RFC9528" section="3.5" sectionFormat="bare"/> and <xref target="RFC9528" section="D.2" sectionFormat="bare"/> of <xref target="RFC9528"/>).  </t>
              <t>
If this is the case, the SPO moves to step 10. Otherwise, the SPO moves to step 11.</t>
            </li>
            <li>
              <t>P uses CRED as authentication credential of the other peer in the ongoing EDHOC session.  </t>
              <t>
Then, PHASE_1 ends, and the pre-verification side processing moves to the next PHASE_2 (see below).</t>
            </li>
            <li>
              <t>The SPO has not found a valid authentication credential associated with the other peer that can be used in the ongoing EDHOC session. Therefore, the EDHOC session with the other peer is aborted.</t>
            </li>
          </ol>
          <t>PHASE_2 - During PHASE_2, the SPO processes any EAD item included in message_X such that both the following conditions hold.</t>
          <ul spacing="normal">
            <li>
              <t>The EAD item has <em>not</em> been already processed during PHASE_1.</t>
            </li>
            <li>
              <t>The EAD item can be processed before performing the verification of message_X.</t>
            </li>
          </ul>
          <t>Once all such EAD items have been processed, the SPO transfers control back to EDHOC, which either aborts the ongoing EDHOC session or continues the processing of message_X with its corresponding message verification.</t>
        </section>
        <section anchor="sec-post-verif">
          <name>Post-Verification Side Processing</name>
          <t>During the post-verification side processing, the SPO processes any EAD item included in message_X such that the processing of that EAD item had to wait for completing the successful message verification.</t>
          <t>The late processing of such EAD items is typically due to the fact that a pre-requirement has to be fulfilled first. For example, the recipient peer P has to have first asserted that the other peer does possess the private key corresponding to the public key of the other peer's authentication credential CRED determined during the pre-verification side processing (see <xref target="sec-pre-verif"/>). This requirement is fulfilled after a successful message verification of message_X.</t>
          <t>Once all such EAD items have been processed, the SPO transfers control back to EDHOC. When doing so, the SPO also provides EDHOC with any produced EAD items to include in the EAD field of the next outgoing EDHOC message.</t>
          <t>Then, EDHOC resumes its execution and advances its protocol state.</t>
        </section>
        <section anchor="sec-m2-m3-flowcharts">
          <name>Flowcharts</name>
          <t>The flowchart in <xref target="fig-flowchart-spo-high-level"/> shows the high-level interaction between the core EDHOC processing and the SPO, with particular reference to an incoming EDHOC message_2 or message_3.</t>
          <figure anchor="fig-flowchart-spo-high-level">
            <name>High-Level Interaction Between the Core EDHOC Processing and the Side-Processor Object (SPO)</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="816" width="576" viewBox="0 0 576 816" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,112 L 8,368" fill="none" stroke="black"/>
                  <path d="M 8,496 L 8,800" fill="none" stroke="black"/>
                  <path d="M 24,160 L 24,208" fill="none" stroke="black"/>
                  <path d="M 24,544 L 24,752" fill="none" stroke="black"/>
                  <path d="M 56,80 L 56,152" fill="none" stroke="black"/>
                  <path d="M 64,272 L 64,320" fill="none" stroke="black"/>
                  <path d="M 120,160 L 120,208" fill="none" stroke="black"/>
                  <path d="M 144,328 L 144,536" fill="none" stroke="black"/>
                  <path d="M 160,160 L 160,208" fill="none" stroke="black"/>
                  <path d="M 176,216 L 176,264" fill="none" stroke="black"/>
                  <path d="M 184,272 L 184,320" fill="none" stroke="black"/>
                  <path d="M 224,272 L 224,320" fill="none" stroke="black"/>
                  <path d="M 240,328 L 240,536" fill="none" stroke="black"/>
                  <path d="M 248,544 L 248,752" fill="none" stroke="black"/>
                  <path d="M 296,160 L 296,208" fill="none" stroke="black"/>
                  <path d="M 296,544 L 296,592" fill="none" stroke="black"/>
                  <path d="M 336,328 L 336,536" fill="none" stroke="black"/>
                  <path d="M 392,272 L 392,320" fill="none" stroke="black"/>
                  <path d="M 400,160 L 400,208" fill="none" stroke="black"/>
                  <path d="M 416,216 L 416,536" fill="none" stroke="black"/>
                  <path d="M 488,592 L 488,624" fill="none" stroke="black"/>
                  <path d="M 536,160 L 536,208" fill="none" stroke="black"/>
                  <path d="M 536,544 L 536,592" fill="none" stroke="black"/>
                  <path d="M 568,112 L 568,368" fill="none" stroke="black"/>
                  <path d="M 568,496 L 568,800" fill="none" stroke="black"/>
                  <path d="M 8,112 L 48,112" fill="none" stroke="black"/>
                  <path d="M 64,112 L 568,112" fill="none" stroke="black"/>
                  <path d="M 24,160 L 120,160" fill="none" stroke="black"/>
                  <path d="M 160,160 L 296,160" fill="none" stroke="black"/>
                  <path d="M 400,160 L 536,160" fill="none" stroke="black"/>
                  <path d="M 128,176 L 152,176" fill="none" stroke="black"/>
                  <path d="M 24,208 L 120,208" fill="none" stroke="black"/>
                  <path d="M 160,208 L 296,208" fill="none" stroke="black"/>
                  <path d="M 400,208 L 536,208" fill="none" stroke="black"/>
                  <path d="M 64,272 L 184,272" fill="none" stroke="black"/>
                  <path d="M 224,272 L 392,272" fill="none" stroke="black"/>
                  <path d="M 64,320 L 184,320" fill="none" stroke="black"/>
                  <path d="M 224,320 L 392,320" fill="none" stroke="black"/>
                  <path d="M 8,368 L 136,368" fill="none" stroke="black"/>
                  <path d="M 152,368 L 232,368" fill="none" stroke="black"/>
                  <path d="M 248,368 L 328,368" fill="none" stroke="black"/>
                  <path d="M 344,368 L 408,368" fill="none" stroke="black"/>
                  <path d="M 424,368 L 568,368" fill="none" stroke="black"/>
                  <path d="M 8,496 L 136,496" fill="none" stroke="black"/>
                  <path d="M 152,496 L 232,496" fill="none" stroke="black"/>
                  <path d="M 248,496 L 328,496" fill="none" stroke="black"/>
                  <path d="M 344,496 L 408,496" fill="none" stroke="black"/>
                  <path d="M 424,496 L 568,496" fill="none" stroke="black"/>
                  <path d="M 24,544 L 248,544" fill="none" stroke="black"/>
                  <path d="M 296,544 L 536,544" fill="none" stroke="black"/>
                  <path d="M 296,592 L 480,592" fill="none" stroke="black"/>
                  <path d="M 496,592 L 536,592" fill="none" stroke="black"/>
                  <path d="M 256,624 L 312,624" fill="none" stroke="black"/>
                  <path d="M 432,624 L 480,624" fill="none" stroke="black"/>
                  <path d="M 24,752 L 248,752" fill="none" stroke="black"/>
                  <path d="M 8,800 L 568,800" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="424,216 412,210.4 412,221.6" fill="black" transform="rotate(270,416,216)"/>
                  <polygon class="arrowhead" points="344,536 332,530.4 332,541.6" fill="black" transform="rotate(90,336,536)"/>
                  <polygon class="arrowhead" points="248,328 236,322.4 236,333.6" fill="black" transform="rotate(270,240,328)"/>
                  <polygon class="arrowhead" points="184,264 172,258.4 172,269.6" fill="black" transform="rotate(90,176,264)"/>
                  <polygon class="arrowhead" points="160,176 148,170.4 148,181.6" fill="black" transform="rotate(0,152,176)"/>
                  <polygon class="arrowhead" points="152,536 140,530.4 140,541.6" fill="black" transform="rotate(90,144,536)"/>
                  <polygon class="arrowhead" points="64,152 52,146.4 52,157.6" fill="black" transform="rotate(90,56,152)"/>
                  <circle cx="248" cy="624" r="6" class="opendot" fill="white" stroke="black"/>
                  <circle cx="488" cy="592" r="6" class="opendot" fill="white" stroke="black"/>
                  <circle cx="488" cy="624" r="6" class="opendot" fill="white" stroke="black"/>
                  <g class="text">
                    <text x="24" y="36">EDHOC</text>
                    <text x="88" y="36">message_X</text>
                    <text x="12" y="52">(X</text>
                    <text x="32" y="52">=</text>
                    <text x="48" y="52">2</text>
                    <text x="68" y="52">or</text>
                    <text x="92" y="52">3)</text>
                    <text x="404" y="132">Core</text>
                    <text x="448" y="132">EDHOC</text>
                    <text x="516" y="132">processing</text>
                    <text x="60" y="180">Decode</text>
                    <text x="204" y="180">Retrieve</text>
                    <text x="256" y="180">the</text>
                    <text x="440" y="180">Advance</text>
                    <text x="488" y="180">the</text>
                    <text x="72" y="196">message_X</text>
                    <text x="204" y="196">protocol</text>
                    <text x="264" y="196">state</text>
                    <text x="444" y="196">protocol</text>
                    <text x="504" y="196">state</text>
                    <text x="104" y="292">Decrypt</text>
                    <text x="260" y="292">Verify</text>
                    <text x="124" y="308">CYPHERTEXT_X</text>
                    <text x="308" y="308">Signature_or_MAC_X</text>
                    <text x="496" y="404">.................</text>
                    <text x="108" y="420">Divert</text>
                    <text x="208" y="420">Get</text>
                    <text x="300" y="420">Divert</text>
                    <text x="384" y="420">Get</text>
                    <text x="432" y="420">:</text>
                    <text x="456" y="420">EAD</text>
                    <text x="496" y="420">items</text>
                    <text x="560" y="420">:</text>
                    <text x="212" y="436">back</text>
                    <text x="388" y="436">back</text>
                    <text x="432" y="436">:</text>
                    <text x="456" y="436">for</text>
                    <text x="488" y="436">the</text>
                    <text x="524" y="436">next</text>
                    <text x="560" y="436">:</text>
                    <text x="432" y="452">:</text>
                    <text x="464" y="452">EDHOC</text>
                    <text x="520" y="452">message</text>
                    <text x="560" y="452">:</text>
                    <text x="496" y="468">:...............:</text>
                    <text x="44" y="564">a)</text>
                    <text x="96" y="564">Retrieval</text>
                    <text x="152" y="564">and</text>
                    <text x="348" y="564">Processing</text>
                    <text x="404" y="564">of</text>
                    <text x="100" y="580">validation</text>
                    <text x="156" y="580">of</text>
                    <text x="200" y="580">CRED_X;</text>
                    <text x="376" y="580">post-verification</text>
                    <text x="464" y="580">EAD</text>
                    <text x="504" y="580">items</text>
                    <text x="44" y="596">b)</text>
                    <text x="80" y="596">Trust</text>
                    <text x="148" y="596">assessment</text>
                    <text x="68" y="612">of</text>
                    <text x="112" y="612">CRED_X;</text>
                    <text x="44" y="628">c)</text>
                    <text x="100" y="628">Processing</text>
                    <text x="156" y="628">of</text>
                    <text x="348" y="628">Shared</text>
                    <text x="400" y="628">state</text>
                    <text x="124" y="644">pre-verification</text>
                    <text x="72" y="660">EAD</text>
                    <text x="112" y="660">items</text>
                    <text x="404" y="660">......................</text>
                    <text x="320" y="676">:</text>
                    <text x="380" y="676">Instructions</text>
                    <text x="456" y="676">about</text>
                    <text x="488" y="676">:</text>
                    <text x="40" y="692">-</text>
                    <text x="64" y="692">(a)</text>
                    <text x="96" y="692">and</text>
                    <text x="128" y="692">(c)</text>
                    <text x="168" y="692">might</text>
                    <text x="212" y="692">have</text>
                    <text x="320" y="692">:</text>
                    <text x="344" y="692">EAD</text>
                    <text x="384" y="692">items</text>
                    <text x="420" y="692">to</text>
                    <text x="488" y="692">:</text>
                    <text x="60" y="708">to</text>
                    <text x="96" y="708">occur</text>
                    <text x="132" y="708">in</text>
                    <text x="180" y="708">parallel</text>
                    <text x="320" y="708">:</text>
                    <text x="392" y="708">unconditionally</text>
                    <text x="488" y="708">:</text>
                    <text x="40" y="724">-</text>
                    <text x="64" y="724">(b)</text>
                    <text x="112" y="724">depends</text>
                    <text x="156" y="724">on</text>
                    <text x="184" y="724">the</text>
                    <text x="320" y="724">:</text>
                    <text x="360" y="724">produce</text>
                    <text x="408" y="724">for</text>
                    <text x="440" y="724">the</text>
                    <text x="488" y="724">:</text>
                    <text x="68" y="740">used</text>
                    <text x="112" y="740">trust</text>
                    <text x="160" y="740">model</text>
                    <text x="320" y="740">:</text>
                    <text x="348" y="740">next</text>
                    <text x="392" y="740">EDHOC</text>
                    <text x="448" y="740">message</text>
                    <text x="488" y="740">:</text>
                    <text x="404" y="756">:....................:</text>
                    <text x="444" y="788">Side-Processor</text>
                    <text x="532" y="788">Object</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![CDATA[
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             |  |                  |
|      | CYPHERTEXT_X |    | Signature_or_MAC_X |  |                  |
|      +--------------+    +--------------------+  |                  |
|                |           ^           |         |                  |
|                |           |           |         |                  |
+----------------|-----------|-----------|---------|------------------+
                 |           |           |         |
                 |           |           |         | .................
          Divert |      Get  |    Divert |    Get  | : EAD items     :
                 |      back |           |    back | : for the next  :
                 |           |           |         | : EDHOC message :
                 |           |           |         | :...............:
                 |           |           |         |
+----------------|-----------|-----------|---------|------------------+
|                |           |           |         |                  |
|                v           |           v         |                  |
| +---------------------------+     +-----------------------------+   |
| | a) Retrieval and          |     | Processing of               |   |
| |    validation of CRED_X;  |     | post-verification EAD items |   |
| | b) Trust assessment       |     +-----------------------o-----+   |
| |    of CRED_X;             |                             |         |
| | c) Processing of          o-------- Shared state -------o         |
| |    pre-verification       |                                       |
| |    EAD items              |        ......................         |
| |                           |        : Instructions about :         |
| | - (a) and (c) might have  |        : EAD items to       :         |
| |   to occur in parallel    |        : unconditionally    :         |
| | - (b) depends on the      |        : produce for the    :         |
| |   used trust model        |        : next EDHOC message :         |
| +---------------------------+        :....................:         |
|                                                                     |
|                                               Side-Processor Object |
+---------------------------------------------------------------------+
]]></artwork>
            </artset>
          </figure>
          <t>The flowchart in <xref target="fig-flowchart-spo-low-level"/> shows the different steps taken for processing an incoming EDHOC message_2 and message_3.</t>
          <figure anchor="fig-flowchart-spo-low-level">
            <name>Processing steps for EDHOC message_2 and message_3</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="2048" width="560" viewBox="0 0 560 2048" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,304 L 8,1040" fill="none" stroke="black"/>
                  <path d="M 8,1088 L 8,1216" fill="none" stroke="black"/>
                  <path d="M 8,1568 L 8,1808" fill="none" stroke="black"/>
                  <path d="M 16,144 L 16,176" fill="none" stroke="black"/>
                  <path d="M 16,1392 L 16,1424" fill="none" stroke="black"/>
                  <path d="M 16,1984 L 16,2032" fill="none" stroke="black"/>
                  <path d="M 24,352 L 24,432" fill="none" stroke="black"/>
                  <path d="M 24,528 L 24,576" fill="none" stroke="black"/>
                  <path d="M 24,640 L 24,720" fill="none" stroke="black"/>
                  <path d="M 24,896 L 24,1008" fill="none" stroke="black"/>
                  <path d="M 24,1136 L 24,1184" fill="none" stroke="black"/>
                  <path d="M 24,1616 L 24,1664" fill="none" stroke="black"/>
                  <path d="M 24,1728 L 24,1776" fill="none" stroke="black"/>
                  <path d="M 88,96 L 88,136" fill="none" stroke="black"/>
                  <path d="M 88,184 L 88,208" fill="none" stroke="black"/>
                  <path d="M 88,288 L 88,344" fill="none" stroke="black"/>
                  <path d="M 88,440 L 88,520" fill="none" stroke="black"/>
                  <path d="M 88,584 L 88,632" fill="none" stroke="black"/>
                  <path d="M 88,728 L 88,888" fill="none" stroke="black"/>
                  <path d="M 88,1016 L 88,1128" fill="none" stroke="black"/>
                  <path d="M 88,1192 L 88,1264" fill="none" stroke="black"/>
                  <path d="M 88,1344 L 88,1384" fill="none" stroke="black"/>
                  <path d="M 88,1432 L 88,1472" fill="none" stroke="black"/>
                  <path d="M 88,1552 L 88,1608" fill="none" stroke="black"/>
                  <path d="M 88,1672 L 88,1720" fill="none" stroke="black"/>
                  <path d="M 88,1784 L 88,1856" fill="none" stroke="black"/>
                  <path d="M 88,1936 L 88,1976" fill="none" stroke="black"/>
                  <path d="M 152,1984 L 152,2032" fill="none" stroke="black"/>
                  <path d="M 168,528 L 168,576" fill="none" stroke="black"/>
                  <path d="M 168,1392 L 168,1424" fill="none" stroke="black"/>
                  <path d="M 176,144 L 176,176" fill="none" stroke="black"/>
                  <path d="M 176,896 L 176,1008" fill="none" stroke="black"/>
                  <path d="M 192,640 L 192,720" fill="none" stroke="black"/>
                  <path d="M 200,352 L 200,432" fill="none" stroke="black"/>
                  <path d="M 224,704 L 224,912" fill="none" stroke="black"/>
                  <path d="M 248,352 L 248,432" fill="none" stroke="black"/>
                  <path d="M 248,528 L 248,672" fill="none" stroke="black"/>
                  <path d="M 296,480 L 296,520" fill="none" stroke="black"/>
                  <path d="M 296,784 L 296,816" fill="none" stroke="black"/>
                  <path d="M 296,880 L 296,1008" fill="none" stroke="black"/>
                  <path d="M 320,680 L 320,776" fill="none" stroke="black"/>
                  <path d="M 320,824 L 320,872" fill="none" stroke="black"/>
                  <path d="M 344,528 L 344,672" fill="none" stroke="black"/>
                  <path d="M 368,352 L 368,432" fill="none" stroke="black"/>
                  <path d="M 384,1728 L 384,1776" fill="none" stroke="black"/>
                  <path d="M 392,1616 L 392,1664" fill="none" stroke="black"/>
                  <path d="M 400,528 L 400,592" fill="none" stroke="black"/>
                  <path d="M 408,352 L 408,432" fill="none" stroke="black"/>
                  <path d="M 416,440 L 416,480" fill="none" stroke="black"/>
                  <path d="M 416,1568 L 416,1808" fill="none" stroke="black"/>
                  <path d="M 424,672 L 424,720" fill="none" stroke="black"/>
                  <path d="M 488,1136 L 488,1184" fill="none" stroke="black"/>
                  <path d="M 504,440 L 504,520" fill="none" stroke="black"/>
                  <path d="M 504,600 L 504,664" fill="none" stroke="black"/>
                  <path d="M 504,728 L 504,776" fill="none" stroke="black"/>
                  <path d="M 520,352 L 520,432" fill="none" stroke="black"/>
                  <path d="M 536,528 L 536,592" fill="none" stroke="black"/>
                  <path d="M 536,672 L 536,720" fill="none" stroke="black"/>
                  <path d="M 536,784 L 536,816" fill="none" stroke="black"/>
                  <path d="M 536,880 L 536,1008" fill="none" stroke="black"/>
                  <path d="M 552,304 L 552,1040" fill="none" stroke="black"/>
                  <path d="M 552,1088 L 552,1216" fill="none" stroke="black"/>
                  <path d="M 16,144 L 176,144" fill="none" stroke="black"/>
                  <path d="M 16,176 L 176,176" fill="none" stroke="black"/>
                  <path d="M 8,304 L 80,304" fill="none" stroke="black"/>
                  <path d="M 96,304 L 552,304" fill="none" stroke="black"/>
                  <path d="M 24,352 L 200,352" fill="none" stroke="black"/>
                  <path d="M 248,352 L 368,352" fill="none" stroke="black"/>
                  <path d="M 408,352 L 520,352" fill="none" stroke="black"/>
                  <path d="M 208,384 L 240,384" fill="none" stroke="black"/>
                  <path d="M 376,384 L 400,384" fill="none" stroke="black"/>
                  <path d="M 24,432 L 200,432" fill="none" stroke="black"/>
                  <path d="M 248,432 L 368,432" fill="none" stroke="black"/>
                  <path d="M 408,432 L 520,432" fill="none" stroke="black"/>
                  <path d="M 296,480 L 416,480" fill="none" stroke="black"/>
                  <path d="M 24,528 L 168,528" fill="none" stroke="black"/>
                  <path d="M 248,528 L 344,528" fill="none" stroke="black"/>
                  <path d="M 400,528 L 536,528" fill="none" stroke="black"/>
                  <path d="M 176,544 L 240,544" fill="none" stroke="black"/>
                  <path d="M 352,544 L 392,544" fill="none" stroke="black"/>
                  <path d="M 24,576 L 168,576" fill="none" stroke="black"/>
                  <path d="M 400,592 L 536,592" fill="none" stroke="black"/>
                  <path d="M 24,640 L 192,640" fill="none" stroke="black"/>
                  <path d="M 200,656 L 240,656" fill="none" stroke="black"/>
                  <path d="M 248,672 L 344,672" fill="none" stroke="black"/>
                  <path d="M 424,672 L 536,672" fill="none" stroke="black"/>
                  <path d="M 200,704 L 224,704" fill="none" stroke="black"/>
                  <path d="M 24,720 L 192,720" fill="none" stroke="black"/>
                  <path d="M 424,720 L 536,720" fill="none" stroke="black"/>
                  <path d="M 296,784 L 536,784" fill="none" stroke="black"/>
                  <path d="M 296,816 L 536,816" fill="none" stroke="black"/>
                  <path d="M 296,880 L 536,880" fill="none" stroke="black"/>
                  <path d="M 24,896 L 176,896" fill="none" stroke="black"/>
                  <path d="M 224,912 L 288,912" fill="none" stroke="black"/>
                  <path d="M 24,1008 L 176,1008" fill="none" stroke="black"/>
                  <path d="M 296,1008 L 536,1008" fill="none" stroke="black"/>
                  <path d="M 8,1040 L 80,1040" fill="none" stroke="black"/>
                  <path d="M 96,1040 L 552,1040" fill="none" stroke="black"/>
                  <path d="M 8,1088 L 80,1088" fill="none" stroke="black"/>
                  <path d="M 96,1088 L 552,1088" fill="none" stroke="black"/>
                  <path d="M 24,1136 L 488,1136" fill="none" stroke="black"/>
                  <path d="M 24,1184 L 488,1184" fill="none" stroke="black"/>
                  <path d="M 8,1216 L 80,1216" fill="none" stroke="black"/>
                  <path d="M 96,1216 L 552,1216" fill="none" stroke="black"/>
                  <path d="M 16,1392 L 168,1392" fill="none" stroke="black"/>
                  <path d="M 16,1424 L 168,1424" fill="none" stroke="black"/>
                  <path d="M 8,1568 L 80,1568" fill="none" stroke="black"/>
                  <path d="M 96,1568 L 416,1568" fill="none" stroke="black"/>
                  <path d="M 24,1616 L 392,1616" fill="none" stroke="black"/>
                  <path d="M 24,1664 L 392,1664" fill="none" stroke="black"/>
                  <path d="M 24,1728 L 384,1728" fill="none" stroke="black"/>
                  <path d="M 24,1776 L 384,1776" fill="none" stroke="black"/>
                  <path d="M 8,1808 L 80,1808" fill="none" stroke="black"/>
                  <path d="M 96,1808 L 416,1808" fill="none" stroke="black"/>
                  <path d="M 16,1984 L 152,1984" fill="none" stroke="black"/>
                  <path d="M 16,2032 L 152,2032" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="512,776 500,770.4 500,781.6" fill="black" transform="rotate(90,504,776)"/>
                  <polygon class="arrowhead" points="512,664 500,658.4 500,669.6" fill="black" transform="rotate(90,504,664)"/>
                  <polygon class="arrowhead" points="512,520 500,514.4 500,525.6" fill="black" transform="rotate(90,504,520)"/>
                  <polygon class="arrowhead" points="408,384 396,378.4 396,389.6" fill="black" transform="rotate(0,400,384)"/>
                  <polygon class="arrowhead" points="360,544 348,538.4 348,549.6" fill="black" transform="rotate(180,352,544)"/>
                  <polygon class="arrowhead" points="328,872 316,866.4 316,877.6" fill="black" transform="rotate(90,320,872)"/>
                  <polygon class="arrowhead" points="328,680 316,674.4 316,685.6" fill="black" transform="rotate(270,320,680)"/>
                  <polygon class="arrowhead" points="304,520 292,514.4 292,525.6" fill="black" transform="rotate(90,296,520)"/>
                  <polygon class="arrowhead" points="248,656 236,650.4 236,661.6" fill="black" transform="rotate(0,240,656)"/>
                  <polygon class="arrowhead" points="248,544 236,538.4 236,549.6" fill="black" transform="rotate(0,240,544)"/>
                  <polygon class="arrowhead" points="248,384 236,378.4 236,389.6" fill="black" transform="rotate(0,240,384)"/>
                  <polygon class="arrowhead" points="208,704 196,698.4 196,709.6" fill="black" transform="rotate(180,200,704)"/>
                  <polygon class="arrowhead" points="96,1976 84,1970.4 84,1981.6" fill="black" transform="rotate(90,88,1976)"/>
                  <polygon class="arrowhead" points="96,1856 84,1850.4 84,1861.6" fill="black" transform="rotate(90,88,1856)"/>
                  <polygon class="arrowhead" points="96,1720 84,1714.4 84,1725.6" fill="black" transform="rotate(90,88,1720)"/>
                  <polygon class="arrowhead" points="96,1608 84,1602.4 84,1613.6" fill="black" transform="rotate(90,88,1608)"/>
                  <polygon class="arrowhead" points="96,1472 84,1466.4 84,1477.6" fill="black" transform="rotate(90,88,1472)"/>
                  <polygon class="arrowhead" points="96,1384 84,1378.4 84,1389.6" fill="black" transform="rotate(90,88,1384)"/>
                  <polygon class="arrowhead" points="96,1264 84,1258.4 84,1269.6" fill="black" transform="rotate(90,88,1264)"/>
                  <polygon class="arrowhead" points="96,1128 84,1122.4 84,1133.6" fill="black" transform="rotate(90,88,1128)"/>
                  <polygon class="arrowhead" points="96,888 84,882.4 84,893.6" fill="black" transform="rotate(90,88,888)"/>
                  <polygon class="arrowhead" points="96,632 84,626.4 84,637.6" fill="black" transform="rotate(90,88,632)"/>
                  <polygon class="arrowhead" points="96,520 84,514.4 84,525.6" fill="black" transform="rotate(90,88,520)"/>
                  <polygon class="arrowhead" points="96,344 84,338.4 84,349.6" fill="black" transform="rotate(90,88,344)"/>
                  <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="56" y="164">Decrypt</text>
                    <text x="128" y="164">message_X</text>
                    <text x="216" y="164">(Core</text>
                    <text x="264" y="164">EDHOC</text>
                    <text x="336" y="164">Processing)</text>
                    <text x="40" y="244">Control</text>
                    <text x="120" y="244">transferred</text>
                    <text x="180" y="244">to</text>
                    <text x="24" y="260">the</text>
                    <text x="100" y="260">side-processor</text>
                    <text x="188" y="260">object</text>
                    <text x="244" y="324">Pre-verification</text>
                    <text x="332" y="324">side</text>
                    <text x="396" y="324">processing</text>
                    <text x="480" y="324">(PHASE_1)</text>
                    <text x="44" y="372">1.</text>
                    <text x="76" y="372">Does</text>
                    <text x="136" y="372">ID_CRED_X</text>
                    <text x="220" y="372">NO</text>
                    <text x="268" y="372">3.</text>
                    <text x="316" y="372">Retrieve</text>
                    <text x="428" y="372">4.</text>
                    <text x="452" y="372">Is</text>
                    <text x="480" y="372">the</text>
                    <text x="44" y="388">or</text>
                    <text x="68" y="388">an</text>
                    <text x="96" y="388">EAD</text>
                    <text x="132" y="388">item</text>
                    <text x="276" y="388">CRED</text>
                    <text x="312" y="388">via</text>
                    <text x="456" y="388">retrieval</text>
                    <text x="56" y="404">point</text>
                    <text x="92" y="404">to</text>
                    <text x="116" y="404">an</text>
                    <text x="160" y="404">already</text>
                    <text x="296" y="404">ID_CRED_X</text>
                    <text x="348" y="404">or</text>
                    <text x="428" y="404">of</text>
                    <text x="460" y="404">CRED</text>
                    <text x="60" y="420">stored</text>
                    <text x="112" y="420">CRED?</text>
                    <text x="268" y="420">an</text>
                    <text x="296" y="420">EAD</text>
                    <text x="332" y="420">item</text>
                    <text x="464" y="420">successful?</text>
                    <text x="436" y="468">NO</text>
                    <text x="528" y="468">YES</text>
                    <text x="112" y="500">YES</text>
                    <text x="188" y="532">NO</text>
                    <text x="376" y="532">YES</text>
                    <text x="44" y="548">2.</text>
                    <text x="68" y="548">Is</text>
                    <text x="100" y="548">this</text>
                    <text x="140" y="548">CRED</text>
                    <text x="272" y="548">11.</text>
                    <text x="312" y="548">Abort</text>
                    <text x="420" y="548">5.</text>
                    <text x="444" y="548">Is</text>
                    <text x="472" y="548">the</text>
                    <text x="56" y="564">still</text>
                    <text x="108" y="564">valid?</text>
                    <text x="272" y="564">the</text>
                    <text x="312" y="564">EDHOC</text>
                    <text x="428" y="564">used</text>
                    <text x="476" y="564">policy</text>
                    <text x="288" y="580">session</text>
                    <text x="468" y="580">"NO-LEARNING"?</text>
                    <text x="112" y="612">YES</text>
                    <text x="384" y="628">The</text>
                    <text x="420" y="628">used</text>
                    <text x="468" y="628">policy</text>
                    <text x="524" y="628">NO</text>
                    <text x="212" y="644">NO</text>
                    <text x="380" y="644">is</text>
                    <text x="436" y="644">"LEARNING"</text>
                    <text x="44" y="660">9.</text>
                    <text x="68" y="660">Is</text>
                    <text x="100" y="660">this</text>
                    <text x="140" y="660">CRED</text>
                    <text x="52" y="676">good</text>
                    <text x="84" y="676">to</text>
                    <text x="112" y="676">use</text>
                    <text x="140" y="676">in</text>
                    <text x="168" y="676">the</text>
                    <text x="64" y="692">context</text>
                    <text x="108" y="692">of</text>
                    <text x="140" y="692">this</text>
                    <text x="444" y="692">6.</text>
                    <text x="492" y="692">Validate</text>
                    <text x="56" y="708">EDHOC</text>
                    <text x="116" y="708">session?</text>
                    <text x="452" y="708">CRED</text>
                    <text x="112" y="756">YES</text>
                    <text x="340" y="756">NO</text>
                    <text x="316" y="804">7.</text>
                    <text x="340" y="804">Is</text>
                    <text x="372" y="804">CRED</text>
                    <text x="420" y="804">valid?</text>
                    <text x="344" y="852">YES</text>
                    <text x="316" y="900">8.</text>
                    <text x="352" y="900">Store</text>
                    <text x="396" y="900">CRED</text>
                    <text x="428" y="900">as</text>
                    <text x="464" y="900">valid</text>
                    <text x="504" y="900">and</text>
                    <text x="48" y="916">10.</text>
                    <text x="100" y="916">Continue</text>
                    <text x="148" y="916">by</text>
                    <text x="340" y="916">trusted.</text>
                    <text x="80" y="932">considering</text>
                    <text x="148" y="932">this</text>
                    <text x="52" y="948">CRED</text>
                    <text x="84" y="948">as</text>
                    <text x="112" y="948">the</text>
                    <text x="324" y="948">Pair</text>
                    <text x="364" y="948">CRED</text>
                    <text x="404" y="948">with</text>
                    <text x="468" y="948">consistent</text>
                    <text x="92" y="964">authentication</text>
                    <text x="348" y="964">credential</text>
                    <text x="444" y="964">identifiers,</text>
                    <text x="512" y="964">for</text>
                    <text x="76" y="980">credential</text>
                    <text x="132" y="980">of</text>
                    <text x="324" y="980">each</text>
                    <text x="384" y="980">supported</text>
                    <text x="444" y="980">type</text>
                    <text x="476" y="980">of</text>
                    <text x="48" y="996">the</text>
                    <text x="88" y="996">other</text>
                    <text x="132" y="996">peer</text>
                    <text x="348" y="996">credential</text>
                    <text x="440" y="996">identifier.</text>
                    <text x="244" y="1108">Pre-verification</text>
                    <text x="332" y="1108">side</text>
                    <text x="396" y="1108">processing</text>
                    <text x="480" y="1108">(PHASE_2)</text>
                    <text x="64" y="1156">Process</text>
                    <text x="112" y="1156">the</text>
                    <text x="144" y="1156">EAD</text>
                    <text x="184" y="1156">items</text>
                    <text x="228" y="1156">that</text>
                    <text x="268" y="1156">have</text>
                    <text x="304" y="1156">not</text>
                    <text x="340" y="1156">been</text>
                    <text x="400" y="1156">processed</text>
                    <text x="460" y="1156">yet,</text>
                    <text x="48" y="1172">and</text>
                    <text x="84" y="1172">that</text>
                    <text x="120" y="1172">can</text>
                    <text x="148" y="1172">be</text>
                    <text x="200" y="1172">processed</text>
                    <text x="268" y="1172">before</text>
                    <text x="328" y="1172">message</text>
                    <text x="412" y="1172">verification</text>
                    <text x="40" y="1300">Control</text>
                    <text x="120" y="1300">transferred</text>
                    <text x="188" y="1300">back</text>
                    <text x="20" y="1316">to</text>
                    <text x="48" y="1316">the</text>
                    <text x="84" y="1316">core</text>
                    <text x="128" y="1316">EDHOC</text>
                    <text x="196" y="1316">processing</text>
                    <text x="52" y="1412">Verify</text>
                    <text x="120" y="1412">message_X</text>
                    <text x="200" y="1412">(core</text>
                    <text x="248" y="1412">EDHOC</text>
                    <text x="320" y="1412">processing)</text>
                    <text x="40" y="1508">Control</text>
                    <text x="120" y="1508">transferred</text>
                    <text x="180" y="1508">to</text>
                    <text x="24" y="1524">the</text>
                    <text x="100" y="1524">side-processor</text>
                    <text x="188" y="1524">object</text>
                    <text x="248" y="1588">Post-verification</text>
                    <text x="364" y="1588">processing</text>
                    <text x="64" y="1636">Process</text>
                    <text x="112" y="1636">the</text>
                    <text x="144" y="1636">EAD</text>
                    <text x="184" y="1636">items</text>
                    <text x="228" y="1636">that</text>
                    <text x="268" y="1636">have</text>
                    <text x="300" y="1636">to</text>
                    <text x="324" y="1636">be</text>
                    <text x="72" y="1652">processed</text>
                    <text x="140" y="1652">(also)</text>
                    <text x="192" y="1652">after</text>
                    <text x="248" y="1652">message</text>
                    <text x="332" y="1652">verification</text>
                    <text x="52" y="1748">Make</text>
                    <text x="88" y="1748">all</text>
                    <text x="120" y="1748">the</text>
                    <text x="168" y="1748">results</text>
                    <text x="212" y="1748">of</text>
                    <text x="240" y="1748">the</text>
                    <text x="272" y="1748">EAD</text>
                    <text x="332" y="1748">processing</text>
                    <text x="72" y="1764">available</text>
                    <text x="124" y="1764">to</text>
                    <text x="160" y="1764">build</text>
                    <text x="200" y="1764">the</text>
                    <text x="236" y="1764">next</text>
                    <text x="280" y="1764">EDHOC</text>
                    <text x="336" y="1764">message</text>
                    <text x="40" y="1892">Control</text>
                    <text x="120" y="1892">transferred</text>
                    <text x="188" y="1892">back</text>
                    <text x="20" y="1908">to</text>
                    <text x="48" y="1908">the</text>
                    <text x="84" y="1908">core</text>
                    <text x="128" y="1908">EDHOC</text>
                    <text x="196" y="1908">processing</text>
                    <text x="56" y="2004">Advance</text>
                    <text x="104" y="2004">the</text>
                    <text x="184" y="2004">(core</text>
                    <text x="232" y="2004">EDHOC</text>
                    <text x="304" y="2004">processing)</text>
                    <text x="60" y="2020">protocol</text>
                    <text x="120" y="2020">state</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![CDATA[
  Incoming
  EDHOC message_X
  (X = 2 or 3)

          |
          |
          v
 +-------------------+
 | Decrypt message_X |  (Core EDHOC Processing)
 +-------------------+
          |
          |

 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      | |
| | still valid?    |         | the EDHOC |      | used policy    | |
| +-----------------+         | session   |      | "NO-LEARNING"? | |
|         |                   |           |      +----------------+ |
|         | YES               |           |                   |     |
|         v                   |           |   The used policy | NO  |
| +--------------------+ NO   |           |   is "LEARNING"   |     |
| | 9. Is this CRED    |----->|           |                   v     |
| | good to use in the |      +-----------+         +-------------+ |
| | context of this    |               ^            | 6. Validate | |
| | EDHOC session?     |<--+           |            | CRED        | |
| +--------------------+   |           |            +-------------+ |
|         |                |           |                      |     |
|         | YES            |           | NO                   |     |
|         |                |           |                      v     |
|         |                |        +-----------------------------+ |
|         |                |        | 7. Is CRED valid?           | |
|         |                |        +-----------------------------+ |
|         |                |           |                            |
|         |                |           | YES                        |
|         |                |           v                            |
|         v                |        +-----------------------------+ |
| +------------------+     |        | 8. Store CRED as valid and  | |
| | 10. Continue by  |     +--------| trusted.                    | |
| | considering this |              |                             | |
| | CRED as the      |              | Pair CRED with consistent   | |
| | authentication   |              | credential identifiers, for | |
| | credential of    |              | each supported type of      | |
| | the other peer   |              | credential identifier.      | |
| +------------------+              +-----------------------------+ |
|         |                                                         |
+---------|---------------------------------------------------------+
          |
          |
+---------|---------------------------------------------------------+
|         |           Pre-verification side processing (PHASE_2)    |
|         v                                                         |
| +---------------------------------------------------------+       |
| | Process the EAD items that have not been processed yet, |       |
| | and that can be processed before message verification   |       |
| +---------------------------------------------------------+       |
|         |                                                         |
+---------|---------------------------------------------------------+
          |
          |
          v

 Control transferred back
 to the core EDHOC processing

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

 Control transferred to
 the side-processor object

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

 Control transferred back
 to the core EDHOC processing

          |
          |
          v
 +----------------+
 | Advance the    | (core EDHOC processing)
 | protocol state |
 +----------------+
]]></artwork>
            </artset>
          </figure>
        </section>
      </section>
      <section anchor="sec-message-side-processing-particular">
        <name>Side Processing in Particular Situations</name>
        <t>This section describes methods to perform special handling of incoming EDHOC messages in particular situations.</t>
        <section anchor="sec-message-side-processing-ace-prof">
          <name>EDHOC and OSCORE Profile of ACE</name>
          <t><xref target="sec-trust-models-ace-prof"/> discusses the case where two EDHOC peer use the ACE framework <xref target="RFC9200"/> and specifically the EDHOC and OSCORE profile of ACE defined in <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>.</t>
          <t>In particular, <xref target="sec-trust-models-ace-prof"/> considers a PEER_C that, when running EDHOC with PEER_RS, uses a dedicated EDHOC EAD item for uploading at PEER_RS an ACE Access Token, which in turn includes its own public authentication credential AUTH_CRED_C.</t>
          <t>Also as noted in <xref target="sec-trust-models-ace-prof"/>, this practically builds on PEER_RS supporting the trust policy "LEARNING" (see <xref target="sec-trust-models"/>), at least for its EDHOC resource used for exchanging the EDHOC messages of the EDHOC session in question.</t>
          <ul spacing="normal">
            <li>
              <t>Editor's note: TODO  </t>
              <t>
PEER_RS might have reasons to enforce the trust policy "NO_LEARNING" anyway. In that case, unless PEER_RS already stores AUTH_CRED_C, the upload of the Access Token by means of the EAD item has to fail, and consequently the EDHOC session is aborted.  </t>
              <t>
Explain how the SPO can practically ensure that to be the outcome.</t>
            </li>
            <li>
              <t>Editor's note: TODO  </t>
              <t>
AUTH_CRED_C is always specified (by value or by reference) in ID_CRED_R (ID_CRED_I) of EDHOC message_2 (EDHOC message_3).  </t>
              <t>
AUTH_CRED_C can also be specified (by value or by reference) within an Access Token, which is conveyed by an EDHOC EAD item in an EDHOC message that PEER_C sends to PEER_RS. The details also depend on the two EDHOC peers using either the EDHOC forward message flow or the EDHOC reverse message flow (see <xref section="A.2" sectionFormat="of" target="RFC9528"/>).  </t>
              <t>
When such an Access Token is uploaded by means of an EDHOC EAD item, PEER_RS has to perform consistency checks between the AUTH_CRED_C specified in ID_CRED_R or ID_CRED_I, and the AUTH_CRED_C specified within the Access Token.  </t>
              <t>
Explain when PEER_RS becomes able to perform the consistency check, for the different cases, depending on using the EDHOC forward message flow or the EDHOC reverse message flow, and on the specific EDHOC message including the EAD item that conveys the Access Token including AUTH_CRED_C.  </t>
              <t>
In the end, some of this content might better fit in <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>, while this document can keep only implementation-specific details.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="sec-block-wise">
      <name>Using EDHOC over CoAP with Block-Wise</name>
      <t><xref section="A.2" sectionFormat="of" target="RFC9528"/> specifies how to transfer EDHOC over CoAP <xref target="RFC7252"/>. In such a case, the EDHOC messages (possibly prepended by an EDHOC connection identifier) are transported in the payload of CoAP requests and responses, according to the EDHOC forward message flow or the EDHOC reverse message flow. Furthermore, <xref section="A.1" sectionFormat="of" target="RFC9528"/> specifies how to derive an OSCORE Security Context <xref target="RFC8613"/> from an EDHOC session.</t>
      <t>Building on that, <xref target="I-D.ietf-core-oscore-edhoc"/> further details the use of EDHOC with CoAP and OSCORE, and specifies an optimization approach for the EDHOC forward message flow that combines the EDHOC execution with the first subsequent OSCORE transaction. This is achieved by means of an "EDHOC + OSCORE request", i.e., a single CoAP request message that conveys both EDHOC message_3 of the ongoing EDHOC session and an OSCORE-protected application request, 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 clients supporting Block-wise transfers for CoAP <xref target="RFC7959"/> and the EDHOC + OSCORE request defined in <xref target="I-D.ietf-core-oscore-edhoc"/>.</t>
      <t>The following especially considers a CoAP client 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 client does not (further) split an OSCORE-protected request like an intermediary (e.g., a proxy) might do. This is the typical case for OSCORE endpoints (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_APP: the size in bytes of the application data to be included in a CoAP request. When Block-wise is used, this is referred to as the "body" to be fragmented into blocks.</t>
          </li>
          <li>
            <t>SIZE_EDHOC: the size in bytes of EDHOC message_3, if this is sent as part of the EDHOC + OSCORE request. Otherwise, the size of EDHOC message_3 plus the size in bytes of the EDHOC Connection Identifier C_R, 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</name>
        <t>Before sending an EDHOC + OSCORE request, the CoAP client has to perform the following checks. Note that, while the CoAP client is able to fragment the application data, 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_APP &lt;= LIMIT, the CoAP client must verify whether all the following conditions hold:  </t>
            <ul spacing="normal">
              <li>
                <t>COND1: SIZE_EDHOC &lt;= LIMIT</t>
              </li>
              <li>
                <t>COND2: (SIZE_APP + SIZE_EDHOC) &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 &lt;= LIMIT</t>
              </li>
              <li>
                <t>COND4: (SIZE_BLOCK + SIZE_EDHOC) &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_APP &gt; LIMIT</t>
          </li>
          <li>
            <t>COND6: (SIZE_APP + SIZE_EDHOC) &gt; LIMIT</t>
          </li>
        </ul>
        <t>In particular, consistently with <xref target="sec-block-wise-pre-req"/>, the used SIZE_BLOCK has to be such that the following condition also holds:</t>
        <ul spacing="normal">
          <li>
            <t>COND7: (SIZE_BLOCK + SIZE_EDHOC) &lt;= LIMIT</t>
          </li>
        </ul>
        <t>Note that the CoAP client might still use Block-wise due to reasons different from exceeding the size indicated by LIMIT.</t>
        <t>The following shows the number of round trips for completing both the EDHOC execution and the first OSCORE-protected exchange, under the assumption that the exchange of EDHOC message_1 and EDHOC message_2 do not result in using Block-wise.</t>
        <t>If <em>both</em> the conditions COND5 and COND6 hold, the use of Block-wise results in the following number of round trips experienced by the CoAP client.</t>
        <ul spacing="normal">
          <li>
            <t>If the original EDHOC execution workflow is used (see <xref section="A.2.1" sectionFormat="of" target="RFC9528"/>), the number of round trips RT_ORIG is equal to 1 + ceil(SIZE_EDHOC / SIZE_BLOCK) + ceil(SIZE_APP / SIZE_BLOCK).</t>
          </li>
          <li>
            <t>If the optimized EDHOC execution workflow is used (see <xref section="3" sectionFormat="of" target="I-D.ietf-core-oscore-edhoc"/>), the number of round trips RT_COMB is equal to 1 + ceil(SIZE_APP / 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_APP &lt;= LIMIT</t>
          </li>
          <li>
            <t>COND9: (SIZE_APP + SIZE_EDHOC) &gt; LIMIT</t>
          </li>
        </ul>
        <t>That is, since SIZE_APP &lt;= LIMIT, using Block-wise would not be required when using the original EDHOC execution workflow, provided that SIZE_EDHOC &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_APP + SIZE_EDHOC) &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_APP / SIZE_BLOCK).</t>
          </li>
        </ul>
        <t>It follows that RT_COMB &gt;= RT_ORIG, i.e., the optimized EDHOC execution workflow might still be not worse than the original EDHOC execution workflow in terms of round trips. This is the case only if the used SIZE_BLOCK is such that ceil(SIZE_APP / SIZE_BLOCK) is equal to 2, i.e., the EDHOC + OSCORE request is fragmented into only 2 inner blocks. However, even in such a case, there would be no advantage in terms or round trips compared to the original workflow, while still requiring the CoAP client and the CoAP server to perform the processing due to using the EDHOC + OSCORE request and Block-wise transferring.</t>
        <t>Therefore, if both the conditions COND8 and COND9 hold, the CoAP client should not send the EDHOC + OSCORE request. Instead, the CoAP client should continue by switching to the original EDHOC execution workflow. That is, the CoAP client first sends EDHOC message_3 prepended by the EDHOC Connection Identifier C_R encoded as per <xref section="3.3" sectionFormat="of" target="RFC9528"/>, and then sends the OSCORE-protected CoAP request once the EDHOC execution is completed.</t>
      </section>
    </section>
    <section anchor="sec-security-considerations">
      <name>Security Considerations</name>
      <t>TBD</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no actions for IANA.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC7959">
          <front>
            <title>Block-Wise Transfers in the Constrained Application Protocol (CoAP)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="Z. Shelby" initials="Z." role="editor" surname="Shelby"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful transfer protocol for constrained nodes and networks. Basic CoAP messages work well for small payloads from sensors and actuators; however, applications will need to transfer larger payloads occasionally -- for instance, for firmware updates. In contrast to HTTP, where TCP does the grunt work of segmenting and resequencing, CoAP is based on datagram transports such as UDP or Datagram Transport Layer Security (DTLS). These transports only offer fragmentation, which is even more problematic in constrained nodes and networks, limiting the maximum size of resource representations that can practically be transferred.</t>
              <t>Instead of relying on IP fragmentation, this specification extends basic CoAP with a pair of "Block" options for transferring multiple blocks of information from a resource representation in multiple request-response pairs. In many important cases, the Block options enable a server to be truly stateless: the server can handle each block transfer separately, with no need for a connection setup or other server-side memory of previous block transfers. Essentially, the Block options provide a minimal way to transfer larger representations in a block-wise fashion.</t>
              <t>A CoAP implementation that does not support these options generally is limited in the size of the representations that can be exchanged, so there is an expectation that the Block options will be widely used in CoAP implementations. Therefore, this specification updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7959"/>
          <seriesInfo name="DOI" value="10.17487/RFC7959"/>
        </reference>
        <reference anchor="RFC8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration. Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="RFC9528">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Preuß Mattsson" initials="J." surname="Preuß Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <date month="March" year="2024"/>
            <abstract>
              <t>This document specifies Ephemeral Diffie-Hellman Over COSE (EDHOC), a very compact and lightweight authenticated Diffie-Hellman key exchange with ephemeral keys. EDHOC provides mutual authentication, forward secrecy, and identity protection. EDHOC is intended for usage in constrained scenarios, and a main use case is to establish an Object Security for Constrained RESTful Environments (OSCORE) security context. By reusing CBOR Object Signing and Encryption (COSE) for cryptography, Concise Binary Object Representation (CBOR) for encoding, and Constrained Application Protocol (CoAP) for transport, the additional code size can be kept very low.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9528"/>
          <seriesInfo name="DOI" value="10.17487/RFC9528"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-edhoc">
          <front>
            <title>Using Ephemeral Diffie-Hellman Over COSE (EDHOC) with the Constrained Application Protocol (CoAP) and Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Stefan Hristozov" initials="S." surname="Hristozov">
              <organization>Fraunhofer AISEC</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson</organization>
            </author>
            <date day="9" month="April" year="2024"/>
            <abstract>
              <t>   The lightweight authenticated key exchange protocol Ephemeral Diffie-
   Hellman Over COSE (EDHOC) can be run over the Constrained Application
   Protocol (CoAP) and used by two peers to establish a Security Context
   for the security protocol Object Security for Constrained RESTful
   Environments (OSCORE).  This document details this use of the EDHOC
   protocol, by specifying a number of additional and optional
   mechanisms.  These especially include an optimization approach for
   combining the execution of EDHOC with the first OSCORE transaction.
   This combination reduces the number of round trips required to set up
   an OSCORE Security Context and to complete an OSCORE transaction
   using that Security Context.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-edhoc-oscore-profile-04"/>
        </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="4" month="March" year="2024"/>
            <abstract>
              <t>   This document defines Key Update for OSCORE (KUDOS), a lightweight
   procedure that two CoAP endpoints can use to update their keying
   material by establishing a new OSCORE Security Context.  Accordingly,
   it updates the use of the OSCORE flag bits in the CoAP OSCORE Option
   as well as the protection of CoAP response messages with OSCORE, and
   it deprecates the key update procedure specified in Appendix B.2 of
   RFC 8613.  Thus, this document updates RFC 8613.  Also, this document
   defines a procedure that two endpoints can use to update their OSCORE
   identifiers, run either stand-alone or during a KUDOS execution.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-key-update-07"/>
        </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="10" month="January" year="2024"/>
            <abstract>
              <t>   Object Security for Constrained RESTful Environments (OSCORE) uses
   AEAD algorithms to ensure confidentiality and integrity of exchanged
   messages.  Due to known issues allowing forgery attacks against AEAD
   algorithms, limits should be followed on the number of times a
   specific key is used for encryption or decryption.  Among other
   reasons, approaching key usage limits requires updating the OSCORE
   keying material before communications can securely continue.  This
   document defines how two OSCORE peers can follow these key usage
   limits and what steps they should take to preserve the security of
   their communications.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-cbor-encoded-cert-09"/>
        </reference>
        <reference anchor="I-D.ietf-lake-authz">
          <front>
            <title>Lightweight Authorization using Ephemeral Diffie-Hellman Over COSE</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="5" month="July" year="2024"/>
            <abstract>
              <t>   This document describes a procedure for authorizing enrollment of new
   devices using the lightweight authenticated key exchange protocol
   Ephemeral Diffie-Hellman Over COSE (EDHOC).  The procedure 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-02"/>
        </reference>
      </references>
    </references>
    <section anchor="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <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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
y56/fP6EpCCSXrxkmgS11Fjn0rU6gV+uwASbm7YjGG97m43slVKY+5rCfoHS
5Ei0IXmHr14yjGBqvtvAeLYqqM9sjzd9PY2XRYSyecml0oDHNadsYk17+eo3
Rm90gLIc3ucA7nObH0zfOeVYdMePl1cvK5JmQs25UR3AOmGnpvx/hzqyqZnH
bK9b3dWqLg2+sAiQborNaPyawfzRxulp8H9ToaBjgxtuXZDJMAjSCnRBNz6y
99N5tJdS7s2Zwij53plEyV9sv8TLrU1uEkuPWk3EaXfqwR/ccnC8VVyLGK5Z
K5UrY7oAdUt1G2FyC7A9AIFcXw/NoeUou0Z0dQqtF6tKghfD0LOoyyzjhkLL
dnWkqeeg17TTy7D2y/9WKfErO7ZsN+e/hFW+tKuUyhZnO/5NF0bYLphhbX4L
UZ+sSnl88sQpH1l2A2CwhE7Fk+NHTBWtJAOWSnP8LdfMDcTGsSJ6NyNvpEBp
RfRsOtqqFosUnbIMfE+mZRlsijesd75F2T7XtzC6mZMdtSoccSKBYGyJrdCW
2GpygXgRskaJ7KTwrlQD6Ed7CZHvAZPvWeroQ9A63yaevVMfoJaNJHa5c2VW
k1vBNRu+pBtHYolOZVEjTSNOZ6WaLdN63XFlWHQTeal415NsTT4VbdOisb6a
UWvNet+tYr5v2UOfzTr1FXOs37IJadDXcVJJ6q/XRdPJqWtBBPJMKk2OnVkC
iqPYu5nrTv/O/Y/xWF8VTvJEFBkq+7LZRjD9NKGWw04GpNFVGq1zeZk4jVUh
Vszc7HW3nw12FpZkOcGZyZSrV/PTA7YU/25poSSpHSXASzJaIlGdA9RxXW34
WRNcM1c6WGvIkGzM8PkNtu//b778R9F31j9nHMChe26V26nn+cC67vzOsA/i
0btecsfnSr7mxoay/gs/99Z/jr6J6L3tDZ2Gcmv++5h6mt12tzxb+nnc40Zv
q/fG3GtE0a2M8znNMXldt9HjsIPg4xrU7iuNv+I4t9E+xfRoXPj+29voVHsg
kJzBqm+jXUm85R/pVx7Hngi3/IPPweE4Db8+5Lqa0NaJ1IYGl/cap+HXlnFW
7HXZMM7jBozUMCG/dI1DxMdoiDPlbURaxk0ITPc4e7+cvD44PT/4+dzSvyHo
s2Sch1qXB7j5/FPj93cfp/nvxnFqwN8u/btBWD2uN4VcAZ57vRQNw48zzH4C
J3ilH/9eVfKq+718u+OcnvjZaYWGTuwaNPLtjmmQRedrxzCdi9oJ0sPuO0yA
mvsN82BM8VBMWvvSFUy3jd+3jNO4VzW89FTXE+6hFG/oY0jyT4Opb4MSzToi
eByEutbz7f3Pf7Dj1M0iy7l2nNGG9A3lXnCk9rrwtK0rD9YFHxeIFkQ3YNfD
82003mhDQK6njs7k5jI6XzU8wTjwqRkCq8DjQKbH8Td8HfKaZKFPfZxlGNiJ
Dt3UOK4r2QnGGUTrMfvm1wFVnAFLpoQ7jqfg6y9DeOAnivpKQhcGANMAnkVm
PCRkczaMA/AAC7Hzr9Suv3BdOjtPy7xGeMizxHEK8mg24IdkZSDxvHGW71Mc
p4lc/jgP8bn7OOj4GJyYaq9jqvZqkqv3+jxe0snYt51MF2P85g19c+iYTa8c
s8mxCU4azKbGRVEFW0c345UsPfhHg6F35yyLzoSkRlstMpXzvSgKDbcoajLd
mCOa/77qNTIuaEdWj/WMkPVGlG+0DtMCQY/uZaF6O/E3FBQK7rHXqqn20F+O
ne7+lqh73Lsb5mSpG0ecrhvhZru/FdouQhoP+QY13h6Im8NoH/1hNkEE14e9
zG+xU5exRbVRgUHv0rFMeRTpMKodjQwlTgTmLPnArpLYfAnf2YC5OwoX5LGH
QvuwtZrgJbAILDrYHnmjOAkc5ooHPYoHpIxiHWV/arSC74/dJn7pJmz45z1H
Ma3o+f6A1UZpWlc7LG33ErSPXx+lfQcs+6WZRo/NwgMvBgLb4KlgftkSjk4k
sGZkBPApRqt2qZzr9o/03S0mbZgNQKvSXOdfY+TiyoaXjL1OWoTkOZhRmlZk
R7F3kZhRvIyOP8koXZRosEpa8GKfqlO6zc7xv1tG6XAUPEtdtIgUatuNQuxw
FMxzsXkjLiy3mBrkUToSIYWU7l7RlTPKRZ5PgvhzAyot5ULZIAaEG7JOyqaJ
PY/YbfR8qNNBlOE6L/zF0g4Z9bH3ovcPIzCjdq4T8FuR0rSiVuwtQ23UxC81
rvNHabxqYwWJuQIsltLLR1lmTK82ym30NfEln5PuPWj8628JS9OP3oOrj9Jx
cc3Ko3SqSJ3y5U54aXjmsT/KLWbonNm+8l5bc7MbMUVjT/cMHd3o983wtzox
ZxiCy3MYyWDucCbRcBs+14kVGUWDWbdz9T9P4kQ6xUqOj7n93Y4SRDYbRmnO
/uH2DGZFXmJK0yjUQtxc1GSaiXsrCqK4q8IydEdppbT5fNY+WvnzUDaJO+LD
j/55Fs/Wb2LxrLQSZxTjuAwKk+xVRiZR02bD3Kiqb3AgO0PXjbelzjQG3SNv
lIdZURON7ordL8uN9u+rFmMeww090wmkKXh7fwcF+Sckpua6J9Yb52n2TnzO
2r6so6J1l9bc6g2BcAK7gzG8z9059vGqW44zf8wixBtgdtQ65ots+KVa/r66
/QzwmrC3FBGf9dKXQ7n16xzFH5S5cDzoPIAkcLnBvOR1GRgtknRiY3++P3uJ
p2QJePfA3r22hjtA89+/vUAicVRL4mgVRvVEjcYxl/vMjRdau8wdJzh7oJt6
Y3hO5q5r/eqNW8E2PrEZSGemAH957azTBqC1hatcUe62VHuw7gC6+Lej/fzS
NTi96OtJ8PbXT6ZNvc0Vlwo5v6+76eT9b92MvtaJr3t52prBAgXdgpt66Czp
j97nVPf25tvErtzAmCIlttcwtpfH/vNOv+Kw4aZpv4SZfngZ113avuu7ADl7
3a3obUGCXNgzp6gUk4aEKwUiNdRi/ej00LtXQv2WbcC/ig4mCZjDv2MU7ETn
x/vHKBH1apyIbwEgUQ+VrjbYb4/f2zVy2ye+74hVbKyNWGQp0tNQ2an08ttQ
c56pdHmXxXjNq93u7q5KohOJp3AKyi0gWD1ERcbedjJIcSsCoujg4zzFJqG6
OpvqV6htpiW81wI+11d25YsKL0DrwqzXTx2LYumGUVt12XGvgV9JZVr5btRv
cdyK1oPGvVzS4k4+puhMmfvXhnZML21Vg1sfnEsmTTslLKnLwn3Or/rqh3vx
QkkhfdvBnOtLuIVN6Rb96LB/eN8H9+qVGgNL5MbLEla4BmH5lQYR50XrnrBB
Z3uvj729hSDES+2mAH0MGkcO7CupnnKzh11Sek32vWuHDJPYEqDmF52eue46
vP1Aot5crSBX/ZnmbU5D1Bro9jJTGy4fc6W/V8gV3g9xP9rJZSZBXZjPebbS
3ZMcLKeIj8u6wLEv+cdIFEljJ4Xd+agJo44HUHwAVsuCFAiIts80qVY+qPXl
FDTaJB8vZow8vPpRzeX2Id0BnY67gVmybB5uyP+utCd0jtcN7OW7J3xWv0rz
8YfBTwngUetDI/oKq9lI82nbBk4JqbSkNc11w5lIxfl669mW3ITjXVHVcHyt
m1slsSEsX3fgChbAbCZQWS/hBrVJdGs+hann8Y0+Rwiagls9cyd/XV+KhXL+
1WWfx4jDyGvx66JxcwkaJ/oaea3vwauLAssa9yTixIW3zzex8xd1LwuvswCy
v0L1xBRJorrmXVcLfCbsRryHAzG8RuxWHMwLbmgkDFpdtO+qrHwtQz6vkpm+
BsF0v5/mSwWzbMDZiKq37cPBXdVUh0QlQuViJEe7xhRRnxOH7OXKMD3XjgfC
eI2Hf6xfFr5YM43KI9w2qfK4xj+/tLigir/g2O0sZeViFU3hgb0wye2eKlPq
K2krLt2quI7RvmKw0sYuzFCm0V3c1C7SsdBMVc/FAv6TEjV4qwBxQNRMxAhE
khJqxnSPVOnqv6+MDHEqjMwLLA9ePnspJo+ldUiMFuOmgX+HYaMmp+Owa8E4
EDMusCBfn2AkUtcSkC7FmrMGvk0DvcproOb5v7k90APF4elwc7g9fCrbnffr
hnMHsDkvJ4rSXRzIqMANJ1yXbYkV+yn1U63zjMZVmnxQnG+G1WpgdGEbYHuf
dZF/vNkwDYP9y8el2o+NV6STkEFfZ7zi2siL8Dbnw4gJUiBk+kjULGabaPll
spm8yjcRHP6Xg/e7Jyc74nv9CwXrRzeVNXDc3TLBG1ca2p1721fq2RzyyQ3p
YuBRWZ7x+uro29oon9ys6erGIr7AA5eGx69wrNJCTIzcAnPtSo3E1plj9zWc
EA1z34ALN0Wt3pzmabjPfZ4uynbk8dN79iw9tHff7mHfF7nKnIDyLq7ZHm57
Z5hd/NH5O176LP6YzBZwMs3ophOcEuXALKkqUhsZEgm0SBteyciwxDE82heb
V0pInz+NfkheIVx6GiT+RRHPeKXX9sKxd/sndHHJ5taLJzKpEFW/Sm9MOf3t
8OTqeQRrsAs6ft3BfqjhoIMW/3uJnSukVFY7bVFeLjLNoGl8Q7YKNodMb7T+
6XaB5eU2XBTDV6XLjDRTgg5PLrKUbp7WOWS7Hn8VvTk8OjyPvonWNXmigV7Y
xo5UsYpp62PErFXft2LklMzn7j2hI6PcoZ9B46s3x3s/tGCSxK27jcYqSdcF
OvwbB50usrGp5aYAplM+WzborgOpTwYd9pVcHiHGhlGWwn3VlyRjK4YDu8wX
VmyZDd2u0lpf90dx+lxr4dEovXQfF2qo4D7YcjZ6KpV3+bTXnfEr7GbBSPbl
Hs7Dsu+SCku1wI3++A3zTR0hM/T4XHEkTl9XoLm9tdsBtfUdRHvHb/c3dxwh
aeaxv2/tCKciGI+dZzech1sXtDClzQ8J8/YSmJ9qmInJW6EGu0c3VCe7J5lK
uyMtK9yq9QCa+qLk6ne6rE91qlBDKvYAmVEfxLshF7Z1Caok3zllquYL7MVn
u/ShLE0uEmwHJ0ZBXnxocZqELecDzccFRPR5cgPVDjHXBFzh3Fr92HJag4kH
yohRR7vytH9zu09omiROu27pPupcDPnOEYxoa/uX+cRXeTIx9pfe+WJAgVqX
X8PXcnpca2jvJ8k44zHcOdPofZzdvK9f8h6wIXcHRZ5/tmOlxbd2X+JPz9u3
8LfOXnDjD2OnlRebM+web5Dmckke+cGdTWebT/i9NBqWwoepv5yvV9vC9vKN
mowhrZoziH0dRusE2oduvWBkjqmP2GDO9O/gs1GHS4DhaeaabWNrULLFbATU
BMrxvX1VkUgc0GkNYhrShFyrjS/efzXW17em9Flp4UOrNG3ZDSb0c3UdlPt3
hh7qSS6XYVBDwSRrUhxAxL9HuN9rM0kzIrEfDUvc5shH8VY4uNdR8yRovt6C
Nrwxs0jwLDTCxiGyPkpJD/OloOOi0PJQjqMV5GK/g5Cn5++PTw+/p+s8/7zg
JqSbwJ+kIjmn0u+dzbDh/Y670PvVWwb7akxkbvV1kCTtsseXLWvv+OhVx7Ka
wD6shIKSeKJH+aNGk9fUdfnSJABzg01I0DXAgrYRYoqZOqeouX9tTCxnndcr
TKvd5zoYR7ph4rF7l1rCEuvFTl1d07+9XEECm6OYL3FpUP3CPQkL0BrHyLn4
zLG1VtoYfe1fkuS7BtVK5CiJaHvjVxnPlNzGZqcTd+HE41e8gqwqVYo3asXO
tS1y40TZLCw0KpagjmWx23bM6Q3usDg6o1eQJ3zt1FJpUizY+4mFujXCOFIu
XiJHzG7bdmZfzrI4/T2npR36AJv822/uucvdo3nEuaHwG6VixNmqwhweVNRE
15cKng+NfGcclJk2KilJ6WgnHVjwxOKWu9wWQxC7RwVeKYJjy7eto9cg4K6w
NyT8P+UDhIGYQu9yQhR3U6o4ZqYRUHgERiUjLuwVcAaVdruzTcz4Z6mhN6+r
QGlNhL4rVXFVv2vRyXcTnSqMGdYQg6M2uKIL9o44+xgoZpSkQNd4YXSNl1/S
FpNBOs2xpYz6d2VieYEOck7p7DRxBpXy+2Ds/Y4Zaa/2cYDD3be7wcsSCzHR
Vm5wae4AQMUa34L5B4MB5xjCQPv68XdzvhZLg6DHGSz4h0+9X3f44rYkK6Zj
Trv7Ec4kXODgyROk9OCJc5nNkyfwz090sSC5dfylUHDPZuFgBC44j7uSxyjI
7eai0ZlwksZjhYyO984IWfPMpOY5u/Czp2pb0sKJV/tRx8C3yIk2VC0yQ7WC
vYHEHLvjD1l+narJhfUQxv53SAw5uNTkm7Us1/0AYrrKnfUBcoDgUfEB+5z/
undZgKWaYM7HrPzr/y7LT8jk8MP3KgdhqaLv1KRQeFfah0T/dJp8wGDn67/+
y0UKolN//Z/yyww9mYu//o/oKK6qEuxDM9pf/wVkFXB4GqPl9UnvJPjpKE6T
//u/4ujHxb/+9yRL/vW/fZKOyIDjhMw+XjDdtQ62JfKoGJD6SsiqxuJcLQEm
OXp7TBGPvifqGnPofleC8MpgkWzHXFCKx4+Hb98e/7hrxbdKwaofvMWwIxCE
OjDs/XJyenB2Nuz9P164OPK04AAA

-->

</rfc>
