<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.3.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-lake-edhoc-impl-cons-08" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="Implementation Considerations for LAKE">Implementation Considerations for the Lightweight Authenticated Key Exchange (LAKE) Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-lake-edhoc-impl-cons-08"/>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440 Stockholm</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <date year="2026" month="October" day="04"/>
    <area>Security</area>
    <workgroup>LAKE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 61?>

<t>This document provides considerations for guiding the implementation of the Lightweight Authenticated Key Exchange (LAKE) protocol.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Lightweight Authenticated Key Exchange Working Group mailing list (lake@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/lake/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/lake-wg/edhoc-impl-cons"/>.</t>
    </note>
  </front>
  <middle>
    <?line 65?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The specification <xref target="RFC9528"/> defines the Lightweight Authenticated Key Exchange (LAKE) protocol, which is especially intended for use in constrained scenarios.</t>
      <t>During the development of LAKE, 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 LAKE rather than to the protocol in itself. Hence, they are not discussed in <xref target="RFC9528"/>, which rightly focuses on specifying the actual protocol.</t>
      <t>At the same time, implementers of an application using the LAKE protocol or of a "LAKE 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 LAKE. At a high-level, the topics in question are summarized below:</t>
      <ul spacing="normal">
        <li>
          <t>Handling of completed LAKE sessions when they become invalid and of application keys derived from a LAKE session when those become invalid. This topic is discussed in <xref target="sec-session-handling"/>.</t>
        </li>
        <li>
          <t>Retention of completed LAKE sessions that are still valid, also in the case that a LAKE error message is received after their completion. This topic is discussed in <xref target="sec-session-retention"/>.</t>
        </li>
        <li>
          <t>Enforcement of different trust policies, with respect to learning new authentication credentials during an execution of LAKE. This topic is discussed in <xref target="sec-trust-models"/>.</t>
        </li>
        <li>
          <t>Branched-off side processing of incoming LAKE messages, with particular reference to: i) fetching and validation of authentication credentials; and ii) processing of External Authorization Data (EAD) items, which in turn might play a role in the fetching and validation of authentication credentials. This topic is discussed in <xref target="sec-message-side-processing"/>.</t>
        </li>
        <li>
          <t>Effectively using LAKE over the Constrained Application Protocol (CoAP) <xref target="RFC7252"/> in combination with Block-wise transfers for CoAP <xref target="RFC7959"/>, potentially together with the optimized LAKE execution workflow defined in <xref target="RFC9668"/>. This topic is discussed in <xref target="sec-block-wise"/>.</t>
        </li>
      </ul>
      <t>The scope of the present implementation considerations only includes the use of LAKE with the authentication methods specified in <xref section="3.2" sectionFormat="of" target="RFC9528"/> and based on public key authentication. A future document can extend the present document and include implementation considerations that consider the use of LAKE with other authentication methods, such as the one defined in <xref target="I-D.ietf-lake-edhoc-psk"/> and based on symmetric pre-shared keys.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The reader is expected to be familiar with terms and concepts related to the LAKE protocol <xref target="RFC9528"/>, (CoAP) <xref target="RFC7252"/>, and Block-wise transfers for CoAP <xref target="RFC7959"/>.</t>
        <t>This document uses the acronym LAKE, expanded to Lightweight Authenticated Key Exchange, to denote the protocol specified as EDHOC in <xref target="RFC9528"/>. LAKE is also used in place of EDHOC in descriptive terms such as LAKE message_1 or LAKE EAD item. Identifiers defined literally in <xref target="RFC9528"/> or in IANA registries (e.g., EDHOC_Exporter, the EDHOC registries, media types, and URIs) are unchanged.</t>
      </section>
    </section>
    <section anchor="sec-session-handling">
      <name>Handling of Invalid LAKE 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 LAKE 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 a LAKE session, i.e., by means of the EDHOC_Exporter interface after the successful completion of an execution of LAKE (see <xref section="4.2" sectionFormat="of" target="RFC9528"/>).</t>
        </li>
      </ul>
      <t>Building on the above, the following expands on three relevant cases concerning the handling of LAKE sessions and application keys, in the event that any of those becomes invalid.</t>
      <t>To provide more concrete guidance, the following considers the case where "application keys" stands for the keying material and parameters that compose a Security Context for the security protocol Object Security for Constrained RESTful Environments (OSCORE) <xref target="RFC8613"/>, i.e., when specifically those application keys are derived from a LAKE session (see <xref section="A.1" sectionFormat="of" target="RFC9528"/>).</t>
      <t>Nevertheless, the same considerations are applicable if LAKE is used to derive other application keys, e.g., when used to key different security protocols than OSCORE or to provide the application with secure values that are bound to a LAKE session.</t>
      <section anchor="sec-session-invalid">
        <name>LAKE Sessions Become Invalid</name>
        <t>The application at a peer P may have learned that a completed LAKE session S has to be invalidated. When S is marked as invalid, the application at P purges S and deletes each set of application keys (e.g., the OSCORE Security Context) that was generated from S.</t>
        <t>Then, the application runs a new execution of the LAKE protocol with the other peer. If the LAKE execution successfully completes, the two peers derive and install a new set of application keys from this latest LAKE session. If the LAKE execution does not successfully complete, the application makes another attempt and runs a new execution of the LAKE protocol with the other peer, provided that the predetermined maximum number of attempts has not been reached yet.</t>
        <t>The flowchart in <xref target="fig-flowchart-session-invalid"/> shows the handling of a LAKE session that has become invalid.</t>
        <figure anchor="fig-flowchart-session-invalid">
          <name>Handling of a LAKE Session that Has Become Invalid.</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="432" width="432" viewBox="0 0 432 432" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 144,96 L 144,128" fill="none" stroke="black"/>
                <path d="M 144,192 L 144,224" fill="none" stroke="black"/>
                <path d="M 144,304 L 144,352" fill="none" stroke="black"/>
                <path d="M 336,160 L 336,224" fill="none" stroke="black"/>
                <path d="M 336,320 L 336,352" fill="none" stroke="black"/>
                <path d="M 72,48 L 96,48" fill="none" stroke="black"/>
                <path d="M 200,160 L 336,160" fill="none" stroke="black"/>
                <path d="M 200,256 L 272,256" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="344,352 332,346.4 332,357.6" fill="black" transform="rotate(90,336,352)"/>
                <polygon class="arrowhead" points="280,256 268,250.4 268,261.6" fill="black" transform="rotate(0,272,256)"/>
                <polygon class="arrowhead" points="208,160 196,154.4 196,165.6" fill="black" transform="rotate(180,200,160)"/>
                <polygon class="arrowhead" points="152,352 140,346.4 140,357.6" fill="black" transform="rotate(90,144,352)"/>
                <polygon class="arrowhead" points="152,224 140,218.4 140,229.6" fill="black" transform="rotate(90,144,224)"/>
                <polygon class="arrowhead" points="152,128 140,122.4 140,133.6" fill="black" transform="rotate(90,144,128)"/>
                <polygon class="arrowhead" points="104,48 92,42.4 92,53.6" fill="black" transform="rotate(0,96,48)"/>
                <g class="text">
                  <text x="32" y="36">Invalid</text>
                  <text x="132" y="36">Delete</text>
                  <text x="176" y="36">the</text>
                  <text x="212" y="36">LAKE</text>
                  <text x="264" y="36">session</text>
                  <text x="20" y="52">LAKE</text>
                  <text x="120" y="52">and</text>
                  <text x="152" y="52">the</text>
                  <text x="216" y="52">application</text>
                  <text x="284" y="52">keys</text>
                  <text x="32" y="68">session</text>
                  <text x="136" y="68">derived</text>
                  <text x="188" y="68">from</text>
                  <text x="220" y="68">it</text>
                  <text x="128" y="164">Rerun</text>
                  <text x="172" y="164">LAKE</text>
                  <text x="356" y="212">NO</text>
                  <text x="212" y="244">NO</text>
                  <text x="120" y="260">Has</text>
                  <text x="156" y="260">LAKE</text>
                  <text x="296" y="260">Has</text>
                  <text x="328" y="260">the</text>
                  <text x="376" y="260">maximum</text>
                  <text x="148" y="276">succeeded?</text>
                  <text x="308" y="276">number</text>
                  <text x="348" y="276">of</text>
                  <text x="396" y="276">attempts</text>
                  <text x="300" y="292">been</text>
                  <text x="356" y="292">reached?</text>
                  <text x="168" y="340">YES</text>
                  <text x="360" y="340">YES</text>
                  <text x="132" y="388">Derive</text>
                  <text x="176" y="388">and</text>
                  <text x="340" y="388">Consider</text>
                  <text x="136" y="404">install</text>
                  <text x="184" y="404">new</text>
                  <text x="344" y="404">rerunning</text>
                  <text x="152" y="420">application</text>
                  <text x="220" y="420">keys</text>
                  <text x="324" y="420">LAKE</text>
                  <text x="368" y="420">later</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Invalid      Delete the LAKE session
LAKE    ---> and the application keys
session      derived from it

                 |
                 |
                 v

             Rerun LAKE <----------------+
                                         |
                 |                       |
                 |                       | NO
                 v                       |
                         NO
             Has LAKE   ---------> Has the maximum
             succeeded?            number of attempts
                                   been reached?
                 |
                 |                       |
                 | YES                   | YES
                 v                       v

             Derive and               Consider
             install new              rerunning
             application keys         LAKE later
]]></artwork>
          </artset>
        </figure>
        <t>A LAKE session may have become invalid, for example, because an authentication credential CRED_X has expired, or because the peer P has learned from a trusted source that CRED_X has been revoked. This effectively invalidates CRED_X, and therefore also invalidates any LAKE session where CRED_X was used as authentication credential associated with either peer in the session (i.e., P itself or the other peer). In such a case, the application at P has to additionally delete CRED_X and any stored, corresponding credential identifier.</t>
      </section>
      <section anchor="sec-keys-invalid">
        <name>Application Keys Become Invalid</name>
        <t>The application at a peer P may have learned that a set of application keys is not safe to use anymore. When such a set is specifically an OSCORE Security Context, the application may have learned that from the OSCORE library used or from an OSCORE layer that takes part in the communication stack.</t>
        <t>A current set SET of application keys shared with another peer can become unsafe to use, for example, due to the following reasons:</t>
        <ul spacing="normal">
          <li>
            <t>SET has reached a pre-determined expiration time;</t>
          </li>
          <li>
            <t>SET has been established to use for an amount of time that is now elapsed, according to enforced application policies; or</t>
          </li>
          <li>
            <t>Some elements of SET have been used enough times to approach cryptographic limits that should not be passed, e.g., according to the properties of the security algorithms specifically used. With particular reference to an OSCORE Security Context, such limits are discussed in <xref target="I-D.ietf-core-oscore-key-limits"/>.</t>
          </li>
        </ul>
        <t>When this happens, the application at the peer P proceeds as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>If the following conditions both hold, then the application moves to Step 2. Otherwise, it moves to Step 3.  </t>
            <ul spacing="normal">
              <li>
                <t>Let us define S as the LAKE session from which the peer P has derived SET or the oldest SET's ancestor set of application keys. Then, since the completion of S with the other peer, the application at P has received from the other peer and successfully verified at least one message protected with any set of application keys derived from S. That is, P has persisted S (see <xref section="5.4.2" sectionFormat="of" target="RFC9528"/>).</t>
              </li>
              <li>
                <t>The peer P supports a key update protocol, as an alternative to performing a new execution of LAKE with the other peer. When SET is an OSCORE Security Context, the key update protocol supported by the peer P can be KUDOS <xref target="I-D.ietf-core-oscore-key-update"/>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>The application at P runs the key update protocol mentioned at Step 1 with the other peer, in order to update SET. When SET is an OSCORE Security Context, the application at P can run the key update protocol KUDOS with the other peer.  </t>
            <t>
If the key update protocol terminates successfully, the updated application keys are installed and no further actions are taken. Otherwise, the application at P moves to Step 3.</t>
          </li>
          <li>
            <t>The application at the peer P performs the following actions:  </t>
            <ul spacing="normal">
              <li>
                <t>It deletes SET.</t>
              </li>
              <li>
                <t>It deletes the LAKE session from which SET was generated, or from which the oldest SET's ancestor set of application keys was generated before any key update occurred (e.g., by means of the EDHOC_KeyUpdate interface defined in <xref section="H" sectionFormat="of" target="RFC9528"/> or other key update methods).</t>
              </li>
              <li>
                <t>It runs a new execution of the LAKE protocol with the other peer. If the LAKE execution successfully completes, the two peers derive and install a new set of application keys from this latest LAKE session. If the LAKE execution does not successfully complete, the application makes another attempt and runs a new execution of the LAKE protocol with the other peer, provided that the predetermined maximum number of attempts has not been reached yet.</t>
              </li>
            </ul>
          </li>
        </ol>
        <t>The flowchart in <xref target="fig-flowchart-keys-invalid"/> shows the handling of a set of application keys that has become invalid. In particular, it assumes such a set to be an OSCORE Security Context and the key update protocol to be KUDOS.</t>
        <figure anchor="fig-flowchart-keys-invalid">
          <name>Handling of a Set of Application Keys that Has Become Invalid.</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="816" width="576" viewBox="0 0 576 816" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,112 L 8,800" fill="none" stroke="black"/>
                <path d="M 40,256 L 40,400" fill="none" stroke="black"/>
                <path d="M 40,480 L 40,512" fill="none" stroke="black"/>
                <path d="M 40,576 L 40,608" fill="none" stroke="black"/>
                <path d="M 40,688 L 40,720" fill="none" stroke="black"/>
                <path d="M 48,64 L 48,144" fill="none" stroke="black"/>
                <path d="M 208,224 L 208,448" fill="none" stroke="black"/>
                <path d="M 232,224 L 232,656" fill="none" stroke="black"/>
                <path d="M 264,272 L 264,656" fill="none" stroke="black"/>
                <path d="M 304,224 L 304,320" fill="none" stroke="black"/>
                <path d="M 304,384 L 304,416" fill="none" stroke="black"/>
                <path d="M 304,496 L 304,560" fill="none" stroke="black"/>
                <path d="M 456,352 L 456,416" fill="none" stroke="black"/>
                <path d="M 456,528 L 456,560" fill="none" stroke="black"/>
                <path d="M 536,272 L 536,656" fill="none" stroke="black"/>
                <path d="M 568,112 L 568,800" fill="none" stroke="black"/>
                <path d="M 8,112 L 40,112" fill="none" stroke="black"/>
                <path d="M 56,112 L 568,112" fill="none" stroke="black"/>
                <path d="M 152,192 L 184,192" fill="none" stroke="black"/>
                <path d="M 264,272 L 296,272" fill="none" stroke="black"/>
                <path d="M 312,272 L 536,272" fill="none" stroke="black"/>
                <path d="M 368,352 L 456,352" fill="none" stroke="black"/>
                <path d="M 112,448 L 208,448" fill="none" stroke="black"/>
                <path d="M 368,448 L 400,448" fill="none" stroke="black"/>
                <path d="M 112,656 L 232,656" fill="none" stroke="black"/>
                <path d="M 264,656 L 536,656" fill="none" stroke="black"/>
                <path d="M 8,800 L 568,800" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="464,560 452,554.4 452,565.6" fill="black" transform="rotate(90,456,560)"/>
                <polygon class="arrowhead" points="408,448 396,442.4 396,453.6" fill="black" transform="rotate(0,400,448)"/>
                <polygon class="arrowhead" points="376,352 364,346.4 364,357.6" fill="black" transform="rotate(180,368,352)"/>
                <polygon class="arrowhead" points="312,560 300,554.4 300,565.6" fill="black" transform="rotate(90,304,560)"/>
                <polygon class="arrowhead" points="312,416 300,410.4 300,421.6" fill="black" transform="rotate(90,304,416)"/>
                <polygon class="arrowhead" points="312,320 300,314.4 300,325.6" fill="black" transform="rotate(90,304,320)"/>
                <polygon class="arrowhead" points="240,224 228,218.4 228,229.6" fill="black" transform="rotate(270,232,224)"/>
                <polygon class="arrowhead" points="216,224 204,218.4 204,229.6" fill="black" transform="rotate(270,208,224)"/>
                <polygon class="arrowhead" points="192,192 180,186.4 180,197.6" fill="black" transform="rotate(0,184,192)"/>
                <polygon class="arrowhead" points="56,144 44,138.4 44,149.6" fill="black" transform="rotate(90,48,144)"/>
                <polygon class="arrowhead" points="48,720 36,714.4 36,725.6" fill="black" transform="rotate(90,40,720)"/>
                <polygon class="arrowhead" points="48,608 36,602.4 36,613.6" fill="black" transform="rotate(90,40,608)"/>
                <polygon class="arrowhead" points="48,512 36,506.4 36,517.6" fill="black" transform="rotate(90,40,512)"/>
                <polygon class="arrowhead" points="48,400 36,394.4 36,405.6" fill="black" transform="rotate(90,40,400)"/>
                <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="140" y="100">Handling</text>
                  <text x="188" y="100">of</text>
                  <text x="232" y="100">invalid</text>
                  <text x="312" y="100">application</text>
                  <text x="380" y="100">keys</text>
                  <text x="32" y="180">Are</text>
                  <text x="64" y="180">the</text>
                  <text x="164" y="180">NO</text>
                  <text x="220" y="180">Delete</text>
                  <text x="264" y="180">the</text>
                  <text x="328" y="180">application</text>
                  <text x="396" y="180">keys</text>
                  <text x="64" y="196">application</text>
                  <text x="208" y="196">and</text>
                  <text x="240" y="196">the</text>
                  <text x="300" y="196">associated</text>
                  <text x="364" y="196">LAKE</text>
                  <text x="416" y="196">session</text>
                  <text x="36" y="212">keys</text>
                  <text x="100" y="212">persisted?</text>
                  <text x="396" y="260">Re-execution</text>
                  <text x="460" y="260">of</text>
                  <text x="492" y="260">LAKE</text>
                  <text x="296" y="356">Rerun</text>
                  <text x="340" y="356">LAKE</text>
                  <text x="64" y="388">YES</text>
                  <text x="476" y="404">NO</text>
                  <text x="28" y="436">Is</text>
                  <text x="64" y="436">KUDOS</text>
                  <text x="124" y="436">NO</text>
                  <text x="372" y="436">NO</text>
                  <text x="60" y="452">supported?</text>
                  <text x="288" y="452">Has</text>
                  <text x="324" y="452">LAKE</text>
                  <text x="424" y="452">Has</text>
                  <text x="456" y="452">the</text>
                  <text x="316" y="468">succeeded?</text>
                  <text x="440" y="468">maximum</text>
                  <text x="500" y="468">number</text>
                  <text x="420" y="484">of</text>
                  <text x="468" y="484">attempts</text>
                  <text x="64" y="500">YES</text>
                  <text x="428" y="500">been</text>
                  <text x="484" y="500">reached?</text>
                  <text x="32" y="548">Run</text>
                  <text x="72" y="548">KUDOS</text>
                  <text x="328" y="548">YES</text>
                  <text x="480" y="548">YES</text>
                  <text x="300" y="596">Derive</text>
                  <text x="344" y="596">and</text>
                  <text x="468" y="596">Consider</text>
                  <text x="304" y="612">install</text>
                  <text x="352" y="612">new</text>
                  <text x="472" y="612">rerunning</text>
                  <text x="320" y="628">application</text>
                  <text x="388" y="628">keys</text>
                  <text x="452" y="628">LAKE</text>
                  <text x="496" y="628">later</text>
                  <text x="32" y="644">Has</text>
                  <text x="72" y="644">KUDOS</text>
                  <text x="124" y="644">NO</text>
                  <text x="60" y="660">succeeded?</text>
                  <text x="64" y="708">YES</text>
                  <text x="48" y="756">Install</text>
                  <text x="96" y="756">the</text>
                  <text x="144" y="756">updated</text>
                  <text x="64" y="772">application</text>
                  <text x="132" y="772">keys</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Invalid application keys

     |
     |
     |       Handling of invalid application keys
+----|----------------------------------------------------------------+
|    |                                                                |
|    v                                                                |
|                                                                     |
| Are the          NO   Delete the application keys                   |
| application     ----> and the associated LAKE session               |
| keys persisted?                                                     |
|                        ^  ^        |                                |
|                        |  |        |                                |
|   |                    |  |        |     Re-execution of LAKE       |
|   |                    |  |   +----|----------------------------+   |
|   |                    |  |   |    |                            |   |
|   |                    |  |   |    |                            |   |
|   |                    |  |   |    v                            |   |
|   |                    |  |   |                                 |   |
|   |                    |  |   | Rerun LAKE <----------+         |   |
|   |                    |  |   |                       |         |   |
|   | YES                |  |   |    |                  |         |   |
|   v                    |  |   |    |                  | NO      |   |
|                        |  |   |    v                  |         |   |
| Is KUDOS    NO         |  |   |            NO                   |   |
| supported? ------------+  |   | Has LAKE   ----> Has the        |   |
|                           |   | succeeded?       maximum number |   |
|   |                       |   |                  of attempts    |   |
|   | YES                   |   |    |             been reached?  |   |
|   v                       |   |    |                            |   |
|                           |   |    |                  |         |   |
| Run KUDOS                 |   |    | YES              | YES     |   |
|                           |   |    v                  v         |   |
|   |                       |   |                                 |   |
|   |                       |   | Derive and          Consider    |   |
|   v                       |   | install new         rerunning   |   |
|                           |   | application keys    LAKE later  |   |
| 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 Authentication and Authorization for Constrained Environments (ACE) framework <xref target="RFC9200"/> and specifically the profile of ACE defined in <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>. One of the two peers acts as an ACE resource server (RS). The other peer acts as an ACE client (C) and requests an access token from an ACE authorization server (AS) that is in a trust relationship with the RS. The access token specifies the access rights of C for accessing protected resources hosted at the RS.</t>
        <t>Per the considered profile of ACE, the two peers run LAKE to derive an OSCORE Security Context as their shared set of application keys (see <xref section="A.1" sectionFormat="of" target="RFC9528"/>). During the LAKE execution, the peer acting as the ACE client uploads the access token at the RS, by means of an EAD item included in a LAKE message (see <xref section="3.8" sectionFormat="of" target="RFC9528"/>). At the RS, the access token is bound to the successfully completed LAKE session and to the established OSCORE Security Context, which is used to protect the subsequent communications between the two peers.</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 OSCORE library used or from an OSCORE layer that takes part in the communication stack. The reasons that make CTX not safe to use anymore are the same ones discussed in <xref target="sec-keys-invalid"/> when considering a set of application keys in general, plus the event that the access token bound to CTX becomes invalid (e.g., it has expired or it has been revoked).</t>
        <t>When this happens, the application at the peer P proceeds as follows. The handling below builds on and extends the handling defined in <xref target="sec-keys-invalid"/>, by additionally considering the event where the access token becomes invalid.</t>
        <ol spacing="normal" type="1"><li>
            <t>If the following conditions both hold, then the application moves to Step 2. Otherwise, it moves to Step 3.  </t>
            <ul spacing="normal">
              <li>
                <t>The access token is still believed to be valid. That is, it has not expired yet and the peer P is not aware that it has been revoked.</t>
              </li>
              <li>
                <t>Let us define S as the LAKE session from which the peer P has derived CTX or the oldest CTX's ancestor OSCORE Security Context. Then, since the completion of S with the other peer, the application at P has received from the other peer and successfully verified at least one message protected with any set of application keys derived from S. That is, P has persisted S (see <xref section="5.4.2" sectionFormat="of" target="RFC9528"/>).</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If the peer P supports the key update protocol KUDOS <xref target="I-D.ietf-core-oscore-key-update"/>, then P runs KUDOS with the other peer, in order to update CTX. If the execution of KUDOS terminates successfully, the updated OSCORE Security Context is installed and no further actions are taken.  </t>
            <t>
If the execution of KUDOS does not terminate successfully or if the peer P does not support KUDOS altogether, then the application at P moves to Step 3.</t>
          </li>
          <li>
            <t>The application at the peer P performs the following actions:  </t>
            <ul spacing="normal">
              <li>
                <t>If the access token is not believed to be valid anymore, the peer P deletes all the LAKE sessions associated with the access token as well as the OSCORE Security Context derived from each of those sessions. Note that, in the considered profile of ACE, an access token is associated with at most one LAKE session (see <xref section="4.2" sectionFormat="of" target="I-D.ietf-ace-edhoc-oscore-profile"/>).      </t>
                <t>
In the case that the peer P acts as the ACE client, P obtains from the ACE AS a new access token to upload at the other peer.      </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 LAKE session from which CTX was generated, or from which the oldest 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 LAKE protocol with the other peer. If the LAKE execution successfully completes, the two peers derive and install a new OSCORE Security Context from this latest LAKE session. At the RS, the access token is bound to this latest LAKE session and the newly established OSCORE Security Context.  </t>
            <t>
If the LAKE execution does not successfully complete, the peer P makes another attempt and runs a new execution of the LAKE protocol with the other peer, provided that the predetermined maximum number of attempts has not been reached yet.  </t>
            <t>
Per the considered profile of ACE, the peer acting as the ACE client takes the first step to start an execution of LAKE with the other peer, i.e., as LAKE Initiator (Responder) according to the LAKE forward (reverse) message flow (see <xref section="A.2" sectionFormat="of" target="RFC9528"/>).</t>
          </li>
        </ol>
        <t>The flowchart in <xref target="fig-flowchart-keys-token-invalid"/> shows the handling of an access token or of a set of application keys that have become invalid, when using the profile of ACE defined in <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>. Note that some details within the frame "Handling of invalid application keys" are replaced by ellipses, as they are identical to what is shown in <xref target="fig-flowchart-keys-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="912" width="576" viewBox="0 0 576 912" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,448 L 8,896" fill="none" stroke="black"/>
                <path d="M 48,80 L 48,112" fill="none" stroke="black"/>
                <path d="M 48,240 L 48,320" fill="none" stroke="black"/>
                <path d="M 48,400 L 48,480" fill="none" stroke="black"/>
                <path d="M 48,576 L 48,672" fill="none" stroke="black"/>
                <path d="M 264,672 L 264,864" fill="none" stroke="black"/>
                <path d="M 304,560 L 304,704" fill="none" stroke="black"/>
                <path d="M 304,768 L 304,800" fill="none" stroke="black"/>
                <path d="M 472,192 L 472,288" fill="none" stroke="black"/>
                <path d="M 472,400 L 472,592" fill="none" stroke="black"/>
                <path d="M 536,672 L 536,864" fill="none" stroke="black"/>
                <path d="M 544,224 L 544,608" fill="none" stroke="black"/>
                <path d="M 568,448 L 568,896" fill="none" stroke="black"/>
                <path d="M 128,144 L 192,144" fill="none" stroke="black"/>
                <path d="M 384,144 L 424,144" fill="none" stroke="black"/>
                <path d="M 472,224 L 544,224" fill="none" stroke="black"/>
                <path d="M 8,448 L 40,448" fill="none" stroke="black"/>
                <path d="M 56,448 L 464,448" fill="none" stroke="black"/>
                <path d="M 480,448 L 536,448" fill="none" stroke="black"/>
                <path d="M 552,448 L 568,448" fill="none" stroke="black"/>
                <path d="M 152,528 L 184,528" fill="none" stroke="black"/>
                <path d="M 312,608 L 464,608" fill="none" stroke="black"/>
                <path d="M 480,608 L 544,608" fill="none" stroke="black"/>
                <path d="M 264,672 L 296,672" fill="none" stroke="black"/>
                <path d="M 312,672 L 536,672" fill="none" stroke="black"/>
                <path d="M 376,736 L 400,736" fill="none" stroke="black"/>
                <path d="M 264,864 L 536,864" fill="none" stroke="black"/>
                <path d="M 8,896 L 568,896" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="492,608 480,602.4 480,613.6" fill="black" transform="rotate(180,484,608)"/>
                <polygon class="arrowhead" points="480,592 468,586.4 468,597.6" fill="black" transform="rotate(90,472,592)"/>
                <polygon class="arrowhead" points="480,288 468,282.4 468,293.6" fill="black" transform="rotate(90,472,288)"/>
                <polygon class="arrowhead" points="432,144 420,138.4 420,149.6" fill="black" transform="rotate(0,424,144)"/>
                <polygon class="arrowhead" points="384,736 372,730.4 372,741.6" fill="black" transform="rotate(180,376,736)"/>
                <polygon class="arrowhead" points="324,608 312,602.4 312,613.6" fill="black" transform="rotate(180,316,608)"/>
                <polygon class="arrowhead" points="312,800 300,794.4 300,805.6" fill="black" transform="rotate(90,304,800)"/>
                <polygon class="arrowhead" points="312,704 300,698.4 300,709.6" fill="black" transform="rotate(90,304,704)"/>
                <polygon class="arrowhead" points="312,596 300,590.4 300,601.6" fill="black" transform="rotate(90,304,596)"/>
                <polygon class="arrowhead" points="200,144 188,138.4 188,149.6" fill="black" transform="rotate(0,192,144)"/>
                <polygon class="arrowhead" points="192,528 180,522.4 180,533.6" fill="black" transform="rotate(0,184,528)"/>
                <polygon class="arrowhead" points="56,672 44,666.4 44,677.6" fill="black" transform="rotate(90,48,672)"/>
                <polygon class="arrowhead" points="56,480 44,474.4 44,485.6" fill="black" transform="rotate(90,48,480)"/>
                <polygon class="arrowhead" points="56,320 44,314.4 44,325.6" fill="black" transform="rotate(90,48,320)"/>
                <polygon class="arrowhead" points="56,112 44,106.4 44,117.6" fill="black" transform="rotate(90,48,112)"/>
                <circle cx="304" cy="608" r="6" class="opendot" fill="white" stroke="black"/>
                <circle cx="472" cy="608" r="6" class="opendot" fill="white" stroke="black"/>
                <g class="text">
                  <text x="32" y="36">Invalid</text>
                  <text x="92" y="36">access</text>
                  <text x="144" y="36">token</text>
                  <text x="180" y="36">or</text>
                  <text x="32" y="52">invalid</text>
                  <text x="112" y="52">application</text>
                  <text x="180" y="52">keys</text>
                  <text x="140" y="132">NO</text>
                  <text x="12" y="148">Is</text>
                  <text x="40" y="148">the</text>
                  <text x="228" y="148">Delete</text>
                  <text x="272" y="148">the</text>
                  <text x="332" y="148">associated</text>
                  <text x="444" y="148">Is</text>
                  <text x="476" y="148">this</text>
                  <text x="516" y="148">peer</text>
                  <text x="28" y="164">access</text>
                  <text x="80" y="164">token</text>
                  <text x="220" y="164">LAKE</text>
                  <text x="276" y="164">sessions</text>
                  <text x="328" y="164">and</text>
                  <text x="448" y="164">the</text>
                  <text x="480" y="164">ACE</text>
                  <text x="528" y="164">client?</text>
                  <text x="24" y="180">still</text>
                  <text x="84" y="180">believed</text>
                  <text x="216" y="180">the</text>
                  <text x="280" y="180">application</text>
                  <text x="348" y="180">keys</text>
                  <text x="12" y="196">to</text>
                  <text x="36" y="196">be</text>
                  <text x="76" y="196">valid?</text>
                  <text x="232" y="196">derived</text>
                  <text x="284" y="196">from</text>
                  <text x="328" y="196">those</text>
                  <text x="524" y="212">NO</text>
                  <text x="496" y="276">YES</text>
                  <text x="72" y="308">YES</text>
                  <text x="452" y="324">Obtain</text>
                  <text x="488" y="324">a</text>
                  <text x="512" y="324">new</text>
                  <text x="452" y="340">access</text>
                  <text x="504" y="340">token</text>
                  <text x="16" y="356">The</text>
                  <text x="80" y="356">application</text>
                  <text x="148" y="356">keys</text>
                  <text x="436" y="356">to</text>
                  <text x="476" y="356">upload</text>
                  <text x="516" y="356">at</text>
                  <text x="16" y="372">are</text>
                  <text x="48" y="372">not</text>
                  <text x="88" y="372">valid</text>
                  <text x="144" y="372">anymore</text>
                  <text x="440" y="372">the</text>
                  <text x="472" y="372">ACE</text>
                  <text x="500" y="372">RS</text>
                  <text x="140" y="436">Handling</text>
                  <text x="188" y="436">of</text>
                  <text x="232" y="436">invalid</text>
                  <text x="312" y="436">application</text>
                  <text x="380" y="436">keys</text>
                  <text x="32" y="516">Are</text>
                  <text x="64" y="516">the</text>
                  <text x="164" y="516">NO</text>
                  <text x="220" y="516">Delete</text>
                  <text x="264" y="516">the</text>
                  <text x="328" y="516">application</text>
                  <text x="396" y="516">keys</text>
                  <text x="64" y="532">application</text>
                  <text x="208" y="532">and</text>
                  <text x="240" y="532">the</text>
                  <text x="300" y="532">associated</text>
                  <text x="364" y="532">LAKE</text>
                  <text x="416" y="532">session</text>
                  <text x="36" y="548">keys</text>
                  <text x="100" y="548">persisted?</text>
                  <text x="72" y="660">YES</text>
                  <text x="396" y="660">Re-execution</text>
                  <text x="460" y="660">of</text>
                  <text x="492" y="660">LAKE</text>
                  <text x="48" y="724">...</text>
                  <text x="296" y="740">Rerun</text>
                  <text x="340" y="740">LAKE</text>
                  <text x="424" y="740">...</text>
                  <text x="48" y="804">...</text>
                  <text x="304" y="836">...</text>
                  <text x="48" y="868">...</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Invalid access token or
invalid application keys

     |
     |
     v
                NO
Is the         --------> Delete the associated -----> Is this peer
access token             LAKE sessions and            the ACE client?
still believed           the application keys
to be valid?             derived from those               |
                                                          |     NO
                                                          +--------+
     |                                                    |        |
     |                                                    |        |
     |                                                    | YES    |
     |                                                    v        |
     | YES                                                         |
     v                                               Obtain a new  |
                                                     access token  |
The application keys                                 to upload at  |
are not valid anymore                                the ACE RS    |
                                                                   |
     |                                                    |        |
     |                                                    |        |
     |       Handling of invalid application keys         |        |
+----|----------------------------------------------------|--------|--+
|    |                                                    |        |  |
|    v                                                    |        |  |
|                                                         |        |  |
| Are the          NO   Delete the application keys       |        |  |
| application     ----> and the associated LAKE session   |        |  |
| keys persisted?                                         |        |  |
|                                    |                    |        |  |
|    |                               |                    |        |  |
|    |                               v                    v        |  |
|    |                               o<-------------------o<-------+  |
|    |                               |                                |
|    |                               |                                |
|    | YES                           |     Re-execution of LAKE       |
|    v                          +----|----------------------------+   |
|                               |    |                            |   |
|                               |    v                            |   |
|   ...                         |                                 |   |
|                               | Rerun LAKE  <--- ...            |   |
|                               |                                 |   |
|                               |    |                            |   |
|                               |    |                            |   |
|   ...                         |    v                            |   |
|                               |                                 |   |
|                               |   ...                           |   |
|                               |                                 |   |
|   ...                         +---------------------------------+   |
|                                                                     |
+---------------------------------------------------------------------+
]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="sec-session-retention">
      <name>Retention of Completed LAKE Sessions</name>
      <t>After successfully completing a LAKE session S and potentially using the EDHOC_Exporter interface to derive keying material from S, a LAKE peer is expected to store and retain the latest state of S over time.</t>
      <t>The latest state of S can be stored in volatile memory, although a reboot would result in a loss of that state and the need to rerun LAKE with the other peer that participated in the session S. When it is supported, storing in non-volatile memory is a more robust alternative. Note that requirements to fulfill for persistently storing PRK_out or derived application keys are defined in Sections <xref target="RFC9528" section="5.4.2" sectionFormat="bare"/> and <xref target="RFC9528" section="5.4.3" sectionFormat="bare"/> of <xref target="RFC9528"/>.</t>
      <t>Retaining the state of S ensures that it is possible to:</t>
      <ul spacing="normal">
        <li>
          <t>Update S by updating its associated PRK_out in a more efficient way than rerunning LAKE, e.g., by using the EDHOC_KeyUpdate function defined in <xref section="H" sectionFormat="of" target="RFC9528"/>.</t>
        </li>
        <li>
          <t>Use the EDHOC_Exporter interface for late derivations of keying material from S that cannot be performed shortly after the session completion or according to a predictable schedule.</t>
        </li>
      </ul>
      <t>Absent application policies defining more restrictive lifetimes, the peer is expected to retain the latest state of S in its local storage until:</t>
      <ul spacing="normal">
        <li>
          <t>S has to be deleted due to reasons discussed in <xref target="sec-session-handling"/>; or</t>
        </li>
        <li>
          <t>S has to be deleted due to memory limitations, in which case the peer ought to delete the oldest completed LAKE session first.</t>
        </li>
      </ul>
      <section anchor="handling-of-incoming-lake-error-messages">
        <name>Handling of Incoming LAKE Error Messages</name>
        <t><xref section="5.1" sectionFormat="of" target="RFC9528"/> defines that a LAKE session is completed after having successfully processed the last message, i.e., message_3 or message_4, depending on the application profile used (see <xref section="3.9" sectionFormat="of" target="RFC9528"/>). It follows that:</t>
        <ul spacing="normal">
          <li>
            <t>When a peer sends the last message in a session, that peer completes the session after successfully building and sending such message.</t>
          </li>
          <li>
            <t>When a peer receives the last message in a session, that peer completes the session after receiving and successfully processing such message.</t>
          </li>
        </ul>
        <t>Furthermore, <xref section="6" sectionFormat="of" target="RFC9528"/> defines LAKE error messages and the processing associated with the initial set of error codes. According to <xref section="5.1" sectionFormat="of" target="RFC9528"/>, after a LAKE session is completed, no LAKE error messages are sent and the LAKE session output may be maintained even if LAKE error messages are received.</t>
        <t>That is, an implementation has a lot of latitude about handling incoming LAKE error messages that pertain to a completed LAKE session.</t>
        <t>In general, a safe approach simply consists in aborting the completed LAKE session, thereby deleting the corresponding output such as derived application keys. If the reception of LAKE error messages at a given peer P is still plausible, this is actually an appropriate course of action for P. In particular, this applies if P is the sender of the last message and therefore could receive a LAKE error message as a follow-up from the other peer that rejected the last message.</t>
        <t>However, there are indeed cases where it is not plausible anymore to receive LAKE error messages pertaining to a completed LAKE session. Such LAKE error messages can be safely ignored as irrelevant and potentially resulting from an attack, thereby preserving the LAKE session output such as derived application keys. In particular, it is possible to safely ignore incoming LAKE error messages for:</t>
        <ul spacing="normal">
          <li>
            <t>The peer that receives and successfully processes the last message in the session.</t>
          </li>
          <li>
            <t>The peer that successfully builds and sends the last message in the session, after it has received and successfully verified a message from the other peer that is protected with an application key derived from the session.</t>
          </li>
        </ul>
        <section anchor="detailed-guidance-for-coap-and-oscore">
          <name>Detailed Guidance for CoAP and OSCORE</name>
          <t>The rest of this section considers the specific case where:</t>
          <ul spacing="normal">
            <li>
              <t>"application keys" stands for the keying material and parameters that compose an OSCORE Security Context <xref target="RFC8613"/>, i.e., when specifically those application keys are derived from a LAKE session (see <xref section="A.1" sectionFormat="of" target="RFC9528"/>).</t>
            </li>
            <li>
              <t>LAKE messages are transferred over CoAP <xref target="RFC7252"/> using the forward message flow (see <xref section="A.2" sectionFormat="of" target="RFC9528"/>), i.e., the LAKE Responder acts as a CoAP server and the LAKE Initiator acts as a CoAP client.</t>
            </li>
          </ul>
          <t>Building on the above, the following holds for the LAKE Responder.</t>
          <ul spacing="normal">
            <li>
              <t>If LAKE message_3 is the last message in the LAKE session (i.e., LAKE message_4 is not used), the Responder completes the session after receiving and successfully processing the incoming LAKE message_3.  </t>
              <t>
Consequently, the Responder can safely set the LAKE session to ignore any incoming LAKE error message pertaining to the session from then on, thereby preserving the OSCORE Security Context derived from the session.</t>
            </li>
            <li>
              <t>If LAKE message_4 is used and thus is the last message in the LAKE session, the Responder completes the session after successfully building and sending LAKE message_4.  </t>
              <t>
After that, it remains generally appropriate for the Responder to abort the LAKE session in the event that the Responder receives a LAKE error message pertaining to the session. In particular, the LAKE error message might have been legitimately sent by the Initiator that failed to process LAKE message_4.  </t>
              <t>
However, the Responder can safely set the LAKE session to ignore any incoming LAKE error message pertaining to the session from then on, after successfully processing an incoming OSCORE-protected message received from the Initiator. Similarly to the case previously discussed, this preserves the OSCORE Security Context derived from the session, in the event that the Responder receives LAKE error messages.</t>
            </li>
          </ul>
          <t>Also building on the above, the following holds for the LAKE Initiator.</t>
          <ul spacing="normal">
            <li>
              <t>If LAKE message_4 is used and thus is the last message in the LAKE session, the Initiator completes the session after successfully processing the incoming LAKE message_4.  </t>
              <t>
Consequently, the Initiator can safely set the LAKE session to ignore any incoming LAKE error message pertaining to the session from then on, thereby preserving the OSCORE Security Context derived from the session.</t>
            </li>
            <li>
              <t>If LAKE message_3 is the last message in the LAKE session (i.e., LAKE message_4 is not used), the Initiator completes the session after successfully building and sending LAKE message_3.  </t>
              <t>
After that, it remains generally appropriate for the Initiator to abort the LAKE session in the event that the Initiator receives a LAKE error message pertaining to the session. In particular, the LAKE error message might have been legitimately sent by the Responder that failed to process LAKE message_3.  </t>
              <t>
If an active adversary injects a LAKE error message intended to the Initiator and pertaining to the LAKE session, the Initiator would effectively receive and process that message only during a specific time interval, i.e., from when the Initiator sends LAKE message_3 until when the Initiator frees up the CoAP Token value used in the CoAP request message that conveyed LAKE message_3.  </t>
              <t>
However, the Initiator can safely set the LAKE session to ignore any incoming LAKE error message pertaining to the session, after successfully processing an incoming OSCORE-protected message received from the Responder. Similarly to the case previously discussed, this preserves the OSCORE Security Context derived from the session, in the event that the Initiator receives LAKE error messages.</t>
            </li>
          </ul>
          <t>Following the reception and successful verification for the first time of an OSCORE-protected message using the OSCORE Security Context derived from a completed LAKE session, a recipient LAKE peer has different ways for setting the session to ignore pertaining LAKE error messages from then on.</t>
          <t>Some approaches can be easier and more appealing to use than others, depending on the specific LAKE implementation and its integration with the communication stack. As an example, the following describes two possible approaches, which are applicable to either message flow and also when other protocols than CoAP are used to transfer LAKE messages:</t>
          <ul spacing="normal">
            <li>
              <t>The OSCORE library used or an OSCORE layer that takes part in the communication stack can be aware that an OSCORE Security Context CTX was derived from a LAKE session S.  </t>
              <t>
In such a case, after receiving and successfully verifying for the first time an OSCORE-protected message using CTX, the OSCORE library/layer on the recipient LAKE peer can effectively set the LAKE session S to ignore any incoming LAKE error message pertaining to the session from then on.</t>
            </li>
            <li>
              <t>When receiving a LAKE error message pertaining to a completed LAKE session, LAKE can check whether the session is set to ignore pertaining LAKE error messages. If that is the case, the received LAKE error message is ignored.  </t>
              <t>
Otherwise, LAKE checks whether the OSCORE Security Context CTX derived from the LAKE session has been used at least once for successfully verifying an incoming OSCORE-protected message from the other LAKE peer (e.g., by checking the Replay Window within the Recipient Context of CTX).  </t>
              <t>
In the case that CTX has not been used yet, the received LAKE error message is processed as usual, i.e., the LAKE session is aborted and CTX is deleted. Instead, in the case that CTX has been used at least once for successfully verifying an incoming OSCORE-protected message from the other LAKE peer, the LAKE error message is ignored and LAKE sets the LAKE session to ignore pertaining LAKE error messages from then on.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="sec-trust-models">
      <name>Trust Policies for Learning New Authentication Credentials</name>
      <t>A peer P relies on authentication credentials associated with other peers, in order to authenticate those peers when running LAKE with them.</t>
      <t>There are different ways for P to acquire an authentication credential CRED associated with another peer. For example, CRED can be supplied to P out-of-band by a trusted provider.</t>
      <t>Alternatively, CRED can be specified by the other peer during the LAKE execution with P. This can rely on LAKE message_2 or message_3, whose respective ID_CRED_R and ID_CRED_I field can specify CRED by value, or instead a URI or other external reference where CRED can be retrieved from (see <xref section="3.5.3" sectionFormat="of" target="RFC9528"/>).</t>
      <t>Also during the LAKE execution, an EAD field might include an EAD item that specifies CRED by value, or instead a URI or other external reference where CRED can be retrieved from. This is the case, e.g., for an EAD item specified by the profile of the ACE framework defined in <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>. In particular, the EAD item is used for transporting an access token, which in turn specifies by value or by reference the public authentication credential associated with the LAKE peer acting as the ACE client.</t>
      <t>When obtaining a new credential CRED, the peer P has to validate it before storing it. The validation steps to perform depend on the specific type of CRED (e.g., a public key certificate <xref target="RFC5280"/><xref target="I-D.ietf-cose-cbor-encoded-cert"/>) and can rely on (the authentication credential associated with) a trusted third party acting as a trust anchor.</t>
      <t>Upon retrieving a new CRED through the processing of a received LAKE message and following the successful validation of CRED, the peer P stores CRED only if it assesses CRED to also be (provisionally) trusted, while it must not store CRED otherwise. A narrow exception is discussed in <xref target="sec-unauth-operation"/>.</t>
      <t>When processing a received LAKE message M that specifies an authentication credential CRED, the peer P can enforce one of the trust policies LEARNING and NO-LEARNING specified in <xref target="sec-policy-learning"/> and <xref target="sec-policy-no-learning"/>, in order to determine whether to trust CRED.</t>
      <t><xref target="tab-trust-policies"/> provides a summary of the behavior of P about accepting CRED, for different trust policies. Provisional trust on CRED has to be later confirmed, e.g., by information that vouches for CRED and is conveyed within a LAKE message received during the LAKE session (e.g., transported by an EAD item).</t>
      <table align="center" anchor="tab-trust-policies">
        <name>Summary about Accepting the Authentication Credential CRED Associated with the Other Peer in a LAKE Session, for Different Trust Policies.</name>
        <thead>
          <tr>
            <th align="left">Trust policy</th>
            <th align="left">CRED is not new (already stored)</th>
            <th align="left">CRED is new
(not already stored)</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">LEARNING policy</td>
            <td align="left">Accept,<br/>if still valid<br/>and trusted.</td>
            <td align="left">Accept, if valid and therefore (provisionally) trusted.</td>
          </tr>
          <tr>
            <td align="left">NO-LEARNING policy, without <br/> acceptable exception</td>
            <td align="left">Accept,<br/>if still valid<br/>and trusted.</td>
            <td align="left">Do not accept.</td>
          </tr>
          <tr>
            <td align="left">NO-LEARNING policy, with <br/> acceptable exception</td>
            <td align="left">Accept,<br/>if still valid<br/>and trusted.</td>
            <td align="left">Accept, if valid and<br/>(provisionally) trusted.</td>
          </tr>
        </tbody>
      </table>
      <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 LAKE session, also depending on the specific identity of the other peer (see Sections <xref target="RFC9528" section="3.5" sectionFormat="bare"/> and <xref target="RFC9528" section="D.2" sectionFormat="bare"/> of <xref target="RFC9528"/>). If this is not the case, P aborts the LAKE session with the other peer.</t>
      <t>If P stores CRED, then P will consider CRED as valid and trusted until:</t>
      <ul spacing="normal">
        <li>
          <t>CRED becomes invalid, e.g., because it expires or because P gains knowledge that it has been revoked; or</t>
        </li>
        <li>
          <t>CRED becomes non-trusted, e.g., because P originally assessed CRED to be provisionally trusted, and later on failed to obtain an expected final confirmation of trust.</t>
        </li>
      </ul>
      <t>P must delete CRED from its local storage if CRED becomes invalid or non-trusted.</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 LAKE 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 LAKE message_2 or message_3 addressed to the peer P. In turn, this allows P to retrieve CRED from its local storage.</t>
      <section anchor="sec-policy-learning">
        <name>Trust Policy LEARNING</name>
        <t>When enforcing the LEARNING policy, the peer P trusts CRED even if P is not already storing CRED at message reception time.</t>
        <t>That is, upon receiving M, the peer P performs the following steps.</t>
        <ol spacing="normal" type="1"><li>
            <t>P retrieves CRED, as specified by reference or by value in the ID_CRED_I/ID_CRED_R field of M or in the value of an EAD item of M.</t>
          </li>
          <li>
            <t>P checks whether CRED is already being stored and if it is still valid and trusted. In such a case, P trusts CRED and can continue the LAKE 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 LAKE session with the other peer. Otherwise, P trusts and stores CRED, and can continue the LAKE execution.</t>
          </li>
        </ol>
      </section>
      <section anchor="sec-policy-no-learning">
        <name>Trust Policy NO-LEARNING</name>
        <t>When enforcing the NO-LEARNING policy, the peer P trusts CRED only if P is already storing CRED at message reception time, unless in cases where situation-specific exceptions apply and are deliberately enforced (see below).</t>
        <t>That is, upon receiving M, the peer P continues the execution of LAKE only if both the following conditions hold:</t>
        <ul spacing="normal">
          <li>
            <t>P currently stores CRED, as specified by reference or by value in the ID_CRED_I/ID_CRED_R field of M or in the value of an EAD item of M; and</t>
          </li>
          <li>
            <t>CRED is still valid (i.e., P believes CRED to not be expired or revoked) and trusted.</t>
          </li>
        </ul>
        <t>Exceptions may apply and be actually enforced in cases where, during a LAKE execution, P obtains additional information that allows it to trust and successfully validate CRED, even though P was not already storing CRED when receiving M.</t>
        <t>Such exceptions typically rely on a trusted party that vouches for CRED, e.g., in the cases discussed in <xref target="sec-trust-models-specific"/>. From the point of view of the peer P, the trusted party might have been involved in the background, so that the vouching information about CRED is conveyed within a LAKE message received during the LAKE session (e.g., transported by an EAD item). Alternatively, P might directly interact with the trusted party for retrieving the vouching information about CRED, e.g., after having received M and before continuing the LAKE execution.</t>
        <t>If the peer P admits such an exception and actually enforces it on an authentication credential CRED, then P effectively handles CRED according to the trust policy "LEARNING" specified in <xref target="sec-policy-learning"/>. When doing so, P still attempts to validate CRED, and it aborts the LAKE session if the validation process is not successful.</t>
      </section>
      <section anchor="sec-trust-models-specific">
        <name>Enforcement of Trust Policies in Specific Scenarios</name>
        <t>The following subsections discuss how a LAKE peer enforces the trust policies LEARNING and NO-LEARNING in specific scenarios.</t>
        <section anchor="sec-trust-models-ace-prof">
          <name>In the ACE Framework</name>
          <t>As discussed in <xref target="sec-keys-token-invalid"/>, two LAKE peers can be using the ACE framework <xref target="RFC9200"/> and specifically the profile of ACE defined in <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>.</t>
          <t>In this case, one of the two LAKE peers, namely PEER_RS, acts as the ACE resource server (RS). Instead, the other LAKE peer, namely PEER_C, acts as the ACE client and obtains from an ACE authorization server (AS) an access token for accessing protected resources at PEER_RS. The AS and PEER_RS are in a trust relationship.</t>
          <t>Together with other information, the access token specifies (by value or by reference) the public authentication credential AUTH_CRED_C associated with PEER_C that PEER_C is going to use when running LAKE with PEER_RS. Note that AUTH_CRED_C will be used as either CRED_I or CRED_R in LAKE, depending on whether the two peers use the LAKE forward message flow (i.e., PEER_C is the LAKE Initiator) or the LAKE reverse message flow (i.e., PEER_C is the LAKE Responder), respectively (see <xref section="A.2" sectionFormat="of" target="RFC9528"/>).</t>
          <t>When the AS issues the first access token that specifies AUTH_CRED_C and is intended to be uploaded to PEER_RS, it is expected that the access token specifies AUTH_CRED_C by value and that PEER_RS is not currently storing AUTH_CRED_C, but instead will obtain it and learn it upon receiving the access token.</t>
          <t>Although the AS can upload the access token to PEER_RS on behalf of PEER_C as per the alternative SDC workflow defined in <xref target="I-D.ietf-ace-workflow-and-params"/>, the access token is typically uploaded to PEER_RS by PEER_C through a dedicated EAD item, when running LAKE with PEER_RS. The specific LAKE message that includes the EAD item conveying the access token depends on whether the two peers use the LAKE forward message flow or the LAKE reverse message flow.</t>
          <t>Consequently, PEER_RS has to learn AUTH_CRED_C as a new authentication credential during a LAKE session with PEER_C.</t>
          <t>At least for its LAKE resource used for exchanging the LAKE messages of the LAKE session in question, this requires PEER_RS to:</t>
          <ul spacing="normal">
            <li>
              <t>Enforce the trust policy "LEARNING"; or</t>
            </li>
            <li>
              <t>If enforcing the trust policy "NO-LEARNING", additionally enforce an overriding exception when an incoming LAKE message includes an EAD item specifying a valid access token issued by a trusted AS.  </t>
              <t>
That is, through a successful verification of the access token, PEER_RS is able to trust AUTH_CRED_C (if found valid), even though it was not already storing AUTH_CRED_C when receiving the LAKE message with the EAD item.</t>
            </li>
          </ul>
        </section>
        <section anchor="sec-trust-models-ela">
          <name>In the ELA Procedure</name>
          <t>When the execution of LAKE embeds the ELA procedure for lightweight authorization defined in <xref target="I-D.ietf-lake-authz"/>, the LAKE peer U receives a LAKE message_2 (message_3) where ID_CRED_R (ID_CRED_I) specifies by value the authentication credential CRED associated with the other peer V.</t>
          <t>Furthermore, a LAKE message sent to U includes an EAD item, which specifies a voucher issued by a trusted enrollment server W. The voucher is an assertion to U that W has authorized V and has endorsed CRED.</t>
          <t>The specific LAKE message that includes the EAD item conveying the voucher depends on whether U and V use the LAKE forward message flow (i.e., U is the LAKE Initiator) or the LAKE reverse message flow (i.e., U is the LAKE Responder). In particular:</t>
          <ul spacing="normal">
            <li>
              <t>When using the LAKE forward message flow, the EAD item is included in LAKE message_4, thereby endorsing CRED that was specified by ID_CRED_R in the previous LAKE message_2.  </t>
              <t>
Since it is indeed expected that U is not already storing CRED upon receiving LAKE message_2, U can at best provisionally trust CRED (if found valid) when retrieving it from LAKE message_2.</t>
            </li>
            <li>
              <t>When using the LAKE reverse message flow, the EAD item is included in LAKE message_3, thereby endorsing CRED that is specified by ID_CRED_I in the same LAKE message.</t>
            </li>
          </ul>
          <t>In either case, through a successful verification of the voucher, U is able to ultimately trust CRED (if found valid), even though U was not already storing CRED upon receiving the LAKE message specifying CRED.</t>
          <t>Therefore, if U enforces the trust policy "NO-LEARNING", it can additionally enforce an overriding exception as below:</t>
          <ul spacing="normal">
            <li>
              <t>When using the LAKE forward message flow, the exception is enforced when processing a LAKE message_2, and it is raised by the intention of using the ELA procedure. That is, U intends to proceed with sending a consistent LAKE message_3 that indicates the wish to obtain a voucher issued by W.  </t>
              <t>
At that point in time, the authentication credential CRED is only provisionally trusted (if found valid), with the expectation to receive a LAKE message_4 in the same LAKE session, conveying a valid voucher issued by W and thus confirming that CRED can be ultimately trusted.</t>
            </li>
            <li>
              <t>When using the LAKE reverse message flow, the exception is enforced when processing a LAKE message_3, and it is raised by the LAKE message_3 including an EAD item that conveys a valid voucher issued by W, thus confirming that CRED can be ultimately trusted.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="sec-unauth-operation">
        <name>Unauthenticated Operation</name>
        <t>When a peer P runs LAKE with another peer, it could be the case that P retrieves a new CRED of that other peer through the processing of a received LAKE message.</t>
        <t>A very specific use of LAKE described in <xref section="D.5" sectionFormat="of" target="RFC9528"/> allows P to temporarily accept the other peer as an unknown or not-yet-trusted endpoint, and to establish a trust relationship with the other peer later on. To this end, P can take different approaches: For example, CRED is verified out-of-band at a later stage, or a LAKE session key is bound to an identity out-of-band at a later stage.</t>
      </section>
    </section>
    <section anchor="sec-message-side-processing">
      <name>Side Processing of Incoming LAKE Messages</name>
      <t>This section describes a possible approach that LAKE peers can use upon receiving LAKE messages, in order to fetch/validate authentication credentials and to process EAD items.</t>
      <t>The transport mechanism provided by LAKE for conveying EAD items is defined in <xref section="3.8" sectionFormat="of" target="RFC9528"/>. In particular, a LAKE message_x can include one dedicated EAD field EAD_x, for x = 1, 2, 3, or 4. In turn, an EAD field can include one or more EAD items.</t>
      <t>As per <xref section="9.1" sectionFormat="of" target="RFC9528"/>, specifications defining those EAD items have to set the ground for "agreeing on the surrounding context and the meaning of the information passed to and from the application".</t>
      <t>The approach described in this section aims to help implementers navigate the surrounding context mentioned above, irrespective of the specific EAD items conveyed in the LAKE messages. In particular, the described approach takes into account the following two points:</t>
      <ul spacing="normal">
        <li>
          <t>Fetching and validating the authentication credential associated with the other peer rely on ID_CRED_I in LAKE message_2, or on ID_CRED_R in LAKE message_3, or on the value of an EAD item. When this occurs upon receiving LAKE message_2 or message_3, the decryption of the LAKE message has to be completed first.  </t>
          <t>
Validating the authentication credential or assessing whether it is trusted might depend on using the value of an EAD item, which in turn has to be validated first.</t>
        </li>
        <li>
          <t>It is possible that some EAD items can be processed only after having successfully verified the LAKE message, i.e., after a successful verification of the Signature_or_MAC field in LAKE message_2 or message_3.  </t>
          <t>
For instance, an EAD item within the EAD_3 field of LAKE message_3 might contain a Certificate Signing Request (CSR) <xref target="RFC2986"/>. Hence, such an EAD item can be processed only once the recipient peer has attained proof that the other peer possesses its own private key.</t>
        </li>
      </ul>
      <t>In order to conveniently handle such processing, the application can prepare in advance a "side-processor object" (SPO), which takes care of the operations above during the LAKE execution.</t>
      <t>In particular, the application provides LAKE with the SPO before starting a LAKE execution, during which LAKE will temporarily transfer control to the SPO at the right point in time, in order to perform the required side-processing of an incoming LAKE message.</t>
      <t>The following subsections provide a high-level description of the SPO in terms of expected features and services. Building on that, <xref target="sec-example-spo"/> provides a detailed example of how the SPO can be implemented.</t>
      <section anchor="sec-instructing-spo">
        <name>Instructing the Side-Processor Object</name>
        <t>From a high-level perspective, the application instructs the SPO about:</t>
        <ul spacing="normal">
          <li>
            <t>How to prepare any EAD item such that: it has to be included in the EAD field of an outgoing LAKE message, potentially together with other EAD items; and it is independent of the processing of other EAD items included in incoming LAKE messages. This includes, for instance, the preparation of padding EAD items (see <xref section="3.8.1" sectionFormat="of" target="RFC9528"/>).</t>
          </li>
          <li>
            <t>The list of one or more EAD items that are expected to be present within the dedicated EAD field of specific, incoming LAKE messages during the LAKE session. This takes into account, for instance, external security applications that will be integrated in the LAKE session (e.g., see <xref target="I-D.ietf-lake-authz"/>).  </t>
            <t>
Throughout the LAKE session, the SPO keeps such a list of expected EAD items up-to-date. This takes into account, for instance, external security applications that have been run integrated in the LAKE session, the current status of the session, as well as the LAKE messages that have been exchanged during the session and the outcome of their processing.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-invoking-spo">
        <name>Invoking the Side-Processor Object</name>
        <t>At the right point in time during the processing of an incoming LAKE message M at the peer P, LAKE invokes the SPO. In particular:</t>
        <ul spacing="normal">
          <li>
            <t>If M is LAKE message_1, LAKE invokes the SPO after the Responder peer has successfully decoded M and accepted the selected cipher suite.</t>
          </li>
          <li>
            <t>If M is LAKE message_2 or message_3, LAKE invokes the SPO:  </t>
            <ul spacing="normal">
              <li>
                <t>Right after M has been decrypted and before starting its verification, i.e., before verifying the Signature_or_MAC field of M; and</t>
              </li>
              <li>
                <t>Right after M has been successfully verified, i.e., after having verified the Signature_or_MAC field of M.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If M is LAKE message_4, LAKE invokes the SPO after the Initiator peer has successfully decrypted M.</t>
          </li>
        </ul>
        <t>When invoking the SPO for processing message M, LAKE provides the SPO with the following input:</t>
        <ul spacing="normal">
          <li>
            <t>When M is LAKE 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 LAKE 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 LAKE session.</t>
          </li>
          <li>
            <t>The authentication credentials that the peer P stores as associated with other peers.</t>
          </li>
          <li>
            <t>All the decrypted information elements retrieved from M.</t>
          </li>
          <li>
            <t>The EAD items included in M.  </t>
            <ul spacing="normal">
              <li>
                <t>Note that LAKE could 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 LAKE with the ead_labels of the EAD items that the peer P recognizes (see <xref section="3.8" sectionFormat="of" target="RFC9528"/>).      </t>
                <t>
With such information available, LAKE can early abort the current session if 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, LAKE can remove any padding EAD item (see <xref section="3.8.1" sectionFormat="of" target="RFC9528"/>) and any EAD item which is neither critical nor recognized (since the SPO is going to ignore it anyway). This results in LAKE providing the SPO only with EAD items that will be recognized and that require actual processing.</t>
              </li>
              <li>
                <t>Note that, after having processed the EAD items, the SPO might actually need to store them throughout the whole LAKE execution, e.g., in order to refer to them also when processing later LAKE messages in the current LAKE session.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>The SPO performs the following tasks on the incoming message M:</t>
        <ul spacing="normal">
          <li>
            <t>The SPO checks whether M does not include an EAD item whose presence was expected, based on the related list maintained throughout the LAKE session. If such an EAD item is absent, the SPO can come to an early determination about whether and how to proceed with the processing of M.  </t>
            <t>
In particular, if an EAD item is absent although its presence was strictly required, then the SPO can early abort the LAKE session, thereby avoiding potentially costly operations (e.g., the retrieval and validation of the authentication credential associated with the other peer).</t>
          </li>
          <li>
            <t>The SPO fetches and/or validates the authentication credential CRED associated with the other peer, based on a dedicated EAD item of M or on the ID_CRED field of M (for LAKE message_2 or message_3). Furthermore, the SPO assesses whether CRED can be trusted, in accordance with the trust policy used (see <xref target="sec-trust-models"/>).  </t>
            <t><xref target="sec-consistency-checks-auth-creds"/> describes special handling of incoming LAKE messages, as to consistency checks concerning authentication credentials in particular situations.</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>
        </ul>
        <t>When the SPO has completed its side processing and transfers control back to LAKE, the SPO provides LAKE with the produced EAD items to include in the EAD field of the next outgoing LAKE message. The production of such EAD items can be triggered, for example, by:</t>
        <ul spacing="normal">
          <li>
            <t>The completed consumption of EAD items that were included in M.</t>
          </li>
          <li>
            <t>The completed execution of instructions that the SPO received from the application, concerning EAD items to produce irrespective of other EAD items included in M.</t>
          </li>
        </ul>
        <t>The flowchart in <xref target="fig-flowchart-spo-high-level"/> shows the high-level interactions between the core LAKE processing and the SPO, with particular reference to an incoming LAKE message_2 or message_3.</t>
        <figure anchor="fig-flowchart-spo-high-level">
          <name>High-Level Interaction Between the Core LAKE Processing and the Side-Processor Object (SPO), for Incoming LAKE message_2 and message_3.</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="848" width="576" viewBox="0 0 576 848" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,128 L 8,384" fill="none" stroke="black"/>
                <path d="M 8,512 L 8,832" fill="none" stroke="black"/>
                <path d="M 24,176 L 24,224" fill="none" stroke="black"/>
                <path d="M 24,560 L 24,800" fill="none" stroke="black"/>
                <path d="M 56,96 L 56,168" fill="none" stroke="black"/>
                <path d="M 72,288 L 72,336" fill="none" stroke="black"/>
                <path d="M 120,176 L 120,224" fill="none" stroke="black"/>
                <path d="M 144,344 L 144,552" fill="none" stroke="black"/>
                <path d="M 160,176 L 160,224" fill="none" stroke="black"/>
                <path d="M 176,232 L 176,280" fill="none" stroke="black"/>
                <path d="M 192,288 L 192,336" fill="none" stroke="black"/>
                <path d="M 224,288 L 224,336" fill="none" stroke="black"/>
                <path d="M 240,344 L 240,552" fill="none" stroke="black"/>
                <path d="M 248,560 L 248,800" fill="none" stroke="black"/>
                <path d="M 296,176 L 296,224" fill="none" stroke="black"/>
                <path d="M 296,560 L 296,608" fill="none" stroke="black"/>
                <path d="M 336,344 L 336,552" fill="none" stroke="black"/>
                <path d="M 392,288 L 392,336" fill="none" stroke="black"/>
                <path d="M 400,176 L 400,224" fill="none" stroke="black"/>
                <path d="M 416,232 L 416,552" fill="none" stroke="black"/>
                <path d="M 488,608 L 488,640" fill="none" stroke="black"/>
                <path d="M 536,176 L 536,224" fill="none" stroke="black"/>
                <path d="M 536,560 L 536,608" fill="none" stroke="black"/>
                <path d="M 568,128 L 568,384" fill="none" stroke="black"/>
                <path d="M 568,512 L 568,832" fill="none" stroke="black"/>
                <path d="M 8,128 L 48,128" fill="none" stroke="black"/>
                <path d="M 64,128 L 568,128" fill="none" stroke="black"/>
                <path d="M 24,176 L 120,176" fill="none" stroke="black"/>
                <path d="M 160,176 L 296,176" fill="none" stroke="black"/>
                <path d="M 400,176 L 536,176" fill="none" stroke="black"/>
                <path d="M 128,192 L 152,192" fill="none" stroke="black"/>
                <path d="M 24,224 L 120,224" fill="none" stroke="black"/>
                <path d="M 160,224 L 296,224" fill="none" stroke="black"/>
                <path d="M 400,224 L 536,224" fill="none" stroke="black"/>
                <path d="M 72,288 L 192,288" fill="none" stroke="black"/>
                <path d="M 224,288 L 392,288" fill="none" stroke="black"/>
                <path d="M 72,336 L 192,336" fill="none" stroke="black"/>
                <path d="M 224,336 L 392,336" fill="none" stroke="black"/>
                <path d="M 8,384 L 136,384" fill="none" stroke="black"/>
                <path d="M 152,384 L 232,384" fill="none" stroke="black"/>
                <path d="M 248,384 L 328,384" fill="none" stroke="black"/>
                <path d="M 344,384 L 408,384" fill="none" stroke="black"/>
                <path d="M 424,384 L 568,384" fill="none" stroke="black"/>
                <path d="M 8,512 L 136,512" fill="none" stroke="black"/>
                <path d="M 152,512 L 232,512" fill="none" stroke="black"/>
                <path d="M 248,512 L 328,512" fill="none" stroke="black"/>
                <path d="M 344,512 L 408,512" fill="none" stroke="black"/>
                <path d="M 424,512 L 568,512" fill="none" stroke="black"/>
                <path d="M 24,560 L 248,560" fill="none" stroke="black"/>
                <path d="M 296,560 L 536,560" fill="none" stroke="black"/>
                <path d="M 296,608 L 480,608" fill="none" stroke="black"/>
                <path d="M 496,608 L 536,608" fill="none" stroke="black"/>
                <path d="M 256,640 L 312,640" fill="none" stroke="black"/>
                <path d="M 432,640 L 480,640" fill="none" stroke="black"/>
                <path d="M 24,800 L 248,800" fill="none" stroke="black"/>
                <path d="M 8,832 L 568,832" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="424,232 412,226.4 412,237.6" fill="black" transform="rotate(270,416,232)"/>
                <polygon class="arrowhead" points="344,552 332,546.4 332,557.6" fill="black" transform="rotate(90,336,552)"/>
                <polygon class="arrowhead" points="248,344 236,338.4 236,349.6" fill="black" transform="rotate(270,240,344)"/>
                <polygon class="arrowhead" points="184,280 172,274.4 172,285.6" fill="black" transform="rotate(90,176,280)"/>
                <polygon class="arrowhead" points="160,192 148,186.4 148,197.6" fill="black" transform="rotate(0,152,192)"/>
                <polygon class="arrowhead" points="152,552 140,546.4 140,557.6" fill="black" transform="rotate(90,144,552)"/>
                <polygon class="arrowhead" points="64,168 52,162.4 52,173.6" fill="black" transform="rotate(90,56,168)"/>
                <circle cx="248" cy="640" r="6" class="opendot" fill="white" stroke="black"/>
                <circle cx="488" cy="608" r="6" class="opendot" fill="white" stroke="black"/>
                <circle cx="488" cy="640" r="6" class="opendot" fill="white" stroke="black"/>
                <g class="text">
                  <text x="36" y="36">Incoming</text>
                  <text x="20" y="52">LAKE</text>
                  <text x="80" y="52">message_X</text>
                  <text x="12" y="68">(X</text>
                  <text x="32" y="68">=</text>
                  <text x="48" y="68">2</text>
                  <text x="68" y="68">or</text>
                  <text x="92" y="68">3)</text>
                  <text x="412" y="148">Core</text>
                  <text x="452" y="148">LAKE</text>
                  <text x="516" y="148">processing</text>
                  <text x="60" y="196">Decode</text>
                  <text x="204" y="196">Retrieve</text>
                  <text x="256" y="196">the</text>
                  <text x="440" y="196">Advance</text>
                  <text x="488" y="196">the</text>
                  <text x="72" y="212">message_X</text>
                  <text x="204" y="212">protocol</text>
                  <text x="264" y="212">state</text>
                  <text x="444" y="212">protocol</text>
                  <text x="504" y="212">state</text>
                  <text x="112" y="308">Decrypt</text>
                  <text x="260" y="308">Verify</text>
                  <text x="132" y="324">CIPHERTEXT_X</text>
                  <text x="308" y="324">Signature_or_MAC_X</text>
                  <text x="492" y="420">................</text>
                  <text x="108" y="436">Divert</text>
                  <text x="208" y="436">Get</text>
                  <text x="300" y="436">Divert</text>
                  <text x="384" y="436">Get</text>
                  <text x="432" y="436">:</text>
                  <text x="456" y="436">EAD</text>
                  <text x="496" y="436">items</text>
                  <text x="552" y="436">:</text>
                  <text x="212" y="452">back</text>
                  <text x="388" y="452">back</text>
                  <text x="432" y="452">:</text>
                  <text x="456" y="452">for</text>
                  <text x="488" y="452">the</text>
                  <text x="524" y="452">next</text>
                  <text x="552" y="452">:</text>
                  <text x="432" y="468">:</text>
                  <text x="460" y="468">LAKE</text>
                  <text x="512" y="468">message</text>
                  <text x="552" y="468">:</text>
                  <text x="492" y="484">:..............:</text>
                  <text x="44" y="580">a)</text>
                  <text x="80" y="580">Check</text>
                  <text x="136" y="580">whether</text>
                  <text x="204" y="580">expected</text>
                  <text x="348" y="580">Processing</text>
                  <text x="404" y="580">of</text>
                  <text x="72" y="596">EAD</text>
                  <text x="112" y="596">items</text>
                  <text x="152" y="596">are</text>
                  <text x="196" y="596">absent</text>
                  <text x="376" y="596">post-verification</text>
                  <text x="464" y="596">EAD</text>
                  <text x="504" y="596">items</text>
                  <text x="44" y="612">b)</text>
                  <text x="96" y="612">Retrieval</text>
                  <text x="152" y="612">and</text>
                  <text x="100" y="628">validation</text>
                  <text x="156" y="628">of</text>
                  <text x="200" y="628">CRED_X;</text>
                  <text x="44" y="644">c)</text>
                  <text x="80" y="644">Trust</text>
                  <text x="148" y="644">assessment</text>
                  <text x="348" y="644">Shared</text>
                  <text x="400" y="644">state</text>
                  <text x="68" y="660">of</text>
                  <text x="112" y="660">CRED_X;</text>
                  <text x="44" y="676">d)</text>
                  <text x="100" y="676">Processing</text>
                  <text x="156" y="676">of</text>
                  <text x="404" y="676">......................</text>
                  <text x="124" y="692">pre-verification</text>
                  <text x="320" y="692">:</text>
                  <text x="380" y="692">Instructions</text>
                  <text x="456" y="692">about</text>
                  <text x="488" y="692">:</text>
                  <text x="72" y="708">EAD</text>
                  <text x="112" y="708">items</text>
                  <text x="320" y="708">:</text>
                  <text x="344" y="708">EAD</text>
                  <text x="384" y="708">items</text>
                  <text x="420" y="708">to</text>
                  <text x="488" y="708">:</text>
                  <text x="320" y="724">:</text>
                  <text x="392" y="724">unconditionally</text>
                  <text x="488" y="724">:</text>
                  <text x="40" y="740">-</text>
                  <text x="64" y="740">(b)</text>
                  <text x="96" y="740">and</text>
                  <text x="128" y="740">(d)</text>
                  <text x="168" y="740">might</text>
                  <text x="212" y="740">have</text>
                  <text x="320" y="740">:</text>
                  <text x="360" y="740">produce</text>
                  <text x="408" y="740">for</text>
                  <text x="440" y="740">the</text>
                  <text x="488" y="740">:</text>
                  <text x="60" y="756">to</text>
                  <text x="96" y="756">occur</text>
                  <text x="132" y="756">in</text>
                  <text x="180" y="756">parallel</text>
                  <text x="320" y="756">:</text>
                  <text x="348" y="756">next</text>
                  <text x="388" y="756">LAKE</text>
                  <text x="440" y="756">message</text>
                  <text x="488" y="756">:</text>
                  <text x="40" y="772">-</text>
                  <text x="64" y="772">(c)</text>
                  <text x="112" y="772">depends</text>
                  <text x="156" y="772">on</text>
                  <text x="184" y="772">the</text>
                  <text x="404" y="772">:....................:</text>
                  <text x="72" y="788">trust</text>
                  <text x="124" y="788">policy</text>
                  <text x="172" y="788">used</text>
                  <text x="396" y="820">Side-Processor</text>
                  <text x="484" y="820">Object</text>
                  <text x="536" y="820">(SPO)</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Incoming
LAKE message_X
(X = 2 or 3)

      |
      |
+-----|---------------------------------------------------------------+
|     |                                          Core LAKE processing |
|     v                                                               |
| +-----------+    +----------------+            +----------------+   |
| | Decode    |--->| Retrieve the   |            | Advance the    |   |
| | message_X |    | protocol state |            | protocol state |   |
| +-----------+    +----------------+            +----------------+   |
|                    |                             ^                  |
|                    |                             |                  |
|                    v                             |                  |
|       +--------------+   +--------------------+  |                  |
|       | Decrypt      |   | Verify             |  |                  |
|       | CIPHERTEXT_X |   | Signature_or_MAC_X |  |                  |
|       +--------------+   +--------------------+  |                  |
|                |           ^           |         |                  |
|                |           |           |         |                  |
+----------------|-----------|-----------|---------|------------------+
                 |           |           |         |
                 |           |           |         | ................
          Divert |      Get  |    Divert |    Get  | : EAD items    :
                 |      back |           |    back | : for the next :
                 |           |           |         | : LAKE message :
                 |           |           |         | :..............:
                 |           |           |         |
+----------------|-----------|-----------|---------|------------------+
|                |           |           |         |                  |
|                v           |           v         |                  |
| +---------------------------+     +-----------------------------+   |
| | a) Check whether expected |     | Processing of               |   |
| |    EAD items are absent   |     | post-verification EAD items |   |
| | b) Retrieval and          |     +-----------------------o-----+   |
| |    validation of CRED_X;  |                             |         |
| | c) Trust assessment       o-------- Shared state -------o         |
| |    of CRED_X;             |                                       |
| | d) Processing of          |        ......................         |
| |    pre-verification       |        : Instructions about :         |
| |    EAD items              |        : EAD items to       :         |
| |                           |        : unconditionally    :         |
| | - (b) and (d) might have  |        : produce for the    :         |
| |   to occur in parallel    |        : next LAKE message  :         |
| | - (c) depends on the      |        :....................:         |
| |   trust policy used       |                                       |
| +---------------------------+                                       |
|                                         Side-Processor Object (SPO) |
+---------------------------------------------------------------------+
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="sec-after-lake-spo">
        <name>After a LAKE Session</name>
        <t>After completing the LAKE execution, control is transferred back to the application. In particular, the application is provided with the overall outcome of the LAKE execution (i.e., successful completion or failure), together with possible specific results produced by the SPO throughout the LAKE execution (e.g., due to the processing of EAD items).</t>
        <t>After that, the application might need to perform follow-up actions, depending on the outcome of the LAKE execution. For example, the SPO might have preliminarily filled application-level data structures, as a result of processing EAD items. In the case of a successful LAKE execution, the application might need to finalize such data structures. Instead, in the case of an unsuccessful LAKE execution, the application might need to clean-up or amend such data structures, or even roll back what the SPO did, unless the SPO already performed such actions before control was transferred back to the application.</t>
      </section>
      <section anchor="sec-consistency-checks-auth-creds">
        <name>Consistency Checks of Authentication Credentials from ID_CRED and EAD Items</name>
        <t>Typically, a LAKE peer specifies its associated authentication credential (by value or by reference) only in the ID_CRED field of LAKE message_2 (if acting as Responder) or LAKE message_3 (if acting as Initiator).</t>
        <t>In addition to that, there may be cases where a LAKE peer provides the authentication credential also in an EAD item. In particular, such an EAD item can specify a cryptographically protected "envelope" (by value or by reference), which in turn specifies the authentication credential (by value or by reference).</t>
        <t>A case in point is the profile of the ACE framework defined in <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>, where the envelope in question is an access token issued to the ACE client. In such a case, the ACE client can rely on an EAD item specifying the access token, which in turn specifies the authentication credential (by value or by reference) associated with the client.</t>
        <t>During a LAKE session, a LAKE peer P1 might therefore receive the authentication credential CRED associated with the other LAKE peer P2 as specified by two items:</t>
        <ul spacing="normal">
          <li>
            <t>ITEM_A: the ID_CRED field specifying CRED. If P2 acts as the Initiator (Responder), then ITEM_A is the ID_CRED_I (ID_CRED_R) field.</t>
          </li>
          <li>
            <t>ITEM_B: the envelope specified in an EAD item within a LAKE message sent by P2.</t>
          </li>
        </ul>
        <t>As part of the process where P1 validates CRED during the LAKE session, P1 must check that both ITEM_A and ITEM_B specify the same authentication credential, and it must abort the LAKE session if such a consistency check fails.</t>
        <t>The consistency check is successful only if one of the following conditions holds, and it fails otherwise:</t>
        <ul spacing="normal">
          <li>
            <t>If both ITEM_A and ITEM_B specify an authentication credential by value, then both ITEM_A and ITEM_B specify the same value.</t>
          </li>
          <li>
            <t>If one among ITEM_A and ITEM_B specifies an authentication credential by value VALUE while the other one specifies an authentication credential by reference REF, then REF is a valid reference for VALUE.</t>
          </li>
          <li>
            <t>If ITEM_A specifies an authentication credential by reference REF_A and ITEM_B specifies an authentication credential by reference REF_B, then REF_A or REF_B allows to retrieving the value VALUE of an authentication credential from a local or remote storage, such that both REF_A and REF_B are a valid reference for VALUE.</t>
          </li>
        </ul>
        <t>The peer P1 performs the consistency check above as soon as it has both ITEM_A and ITEM_B available. If P1 acts as the Responder, that is the case when processing the incoming LAKE message_3. If P1 acts as the Initiator, that is the case when processing the incoming LAKE message_2 or message_4, i.e., whichever of the two messages includes ITEM_B in an EAD item of its EAD field.</t>
      </section>
    </section>
    <section anchor="sec-block-wise">
      <name>Using LAKE over CoAP with Block-Wise</name>
      <t><xref section="A.2" sectionFormat="of" target="RFC9528"/> specifies how to transfer LAKE over CoAP <xref target="RFC7252"/>. In such a case, LAKE messages (potentially prepended by a LAKE connection identifier) are transported in the payload of CoAP requests and responses, according to the LAKE forward message flow or the LAKE reverse message flow. Furthermore, <xref section="A.1" sectionFormat="of" target="RFC9528"/> specifies how to derive an OSCORE Security Context <xref target="RFC8613"/> from a LAKE session.</t>
      <t>Building on that, <xref target="RFC9668"/> further details the use of LAKE with CoAP and OSCORE. In particular, it specifies an optimization approach for the LAKE forward message flow that combines the LAKE execution with the first subsequent OSCORE transaction. This is achieved by means of a "LAKE + OSCORE request" (denoted as "EDHOC + OSCORE request" in <xref target="RFC9668"/>), i.e., a single CoAP request message that conveys both LAKE message_3 of the ongoing LAKE session and the OSCORE-protected application data, where the latter is protected with the OSCORE Security Context derived from that LAKE session.</t>
      <t>This section provides guidelines and recommendations for CoAP endpoints supporting Block-wise transfers for CoAP <xref target="RFC7959"/> and specifically for CoAP clients supporting the LAKE + OSCORE request defined in <xref target="RFC9668"/>. The use of Block-wise transfers can be desirable, e.g., for LAKE messages that include a large ID_CRED_I or ID_CRED_R, or that include a large EAD field.</t>
      <t>The following especially considers a CoAP endpoint that may perform only "inner" Block-wise, but not "outer" Block-wise operations (see <xref section="4.1.3.4" sectionFormat="of" target="RFC8613"/>). That is, the considered CoAP endpoint does not (further) split an OSCORE-protected message like an intermediary (e.g., a proxy) might do. This is the typical case for CoAP endpoints using OSCORE (see <xref section="4.1.3.4" sectionFormat="of" target="RFC8613"/>).</t>
      <section anchor="notation">
        <name>Notation</name>
        <t>The rest of this section refers to the following notation:</t>
        <ul spacing="normal">
          <li>
            <t>SIZE_BODY: the size in bytes of the data to be transmitted with CoAP. When Block-wise is used, such data is referred to as the "body" to be fragmented into blocks, each of which to be transmitted in one CoAP message.  </t>
            <t>
With the exception pertaining to LAKE message_3 described in the following paragraph, the considered body can in general be a LAKE message, potentially prepended by a LAKE connection identifier encoded as per <xref section="3.3" sectionFormat="of" target="RFC9528"/>.  </t>
            <t>
When specifically using the LAKE + OSCORE request, the considered body is the application data to be protected with OSCORE, (whose first block is) to be sent together with LAKE message_3 as part of the LAKE + OSCORE request.</t>
          </li>
          <li>
            <t>SIZE_LAKE_M3: the size in bytes of LAKE message_3, if this is sent as part of the LAKE + OSCORE request. Otherwise, the size in bytes of LAKE message_3, plus, if included, the size in bytes of a prepended LAKE connection identifier encoded as per <xref section="3.3" sectionFormat="of" target="RFC9528"/>.</t>
          </li>
          <li>
            <t>SIZE_MTU: the maximum amount of transmittable bytes before having to use Block-wise. This is, for example, 64 KiB as maximum datagram size when using UDP, or 1280 bytes as the maximum size for an IPv6 MTU.</t>
          </li>
          <li>
            <t>SIZE_OH: the size in bytes of the overall overhead due to all the communication layers underlying the application. This takes into account also the overhead introduced by the OSCORE processing.</t>
          </li>
          <li>
            <t>LIMIT = (SIZE_MTU - SIZE_OH): the practical maximum size in bytes to be considered by the application before using Block-wise.</t>
          </li>
          <li>
            <t>SIZE_BLOCK: the size in bytes of inner blocks.</t>
          </li>
          <li>
            <t>ceil(): the ceiling function.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-block-wise-pre-req">
        <name>Pre-requirements for the LAKE + OSCORE Request</name>
        <t>Before sending a LAKE + OSCORE request, a CoAP client has to perform the following checks. Note that, while the CoAP client is able to fragment the plain application data before any OSCORE processing, it cannot fragment the LAKE + OSCORE request or the LAKE message_3 added therein.</t>
        <ul spacing="normal">
          <li>
            <t>If inner Block-wise is not used, hence SIZE_BODY &lt;= LIMIT, the CoAP client must verify whether all the following conditions hold:  </t>
            <ul spacing="normal">
              <li>
                <t>COND1: SIZE_LAKE_M3 &lt;= LIMIT</t>
              </li>
              <li>
                <t>COND2: (SIZE_BODY + SIZE_LAKE_M3) &lt;= LIMIT</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If inner Block-wise is used, the CoAP client must verify whether all the following conditions hold:  </t>
            <ul spacing="normal">
              <li>
                <t>COND3: SIZE_LAKE_M3 &lt;= LIMIT</t>
              </li>
              <li>
                <t>COND4: (SIZE_BLOCK + SIZE_LAKE_M3) &lt;= LIMIT</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>In either case, if not all the corresponding conditions hold, the CoAP client should not send the LAKE + OSCORE request. Instead, the CoAP client can continue by switching to the purely sequential, original LAKE workflow (see <xref section="A.2.1" sectionFormat="of" target="RFC9528"/>). That is, the CoAP client first sends LAKE message_3 prepended by the LAKE Connection Identifier C_R encoded as per <xref section="3.3" sectionFormat="of" target="RFC9528"/> and then sends the OSCORE-protected CoAP request once the LAKE execution is completed.</t>
      </section>
      <section anchor="effectively-using-block-wise">
        <name>Effectively Using Block-Wise</name>
        <t>In order to avoid further fragmentation at lower layers when sending a LAKE + OSCORE request, the CoAP client has to use inner Block-wise if <em>any</em> of the following conditions holds:</t>
        <ul spacing="normal">
          <li>
            <t>COND5: SIZE_BODY &gt; LIMIT</t>
          </li>
          <li>
            <t>COND6: (SIZE_BODY + SIZE_LAKE_M3) &gt; LIMIT</t>
          </li>
        </ul>
        <t>In particular, consistent with <xref target="sec-block-wise-pre-req"/>, the SIZE_BLOCK used has to be such that the following condition also holds:</t>
        <ul spacing="normal">
          <li>
            <t>COND7: (SIZE_BLOCK + SIZE_LAKE_M3) &lt;= LIMIT</t>
          </li>
        </ul>
        <t>Note that the CoAP client might still use Block-wise due to reasons different from exceeding the size indicated by LIMIT.</t>
        <t>The following shows the number of round trips for completing both the LAKE execution and the first OSCORE-protected exchange, under the assumption that the exchange of LAKE message_1 and LAKE message_2 does not result in using Block-wise.</t>
        <t>If <em>both</em> the conditions COND5 and COND6 hold, the use of Block-wise results in the following number of round trips experienced by the CoAP client.</t>
        <ul spacing="normal">
          <li>
            <t>If the original LAKE execution workflow is used (see <xref section="A.2.1" sectionFormat="of" target="RFC9528"/>), the number of round trips RT_ORIG is equal to 1 + ceil(SIZE_LAKE_M3 / SIZE_BLOCK) + ceil(SIZE_BODY / SIZE_BLOCK).</t>
          </li>
          <li>
            <t>If the optimized LAKE execution workflow is used (see <xref section="3" sectionFormat="of" target="RFC9668"/>), the number of round trips RT_COMB is equal to 1 + ceil(SIZE_BODY / SIZE_BLOCK).</t>
          </li>
        </ul>
        <t>It follows that RT_COMB &lt; RT_ORIG, i.e., the optimized LAKE execution workflow always yields a lower number of round trips.</t>
        <t>Instead, the convenience of using the optimized LAKE execution workflow becomes questionable if <em>both</em> the following conditions hold:</t>
        <ul spacing="normal">
          <li>
            <t>COND8: SIZE_BODY &lt;= LIMIT</t>
          </li>
          <li>
            <t>COND9: (SIZE_BODY + SIZE_LAKE_M3) &gt; LIMIT</t>
          </li>
        </ul>
        <t>That is, since SIZE_BODY &lt;= LIMIT, using Block-wise would not be required when using the original LAKE execution workflow, provided that SIZE_LAKE_M3 &lt;= LIMIT still holds.</t>
        <t>At the same time, using the combined workflow is in itself what actually triggers the use of Block-wise, since (SIZE_BODY + SIZE_LAKE_M3) &gt; LIMIT.</t>
        <t>Therefore, the following round trips are experienced by the CoAP client.</t>
        <ul spacing="normal">
          <li>
            <t>The original LAKE execution workflow run without using Block-wise results in a number of round trips RT_ORIG equal to 3.</t>
          </li>
          <li>
            <t>The optimized LAKE execution workflow run using Block-wise results in a number of round trips RT_COMB equal to 1 + ceil(SIZE_BODY / SIZE_BLOCK).</t>
          </li>
        </ul>
        <t>It follows that RT_COMB &gt;= RT_ORIG, i.e., the optimized LAKE execution workflow might still be not worse than the original LAKE execution workflow in terms of round trips. This is the case only if the SIZE_BLOCK used is such that ceil(SIZE_BODY / SIZE_BLOCK) is equal to 2, i.e., the plain application data is fragmented into only 2 inner blocks, and thus the LAKE + OSCORE request is followed by only one more request message transporting the last block of the body.</t>
        <t>However, even in such a case, there would be no advantage in terms of round trips compared to the original workflow, while still requiring the CoAP client and the CoAP server to perform the processing due to using the LAKE + OSCORE request and Block-wise transferring.</t>
        <t>Therefore, if both the conditions COND8 and COND9 hold, the CoAP client should not send the LAKE + OSCORE request. Instead, the CoAP client should continue by switching to the original LAKE execution workflow. That is, the CoAP client first sends LAKE message_3 prepended by the LAKE Connection Identifier C_R encoded as per <xref section="3.3" sectionFormat="of" target="RFC9528"/> and then sends the OSCORE-protected CoAP request once the LAKE execution is completed.</t>
      </section>
    </section>
    <section anchor="operational-considerations">
      <name>Operational Considerations</name>
      <t>There are no new operations or manageability requirements introduced by this document, which provides considerations for implementers of the LAKE protocol and does not update the protocol or introduce extensions thereof.</t>
    </section>
    <section anchor="sec-security-considerations">
      <name>Security Considerations</name>
      <t>This document provides considerations for implementations of the LAKE protocol. The security considerations compiled in <xref section="9" sectionFormat="of" target="RFC9528"/> and in <xref section="7" sectionFormat="of" target="RFC9668"/> apply. The compliance requirements for implementations that are listed in <xref section="8" sectionFormat="of" target="RFC9528"/> also apply.</t>
      <t>It is foreseeable that the LAKE protocol will be extended (e.g., in terms of new cipher suites, new methods, and new types of authentication credentials) and that external security applications will be integrated into LAKE by embedding the transport of their data in LAKE EAD items. For implementations that support such extensions and external applications, the related security considerations and compliance requirements also apply.</t>
      <section anchor="assessing-the-correctness-of-implementations">
        <name>Assessing the Correctness of Implementations</name>
        <t>Tools relying on fuzz testing such as EDHOC-Fuzzer <xref target="EDHOC-Fuzzer"/> can help assess the correctness of implementations of the LAKE protocol and of external security applications integrated into LAKE.</t>
        <t>Such tools help finding and amending implementation errors especially related to the following points:</t>
        <ul spacing="normal">
          <li>
            <t>Non-conformance with the protocol specification (e.g., unintended deviations in performing the protocol steps), which can be a potential source of security vulnerabilities in addition to performance deficiencies.</t>
          </li>
          <li>
            <t>Presence of inappropriate states and state transitions in the modeling of the LAKE execution, e.g., states that are impossible to reach and traverse or that are not part of the protocol specification (which is a particular case of non-conformance).  </t>
            <t>
These states and transitions should be amended or removed, in order to reduce the memory footprint and code complexity and to simplify the implementation, thus reducing the risks of bugs and related security vulnerabilities.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no actions for IANA.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC7959">
          <front>
            <title>Block-Wise Transfers in the Constrained Application Protocol (CoAP)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="Z. Shelby" initials="Z." role="editor" surname="Shelby"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful transfer protocol for constrained nodes and networks. Basic CoAP messages work well for small payloads from sensors and actuators; however, applications will need to transfer larger payloads occasionally -- for instance, for firmware updates. In contrast to HTTP, where TCP does the grunt work of segmenting and resequencing, CoAP is based on datagram transports such as UDP or Datagram Transport Layer Security (DTLS). These transports only offer fragmentation, which is even more problematic in constrained nodes and networks, limiting the maximum size of resource representations that can practically be transferred.</t>
              <t>Instead of relying on IP fragmentation, this specification extends basic CoAP with a pair of "Block" options for transferring multiple blocks of information from a resource representation in multiple request-response pairs. In many important cases, the Block options enable a server to be truly stateless: the server can handle each block transfer separately, with no need for a connection setup or other server-side memory of previous block transfers. Essentially, the Block options provide a minimal way to transfer larger representations in a block-wise fashion.</t>
              <t>A CoAP implementation that does not support these options generally is limited in the size of the representations that can be exchanged, so there is an expectation that the Block options will be widely used in CoAP implementations. Therefore, this specification updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7959"/>
          <seriesInfo name="DOI" value="10.17487/RFC7959"/>
        </reference>
        <reference anchor="RFC8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration. Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <reference anchor="RFC9528">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Preuß Mattsson" initials="J." surname="Preuß Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <date month="March" year="2024"/>
            <abstract>
              <t>This document specifies Ephemeral Diffie-Hellman Over COSE (EDHOC), a very compact and lightweight authenticated Diffie-Hellman key exchange with ephemeral keys. EDHOC provides mutual authentication, forward secrecy, and identity protection. EDHOC is intended for usage in constrained scenarios, and a main use case is to establish an Object Security for Constrained RESTful Environments (OSCORE) security context. By reusing CBOR Object Signing and Encryption (COSE) for cryptography, Concise Binary Object Representation (CBOR) for encoding, and Constrained Application Protocol (CoAP) for transport, the additional code size can be kept very low.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9528"/>
          <seriesInfo name="DOI" value="10.17487/RFC9528"/>
        </reference>
        <reference anchor="RFC9668">
          <front>
            <title>Using Ephemeral Diffie-Hellman Over COSE (EDHOC) with the Constrained Application Protocol (CoAP) and Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="M. Tiloca" initials="M." surname="Tiloca"/>
            <author fullname="R. Höglund" initials="R." surname="Höglund"/>
            <author fullname="S. Hristozov" initials="S." surname="Hristozov"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <date month="November" year="2024"/>
            <abstract>
              <t>The lightweight authenticated key exchange protocol Ephemeral Diffie-Hellman Over COSE (EDHOC) can be run over the Constrained Application Protocol (CoAP) and used by two peers to establish a Security Context for the security protocol Object Security for Constrained RESTful Environments (OSCORE). This document details this use of the EDHOC protocol by specifying a number of additional and optional mechanisms, including an optimization approach for combining the execution of EDHOC with the first OSCORE transaction. This combination reduces the number of round trips required to set up an OSCORE Security Context and to complete an OSCORE transaction using that Security Context.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9668"/>
          <seriesInfo name="DOI" value="10.17487/RFC9668"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC2986">
          <front>
            <title>PKCS #10: Certification Request Syntax Specification Version 1.7</title>
            <author fullname="M. Nystrom" initials="M." surname="Nystrom"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <date month="November" year="2000"/>
            <abstract>
              <t>This memo represents a republication of PKCS #10 v1.7 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series, and change control is retained within the PKCS process. The body of this document, except for the security considerations section, is taken directly from the PKCS #9 v2.0 or the PKCS #10 v1.7 document. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2986"/>
          <seriesInfo name="DOI" value="10.17487/RFC2986"/>
        </reference>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="RFC6960">
          <front>
            <title>X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP</title>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="M. Myers" initials="M." surname="Myers"/>
            <author fullname="R. Ankney" initials="R." surname="Ankney"/>
            <author fullname="A. Malpani" initials="A." surname="Malpani"/>
            <author fullname="S. Galperin" initials="S." surname="Galperin"/>
            <author fullname="C. Adams" initials="C." surname="Adams"/>
            <date month="June" year="2013"/>
            <abstract>
              <t>This document specifies a protocol useful in determining the current status of a digital certificate without requiring Certificate Revocation Lists (CRLs). Additional mechanisms addressing PKIX operational requirements are specified in separate documents. This document obsoletes RFCs 2560 and 6277. It also updates RFC 5912.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6960"/>
          <seriesInfo name="DOI" value="10.17487/RFC6960"/>
        </reference>
        <reference anchor="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="6" month="July" year="2026"/>
            <abstract>
              <t>   This document specifies a profile for the Authentication and
   Authorization for Constrained Environments (ACE) framework.  It
   utilizes Ephemeral Diffie-Hellman Over COSE (EDHOC) for achieving
   mutual authentication between an ACE-OAuth client and resource
   server, and it binds an authentication credential of the client to an
   ACE-OAuth access token.  EDHOC also establishes an Object Security
   for Constrained RESTful Environments (OSCORE) Security Context, which
   is used to secure communications between the client and resource
   server when accessing protected resources according to the
   authorization information indicated in the access token.  This
   profile can be used to delegate management of authorization
   information from a resource-constrained server to a trusted host with
   less severe limitations regarding processing power and memory.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-edhoc-oscore-profile-11"/>
        </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="6" month="July" year="2026"/>
            <abstract>
              <t>   Communications with the Constrained Application Protocol (CoAP) can
   be protected end-to-end at the application-layer by using the
   security protocol Object Security for Constrained RESTful
   Environments (OSCORE).  Under some circumstances, two CoAP endpoints
   need to update their OSCORE keying material before communications can
   securely continue, e.g., due to approaching key usage limits.  This
   document defines Key Update for OSCORE (KUDOS), a lightweight key
   update procedure that two CoAP endpoints can use to update their
   OSCORE keying material by establishing a new OSCORE Security Context.
   Accordingly, this document updates the use of the OSCORE flag bits in
   the CoAP OSCORE Option as well as the protection of CoAP response
   messages with OSCORE.  Also, it deprecates the key update procedure
   specified in Appendix B.2 of RFC 8613.  Therefore, this document
   updates RFC 8613.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-key-update-14"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-key-limits">
          <front>
            <title>Key Usage Limits for OSCORE</title>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="7" month="September" year="2026"/>
            <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-08"/>
        </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>University of Glasgow</organization>
            </author>
            <author fullname="Joel Höglund" initials="J." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Martin Furuhed" initials="M." surname="Furuhed">
              <organization>IN Groupe</organization>
            </author>
            <author fullname="Lijun Liao" initials="L." surname="Liao">
              <organization>NIO Inc.</organization>
            </author>
            <date day="24" month="September" year="2026"/>
            <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 common certificate
   profiles, and it is extensible.

   Two types of C509 certificates are defined.  One type is an
   invertible CBOR re-encoding of DER-encoded X.509 certificates with
   the signature field copied from the DER encoding.  The other type is
   identical except that the signature is computed over the CBOR
   encoding instead of the DER encoding, thereby avoiding the use of
   ASN.1.  Both types of certificates have the same semantics as X.509
   while providing comparable size reduction.

   This document also specifies CBOR-encoded data structures for
   certification requests and certification request templates, new COSE
   headers, as well as a TLS certificate type and a file format for
   C509.  This document updates RFC 6698 by extending the TLSA selectors
   registry to include C509 certificates.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lake-authz-08"/>
        </reference>
        <reference anchor="I-D.ietf-ace-workflow-and-params">
          <front>
            <title>Short Distribution Chain (SDC) Workflow and New OAuth Parameters for the Authentication and Authorization for Constrained Environments (ACE) Framework</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   This document updates the Authentication and Authorization for
   Constrained Environments framework (ACE, RFC 9200) as follows. (1) It
   defines the Short Distribution Chain (SDC) workflow that the
   authorization server (AS) can use for uploading an access token to a
   resource server on behalf of the client. (2) For the OAuth 2.0 token
   endpoint, it defines new parameters and encodings and it extends the
   semantics of the "ace_profile" parameter. (3) For the OAuth 2.0
   authz-info endpoint, it defines a new parameter and its encoding. (4)
   It defines how the client and the AS can coordinate on the exchange
   of the client's and resource server's public authentication
   credentials, when those can be transported by value or identified by
   reference; this extends the semantics of the "rs_cnf" parameter for
   the OAuth 2.0 token endpoint, thus updating RFC 9201. (5) It extends
   the error handling at the AS, for which it defines a new error code.
   (6) It deprecates the original payload format of error responses
   conveying an error code, when Concise Binary Object Representation
   (CBOR) is used to encode message payloads.  For those responses, it
   defines a new payload format aligned with RFC 9290, thus updating in
   this respect also the profiles defined in RFC 9202, RFC 9203, and RFC
   9431. (7) It amends two of the requirements on profiles of the
   framework.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-workflow-and-params-08"/>
        </reference>
        <reference anchor="I-D.ietf-lake-edhoc-psk">
          <front>
            <title>EDHOC Authenticated with Pre-Shared Keys (PSK)</title>
            <author fullname="Elsa Lopez-Perez" initials="" surname="Lopez-Perez">
              <organization>Inria</organization>
            </author>
            <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="Rafael Marin-Lopez" initials="R." surname="Marin-Lopez">
              <organization>University of Murcia</organization>
            </author>
            <author fullname="Francisco Lopez-Gomez" initials="F." surname="Lopez-Gomez">
              <organization>University of Murcia</organization>
            </author>
            <date day="8" month="September" year="2026"/>
            <abstract>
              <t>   This document specifies a Pre-Shared Key (PSK) authentication method
   for the Ephemeral Diffie-Hellman Over COSE (EDHOC) Lightweight
   Authenticated Key Exchange (LAKE) protocol.  The PSK method provides
   mutual authentication, ephemeral key exchange, identity protection,
   and quantum resistance while incurring lower computational costs than
   the public-key authentication methods specified for EDHOC.  It is
   suited for systems where nodes share a PSK provided out-of-band
   (external PSK) and enables efficient session resumption with less
   computational overhead when the PSK is provided from a previous EDHOC
   session (resumption PSK).  This document details the PSK message
   flow, key derivation changes, message formatting, processing, and
   security considerations.

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

<section anchor="sec-example-spo">
      <name>Example of Side-Processor Object</name>
      <t>This appendix builds on <xref target="sec-message-side-processing"/> and provides a detailed example of how the SPO can be implemented to perform the side processing of incoming LAKE messages.</t>
      <section anchor="sec-message-side-processing-m1">
        <name>LAKE message_1</name>
        <t>During the processing of an incoming LAKE message_1, LAKE 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 LAKE. When doing so, the SPO also provides LAKE with any produced EAD items to include in the EAD field of the next outgoing LAKE message.</t>
        <t>Then, LAKE resumes its execution and advances its protocol state.</t>
        <t>Future extensions of LAKE or external security applications integrated into LAKE might require a processing of LAKE message_1 that is more advanced than the currently expected one. In particular, an EAD item conveyed in LAKE message_1 might specify the authentication credential CRED associated with the Initiator (by value or by reference), as wrapped in a cryptographically protected "envelope". In such a case, the processing of an incoming LAKE message_1 shares similarities with that of an incoming LAKE message_2 or message_3 (see <xref target="sec-message-side-processing-m2-m3"/>), as it is further elaborated in <xref target="sec-message-side-processing-m1-advanced"/>.</t>
      </section>
      <section anchor="sec-message-side-processing-m4">
        <name>LAKE message_4</name>
        <t>During the processing of an incoming LAKE message_4, LAKE 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 LAKE, which resumes its execution and advances its protocol state.</t>
      </section>
      <section anchor="sec-message-side-processing-m2-m3">
        <name>LAKE message_2 and message_3</name>
        <t>The following refers to "message_X" as an incoming LAKE 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, LAKE 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 flowchart in <xref target="sec-m2-m3-flowchart"/> shows the different steps taken for processing an incoming message_X.</t>
        <section anchor="sec-pre-verif">
          <name>Pre-Verification Side Processing</name>
          <t>The pre-verification side processing occurs in two sequential phases, namely PHASE_1 (see <xref target="sec-pre-verif-phase-1"/>) and PHASE_2 (see <xref target="sec-pre-verif-phase-2"/>).</t>
          <section anchor="sec-pre-verif-phase-1">
            <name>PHASE_1</name>
            <t>During PHASE_1, the SPO at the recipient peer P determines CRED, i.e., the authentication credential associated with the other peer to be used in the ongoing LAKE session. In particular, the SPO first checks whether expected EAD items are absent in message_X (see <xref target="sec-message-side-processing"/>), and then performs the following steps.</t>
            <ol spacing="normal" type="1"><li>
                <t>The SPO determines CRED based on ID_CRED_X or on an EAD item included in message_X.  </t>
                <t>
Those may specify CRED by value or by reference, including a URI or other external reference where CRED can be retrieved from.  </t>
                <t>
If CRED is already stored, 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 trusted and valid, e.g., by verifying that CRED has not expired and has not been revoked.  </t>
                <t>
Performing such a validation might require the SPO to first process an EAD item included in message_X. For example, it can be an EAD item in LAKE message_2 that confirms or revokes the validity of CRED_R specified by ID_CRED_R, as the result of an OCSP process <xref target="RFC6960"/>.  </t>
                <t>
In the case that CRED is determined to be valid, the SPO moves to Step 9. Otherwise, the SPO moves to Step 11.</t>
              </li>
              <li>
                <t>The SPO attempts to retrieve CRED via ID_CRED_X or an EAD item considered at Step 1. Then, the SPO moves to Step 4.</t>
              </li>
              <li>
                <t>If the retrieval of CRED has succeeded, the SPO moves to Step 5. Otherwise, the SPO moves to Step 11.</t>
              </li>
              <li>
                <t>If the enforced trust policy for new authentication credentials is "NO-LEARNING" and P does not admit any exceptions that are acceptable to enforce for message_X (see <xref target="sec-policy-no-learning"/>), the SPO moves to Step 11. Otherwise, the SPO moves to Step 6.</t>
              </li>
              <li>
                <t>If this step has been reached, the peer P is not already storing the retrieved CRED and, at the same time, it enforces either the trust policy "LEARNING" or the trust policy "NO-LEARNING" while also enforcing an exception acceptable for message_X (see <xref target="sec-policy-no-learning"/>).  </t>
                <t>
Consistent with that, the SPO determines if CRED is currently valid, e.g., by verifying that CRED has not expired and has not been revoked.  </t>
                <t>
Validating CRED might require the SPO to first process an EAD item included in message_X. For example, it can be an OCSP response <xref target="RFC6960"/> for validating CRED_R as a public key certificate transported by value or reference in ID_CRED_R.  </t>
                <t>
After successfully validating CRED, the peer P can typically consider CRED as ultimately trusted as well. However, there can be cases where P requires to obtain additional information before doing so.  </t>
                <t>
If such additional information can be retrieved from message_X (e.g., from an EAD item included therein), then P uses it to assess if CRED is trusted. Otherwise, if such additional information is expected later on during the LAKE session, it can be acceptable for P to consider CRED as provisionally trusted.  </t>
                <t><xref target="sec-trust-models-ela"/> discusses the ELA procedure defined in <xref target="I-D.ietf-lake-authz"/>, as a case in point where additional information required by the peer P to trust CRED could not be included in the same message that specifies CRED.  </t>
                <t>
After completing the validation and trust assessment of CRED, the SPO moves to Step 7.</t>
              </li>
              <li>
                <t>If CRED has been determined valid and (provisionally) trusted, 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 (provisionally) 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 LAKE session, also depending on the specific identity of the other peer (see Sections <xref target="RFC9528" section="3.5" sectionFormat="bare"/> and <xref target="RFC9528" section="D.2" sectionFormat="bare"/> of <xref target="RFC9528"/>).  </t>
                <t>
If this is the case, the SPO moves to Step 10. Otherwise, the SPO moves to Step 11.</t>
              </li>
              <li>
                <t>P uses CRED as authentication credential associated with the other peer in the ongoing LAKE session.  </t>
                <t>
Then, PHASE_1 ends and the pre-verification side processing moves to the next PHASE_2 (see <xref target="sec-pre-verif-phase-2"/>).</t>
              </li>
              <li>
                <t>The SPO has not found a valid and (provisionally) trusted authentication credential associated with the other peer that can be used in the ongoing LAKE session. Therefore, the LAKE session with the other peer is aborted.</t>
              </li>
            </ol>
          </section>
          <section anchor="sec-pre-verif-phase-2">
            <name>PHASE_2</name>
            <t>During PHASE_2, the SPO processes any EAD item included in message_X such that both the following conditions hold:</t>
            <ul spacing="normal">
              <li>
                <t>The EAD item has <em>not</em> already been processed during PHASE_1.</t>
              </li>
              <li>
                <t>The EAD item can be processed before performing the verification of message_X.</t>
              </li>
            </ul>
            <t>Once all such EAD items have been processed, the SPO transfers control back to LAKE, which either aborts the ongoing LAKE session or continues the processing of message_X with its corresponding message verification.</t>
          </section>
        </section>
        <section anchor="sec-post-verif">
          <name>Post-Verification Side Processing</name>
          <t>During the post-verification side processing, the SPO processes any EAD item included in message_X such that the processing of that EAD item had to wait for completing the successful message verification.</t>
          <t>The late processing of such EAD items is typically due to the fact that a pre-requirement has to be fulfilled first.</t>
          <t>For example, the recipient peer P has to have first verified that the other peer does possess the private key corresponding to the public key specified by CRED, i.e., the authentication credential associated with the other peer that was determined during the pre-verification side processing (see <xref target="sec-pre-verif"/>). This requirement is fulfilled after a successful verification of message_X.</t>
          <t>Once all such EAD items have been processed, the SPO transfers control back to LAKE. When doing so, the SPO also provides LAKE with any produced EAD items to include in the EAD field of the next outgoing LAKE message.</t>
          <t>Then, LAKE resumes its execution and advances its protocol state.</t>
        </section>
        <section anchor="sec-m2-m3-flowchart">
          <name>Flowchart</name>
          <t>The flowchart in <xref target="fig-flowchart-spo-low-level"/> shows the different steps taken for processing an incoming LAKE message_2 and message_3.</t>
          <figure anchor="fig-flowchart-spo-low-level">
            <name>Processing Steps for Incoming LAKE message_2 and message_3.</name>
            <artset>
              <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="2560" width="576" viewBox="0 0 576 2560" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,512 L 8,1552" fill="none" stroke="black"/>
                  <path d="M 8,1600 L 8,1728" fill="none" stroke="black"/>
                  <path d="M 8,2080 L 8,2320" fill="none" stroke="black"/>
                  <path d="M 16,144 L 16,176" fill="none" stroke="black"/>
                  <path d="M 16,240 L 16,288" fill="none" stroke="black"/>
                  <path d="M 16,352 L 16,384" fill="none" stroke="black"/>
                  <path d="M 16,1904 L 16,1936" fill="none" stroke="black"/>
                  <path d="M 16,2496 L 16,2544" fill="none" stroke="black"/>
                  <path d="M 24,560 L 24,608" fill="none" stroke="black"/>
                  <path d="M 24,672 L 24,752" fill="none" stroke="black"/>
                  <path d="M 24,864 L 24,928" fill="none" stroke="black"/>
                  <path d="M 24,1024 L 24,1104" fill="none" stroke="black"/>
                  <path d="M 24,1392 L 24,1520" fill="none" stroke="black"/>
                  <path d="M 24,1648 L 24,1696" fill="none" stroke="black"/>
                  <path d="M 24,2128 L 24,2176" fill="none" stroke="black"/>
                  <path d="M 24,2240 L 24,2288" fill="none" stroke="black"/>
                  <path d="M 88,96 L 88,136" fill="none" stroke="black"/>
                  <path d="M 88,184 L 88,232" fill="none" stroke="black"/>
                  <path d="M 88,296 L 88,344" fill="none" stroke="black"/>
                  <path d="M 88,392 L 88,416" fill="none" stroke="black"/>
                  <path d="M 88,496 L 88,552" fill="none" stroke="black"/>
                  <path d="M 88,616 L 88,664" fill="none" stroke="black"/>
                  <path d="M 88,760 L 88,856" fill="none" stroke="black"/>
                  <path d="M 88,936 L 88,1016" fill="none" stroke="black"/>
                  <path d="M 88,1112 L 88,1384" fill="none" stroke="black"/>
                  <path d="M 88,1528 L 88,1640" fill="none" stroke="black"/>
                  <path d="M 88,1704 L 88,1776" fill="none" stroke="black"/>
                  <path d="M 88,1856 L 88,1896" fill="none" stroke="black"/>
                  <path d="M 88,1944 L 88,1984" fill="none" stroke="black"/>
                  <path d="M 88,2064 L 88,2120" fill="none" stroke="black"/>
                  <path d="M 88,2184 L 88,2232" fill="none" stroke="black"/>
                  <path d="M 88,2296 L 88,2368" fill="none" stroke="black"/>
                  <path d="M 88,2448 L 88,2488" fill="none" stroke="black"/>
                  <path d="M 152,2496 L 152,2544" fill="none" stroke="black"/>
                  <path d="M 168,864 L 168,928" fill="none" stroke="black"/>
                  <path d="M 168,1904 L 168,1936" fill="none" stroke="black"/>
                  <path d="M 176,144 L 176,176" fill="none" stroke="black"/>
                  <path d="M 176,240 L 176,288" fill="none" stroke="black"/>
                  <path d="M 176,352 L 176,384" fill="none" stroke="black"/>
                  <path d="M 176,1392 L 176,1520" fill="none" stroke="black"/>
                  <path d="M 192,1024 L 192,1104" fill="none" stroke="black"/>
                  <path d="M 200,672 L 200,752" fill="none" stroke="black"/>
                  <path d="M 224,144 L 224,384" fill="none" stroke="black"/>
                  <path d="M 224,560 L 224,608" fill="none" stroke="black"/>
                  <path d="M 248,672 L 248,752" fill="none" stroke="black"/>
                  <path d="M 248,864 L 248,1056" fill="none" stroke="black"/>
                  <path d="M 248,1088 L 248,1424" fill="none" stroke="black"/>
                  <path d="M 296,800 L 296,856" fill="none" stroke="black"/>
                  <path d="M 296,1280 L 296,1328" fill="none" stroke="black"/>
                  <path d="M 296,1392 L 296,1520" fill="none" stroke="black"/>
                  <path d="M 320,1064 L 320,1272" fill="none" stroke="black"/>
                  <path d="M 320,1336 L 320,1384" fill="none" stroke="black"/>
                  <path d="M 344,864 L 344,1056" fill="none" stroke="black"/>
                  <path d="M 368,672 L 368,752" fill="none" stroke="black"/>
                  <path d="M 384,2240 L 384,2288" fill="none" stroke="black"/>
                  <path d="M 392,2128 L 392,2176" fill="none" stroke="black"/>
                  <path d="M 408,864 L 408,976" fill="none" stroke="black"/>
                  <path d="M 416,672 L 416,752" fill="none" stroke="black"/>
                  <path d="M 416,1152 L 416,1216" fill="none" stroke="black"/>
                  <path d="M 416,2080 L 416,2320" fill="none" stroke="black"/>
                  <path d="M 432,760 L 432,800" fill="none" stroke="black"/>
                  <path d="M 480,1648 L 480,1696" fill="none" stroke="black"/>
                  <path d="M 512,760 L 512,856" fill="none" stroke="black"/>
                  <path d="M 512,984 L 512,1144" fill="none" stroke="black"/>
                  <path d="M 512,1224 L 512,1272" fill="none" stroke="black"/>
                  <path d="M 528,672 L 528,752" fill="none" stroke="black"/>
                  <path d="M 544,1152 L 544,1216" fill="none" stroke="black"/>
                  <path d="M 552,864 L 552,976" fill="none" stroke="black"/>
                  <path d="M 552,1280 L 552,1328" fill="none" stroke="black"/>
                  <path d="M 552,1392 L 552,1520" fill="none" stroke="black"/>
                  <path d="M 568,512 L 568,1552" fill="none" stroke="black"/>
                  <path d="M 568,1600 L 568,1728" fill="none" stroke="black"/>
                  <path d="M 16,144 L 176,144" fill="none" stroke="black"/>
                  <path d="M 200,144 L 224,144" fill="none" stroke="black"/>
                  <path d="M 16,176 L 176,176" fill="none" stroke="black"/>
                  <path d="M 16,240 L 176,240" fill="none" stroke="black"/>
                  <path d="M 224,256 L 248,256" fill="none" stroke="black"/>
                  <path d="M 16,288 L 176,288" fill="none" stroke="black"/>
                  <path d="M 16,352 L 176,352" fill="none" stroke="black"/>
                  <path d="M 16,384 L 176,384" fill="none" stroke="black"/>
                  <path d="M 200,384 L 224,384" fill="none" stroke="black"/>
                  <path d="M 8,512 L 80,512" fill="none" stroke="black"/>
                  <path d="M 96,512 L 568,512" fill="none" stroke="black"/>
                  <path d="M 24,560 L 224,560" fill="none" stroke="black"/>
                  <path d="M 24,608 L 224,608" fill="none" stroke="black"/>
                  <path d="M 24,672 L 200,672" fill="none" stroke="black"/>
                  <path d="M 248,672 L 368,672" fill="none" stroke="black"/>
                  <path d="M 416,672 L 528,672" fill="none" stroke="black"/>
                  <path d="M 208,704 L 240,704" fill="none" stroke="black"/>
                  <path d="M 376,704 L 408,704" fill="none" stroke="black"/>
                  <path d="M 24,752 L 200,752" fill="none" stroke="black"/>
                  <path d="M 248,752 L 368,752" fill="none" stroke="black"/>
                  <path d="M 416,752 L 528,752" fill="none" stroke="black"/>
                  <path d="M 296,800 L 432,800" fill="none" stroke="black"/>
                  <path d="M 24,864 L 168,864" fill="none" stroke="black"/>
                  <path d="M 248,864 L 344,864" fill="none" stroke="black"/>
                  <path d="M 408,864 L 552,864" fill="none" stroke="black"/>
                  <path d="M 176,880 L 240,880" fill="none" stroke="black"/>
                  <path d="M 352,880 L 400,880" fill="none" stroke="black"/>
                  <path d="M 24,928 L 168,928" fill="none" stroke="black"/>
                  <path d="M 408,976 L 552,976" fill="none" stroke="black"/>
                  <path d="M 24,1024 L 192,1024" fill="none" stroke="black"/>
                  <path d="M 200,1040 L 240,1040" fill="none" stroke="black"/>
                  <path d="M 248,1056 L 344,1056" fill="none" stroke="black"/>
                  <path d="M 200,1088 L 248,1088" fill="none" stroke="black"/>
                  <path d="M 24,1104 L 192,1104" fill="none" stroke="black"/>
                  <path d="M 416,1152 L 544,1152" fill="none" stroke="black"/>
                  <path d="M 416,1216 L 544,1216" fill="none" stroke="black"/>
                  <path d="M 296,1280 L 552,1280" fill="none" stroke="black"/>
                  <path d="M 296,1328 L 552,1328" fill="none" stroke="black"/>
                  <path d="M 24,1392 L 176,1392" fill="none" stroke="black"/>
                  <path d="M 296,1392 L 552,1392" fill="none" stroke="black"/>
                  <path d="M 248,1424 L 288,1424" fill="none" stroke="black"/>
                  <path d="M 24,1520 L 176,1520" fill="none" stroke="black"/>
                  <path d="M 296,1520 L 552,1520" fill="none" stroke="black"/>
                  <path d="M 8,1552 L 80,1552" fill="none" stroke="black"/>
                  <path d="M 96,1552 L 568,1552" fill="none" stroke="black"/>
                  <path d="M 8,1600 L 80,1600" fill="none" stroke="black"/>
                  <path d="M 96,1600 L 568,1600" fill="none" stroke="black"/>
                  <path d="M 24,1648 L 480,1648" fill="none" stroke="black"/>
                  <path d="M 24,1696 L 480,1696" fill="none" stroke="black"/>
                  <path d="M 8,1728 L 80,1728" fill="none" stroke="black"/>
                  <path d="M 96,1728 L 568,1728" fill="none" stroke="black"/>
                  <path d="M 16,1904 L 168,1904" fill="none" stroke="black"/>
                  <path d="M 16,1936 L 168,1936" fill="none" stroke="black"/>
                  <path d="M 8,2080 L 80,2080" fill="none" stroke="black"/>
                  <path d="M 96,2080 L 416,2080" fill="none" stroke="black"/>
                  <path d="M 24,2128 L 392,2128" fill="none" stroke="black"/>
                  <path d="M 24,2176 L 392,2176" fill="none" stroke="black"/>
                  <path d="M 24,2240 L 384,2240" fill="none" stroke="black"/>
                  <path d="M 24,2288 L 384,2288" fill="none" stroke="black"/>
                  <path d="M 8,2320 L 80,2320" fill="none" stroke="black"/>
                  <path d="M 96,2320 L 416,2320" fill="none" stroke="black"/>
                  <path d="M 16,2496 L 152,2496" fill="none" stroke="black"/>
                  <path d="M 16,2544 L 152,2544" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="520,1272 508,1266.4 508,1277.6" fill="black" transform="rotate(90,512,1272)"/>
                  <polygon class="arrowhead" points="520,1144 508,1138.4 508,1149.6" fill="black" transform="rotate(90,512,1144)"/>
                  <polygon class="arrowhead" points="520,856 508,850.4 508,861.6" fill="black" transform="rotate(90,512,856)"/>
                  <polygon class="arrowhead" points="416,704 404,698.4 404,709.6" fill="black" transform="rotate(0,408,704)"/>
                  <polygon class="arrowhead" points="360,880 348,874.4 348,885.6" fill="black" transform="rotate(180,352,880)"/>
                  <polygon class="arrowhead" points="328,1384 316,1378.4 316,1389.6" fill="black" transform="rotate(90,320,1384)"/>
                  <polygon class="arrowhead" points="328,1064 316,1058.4 316,1069.6" fill="black" transform="rotate(270,320,1064)"/>
                  <polygon class="arrowhead" points="304,856 292,850.4 292,861.6" fill="black" transform="rotate(90,296,856)"/>
                  <polygon class="arrowhead" points="248,1040 236,1034.4 236,1045.6" fill="black" transform="rotate(0,240,1040)"/>
                  <polygon class="arrowhead" points="248,880 236,874.4 236,885.6" fill="black" transform="rotate(0,240,880)"/>
                  <polygon class="arrowhead" points="248,704 236,698.4 236,709.6" fill="black" transform="rotate(0,240,704)"/>
                  <polygon class="arrowhead" points="208,1088 196,1082.4 196,1093.6" fill="black" transform="rotate(180,200,1088)"/>
                  <polygon class="arrowhead" points="96,2488 84,2482.4 84,2493.6" fill="black" transform="rotate(90,88,2488)"/>
                  <polygon class="arrowhead" points="96,2368 84,2362.4 84,2373.6" fill="black" transform="rotate(90,88,2368)"/>
                  <polygon class="arrowhead" points="96,2232 84,2226.4 84,2237.6" fill="black" transform="rotate(90,88,2232)"/>
                  <polygon class="arrowhead" points="96,2120 84,2114.4 84,2125.6" fill="black" transform="rotate(90,88,2120)"/>
                  <polygon class="arrowhead" points="96,1984 84,1978.4 84,1989.6" fill="black" transform="rotate(90,88,1984)"/>
                  <polygon class="arrowhead" points="96,1896 84,1890.4 84,1901.6" fill="black" transform="rotate(90,88,1896)"/>
                  <polygon class="arrowhead" points="96,1776 84,1770.4 84,1781.6" fill="black" transform="rotate(90,88,1776)"/>
                  <polygon class="arrowhead" points="96,1640 84,1634.4 84,1645.6" fill="black" transform="rotate(90,88,1640)"/>
                  <polygon class="arrowhead" points="96,1384 84,1378.4 84,1389.6" fill="black" transform="rotate(90,88,1384)"/>
                  <polygon class="arrowhead" points="96,1016 84,1010.4 84,1021.6" fill="black" transform="rotate(90,88,1016)"/>
                  <polygon class="arrowhead" points="96,856 84,850.4 84,861.6" fill="black" transform="rotate(90,88,856)"/>
                  <polygon class="arrowhead" points="96,664 84,658.4 84,669.6" fill="black" transform="rotate(90,88,664)"/>
                  <polygon class="arrowhead" points="96,344 84,338.4 84,349.6" fill="black" transform="rotate(90,88,344)"/>
                  <polygon class="arrowhead" points="96,232 84,226.4 84,237.6" fill="black" transform="rotate(90,88,232)"/>
                  <polygon class="arrowhead" points="96,136 84,130.4 84,141.6" fill="black" transform="rotate(90,88,136)"/>
                  <g class="text">
                    <text x="52" y="36">Incoming</text>
                    <text x="36" y="52">LAKE</text>
                    <text x="96" y="52">message_X</text>
                    <text x="28" y="68">(X</text>
                    <text x="48" y="68">=</text>
                    <text x="64" y="68">2</text>
                    <text x="84" y="68">or</text>
                    <text x="108" y="68">3)</text>
                    <text x="52" y="164">Decode</text>
                    <text x="120" y="164">message_X</text>
                    <text x="60" y="260">Retrieve</text>
                    <text x="112" y="260">the</text>
                    <text x="280" y="260">(Core</text>
                    <text x="324" y="260">LAKE</text>
                    <text x="392" y="260">Processing)</text>
                    <text x="60" y="276">protocol</text>
                    <text x="120" y="276">state</text>
                    <text x="56" y="372">Decrypt</text>
                    <text x="128" y="372">message_X</text>
                    <text x="40" y="452">Control</text>
                    <text x="120" y="452">transferred</text>
                    <text x="180" y="452">to</text>
                    <text x="24" y="468">the</text>
                    <text x="100" y="468">side-processor</text>
                    <text x="188" y="468">object</text>
                    <text x="260" y="532">Pre-verification</text>
                    <text x="348" y="532">side</text>
                    <text x="412" y="532">processing</text>
                    <text x="496" y="532">(PHASE_1)</text>
                    <text x="56" y="580">Check</text>
                    <text x="112" y="580">whether</text>
                    <text x="180" y="580">expected</text>
                    <text x="48" y="596">EAD</text>
                    <text x="88" y="596">items</text>
                    <text x="128" y="596">are</text>
                    <text x="172" y="596">absent</text>
                    <text x="44" y="692">1.</text>
                    <text x="76" y="692">Does</text>
                    <text x="136" y="692">ID_CRED_X</text>
                    <text x="220" y="692">NO</text>
                    <text x="268" y="692">3.</text>
                    <text x="316" y="692">Retrieve</text>
                    <text x="436" y="692">4.</text>
                    <text x="460" y="692">Is</text>
                    <text x="488" y="692">the</text>
                    <text x="44" y="708">or</text>
                    <text x="68" y="708">an</text>
                    <text x="96" y="708">EAD</text>
                    <text x="132" y="708">item</text>
                    <text x="276" y="708">CRED</text>
                    <text x="312" y="708">via</text>
                    <text x="464" y="708">retrieval</text>
                    <text x="56" y="724">point</text>
                    <text x="92" y="724">to</text>
                    <text x="116" y="724">an</text>
                    <text x="160" y="724">already</text>
                    <text x="296" y="724">ID_CRED_X</text>
                    <text x="348" y="724">or</text>
                    <text x="436" y="724">of</text>
                    <text x="468" y="724">CRED</text>
                    <text x="60" y="740">stored</text>
                    <text x="112" y="740">CRED?</text>
                    <text x="268" y="740">an</text>
                    <text x="296" y="740">EAD</text>
                    <text x="332" y="740">item</text>
                    <text x="472" y="740">successful?</text>
                    <text x="452" y="788">NO</text>
                    <text x="536" y="788">YES</text>
                    <text x="112" y="836">YES</text>
                    <text x="188" y="868">NO</text>
                    <text x="384" y="868">YES</text>
                    <text x="44" y="884">2.</text>
                    <text x="68" y="884">Is</text>
                    <text x="100" y="884">this</text>
                    <text x="140" y="884">CRED</text>
                    <text x="272" y="884">11.</text>
                    <text x="312" y="884">Abort</text>
                    <text x="428" y="884">5.</text>
                    <text x="452" y="884">Is</text>
                    <text x="480" y="884">the</text>
                    <text x="520" y="884">trust</text>
                    <text x="56" y="900">still</text>
                    <text x="104" y="900">valid</text>
                    <text x="144" y="900">and</text>
                    <text x="272" y="900">the</text>
                    <text x="308" y="900">LAKE</text>
                    <text x="444" y="900">policy</text>
                    <text x="492" y="900">used</text>
                    <text x="68" y="916">trusted?</text>
                    <text x="288" y="916">session</text>
                    <text x="476" y="916">"NO-LEARNING",</text>
                    <text x="448" y="932">without</text>
                    <text x="496" y="932">any</text>
                    <text x="460" y="948">acceptable</text>
                    <text x="464" y="964">exceptions?</text>
                    <text x="112" y="996">YES</text>
                    <text x="404" y="1012">Here</text>
                    <text x="440" y="1012">the</text>
                    <text x="480" y="1012">trust</text>
                    <text x="532" y="1012">NO</text>
                    <text x="212" y="1028">NO</text>
                    <text x="412" y="1028">policy</text>
                    <text x="460" y="1028">used</text>
                    <text x="492" y="1028">is</text>
                    <text x="44" y="1044">9.</text>
                    <text x="68" y="1044">Is</text>
                    <text x="100" y="1044">this</text>
                    <text x="140" y="1044">CRED</text>
                    <text x="432" y="1044">"LEARNING",</text>
                    <text x="492" y="1044">or</text>
                    <text x="52" y="1060">good</text>
                    <text x="84" y="1060">to</text>
                    <text x="112" y="1060">use</text>
                    <text x="140" y="1060">in</text>
                    <text x="168" y="1060">the</text>
                    <text x="440" y="1060">"NO-LEARNING"</text>
                    <text x="64" y="1076">context</text>
                    <text x="108" y="1076">of</text>
                    <text x="140" y="1076">this</text>
                    <text x="420" y="1076">together</text>
                    <text x="476" y="1076">with</text>
                    <text x="52" y="1092">LAKE</text>
                    <text x="108" y="1092">session?</text>
                    <text x="396" y="1092">an</text>
                    <text x="452" y="1092">overriding</text>
                    <text x="424" y="1108">exception</text>
                    <text x="436" y="1172">6.</text>
                    <text x="476" y="1172">Assess</text>
                    <text x="516" y="1172">if</text>
                    <text x="444" y="1188">CRED</text>
                    <text x="476" y="1188">is</text>
                    <text x="512" y="1188">valid</text>
                    <text x="440" y="1204">and</text>
                    <text x="488" y="1204">trusted</text>
                    <text x="112" y="1252">YES</text>
                    <text x="340" y="1252">NO</text>
                    <text x="316" y="1300">7.</text>
                    <text x="340" y="1300">Is</text>
                    <text x="372" y="1300">CRED</text>
                    <text x="416" y="1300">valid</text>
                    <text x="456" y="1300">and</text>
                    <text x="368" y="1316">(provisionally)</text>
                    <text x="468" y="1316">trusted?</text>
                    <text x="344" y="1364">YES</text>
                    <text x="48" y="1412">10.</text>
                    <text x="100" y="1412">Continue</text>
                    <text x="148" y="1412">by</text>
                    <text x="316" y="1412">8.</text>
                    <text x="352" y="1412">Store</text>
                    <text x="396" y="1412">CRED</text>
                    <text x="428" y="1412">as</text>
                    <text x="464" y="1412">valid</text>
                    <text x="504" y="1412">and</text>
                    <text x="80" y="1428">considering</text>
                    <text x="148" y="1428">this</text>
                    <text x="368" y="1428">(provisionally)</text>
                    <text x="468" y="1428">trusted.</text>
                    <text x="52" y="1444">CRED</text>
                    <text x="84" y="1444">as</text>
                    <text x="112" y="1444">the</text>
                    <text x="92" y="1460">authentication</text>
                    <text x="324" y="1460">Pair</text>
                    <text x="364" y="1460">CRED</text>
                    <text x="404" y="1460">with</text>
                    <text x="468" y="1460">consistent</text>
                    <text x="76" y="1476">credential</text>
                    <text x="348" y="1476">credential</text>
                    <text x="444" y="1476">identifiers,</text>
                    <text x="512" y="1476">for</text>
                    <text x="76" y="1492">associated</text>
                    <text x="140" y="1492">with</text>
                    <text x="324" y="1492">each</text>
                    <text x="384" y="1492">supported</text>
                    <text x="444" y="1492">type</text>
                    <text x="476" y="1492">of</text>
                    <text x="48" y="1508">the</text>
                    <text x="88" y="1508">other</text>
                    <text x="132" y="1508">peer</text>
                    <text x="348" y="1508">credential</text>
                    <text x="440" y="1508">identifier.</text>
                    <text x="252" y="1620">Pre-verification</text>
                    <text x="340" y="1620">side</text>
                    <text x="404" y="1620">processing</text>
                    <text x="488" y="1620">(PHASE_2)</text>
                    <text x="64" y="1668">Process</text>
                    <text x="112" y="1668">the</text>
                    <text x="144" y="1668">EAD</text>
                    <text x="184" y="1668">items</text>
                    <text x="228" y="1668">that</text>
                    <text x="268" y="1668">have</text>
                    <text x="304" y="1668">not</text>
                    <text x="340" y="1668">been</text>
                    <text x="400" y="1668">processed</text>
                    <text x="456" y="1668">yet</text>
                    <text x="48" y="1684">and</text>
                    <text x="84" y="1684">that</text>
                    <text x="120" y="1684">can</text>
                    <text x="148" y="1684">be</text>
                    <text x="200" y="1684">processed</text>
                    <text x="268" y="1684">before</text>
                    <text x="328" y="1684">message</text>
                    <text x="412" y="1684">verification</text>
                    <text x="40" y="1812">Control</text>
                    <text x="120" y="1812">transferred</text>
                    <text x="188" y="1812">back</text>
                    <text x="20" y="1828">to</text>
                    <text x="48" y="1828">the</text>
                    <text x="84" y="1828">core</text>
                    <text x="124" y="1828">LAKE</text>
                    <text x="188" y="1828">processing</text>
                    <text x="52" y="1924">Verify</text>
                    <text x="120" y="1924">message_X</text>
                    <text x="200" y="1924">(Core</text>
                    <text x="244" y="1924">LAKE</text>
                    <text x="312" y="1924">processing)</text>
                    <text x="40" y="2020">Control</text>
                    <text x="120" y="2020">transferred</text>
                    <text x="180" y="2020">to</text>
                    <text x="24" y="2036">the</text>
                    <text x="100" y="2036">side-processor</text>
                    <text x="188" y="2036">object</text>
                    <text x="248" y="2100">Post-verification</text>
                    <text x="364" y="2100">processing</text>
                    <text x="64" y="2148">Process</text>
                    <text x="112" y="2148">the</text>
                    <text x="144" y="2148">EAD</text>
                    <text x="184" y="2148">items</text>
                    <text x="228" y="2148">that</text>
                    <text x="268" y="2148">have</text>
                    <text x="300" y="2148">to</text>
                    <text x="324" y="2148">be</text>
                    <text x="72" y="2164">processed</text>
                    <text x="140" y="2164">(also)</text>
                    <text x="192" y="2164">after</text>
                    <text x="248" y="2164">message</text>
                    <text x="332" y="2164">verification</text>
                    <text x="52" y="2260">Make</text>
                    <text x="88" y="2260">all</text>
                    <text x="120" y="2260">the</text>
                    <text x="168" y="2260">results</text>
                    <text x="212" y="2260">of</text>
                    <text x="240" y="2260">the</text>
                    <text x="272" y="2260">EAD</text>
                    <text x="332" y="2260">processing</text>
                    <text x="72" y="2276">available</text>
                    <text x="124" y="2276">to</text>
                    <text x="160" y="2276">build</text>
                    <text x="200" y="2276">the</text>
                    <text x="236" y="2276">next</text>
                    <text x="276" y="2276">LAKE</text>
                    <text x="328" y="2276">message</text>
                    <text x="40" y="2404">Control</text>
                    <text x="120" y="2404">transferred</text>
                    <text x="188" y="2404">back</text>
                    <text x="20" y="2420">to</text>
                    <text x="48" y="2420">the</text>
                    <text x="84" y="2420">core</text>
                    <text x="124" y="2420">LAKE</text>
                    <text x="188" y="2420">processing</text>
                    <text x="56" y="2516">Advance</text>
                    <text x="104" y="2516">the</text>
                    <text x="184" y="2516">(Core</text>
                    <text x="228" y="2516">LAKE</text>
                    <text x="296" y="2516">processing)</text>
                    <text x="60" y="2532">protocol</text>
                    <text x="120" y="2532">state</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art" align="center"><![CDATA[
  Incoming
  LAKE message_X
  (X = 2 or 3)

          |
          |
          v
 +-------------------+  ---+
 | Decode message_X  |     |
 +-------------------+     |
          |                |
          |                |
          v                |
 +-------------------+     |
 | Retrieve the      |     +--- (Core LAKE Processing)
 | protocol state    |     |
 +-------------------+     |
          |                |
          |                |
          v                |
 +-------------------+     |
 | Decrypt message_X |     |
 +-------------------+  ---+
          |
          |

 Control transferred to
 the side-processor object

          |
+---------|-----------------------------------------------------------+
|         |             Pre-verification side processing (PHASE_1)    |
|         |                                                           |
| +------------------------+                                          |
| | Check whether expected |                                          |
| | EAD items are absent   |                                          |
| +------------------------+                                          |
|         |                                                           |
|         |                                                           |
|         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 trust | |
| | still valid and |         | the LAKE  |       | policy used     | |
| | trusted?        |         | session   |       | "NO-LEARNING",  | |
| +-----------------+         |           |       | without any     | |
|         |                   |           |       | acceptable      | |
|         |                   |           |       | exceptions?     | |
|         |                   |           |       +-----------------+ |
|         | YES               |           |                    |      |
|         v                   |           |     Here the trust | NO   |
| +--------------------+ NO   |           |     policy used is |      |
| | 9. Is this CRED    |----->|           |     "LEARNING", or |      |
| | good to use in the |      +-----------+     "NO-LEARNING"  |      |
| | context of this    |               ^        together with  |      |
| | LAKE session?      |<-----+        |        an overriding  |      |
| +--------------------+      |        |        exception      |      |
|         |                   |        |                       |      |
|         |                   |        |                       v      |
|         |                   |        |           +---------------+  |
|         |                   |        |           | 6. Assess if  |  |
|         |                   |        |           | CRED is valid |  |
|         |                   |        |           | and trusted   |  |
|         |                   |        |           +---------------+  |
|         |                   |        |                       |      |
|         | YES               |        | NO                    |      |
|         |                   |        |                       v      |
|         |                   |     +-------------------------------+ |
|         |                   |     | 7. Is CRED valid and          | |
|         |                   |     | (provisionally) trusted?      | |
|         |                   |     +-------------------------------+ |
|         |                   |        |                              |
|         |                   |        | YES                          |
|         v                   |        v                              |
| +------------------+        |     +-------------------------------+ |
| | 10. Continue by  |        |     | 8. Store CRED as valid and    | |
| | considering this |        +-----| (provisionally) trusted.      | |
| | CRED as the      |              |                               | |
| | authentication   |              | Pair CRED with consistent     | |
| | credential       |              | credential identifiers, for   | |
| | associated with  |              | each supported type of        | |
| | the other peer   |              | credential identifier.        | |
| +------------------+              +-------------------------------+ |
|         |                                                           |
+---------|-----------------------------------------------------------+
          |
          |
+---------|-----------------------------------------------------------+
|         |            Pre-verification side processing (PHASE_2)     |
|         v                                                           |
| +--------------------------------------------------------+          |
| | Process the EAD items that have not been processed yet |          |
| | and that can be processed before message verification  |          |
| +--------------------------------------------------------+          |
|         |                                                           |
+---------|-----------------------------------------------------------+
          |
          |
          v

 Control transferred back
 to the core LAKE processing

          |
          |
          v
 +------------------+
 | Verify message_X | (Core LAKE processing)
 +------------------+
          |
          |
          v

 Control transferred to
 the side-processor object

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

 Control transferred back
 to the core LAKE processing

          |
          |
          v
 +----------------+
 | Advance the    | (Core LAKE processing)
 | protocol state |
 +----------------+
]]></artwork>
            </artset>
          </figure>
        </section>
      </section>
      <section anchor="sec-message-side-processing-m1-advanced">
        <name>Foreseen Advanced Processing of Incoming LAKE message_1</name>
        <t>As mentioned in <xref target="sec-message-side-processing-m1"/>, future developments in LAKE and in related external security applications might rely on an EAD item in LAKE message_1 that specifies the authentication credential CRED associated with the Initiator (by value or by reference), as wrapped in a cryptographically protected "envelope".</t>
        <t>In order to handle such a case, the processing of an incoming LAKE message_1 as described in <xref target="sec-message-side-processing-m1"/> is extended with additional steps performed by the SPO.</t>
        <t>Such an extended side processing shares similarities with that of an incoming LAKE message_2 or message_3 (see <xref target="sec-message-side-processing-m2-m3"/>). In particular, similarly to what is compiled in <xref target="sec-pre-verif-phase-1"/> and <xref target="sec-pre-verif-phase-2"/>, the SPO first checks whether expected EAD items are absent in message_X (see <xref target="sec-message-side-processing"/>) and then performs the following steps.</t>
        <ul spacing="normal">
          <li>
            <t>(0) The SPO checks the presence of an EAD item that specifies the authentication credential CRED associated with the Initiator (by value or by reference).  </t>
            <t>
If no such EAD item is found, the SPO moves to Step 12. Otherwise, the SPO moves to Step 1.</t>
          </li>
          <li>
            <t>(1) The SPO determines CRED based on an EAD item retrieved at Step 0.  </t>
            <t>
The EAD item can specify CRED by value or by reference, including a URI or other external reference where CRED can be retrieved from.  </t>
            <t>
If CRED is already stored, the SPO moves to Step 2. Otherwise, the SPO moves to Step 3.</t>
          </li>
          <li>
            <t>(2) The SPO determines if the stored CRED is currently trusted and valid, e.g., by verifying that CRED has not expired and has not been revoked.  </t>
            <t>
Performing such a validation might require the SPO to first process an EAD item included in message_1.  </t>
            <t>
In the case that CRED is determined to be valid, the SPO moves to Step 9. Otherwise, the SPO moves to Step 11.</t>
          </li>
          <li>
            <t>(3) The SPO attempts to retrieve CRED via an EAD item considered at Step 1. Then, the SPO moves to Step 4.</t>
          </li>
          <li>
            <t>(4) If the retrieval of CRED has succeeded, the SPO moves to Step 5. Otherwise, the SPO moves to Step 11.</t>
          </li>
          <li>
            <t>(5) If the enforced trust policy for new authentication credentials is "NO-LEARNING" and P does not admit any exceptions that are acceptable to enforce for message_1 (see <xref target="sec-policy-no-learning"/>), the SPO moves to Step 11. Otherwise, the SPO moves to Step 6.</t>
          </li>
          <li>
            <t>(6) If this step has been reached, the peer P is not already storing the retrieved CRED and, at the same time, it enforces either the trust policy "LEARNING" or the trust policy "NO-LEARNING" while also enforcing an exception acceptable for message_1 (see <xref target="sec-policy-no-learning"/>).  </t>
            <t>
Consistent with that, the SPO determines if CRED is currently valid, e.g., by verifying that CRED has not expired and has not been revoked.  </t>
            <t>
Validating CRED might require the SPO to first process an EAD item included in message_1.  </t>
            <t>
After successfully validating CRED, the peer P can typically consider CRED as ultimately trusted as well. However, there can be cases where P requires to obtain additional information before doing so.  </t>
            <t>
If such additional information can be retrieved from message_1 (e.g., from an EAD item included therein), then P uses it to assess if CRED is trusted. Otherwise, if such additional information is expected later on during the LAKE session, it can be acceptable for P to consider CRED as provisionally trusted.  </t>
            <t>
After completing the validation and trust assessment of CRED, the SPO moves to Step 7.</t>
          </li>
          <li>
            <t>(7) If CRED has been determined valid and (provisionally) trusted, the SPO moves to Step 8. Otherwise, the SPO moves to Step 11.</t>
          </li>
          <li>
            <t>(8) The SPO stores CRED as a valid and (provisionally) trusted authentication credential associated with the other peer, together with corresponding authentication credential identifiers (see <xref target="sec-trust-models"/>). Then, the SPO moves to Step 9.</t>
          </li>
          <li>
            <t>(9) The SPO checks if CRED is fine to use in the context of the ongoing LAKE session, also depending on the specific identity of the other peer (see Sections <xref target="RFC9528" section="3.5" sectionFormat="bare"/> and <xref target="RFC9528" section="D.2" sectionFormat="bare"/> of <xref target="RFC9528"/>).  </t>
            <t>
If this is the case, the SPO moves to Step 10. Otherwise, the SPO moves to Step 11.</t>
          </li>
          <li>
            <t>(10) P uses CRED as authentication credential associated with the other peer in the ongoing LAKE session. Then, the SPO moves to Step 12.</t>
          </li>
          <li>
            <t>(11) The SPO has not found a valid and (provisionally) trusted authentication credential associated with the other peer that can be used in the ongoing LAKE session. Therefore, the LAKE session with the other peer is aborted.</t>
          </li>
          <li>
            <t>(12) The SPO processes any EAD item included in message_1 that has not already been processed.  </t>
            <t>
Once all such EAD items have been processed, the SPO transfers control back to LAKE. When doing so, the SPO also provides LAKE with any produced EAD items to include in the EAD field of the next outgoing LAKE message.</t>
          </li>
        </ul>
        <t>The flowchart in <xref target="fig-flowchart-spo-low-level-m1-advanced"/> shows the different steps taken for the advanced processing of an incoming LAKE message_1 defined above.</t>
        <figure anchor="fig-flowchart-spo-low-level-m1-advanced">
          <name>Processing Steps for Incoming LAKE message_1.</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1936" width="576" viewBox="0 0 576 1936" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,400 L 8,1696" fill="none" stroke="black"/>
                <path d="M 16,128 L 16,160" fill="none" stroke="black"/>
                <path d="M 16,224 L 16,272" fill="none" stroke="black"/>
                <path d="M 16,1872 L 16,1920" fill="none" stroke="black"/>
                <path d="M 24,448 L 24,496" fill="none" stroke="black"/>
                <path d="M 24,560 L 24,608" fill="none" stroke="black"/>
                <path d="M 24,1584 L 24,1664" fill="none" stroke="black"/>
                <path d="M 32,616 L 32,1576" fill="none" stroke="black"/>
                <path d="M 56,864 L 56,928" fill="none" stroke="black"/>
                <path d="M 56,1024 L 56,1120" fill="none" stroke="black"/>
                <path d="M 56,1392 L 56,1520" fill="none" stroke="black"/>
                <path d="M 64,672 L 64,752" fill="none" stroke="black"/>
                <path d="M 88,1128 L 88,1384" fill="none" stroke="black"/>
                <path d="M 88,1528 L 88,1576" fill="none" stroke="black"/>
                <path d="M 88,1672 L 88,1744" fill="none" stroke="black"/>
                <path d="M 88,1824 L 88,1864" fill="none" stroke="black"/>
                <path d="M 96,80 L 96,120" fill="none" stroke="black"/>
                <path d="M 96,168 L 96,216" fill="none" stroke="black"/>
                <path d="M 96,280 L 96,304" fill="none" stroke="black"/>
                <path d="M 96,384 L 96,440" fill="none" stroke="black"/>
                <path d="M 96,504 L 96,552" fill="none" stroke="black"/>
                <path d="M 96,616 L 96,664" fill="none" stroke="black"/>
                <path d="M 96,760 L 96,856" fill="none" stroke="black"/>
                <path d="M 96,936 L 96,1016" fill="none" stroke="black"/>
                <path d="M 152,1872 L 152,1920" fill="none" stroke="black"/>
                <path d="M 176,128 L 176,160" fill="none" stroke="black"/>
                <path d="M 176,224 L 176,272" fill="none" stroke="black"/>
                <path d="M 192,560 L 192,608" fill="none" stroke="black"/>
                <path d="M 200,672 L 200,752" fill="none" stroke="black"/>
                <path d="M 200,864 L 200,928" fill="none" stroke="black"/>
                <path d="M 200,1024 L 200,1120" fill="none" stroke="black"/>
                <path d="M 208,1392 L 208,1520" fill="none" stroke="black"/>
                <path d="M 224,128 L 224,272" fill="none" stroke="black"/>
                <path d="M 224,448 L 224,496" fill="none" stroke="black"/>
                <path d="M 248,672 L 248,736" fill="none" stroke="black"/>
                <path d="M 248,864 L 248,1056" fill="none" stroke="black"/>
                <path d="M 248,1088 L 248,1424" fill="none" stroke="black"/>
                <path d="M 296,800 L 296,856" fill="none" stroke="black"/>
                <path d="M 296,1280 L 296,1328" fill="none" stroke="black"/>
                <path d="M 296,1392 L 296,1520" fill="none" stroke="black"/>
                <path d="M 320,1064 L 320,1272" fill="none" stroke="black"/>
                <path d="M 320,1336 L 320,1384" fill="none" stroke="black"/>
                <path d="M 344,864 L 344,1056" fill="none" stroke="black"/>
                <path d="M 360,672 L 360,736" fill="none" stroke="black"/>
                <path d="M 408,864 L 408,976" fill="none" stroke="black"/>
                <path d="M 416,672 L 416,752" fill="none" stroke="black"/>
                <path d="M 424,1152 L 424,1216" fill="none" stroke="black"/>
                <path d="M 432,760 L 432,800" fill="none" stroke="black"/>
                <path d="M 512,760 L 512,856" fill="none" stroke="black"/>
                <path d="M 512,984 L 512,1144" fill="none" stroke="black"/>
                <path d="M 512,1224 L 512,1272" fill="none" stroke="black"/>
                <path d="M 520,1584 L 520,1664" fill="none" stroke="black"/>
                <path d="M 528,672 L 528,752" fill="none" stroke="black"/>
                <path d="M 552,864 L 552,976" fill="none" stroke="black"/>
                <path d="M 552,1152 L 552,1216" fill="none" stroke="black"/>
                <path d="M 552,1280 L 552,1328" fill="none" stroke="black"/>
                <path d="M 552,1392 L 552,1520" fill="none" stroke="black"/>
                <path d="M 568,400 L 568,1696" fill="none" stroke="black"/>
                <path d="M 16,128 L 176,128" fill="none" stroke="black"/>
                <path d="M 200,128 L 224,128" fill="none" stroke="black"/>
                <path d="M 16,160 L 176,160" fill="none" stroke="black"/>
                <path d="M 224,192 L 248,192" fill="none" stroke="black"/>
                <path d="M 16,224 L 176,224" fill="none" stroke="black"/>
                <path d="M 16,272 L 176,272" fill="none" stroke="black"/>
                <path d="M 200,272 L 224,272" fill="none" stroke="black"/>
                <path d="M 8,400 L 88,400" fill="none" stroke="black"/>
                <path d="M 104,400 L 568,400" fill="none" stroke="black"/>
                <path d="M 24,448 L 224,448" fill="none" stroke="black"/>
                <path d="M 24,496 L 224,496" fill="none" stroke="black"/>
                <path d="M 24,560 L 192,560" fill="none" stroke="black"/>
                <path d="M 24,608 L 192,608" fill="none" stroke="black"/>
                <path d="M 64,672 L 200,672" fill="none" stroke="black"/>
                <path d="M 248,672 L 360,672" fill="none" stroke="black"/>
                <path d="M 416,672 L 528,672" fill="none" stroke="black"/>
                <path d="M 208,704 L 240,704" fill="none" stroke="black"/>
                <path d="M 368,704 L 408,704" fill="none" stroke="black"/>
                <path d="M 248,736 L 360,736" fill="none" stroke="black"/>
                <path d="M 64,752 L 200,752" fill="none" stroke="black"/>
                <path d="M 416,752 L 528,752" fill="none" stroke="black"/>
                <path d="M 296,800 L 432,800" fill="none" stroke="black"/>
                <path d="M 56,864 L 200,864" fill="none" stroke="black"/>
                <path d="M 248,864 L 344,864" fill="none" stroke="black"/>
                <path d="M 408,864 L 552,864" fill="none" stroke="black"/>
                <path d="M 208,880 L 240,880" fill="none" stroke="black"/>
                <path d="M 352,880 L 400,880" fill="none" stroke="black"/>
                <path d="M 56,928 L 200,928" fill="none" stroke="black"/>
                <path d="M 408,976 L 552,976" fill="none" stroke="black"/>
                <path d="M 56,1024 L 200,1024" fill="none" stroke="black"/>
                <path d="M 208,1040 L 240,1040" fill="none" stroke="black"/>
                <path d="M 248,1056 L 344,1056" fill="none" stroke="black"/>
                <path d="M 208,1088 L 248,1088" fill="none" stroke="black"/>
                <path d="M 56,1120 L 200,1120" fill="none" stroke="black"/>
                <path d="M 424,1152 L 552,1152" fill="none" stroke="black"/>
                <path d="M 424,1216 L 552,1216" fill="none" stroke="black"/>
                <path d="M 296,1280 L 552,1280" fill="none" stroke="black"/>
                <path d="M 296,1328 L 552,1328" fill="none" stroke="black"/>
                <path d="M 56,1392 L 208,1392" fill="none" stroke="black"/>
                <path d="M 296,1392 L 552,1392" fill="none" stroke="black"/>
                <path d="M 248,1424 L 288,1424" fill="none" stroke="black"/>
                <path d="M 56,1520 L 208,1520" fill="none" stroke="black"/>
                <path d="M 296,1520 L 552,1520" fill="none" stroke="black"/>
                <path d="M 24,1584 L 520,1584" fill="none" stroke="black"/>
                <path d="M 24,1664 L 520,1664" fill="none" stroke="black"/>
                <path d="M 8,1696 L 80,1696" fill="none" stroke="black"/>
                <path d="M 96,1696 L 568,1696" fill="none" stroke="black"/>
                <path d="M 16,1872 L 152,1872" fill="none" stroke="black"/>
                <path d="M 16,1920 L 152,1920" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="520,1272 508,1266.4 508,1277.6" fill="black" transform="rotate(90,512,1272)"/>
                <polygon class="arrowhead" points="520,1144 508,1138.4 508,1149.6" fill="black" transform="rotate(90,512,1144)"/>
                <polygon class="arrowhead" points="520,856 508,850.4 508,861.6" fill="black" transform="rotate(90,512,856)"/>
                <polygon class="arrowhead" points="416,704 404,698.4 404,709.6" fill="black" transform="rotate(0,408,704)"/>
                <polygon class="arrowhead" points="360,880 348,874.4 348,885.6" fill="black" transform="rotate(180,352,880)"/>
                <polygon class="arrowhead" points="328,1384 316,1378.4 316,1389.6" fill="black" transform="rotate(90,320,1384)"/>
                <polygon class="arrowhead" points="328,1064 316,1058.4 316,1069.6" fill="black" transform="rotate(270,320,1064)"/>
                <polygon class="arrowhead" points="304,856 292,850.4 292,861.6" fill="black" transform="rotate(90,296,856)"/>
                <polygon class="arrowhead" points="248,1040 236,1034.4 236,1045.6" fill="black" transform="rotate(0,240,1040)"/>
                <polygon class="arrowhead" points="248,880 236,874.4 236,885.6" fill="black" transform="rotate(0,240,880)"/>
                <polygon class="arrowhead" points="248,704 236,698.4 236,709.6" fill="black" transform="rotate(0,240,704)"/>
                <polygon class="arrowhead" points="216,1088 204,1082.4 204,1093.6" fill="black" transform="rotate(180,208,1088)"/>
                <polygon class="arrowhead" points="104,1016 92,1010.4 92,1021.6" fill="black" transform="rotate(90,96,1016)"/>
                <polygon class="arrowhead" points="104,856 92,850.4 92,861.6" fill="black" transform="rotate(90,96,856)"/>
                <polygon class="arrowhead" points="104,664 92,658.4 92,669.6" fill="black" transform="rotate(90,96,664)"/>
                <polygon class="arrowhead" points="104,552 92,546.4 92,557.6" fill="black" transform="rotate(90,96,552)"/>
                <polygon class="arrowhead" points="104,216 92,210.4 92,221.6" fill="black" transform="rotate(90,96,216)"/>
                <polygon class="arrowhead" points="104,120 92,114.4 92,125.6" fill="black" transform="rotate(90,96,120)"/>
                <polygon class="arrowhead" points="96,1864 84,1858.4 84,1869.6" fill="black" transform="rotate(90,88,1864)"/>
                <polygon class="arrowhead" points="96,1744 84,1738.4 84,1749.6" fill="black" transform="rotate(90,88,1744)"/>
                <polygon class="arrowhead" points="96,1576 84,1570.4 84,1581.6" fill="black" transform="rotate(90,88,1576)"/>
                <polygon class="arrowhead" points="96,1384 84,1378.4 84,1389.6" fill="black" transform="rotate(90,88,1384)"/>
                <polygon class="arrowhead" points="40,1576 28,1570.4 28,1581.6" fill="black" transform="rotate(90,32,1576)"/>
                <g class="text">
                  <text x="52" y="36">Incoming</text>
                  <text x="36" y="52">LAKE</text>
                  <text x="96" y="52">message_1</text>
                  <text x="52" y="148">Decode</text>
                  <text x="120" y="148">message_1</text>
                  <text x="280" y="196">(Core</text>
                  <text x="324" y="196">LAKE</text>
                  <text x="392" y="196">Processing)</text>
                  <text x="60" y="244">Accepted</text>
                  <text x="132" y="244">selected</text>
                  <text x="52" y="260">cipher</text>
                  <text x="104" y="260">suite</text>
                  <text x="40" y="340">Control</text>
                  <text x="120" y="340">transferred</text>
                  <text x="180" y="340">to</text>
                  <text x="24" y="356">the</text>
                  <text x="100" y="356">side-processor</text>
                  <text x="188" y="356">object</text>
                  <text x="420" y="420">Side</text>
                  <text x="484" y="420">processing</text>
                  <text x="56" y="468">Check</text>
                  <text x="112" y="468">whether</text>
                  <text x="180" y="468">expected</text>
                  <text x="48" y="484">EAD</text>
                  <text x="88" y="484">items</text>
                  <text x="128" y="484">are</text>
                  <text x="172" y="484">absent</text>
                  <text x="44" y="580">0.</text>
                  <text x="76" y="580">Does</text>
                  <text x="108" y="580">an</text>
                  <text x="136" y="580">EAD</text>
                  <text x="52" y="596">item</text>
                  <text x="104" y="596">specify</text>
                  <text x="160" y="596">CRED?</text>
                  <text x="52" y="644">NO</text>
                  <text x="120" y="644">YES</text>
                  <text x="84" y="692">1.</text>
                  <text x="116" y="692">Does</text>
                  <text x="148" y="692">an</text>
                  <text x="176" y="692">EAD</text>
                  <text x="220" y="692">NO</text>
                  <text x="268" y="692">3.</text>
                  <text x="316" y="692">Retrieve</text>
                  <text x="436" y="692">4.</text>
                  <text x="460" y="692">Is</text>
                  <text x="488" y="692">the</text>
                  <text x="92" y="708">item</text>
                  <text x="136" y="708">point</text>
                  <text x="172" y="708">to</text>
                  <text x="276" y="708">CRED</text>
                  <text x="312" y="708">via</text>
                  <text x="464" y="708">retrieval</text>
                  <text x="84" y="724">an</text>
                  <text x="128" y="724">already</text>
                  <text x="268" y="724">an</text>
                  <text x="296" y="724">EAD</text>
                  <text x="332" y="724">item</text>
                  <text x="436" y="724">of</text>
                  <text x="468" y="724">CRED</text>
                  <text x="100" y="740">stored</text>
                  <text x="152" y="740">CRED?</text>
                  <text x="472" y="740">successful?</text>
                  <text x="452" y="788">NO</text>
                  <text x="536" y="788">YES</text>
                  <text x="120" y="836">YES</text>
                  <text x="220" y="868">NO</text>
                  <text x="384" y="868">YES</text>
                  <text x="76" y="884">2.</text>
                  <text x="100" y="884">Is</text>
                  <text x="132" y="884">this</text>
                  <text x="172" y="884">CRED</text>
                  <text x="272" y="884">11.</text>
                  <text x="312" y="884">Abort</text>
                  <text x="428" y="884">5.</text>
                  <text x="452" y="884">Is</text>
                  <text x="480" y="884">the</text>
                  <text x="520" y="884">trust</text>
                  <text x="88" y="900">still</text>
                  <text x="136" y="900">valid</text>
                  <text x="176" y="900">and</text>
                  <text x="272" y="900">the</text>
                  <text x="308" y="900">LAKE</text>
                  <text x="444" y="900">policy</text>
                  <text x="492" y="900">used</text>
                  <text x="100" y="916">trusted?</text>
                  <text x="288" y="916">session</text>
                  <text x="476" y="916">"NO-LEARNING",</text>
                  <text x="448" y="932">without</text>
                  <text x="496" y="932">any</text>
                  <text x="460" y="948">acceptable</text>
                  <text x="464" y="964">exceptions?</text>
                  <text x="120" y="996">YES</text>
                  <text x="404" y="1012">Here</text>
                  <text x="440" y="1012">the</text>
                  <text x="480" y="1012">trust</text>
                  <text x="532" y="1012">NO</text>
                  <text x="220" y="1028">NO</text>
                  <text x="412" y="1028">policy</text>
                  <text x="460" y="1028">used</text>
                  <text x="492" y="1028">is</text>
                  <text x="76" y="1044">9.</text>
                  <text x="100" y="1044">Is</text>
                  <text x="132" y="1044">this</text>
                  <text x="172" y="1044">CRED</text>
                  <text x="432" y="1044">"LEARNING",</text>
                  <text x="492" y="1044">or</text>
                  <text x="84" y="1060">good</text>
                  <text x="116" y="1060">to</text>
                  <text x="144" y="1060">use</text>
                  <text x="172" y="1060">in</text>
                  <text x="440" y="1060">"NO-LEARNING"</text>
                  <text x="80" y="1076">the</text>
                  <text x="128" y="1076">context</text>
                  <text x="172" y="1076">of</text>
                  <text x="420" y="1076">together</text>
                  <text x="476" y="1076">with</text>
                  <text x="84" y="1092">this</text>
                  <text x="124" y="1092">LAKE</text>
                  <text x="396" y="1092">an</text>
                  <text x="452" y="1092">overriding</text>
                  <text x="100" y="1108">session?</text>
                  <text x="424" y="1108">exception</text>
                  <text x="444" y="1172">6.</text>
                  <text x="484" y="1172">Assess</text>
                  <text x="524" y="1172">if</text>
                  <text x="452" y="1188">CRED</text>
                  <text x="484" y="1188">is</text>
                  <text x="520" y="1188">valid</text>
                  <text x="448" y="1204">and</text>
                  <text x="496" y="1204">trusted</text>
                  <text x="112" y="1252">YES</text>
                  <text x="340" y="1252">NO</text>
                  <text x="316" y="1300">7.</text>
                  <text x="340" y="1300">Is</text>
                  <text x="372" y="1300">CRED</text>
                  <text x="416" y="1300">valid</text>
                  <text x="456" y="1300">and</text>
                  <text x="368" y="1316">(provisionally)</text>
                  <text x="468" y="1316">trusted?</text>
                  <text x="344" y="1364">YES</text>
                  <text x="80" y="1412">10.</text>
                  <text x="132" y="1412">Continue</text>
                  <text x="180" y="1412">by</text>
                  <text x="316" y="1412">8.</text>
                  <text x="352" y="1412">Store</text>
                  <text x="396" y="1412">CRED</text>
                  <text x="428" y="1412">as</text>
                  <text x="464" y="1412">valid</text>
                  <text x="504" y="1412">and</text>
                  <text x="112" y="1428">considering</text>
                  <text x="180" y="1428">this</text>
                  <text x="368" y="1428">(provisionally)</text>
                  <text x="468" y="1428">trusted.</text>
                  <text x="84" y="1444">CRED</text>
                  <text x="116" y="1444">as</text>
                  <text x="144" y="1444">the</text>
                  <text x="124" y="1460">authentication</text>
                  <text x="324" y="1460">Pair</text>
                  <text x="364" y="1460">CRED</text>
                  <text x="404" y="1460">with</text>
                  <text x="468" y="1460">consistent</text>
                  <text x="108" y="1476">credential</text>
                  <text x="348" y="1476">credential</text>
                  <text x="444" y="1476">identifiers,</text>
                  <text x="512" y="1476">for</text>
                  <text x="108" y="1492">associated</text>
                  <text x="172" y="1492">with</text>
                  <text x="324" y="1492">each</text>
                  <text x="384" y="1492">supported</text>
                  <text x="444" y="1492">type</text>
                  <text x="476" y="1492">of</text>
                  <text x="80" y="1508">the</text>
                  <text x="120" y="1508">other</text>
                  <text x="164" y="1508">peer</text>
                  <text x="348" y="1508">credential</text>
                  <text x="440" y="1508">identifier.</text>
                  <text x="48" y="1604">12.</text>
                  <text x="96" y="1604">Process</text>
                  <text x="144" y="1604">the</text>
                  <text x="176" y="1604">EAD</text>
                  <text x="216" y="1604">items</text>
                  <text x="260" y="1604">that</text>
                  <text x="300" y="1604">have</text>
                  <text x="336" y="1604">not</text>
                  <text x="372" y="1604">been</text>
                  <text x="432" y="1604">processed</text>
                  <text x="492" y="1604">yet.</text>
                  <text x="52" y="1636">Make</text>
                  <text x="88" y="1636">all</text>
                  <text x="120" y="1636">the</text>
                  <text x="168" y="1636">results</text>
                  <text x="212" y="1636">of</text>
                  <text x="240" y="1636">the</text>
                  <text x="272" y="1636">EAD</text>
                  <text x="332" y="1636">processing</text>
                  <text x="416" y="1636">available</text>
                  <text x="468" y="1636">to</text>
                  <text x="56" y="1652">build</text>
                  <text x="96" y="1652">the</text>
                  <text x="132" y="1652">next</text>
                  <text x="172" y="1652">LAKE</text>
                  <text x="228" y="1652">message.</text>
                  <text x="40" y="1780">Control</text>
                  <text x="120" y="1780">transferred</text>
                  <text x="188" y="1780">back</text>
                  <text x="20" y="1796">to</text>
                  <text x="48" y="1796">the</text>
                  <text x="84" y="1796">core</text>
                  <text x="124" y="1796">LAKE</text>
                  <text x="188" y="1796">processing</text>
                  <text x="56" y="1892">Advance</text>
                  <text x="104" y="1892">the</text>
                  <text x="184" y="1892">(Core</text>
                  <text x="228" y="1892">LAKE</text>
                  <text x="296" y="1892">processing)</text>
                  <text x="60" y="1908">protocol</text>
                  <text x="120" y="1908">state</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
  Incoming
  LAKE message_1

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

 Control transferred to
 the side-processor object

           |
+----------|----------------------------------------------------------+
|          |                                      Side processing     |
|          |                                                          |
| +------------------------+                                          |
| | Check whether expected |                                          |
| | EAD items are absent   |                                          |
| +------------------------+                                          |
|          |                                                          |
|          |                                                          |
|          v                                                          |
| +--------------------+                                              |
| | 0. Does an EAD     |                                              |
| | item specify CRED? |                                              |
| +--------------------+                                              |
|  |       |                                                          |
|  | NO    | YES                                                      |
|  |       v                                                          |
|  |   +----------------+     +-------------+      +-------------+    |
|  |   | 1. Does an EAD | NO  | 3. Retrieve |      | 4. Is the   |    |
|  |   | item point to  |---->| CRED via    |----->| retrieval   |    |
|  |   | an already     |     | an EAD item |      | of CRED     |    |
|  |   | stored CRED?   |     +-------------+      | successful? |    |
|  |   +----------------+                          +-------------+    |
|  |       |                                         |         |      |
|  |       |                                         | NO      | YES  |
|  |       |                        +----------------+         |      |
|  |       |                        |                          |      |
|  |       | YES                    |                          |      |
|  |       v                        v                          v      |
|  |  +-----------------+ NO  +-----------+   YES +-----------------+ |
|  |  | 2. Is this CRED |---->| 11. Abort |<------| 5. Is the trust | |
|  |  | still valid and |     | the LAKE  |       | policy used     | |
|  |  | trusted?        |     | session   |       | "NO-LEARNING",  | |
|  |  +-----------------+     |           |       | without any     | |
|  |       |                  |           |       | acceptable      | |
|  |       |                  |           |       | exceptions?     | |
|  |       |                  |           |       +-----------------+ |
|  |       | YES              |           |                    |      |
|  |       v                  |           |     Here the trust | NO   |
|  |  +-----------------+ NO  |           |     policy used is |      |
|  |  | 9. Is this CRED |---->|           |     "LEARNING", or |      |
|  |  | good to use in  |     +-----------+     "NO-LEARNING"  |      |
|  |  | the context of  |              ^        together with  |      |
|  |  | this LAKE       |<----+        |        an overriding  |      |
|  |  | session?        |     |        |        exception      |      |
|  |  +-----------------+     |        |                       |      |
|  |      |                   |        |                       v      |
|  |      |                   |        |            +---------------+ |
|  |      |                   |        |            | 6. Assess if  | |
|  |      |                   |        |            | CRED is valid | |
|  |      |                   |        |            | and trusted   | |
|  |      |                   |        |            +---------------+ |
|  |      |                   |        |                       |      |
|  |      | YES               |        | NO                    |      |
|  |      |                   |        |                       v      |
|  |      |                   |     +-------------------------------+ |
|  |      |                   |     | 7. Is CRED valid and          | |
|  |      |                   |     | (provisionally) trusted?      | |
|  |      |                   |     +-------------------------------+ |
|  |      |                   |        |                              |
|  |      |                   |        | YES                          |
|  |      v                   |        v                              |
|  |  +------------------+    |     +-------------------------------+ |
|  |  | 10. Continue by  |    |     | 8. Store CRED as valid and    | |
|  |  | considering this |    +-----| (provisionally) trusted.      | |
|  |  | CRED as the      |          |                               | |
|  |  | authentication   |          | Pair CRED with consistent     | |
|  |  | credential       |          | credential identifiers, for   | |
|  |  | associated with  |          | each supported type of        | |
|  |  | the other peer   |          | credential identifier.        | |
|  |  +------------------+          +-------------------------------+ |
|  |      |                                                           |
|  |      |                                                           |
|  v      v                                                           |
| +-------------------------------------------------------------+     |
| | 12. Process the EAD items that have not been processed yet. |     |
| |                                                             |     |
| | Make all the results of the EAD processing available to     |     |
| | build the next LAKE message.                                |     |
| +-------------------------------------------------------------+     |
|         |                                                           |
+---------|-----------------------------------------------------------+
          |
          |
          v

 Control transferred back
 to the core LAKE processing

          |
          |
          v
 +----------------+
 | Advance the    | (Core LAKE processing)
 | protocol state |
 +----------------+
]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <section anchor="sec-07-08">
        <name>Version -07 to -08</name>
        <ul spacing="normal">
          <li>
            <t>Renamed EDHOC to LAKE as appropriate.</t>
          </li>
          <li>
            <t>Updated text and figures on what happens if rerunning LAKE fails.</t>
          </li>
          <li>
            <t>Revised handling of invalid application keys or bound access rights become invalid.</t>
          </li>
          <li>
            <t>Retaining the latest state of completed sessions does not need persistent storage.</t>
          </li>
          <li>
            <t>Generalized handling of incoming error messages.</t>
          </li>
          <li>
            <t>Exception on unauthenticated operation moved to separate subsection.</t>
          </li>
          <li>
            <t>Editorial split between what the SPO provides and an example of how it can be implemented.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-06-07">
        <name>Version -06 to -07</name>
        <ul spacing="normal">
          <li>
            <t>Discussed retention of completed EDHOC sessions.</t>
          </li>
          <li>
            <t>Discussed handling of incoming EDHOC error messages in a completed EDHOC session.</t>
          </li>
          <li>
            <t>Clarifications:  </t>
            <ul spacing="normal">
              <li>
                <t>An EAD field can include one or more EAD items.</t>
              </li>
              <li>
                <t>Use of a new EAD item in the EDHOC and OSCORE profile of ACE.</t>
              </li>
              <li>
                <t>Table summarizing expected behavior for different trust policies.</t>
              </li>
              <li>
                <t>Scope limited to authentication methods defined in RFC 9528.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Consistency alignments with draft-ietf-ace-edhoc-oscore-profile.</t>
          </li>
          <li>
            <t>Editorial fixes and improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-05-06">
        <name>Version -05 to -06</name>
        <ul spacing="normal">
          <li>
            <t>Generalized trust assessment of authentication credentials.</t>
          </li>
          <li>
            <t>Revised discussion on the ELA procedure, based on upcoming updates expected in version -07 of draft-ietf-lake-authz.</t>
          </li>
          <li>
            <t>Added side-processing check about the absence of expected EAD items in incoming EDHOC messages.</t>
          </li>
          <li>
            <t>Added "Operational Considerations" section.</t>
          </li>
          <li>
            <t>Editorial fixes and improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-04-05">
        <name>Version -04 to -05</name>
        <ul spacing="normal">
          <li>
            <t>Minor clarifications.</t>
          </li>
          <li>
            <t>Editorial fixes and improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-03-04">
        <name>Version -03 to -04</name>
        <ul spacing="normal">
          <li>
            <t>Clarified and re-positioned exceptions to NO-LEARNING policy.</t>
          </li>
          <li>
            <t>Added security considerations.</t>
          </li>
          <li>
            <t>Appendix on foreseen advanced processing of incoming EDHOC message_1.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-02-03">
        <name>Version -02 to -03</name>
        <ul spacing="normal">
          <li>
            <t>Consistent use of "trust policy" instead of "trust model".</t>
          </li>
          <li>
            <t>More modular presentation of trust policies and their enforcement.</t>
          </li>
          <li>
            <t>Alignment with use of EDHOC in the EDHOC and OSCORE profile of ACE.</t>
          </li>
          <li>
            <t>Note on follow-up actions for the application after EDHOC completion.</t>
          </li>
          <li>
            <t>Removed moot section on special handling when using the EDHOC and OSCORE profile of ACE.</t>
          </li>
          <li>
            <t>Consistency checks of authentication credentials from ID_CRED and EAD items.</t>
          </li>
          <li>
            <t>Updated reference.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-01-02">
        <name>Version -01 to -02</name>
        <ul spacing="normal">
          <li>
            <t>Improved content on the EDHOC and OSCORE profile of ACE.</t>
          </li>
          <li>
            <t>Admit situation-specific exceptions to the "NO-LEARNING" policy.</t>
          </li>
          <li>
            <t>Using the EDHOC and OSCORE profile of ACE with the "NO-LEARNING" policy.</t>
          </li>
          <li>
            <t>Revised guidelines on using EDHOC with CoAP and Block-wise.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-00-01">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>
            <t>Added considerations on trust policies when using the EDHOC and OSCORE profile of the ACE framework.</t>
          </li>
          <li>
            <t>Placeholder section on special processing when using the EDHOC and OSCORE profile of the ACE framework.</t>
          </li>
          <li>
            <t>Added considerations on using EDHOC with CoAP and Block-wise.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The author sincerely thanks <contact fullname="Christian Amsüss"/>, <contact fullname="Geovane Fedrecheski"/>, <contact fullname="Rikard Höglund"/>, <contact fullname="Elsa Lopez-Perez"/>, <contact fullname="John Preuß Mattsson"/>, <contact fullname="Göran Selander"/>, <contact fullname="Brian Sipos"/>, <contact fullname="Yuxuan Song"/>, and <contact fullname="Mališa Vučinić"/> for their comments and feedback.</t>
      <t>The work on this document has been partly supported by the Sweden's Innovation Agency VINNOVA and the Celtic-Next project CYPRESS.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
pu8yt9uLSJ9kCkqOpKWk3/+TL53n5tLx1W1MPwrTjg4rR+GSyy2dlAuSxhym
PuCiTyvtYdcUesjqYUq88AVG9fTEQG3LXan1hvTJ4qw0mrS1vpM21WrE5hId
S3MbO0qpr6zVqK0Rn3veKKLCdrncdJi0WtARW3Qiho94I6zDqS8KmvJyl3gc
NDBOlXqX+YrYa9MhWOHzKzSaa1/6puZa+LB2u6keJWfkln1flJezbHLWXvVQ
UyW8sTANyUij/nhH8Hx+xtWeVLSdGNH2NEu882tlWlzhTMqpOk7TUmo1FDaH
ZIrAVc4x0jYBwgK+LBQ7PU21ZXSYVpJPowhENDnrU0FY1aqmVM8tILWMVtKt
ztimqVv1dhCGjcVIVRhjgR7tRKTTBCebBFHfqKOroWywuKrG4e1mAkbDE4Uf
Jw67f67nxHmTtG4Tmd5cM3lddI52iiTP+2t0hqeWoxjZrupmH6wxnbpdA4uJ
MZijnR7exZvHoomi6qcr0POdwod1V7GmKLo1zpyTU8jP4gbWlg3rkjEdeIL4
hFYn6WrxFcJ+G1vWF9aO5cZ7xI1iWOa14vOmHUeJRGn30M7hr+FIsrHIytN1
UjhRybkdrqwEqnbWUOeSU8OKndEVQqHBOUZ03OSe0MwNW5jVEdz1ECZOMIJ1
EJtUUEnoWLHyr+6eV96YLTUlyUzClW6PDIKUWae1b+GyFiK2GLH1SDbL7N4X
1jrJRj0gv1dsoaMHxebkV9rGZ7i06VHowjFHXRBzmvHEjT3e3LKOlJV4Ilbo
LfS3QK00eAHnxSqLmCm90r0tNT2PbK0211rF/EuySRyriUaa5GFRuptes/7U
ZGGGr5q97LHIJu270m9A/q5ZIXoCYpJzyyFQYenI3ed+BwDIvpgRHgsvtaTO
QSTDp4ZGODISOqfQXDErp5D2WX5K3B2rDGqLZRKYqDT1du9TptiVmtyNmh26
UKoc7Z9Ep640Ri+S0HOkLbAlU/mPOpl/QlQZySg4aaZfu1Q5s8Y9Sdt1aopr
HXHveG5sHNidwdw2uzsYOaCytdkYf6cHNjIrdC3Ymqu2KHjTQCRXRL60xq9m
9IB7mgfMtCWR/ogiFlo596Xvg0cmRylJDjGCTCBpF2ondpxRZPGNGrL0rnX8
p1GDp+sWNIcBvQsv1A+6AEWD9I6LPLtUkYgpemANlGY2YXggCJPl7MKGpJ2m
4/dnFRb3HCR1aSOiaAGcQmi3gHU/patPYJRLAqfekaxnAjQ6xoNGEX1AdZbZ
+sufEh0bE3uPlZku6W5GslnLK6F0Sc8jBhJ3lrFG5bCbdELtzvluKxwTBHG2
4OAQidNvfUzWqKW5cSuU/6lnu1G801WIk01l+5u9LNZSCmJC2m5dksxN7KX1
Oh1IYFbrNZn3v2350jtgFGHkF9J/4IyHuZ/oJXIyzoq0ysu4292er7DvDjXc
ENVbDinw+UuvLIjZqJs4BXKbupXUOjlJXZPgD3S/vTBuyOi80QuJjkeMG2hv
VxGUTR1QHJuZvwnJs7GGvgP0ozcDIv1nyb51FIeCtiR2poOkgEnBqEcHB8fv
sEBxWLc73jLIBK1Ew0dcmPtNkFJlF1fu1QJf2zyo0XJobbcf1Bt5ZewY3eOi
NvKdpONGOxGhqCNV7d1AEIexRYo5W3/YVptTebufV3nv7ZuXLKPsN1RTxqto
xfw37DRbycSU1hKDYnBhK8S4A11yjVaJNao12FKUUbluQWjKC6md4hng3FAz
W0tb22l5ZY39pEWRm8xKzOMmdHhb22bQ11ITuS8UW2x54MSOAH32qKL8i4ak
A+Hkda0CLYdM+qXqfX+ot3/saHOD9xHJVARUonD09LH+ZkunRNvYxEcxBGes
I0rlwut9ERo3zXl9kJxS4RyOHSFCEDNczieV7in8RyD3h7PjaKFz42Lf42pM
UvK0sRa7eCQhdJrOpuQy5X3ktiD8mhVXkpPnQKzASWnn27mjPjKEBQwpRbiW
1h6NGuxW9ozsC+LWHLpKykZNMrLrwIMqUw3WHrs3jUBrL1NB4n1qP8CFZcEY
ruX81Xc5fesOFuynn3WlOBEnNNOFz660lUMrd/M1FU+pZzwjFWms45R6MNU6
RbmOTMwPCHsgk515kqIJL3Qr0jtJRZQlIiw8r7VKVm3WJjWnRBrqkuzUVA7y
qK/1+887gsrmwG/NpHEQGJwP6K9y4qdWhCWacuM5PboxJNMMx+JAUDUD+fQO
nCyI9tvjeHKj3ltCb8u9KJtNNAYuz9GQfcaESyFbIJdOqekBTW7bVyTzZasm
6V1WvkIZ7r3VWhQtvix48OMeRliAHo1G4qgsCNLAB+cKaFoxsvlpJgUdENzC
gKPyXqhNXWakU/kiTZxhzdL32RAf/F15lBWI3zYy3aw1eMvYgrfF5GOtG1vG
5LEdi3frdltEQ0wDq/nPYUmiQFGlJDmggbdRQtWQPCeMSLT7KkqjWVGBHkHK
iYiFv0i8m3mJZESQ2KulhCG/Zdb6Cxf1kX0AWD/TrUat3opJWanDSkoK3pFJ
63wi/Pktjftzf7no7V1Forct0lAQVmnrblm1pXVyzRhMt0Wkn4tqE2UZ08Yk
ROi8DE14lnrFjKIZawHhE7s6oY5ouTTGoro6vvD0ttOdEMgy/gCIuTGVtgG5
BHl504kp0ZIBO1PWZEwjuXSIaSwgjvDYZt4A4Y+6EZ634Nt4m6hbowuR1UlR
BjQ5peftICdBqFCvBCweJGm0HXj0r4W33fbFiFjqcyJ7J9pzzoFN5Eh922p1
aFzf+ZLp4ia3OHnYYR9vccq8QE5j/L1sRGqG1Cu2IZRv0ry2sdmkh+geOUUv
3RvMac73VhSX2uQz612gGeGpFigzGV/WPSksk0VlRu1lXp+7bv4Iy/+F08ol
i5TNsrn6OXrcWnnNHoZo3EGEzszVxswj1csjKA/mpNeHR8UEptiLQEWvyPJs
cQUJaeBNSJeecz48JeQiuCnLuBX1PGqnnrBKAXEhCbf3kxQYE3UXHga3RAKI
cW8LNwFnkrzWOGaR5BrhzSLJpV5/MaujubkzfMQp3EFiJGxSlusddqLKtUyw
V3jrhoHmqPQgE72y4seKa+HRU5o1G5SffT760i/+6Lr60XBcVmmVox+J4spC
CY4bfa8KjAoqOA5mObzKlkMrdE3oADJJYAquth9b08HbGUSDfICtSJezDJ0i
HAiO+bNOGLTNAn4WSWHCLn1a98zNXKLqgzwMTO+MU2EC/RJDY9x2ayYyBuPE
OmBRXtoJPMoKg9lGv3SrFm01uoTs6hBju4aWAMgi7pRFs8nQaTMVmokqsCwj
UXRILkGe2jRbjs+/MH6DrtS3wqtZoae5FpnYOJNgIFS583pu+7jBadZrzGGB
BgTH/kWKJ4f9whu5PgFn+o0woIlRaNf27TDsz4W/3v3GoY6/JX9JdgYJ3IeP
iCYeO5ExXspVCBejbNAT5aJhj81RdvpPGyVPjS1fXBxaNpkzBC1CyG2IIUSS
B82OQpryZnpWZZkb1riq6Fdxj3NXeanMhn0ZhR75creOt0WqcUGUwaJeTqea
3aZsrSE3j8d41fvSfE4SwHk2W9jyAEiSRXqRn2kUXGyqcxY30KbMNYrySEip
YXkWRcYJGgmDalaHxCfs9O0Boux84F8leetWBaPbyeehEgTwAGf/v8Djopnz
6jhT29uNksAc/qf+bE/WDuW1snIfOY7J9aVJsY+FKIgDkbaNOnjW3QpOkF3J
CBxXVwtXgPeEaJt4YtPjta51kvzcF1tlJVGi+Kgqxixs6K0jvmiTq2blndjK
w9w+O0/le3aen2PBaa+OqGkf6JAeCx82y5vEyfZK2uZOClFmmkBKJeQ16tJJ
flakGLb4rqzevdrbF97UoBZv6wj5LyT1M6XoQ1cYc1LkkS8+sjEvgSzHOMdT
y3L5vpPxhxPDVR9LhZ2t/ZPjbXZk7j79+gky7pcc+KhOeGsaieKy1ARLWyzC
FFDBYrJ0VcA7KlgFJwp3jzPo0DSMosuCCulTeVBWWM0NSHykyNn3wf57nqW9
lJs9anHWiypbqItwckElT9Nk073P8UCeYsGmzWTr5Oj1thIic50xvqwR6CqI
1swF21OBefYhawsKrHPWmR/NChOwCaFp5fb0cIKBZFyepwDArteOpGiKoyAt
VOVMoxtwANmKimgl0MxcsUPTTXmLyb4+SQJRSE5x1LI96gocEATA6s5hHsMZ
SOMzYf4e88IJ4+wyDPjEKuYmnjyjU6ZleauLfIxXil+/FMuZsdNfZNAhiD9+
0t9Ea+LKEzgIRjPo4EL79r4U7QX959VqbHglSpfDI0NTr4mmjCSZ26dpChsb
L7ggjLN67OYhV2qTYBRAbbcRg3LownuJ0y0NrWPZFetIWIkI+kzTBJirurYn
tUsZrpJShWcnacOwQreE9DLiXDf890+O+olmPbwFJCSlqU0F73qTi5JWrYnt
YsllQdEyTzE6osNQiWmBxh5PoG3k/H8dLfKLNAy6Ek09KlUyd0urLHEbZhC/
zMh67rDvmKgLcFV0GrQsty1KTNDQlJBChJjaAbWWjnGIS1agsQNaIioQ24LA
NEZe1PexLX4oUp4xciyEMTBE/D7D3HaJaFYsGzRaFK8Ww2U5nFBSwz0u2Ub+
YROg7oXzpMUFT91PVsY7aZOa6uQyw4Avx17vtxSwQ4rb048BDPuFA/qouxQP
lFfOyVE+dFG+78uE+FHhQHut94A7oX68HkP/pAu4BFtyETIcMTM8K+avOMTA
3TxwDezE33ea5Nh6jUbm8MQ5EIOxfoGEJLLhRIS7OpsxeYHUck71+4DGRq1z
CYXs2MSeIcF/nhyzq5Am+crmZIlILjH+4f2O0o8rSKq8Kc/ZikAd0qUT2dwx
j6i864u3Ihl7wnDHmO1Ye7x2B21VwdYdFKy90jCe3KN1gEZNsCyBGmKUwc01
r88bQcsKJXmxWDkda9bvPx2BiSP127gNupEuSr2y0USwgIsPh5HdRL3JYECn
66kRW97um+f7b4y9tRCP2v3FtSqQsc+mGylLi1wspOPzbe85TaNHyPCsDL6b
Y9IZZanm2fAlsMQ5SuMmwa1Ovn/3K73w/bu/WvXAhr0Qm7QcMsKPzTI77GEG
sF/LI5Kb5xSJIsB7KFBbdZqmYDGYzaQhW1BG6JWZVFyYeUU3YzJ0ove41BtZ
qiclK7ELLHMFLBYTiinatES6FIoIz0Ags4tYrQRPihpbxzWG2rQEsWYx3mwT
QxPKnnjHup4yHcTXXbJ08m6WnmYzcysGEpKzD6AxlqCN/p7FpLCGDEYZ4r+Q
v2pFJgInMv0ChPeU+tKYsn4ZVUy19YjNlW1Dql+5wQyOtCw2iJqzWkAXQari
/hTotjTTtlWSOFVP5gicsCh5knbtKUWTUAqBmWKVYd4VjR3KpT3EUr7SovMu
1MerUy+4aqtOe6vOVWsnzcoJOtUWLGiYvLpMr7YNWWCnmNpYMHj3XS5siSzY
cZUonQmY0EahNqFLX6zxj0hwN/ktz8yIVqZkI4ihd2306OTmLn3R9PK8nDWr
eZmUFHO4KAJYuObcqVfq3EDsc/DFPs1qibFZVpFx1i1Zjcu0fl+rydCIXuai
M+VOSVX1sw1fAUPJ2N8eK0PGpdhYR8FSYqmNWoXrJ2Uzjyj/fF+QfO606lq2
S/iUJtiwI1H8AKpEdrM4kW+eiTeHz67WGHCzT3RVFPOjCq/jym7Kqq+0aqTX
gWgan5FtJ4rymIcV7pNInJONIJJV4i4h5DkNxYGCOdKLkk+Oq0aPyxqBO9Yl
Tf05N+XchAf5laruYs+2QgKJUWgxZ1PKF8Av1OJarxmiR3iZQ0mxeFuTtld6
+X1uTt8W1Y9sF8iATXnha0bQVOuil3yrSfNavyAvJAOITIN+mpTGjrhNEBvF
KeWC4l9MEMX4asiHkVTiIeKspqZ+6igUucr2oiMRLab6k07JJlCFrQd9jBZY
rqvZIQPl7gGwyaS1RwF+r6x2B45ntXjlgRDZiqmWrwyTf6fNTl0TKla5JiWe
2IS+Yi50lU4dQcSN5scRUWWwXgxKH0OxxCvBPjGm0NrYQjGrD8FzBsTSoiBm
koWvJ6uxZ4zAy1IYagwt+EVB5U9iNjQOd2SoepIDicEQaX52lhG/mbpe9NMr
w/Xt6pE8VnNjOg0v4qzKGoJoCMKLjjUGS2MrUTw1K9Y7WzRwidLDmOCx4Tns
sv29UhOy9vJmz7Pf3rtelENrRYVTVp9zI9LMNa5qKiSt5zRbXmaZ1qqpMiPY
eHSj8jWRgnOEnOqSZatBpOngcZqUJ2laX5xtaPTBhvfirxtbvyZ/Sej9R9si
WSbXG36hpNuXMuLPA2nifoNW7vsxTGkz+Iv+cKIfhOOWgMJG881+9A/cV6K/
Ipzr5DlZfwgufP/NNfZd54IZuKvBqq+TPXEN8Y/0K8Mxe8JvXJui9NL9OIAT
+fU+1xVDWydS/yWO5xvDifzaAqebDDrhPGguOloT7MEaOLT7qLPbMa+Tn8mK
Fk5mDZz9w6OXB8dvDn59IwRw3TC58A+fZF3uxM3nX6Lf3xxO/O8onMbkr9f+
HWFWDzaaoNfP51YvJaPg40B5DrcQXCvy9PfZUt50v5dvnzmXFHyetc6FxIvG
XOTbZ6ZpA4kI7VA6V/TMN77fFoqPlttBuTd6uC/6bHzp8qTr6PctcLpKEjLH
7i5aaO+jdDvZ95pNGBeX3sJ+XGITEQwHPr5hSZTXxMBZgDY59AzK9gUL53Rb
b0TRLANUtK2rDNaFWGxUT37365/6XygMZ7wthQpYa5vzmvBT6tDJCUh7GIBA
V6vOJ4CDLziTiI7Y/WE4k+22DTFwQqbCn+Z8FlXm70cA55mNJJDIkhWwhSYc
j/lE5vPMF7f1ywactnVbOKvCFPAhA0UEzjDZOmUz5Bagyqmi4sJRiV8ZXnQ+
mEWAgW6ipsKAIKz78yFG6fG72HyAhJxcLRnPhRPbrsh8Gpp/AGfNpx/f6Aen
7yfu9aVopjsUVg3m7eovVAy1SwvTsqgv8Zsf6ZtDq4Al3zn6l9UqjiL6V/vK
WCk+bNG9yLpglK9N4JVL9KQMG7VRP/tMeh/6RVaNz5xMzxzdIF7zKdfrJq05
Hv41MJYGCoe0HaHV8BDaNWKBsF7wj4mXco1sF9SaMYgQCKai7kQnaFGnXlKu
ANbsBHEWO0x64TwmttJE9aqFxhhExAWCNoGYJdiZA9szJytj1PENtYZxUZMN
pxNliAdmNGrQ1/g0NpYPV4tE9PtIb7ROJAU1OX0/ArE165HD4LppPptlXrd7
jV9Ll2nCzBxD0wacSM+Ioxgku2zH+eb2NaLUEmezQsLqxgjVWM1/l9jIYDYt
fYo4qGNV3HrQ8SxLC8Q++qrnGdcba4xOkc+UDIgJwHwSLl2z0gSL4EoBPGPD
lTRBa0Bkl4Ix45hCU3jY0Fbf57TRod93zKn7bE7FUj3trYnI2nX4/L++M4UW
cQsP6b79TLlFtwF4Y+ON1qgwWRHkQLTZ0/nSc0232947qtNwZb4Wg3qYeo7+
ENOEw2YWJ6HR/VHwqM1i5mBXdRAzwuXwwuZgEbzTzKtn6K7ci9DocGagr40L
CttQ+YBpRqOWtbxrmpBJoDyr0sW5lAmx1YY2swKOb7nINjvw2t59pnvu7RAp
W4wOIQo/HIBVK3+8v+Y7A8E7OelloW4JDc25j9SXkNPjNL1pFCD1f/d6xLQU
tCB09Wrrc1vERp1SpmvP81jpEv9AHu0Ik1ua1gmaSHonl5gzwm6j8iUGv9CV
wHFxbw5evdt7FjnFYR40uloRnFOjy8ZWbbm1k8htyYCV0mw+i6k0cbzNA43M
NL575hOPVwsvkqgQKyGBBXh2JQELLfl+ILCQKODdOh9pyS2BrwPaIhTVuYkj
eSgoaEOWR93EaO6GByAMSvdt3T6TM0uQ2zpaT80BCF1yJE1psl3z19yNcDMF
VJ3Kbq0lVGszMxrBdgvSEMo1S+8slGh7jxF99MUivaMBgLiIdF7CzNveXNti
yJzmn/d+fHsg3ZLs0cER+kOyPprjgxeyMPiL66xzMrN9BBUJGlRXI2u45XC3
Xb0P5Ds7awAIM6QvNTXY1gD3k6oYdyzTtQ8mzWi5XDgFCM0x2EYKhw9s0gAT
g12TzIEu8S4svjGhUTt+YEvzUHAqDfLCkossaDeDOBka/zCzvR2P7RleN0jC
bqyNSJ2lG0/jizox0Iaj3gm05xR8rKG3dP1h+r9b4dEJH5JINcFAwHLRV7us
rQeaUp3f1mZoVBO5eTLdRd/Bpr8f/gKsw6i4p/QVcpMP2CWrrZieQ8kSf+N3
YLYDUU7ZV7tf7koysCcv+LFRW24kDGZscH09qhkkkZFFIROyxfa3iQTd0rha
aCa9oiJ1aAR0uslztAH3M6hJLwurvt6hupoffuLib2cN/rhjb9LRRZow+fWT
nUfweqSDNOx1LN8Jh3zyBIec8tQkyYlJ1i1IwH0SqLM2IIhn0RCs86BLXLlY
gi4slbBMlu7URVQUk1JSYn4K0quTHhG0FKV7kIozUroYFa1T/NCOs/ZnO1vC
4ByBC0SDqdQ1K9GbBPyBviqUAAI+UFG55OqYmwfPX77ejzxEorVB47aJkU/w
XM0yj7j82lJaMoPYV6BBdbTDMRavRqtfV/FGndqV5mdYV7gS85A8b3sItdBU
0Cc6jUQkOknjRkE7W+VYXL7I9DBhi3Q4rRLOQ6W8EStabKLWZh+41O8Mi3HC
ccwrzC+efvk0VkzXPMXyuwfW0FC4g76OZDaSY2/kAETnJKE3sOC84rBi2y41
ksxj4iphK6ozV5pG26TK0wNmIpHnXa79xhMAnch7bS6EoouHYoaJGraawkim
3MyBZVabzgK5NCgGgm6Wq6X/mxd46IcePx7tjB6NHgsXYza0PXILDGZmclh8
zZubiT3dEiaE9etmFF3c3s96lr/POKQGA0CzSY4h8LaVaVX+dqXuhknpN7eV
8p98I0eokdPPhUx6LZTsRD+VXEuI96fKatFcnCNCIlCtN4ndwkJeJRn95PD/
OHj33evnf2VVqkYrHRDn6dXS1rgkkxmnDhJFzvOlbWYDq5HqAM7eSefcgWNy
o4htsYBhfBJjZ/O0nFxtascukPI4lZUT6EgAgP2ktj6U0EIJ0I2JYCx0IczP
5vhKaD4piKZSkdMzXALtHD4YlKhwcYYuILLRNKgLFyAVPrSnEfVU6EhQ7S1P
JNLtVovVutH3fhtoXu+5LeErFWfrTnYUX0zezLRwKCDg6AxwkGxx2DbfkLRx
AGdb3pFaja4dP0B96mvf0dmODL3iz+9ePWoh2bC0RW57rXFEdZ+x3JYvvUZZ
zFY1jaWBgi3vpc7239POC1ZevXnLGJmnv+Xz1RwV35WkNutpoQhWnotYqSV7
Qap72zNsuFgQ5fnkcfJD/h3OS4dB4oCzMee1XtoaYm+fH9EVs7P79UMZVI69
vkpvSMvvw6OLJwmswS7o9csOpmTcTPDfc6wsLW6cVBKkUAxYFUrAs/SKihaj
Ejaz1j7X19WSvss2Xh2RRsrRru/5moR4vGSRz5MfD18dvkn+kmzp9iRDXdj2
M7EyodSI14OHEbNWrYhiD+hV42zKPjLKnf2z3P3H1/s/tGCSrmRhtPTGOMtn
WzI7/BuBTlfF2HoojqpsKBkHnGvmSdjmIGk5j6Y2N1wwBNDqvpOcU1Pur4VN
pa6opdUC3DoQjoWK3BsjN03HmmxcKE7RSL14eE9mVKMk5H6CZkxvauy2Fm5E
scKDFRcCXXx57dYy6YmbF2rx4f3xb1YchW/XczJwmCs8+fNfmOYGjcWS4ZBT
dm3GipyUrgZJmPC0//qn5zvPPM5rRrJP7D4TOqeZPPAe33aeb10WL+m+J/5o
7cQfm4njOemYeVipNJ9KzVBlOG5nwmBGzYVJ00NqlZIVk66ryGuJ4cLwuo0B
a6jhauUSU+rPXpHPQ9RVsiRrP01RtLXUfbNjQaPohC9gu/MQvZiCXAKq9mQd
s8Z9e+cd2jtv/91x/3tPNdNCxo0qqZ4+bOoCBep97mRrSK8apyvPW4evonnK
LwBEmVPGnKFnX0wQywQwSzUK6fK51Ml2sroQt8LsuItteGqmyTtgSO/W2+m5
wStQ+5fPHH7xjT2U+NuTziP8jXMOXDOMU6GVJDtOOYqwe6k97pw1imOytV+s
ebdlMXwX+wv6qu/xtanNDR5Diht3RPKFIBUqqiytua2Q1pIkKwXqFZlJOZXL
VXPJsG4hjtwsN2TyQIrV/JStq1yib1nli1oKHZo4HtPILiBbtczw4WuQvuao
D1joYbGhNrk4BhH6XEOm3aERAjOx0Z4leCQvYoIHcPh3OO13ql8oLRIFElyi
N4c1No0fTn5voL9GsYaRq1WOF6JhNc4e631KcpzHAR0zn/JCuYx68MRBxzYe
v3n3+vjweyqO+98xlRjoaAfokyQs7076wjkT294TdBC9n72FsMFTFYn+KzGc
VM2InavYf/3qu45VROd4uJQNE4OUgvmzokVNl/3Wkc4u06s6uUKTVE0eIuSr
0RlT2IdzX5oSbePMr0q9flRt5awBCSQu5h5tdzeXRCL/+llEQNMfn/bjuObi
5Sz5mMAXnkJYhYoXp06ZNEc763MUBja+j7YxKkoJ5yS2PDLle8gXK+1DzXhi
ZZ94FEqdgOpsNuXAK5MgL3mGdZw/KDLW488vyO7vmkvqWilrDRchW+1aHoJ1
m/A6xNDDxt44rC1dwz3MoXvkDL6WcnH0W45Kx/Q+jvo3f7ndWXdvYyBdpOBL
7KKB0IueDNwpzOeyBs8wy1GGEuwQE0zy2pFIupDgMcddd7UtumReN2ydNJFd
Tx8f2Fru7bokgiLsM8FKAcyMS8E1PEHqmdTzOEuNtU5ESLQAwqa+BIAX6K/m
5tnN2KpKOQxtERexXHLboCjuuZt6ZWO3zCZaXsN6Ou88cyydpyutqdxD30mz
lsAa4Pi8RYBbYwgloBHHS8WmHId9uJ2FA8HmayPYPP2IOp/A6FT71h2Qfzeq
nK3djzFwYkZjp5LsKnF9IGAst+94nDAcIi1g3elpPkMvpWfxCg2AWIK8HK/m
VEGEvRTGPzn2RuVagG6Na9cKbfJ0ESFG1F4tJloD2zxAFQVlElRRsKglIx7W
VE65rrzjYXWnoBY5rT849KeoVeR1Rf2WoniLrEaa0+lsAii4X1Tn1Cve/rRJ
IN7vX3kSLLezHtm6ATmlTTeslOFsTYFMrCATTuHrYAqoevI4dOcR48VyLFlq
Sj03N1IrDdEW4WHYsh2llUsi6bn1yrB1Knw1z0B60Ag7/GJ5tRAXQmtRjW1b
x2hNmcloUU11iWF/H2xAZlRbW6Df1Hvki0xqLzlZAy/a8Cz+cb5JHJLFGZvJ
unPUSjNc5KeNfvD1tj339gwzakxpcGZ7FfajLjDME3su+JPGJq3lrKagYYlj
ma5+/x22rV5Kke5zZG0UqjF8AT8Rj3P/CVSDFjqqa88JhNZQaMftc4S4o+10
3abGNlO7oS9pNTSXaS42KCzXNReDlD+NBO4+ELpcd39Qnc/xjdoS9z+VBXIT
qoPmFa6xFQjcJgZ6GlaF6WA6yS5ysxq91J2an1rHIFvUJvJdgiNS62RNpJUj
1jBRTF2sZuidJX4uLafd5AAZiqaNURpj1ALgORK7j7TuErlMKLZoUWEkNad9
SrFnygClo5KbFZC3q6QIlTNvaxsVvQSS4UmwIaaOPFmgKI2A6sZwtJcGb/AN
tgzDl6P4NgXZUrdyiCbcFP72ab1cWLu7TneFIo0g9ue8gRK2eSFVjJwiZXRX
ET7g9wojaMolYFFEOiqMwZf3b0TY3DKkRrrU+F6fRqXFDwFWCqnymjNmTldn
GhAU8I+ADuiqPNz7aS8iH7i34Dm1CDM5PpTkB2/B65gEjDk9COjAFuvurnnr
1v2Woagm5yT/DeaezzhdlG2pbe1e+F68U83wUHIOCxW1ln9ihhoYDD9b06Bm
ON/5YPIcAkG9o4hva9ldU+5/cIsKvEyJrBj1rsV7aCpIwnKlg4KWZXOqx7WV
rTJFhKyb7zXV/seCqH6xJVuP2RQWtPC7a0dJPM6Eovnq0qk9hvdhpJ4U1Xu8
73pSJGAXA41QrVdzySPzTdjS/qCW+nZuoRrqAIpZeq64oGZqikm48W0o1gVT
5DGgwICeNaKalGmZ6MTaIWzba1M2AVTvZp8hN/fLqVsWDCZ2Dyed4RbpPE6C
TUfCGFYDr5DdcKJMzxy0eI5V3yMMV0WKddiAoeeAFr6DZd7psvNdv2SVW/Ku
lc/sDuePyLLNgfsorIuPDq6D09IUU18DZmeou06BNiHHe9yD4z2+FcdrK1Md
5Xj9K1Y7PM9nZo//bpmZCnm35SDhngU5+D12kGgpdOLZ4MpNU4xrU1re9aFi
0/NOX/eqbW9qoFTYySdS5wmo2Mxg1EVr9rEW4sL0DrTYsyzvFmu39ca6i8eH
NeO5mjxphaZwrF+N3CEzNx9HxaygMyHukylcIrFva+YZLS5/vxMypW1oRkQn
fmFAIi8kI1uYwqsHaN3KpNhQFFoRFpF3Ccvd8M8kJutnF+9hT0Elcos8SYYK
q8A0BEDu9oX3/2XpBJIki/OUUlYKEPwBs0cv904OgMs7zNnAHtKzwx0tEc3P
7nY9u6uBzrg4fPy/ongZLsIANmQv03BEHmkm4beCOjKlfCWf0zXa37oXG0cx
sO9APBWRlIpoVQ2qdkum16BYcqTniFNfyT37Pe5FvhHV2NpS2ZlIEHC/MzIl
VANk2dq5mkrwq9TK9UoYOwUzXXpNUKXEWGFMEFBxh8G2SCyDxOkFm7w9piyG
UtAjIqDN9+M0FLeqrl8Mn6dwODVdP92mz+69hEoscfgTwEiy2wgJbj6DPrrd
KNrExcRDmJGtAKnN6Uw1ZbUKnF55nTa0he25NKwG8iC/rnacZ38v9QhH3j7h
xR5ZM4rIb051LF8iNndBKfSoidDrt9avViKtrE+z4M3wUtTsJGzTW7P1wN5K
NE1qoirVs45bOroP9MK0RU0wn2P/5MgsgPJtnjx98lCi5b36Jhaz1E5U9k0b
JsmOxDf9aQ/C2NmBIR9ZysD8qPli6ebLCsle5Kl/qgLtQQOB0RlPkAlo0Tbw
Yxj38UgDRmzVbsGnlRWzSTvpf9l3hV+akUw7aK9uFd5oaMnuqgpd+z3R+cKw
zpB0MudOADapw7GZsQ6vYb3aOX1aVnE2ydMaFuVwlqVUG9hEw0RXuB4NTwAL
TwQL6D/G74woQjY8RbPcQ3m88byzW8ovUuzUkDaCKwAbpr28hKeyxd7tMm/R
WcZ+9hDOXlgyFTBgET6cjvMWyzdDLZ87U+JmafU/i0+faTY55f1zR6e5KL39
KRgicSZN/HVZE2H0wp8RcD0q2GTb1CRjp4Gmm2/sXqH2Ssyd5q+8Zq5m5cvG
/qAelVIzba0RZNiQmiEindS14dgoMZEEpCUqCty6O0dOh5cyKU+5R6hp7OL1
VRE9Q01b5i7nay3+TlQKcKlWUikpjzm2qaLfaqGSIxTxyKxAeWzk13FIVXvJ
u8wi755hbltcmIbm7RVGHELyD+KRqcfvbg7Z++pciibaTveJdgdw+wYMs1mK
DQHyeryyKv+Pe0z1E7TFxcv8uH32pL6YX0FIaizFEWDi07z2NZzLj4yKpTk3
oi3sE0kc0ct4trnhVI3GIfugSJ4jC7F7Iyj4KXdlG8v/CkB/NTICpaMgGymC
S1JQWUpvN7Ztw4c47K/73rxfj8J+B7r96frRb63xhMX5/BSIdqg2z63uamDR
Kdk8hVU/HYU9ZpxziFRqI+fF88qp5h0J7wO++RqF+ky5QZ47i6SB/udH2dag
DnCs8/OgYsW2YVvLIB6tdY8f9iUEfFIYlKGA2+qzXUos1//nDVLdn4J3NDxr
rWXBTN74EfrbBXYc5VQvdupl9VHJXXQV5r3r1fw3ftCpV1Yhiu6aSztJFoq1
fOy2Wj52Q8vHbsxs67XkiooqYWUd3yIQC21+45iCaQvewR68M3Ksb+vVu0wI
pdGMrtnIW+75wP8fWkNds8JHND2LWE2bU7dueFJWJirPVMtz7K8W2bT5aCr1
+WXMEKz2PTQx9jPwWWOkbwtu1N8OzuOdCae5YvraIRJSpy9TrBZWNm5hpwJZ
CyKQYlA6CkYJ9hu5qZFUndKu03QshSkoA9tNYXVSkGB4qaJKwj56IMMSrA1T
orxNhMYqgtMNs9lfnlRZaTIvSDPt5QOKMFl8Ru73rB/3Z7ikXjypZ/nwWu2u
YeUxhi0XuO3fOJekW4viVAocO1v/iU/4P5GnHNnEC+N2ME6twOvQs28R1i1u
ti26sZuis/h1rPNQYgpnw5/e27/CF7H+Q1yTPP73xUa05PmDJKHC4bYfj2Vn
2q+g9c1wuGZ99J4/NjrSrBuz0SzIjICvJVuxguXbG83uP8nf9yK1SU7Q4qjj
zaHftcWnhg2qL4Xn3i3BvCw3+NJx/CPoU6AYLZ+07KB3aW3lthHxMXa0lrmK
1LTN8+nsMtL709kOoG8vgETbE3T2ELkBnM4eIp98Xebv/q99Ejh3aWnWjp9o
45jYlw8UzjU6H56jNGMdFrjKn17j/z8aWX5lusCgK6IW9nVt4QRuDn4Yx/rm
2npF3C+tI8ODI9XHqPudaiI6tOdU0S/VDZL4cBw33bcGc/L/3kT1SyvBfGvh
3Bee/Rn02+bwr1vDwc3kv/56cNIXTkcfuRvNp2OmUTg0xTvDaT9fHSfvwsJp
7vsDg8aw5R7OOPY80+GuHJdcjDnmBoIjgCaQPaoEff1n/vIaHXVyvNiIeW3o
GbM9rGHExZkxTZhvrxttZhSOGFCCM8F/qRbswvEcSwOFE1tvE6ILRxNpUfq2
84m90w3HsZffCY51PX57Bzht+26fa9JzW++x8Mt19NyE81KLdyrpEMm28jEh
6SYcl3by2p3PNbrKPXpOhKMjPYdwNh3CMRxb4JyV5SQw7V43ccpU5Ts3fTie
PTivY0g1jQx9S7cPxzUDyeGQQ2ko28DFQrUXmFlKGr4Lp637ove6+cO6Y93v
e9NhG0u8LzgOP7wxnBARD24J5zp5MpKcL3QM4G+3hKM+BWaht4dj/EvEWG8L
577wE3mgN/+xkkEPOLeYz43oZ10rsZCvtsG5Tr4iDsUyp7kunaf6wmlxPXx7
Mzj3ta6WH93n+sNpE7IacDrvnTVKTAs/DNhpP/xck/ts30mYD9FyjY7WExT6
jdPM2/1re1+Qb92EDRs40vy6bd9HOproyzJIYMdpYqkNO9q+0zf4RuAcpblE
AoiD1oTeeOuyluKW+cSdt1wa1JlPYGZuwqEsRskERjvM1SJz2lgaOdM3T/ed
z8iH00U//Ln7+er7uT87kgvzY8BvWW9fM9Xutsynjz7VB2/dbSu7F+PDMc1s
gzwW8n6QE8HEh1lH5FW2dBEhdK5J9m1+y5gHKwnh3Ne6ovt1Yzx/bPq0f1+0
GGUph1Z9XmNjzbY0dnubPxn7pde6a1h2jOYL12geB3HrlX1cc3PbmT1quHyd
43qrA3pzqn3Q9+ix+9UsQux55lxtoUNu28/y8U/X9R2mF8PeWkTc6aWPh3Lb
BPtV+j4z1Wm1+Fdpcv48ajAvmT5GtCOYiG69l17ztMS8dKvp3QJ7tzoaLoD4
35+cHREz2mNnroqA7ayo4b+LOcL6dEE2Pl1tguxEj5yQP/e+Ghe/4Lo4hS5y
EjQtj47hJnj1yceljn0YUwCHv18uLwamTjmffJJRTrNWc+KJSJEhLRixJrtc
o8SbLSWbqd1BPGp3rMYfk9vtlzU+B1zMsjske6fRTMmuveEgaKkCw7EWNlaY
4w1su13b4lnL21CCgrwdiqZ/ROZ5sw0sj44h2CUXuszD4lctSZNEmK3hkJ84
f7B3+uDnydbD7TA8V6KJTC0d99h8ukNCwauHWO7GDyXiml6rojUce6dPEiCH
N27tbK9Pn3SXb9MTNLXroZbfibcO/tQpkx8tYxKQtRtF1h+aNPkpciZ3GLGf
OA8R8P1ou2cq4t2zD2G0x9ufKgERBvty++8+B3Hn4+cgAiKebP/7TENcj106
dX9nWYgfKQmROcw/U7bfnZL9dv79Jvt9rNQ34DRfbf/B2W8wh6+3/z0mwMHC
nzaE7H+gHLiPkgKHwjeoHp8iC65zg0Bb4Mk4qsA/Z7IaLtIR4W+QQLSjJmBf
/vCdMEQq/9zZHzdIyfCr0vVKzyBdWm1xvW04mugN+3yR3TBdY8c1jnoWUf8f
N07R2DE++77ZCw0Tc+ePnbkUzrybMNfkNexpeVFTWvTa/uhWGXXn1TvpIUTx
Hf1QnrX9Lg5B1zfV19Z/EpjveD43hxP7/Efew3o49h/93/skcO4QSLAuvvIm
cK6Th5L3IAoE/XAbOHQtuva8b28D577WZca+635pbOCaWLHe87njvhOclpSE
SMpFex4GOTxN0otsfizfRYMg4/kuAoc232SsRPNdTHB0NN9F4Di5Lon+nPh5
KmY+0XwXgRMkvcQi7EwwcjTfpQvP0U8Xnu1Sem1z+Net4cTyXdbC6ZnvshZO
x0TjcFrO1w3htJ6vfvkuCKct5+Um+S4UwhHPeblRvgvDiee83CTfheHEc15u
ku/Shp9wpyyclnyXDvqJw2nJd7kxnJZ8lxvC6dp3ebBBzzE4sQfW0XMTTnu+
Sxc9N+G057sw/YQ5L0rPIZz2fBeGE+S8RPjzunwXoWffBhRitUe+i8LJRTWW
X/7sMT4Dtj3fRc6plzZjz1cIpyPfpc/5amOJEfqJPboWTsAPbwanmdBxOzjN
hJfbwgkTXm4LJ0x4+WPx03zAh3PHfJdPRj8949bXwumZ79IDTq98l0+2rpYf
3ef6w1mf7yIP3zXfJc7HRC6mp/rjpy3nRferT74Lw4nnvNwk34XhdOW8rNks
D05Xzku/fBdZV0fOS798F5lPR85Lv3wXey+35bz0y3fpop/khvTTZ1c6d+w+
4cjZ+cPySBw0Sj4ZKCm3yyUZ6QkkOHf5uHBuEOntxXeHcDrivUetE2nM577w
7EO+JZb+mfNa/uhActcTdYug8p3OMPLkuXbee0v9b23fWm3JN+TGuPUHmCe3
HMyLajrmGPSfgV3j/TB8+BWifvjwa9vp5+FX8M8P1Dsmw/YlE27iqW5B8hbb
Fo/k3+Q5wCrxXOAtCWhZYZQBukf5zGP3PhK7q6xaFYVZ7hQOHAfEHmdwVWYT
jq7Otbue3LxOj/D32RV1QjhlJzGZ2pIKA4IwuAJQmelrAhZjaDSkA0NKsIMz
bTEMYPohq6ZV20C2IkN/IGKK70g0AbJL8vPk+wy7JM6oVbs/YdlL6hDq9gP8
PDkwOhr8b1U4VzXGu2p3ZXKTc3PHbJFW1EVzdVpzxADDmeQYgIaB34AV5KPL
S2Sll1pOUbzM0vcQkVSEPQ9t4IzT7nAU0MYTpo2vHNp4Av8k2nguNbCxheSS
8wx8fDLRKFZH/jtRlPEbPuIkSj8OlYDuY9C65jlhb6Yk+TzZKxwn85i9uOSB
xubvCB6ZgG3Lyy+95TafKQVAuvkKdFHQwIhM6UUOCJ7mjNC9/QMB8Ybujno1
n8Okfic6ULfXaQYXXw5j45G3zmgnxo/bbSKYkzGQQzLL57k0oQzEOml+7BYb
P36xn2DsCONEBbvxVUK8g1M5SAKbVOl0OaSq5Ok4G2aT83I8LGvkvENZU0Bl
0/w3oSOgFSArbh8cEsuXTCxPHGL5Ev75ITwtsSiq9mhTjzNI3XU5QbQrbu31
gQ0dXy2EpoQJ2m0AVF04zA8GdxBiy7TTuHsTzZdwovw5jgjd/is+beSQ5ID9
SDpBXoQE7vEEHmKzvRH7ZhI/+v025TFvypfOpjyGf9KmvMoLrDPrHZ9bDfKI
B3Ha/T18BP/84JxOie9EEiu5OS6lENnw4DJxDHNiNXT3IN7emp/QxrBloT3H
i7Z4jvhWSM1ln5Nw522Dii4E7DICnG55D3fhnx+8o7gk2yTMYdMN692EKcGv
6cT5hSLcNmlKryhdupxQH2JpPWiqv/qsQ1NPQMOTUGOcK2NIWQBzAJkHo6A3
e8P21XhnFpLNAvKF1+6XjoJzTXMyKsPVuEqh4mPugAwLg1tWyBsBSzdteztc
YgDSyrQk7zNJl/VJxF8ng+FYVyl/R7Dda8GKNiYd5G6kssOksuuQyg78k0jl
kN+bsAEaOWP/vdmjoHs4Wiua0tAEI/qHDMH5JnDnqL3ti2gb8tYKS1n22Sqn
7t4sC/JWMnSCsV/uHdE4383K8fshBi8GLKgLmQ8ZmU5n5YcP4Z8fLN/w2QUh
1D80N6Aw/B0XP61AKEaxnHufz+AWxbrvGKDUJGWH/dx5qLYl3QNWk73x+6K8
nGWTMxYVEKGp/x0qEkmxmp9ijstfNotyU+ol4+ECBgCzGGeU8YktgN9jS7G/
7Z9XcBhzEMD25vW//b91/QFT8uCH77MSGHSWvMgmVQbntH6f60/H+fu0miQv
/+1/nc1AwtevD2Z1mvwIctHvwyMY5nf9/r+U5wXW31j92/8Nmv5yWddlYUb5
t/8FmmZyks1SbHmtX39X4YxOcriL9Ku/rn5b4XclpkB8GEhS4d9egdDy//0/
afLz6n//X6BE/O//+UF6EDGjBb7G6CKdB9QFVGYlZBG3jU9w2Ced7R6g2wGq
rPFLkzYvkTX9pxq0wgJQRPS0d0bs7OfDn356/fOe6SGxn82Aow1/QqULtpMa
qO//9ej44ORktPH/A2Ve27UWngEA

-->

</rfc>
