<?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-00" 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-00"/>
    <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="June" day="03"/>
    <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="I-D.ietf-lake-edhoc"/> 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="I-D.ietf-lake-edhoc"/>, 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>
      </ul>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <t>The reader is expected to be familiar with terms and concepts related to the EDHOC protocol and defined in <xref target="I-D.ietf-lake-edhoc"/>.</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.1" sectionFormat="of" target="I-D.ietf-lake-edhoc"/>).</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="I-D.ietf-lake-edhoc"/>).</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="96" width="552" viewBox="0 0 552 96" 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="I-D.ietf-lake-edhoc"/>).</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="I-D.ietf-lake-edhoc"/> 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="624" width="568" viewBox="0 0 568 624" 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 (ACE) <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="I-D.ietf-lake-edhoc"/>). In particular, the peer acting as ACE Client acts as EDHOC Initiator, while the peer acting as ACE RS acts as EDHOC Responder (see <xref section="2" sectionFormat="of" target="I-D.ietf-lake-edhoc"/>). 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="I-D.ietf-lake-edhoc"/>).</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="880" width="576" viewBox="0 0 576 880" 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="I-D.ietf-lake-edhoc"/>).</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="I-D.ietf-lake-edhoc"/>, 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="I-D.ietf-lake-edhoc" section="3.5" sectionFormat="bare"/> and <xref target="I-D.ietf-lake-edhoc" section="D.2" sectionFormat="bare"/> of <xref target="I-D.ietf-lake-edhoc"/>). If this is not the case, P aborts the EDHOC session with the other peer.</t>
    </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="I-D.ietf-lake-edhoc"/>, 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="I-D.ietf-lake-edhoc"/>).      </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="I-D.ietf-lake-edhoc"/>), 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>The following subsections describe more in detail the actions performed by the SPO on the different, incoming EDHOC messages.</t>
      <section anchor="edhoc-message1">
        <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="edhoc-message4">
        <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="edhoc-message2-and-message3">
        <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="I-D.ietf-lake-edhoc" section="3.5" sectionFormat="bare"/> and <xref target="I-D.ietf-lake-edhoc" section="D.2" sectionFormat="bare"/> of <xref target="I-D.ietf-lake-edhoc"/>).  </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="832" width="576" viewBox="0 0 576 832" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,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="2016" width="560" viewBox="0 0 560 2016" 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,1536 L 8,1776" fill="none" stroke="black"/>
                  <path d="M 16,144 L 16,176" fill="none" stroke="black"/>
                  <path d="M 16,1376 L 16,1408" fill="none" stroke="black"/>
                  <path d="M 16,1936 L 16,1984" 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,1584 L 24,1632" fill="none" stroke="black"/>
                  <path d="M 24,1696 L 24,1744" 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,1248" fill="none" stroke="black"/>
                  <path d="M 88,1328 L 88,1368" fill="none" stroke="black"/>
                  <path d="M 88,1416 L 88,1440" fill="none" stroke="black"/>
                  <path d="M 88,1520 L 88,1576" fill="none" stroke="black"/>
                  <path d="M 88,1640 L 88,1688" fill="none" stroke="black"/>
                  <path d="M 88,1752 L 88,1808" fill="none" stroke="black"/>
                  <path d="M 88,1888 L 88,1928" fill="none" stroke="black"/>
                  <path d="M 152,1936 L 152,1984" fill="none" stroke="black"/>
                  <path d="M 168,528 L 168,576" fill="none" stroke="black"/>
                  <path d="M 168,1376 L 168,1408" 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,1696 L 384,1744" fill="none" stroke="black"/>
                  <path d="M 392,1584 L 392,1632" 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,1536 L 416,1776" 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,1376 L 168,1376" fill="none" stroke="black"/>
                  <path d="M 16,1408 L 168,1408" fill="none" stroke="black"/>
                  <path d="M 8,1536 L 80,1536" fill="none" stroke="black"/>
                  <path d="M 96,1536 L 416,1536" fill="none" stroke="black"/>
                  <path d="M 24,1584 L 392,1584" fill="none" stroke="black"/>
                  <path d="M 24,1632 L 392,1632" fill="none" stroke="black"/>
                  <path d="M 24,1696 L 384,1696" fill="none" stroke="black"/>
                  <path d="M 24,1744 L 384,1744" fill="none" stroke="black"/>
                  <path d="M 8,1776 L 80,1776" fill="none" stroke="black"/>
                  <path d="M 96,1776 L 416,1776" fill="none" stroke="black"/>
                  <path d="M 16,1936 L 152,1936" fill="none" stroke="black"/>
                  <path d="M 16,1984 L 152,1984" 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,1928 84,1922.4 84,1933.6" fill="black" transform="rotate(90,88,1928)"/>
                  <polygon class="arrowhead" points="96,1688 84,1682.4 84,1693.6" fill="black" transform="rotate(90,88,1688)"/>
                  <polygon class="arrowhead" points="96,1576 84,1570.4 84,1581.6" fill="black" transform="rotate(90,88,1576)"/>
                  <polygon class="arrowhead" points="96,1368 84,1362.4 84,1373.6" fill="black" transform="rotate(90,88,1368)"/>
                  <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="1284">Control</text>
                    <text x="120" y="1284">transferred</text>
                    <text x="188" y="1284">back</text>
                    <text x="20" y="1300">to</text>
                    <text x="48" y="1300">the</text>
                    <text x="84" y="1300">core</text>
                    <text x="128" y="1300">EDHOC</text>
                    <text x="196" y="1300">processing</text>
                    <text x="52" y="1396">Verify</text>
                    <text x="120" y="1396">message_X</text>
                    <text x="200" y="1396">(core</text>
                    <text x="248" y="1396">EDHOC</text>
                    <text x="320" y="1396">processing)</text>
                    <text x="40" y="1476">Control</text>
                    <text x="120" y="1476">transferred</text>
                    <text x="180" y="1476">to</text>
                    <text x="24" y="1492">the</text>
                    <text x="100" y="1492">side-processor</text>
                    <text x="188" y="1492">object</text>
                    <text x="248" y="1556">Post-verification</text>
                    <text x="364" y="1556">processing</text>
                    <text x="64" y="1604">Process</text>
                    <text x="112" y="1604">the</text>
                    <text x="144" y="1604">EAD</text>
                    <text x="184" y="1604">items</text>
                    <text x="228" y="1604">that</text>
                    <text x="268" y="1604">have</text>
                    <text x="300" y="1604">to</text>
                    <text x="324" y="1604">be</text>
                    <text x="72" y="1620">processed</text>
                    <text x="140" y="1620">(also)</text>
                    <text x="192" y="1620">after</text>
                    <text x="248" y="1620">message</text>
                    <text x="332" y="1620">verification</text>
                    <text x="52" y="1716">Make</text>
                    <text x="88" y="1716">all</text>
                    <text x="120" y="1716">the</text>
                    <text x="168" y="1716">results</text>
                    <text x="212" y="1716">of</text>
                    <text x="240" y="1716">the</text>
                    <text x="272" y="1716">EAD</text>
                    <text x="332" y="1716">processing</text>
                    <text x="72" y="1732">available</text>
                    <text x="124" y="1732">to</text>
                    <text x="160" y="1732">build</text>
                    <text x="200" y="1732">the</text>
                    <text x="236" y="1732">next</text>
                    <text x="280" y="1732">EDHOC</text>
                    <text x="336" y="1732">message</text>
                    <text x="40" y="1844">Control</text>
                    <text x="120" y="1844">transferred</text>
                    <text x="188" y="1844">back</text>
                    <text x="20" y="1860">to</text>
                    <text x="48" y="1860">the</text>
                    <text x="84" y="1860">core</text>
                    <text x="128" y="1860">EDHOC</text>
                    <text x="196" y="1860">processing</text>
                    <text x="56" y="1956">Advance</text>
                    <text x="104" y="1956">the</text>
                    <text x="184" y="1956">(core</text>
                    <text x="232" y="1956">EDHOC</text>
                    <text x="304" y="1956">processing)</text>
                    <text x="60" y="1972">protocol</text>
                    <text x="120" y="1972">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   |       |
| +---------------------------------------------------------+       |
|         |                                                         |
+---------|---------------------------------------------------------+
          |
          |

 Control transferred back
 to the core EDHOC processing

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

 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  |   |
| +--------------------------------------------+   |
|         |                                        |
+---------|----------------------------------------+
          |
          |

 Control transferred back
 to the core EDHOC processing

          |
          |
          v
 +----------------+
 | Advance the    | (core EDHOC processing)
 | protocol state |
 +----------------+

]]></artwork>
            </artset>
          </figure>
        </section>
      </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="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>
        <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="I-D.ietf-lake-edhoc">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC)</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="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="22" month="January" 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
   OSCORE security context.  By reusing COSE for cryptography, CBOR for
   encoding, and CoAP for transport, the additional code size can be
   kept very low.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lake-edhoc-23"/>
        </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="4" month="March" 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-01"/>
        </reference>
      </references>
    </references>
    <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>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
