<?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-core-oscore-capable-proxies-08" category="std" consensus="true" submissionType="IETF" updates="8613, 8768" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="OSCORE-capable Proxies">OSCORE-capable Proxies</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-capable-proxies-08"/>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>164 40</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <author initials="R." surname="Höglund" fullname="Rikard Höglund">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>164 40</code>
          <country>Sweden</country>
        </postal>
        <email>rikard.hoglund@ri.se</email>
      </address>
    </author>
    <date year="2026" month="November" day="02"/>
    <area>Internet</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 120?>

<t>When using the Constrained Application Protocol (CoAP), messages exchanged between two endpoints can be protected end-to-end at the application layer by means of Object Security for Constrained RESTful Environments (OSCORE), also in the presence of intermediaries such as proxies. This document defines how to use OSCORE for protecting CoAP messages also between an origin application endpoint and an intermediary, or between two intermediaries. Also, it defines rules to escalate the protection of a CoAP option, in order to encrypt and integrity-protect it whenever possible. Finally, it defines how to secure a CoAP message by applying multiple, nested OSCORE protections, e.g., both end-to-end between origin application endpoints; and between an application endpoint and an intermediary or between two intermediaries. Therefore, this document updates RFC 8613. Furthermore, this document updates RFC 8768, by explicitly defining the processing with OSCORE for the CoAP Hop-Limit Option. The approach defined in this document can be seamlessly employed also with Group OSCORE, for protecting CoAP messages when group communication is used in the presence of intermediaries.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Constrained RESTful Environments Working Group mailing list (core@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/core-wg/oscore-capable-proxies"/>.</t>
    </note>
  </front>
  <middle>
    <?line 124?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The Constrained Application Protocol (CoAP) <xref target="RFC7252"/> supports the presence of intermediaries such as forward-proxies and reverse-proxies, which assist origin clients by performing requests to origin servers on their behalf and forwarding back the corresponding responses.</t>
      <t>CoAP also supports group communication scenarios <xref target="I-D.ietf-core-groupcomm-bis"/>, where clients can send a one-to-many request targeting all servers in the group, e.g., by using IP multicast. Like for one-to-one communication, group settings can also rely on intermediaries, e.g., by using the realization of proxy specified in <xref target="I-D.ietf-core-groupcomm-proxy"/>.</t>
      <t>The security protocol Object Security for Constrained RESTful Environments (OSCORE) <xref target="RFC8613"/> can be used to protect CoAP messages between two endpoints at the application layer, especially achieving end-to-end security in the presence of (non-trusted) intermediaries. When CoAP group communication is used, the same can be achieved by means of the security protocol Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
      <t>For a number of use cases (see <xref target="sec-use-cases"/>), it is required and/or beneficial that communications are secured between an application endpoint (i.e., a CoAP origin client/server) and an intermediary as well as between two adjacent intermediaries in a chain. This especially applies to the communication leg between the CoAP origin client and the adjacent intermediary acting as the next hop towards the CoAP origin server.</t>
      <t>In such cases, and especially if the origin client already uses OSCORE to achieve end-to-end security with the origin server, it would be convenient that OSCORE is also used to secure communications between the origin client and its next hop.</t>
      <t>However, the original specification <xref target="RFC8613"/> does not define how OSCORE can be used to protect CoAP messages in that communication leg, or how to generally process CoAP messages with OSCORE at an intermediary. In fact, this would also require to consider an intermediary as an "OSCORE endpoint".</t>
      <t>This document fills this gap and updates <xref target="RFC8613"/> as follows.</t>
      <ul spacing="normal">
        <li>
          <t>It defines how to use OSCORE for protecting a CoAP message in the communication leg between: i) an origin client/server and an intermediary; or ii) two adjacent intermediaries in an intermediary chain. That is, besides origin clients/servers, it allows also intermediaries to be "OSCORE endpoints".</t>
        </li>
        <li>
          <t>It defines rules to escalate the protection of a CoAP option that is originally meant to be unprotected or only integrity-protected by OSCORE. This results in both encrypting and integrity-protecting a CoAP option whenever it is possible.</t>
        </li>
        <li>
          <t>It admits a CoAP message to be secured by multiple, nested OSCORE protections applied in sequence. For instance, this is the case when the message is OSCORE-protected end-to-end between the origin client and origin server, after which the result is further OSCORE-protected over the leg between the current and next hop (e.g., between the origin client and the adjacent intermediary acting as the next hop towards the origin server).</t>
        </li>
      </ul>
      <t>Furthermore, this document updates <xref target="RFC8768"/>, by explicitly defining the CoAP Hop-Limit Option to be of Class U for OSCORE (see <xref target="sec-hop-limit"/>). In the case where the Hop-Limit Option is first added to a request by an origin client instead of an intermediary, this update avoids undesired overhead in terms of message size and ensures that the first intermediary in the chain enforces the intent of the origin client in detecting forwarding loops.</t>
      <t>This document does not introduce any new signaling to guide the message processing on the different endpoints. Instead, according to the presence of the CoAP OSCORE Option and of other CoAP options intended for an intermediary, every endpoint is always able to understand whether (and how many times in a row) to decrypt an incoming message before possibly forwarding it.</t>
      <t>The approach defined in this document can be seamlessly employed also when Group OSCORE is used for protecting CoAP messages in group communication scenarios that rely on intermediaries.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<t>Readers are expected to be familiar with the terms and concepts related to CoAP <xref target="RFC7252"/>, OSCORE <xref target="RFC8613"/>, and Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>. This document especially builds on concepts and mechanics related to intermediaries such as CoAP forward-proxies and reverse-proxies (see <xref section="5.7" sectionFormat="of" target="RFC7252"/>).</t>
        <t>In addition, this document uses the following terms:</t>
        <ul spacing="normal">
          <li>
            <t>Source application endpoint: an origin client producing a request or an origin server producing a response.</t>
          </li>
          <li>
            <t>Destination application endpoint: an origin server intended to consume a request or an origin client intended to consume a response.</t>
          </li>
          <li>
            <t>Application endpoint: a source application endpoint or destination application endpoint.</t>
          </li>
          <li>
            <t>Source OSCORE endpoint: an endpoint protecting a message with OSCORE or Group OSCORE.</t>
          </li>
          <li>
            <t>Destination OSCORE endpoint: an endpoint unprotecting a message with OSCORE or Group OSCORE.</t>
          </li>
          <li>
            <t>OSCORE endpoint: a source OSCORE endpoint or destination OSCORE endpoint. An OSCORE endpoint is not necessarily also an application endpoint with respect to a certain message.</t>
          </li>
          <li>
            <t>Hop: an endpoint in the end-to-end path between two application endpoints included.</t>
          </li>
          <li>
            <t>Proxy-related options: either of the following (set of) CoAP options that a proxy can use to understand where to forward a CoAP request. These CoAP options are defined in <xref target="RFC7252"/>, <xref target="I-D.ietf-core-href"/>, and <xref target="I-D.ietf-core-uri-path-abbrev"/>.  </t>
            <ul spacing="normal">
              <li>
                <t>The Proxy-Uri Option or the Proxy-Cri Option, possibly in combination with the Uri-Path-Abbrev Option (see <xref section="2.4" sectionFormat="of" target="I-D.ietf-core-uri-path-abbrev"/>). These are relevant when using a forward-proxy.</t>
              </li>
              <li>
                <t>The set of CoAP options comprising the Proxy-Scheme Option or the Proxy-Scheme-Number Option, together with a combination of any among the Uri-Host Option, the Uri-Port Option, and the mutually exclusive Uri-Path Option and Uri-Path-Abbrev Option. This is relevant when using a forward-proxy.</t>
              </li>
              <li>
                <t>The set of CoAP options consisting in a combination of any among the Uri-Host Option, the Uri-Port Option, and the mutually exclusive Uri-Path Option and Uri-Path-Abbrev Option, when those are not used together with the Proxy-Scheme Option or the Proxy-Scheme-Number Option. This is relevant when using a reverse-proxy.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>This document uses the acronym LAKE, expanded to Lightweight Authenticated Key Exchange, to denote the protocol specified as EDHOC in <xref target="RFC9528"/>. Identifiers defined literally in <xref target="RFC9528"/> or in IANA registries (e.g., the names of the EDHOC registries themselves) are unchanged.</t>
      </section>
    </section>
    <section anchor="sec-message-processing">
      <name>Message Processing</name>
      <t>This section defines the processing of CoAP messages with OSCORE.</t>
      <t><xref target="sec-examples"/> provides a number of examples where the approach defined in this document is used to protect message exchanges.</t>
      <section anchor="sec-deviations">
        <name>Deviations from the Original Message Processing</name>
        <t>This document introduces the following two main deviations from the original OSCORE specification <xref target="RFC8613"/>.</t>
        <ul spacing="normal">
          <li>
            <t>An "OSCORE endpoint", as a producer/consumer of an OSCORE Option, can be not only an application endpoint (i.e., an origin client or server) but also an intermediary such as a proxy.  </t>
            <t>
Hence, OSCORE can be used between an origin client/server and a proxy, as well as between two proxies in an intermediary chain.</t>
          </li>
          <li>
            <t>A CoAP message can be secured by multiple OSCORE protections applied in sequence. In such a case, the final result is a message with nested OSCORE protections. Hence, following a decryption at a destination OSCORE endpoint, the resulting message might legitimately include an OSCORE Option and thus has in turn to be decrypted, by the same destination OSCORE endpoint or by a different one along the path towards the destination application endpoint included.  </t>
            <t>
The most common case is expected to consider a message protected with up to two OSCORE layers, i.e.: i) an inner layer, protecting the message end-to-end between the origin client and the origin server acting as application endpoints; and ii) an outer layer, protecting the message between a certain OSCORE endpoint and the other OSCORE endpoint adjacent in the intermediary chain.  </t>
            <t>
However, a message can also be protected with a higher, arbitrary number of nested OSCORE layers, e.g., in scenarios that rely on a longer chain of intermediaries. For instance, the origin client can sequentially apply multiple OSCORE layers to a request, with each intermediary in the chain intended to consume one of those until the origin server is reached and it consumes the innermost OSCORE layer.  </t>
            <t>
An OSCORE endpoint <bcp14>SHOULD</bcp14> define the maximum number of OSCORE layers that it is able to apply (remove) when processing an outgoing (incoming) CoAP message. The defined limit has to appropriately reflect the security requirements of the application. At the same time, such a limit is typically bounded by the maximum number of OSCORE Security Contexts that can be active at the endpoint as well as by the number of intermediary OSCORE endpoints that have been explicitly set up by the communicating parties.  </t>
            <t>
If its defined limit is reached when processing a CoAP message, an OSCORE endpoint <bcp14>MUST NOT</bcp14> perform any further OSCORE processing on that message. If the message is an outgoing request and it requires further OSCORE processing beyond the set limit, the endpoint <bcp14>MUST</bcp14> abort the message sending. If the message is an incoming request and it requires further OSCORE processing beyond the set limit, the endpoint <bcp14>MUST</bcp14> reply with a 4.01 (Unauthorized) error response. The endpoint protects such a response by applying the same OSCORE layers that it successfully removed from the corresponding incoming request, but in the reverse order than the one according to which those layers were removed (see <xref target="outgoing-responses"/>).</t>
          </li>
        </ul>
      </section>
      <section anchor="general-rules">
        <name>Protection of CoAP Options</name>
        <t>The following considers a sender endpoint that, when protecting an outgoing message M, applies the i-th OSCORE layer in sequence, by using the OSCORE Security Context that it shares with another OSCORE endpoint X.</t>
        <t>As usual, the sender endpoint encrypts and integrity-protects the CoAP options included in M that are processed as Class E for OSCORE, as per Sections <xref target="RFC8613" section="4.1.1" sectionFormat="bare"/> and <xref target="RFC8613" section="4.1.3" sectionFormat="bare"/> of <xref target="RFC8613"/>.</t>
        <t>Per the update made by this document, the sender endpoint <bcp14>MUST</bcp14> perform the procedure defined below for each CoAP option OPT that is included in M and is originally specified only as an outer option (Class U or I) for OSCORE. This procedure does not apply to options that are specified (also) as Class E. Depending on the outcome of this procedure, the sender endpoint processes OPT as per its original Class U or I, or instead as Class E.</t>
        <t>Before protecting M by using the OSCORE Security Context shared with the other OSCORE endpoint X and applying the i-th OSCORE layer in sequence, the sender endpoint performs the following steps for each CoAP option OPT that is included in M and is originally specified only as an outer option (Class U or I) for OSCORE. <xref target="sec-option-protection-diag"/> provides an overview of these steps through a state diagram.</t>
        <t>In the following, a recipient endpoint is denoted as a "consumer" of an option OPT if the endpoint is meant to have access to OPT for processing it as appropriate.</t>
        <t>Note that the sender endpoint can assess some conditions only "to the best of its knowledge". This is due to the possible presence of a reverse-proxy standing for X and whose presence as reverse-proxy is, by definition, expected to be unknown to the sender endpoint.</t>
        <ol spacing="normal" type="1"><li>
            <t>If the sender endpoint has added OPT to M, then this algorithm moves to Step 2. Otherwise, this algorithm moves to Step 4.</t>
          </li>
          <li>
            <t>If, to the best of the sender endpoint's knowledge, X is a consumer of OPT, then this algorithm moves to Step 3. Otherwise, this algorithm moves to Step 4.</t>
          </li>
          <li>
            <t>If, to the best of the sender endpoint's knowledge, X is the immediately next consumer of OPT, then this algorithm moves to Step 5. Otherwise, this algorithm moves to Step 9.</t>
          </li>
          <li>
            <t>If any of the following conditions holds, then this algorithm moves to Step 6. Otherwise, this algorithm moves to Step 9.  </t>
            <ul spacing="normal">
              <li>
                <t>To the best of the sender endpoint's knowledge, X is the next hop for the sender endpoint; or</t>
              </li>
              <li>
                <t>To the best of the sender endpoint's knowledge, the immediately next consumer of OPT is not a hop in between the sender endpoint and X.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>If X needs to access OPT before having removed the i-th OSCORE layer or in order to remove the i-th OSCORE layer, then this algorithm moves to Step 9. Otherwise, this algorithm moves to Step 6.</t>
          </li>
          <li>
            <t>If OPT is the Uri-Host Option or the Uri-Port Option, then this algorithm moves to Step 7. Otherwise, this algorithm moves to Step 8.</t>
          </li>
          <li>
            <t>If M includes the Proxy-Scheme Option or the Proxy-Scheme-Number Option, then this algorithm moves to Step 8. Otherwise, this algorithm moves to Step 9.</t>
          </li>
          <li>
            <t>The sender endpoint determines that OPT will be processed as Class E for OSCORE, i.e., both encrypted and integrity-protected. Then, the sender endpoint terminates this algorithm.</t>
          </li>
          <li>
            <t>The sender endpoint determines that OPT will be processed as per its original Class U or I for OSCORE. Then, the sender endpoint terminates this algorithm.</t>
          </li>
        </ol>
        <t>Compared to what is defined in <xref section="5.7.1" sectionFormat="of" target="RFC7252"/>, a new requirement is introduced for a proxy that acts as an OSCORE endpoint. That is, for each CoAP option OPT included in an outgoing message M that the proxy protects with OSCORE, the proxy has to be able to recognize OPT and thus be aware of the original Class of OPT for OSCORE.</t>
        <t>If a proxy that acts as an OSCORE endpoint does not recognize a CoAP option included in M, then the proxy <bcp14>MUST</bcp14> stop processing M and performs the following actions:</t>
        <ul spacing="normal">
          <li>
            <t>If M is a request, then the proxy <bcp14>MUST</bcp14> reply with a 4.02 (Bad Option) error response to (the previous hop towards) the origin client.</t>
          </li>
          <li>
            <t>If M is a response, then the proxy <bcp14>MUST</bcp14> send a 5.02 (Bad Gateway) error response to (the previous hop towards) the origin client.</t>
          </li>
        </ul>
        <t>In either case, this may result in protecting the error response over that communication leg, as per <xref target="outgoing-responses"/>.</t>
      </section>
      <section anchor="outgoing-requests">
        <name>Processing of an Outgoing Request</name>
        <t>The rules from <xref target="general-rules"/> apply when processing an outgoing request message, with the following additions.</t>
        <t>When a source application endpoint applies multiple OSCORE layers in sequence to protect an outgoing request and it uses an OSCORE Security Context shared with the other application endpoint, then the first OSCORE layer <bcp14>MUST</bcp14> be applied by using that Security Context.</t>
        <t>After that, the source application endpoint further protects the outgoing request, by applying one OSCORE layer for each intermediary with which it shares an OSCORE Security Context. When doing so, the source application endpoint applies those OSCORE layers in the same order according to which those intermediaries are positioned in the chain, starting from the one closest to the other application endpoint and moving backwards towards the one closest to the source application endpoint.</t>
      </section>
      <section anchor="incoming-requests">
        <name>Processing of an Incoming Request</name>
        <t>Upon receiving a request REQ, the recipient endpoint performs the following steps. <xref target="sec-incoming-req-diag"/> provides an overview of these steps through a state diagram.</t>
        <ol spacing="normal" type="1"><li>
            <t>If REQ includes proxy-related options, this algorithm moves to Step 2. Otherwise, this algorithm moves to Step 5.</t>
          </li>
          <li>
            <t>If REQ includes either of the following (set) of CoAP options, the endpoint proceeds as defined below. Otherwise, this algorithm moves to Step 3.  </t>
            <ul spacing="normal">
              <li>
                <t>The Proxy-Uri Option or the Proxy-Cri Option, possibly in combination with the Uri-Path-Abbrev Option (see <xref section="2.4" sectionFormat="of" target="I-D.ietf-core-uri-path-abbrev"/>).</t>
              </li>
              <li>
                <t>The Proxy-Scheme Option or the Proxy-Scheme-Number Option, together with a combination of:      </t>
                <ul spacing="normal">
                  <li>
                    <t>The Uri-Host Option.</t>
                  </li>
                  <li>
                    <t>The Uri-Port Option.</t>
                  </li>
                  <li>
                    <t>Either the Uri-Path-Abbrev Option, or one or more Uri-Path Options.</t>
                  </li>
                </ul>
              </li>
            </ul>
            <t>
In the case that the endpoint is not configured to be a forward-proxy, it stops processing REQ and replies with a 5.05 (Proxying Not Supported) error response to (the previous hop towards) the origin client, as per <xref section="5.10.2" sectionFormat="of" target="RFC7252"/>. This may result in protecting the error response over that communication leg, as per <xref target="outgoing-responses"/>.  </t>
            <t>
Otherwise, this algorithm moves to Step 4.</t>
          </li>
          <li>
            <t>Having reached this step, REQ does not include the Proxy-Scheme Option or the Proxy-Scheme-Number Option, but it includes a combination of:  </t>
            <ul spacing="normal">
              <li>
                <t>The Uri-Host Option.</t>
              </li>
              <li>
                <t>The Uri-Port Option.</t>
              </li>
              <li>
                <t>Either the Uri-Path-Abbrev Option, or one or more Uri-Path Options.</t>
              </li>
            </ul>
            <t>
In the case that the endpoint is not configured to be a reverse-proxy, or the request URI from the Uri-Host, Uri-Port, Uri-Path, and Uri-Path-Abbrev Options is not intended to support reverse-proxy functionalities, then this algorithm moves to Step 5.  </t>
            <t>
Otherwise, this algorithm moves to Step 4.</t>
          </li>
          <li>
            <t>The endpoint <bcp14>MUST</bcp14> check whether forwarding REQ to (the next hop towards) the origin server is an acceptable operation to perform, according to the endpoint's configuration and a possible authorization enforcement. This check can be based, for instance, on the specific OSCORE Security Context that the endpoint used to decrypt and verify REQ before performing this step (if applicable).  </t>
            <t>
If the check fails, the endpoint <bcp14>MUST</bcp14> stop processing REQ and <bcp14>MUST</bcp14> reply with a 4.01 (Unauthorized) error response to (the previous hop towards) the origin client. This may result in protecting the error response over that communication leg, as per <xref target="outgoing-responses"/>.  </t>
            <t>
Instead, if the check succeeds, the following applies.  </t>
            <ul spacing="normal">
              <li>
                <t>In the case that the previous step in the present execution of this algorithm was Step 2, hence the endpoint is meant to process REQ as a forward-proxy, then the endpoint consumes the proxy-related options as per <xref section="5.7.2" sectionFormat="of" target="RFC7252"/>.      </t>
                <t>
In particular, the endpoint checks whether the authority component (host and port) of the request URI identifies the endpoint itself. In such a case, REQ has to be treated as a local (non-proxied) request and this algorithm moves to Step 1.      </t>
                <t>
Otherwise, the endpoint forwards REQ to (the next hop towards) the origin server according to the request URI, unless differently indicated in REQ, e.g., by means of any of its CoAP options. For instance, a forward-proxy does not forward a request that includes proxy-related options together with the Listen-To-Multicast-Responses Option (see <xref section="4" sectionFormat="of" target="I-D.ietf-core-multicast-notifications-proxy"/>).</t>
              </li>
              <li>
                <t>In the case that the previous step in the present execution of this algorithm was Step 3, hence the endpoint is meant to process REQ as a reverse-proxy, then the endpoint consumes the included Uri-Host, Uri-Port, Uri-Path, and Uri-Path-Abbrev Options, and forwards REQ to (the next hop towards) the origin server, unless differently indicated in REQ, e.g., by means of any of its CoAP options.      </t>
                <t>
Note that, when forwarding REQ, the endpoint might not remove the Uri-Path-Abbrev-Option or all the Uri-Path Options originally included, e.g., if the next hop towards the origin server is a reverse-proxy.</t>
              </li>
            </ul>
            <t>
In either case, if the endpoint forwards REQ to (the next hop towards) the origin server, this may result in (further) protecting REQ over that communication leg, as per <xref target="outgoing-requests"/>.  </t>
            <t>
After that, the endpoint does not take any further action and terminates this algorithm.</t>
          </li>
          <li>
            <t>If REQ includes an OSCORE Option, this algorithm moves to Step 6. Otherwise, the endpoint proceeds as defined below.  </t>
            <t>
In the case that the endpoint does not have an application to handle REQ, it <bcp14>MUST</bcp14> stop processing the request and <bcp14>MAY</bcp14> reply with a 4.04 (Not Found) error response to (the previous hop towards) the origin client. This may result in protecting the error response over that communication leg, as per <xref target="outgoing-responses"/>.  </t>
            <t>
Otherwise, the endpoint delivers REQ to the application and terminates this algorithm.</t>
          </li>
          <li>
            <t>The endpoint decrypts REQ using the OSCORE Security Context CTX indicated by the OSCORE Option. A successful decryption results in the decrypted request REQ*. The possible presence of an OSCORE Option in REQ* is not treated as an error situation.  </t>
            <t>
If the endpoint uses policies such as those discussed in <xref target="source-based-policies"/>, the endpoint retrieves CTX from a specific list of Security Contexts. The endpoint searches for such list by using the source addressing information of REQ, i.e., the addressing information of the (previous hop towards the) origin client.  </t>
            <t>
If the OSCORE processing results in an error, the endpoint <bcp14>MUST</bcp14> stop processing REQ and perform error handling as per <xref section="8.2" sectionFormat="of" target="RFC8613"/> or Sections <xref target="I-D.ietf-core-oscore-groupcomm" section="7.2" sectionFormat="bare"/> and <xref target="I-D.ietf-core-oscore-groupcomm" section="8.4" sectionFormat="bare"/> of <xref target="I-D.ietf-core-oscore-groupcomm"/>, in the case that OSCORE or Group OSCORE is used, respectively. If the endpoint sends an error response to (the previous hop towards) the origin client, this may result in protecting the error response over that communication leg, as per <xref target="outgoing-responses"/>.  </t>
            <t>
Otherwise, if the OSCORE processing is successful, REQ takes REQ* and this algorithm moves to Step 1.</t>
          </li>
        </ol>
        <section anchor="source-based-policies">
          <name>Policies for Source-Based Processing</name>
          <t>In general, if a server receives a request protected with an OSCORE Security Context, the server does not need to verify whether the source address of the request matches the one with which the server established that OSCORE Security Context. That is an important feature, because it allows the server to reduce the state that it keeps per Security Context, and it allows the client to seamlessly continue communicating also after having migrated to a different network segment.</t>
          <t>However, different policies can be used by particularly sensitive servers that rely on protections afforded by reverse-proxies (in particular, the servers considered in <xref target="I-D.amsuess-t2trg-onion-coap"/>). For example, such servers might associate OSCORE Security Contexts with an outer OSCORE layer that is required to protect incoming requests, in order for those requests to be eligible for decryption and verification with any of those Security Contexts.</t>
          <t>Implementers of such a distinction should be aware of timing side channels: the server should not first look up an OSCORE Security Context (and, even worse, try using it to decrypt and verify the incoming request), and then verify whether the Security Context is eligible to use according to the source addressing information of the request.</t>
          <t>Instead, per-source-address lists of Security Contexts should be maintained. This ensures that, when a request is ineligible to be decrypted and verified, the server replies with an appropriate 4.01 (Unauthorized) error response through the same code path that is considered when an OSCORE Security Context is not found. Also, this helps keep separate name spaces of OSCORE Sender/Recipient IDs, which would otherwise leak information.</t>
        </section>
      </section>
      <section anchor="outgoing-responses">
        <name>Processing of an Outgoing Response</name>
        <t>The rules from <xref target="general-rules"/> apply when processing an outgoing response message, with the following additions.</t>
        <t>The sender endpoint protects the response by applying the same OSCORE layers that it removed from the corresponding incoming request, but in the reverse order than the one according to which those layers were removed.</t>
        <t>It follows that, when a source application endpoint applies multiple OSCORE layers in sequence to protect an outgoing response and it uses an OSCORE Security Context shared with the other application endpoint, then the first OSCORE layer is applied by using that Security Context.</t>
        <t>If the response is an error response, the sender endpoint protects it by applying the same OSCORE layers that it successfully removed from the corresponding incoming request, but in the reverse order than the one according to which those layers were removed.</t>
        <section anchor="partial-iv-response-sender">
          <name>Partial IV in the OSCORE Option</name>
          <t>When protecting an outgoing response, a source OSCORE endpoint <bcp14>MUST</bcp14> include its Sender Sequence Number as Partial IV in the response and use it to build the nonce to protect the response, except when sending the first response to the corresponding request, in which case the Partial IV in the response <bcp14>MAY</bcp14> be omitted. This holds for each OSCORE layer that the source OSCORE endpoint applies to protect the outgoing response.</t>
          <t>If the source OSCORE endpoint is the origin server, what is described above is in fact already guaranteed:</t>
          <ul spacing="normal">
            <li>
              <t>When the response is protected with Group OSCORE (see Sections <xref target="I-D.ietf-core-oscore-groupcomm" section="5.3.1" sectionFormat="bare"/>, <xref target="I-D.ietf-core-oscore-groupcomm" section="7.3" sectionFormat="bare"/>, and <xref target="I-D.ietf-core-oscore-groupcomm" section="8.5" sectionFormat="bare"/> of <xref target="I-D.ietf-core-oscore-groupcomm"/>).</t>
            </li>
            <li>
              <t>When the response is protected with OSCORE and it is an Observe notification <xref target="RFC7641"/> (see <xref section="8.3.1" sectionFormat="of" target="RFC8613"/>).  </t>
              <t>
Note that, when OSCORE is used, sending Observe notifications is the only way for the origin server to send multiple responses to the same request.</t>
            </li>
          </ul>
          <t>If the source OSCORE endpoint is not the origin server but rather a proxy, there are circumstances by which the OSCORE endpoint might send multiple responses to the same request, even though they are protected with OSCORE and they are not Observe notifications.</t>
          <t>A relevant example is the setup where a proxy receives a unicast request from the origin client, and it forwards the request to a group of origin servers, e.g., over IP multicast <xref target="I-D.ietf-core-groupcomm-bis"/>. The specification <xref target="I-D.ietf-core-groupcomm-proxy"/> defines a realization of such proxy, which collects the individual responses from the origin servers and relays those responses back to the origin client. That is, all such responses are sent by the proxy as replies to the same unicast request that the origin client sent to the proxy. Just like for that request, each response can be protected with Group OSCORE end-to-end between the replying origin server and the origin client, as well as with OSCORE between the proxy and the origin client.</t>
        </section>
      </section>
      <section anchor="incoming-responses">
        <name>Processing of an Incoming Response</name>
        <t>The recipient endpoint removes the same OSCORE layers that it added when protecting the corresponding outgoing request, but in the reverse order than the one according to which those layers were added.</t>
        <t>When doing so, the possible presence of an OSCORE Option in the decrypted response following the removal of an OSCORE layer is not treated as an error situation, unless it occurs after having removed as many OSCORE layers as were added in the corresponding outgoing request. In such a case, the endpoint <bcp14>MUST</bcp14> stop processing the response.</t>
        <section anchor="incoming-responses-piv">
          <name>Partial IV in the OSCORE Option</name>
          <t>There are circumstances by which, after sending a request, the sender endpoint might receive multiple responses as replies from a given other endpoint. For example, this is the case:</t>
          <ul spacing="normal">
            <li>
              <t>When the request is an Observe request <xref target="RFC7641"/>.</t>
            </li>
            <li>
              <t>When the request is sent to a group of recipients, e.g., over IP multicast <xref target="I-D.ietf-core-groupcomm-bis"/>.</t>
            </li>
            <li>
              <t>When the request is sent to a proxy, which forwards the request to a group of recipients (e.g., over IP multicast), and then relays their responses back <xref target="I-D.ietf-core-groupcomm-bis"/><xref target="I-D.ietf-core-groupcomm-proxy"/>.</t>
            </li>
          </ul>
          <t>In either case, the sender endpoint willingly opts-in for receiving multiple responses to the same request. In practice, such an indication can rely on: including the CoAP Observe Option in the request <xref target="RFC7641"/>; sending the request as addressed to a group of recipients (e.g., to an IP multicast address) <xref target="I-D.ietf-core-groupcomm-bis"/>; including the CoAP Multicast-Timeout Option in the unicast request sent to a proxy, which forwards the request to a group of recipients <xref target="I-D.ietf-core-groupcomm-proxy"/>; or a combination of such means.</t>
          <t>When processing an incoming response to a request that could elicit multiple responses, a destination OSCORE endpoint <bcp14>MUST</bcp14> only accept for that request at most one response without Partial IV from each source OSCORE endpoint, and treat it as the oldest response for that request from that source OSCORE endpoint.</t>
          <t>In the following cases, what is described above is in fact already guaranteed:</t>
          <ul spacing="normal">
            <li>
              <t>The source OSCORE endpoint protected the response with Group OSCORE (see <xref section="5.3.1" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>).</t>
            </li>
            <li>
              <t>The source OSCORE endpoint protected the response with OSCORE, and the response is an Observe notification (see <xref section="4.1.3.5.2" sectionFormat="of" target="RFC8613"/>).</t>
            </li>
          </ul>
          <t>The requirement defined above additionally covers the case where the source OSCORE endpoint protected the response with OSCORE and Observe is not used. Note that having multiple such responses to the same request implies that the source OSCORE endpoint is not an origin server.</t>
          <t>The same example mentioned in <xref target="partial-iv-response-sender"/> holds as relevant, with an origin client using OSCORE to protect a unicast request to a proxy, which forwards the request to a group of origin servers and relays the collected responses back to the origin client.</t>
        </section>
      </section>
      <section anchor="replay-protection-and-ordering-of-responses">
        <name>Replay Protection and Ordering of Responses</name>
        <t>The following applies when the destination OSCORE endpoint that receives the response is specifically the destination application endpoint (i.e., the origin client) and the OSCORE layer to remove from the response was applied by a source OSCORE endpoint that is specifically a source application endpoint (i.e., an origin server):</t>
        <ul spacing="normal">
          <li>
            <t>If OSCORE is used to remove the OSCORE layer, the processing of the response in terms of replay protection and ordering occurs according to the method specified in Sections <xref target="RFC8613" section="7.4" sectionFormat="bare"/>, <xref target="RFC8613" section="7.4.1" sectionFormat="bare"/>, and <xref target="RFC8613" section="4.1.3.5.2" sectionFormat="bare"/> of <xref target="RFC8613"/>.</t>
          </li>
          <li>
            <t>If Group OSCORE is used to remove the OSCORE layer, the processing of the response in terms of replay protection and ordering occurs according to the method specified in <xref section="5.3.1" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>.</t>
          </li>
        </ul>
        <t>Instead, the following applies in any other case, i.e., when the source OSCORE endpoint A that applied the OSCORE layer to remove and the destination OSCORE endpoint B are not both application endpoints: Irrespective of whether OSCORE or Group OSCORE is used to remove the OSCORE layer, the processing of the response in terms of replay protection and ordering occurs according to the method specified in <xref section="5.3.1" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>, with the following differences:</t>
        <ul spacing="normal">
          <li>
            <t>The "server" in <xref section="5.3.1" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/> corresponds to the source OSCORE endpoint A that applied the OSCORE layer to remove from the response.</t>
          </li>
          <li>
            <t>The "client" in <xref section="5.3.1" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/> corresponds to the destination OSCORE endpoint B that has to remove the OSCORE layer from the response.</t>
          </li>
          <li>
            <t>The "long exchange" in <xref section="5.3.1" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/> is further generalized to encompass a message exchange such that: the exchange pertains to the request to which the response under processing replies to; and, when previously sending the request, the destination OSCORE endpoint B willingly opted-in for receiving multiple responses to that request (e.g., see the circumstances compiled in <xref target="incoming-responses-piv"/> of the present document).</t>
          </li>
          <li>
            <t>The destination OSCORE endpoint B does not stop processing a response solely on the basis that the Partial IV of the response (when included) is not greater than the Response Number associated with the source OSCORE endpoint A in the message exchange.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="sec-hop-limit">
      <name>OSCORE Processing of the Hop-Limit Option</name>
      <t>The CoAP Hop-Limit Option is defined in <xref target="RFC8768"/> and can be used to detect forwarding loops through a chain of proxies.</t>
      <t>The first proxy in the chain that understands the option can include it in a received request (if not already present therein), then sets the option value to a proper integer value specifying the desired maximum number of hops, and finally forward the request to the next hop. Any following proxy that understands the option decrements the option value and forwards the request if the new value is different from zero, or it returns a 5.08 (Hop Limit Reached) error response otherwise.</t>
      <t><xref target="RFC8768"/> does not define how the Hop-Limit Option is processed by OSCORE. As a consequence, the default behavior specified in <xref section="4.1" sectionFormat="of" target="RFC8613"/> applies, i.e., the Hop-Limit Option has to be processed as Class E for OSCORE.</t>
      <t>However, this results in additionally and unjustifiably increasing the size of OSCORE-protected CoAP messages, in the case that the origin client is the first endpoint to add the Hop-Limit Option in a CoAP request. In the typical scenario where the origin client and the origin server share an OSCORE Security Context, the origin client including the Hop-Limit Option in a request will also protect that option when protecting the request end-to-end for the origin server, per the default processing mentioned above. After that, the origin client sends the request to its adjacent proxy in the chain, which will add an outer Hop-Limit Option to be effectively considered from then on as the message is forwarded towards the origin server.</t>
      <t>This undesirably prevents the first proxy in the chain from enforcing the intent of the origin client, which was presumably in the position to specify a better initial value for the Hop-Limit Option. While this does not fundamentally prevent the detection of forwarding loops, it is conducive to deviations from the intention of the origin client. Moreover, it results in undesired overhead due to the presence of the inner Hop-Limit Option included by the client. That inner option will not be visible by the proxies in the chain and therefore will serve no practical purpose, but it will still be conveyed within the request as this traverses each hop towards the origin server.</t>
      <t>In order to prevent that by construction, this section updates <xref target="RFC8768"/> by explicitly defining the Hop-Limit Option to be of Class U for OSCORE.</t>
      <t>Therefore, with reference to the scenario discussed above, the origin client does not protect the Hop-Limit Option when protecting the request end-to-end for the origin server, thus allowing the first proxy in the chain to see and process the Hop-Limit Option as expected.</t>
      <t>When OSCORE is used at proxies like it is defined in this document, the process defined in <xref target="general-rules"/> seamlessly applies also to the Hop-Limit Option. Therefore, in a scenario where the origin client also shares an OSCORE Security Context with the first proxy in the chain, the origin client does not protect the Hop-Limit Option end-to-end for the origin server, but it does protect the option when protecting the request for that proxy by means of their shared OSCORE Security Context.</t>
    </section>
    <section anchor="sec-response-caching">
      <name>Caching of OSCORE-Protected Responses</name>
      <t>Although it is not possible as per the original OSCORE specification <xref target="RFC8613"/>, effective cacheability of OSCORE-protected responses at proxies can be achieved. To this end, the approach defined in <xref target="I-D.ietf-core-cacheable-oscore"/> can be used, as based on Deterministic Requests protected with the pairwise mode of Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/> used end-to-end between an origin client and an origin server. The applicability of this approach is limited to requests that are safe to process (in the REST sense) and that do not yield side effects at the origin server.</t>
      <t>In particular, this approach requires both the origin client and the origin server to have already joined the correct OSCORE group. Then, starting from the same plain CoAP request, different clients in the OSCORE group are able to deterministically generate the same Deterministic Request protected with Group OSCORE, which is sent to a proxy for being forwarded to the origin server. The proxy can effectively cache the resulting OSCORE-protected response from the server, since the same plain CoAP request will result again in the same Deterministic Request and thus will produce a cache hit at the proxy.</t>
      <t>When using this approach, the following also applies in addition to what is defined in <xref target="incoming-requests"/> and <xref target="incoming-responses"/>, when processing incoming messages at a proxy that implements caching of responses.</t>
      <ul spacing="normal">
        <li>
          <t>Upon receiving a request from (the previous hop towards) the origin client, the proxy checks if specifically the message available during the execution of Step 4 in <xref target="incoming-requests"/> produces a cache hit.  </t>
          <t>
That is, such a message: i) is the one to be forwarded to (the next hop towards) the origin server, if no cache hit occurs; and ii) is the result of an OSCORE decryption and verification at the proxy, if OSCORE is used on the communication leg between the proxy and (the previous hop towards) the origin client.</t>
        </li>
        <li>
          <t>Upon receiving a response from (the next hop towards) the origin server, the proxy first removes the same OSCORE layers that it added when protecting the corresponding outgoing request, as defined in <xref target="incoming-responses"/>.  </t>
          <t>
Then, the proxy stores specifically that resulting response message in its cache. That is, such a stored message is the one to be forwarded to (the previous hop towards) the origin client.</t>
        </li>
      </ul>
      <t>The above is orthogonal to the actual process of serving a request with a cached response, for which rules are defined in <xref section="5.6" sectionFormat="of" target="RFC7252"/> as well as in <xref section="3.2" sectionFormat="of" target="I-D.ietf-core-groupcomm-bis"/> for group communication scenarios. When using the realization of proxy for group communication specified in <xref target="I-D.ietf-core-groupcomm-proxy"/>, such rules are further specialized in <xref section="7" sectionFormat="of" target="I-D.ietf-core-groupcomm-proxy"/>.</t>
    </section>
    <section anchor="establishment-of-oscore-security-contexts">
      <name>Establishment of OSCORE Security Contexts</name>
      <t>Like the original OSCORE specification <xref target="RFC8613"/>, this document is not devoted to any particular approach that two OSCORE endpoints use for establishing an OSCORE Security Context.</t>
      <t>At the same time, the following applies, depending on the two peers using OSCORE or Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/> to protect their communications.</t>
      <ul spacing="normal">
        <li>
          <t>When using OSCORE, the establishment of the OSCORE Security Context can rely on the Lightweight Authenticated Key Exchange (LAKE) protocol <xref target="RFC9528"/>.  </t>
          <t>
Assuming that OSCORE has to be used between the two origin application endpoints as well as between the origin client and the first proxy in the chain, it is expected that the origin client first runs LAKE with the first proxy in the chain and then with the origin server through the chain of proxies (see the example in <xref target="sec-example-edhoc"/>).  </t>
          <t>
Furthermore, the additional use of the combined LAKE + OSCORE request defined in <xref target="RFC9668"/> (denoted therein as "EDHOC + OSCORE request") is particularly beneficial in this case (see the example in <xref target="sec-example-edhoc-comb-req"/>) and especially when relying on a long chain of proxies.</t>
        </li>
        <li>
          <t>The use of Group OSCORE is expected to be limited between the origin application endpoints, e.g., between the origin client and multiple origin servers. In order to join the same OSCORE group and obtain the corresponding Group OSCORE Security Context, those endpoints can use the approach defined in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/> and based on the Authentication and Authorization for Constrained Environments (ACE) framework <xref target="RFC9200"/>.  </t>
          <t>
For the purposes of this document, there is no need for a proxy to also be a member of the OSCORE group whose Group OSCORE Security Context is used by the origin application endpoints for protecting communications end-to-end.</t>
        </li>
      </ul>
      <section anchor="guidelines-proxies">
        <name>Guidelines for Proxies</name>
        <t>When considering an intermediary chain between an origin client and an origin server, all proxies except for the one adjacent to the origin server are expected to be configured as to the establishment and use of OSCORE with the next hop towards the origin server.</t>
        <t>Such a configuration might not be as practical and feasible to enforce for a proxy P adjacent to an origin server S. That is, before forwarding a request to S, P might have to dynamically determine whether to establish an OSCORE Security Context with S (if none is established already) and whether to use it for protecting the request.</t>
        <t>The rest of this section provides guidelines that P can follow in order to determine when to try to establish an OSCORE Security Context with S and when to use an OSCORE Security Context shared with S.</t>
        <t>In order to come to such a determination, P can answer the following three questions. For all of them, the default answer is "no".</t>
        <ul spacing="normal">
          <li>
            <t>Q1: Does S wish to use (Group) OSCORE between itself and an adjacent proxy?  </t>
            <t>
For example, P can answer this question by relying on the SvcParamKey "oscore-with-proxy" within a DNS SVCB Resource Record (RR) <xref target="RFC9460"/><xref target="RFC9461"/>, which is retrieved from a DNS response that P obtains in reply to a DNS query about S.  </t>
            <t>
For the SvcParamKey "oscore-with-proxy", the presentation and wire-format values <bcp14>MUST</bcp14> be empty. When the SvcParamKey "oscore-with-proxy" is specified in an SVCB RR about S, it indicates that S wishes to use (Group) OSCORE between itself and an adjacent proxy. The SvcParamKey "oscore-with-proxy" is registered in <xref target="iana-svcb"/>.</t>
          </li>
          <li>
            <t>Q2: Does S support the use of multiple, nested OSCORE layers?  </t>
            <t>
For example, P can answer this question by relying on the SvcParamKey "nested-oscore" within a DNS SVCB RR, which is retrieved from a DNS response that P obtains in reply to a DNS query about S.  </t>
            <t>
For the SvcParamKey "nested-oscore", the presentation and wire-format values <bcp14>MUST</bcp14> be empty. When the SvcParamKey "nested-oscore" is specified in an SVCB RR about S, it indicates that S supports the use of multiple, nested OSCORE layers, i.e., S is able to handle messages that are protected by at least two OSCORE layers as defined in this document. The SvcParamKey "nested-oscore" is registered in <xref target="iana-svcb"/>.  </t>
            <t>
The SvcParamKey "nested-oscore" does not indicate how many nested OSCORE layers S supports exactly, which is in principle possible to express in an SVCB RR. In fact, it is already the case that S has to be configured with the maximum number of OSCORE layers that it is able to apply (remove) when processing an outgoing (incoming) CoAP message (see <xref target="sec-deviations"/>).</t>
          </li>
          <li>
            <t>Q3: Does S support the key exchange protocol LAKE <xref target="RFC9528"/>?  </t>
            <t>
For example, P can answer this question by using the means specified in <xref target="I-D.ietf-lake-app-profiles"/> that are not used during a LAKE session itself.</t>
          </li>
        </ul>
        <t>The examples above are not exhaustive and P can rely on alternative means to answer the three questions about S.</t>
        <t>Once P has the answers to the questions Q1, Q2, and Q3, then P can determine when to try to establish an OSCORE Security Context with S and when to use an OSCORE Security Context shared with S, as shown in the state diagram in <xref target="fig-oscore-p-s"/>.</t>
        <figure anchor="fig-oscore-p-s">
          <name>Establishment and Use of OSCORE between a Proxy and an Origin Server</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="816" width="536" viewBox="0 0 536 816" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,80" fill="none" stroke="black"/>
                <path d="M 8,320 L 8,448" fill="none" stroke="black"/>
                <path d="M 8,688 L 8,800" fill="none" stroke="black"/>
                <path d="M 40,456 L 40,680" fill="none" stroke="black"/>
                <path d="M 56,144 L 56,208" fill="none" stroke="black"/>
                <path d="M 80,88 L 80,136" fill="none" stroke="black"/>
                <path d="M 80,216 L 80,312" fill="none" stroke="black"/>
                <path d="M 104,144 L 104,208" fill="none" stroke="black"/>
                <path d="M 104,560 L 104,624" fill="none" stroke="black"/>
                <path d="M 128,456 L 128,552" fill="none" stroke="black"/>
                <path d="M 128,632 L 128,680" fill="none" stroke="black"/>
                <path d="M 152,32 L 152,80" fill="none" stroke="black"/>
                <path d="M 152,560 L 152,624" fill="none" stroke="black"/>
                <path d="M 168,688 L 168,800" fill="none" stroke="black"/>
                <path d="M 184,320 L 184,448" fill="none" stroke="black"/>
                <path d="M 216,144 L 216,208" fill="none" stroke="black"/>
                <path d="M 232,216 L 232,592" fill="none" stroke="black"/>
                <path d="M 256,320 L 256,384" fill="none" stroke="black"/>
                <path d="M 272,392 L 272,720" fill="none" stroke="black"/>
                <path d="M 312,216 L 312,320" fill="none" stroke="black"/>
                <path d="M 312,480 L 312,544" fill="none" stroke="black"/>
                <path d="M 312,608 L 312,656" fill="none" stroke="black"/>
                <path d="M 336,736 L 336,800" fill="none" stroke="black"/>
                <path d="M 360,392 L 360,480" fill="none" stroke="black"/>
                <path d="M 360,552 L 360,608" fill="none" stroke="black"/>
                <path d="M 360,664 L 360,736" fill="none" stroke="black"/>
                <path d="M 376,320 L 376,384" fill="none" stroke="black"/>
                <path d="M 384,736 L 384,800" fill="none" stroke="black"/>
                <path d="M 400,480 L 400,544" fill="none" stroke="black"/>
                <path d="M 400,608 L 400,656" fill="none" stroke="black"/>
                <path d="M 432,216 L 432,512" fill="none" stroke="black"/>
                <path d="M 448,144 L 448,208" fill="none" stroke="black"/>
                <path d="M 528,176 L 528,768" fill="none" stroke="black"/>
                <path d="M 8,32 L 152,32" fill="none" stroke="black"/>
                <path d="M 8,80 L 152,80" fill="none" stroke="black"/>
                <path d="M 56,144 L 104,144" fill="none" stroke="black"/>
                <path d="M 216,144 L 448,144" fill="none" stroke="black"/>
                <path d="M 104,176 L 208,176" fill="none" stroke="black"/>
                <path d="M 456,176 L 528,176" fill="none" stroke="black"/>
                <path d="M 56,208 L 104,208" fill="none" stroke="black"/>
                <path d="M 216,208 L 448,208" fill="none" stroke="black"/>
                <path d="M 8,320 L 184,320" fill="none" stroke="black"/>
                <path d="M 256,320 L 376,320" fill="none" stroke="black"/>
                <path d="M 256,384 L 376,384" fill="none" stroke="black"/>
                <path d="M 8,448 L 184,448" fill="none" stroke="black"/>
                <path d="M 312,480 L 400,480" fill="none" stroke="black"/>
                <path d="M 400,512 L 432,512" fill="none" stroke="black"/>
                <path d="M 312,544 L 400,544" fill="none" stroke="black"/>
                <path d="M 104,560 L 152,560" fill="none" stroke="black"/>
                <path d="M 152,592 L 232,592" fill="none" stroke="black"/>
                <path d="M 312,608 L 400,608" fill="none" stroke="black"/>
                <path d="M 104,624 L 152,624" fill="none" stroke="black"/>
                <path d="M 312,656 L 400,656" fill="none" stroke="black"/>
                <path d="M 8,688 L 168,688" fill="none" stroke="black"/>
                <path d="M 168,720 L 272,720" fill="none" stroke="black"/>
                <path d="M 336,736 L 384,736" fill="none" stroke="black"/>
                <path d="M 168,768 L 328,768" fill="none" stroke="black"/>
                <path d="M 384,768 L 528,768" fill="none" stroke="black"/>
                <path d="M 8,800 L 168,800" fill="none" stroke="black"/>
                <path d="M 336,800 L 384,800" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="464,176 452,170.4 452,181.6" fill="black" transform="rotate(180,456,176)"/>
                <polygon class="arrowhead" points="440,216 428,210.4 428,221.6" fill="black" transform="rotate(270,432,216)"/>
                <polygon class="arrowhead" points="368,664 356,658.4 356,669.6" fill="black" transform="rotate(270,360,664)"/>
                <polygon class="arrowhead" points="368,552 356,546.4 356,557.6" fill="black" transform="rotate(270,360,552)"/>
                <polygon class="arrowhead" points="368,392 356,386.4 356,397.6" fill="black" transform="rotate(270,360,392)"/>
                <polygon class="arrowhead" points="336,768 324,762.4 324,773.6" fill="black" transform="rotate(0,328,768)"/>
                <polygon class="arrowhead" points="320,216 308,210.4 308,221.6" fill="black" transform="rotate(270,312,216)"/>
                <polygon class="arrowhead" points="280,392 268,386.4 268,397.6" fill="black" transform="rotate(270,272,392)"/>
                <polygon class="arrowhead" points="240,216 228,210.4 228,221.6" fill="black" transform="rotate(270,232,216)"/>
                <polygon class="arrowhead" points="216,176 204,170.4 204,181.6" fill="black" transform="rotate(0,208,176)"/>
                <polygon class="arrowhead" points="136,680 124,674.4 124,685.6" fill="black" transform="rotate(90,128,680)"/>
                <polygon class="arrowhead" points="136,552 124,546.4 124,557.6" fill="black" transform="rotate(90,128,552)"/>
                <polygon class="arrowhead" points="88,312 76,306.4 76,317.6" fill="black" transform="rotate(90,80,312)"/>
                <polygon class="arrowhead" points="88,136 76,130.4 76,141.6" fill="black" transform="rotate(90,80,136)"/>
                <polygon class="arrowhead" points="48,680 36,674.4 36,685.6" fill="black" transform="rotate(90,40,680)"/>
                <g class="text">
                  <text x="24" y="52">P</text>
                  <text x="48" y="52">has</text>
                  <text x="72" y="52">a</text>
                  <text x="112" y="52">request</text>
                  <text x="28" y="68">to</text>
                  <text x="72" y="68">forward</text>
                  <text x="116" y="68">to</text>
                  <text x="136" y="68">S</text>
                  <text x="132" y="164">NO</text>
                  <text x="80" y="180">Q1?</text>
                  <text x="264" y="180">Forward</text>
                  <text x="312" y="180">the</text>
                  <text x="360" y="180">request</text>
                  <text x="404" y="180">to</text>
                  <text x="424" y="180">S</text>
                  <text x="104" y="292">YES</text>
                  <text x="40" y="340">After</text>
                  <text x="84" y="340">that</text>
                  <text x="112" y="340">P</text>
                  <text x="136" y="340">has</text>
                  <text x="296" y="340">Protect</text>
                  <text x="344" y="340">the</text>
                  <text x="56" y="356">completed</text>
                  <text x="112" y="356">all</text>
                  <text x="144" y="356">the</text>
                  <text x="296" y="356">request</text>
                  <text x="348" y="356">with</text>
                  <text x="64" y="372">decryptions</text>
                  <text x="128" y="372">and</text>
                  <text x="296" y="372">CTX_P_S</text>
                  <text x="72" y="388">verifications</text>
                  <text x="140" y="388">on</text>
                  <text x="32" y="404">the</text>
                  <text x="84" y="404">request,</text>
                  <text x="140" y="404">does</text>
                  <text x="32" y="420">the</text>
                  <text x="80" y="420">request</text>
                  <text x="144" y="420">include</text>
                  <text x="28" y="436">an</text>
                  <text x="68" y="436">OSCORE</text>
                  <text x="128" y="436">Option?</text>
                  <text x="384" y="452">YES</text>
                  <text x="452" y="452">NO</text>
                  <text x="60" y="484">NO</text>
                  <text x="152" y="484">YES</text>
                  <text x="356" y="516">Success?</text>
                  <text x="180" y="580">NO</text>
                  <text x="128" y="596">Q2?</text>
                  <text x="336" y="628">Run</text>
                  <text x="372" y="628">LAKE</text>
                  <text x="340" y="644">with</text>
                  <text x="368" y="644">S</text>
                  <text x="152" y="660">YES</text>
                  <text x="200" y="708">YES</text>
                  <text x="384" y="708">YES</text>
                  <text x="28" y="724">Is</text>
                  <text x="48" y="724">P</text>
                  <text x="96" y="724">currently</text>
                  <text x="48" y="740">sharing</text>
                  <text x="92" y="740">an</text>
                  <text x="132" y="740">OSCORE</text>
                  <text x="52" y="756">Security</text>
                  <text x="120" y="756">Context</text>
                  <text x="308" y="756">NO</text>
                  <text x="412" y="756">NO</text>
                  <text x="48" y="772">CTX_P_S</text>
                  <text x="100" y="772">with</text>
                  <text x="132" y="772">S?</text>
                  <text x="360" y="772">Q3?</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
+-----------------+
| P has a request |
| to forward to S |
+-----------------+
         |
         |
         v
      +-----+             +----------------------------+
      |     |  NO         |                            |
      | Q1? +------------>|  Forward the request to S  |<--------+
      |     |             |                            |         |
      +-----+             +----------------------------+         |
         |                  ^         ^              ^           |
         |                  |         |              |           |
         |                  |         |              |           |
         |                  |         |              |           |
         | YES              |         |              |           |
         v                  |         |              |           |
+---------------------+     |  +------+-------+      |           |
| After that P has    |     |  | Protect the  |      |           |
| completed all the   |     |  | request with |      |           |
| decryptions and     |     |  | CTX_P_S      |      |           |
| verifications on    |     |  +--------------+      |           |
| the request, does   |     |    ^          ^        |           |
| the request include |     |    |          |        |           |
| an OSCORE Option?   |     |    |          |        |           |
+---------------------+     |    |          | YES    | NO        |
    |          |            |    |          |        |           |
    | NO       | YES        |    |    +-----+----+   |           |
    |          |            |    |    |          |   |           |
    |          |            |    |    | Success? +---+           |
    |          |            |    |    |          |               |
    |          v            |    |    +----------+               |
    |       +-----+         |    |          ^                    |
    |       |     |  NO     |    |          |                    |
    |       | Q2? +---------+    |          |                    |
    |       |     |              |    +-----+----+               |
    |       +-----+              |    | Run LAKE |               |
    |          |                 |    | with S   |               |
    |          | YES             |    +----------+               |
    v          v                 |          ^                    |
+-------------------+            |          |                    |
|                   |  YES       |          | YES                |
| Is P currently    +------------+          |                    |
| sharing an OSCORE |                    +--+--+                 |
| Security Context  |                NO  |     |  NO             |
| CTX_P_S with S?   +------------------->| Q3? +-----------------+
|                   |                    |     |
+-------------------+                    +-----+
]]></artwork>
          </artset>
        </figure>
        <t>If P is considering using Group OSCORE with the server S or with a set of origin servers comprising S, then the same as shown in <xref target="fig-oscore-p-s"/> applies, with the following differences:</t>
        <ul spacing="normal">
          <li>
            <t>CTX_P_S denotes a Group OSCORE Security Context that P can use to protect the request over the communication leg between itself and the origin server(s).</t>
          </li>
          <li>
            <t>The steps "Q3?", "Run LAKE with S", and "Success?" are replaced by P joining the correct OSCORE group. A successful group joining results in P establishing CTX_P_S, while a failure results in forwarding the request to the origin server(s) without P protecting the request using Group OSCORE.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="coap-header-compression-with-schc">
      <name>CoAP Header Compression with SCHC</name>
      <t>The method defined in this document enables the possible protection of the same CoAP message with multiple, nested OSCORE layers. Especially when that happens, it is desirable to compress the header of protected CoAP messages, in order to improve performance and ensure that CoAP is usable also in Low-Power Wide-Area Networks (LPWANs).</t>
      <t>To this end, it is possible to use the Static Context Header Compression and fragmentation (SCHC) framework <xref target="RFC8724"/>. In particular, <xref target="I-D.ietf-schc-8824-update"/> specifies how to use SCHC for compressing headers of CoAP messages, also when messages are protected with OSCORE. The SCHC Compression/Decompression is applicable also in the presence of CoAP proxies and especially in the two following cases.</t>
      <ul spacing="normal">
        <li>
          <t>If OSCORE is not used at all, the SCHC processing occurs hop-by-hop, by relying on SCHC Rules that are consistently shared between two adjacent hops, i.e., by relying on a SCHC Context shared by the SCHC Instances hosted at the two adjacent hops and taking part in the same SCHC Session.</t>
        </li>
        <li>
          <t>If OSCORE is used only end-to-end between the application endpoints, then an Inner SCHC Compression/Decompression and an Outer SCHC Compression/Decompression are performed (see <xref section="8.2" sectionFormat="of" target="I-D.ietf-schc-8824-update"/>). In particular, the following holds.  </t>
          <t>
The SCHC processing occurs end-to-end as to the Inner SCHC Compression/Decompression, by relying on Inner SCHC Rules that are consistently shared between the two application endpoints acting as OSCORE endpoints and sharing the OSCORE Security Context used. The Inner SCHC Rules belong to a SCHC Context shared end-to-end by the SCHC Instances hosted at the two application endpoints and taking part in the same SCHC Session.  </t>
          <t>
Instead, the SCHC processing occurs hop-by-hop as to the Outer SCHC Compression/Decompression, by relying on Outer SCHC Rules that are consistently shared between two adjacent hops, i.e., by relying on a per-leg SCHC Context shared by the SCHC Instances hosted at the two adjacent hops and taking part in a distinct SCHC Session.</t>
        </li>
      </ul>
      <t>When using the method defined in this document, thus enabling also an intermediary proxy to be an OSCORE endpoint, the SCHC processing above is generalized as specified below.</t>
      <t>When processing an outgoing CoAP message, a sender endpoint proceeds as follows.</t>
      <ul spacing="normal">
        <li>
          <t>The sender endpoint performs one Inner SCHC Compression for each OSCORE layer applied to the outgoing message.  </t>
          <t>
Each Inner SCHC Compression occurs before protecting the message with that OSCORE layer and relies on the Inner SCHC Rules that are consistently shared with the other OSCORE endpoint. The Inner SCHC Rules belong to a SCHC Context shared by the SCHC Instances hosted at the two OSCORE endpoints and communicating using a SCHC Session.</t>
        </li>
        <li>
          <t>The sender endpoint performs exactly one Outer SCHC Compression.  </t>
          <t>
This occurs after having performed all the intended OSCORE protections of the outgoing message and relies on the Outer SCHC Rules that are consistently shared with the (next hop towards the) destination application endpoint. The Outer SCHC Rules belong to a SCHC Context shared by the SCHC Instances hosted at the two adjacent hops and communicating using a SCHC Session.</t>
        </li>
      </ul>
      <t>That is, with respect to the SCHC Compression/Decompression processing, the following holds.</t>
      <t>An Inner SCHC Compression is intended for a destination OSCORE endpoint, which performs the following steps.</t>
      <ol spacing="normal" type="1"><li>
          <t>It decrypts an incoming message with the OSCORE Security Context shared with the other OSCORE endpoint.</t>
        </li>
        <li>
          <t>It performs the corresponding Inner SCHC Decompression, by relying on the Inner SCHC Rules shared with the other OSCORE endpoint.</t>
        </li>
      </ol>
      <t>An Outer SCHC Compression is intended for the (next hop towards the) destination application endpoint, which performs the following steps.</t>
      <ol spacing="normal" type="1"><li>
          <t>It performs the Outer SCHC Decompression on an incoming message, by relying on the Outer SCHC Rules shared with the previous hop towards the destination application endpoint.</t>
        </li>
        <li>
          <t>Unless it is the destination application endpoint, it performs a new Outer SCHC Compression after having performed all the intended OSCORE protections of an outgoing message, by relying on the Outer SCHC Rules shared with the (next hop towards the) destination application endpoint. Then, it sends the result to the (next-hop towards the) destination application endpoint.</t>
        </li>
      </ol>
      <t>Note that the generalization above does not alter the core approach, design choices, and features of the SCHC Compression/Decompression applied to CoAP headers.</t>
    </section>
    <section removeInRFC="true" anchor="implementation-status">
      <name>Implementation Status</name>
      <t>Note to RFC Editor: when deleting this section, please also delete RFC 7942 from the references of this document.</t>
      <t>(Boilerplate as per <xref section="2.1" sectionFormat="of" target="RFC7942"/>:)</t>
      <t>This section records the status of known implementations of the
protocol defined by this specification at the time of posting of
this Internet-Draft, and is based on a proposal described in
<xref target="RFC7942"/>.  The description of implementations in this section is
intended to assist the IETF in its decision processes in
progressing drafts to RFCs.  Please note that the listing of any
individual implementation here does not imply endorsement by the
IETF.  Furthermore, no effort has been spent to verify the
information presented here that was supplied by IETF contributors.
This is not intended as, and must not be construed to be, a
catalog of available implementations or their features.  Readers
are advised to note that other implementations may exist.</t>
      <t>According to <xref target="RFC7942"/>, "this will allow reviewers and working
groups to assign due consideration to documents that have the
benefit of running code, which may serve as evidence of valuable
experimentation and feedback that have made the implemented
protocols more mature.  It is up to the individual working groups
to use this information as they see fit".
<?line -22?>
      </t>
      <section anchor="sec-implementation-1">
        <name>Implementation #1</name>
        <ul spacing="normal">
          <li>
            <t>Author: Lucas Åhl</t>
          </li>
          <li>
            <t>Responsible organization: RISE Research Institutes of Sweden AB</t>
          </li>
          <li>
            <t>Implementation's name: OSCORE-capable proxy for Eclipse Californium</t>
          </li>
          <li>
            <t>Available at: https://github.com/rikard-sics/californium/tree/oscore_capable_proxies</t>
          </li>
          <li>
            <t>Description: Implementation in Java, building on Eclipse Californium, see:  </t>
            <ul spacing="normal">
              <li>
                <t>https://github.com/eclipse-californium/californium</t>
              </li>
              <li>
                <t>http://eclipse.dev/californium/</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Implementation's level of maturity: prototype</t>
          </li>
          <li>
            <t>The implementation provides the client, the OSCORE-capable forward-proxy, and the server.  </t>
            <t>
OSCORE is supported:  </t>
            <ul spacing="normal">
              <li>
                <t>Between a client and a server (end-to-end through a proxy); and/or</t>
              </li>
              <li>
                <t>Between a client and an OSCORE-capable forward-proxy; and/or</t>
              </li>
              <li>
                <t>Between an OSCORE-capable forward-proxy and a server.</t>
              </li>
            </ul>
            <t>
Supported use also together with other features from the same codebase:  </t>
            <ul spacing="normal">
              <li>
                <t>CoAP Observe <xref target="RFC7641"/>, when independently using OSCORE or not in any of the communication legs above.</t>
              </li>
              <li>
                <t>For any pair of OSCORE endpoints above, an OSCORE Security Context can be dynamically established by running LAKE <xref target="RFC9528"/>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Version compatibility: From version -07 onwards.</t>
          </li>
          <li>
            <t>Licensing: according to the same dual license of Eclipse Californium, i.e., according to the "Eclipse Distribution License 1.0" and the "Eclipse Public License 2.0". See:  </t>
            <ul spacing="normal">
              <li>
                <t>https://github.com/eclipse-californium/californium/blob/main/LICENSE</t>
              </li>
              <li>
                <t>https://www.eclipse.org/org/documents/edl-v10.php</t>
              </li>
              <li>
                <t>https://www.eclipse.org/legal/epl-2.0/</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Contact information: Rikard Höglund - rikard.hoglund@ri.se</t>
          </li>
          <li>
            <t>Information last updated on: 2026-10-19</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-implementation-2">
        <name>Implementation #2</name>
        <ul spacing="normal">
          <li>
            <t>Author: Manassanan Vongprai</t>
          </li>
          <li>
            <t>Responsible organization: RISE Research Institutes of Sweden AB</t>
          </li>
          <li>
            <t>Implementation's name: OSCORE-capable proxy for Contiki-NG</t>
          </li>
          <li>
            <t>Available at: https://github.com/rikard-sics/contiki-ng/tree/oscore_capable_proxies</t>
          </li>
          <li>
            <t>Description: Implementation in Contiki-NG, see:  </t>
            <ul spacing="normal">
              <li>
                <t>https://github.com/contiki-ng/contiki-ng</t>
              </li>
              <li>
                <t>https://www.contiki-ng.org/</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Implementation's level of maturity: prototype</t>
          </li>
          <li>
            <t>The implementation provides the client and the server.  </t>
            <t>
OSCORE is supported:  </t>
            <ul spacing="normal">
              <li>
                <t>Between a client and a server (end-to-end through a proxy); and/or</t>
              </li>
              <li>
                <t>Between a client and an OSCORE-capable forward-proxy (externally provided).</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Version compatibility: From version -07 onwards.</t>
          </li>
          <li>
            <t>Licensing: according to "3-clause BSD" license. See:  </t>
            <ul spacing="normal">
              <li>
                <t>https://github.com/contiki-ng/contiki-ng/blob/develop/LICENSE.md</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Contact information: Rikard Höglund - rikard.hoglund@ri.se</t>
          </li>
          <li>
            <t>Information last updated on: 2026-10-19</t>
          </li>
        </ul>
      </section>
      <section anchor="interoperability">
        <name>Interoperability</name>
        <t>The two implementations mentioned in <xref target="sec-implementation-1"/> and <xref target="sec-implementation-2"/> have successfully completed interoperability tests.</t>
        <t>The scenarios considered during the interoperability tests are as follows:</t>
        <ul spacing="normal">
          <li>
            <t>Java client and Java server</t>
          </li>
          <li>
            <t>Java client and Contiki-NG server</t>
          </li>
          <li>
            <t>Contiki-NG client and Java server</t>
          </li>
          <li>
            <t>Contiki-NG client and Contiki-NG server</t>
          </li>
        </ul>
        <t>For every test scenario:</t>
        <ul spacing="normal">
          <li>
            <t>The Java OSCORE-capable forward-proxy is deployed between the client and the server.</t>
          </li>
          <li>
            <t>The client and the server share an OSCORE Security Context CTX_C_S.</t>
          </li>
          <li>
            <t>The client and the forward-proxy share an OSCORE Security Context CTX_C_P.</t>
          </li>
          <li>
            <t>The client sends requests to a target resource hosted at the server, through the forward-proxy. The server replies to every request by sending a response.</t>
          </li>
          <li>
            <t>All requests and responses are protected with OSCORE as follows:
            </t>
            <ul spacing="normal">
              <li>
                <t>With CTX_C_S (innermost layer) and with CTX_C_P (outermost layer) when transferred over the communication leg between the client and the proxy.</t>
              </li>
              <li>
                <t>With CTX_C_S (single layer) when transferred over the communication leg between the proxy and the server.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="operational-considerations">
      <name>Operational Considerations</name>
      <t>This section compiles the operational considerations that hold for this document.</t>
      <section anchor="logging">
        <name>Logging</name>
        <t>In some use cases, it can be desirable that a proxy produces timestamped logs about the successful or failed forwarding of a request to (the next hop towards) the intended application endpoint(s).</t>
        <t>An attempted request forwarding can be effectively characterized by the transport-specific information of the request to forward that the proxy receives from (the previous hop towards) the source application endpoint and of the request forwarded to (the next hop towards) the intended application endpoint(s), together with the secure communication associations used by the proxy in the two communication legs.</t>
        <t>Although log entries are produced by the proxy, the storage, management, controlled sharing, and disposal of logs could be entrusted to a designated storage point that can be the proxy itself or instead a separate trusted entity.</t>
        <t>Besides what is compiled above, the proxy could produce additional information to log. Further details about what the proxy logs, with what granularity, and based on what triggering events and conditions are application-specific and left to operators to define.</t>
        <t>Like for possible logging occurring at the application endpoints, the proxy <bcp14>MUST NOT</bcp14> log any secret or confidential information pertaining to its forwarding operations. For example, this includes information from its (Group) OSCORE Security Contexts such as the OSCORE Master Secret and keying material derived thereof, or own private keys associated with its authentication credentials used for establishing secure communication associations with other hops.</t>
        <t>It is up to the application to specify for how long a log entry is retained from the time of its creation and until its deletion. Different retention policies could be enforced, for example, depending on the successful/failed request forwarding, the transport-specific information of the adjacent hops, or the secure communication association shared with other hops. For a given set of log entries that are grouped together according to certain criteria, the oldest log entries are expected to be those deleted first.</t>
        <t>It is out of the scope of this document what specific semantics and data model are used by the proxy for producing and processing the logs. Specific semantics and data models can be defined by applications and future specifications.</t>
        <t>It is expected that the logs produced are made available for secure access by authorized external management applications and operators.</t>
        <t>In particular, logged information could be retrieved in the following ways.</t>
        <ul spacing="normal">
          <li>
            <t>By accessing logs at the designated storage point through polling. This can occur in an occasional, regular, or event-driven way.</t>
          </li>
          <li>
            <t>Through notifications sent by the designated storage point according to an operator-defined frequency.</t>
          </li>
          <li>
            <t>Through notifications asynchronously sent by the designated storage point, throttling them in order to prevent congestion and duplication and to not create attack vectors.</t>
          </li>
        </ul>
        <t>From the perspective of an individual management application or network operator, knowledge gained from the logged information can be useful for planning, adjusting, and (fine-)tuning the allocation of network resources, including the amount of available proxies. Also, it can help understand and possibly  troubleshoot the reasons why a proxy has failed to forward certain incoming requests. For example, a request to forward could have been received from a legitimate hop that, contrary to expectation, the proxy fails to identify among those included in an allow-list as a prerequirement to forward the request.</t>
        <t>Some of the logged information can be privacy-sensitive. This especially holds for the metadata about application endpoints, i.e., their addressing information and, when applicable, (identifiers of) their authentication credentials that are used to authenticate with the proxy when establishing and using a secure communication association. If external management applications and operators obtain such metadata, they become able to track a given application endpoint, as to its interactions with one or multiple other application endpoints.</t>
        <t>Therefore, the logged information that is effectively provided to external management applications and operators <bcp14>SHOULD</bcp14> be redacted by the designated storage point, by omitting any privacy-sensitive information element that could enable or facilitate the impairment of application endpoints' privacy, e.g., by tracking origin clients as they interact with different origin servers. Exceptions could apply, e.g., if the designated storage point can verify that the management application or operator in question is specifically authorized to obtain such privacy-sensitive information and appropriately entitled to obtain it according to enforced privacy policies.</t>
      </section>
      <section anchor="management-and-distribution-of-keying-material">
        <name>Management and Distribution of Keying Material</name>
        <t>The approaches used to manage and distribute keying material depend on whether any two OSCORE endpoints use OSCORE or Group OSCORE.</t>
        <t>If OSCORE is used, the two OSCORE endpoints can establish an OSCORE Security Context in different ways, e.g., by using the key exchange protocol LAKE <xref target="RFC9528"/>. While sharing a still valid OSCORE Security Context, the two OSCORE endpoints could update it, for example by running a key update protocol such as Key Update for OSCORE (KUDOS) <xref target="I-D.ietf-core-oscore-key-update"/>.</t>
        <t>If Group OSCORE is used, the management and distribution of the keying material used in the OSCORE group is entrusted to the Group Manager that is responsible for the group (see <xref section="12" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>. A possible realization of Group Manager is the one defined <xref target="I-D.ietf-ace-key-groupcomm-oscore"/> and based on the ACE framework <xref target="RFC9200"/>.</t>
      </section>
      <section anchor="access-control">
        <name>Access Control</name>
        <t>The enforcement of access control at a proxy makes it possible that only certain origin clients are able to have their requests proxied towards the targeted origin server(s).</t>
        <t>In order to enforce such access control, it is fundamentally required that a proxy receiving a request to forward has a secure communication association with the origin client and/or with the request sender when those are not the same. This allows the proxy to authenticate the hops that originate/send a request to forward, and to verify whether they are in an allow-list. Depending on the result of such verification, the proxy can unconditionally forward or not forward the request, or instead forward the request according to specific forwarding and traffic policies that apply to the identified originator/sender of the request.</t>
        <t>If unable to authenticate the originator/sender of the request, the proxy can be configured to unconditionally forward or not forward the request, or instead to forward the request according to rate limits, potentially taking into account the source-addressing information of the request sender.</t>
        <t>The enforcement of access control at proxies complements but does not replace the enforcement of access control at an origin server for accessing its target resources. In order to enforce access control for an origin client accessing a target resource, it is fundamentally required that secure communication is used between such a requesting client and the origin server hosting the resource.</t>
        <t>When receiving a request protected by the requesting client, the origin server can enforce access control after having successfully authenticated the requesting client, according to the access rights that are granted to the client's identity.</t>
        <t>In particular, access control at the origin server can be enforced by using the ACE framework <xref target="RFC9200"/>, with a granularity that takes into account the resource specifically targeted at the origin server, the operation requested by sending a request to that resource, and the specific permission(s) that the requesting client is authorized to have according to its corresponding access token. Furthermore, the interactions between the requesting client and the origin server are secured as per the specific transport profile of ACE used, for example <xref target="RFC9203"/>, <xref target="I-D.ietf-ace-edhoc-oscore-profile"/>, or <xref target="I-D.ietf-ace-group-oscore-profile"/>.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The same security considerations about CoAP <xref target="RFC7252"/> and group communication for CoAP <xref target="I-D.ietf-core-groupcomm-bis"/> apply to this document. The same security considerations from <xref target="RFC8613"/> and <xref target="I-D.ietf-core-oscore-groupcomm"/> apply to this document, when using OSCORE or Group OSCORE to protect exchanged messages.</t>
      <t>Further security considerations to take into account are inherited from the specific CoAP options, extensions, and methods that are used when relying on OSCORE or Group OSCORE.</t>
      <t>This document does not change the security properties of OSCORE and Group OSCORE. That is, given any two OSCORE endpoints, the method defined in this document provides them with the same security guarantees that OSCORE and Group OSCORE provide in the case where such endpoints are specifically application endpoints.</t>
      <t>If Group OSCORE is used over a communication leg and the group mode is used to apply a protection layer to a message over that leg (see <xref section="7" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>), then all the members of the OSCORE group that support the group mode are able to remove that protection layer, i.e., to accordingly decrypt and verify the message. Therefore, the OSCORE group should only include OSCORE endpoints for which that is acceptable.</t>
      <section anchor="preserving-location-anonymity">
        <name>Preserving Location Anonymity</name>
        <t>As discussed in <xref target="source-based-policies"/>, a particularly sensitive server might use policies with strict criteria about what makes an OSCORE-protected request eligible to be decrypted and verified.</t>
        <t>When a server using such policies receives an OSCORE-protected request (see Step 6 in <xref target="incoming-requests"/>), the server proceeds only if the necessary OSCORE Security Contexts are not only available to use, but also present in a local list of OSCORE Security Contexts that are usable to decrypt a request from the alleged request sender.</t>
        <t>This is particularly relevant for an origin server that expects to receive messages protected end-to-end by origin clients, but only if sent by a reverse-proxy as its adjacent hop.</t>
        <t>In such a setup, that check prevents a malicious sender endpoint C from associating the addressing information of the origin server S with the OSCORE Security Context CTX that C and S are sharing. Making such an association would compromise the location anonymity of the origin server, as otherwise afforded by leveraging the reverse-proxy.</t>
        <t>That is, if C gains knowledge of some addressing information ADDR, then C might send a request directly addressed to ADDR and protected with CTX. A response protected with CTX would prove that ADDR is in fact the addressing information of S.</t>
        <t>However, after performing and failing the check on the received request, S replies with a 4.01 (Unauthorized) error response that is not protected with CTX, hence preserving the location anonymity of the origin server.</t>
      </section>
      <section anchor="sec-security-considerations-hop-limit">
        <name>Hop-Limit Option</name>
        <t><xref target="sec-hop-limit"/> of this document defines that the Hop-Limit Option <xref target="RFC8768"/> is of Class U for OSCORE. This overrides the default behavior specified in <xref section="4.1" sectionFormat="of" target="RFC8613"/>, according to which the option would be processed as Class E for OSCORE.</t>
        <t>As discussed in <xref target="sec-hop-limit"/>, applying the default behavior would result in the Hop-Limit Option added by the origin client being protected end-to-end for the origin server. That is, the intention of the client about performing a detection of forwarding loops would be hidden even from the first proxy in the chain, which in turn adds an outer Hop-Limit Option and thus further contributes to increasing the message size (see <xref target="sec-hop-limit"/>).</t>
        <t>Instead, having defined the Hop-Limit Option as Class U for OSCORE, the following holds by virtue of the procedure defined in <xref target="general-rules"/>.</t>
        <ul spacing="normal">
          <li>
            <t>If the origin client and the origin server share an OSCORE Security Context, the client protects the option end-to-end for the server only when sending a request to the server directly (i.e., not via a proxy).</t>
          </li>
          <li>
            <t>If the origin client and the first proxy in the chain share an OSCORE Security Context, then the client protects the option for the proxy, while also avoiding the downsides resulting from the default behavior mentioned above.  </t>
            <t>
Otherwise, unless the communication leg between the origin client and the first proxy in the chain relies on another secure association (e.g., a DTLS connection <xref target="RFC9147"/>), the Hop-Limit Option included in a request sent to the proxy will be unprotected.  </t>
            <t>
Fundamentally, this is not worse then when applying the default behavior mentioned above. In that case, the origin client would not be able to provide the proxy with its intention as to detecting forwarding loops, while an active on-path adversary would be able to tamper with the request and add an outer Hop-Limit Option with a fraudulent value for the proxy to use.</t>
          </li>
        </ul>
        <t>More generally, if any two adjacent hops share an OSCORE Security Context, then the Hop-Limit Option will be protected with OSCORE in the communication leg between those two hops.</t>
        <t>If the Hop-Limit Option is transported unprotected over the communication leg between two hops, then the following applies.</t>
        <ul spacing="normal">
          <li>
            <t>A passive on-path adversary can read the option value. By possibly relying on other information such as the option value read in other communication legs, the adversary might be able to infer the topology of the network and the path used for delivering requests from the origin client.</t>
          </li>
          <li>
            <t>An active on-path adversary can add or remove the option, or alter its value. Adding the option allows the adversary to trigger an otherwise undesired process for detecting forwarding loops, e.g., as an attempt to probe the topology of the network. Removing the option results in undetectably interrupting the ongoing process for detecting forwarding loops, while altering the option value undetectably interferes with the natural progress of such an ongoing process.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has the following actions for IANA.</t>
      <t>Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph.</t>
      <section anchor="iana-coap-options">
        <name>CoAP Option Numbers Registry</name>
        <t>IANA is asked to add this document as an additional reference for the Hop-Limit Option in the "CoAP Option Numbers" registry <xref target="CoAP.Option.Numbers"/> within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
      </section>
      <section anchor="iana-svcb">
        <name>DNS SVCB Service Parameter Keys (SvcParamKeys)</name>
        <t>IANA is asked to add the following entries to the "DNS SVCB Service Parameter Keys (SvcParamKeys)" registry <xref target="DNS.SVCB.SvcParamKeys"/> within the "DNS Service Bindings (SVCB)" registry group.</t>
        <ul spacing="normal">
          <li>
            <t>Number: TBD1</t>
          </li>
          <li>
            <t>Name: oscore-with-proxy</t>
          </li>
          <li>
            <t>Meaning: Supported use of (Group) OSCORE with an adjacent proxy</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX, <xref target="guidelines-proxies"/>]</t>
          </li>
        </ul>
        <t><br/></t>
        <ul spacing="normal">
          <li>
            <t>Number: TBD2</t>
          </li>
          <li>
            <t>Name: nested-oscore</t>
          </li>
          <li>
            <t>Meaning: Supported use of nested OSCORE layers</t>
          </li>
          <li>
            <t>Change Controller: IETF</t>
          </li>
          <li>
            <t>Reference: [RFC-XXXX, <xref target="guidelines-proxies"/>]</t>
          </li>
        </ul>
      </section>
    </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="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="RFC8724">
          <front>
            <title>SCHC: Generic Framework for Static Context Header Compression and Fragmentation</title>
            <author fullname="A. Minaburo" initials="A." surname="Minaburo"/>
            <author fullname="L. Toutain" initials="L." surname="Toutain"/>
            <author fullname="C. Gomez" initials="C." surname="Gomez"/>
            <author fullname="D. Barthel" initials="D." surname="Barthel"/>
            <author fullname="JC. Zuniga" initials="JC." surname="Zuniga"/>
            <date month="April" year="2020"/>
            <abstract>
              <t>This document defines the Static Context Header Compression and fragmentation (SCHC) framework, which provides both a header compression mechanism and an optional fragmentation mechanism. SCHC has been designed with Low-Power Wide Area Networks (LPWANs) in mind.</t>
              <t>SCHC compression is based on a common static context stored both in the LPWAN device and in the network infrastructure side. This document defines a generic header compression mechanism and its application to compress IPv6/UDP headers.</t>
              <t>This document also specifies an optional fragmentation and reassembly mechanism. It can be used to support the IPv6 MTU requirement over the LPWAN technologies. Fragmentation is needed for IPv6 datagrams that, after SCHC compression or when such compression was not possible, still exceed the Layer 2 maximum payload size.</t>
              <t>The SCHC header compression and fragmentation mechanisms are independent of the specific LPWAN technology over which they are used. This document defines generic functionalities and offers flexibility with regard to parameter settings and mechanism choices. This document standardizes the exchange over the LPWAN between two SCHC entities. Settings and choices specific to a technology or a product are expected to be grouped into profiles, which are specified in other documents. Data models for the context and profiles are out of scope.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8724"/>
          <seriesInfo name="DOI" value="10.17487/RFC8724"/>
        </reference>
        <reference anchor="RFC8768">
          <front>
            <title>Constrained Application Protocol (CoAP) Hop-Limit Option</title>
            <author fullname="M. Boucadair" initials="M." surname="Boucadair"/>
            <author fullname="T. Reddy.K" initials="T." surname="Reddy.K"/>
            <author fullname="J. Shallow" initials="J." surname="Shallow"/>
            <date month="March" year="2020"/>
            <abstract>
              <t>The presence of Constrained Application Protocol (CoAP) proxies may lead to infinite forwarding loops, which is undesirable. To prevent and detect such loops, this document specifies the Hop-Limit CoAP option.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8768"/>
          <seriesInfo name="DOI" value="10.17487/RFC8768"/>
        </reference>
        <reference anchor="RFC9460">
          <front>
            <title>Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)</title>
            <author fullname="B. Schwartz" initials="B." surname="Schwartz"/>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <author fullname="E. Nygren" initials="E." surname="Nygren"/>
            <date month="November" year="2023"/>
            <abstract>
              <t>This document specifies the "SVCB" ("Service Binding") and "HTTPS" DNS resource record (RR) types to facilitate the lookup of information needed to make connections to network services, such as for HTTP origins. SVCB records allow a service to be provided from multiple alternative endpoints, each with associated parameters (such as transport protocol configuration), and are extensible to support future uses (such as keys for encrypting the TLS ClientHello). They also enable aliasing of apex domains, which is not possible with CNAME. The HTTPS RR is a variation of SVCB for use with HTTP (see RFC 9110, "HTTP Semantics"). By providing more information to the client before it attempts to establish a connection, these records offer potential benefits to both performance and privacy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9460"/>
          <seriesInfo name="DOI" value="10.17487/RFC9460"/>
        </reference>
        <reference anchor="RFC9461">
          <front>
            <title>Service Binding Mapping for DNS Servers</title>
            <author fullname="B. Schwartz" initials="B." surname="Schwartz"/>
            <date month="November" year="2023"/>
            <abstract>
              <t>The SVCB DNS resource record type expresses a bound collection of endpoint metadata, for use when establishing a connection to a named service. DNS itself can be such a service, when the server is identified by a domain name. This document provides the SVCB mapping for named DNS servers, allowing them to indicate support for encrypted transport protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9461"/>
          <seriesInfo name="DOI" value="10.17487/RFC9461"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-groupcomm">
          <front>
            <title>Group Object Security for Constrained RESTful Environments (Group OSCORE)</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>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <date day="23" month="December" year="2025"/>
            <abstract>
              <t>   This document defines the security protocol Group Object Security for
   Constrained RESTful Environments (Group OSCORE), providing end-to-end
   security of messages exchanged with the Constrained Application
   Protocol (CoAP) between members of a group, e.g., sent over IP
   multicast.  In particular, the described protocol defines how OSCORE
   is used in a group communication setting to provide source
   authentication for CoAP group requests, sent by a client to multiple
   servers, and for protection of the corresponding CoAP responses.
   Group OSCORE also defines a pairwise mode where each member of the
   group can efficiently derive a symmetric pairwise key with each other
   member of the group for pairwise OSCORE communication.  Group OSCORE
   can be used between endpoints communicating with CoAP or CoAP-
   mappable HTTP.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-groupcomm-28"/>
        </reference>
        <reference anchor="I-D.ietf-core-href">
          <front>
            <title>Constrained Resource Identifiers</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="21" month="November" year="2025"/>
            <abstract>
              <t>   The Constrained Resource Identifier (CRI) is a complement to the
   Uniform Resource Identifier (URI) that represents the URI components
   in Concise Binary Object Representation (CBOR) rather than as a
   sequence of characters.  This approach simplifies parsing,
   comparison, and reference resolution in environments with severe
   limitations on processing power, code size, and memory size.

   This RFC updates RFC 7595 by adding a column on the "URI Schemes"
   registry.


   // (This "cref" paragraph will be removed by the RFC editor:) After
   // approval of -28 and nit fixes in -29, the present revision -30
   // contains two more small fixes for nits that were uncovered in the
   // RPC intake process.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-30"/>
        </reference>
        <reference anchor="I-D.ietf-schc-8824-update">
          <front>
            <title>Static Context Header Compression (SCHC) for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Laurent Toutain" initials="L." surname="Toutain">
              <organization>IMT Atlantique</organization>
            </author>
            <author fullname="Iván Martínez" initials="I." surname="Martínez">
              <organization>IRISA</organization>
            </author>
            <author fullname="Ana Minaburo" initials="A." surname="Minaburo">
              <organization>Consultant</organization>
            </author>
            <date day="26" month="July" year="2026"/>
            <abstract>
              <t>   This document defines how to compress Constrained Application
   Protocol (CoAP) headers using the Static Context Header Compression
   and fragmentation (SCHC) framework.  SCHC defines a header
   compression mechanism adapted for constrained devices, and it uses a
   static description of the header to reduce the header's redundancy
   and size.  While RFC 8724 describes the SCHC compression and
   fragmentation framework and its application for IPv6 and UDP headers,
   this document applies SCHC to CoAP headers.  The CoAP header
   structure differs from that of IPv6 and UDP headers, since CoAP uses
   a flexible header with a variable number of options that are in turn
   of variable length.  The CoAP message format is asymmetric, i.e.,
   request messages have a header format different from that of response
   messages.  This specification gives guidance on applying SCHC to
   flexible headers and on leveraging the message format asymmetry for
   defining more efficient compression Rules.  This document replaces
   and obsoletes RFC 8824.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-schc-8824-update-10"/>
        </reference>
        <reference anchor="I-D.ietf-core-uri-path-abbrev">
          <front>
            <title>URI Path abbreviation in CoAP</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Michael Richardson" initials="M." surname="Richardson">
              <organization>Sandelman Software Works</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   Applications built on CoAP face a conflict between the technical need
   for short message sizes and the interoperability requirement of
   following BCP190 and thus using (relatively verbose) well-known URI
   paths.  This document introduces the Uri-Path-Abbrev CoAP option that
   allows expressing well-known URI paths in as little as two bytes.

   Using this option revealed a subtle flaw in RFC7252 that severely
   limited the extension point of critical options.  This document
   updates RFC7252 to rectify that.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-uri-path-abbrev-05"/>
        </reference>
        <reference anchor="CoAP.Option.Numbers" target="https://www.iana.org/assignments/core-parameters/core-parameters.xhtml#option-numbers">
          <front>
            <title>CoAP Option Numbers</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="DNS.SVCB.SvcParamKeys" target="https://www.iana.org/assignments/dns-svcb/dns-svcb.xhtml#dns-svcparamkeys">
          <front>
            <title>DNS SVCB Service Parameter Keys (SvcParamKeys)</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC7030">
          <front>
            <title>Enrollment over Secure Transport</title>
            <author fullname="M. Pritikin" initials="M." role="editor" surname="Pritikin"/>
            <author fullname="P. Yee" initials="P." role="editor" surname="Yee"/>
            <author fullname="D. Harkins" initials="D." role="editor" surname="Harkins"/>
            <date month="October" year="2013"/>
            <abstract>
              <t>This document profiles certificate enrollment for clients using Certificate Management over CMS (CMC) messages over a secure transport. This profile, called Enrollment over Secure Transport (EST), describes a simple, yet functional, certificate management protocol targeting Public Key Infrastructure (PKI) clients that need to acquire client certificates and associated Certification Authority (CA) certificates. It also supports client-generated public/private key pairs as well as key pairs generated by the CA.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7030"/>
          <seriesInfo name="DOI" value="10.17487/RFC7030"/>
        </reference>
        <reference anchor="RFC7641">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks. The state of a resource on a CoAP server can change over time. This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time. The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7641"/>
          <seriesInfo name="DOI" value="10.17487/RFC7641"/>
        </reference>
        <reference anchor="RFC8742">
          <front>
            <title>Concise Binary Object Representation (CBOR) Sequences</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>This document describes the Concise Binary Object Representation (CBOR) Sequence format and associated media type "application/cbor-seq". A CBOR Sequence consists of any number of encoded CBOR data items, simply concatenated in sequence.</t>
              <t>Structured syntax suffixes for media types allow other media types to build on them and make it explicit that they are built on an existing media type as their foundation. This specification defines and registers "+cbor-seq" as a structured syntax suffix for CBOR Sequences.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8742"/>
          <seriesInfo name="DOI" value="10.17487/RFC8742"/>
        </reference>
        <reference anchor="RFC9147">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
            <date month="April" year="2022"/>
            <abstract>
              <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability. Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
              <t>This document obsoletes RFC 6347.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9147"/>
          <seriesInfo name="DOI" value="10.17487/RFC9147"/>
        </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="RFC9203">
          <front>
            <title>The Object Security for Constrained RESTful Environments (OSCORE) Profile of the Authentication and Authorization for Constrained Environments (ACE) Framework</title>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="M. Gunnarsson" initials="M." surname="Gunnarsson"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies a profile for the Authentication and Authorization for Constrained Environments (ACE) framework. It utilizes Object Security for Constrained RESTful Environments (OSCORE) to provide communication security and proof-of-possession for a key owned by the client and bound to an OAuth 2.0 access token.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9203"/>
          <seriesInfo name="DOI" value="10.17487/RFC9203"/>
        </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>
        <reference anchor="I-D.ietf-core-groupcomm-bis">
          <front>
            <title>Group Communication for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="10" month="February" year="2026"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP) is a web transfer
   protocol for constrained devices and constrained networks.  In a
   number of use cases, constrained devices often naturally operate in
   groups (e.g., in a building automation scenario, all lights in a
   given room may need to be switched on/off as a group).  This document
   specifies the use of CoAP for group communication, including the use
   of UDP/IP multicast as the default underlying data transport.  Both
   unsecured and secured CoAP group communication are specified.
   Security is achieved by use of the Group Object Security for
   Constrained RESTful Environments (Group OSCORE) protocol.  The target
   application area of this specification is any group communication use
   cases that involve resource-constrained devices or networks that
   support CoAP.  This document replaces and obsoletes RFC 7390, while
   it updates RFC 7252 and RFC 7641.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-bis-18"/>
        </reference>
        <reference anchor="I-D.ietf-core-groupcomm-proxy">
          <front>
            <title>Proxy Operations in Group Communication for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <date day="2" month="September" year="2026"/>
            <abstract>
              <t>   This document defines a specific realization of proxy intended for
   scenarios that use group communication for the Constrained
   Application Protocol (CoAP).  Such a proxy processes a single request
   sent by a client typically over unicast and distributes the request
   to a group of servers, e.g., over UDP/IP multicast as the defined
   default transport protocol.  Then, the proxy collects the individual
   responses from those servers and relays those responses back to the
   client, in a way that allows the client to distinguish the responses
   and their origin servers through embedded addressing information.
   This document updates RFC7252 with respect to caching of response
   messages at proxies.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-proxy-07"/>
        </reference>
        <reference anchor="I-D.ietf-core-observe-multicast-notifications">
          <front>
            <title>Observe Notifications as CoAP Multicast Responses</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP) allows clients to
   "observe" resources at a server and to receive notifications as
   unicast responses upon changes of the resource state.  In some use
   cases, such as those based on publish-subscribe, it would be
   convenient for the server to send a single notification addressed to
   all the clients observing the same target resource.  This document
   updates RFC7252 and RFC7641, and it defines how a server sends
   observe notifications as response messages over multicast,
   synchronizing all the observers of the same resource on the same
   shared Token value.  Besides, this document defines how the security
   protocol Group Object Security for Constrained RESTful Environments
   (Group OSCORE) can be used to protect multicast notifications end-to-
   end between the server and the observer clients.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-observe-multicast-notifications-15"/>
        </reference>
        <reference anchor="I-D.ietf-core-multicast-notifications-proxy">
          <front>
            <title>Using Proxies for Observe Notifications as CoAP Multicast Responses</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP) allows clients to
   "observe" resources at a server and to receive notifications as
   unicast responses upon changes of the resource state.  Instead of
   sending a distinct unicast notification to each different client, a
   server can alternatively send a single notification as a response
   message over multicast, to all the clients observing the same target
   resource.  When doing so, the security protocol Group Object Security
   for Constrained RESTful Environments (Group OSCORE) can be used to
   protect multicast notifications end-to-end between the server and the
   observer clients.  This document describes how multicast
   notifications can be used in network setups that leverage a proxy,
   e.g., in order to accommodate clients that are not able to directly
   listen to multicast traffic.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-multicast-notifications-proxy-02"/>
        </reference>
        <reference anchor="I-D.ietf-core-coap-pubsub">
          <front>
            <title>A publish-subscribe architecture for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Jaime Jimenez" initials="J." surname="Jimenez">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Michael Koster" initials="M." surname="Koster">
              <organization>Dogtiger Labs</organization>
            </author>
            <author fullname="Ari Keränen" initials="A." surname="Keränen">
              <organization>Ericsson</organization>
            </author>
            <date day="2" month="July" year="2026"/>
            <abstract>
              <t>   This document describes a publish-subscribe architecture for the
   Constrained Application Protocol (CoAP), extending the capabilities
   of CoAP communications for supporting endpoints with long breaks in
   connectivity and/or up-time.  CoAP clients publish on and subscribe
   to a topic via a corresponding topic resource at a CoAP server acting
   as broker.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-coap-pubsub-21"/>
        </reference>
        <reference anchor="I-D.ietf-core-transport-indication">
          <front>
            <title>CoAP Transport Indication</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Martine Sophie Lenders" initials="M. S." surname="Lenders">
              <organization>TUD Dresden University of Technology</organization>
            </author>
            <date day="30" month="April" year="2026"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP, [RFC7252]) is available
   over different transports (UDP, DTLS, TCP, TLS, WebSockets), but
   lacks a way to unify these addresses.  This document provides
   terminology and provisions based on Web Linking [RFC8288] and Service
   Bindings (SVCB, [RFC9460]) to express alternative transports
   available to a device, and to optimize exchanges using these.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-transport-indication-10"/>
        </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-ace-key-groupcomm-oscore">
          <front>
            <title>Key Management for Group Object Security for Constrained RESTful Environments (Group OSCORE) Using Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="14" month="March" year="2026"/>
            <abstract>
              <t>   This document defines an application profile of the Authentication
   and Authorization for Constrained Environments (ACE) framework, to
   request and provision keying material in group communication
   scenarios that are based on the Constrained Application Protocol
   (CoAP) and are secured with Group Object Security for Constrained
   RESTful Environments (Group OSCORE).  This application profile
   delegates the authentication and authorization of Clients, which join
   an OSCORE group through a Resource Server acting as Group Manager for
   that group.  This application profile leverages protocol-specific
   transport profiles of ACE to achieve communication security, server
   authentication, and proof of possession of a key owned by the Client
   and bound to an OAuth 2.0 access token.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-key-groupcomm-oscore-21"/>
        </reference>
        <reference anchor="I-D.ietf-ace-coap-est-oscore">
          <front>
            <title>Protecting EST Payloads with OSCORE</title>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Shahid Raza" initials="S." surname="Raza">
              <organization>RISE</organization>
            </author>
            <author fullname="Martin Furuhed" initials="M." surname="Furuhed">
              <organization>Nexus</organization>
            </author>
            <author fullname="Mališa Vučinić" initials="M." surname="Vučinić">
              <organization>Inria</organization>
            </author>
            <date day="2" month="July" year="2026"/>
            <abstract>
              <t>   Enrollment over Secure Transport (EST) is a certificate provisioning
   protocol over HTTPS [RFC7030] or CoAPs [RFC9148].  This document
   specifies how to carry EST over the Constrained Application Protocol
   (CoAP) protected with Object Security for Constrained RESTful
   Environments (OSCORE).  The specification builds on the EST-coaps
   [RFC9148] specification, but uses OSCORE and Ephemeral Diffie-Hellman
   over COSE (EDHOC) instead of DTLS.  The specification also leverages
   the certificate structures defined in
   [I-D.ietf-cose-cbor-encoded-cert], which can be optionally used
   alongside X.509 certificates.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-coap-est-oscore-11"/>
        </reference>
        <reference anchor="I-D.ietf-ace-edhoc-oscore-profile">
          <front>
            <title>Lightweight Authenticated Key Exchange (LAKE) and Object Security for Constrained RESTful Environments (OSCORE) Profile of the Authentication and Authorization for Constrained Environments (ACE) Framework</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="22" month="October" year="2026"/>
            <abstract>
              <t>   This document specifies a profile for the Authentication and
   Authorization for Constrained Environments (ACE) framework.  It
   utilizes the Lightweight Authenticated Key Exchange (LAKE) protocol
   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.  LAKE 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-12"/>
        </reference>
        <reference anchor="I-D.ietf-ace-group-oscore-profile">
          <front>
            <title>The Group Object Security for Constrained RESTful Environments (Group OSCORE) Profile of 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="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</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.  The
   profile uses Group Object Security for Constrained RESTful
   Environments (Group OSCORE) to provide communication security between
   a client and one or multiple resource servers that are members of an
   OSCORE group.  The profile securely binds an OAuth 2.0 access token
   to the public key of the client associated with the private key used
   by that client in the OSCORE group.  The profile uses Group OSCORE to
   achieve server authentication and proof of possession of the client's
   private key.  Also, it provides proof of the client's membership to
   the OSCORE group by binding the access token to information that
   pertains to the Group OSCORE Security Context, thus allowing the
   resource server(s) to verify the client's membership upon receiving
   the access token.  Effectively, the profile enables fine-grained
   access control paired with secure group communication, in accordance
   with the Zero Trust principles.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-group-oscore-profile-07"/>
        </reference>
        <reference anchor="I-D.ietf-core-cacheable-oscore">
          <front>
            <title>End-to-End Protected and Cacheable CoAP Responses using Group Object Security for Constrained RESTful Environments (Group OSCORE)</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   When using the Constrained Application Protocol (CoAP), exchanged
   messages can be protected end-to-end also across untrusted
   intermediary proxies.  This can be achieved with Object Security for
   Constrained RESTful Environments (OSCORE) or, in the case of group
   communication, with Group Object Security for Constrained RESTful
   Environments (Group OSCORE).  However, this sidesteps the proxies'
   abilities to cache responses from the origin server(s).  This
   document restores cacheability of end-to-end protected responses at
   proxies, by using Group OSCORE and introducing consensus requests,
   which any client in an OSCORE group can send to one server or
   multiple servers in the same group.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-cacheable-oscore-02"/>
        </reference>
        <reference anchor="I-D.ietf-lake-app-profiles">
          <front>
            <title>Coordinating the Use of Application Profiles for the Lightweight Authenticated Key Exchange (LAKE) Protocol</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <date day="26" month="October" year="2026"/>
            <abstract>
              <t>   The Lightweight Authenticated Key Exchange (LAKE) protocol requires
   certain parameters to be agreed out-of-band, in order to ensure its
   successful completion.  To this end, application profiles specify the
   intended use of LAKE to allow for the relevant processing and
   verifications to be made.  In order to ensure the applicability of
   such parameters and information beyond transport- or setup-specific
   scenarios, this document defines a canonical, CBOR-based
   representation that can be used to describe, distribute, and store
   LAKE application profiles.  Furthermore, in order to facilitate
   interoperability between LAKE implementations and support LAKE
   extensibility for additional integrations, this document defines a
   number of means to coordinate the use of LAKE application profiles.
   Finally, this document defines a set of well-known LAKE application
   profiles.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lake-app-profiles-07"/>
        </reference>
        <reference anchor="I-D.amsuess-t2trg-onion-coap">
          <front>
            <title>Using onion routing with CoAP</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <date day="7" month="July" year="2025"/>
            <abstract>
              <t>   The CoAP protocol was designed with direct connections and proxies in
   mind.  This document defines mechanisms by which chains of proxies
   can be set up.  In combination, they enable the operation of hidden
   services and of clients similar to how Tor (onion routing) enables it
   for TCP-based protocols.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-amsuess-t2trg-onion-coap-04"/>
        </reference>
        <reference anchor="LwM2M-Core" target="https://www.openmobilealliance.org/release/LightweightM2M/V1_2_2-20240613-A/OMA-TS-LightweightM2M_Core-V1_2_2-20240613-A.pdf">
          <front>
            <title>Lightweight Machine to Machine Technical Specification - Core, Approved Version 1.2.2, OMA-TS-LightweightM2M_Core-V1_2_2-20240613-A</title>
            <author>
              <organization>Open Mobile Alliance</organization>
            </author>
            <date year="2024" month="June"/>
          </front>
        </reference>
        <reference anchor="LwM2M-Transport" target="https://www.openmobilealliance.org/release/LightweightM2M/V1_2_2-20240613-A/OMA-TS-LightweightM2M_Transport-V1_2_2-20240613-A.pdf">
          <front>
            <title>Lightweight Machine to Machine Technical Specification - Transport Bindings, Approved Version 1.2.2, OMA-TS-LightweightM2M_Transport-V1_2_2-20240613-A</title>
            <author>
              <organization>Open Mobile Alliance</organization>
            </author>
            <date year="2024" month="June"/>
          </front>
        </reference>
        <reference anchor="LwM2M-Gateway" target="https://www.openmobilealliance.org/release/LwM2M_Gateway/V1_1_1-20240312-A/OMA-TS-LWM2M_Gateway-V1_1_1-20240312-A.pdf">
          <front>
            <title>Lightweight Machine to Machine Gateway Technical Specification - Approved Version 1.1.1, OMA-TS-LWM2M_Gateway-V1_1_1-20240312-A</title>
            <author>
              <organization>Open Mobile Alliance</organization>
            </author>
            <date year="2024" month="March"/>
          </front>
        </reference>
        <reference anchor="TOR-SPEC" target="https://spec.torproject.org/">
          <front>
            <title>Tor Specifications</title>
            <author>
              <organization>Tor Project</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="DAI-SNAC" target="http://dx.doi.org/10.1145/3488661.3494029">
          <front>
            <title>Discovery and capabilities of guard proxies for CoRE networks</title>
            <author initials="C." surname="Amsüss" fullname="Christian Amsüss">
              <organization/>
            </author>
            <date year="2021" month="December"/>
          </front>
        </reference>
        <reference anchor="RFC7942">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
      </references>
    </references>
    <?line 885?>

<section anchor="sec-use-cases">
      <name>Use Cases</name>
      <t>The approach defined in this document has been motivated by a number of use cases, which are summarized below.</t>
      <section anchor="ssec-uc1">
        <name>CoAP Group Communication with Proxies</name>
        <t>CoAP also supports one-to-many group communication <xref target="I-D.ietf-core-groupcomm-bis"/>, e.g., over IP multicast, which can be protected end-to-end between origin client and origin servers by using Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
        <t>This communication model can be assisted by intermediaries such as a CoAP forward-proxy or reverse-proxy, which relays a group request to the origin servers. If Group OSCORE is used, the proxy is intentionally not a member of the OSCORE group. Furthermore, <xref target="I-D.ietf-core-groupcomm-proxy"/> defines a signaling protocol between origin client and proxy, to ensure that responses from the different origin servers are forwarded back to the origin client within a time interval set by the client and that those responses can be distinguished from one another.</t>
        <t>That signaling protocol requires that the proxy identifies the origin client as allowed-listed, before forwarding a group request to the servers (see <xref section="4" sectionFormat="of" target="I-D.ietf-core-groupcomm-proxy"/>). In turn, this requires a security association between the origin client and the proxy, which would be convenient to provide with a dedicated OSCORE Security Context shared between the two, since the client is possibly using also Group OSCORE with the origin servers.</t>
      </section>
      <section anchor="ssec-uc2">
        <name>CoAP Observe Notifications over Multicast</name>
        <t>The Observe extension for CoAP <xref target="RFC7641"/> allows a client to register its interest in "observing" a resource at a server. The server can then send back notification responses upon changes in the resource representation, all matching with the original observation request.</t>
        <t>In some applications, such as based on publish-subscribe communication <xref target="I-D.ietf-core-coap-pubsub"/>, multiple clients are interested in observing the same resource at the same server. In the interest of such applications, <xref target="I-D.ietf-core-observe-multicast-notifications"/> defines a method that allows the server to send a single notification response to all the observer clients at once, e.g., over IP multicast. To this end, the server synchronizes the clients by providing them with a common "phantom observation request", against which the following multicast notifications will match.</t>
        <t>If the clients and the server use Group OSCORE for end-to-end security and a proxy is also involved, an additional step is required (see <xref section="4" sectionFormat="of" target="I-D.ietf-core-multicast-notifications-proxy"/>). That is, clients are in turn required to provide the proxy with the obtained "phantom observation request", thus enabling the proxy to receive the multicast notifications from the server.</t>
        <t>Therefore, it is preferable to have a security association also between each client and the proxy, in order to ensure the integrity of that information provided to the proxy (see <xref section="10.1" sectionFormat="of" target="I-D.ietf-core-multicast-notifications-proxy"/>). Like for the use case in <xref target="ssec-uc1"/>, this would be conveniently achieved with a dedicated OSCORE Security Context shared between a client and the proxy, since the client is also using Group OSCORE with the origin server.</t>
      </section>
      <section anchor="ssec-uc3">
        <name>LwM2M Client and External Application Server</name>
        <t>The Lightweight Machine-to-Machine (LwM2M) protocol <xref target="LwM2M-Core"/> enables a LwM2M Client device to securely bootstrap and then register at a LwM2M Server, with which it will perform most of its following communication exchanges. As per the transport bindings specification of LwM2M <xref target="LwM2M-Transport"/>, the LwM2M Client and LwM2M Server can use CoAP and OSCORE to secure their communications at the application layer, including during the device registration process.</t>
        <t>Furthermore, Section 5.4.1 of <xref target="LwM2M-Transport"/> specifies that:</t>
        <blockquote>
          <t>OSCORE <bcp14>MAY</bcp14> also be used between LwM2M endpoint and non-LwM2M endpoint, e.g. between an Application Server and a LwM2M Client via a LwM2M server. Both the LwM2M endpoint and non-LwM2M endpoint <bcp14>MUST</bcp14> implement OSCORE and be provisioned with an OSCORE Security Context as defined in [OSCORE].</t>
        </blockquote>
        <t>In such a case, the LwM2M Server can practically act as forward-proxy between the LwM2M Client and the external Application Server. At the same time, the LwM2M Client and LwM2M Server must continue protecting communications on their leg using their OSCORE Security Context. Like for the use case in <xref target="ssec-uc1"/>, this also allows the LwM2M Server to identify the LwM2M Client, before forwarding its request outside the LwM2M domain and towards the external Application Server.</t>
      </section>
      <section anchor="ssec-uc4">
        <name>LwM2M Gateway</name>
        <t>The specification <xref target="LwM2M-Gateway"/> extends the LwM2M architecture by defining the LwM2M Gateway functionality. That is, a LwM2M Server can manage end IoT devices that are deployed "behind" the LwM2M Gateway. While it is outside the scope of that specification, it is possible for the LwM2M Gateway to use any suitable protocol with its connected end IoT devices, as well as to carry out any required protocol translation.</t>
        <t>Practically, the LwM2M Server can send a request to the LwM2M Gateway, asking to forward the request to an end IoT device. With particular reference to CoAP and the related transport binding specified in <xref target="LwM2M-Transport"/>, the LwM2M Server acting as a CoAP client sends its request to the LwM2M Gateway acting as a CoAP server.</t>
        <t>If CoAP is used in the communication leg between the LwM2M Gateway and the end IoT devices, then the LwM2M Gateway fundamentally acts as a CoAP reverse-proxy (see <xref section="5.7.3" sectionFormat="of" target="RFC7252"/>). That is, in addition to its own resources, the LwM2M Gateway serves the resources hosted by each end IoT device that stands behind it, as exposed by the LwM2M Gateway under a dedicated URI path. As per <xref target="LwM2M-Gateway"/>, the first URI path segment is used as a "prefix" to identify the specific IoT device, while the remaining URI path segments specify the target resource at that IoT device.</t>
        <t>As per Section 7 of <xref target="LwM2M-Gateway"/>, message exchanges between the LwM2M Server and the LwM2M Gateway are secured using the LwM2M-defined technologies, while the LwM2M protocol does not provide end-to-end security between the LwM2M Server and the end IoT devices. However, the approach defined in this document makes it possible to achieve both goals, by allowing the LwM2M Server to use OSCORE for protecting a message both end-to-end with the targeted end IoT device and with the LwM2M Gateway acting as a reverse-proxy.</t>
      </section>
      <section anchor="access-control-to-a-proxy">
        <name>Access Control to a Proxy</name>
        <t>From a security point of view, it would be convenient if the proxy could provide suitable credentials to the client, as a general trusted proxy for the system. At the same time, it can be desirable to limit the use of such a proxy to a set of clients that have permission to use it, and that the proxy can identify through a secure communication association.</t>
        <t>However, in order for OSCORE to be an applicable security mechanism for this scenario, OSCORE has to be terminated at the proxy. That is, it would be required for a client and the proxy to share a dedicated OSCORE Security Context and to use it for protecting their communication leg.</t>
        <t>Combined with what is defined above, a server aware of a suitable cross-proxy can rely on it as a third-party service, in order to indicate transports for CoAP that are available for that server (see <xref section="5" sectionFormat="of" target="I-D.ietf-core-transport-indication"/>).</t>
      </section>
      <section anchor="access-control-to-the-origin-server">
        <name>Access Control to the Origin Server</name>
        <t>A proxy may be deployed to act as an entry point to a firewalled network that only authenticated clients can join. As an alternative to a hard firewall that can be either traversed or not, a proxy can instead apply major rate limits on incoming traffic from unauthenticated clients <xref target="DAI-SNAC"/> and lift those limits for authenticated clients, possibly to different extents depending on the specific client.</t>
        <t>In particular, authentication can rely on the secure communication association used between a client and the proxy. If the proxy could share a different OSCORE Security Context with each different client, then the proxy can rely on it to identify a client before forwarding messages from that client to other members of the firewalled network.</t>
        <t>Furthermore, if a client trusts the proxy to perform its tasks in a privacy-oriented way, the client can rely on its secure communication association shared with the proxy in order to conceal what origin servers it is communicating with, by hiding that information from further possible intermediaries or on-path passive adversaries on the communication leg between the client and the proxy.</t>
      </section>
      <section anchor="further-use-cases">
        <name>Further Use Cases</name>
        <t>The approach defined in this document can be useful also in the following use cases relying on a proxy.</t>
        <ul spacing="normal">
          <li>
            <t>The method specified in <xref target="I-D.ietf-ace-coap-est-oscore"/> enables public-key certificate enrollment for Internet of Things deployments. This leverages payload formats defined in Enrollment over Secure Transport (EST) <xref target="RFC7030"/>, while relying on CoAP for message transfer and on OSCORE for message protection.  </t>
            <t>
In real-world deployments, an EST server issuing public-key certificates may reside outside a constrained network that includes devices acting as EST clients. In particular, the EST clients are expected to support only CoAP, while the EST server in a non-constrained network is expected to support only HTTP. This requires a CoAP-to-HTTP proxy to be deployed between the EST clients and the EST server, in order to map CoAP messages with HTTP messages across the two networks.  </t>
            <t>
Even in such a scenario, the EST server and every EST client can still effectively use OSCORE to protect their communications end-to-end. At the same time, it is desirable to have an additional secure association between the EST client and the CoAP-to-HTTP proxy, especially in order for the proxy to identify the EST client before forwarding EST messages out of the CoAP boundary of the constrained network and towards the EST server.</t>
          </li>
          <li>
            <t>The approach defined in this document does not pose a limit to the number of OSCORE protections applied to the same CoAP message.  </t>
            <t>
This enables more privacy-oriented scenarios based on proxy chains, where the origin client protects a CoAP request first by using the OSCORE Security Context shared with the origin server, and then by using different OSCORE Security Contexts shared with the different hops in the chain. Once received at a chain hop, the request would be stripped of the OSCORE protection associated with that hop before being forwarded to the next one.  </t>
            <t>
Building on that, it is also possible to enable the operation of hidden services and clients through onion routing with CoAP <xref target="I-D.amsuess-t2trg-onion-coap"/>, similarly to how Tor (The Onion Router) <xref target="TOR-SPEC"/> enables it for TCP-based protocols.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="sec-examples">
      <name>Examples of Message Exchanges</name>
      <t>This section provides a number of examples where the approach defined in this document is used to protect message exchanges.</t>
      <t>The presented examples build on the example shown in <xref section="A.1" sectionFormat="of" target="RFC8613"/>, which illustrates an origin client requesting the alarm status from an origin server through a forward-proxy.</t>
      <t>The abbreviations "REQ" and "RESP" are used to denote a request message and a response message, respectively.</t>
      <section anchor="sec-examples-1">
        <name>With Forward-Proxy; OSCORE: C-S, C-P</name>
        <t>In the example shown in <xref target="fig-example-client-proxy"/>, message exchanges are protected with OSCORE as follows.</t>
        <ul spacing="normal">
          <li>
            <t>End-to-end, between the client and the server, using the OSCORE Security Context CTX_C_S. The client uses the OSCORE Sender ID 0x5f when using OSCORE with the server.</t>
          </li>
          <li>
            <t>Between the client and the proxy, using the OSCORE Security Context CTX_C_P. The client uses the OSCORE Sender ID 0x20 when using OSCORE with the proxy.</t>
          </li>
        </ul>
        <figure anchor="fig-example-client-proxy">
          <name>Use of OSCORE between Client-Server and Client-Proxy</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1360" width="544" viewBox="0 0 544 1360" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 24,104 L 24,112" fill="none" stroke="black"/>
                <path d="M 24,168 L 24,1168" fill="none" stroke="black"/>
                <path d="M 24,1224 L 24,1232" fill="none" stroke="black"/>
                <path d="M 24,1288 L 24,1296" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,400" fill="none" stroke="black"/>
                <path d="M 88,456 L 88,896" fill="none" stroke="black"/>
                <path d="M 88,952 L 88,1296" fill="none" stroke="black"/>
                <path d="M 152,48 L 152,624" fill="none" stroke="black"/>
                <path d="M 152,680 L 152,688" fill="none" stroke="black"/>
                <path d="M 152,744 L 152,1296" fill="none" stroke="black"/>
                <path d="M 24,192 L 80,192" fill="none" stroke="black"/>
                <path d="M 88,480 L 144,480" fill="none" stroke="black"/>
                <path d="M 96,768 L 152,768" fill="none" stroke="black"/>
                <path d="M 32,976 L 88,976" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="152,480 140,474.4 140,485.6" fill="black" transform="rotate(0,144,480)"/>
                <polygon class="arrowhead" points="104,768 92,762.4 92,773.6" fill="black" transform="rotate(180,96,768)"/>
                <polygon class="arrowhead" points="88,192 76,186.4 76,197.6" fill="black" transform="rotate(0,80,192)"/>
                <polygon class="arrowhead" points="40,976 28,970.4 28,981.6" fill="black" transform="rotate(180,32,976)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="88" y="36">Proxy</text>
                  <text x="148" y="36">Server</text>
                  <text x="24" y="52">|</text>
                  <text x="32" y="68">Encrypt</text>
                  <text x="16" y="84">REQ</text>
                  <text x="52" y="84">with</text>
                  <text x="32" y="100">CTX_C_S</text>
                  <text x="32" y="132">Encrypt</text>
                  <text x="16" y="148">REQ</text>
                  <text x="52" y="148">with</text>
                  <text x="32" y="164">CTX_C_P</text>
                  <text x="216" y="196">Code:</text>
                  <text x="260" y="196">0.02</text>
                  <text x="308" y="196">(POST)</text>
                  <text x="52" y="212">POST</text>
                  <text x="212" y="212">Token:</text>
                  <text x="260" y="212">0x8c</text>
                  <text x="208" y="228">OSCORE:</text>
                  <text x="284" y="228">[kid:0x20,</text>
                  <text x="360" y="228">Partial</text>
                  <text x="420" y="228">IV:31]</text>
                  <text x="212" y="244">0xff</text>
                  <text x="204" y="260">Payload:</text>
                  <text x="268" y="260">{Code:</text>
                  <text x="316" y="260">0.02</text>
                  <text x="368" y="260">(POST),</text>
                  <text x="288" y="276">Uri-Host:</text>
                  <text x="388" y="276">"example.com",</text>
                  <text x="280" y="292">OSCORE:</text>
                  <text x="356" y="292">[kid:0x5f,</text>
                  <text x="432" y="292">Partial</text>
                  <text x="496" y="292">IV:42],</text>
                  <text x="304" y="308">Proxy-Scheme:</text>
                  <text x="392" y="308">"coap",</text>
                  <text x="272" y="324">0xff,</text>
                  <text x="276" y="340">{Code:</text>
                  <text x="324" y="340">0.01</text>
                  <text x="372" y="340">(GET),</text>
                  <text x="296" y="356">Uri-Path:</text>
                  <text x="396" y="356">"alarm_status"</text>
                  <text x="256" y="372">}</text>
                  <text x="292" y="372">//</text>
                  <text x="344" y="372">Encrypted</text>
                  <text x="404" y="372">with</text>
                  <text x="456" y="372">CTX_C_S</text>
                  <text x="248" y="388">}</text>
                  <text x="268" y="388">//</text>
                  <text x="320" y="388">Encrypted</text>
                  <text x="380" y="388">with</text>
                  <text x="432" y="388">CTX_C_P</text>
                  <text x="96" y="420">Decrypt</text>
                  <text x="80" y="436">REQ</text>
                  <text x="116" y="436">with</text>
                  <text x="96" y="452">CTX_C_P</text>
                  <text x="216" y="484">Code:</text>
                  <text x="260" y="484">0.02</text>
                  <text x="308" y="484">(POST)</text>
                  <text x="116" y="500">POST</text>
                  <text x="212" y="500">Token:</text>
                  <text x="260" y="500">0x7b</text>
                  <text x="200" y="516">Uri-Host:</text>
                  <text x="296" y="516">"example.com"</text>
                  <text x="208" y="532">OSCORE:</text>
                  <text x="284" y="532">[kid:0x5f,</text>
                  <text x="360" y="532">Partial</text>
                  <text x="420" y="532">IV:42]</text>
                  <text x="212" y="548">0xff</text>
                  <text x="204" y="564">Payload:</text>
                  <text x="248" y="564">{</text>
                  <text x="272" y="580">Code:</text>
                  <text x="316" y="580">0.01</text>
                  <text x="364" y="580">(GET),</text>
                  <text x="288" y="596">Uri-Path:</text>
                  <text x="388" y="596">"alarm_status"</text>
                  <text x="248" y="612">}</text>
                  <text x="268" y="612">//</text>
                  <text x="320" y="612">Encrypted</text>
                  <text x="380" y="612">with</text>
                  <text x="432" y="612">CTX_C_S</text>
                  <text x="160" y="644">Decrypt</text>
                  <text x="144" y="660">REQ</text>
                  <text x="180" y="660">with</text>
                  <text x="160" y="676">CTX_C_S</text>
                  <text x="160" y="708">Encrypt</text>
                  <text x="148" y="724">RESP</text>
                  <text x="188" y="724">with</text>
                  <text x="160" y="740">CTX_C_S</text>
                  <text x="216" y="772">Code:</text>
                  <text x="260" y="772">2.04</text>
                  <text x="320" y="772">(Changed)</text>
                  <text x="124" y="788">2.04</text>
                  <text x="212" y="788">Token:</text>
                  <text x="260" y="788">0x7b</text>
                  <text x="208" y="804">OSCORE:</text>
                  <text x="248" y="804">-</text>
                  <text x="212" y="820">0xff</text>
                  <text x="204" y="836">Payload:</text>
                  <text x="268" y="836">{Code:</text>
                  <text x="316" y="836">2.05</text>
                  <text x="380" y="836">(Content),</text>
                  <text x="272" y="852">0xff,</text>
                  <text x="264" y="868">"0"</text>
                  <text x="248" y="884">}</text>
                  <text x="268" y="884">//</text>
                  <text x="320" y="884">Encrypted</text>
                  <text x="380" y="884">with</text>
                  <text x="432" y="884">CTX_C_S</text>
                  <text x="96" y="916">Encrypt</text>
                  <text x="84" y="932">RESP</text>
                  <text x="124" y="932">with</text>
                  <text x="96" y="948">CTX_C_P</text>
                  <text x="216" y="980">Code:</text>
                  <text x="260" y="980">2.04</text>
                  <text x="320" y="980">(Changed)</text>
                  <text x="60" y="996">2.04</text>
                  <text x="212" y="996">Token:</text>
                  <text x="260" y="996">0x8c</text>
                  <text x="208" y="1012">OSCORE:</text>
                  <text x="248" y="1012">-</text>
                  <text x="212" y="1028">0xff</text>
                  <text x="204" y="1044">Payload:</text>
                  <text x="268" y="1044">{Code:</text>
                  <text x="316" y="1044">2.04</text>
                  <text x="380" y="1044">(Changed),</text>
                  <text x="280" y="1060">OSCORE:</text>
                  <text x="324" y="1060">-,</text>
                  <text x="272" y="1076">0xff,</text>
                  <text x="276" y="1092">{Code:</text>
                  <text x="324" y="1092">2.05</text>
                  <text x="388" y="1092">(Content),</text>
                  <text x="280" y="1108">0xff,</text>
                  <text x="272" y="1124">"0"</text>
                  <text x="256" y="1140">}</text>
                  <text x="292" y="1140">//</text>
                  <text x="344" y="1140">Encrypted</text>
                  <text x="404" y="1140">with</text>
                  <text x="456" y="1140">CTX_C_S</text>
                  <text x="248" y="1156">}</text>
                  <text x="268" y="1156">//</text>
                  <text x="320" y="1156">Encrypted</text>
                  <text x="380" y="1156">with</text>
                  <text x="432" y="1156">CTX_C_P</text>
                  <text x="32" y="1188">Decrypt</text>
                  <text x="20" y="1204">RESP</text>
                  <text x="60" y="1204">with</text>
                  <text x="32" y="1220">CTX_C_P</text>
                  <text x="32" y="1252">Decrypt</text>
                  <text x="20" y="1268">RESP</text>
                  <text x="60" y="1268">with</text>
                  <text x="32" y="1284">CTX_C_S</text>
                  <text x="28" y="1332">Square</text>
                  <text x="92" y="1332">brackets</text>
                  <text x="136" y="1332">[</text>
                  <text x="160" y="1332">...</text>
                  <text x="184" y="1332">]</text>
                  <text x="228" y="1332">indicate</text>
                  <text x="296" y="1332">content</text>
                  <text x="340" y="1332">of</text>
                  <text x="396" y="1332">compressed</text>
                  <text x="460" y="1332">COSE</text>
                  <text x="512" y="1332">object.</text>
                  <text x="24" y="1348">Curly</text>
                  <text x="84" y="1348">brackets</text>
                  <text x="128" y="1348">{</text>
                  <text x="152" y="1348">...</text>
                  <text x="176" y="1348">}</text>
                  <text x="220" y="1348">indicate</text>
                  <text x="296" y="1348">encrypted</text>
                  <text x="360" y="1348">data.</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
Client  Proxy  Server
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_S   |       |
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_P   |       |
  |       |       |
  +------>|       |     Code: 0.02 (POST)
  | POST  |       |    Token: 0x8c
  |       |       |   OSCORE: [kid:0x20, Partial IV:31]
  |       |       |     0xff
  |       |       |  Payload: {Code: 0.02 (POST),
  |       |       |            Uri-Host: "example.com",
  |       |       |            OSCORE: [kid:0x5f, Partial IV:42],
  |       |       |            Proxy-Scheme: "coap",
  |       |       |            0xff,
  |       |       |            {Code: 0.01 (GET),
  |       |       |             Uri-Path: "alarm_status"
  |       |       |            }   // Encrypted with CTX_C_S
  |       |       |           } // Encrypted with CTX_C_P
  |       |       |
  |     Decrypt   |
  |     REQ with  |
  |     CTX_C_P   |
  |       |       |
  |       +------>|     Code: 0.02 (POST)
  |       | POST  |    Token: 0x7b
  |       |       | Uri-Host: "example.com"
  |       |       |   OSCORE: [kid:0x5f, Partial IV:42]
  |       |       |     0xff
  |       |       |  Payload: {
  |       |       |            Code: 0.01 (GET),
  |       |       |            Uri-Path: "alarm_status"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |
  |       |     Decrypt
  |       |     REQ with
  |       |     CTX_C_S
  |       |       |
  |       |     Encrypt
  |       |     RESP with
  |       |     CTX_C_S
  |       |       |
  |       |<------+     Code: 2.04 (Changed)
  |       |  2.04 |    Token: 0x7b
  |       |       |   OSCORE: -
  |       |       |     0xff
  |       |       |  Payload: {Code: 2.05 (Content),
  |       |       |            0xff,
  |       |       |            "0"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |
  |     Encrypt   |
  |     RESP with |
  |     CTX_C_P   |
  |       |       |
  |<------+       |     Code: 2.04 (Changed)
  |  2.04 |       |    Token: 0x8c
  |       |       |   OSCORE: -
  |       |       |     0xff
  |       |       |  Payload: {Code: 2.04 (Changed),
  |       |       |            OSCORE: -,
  |       |       |            0xff,
  |       |       |            {Code: 2.05 (Content),
  |       |       |             0xff,
  |       |       |             "0"
  |       |       |            }   // Encrypted with CTX_C_S
  |       |       |           } // Encrypted with CTX_C_P
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_P   |       |
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_S   |       |
  |       |       |

Square brackets [ ... ] indicate content of compressed COSE object.
Curly brackets { ... } indicate encrypted data.
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="with-forward-proxy-oscore-c-s-p-s">
        <name>With Forward-Proxy; OSCORE: C-S, P-S</name>
        <t>In the example shown in <xref target="fig-example-proxy-server"/>, message exchanges are protected with OSCORE as follows.</t>
        <ul spacing="normal">
          <li>
            <t>End-to-end between the client and the server, using the OSCORE Security Context CTX_C_S. The client uses the OSCORE Sender ID 0x5f when using OSCORE with the server.</t>
          </li>
          <li>
            <t>Between the proxy and the server, using the OSCORE Security Context CTX_P_S. The proxy uses the OSCORE Sender ID 0xd4 when using OSCORE with the server.</t>
          </li>
        </ul>
        <figure anchor="fig-example-proxy-server">
          <name>Use of OSCORE between Client-Server and Proxy-Server</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1344" width="560" viewBox="0 0 560 1344" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 24,104 L 24,1216" fill="none" stroke="black"/>
                <path d="M 24,1272 L 24,1280" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,272" fill="none" stroke="black"/>
                <path d="M 88,328 L 88,1008" fill="none" stroke="black"/>
                <path d="M 88,1064 L 88,1280" fill="none" stroke="black"/>
                <path d="M 152,48 L 152,544" fill="none" stroke="black"/>
                <path d="M 152,600 L 152,608" fill="none" stroke="black"/>
                <path d="M 152,664 L 152,672" fill="none" stroke="black"/>
                <path d="M 152,728 L 152,736" fill="none" stroke="black"/>
                <path d="M 152,792 L 152,1280" fill="none" stroke="black"/>
                <path d="M 24,128 L 80,128" fill="none" stroke="black"/>
                <path d="M 88,352 L 144,352" fill="none" stroke="black"/>
                <path d="M 96,816 L 152,816" fill="none" stroke="black"/>
                <path d="M 32,1088 L 88,1088" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="152,352 140,346.4 140,357.6" fill="black" transform="rotate(0,144,352)"/>
                <polygon class="arrowhead" points="104,816 92,810.4 92,821.6" fill="black" transform="rotate(180,96,816)"/>
                <polygon class="arrowhead" points="88,128 76,122.4 76,133.6" fill="black" transform="rotate(0,80,128)"/>
                <polygon class="arrowhead" points="40,1088 28,1082.4 28,1093.6" fill="black" transform="rotate(180,32,1088)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="88" y="36">Proxy</text>
                  <text x="148" y="36">Server</text>
                  <text x="24" y="52">|</text>
                  <text x="32" y="68">Encrypt</text>
                  <text x="16" y="84">REQ</text>
                  <text x="52" y="84">with</text>
                  <text x="32" y="100">CTX_C_S</text>
                  <text x="248" y="132">Code:</text>
                  <text x="292" y="132">0.02</text>
                  <text x="340" y="132">(POST)</text>
                  <text x="52" y="148">POST</text>
                  <text x="244" y="148">Token:</text>
                  <text x="292" y="148">0x8c</text>
                  <text x="232" y="164">Uri-Host:</text>
                  <text x="328" y="164">"example.com"</text>
                  <text x="240" y="180">OSCORE:</text>
                  <text x="316" y="180">[kid:0x5f,</text>
                  <text x="392" y="180">Partial</text>
                  <text x="452" y="180">IV:42]</text>
                  <text x="216" y="196">Proxy-Scheme:</text>
                  <text x="300" y="196">"coap"</text>
                  <text x="244" y="212">0xff</text>
                  <text x="236" y="228">Payload:</text>
                  <text x="300" y="228">{Code:</text>
                  <text x="348" y="228">0.01</text>
                  <text x="396" y="228">(GET),</text>
                  <text x="320" y="244">Uri-Path:</text>
                  <text x="420" y="244">"alarm_status"</text>
                  <text x="280" y="260">}</text>
                  <text x="300" y="260">//</text>
                  <text x="352" y="260">Encrypted</text>
                  <text x="412" y="260">with</text>
                  <text x="464" y="260">CTX_C_S</text>
                  <text x="96" y="292">Encrypt</text>
                  <text x="80" y="308">REQ</text>
                  <text x="116" y="308">with</text>
                  <text x="96" y="324">CTX_P_S</text>
                  <text x="248" y="356">Code:</text>
                  <text x="292" y="356">0.02</text>
                  <text x="340" y="356">(POST)</text>
                  <text x="116" y="372">POST</text>
                  <text x="244" y="372">Token:</text>
                  <text x="292" y="372">0x7b</text>
                  <text x="232" y="388">Uri-Host:</text>
                  <text x="328" y="388">"example.com"</text>
                  <text x="240" y="404">OSCORE:</text>
                  <text x="316" y="404">[kid:0xd4,</text>
                  <text x="392" y="404">Partial</text>
                  <text x="452" y="404">IV:31]</text>
                  <text x="244" y="420">0xff</text>
                  <text x="236" y="436">Payload:</text>
                  <text x="300" y="436">{Code:</text>
                  <text x="348" y="436">0.02</text>
                  <text x="400" y="436">(POST),</text>
                  <text x="312" y="452">OSCORE:</text>
                  <text x="388" y="452">[kid:0x5f,</text>
                  <text x="464" y="452">Partial</text>
                  <text x="528" y="452">IV:42],</text>
                  <text x="304" y="468">0xff,</text>
                  <text x="308" y="484">{Code:</text>
                  <text x="356" y="484">0.01</text>
                  <text x="404" y="484">(GET),</text>
                  <text x="328" y="500">Uri-Path:</text>
                  <text x="428" y="500">"alarm_status"</text>
                  <text x="288" y="516">}</text>
                  <text x="324" y="516">//</text>
                  <text x="376" y="516">Encrypted</text>
                  <text x="436" y="516">with</text>
                  <text x="488" y="516">CTX_C_S</text>
                  <text x="280" y="532">}</text>
                  <text x="300" y="532">//</text>
                  <text x="352" y="532">Encrypted</text>
                  <text x="412" y="532">with</text>
                  <text x="464" y="532">CTX_P_S</text>
                  <text x="160" y="564">Decrypt</text>
                  <text x="144" y="580">REQ</text>
                  <text x="180" y="580">with</text>
                  <text x="160" y="596">CTX_P_S</text>
                  <text x="160" y="628">Decrypt</text>
                  <text x="144" y="644">REQ</text>
                  <text x="180" y="644">with</text>
                  <text x="160" y="660">CTX_C_S</text>
                  <text x="160" y="692">Encrypt</text>
                  <text x="148" y="708">RESP</text>
                  <text x="188" y="708">with</text>
                  <text x="160" y="724">CTX_C_S</text>
                  <text x="160" y="756">Encrypt</text>
                  <text x="148" y="772">RESP</text>
                  <text x="188" y="772">with</text>
                  <text x="160" y="788">CTX_P_S</text>
                  <text x="248" y="820">Code:</text>
                  <text x="292" y="820">2.04</text>
                  <text x="352" y="820">(Changed)</text>
                  <text x="124" y="836">2.04</text>
                  <text x="244" y="836">Token:</text>
                  <text x="292" y="836">0x7b</text>
                  <text x="240" y="852">OSCORE:</text>
                  <text x="280" y="852">-</text>
                  <text x="244" y="868">0xff</text>
                  <text x="236" y="884">Payload:</text>
                  <text x="300" y="884">{Code:</text>
                  <text x="348" y="884">2.04</text>
                  <text x="412" y="884">(Changed),</text>
                  <text x="312" y="900">OSCORE:</text>
                  <text x="356" y="900">-,</text>
                  <text x="304" y="916">0xff,</text>
                  <text x="308" y="932">{Code:</text>
                  <text x="356" y="932">2.05</text>
                  <text x="420" y="932">(Content),</text>
                  <text x="312" y="948">0xff,</text>
                  <text x="304" y="964">"0"</text>
                  <text x="288" y="980">}</text>
                  <text x="324" y="980">//</text>
                  <text x="376" y="980">Encrypted</text>
                  <text x="436" y="980">with</text>
                  <text x="488" y="980">CTX_C_S</text>
                  <text x="280" y="996">}</text>
                  <text x="300" y="996">//</text>
                  <text x="352" y="996">Encrypted</text>
                  <text x="412" y="996">with</text>
                  <text x="464" y="996">CTX_P_S</text>
                  <text x="96" y="1028">Decrypt</text>
                  <text x="84" y="1044">RESP</text>
                  <text x="124" y="1044">with</text>
                  <text x="96" y="1060">CTX_P_S</text>
                  <text x="248" y="1092">Code:</text>
                  <text x="292" y="1092">2.04</text>
                  <text x="352" y="1092">(Changed)</text>
                  <text x="60" y="1108">2.04</text>
                  <text x="244" y="1108">Token:</text>
                  <text x="292" y="1108">0x8c</text>
                  <text x="240" y="1124">OSCORE:</text>
                  <text x="280" y="1124">-</text>
                  <text x="244" y="1140">0xff</text>
                  <text x="236" y="1156">Payload:</text>
                  <text x="300" y="1156">{Code:</text>
                  <text x="348" y="1156">2.05</text>
                  <text x="412" y="1156">(Content),</text>
                  <text x="304" y="1172">0xff,</text>
                  <text x="296" y="1188">"0"</text>
                  <text x="280" y="1204">}</text>
                  <text x="300" y="1204">//</text>
                  <text x="352" y="1204">Encrypted</text>
                  <text x="412" y="1204">with</text>
                  <text x="464" y="1204">CTX_C_S</text>
                  <text x="32" y="1236">Decrypt</text>
                  <text x="20" y="1252">RESP</text>
                  <text x="60" y="1252">with</text>
                  <text x="32" y="1268">CTX_C_S</text>
                  <text x="28" y="1316">Square</text>
                  <text x="92" y="1316">brackets</text>
                  <text x="136" y="1316">[</text>
                  <text x="160" y="1316">...</text>
                  <text x="184" y="1316">]</text>
                  <text x="228" y="1316">indicate</text>
                  <text x="296" y="1316">content</text>
                  <text x="340" y="1316">of</text>
                  <text x="396" y="1316">compressed</text>
                  <text x="460" y="1316">COSE</text>
                  <text x="512" y="1316">object.</text>
                  <text x="24" y="1332">Curly</text>
                  <text x="84" y="1332">brackets</text>
                  <text x="128" y="1332">{</text>
                  <text x="152" y="1332">...</text>
                  <text x="176" y="1332">}</text>
                  <text x="220" y="1332">indicate</text>
                  <text x="296" y="1332">encrypted</text>
                  <text x="360" y="1332">data.</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
Client  Proxy  Server
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_S   |       |
  |       |       |
  +------>|       |         Code: 0.02 (POST)
  | POST  |       |        Token: 0x8c
  |       |       |     Uri-Host: "example.com"
  |       |       |       OSCORE: [kid:0x5f, Partial IV:42]
  |       |       | Proxy-Scheme: "coap"
  |       |       |         0xff
  |       |       |      Payload: {Code: 0.01 (GET),
  |       |       |                Uri-Path: "alarm_status"
  |       |       |               } // Encrypted with CTX_C_S
  |       |       |
  |     Encrypt   |
  |     REQ with  |
  |     CTX_P_S   |
  |       |       |
  |       +------>|         Code: 0.02 (POST)
  |       | POST  |        Token: 0x7b
  |       |       |     Uri-Host: "example.com"
  |       |       |       OSCORE: [kid:0xd4, Partial IV:31]
  |       |       |         0xff
  |       |       |      Payload: {Code: 0.02 (POST),
  |       |       |                OSCORE: [kid:0x5f, Partial IV:42],
  |       |       |                0xff,
  |       |       |                {Code: 0.01 (GET),
  |       |       |                 Uri-Path: "alarm_status"
  |       |       |                }   // Encrypted with CTX_C_S
  |       |       |               } // Encrypted with CTX_P_S
  |       |       |
  |       |     Decrypt
  |       |     REQ with
  |       |     CTX_P_S
  |       |       |
  |       |     Decrypt
  |       |     REQ with
  |       |     CTX_C_S
  |       |       |
  |       |     Encrypt
  |       |     RESP with
  |       |     CTX_C_S
  |       |       |
  |       |     Encrypt
  |       |     RESP with
  |       |     CTX_P_S
  |       |       |
  |       |<------+         Code: 2.04 (Changed)
  |       |  2.04 |        Token: 0x7b
  |       |       |       OSCORE: -
  |       |       |         0xff
  |       |       |      Payload: {Code: 2.04 (Changed),
  |       |       |                OSCORE: -,
  |       |       |                0xff,
  |       |       |                {Code: 2.05 (Content),
  |       |       |                 0xff,
  |       |       |                 "0"
  |       |       |                }   // Encrypted with CTX_C_S
  |       |       |               } // Encrypted with CTX_P_S
  |       |       |
  |     Decrypt   |
  |     RESP with |
  |     CTX_P_S   |
  |       |       |
  |<------+       |         Code: 2.04 (Changed)
  |  2.04 |       |        Token: 0x8c
  |       |       |       OSCORE: -
  |       |       |         0xff
  |       |       |      Payload: {Code: 2.05 (Content),
  |       |       |                0xff,
  |       |       |                "0"
  |       |       |               } // Encrypted with CTX_C_S
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_S   |       |
  |       |       |

Square brackets [ ... ] indicate content of compressed COSE object.
Curly brackets { ... } indicate encrypted data.
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="with-forward-proxy-oscore-c-s-c-p-p-s">
        <name>With Forward-Proxy; OSCORE: C-S, C-P, P-S</name>
        <t>In the example shown in <xref target="fig-example-client-proxy-server"/>, message exchanges are protected with OSCORE as follows.</t>
        <ul spacing="normal">
          <li>
            <t>End-to-end between the client and the server, using the OSCORE Security Context CTX_C_S. The client uses the OSCORE Sender ID 0x5f when using OSCORE with the server.</t>
          </li>
          <li>
            <t>Between the client and the proxy, using the OSCORE Security Context CTX_C_P. The client uses the OSCORE Sender ID 0x20 when using OSCORE with the proxy.</t>
          </li>
          <li>
            <t>Between the proxy and the server, using the OSCORE Security Context CTX_P_S. The proxy uses the OSCORE Sender ID 0xd4 when using OSCORE with the server.</t>
          </li>
        </ul>
        <figure anchor="fig-example-client-proxy-server">
          <name>Use of OSCORE between Client-Server, Client-Proxy, and Proxy-Server</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1728" width="544" viewBox="0 0 544 1728" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 24,104 L 24,112" fill="none" stroke="black"/>
                <path d="M 24,168 L 24,1536" fill="none" stroke="black"/>
                <path d="M 24,1592 L 24,1600" fill="none" stroke="black"/>
                <path d="M 24,1656 L 24,1664" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,400" fill="none" stroke="black"/>
                <path d="M 88,456 L 88,464" fill="none" stroke="black"/>
                <path d="M 88,520 L 88,1200" fill="none" stroke="black"/>
                <path d="M 88,1256 L 88,1264" fill="none" stroke="black"/>
                <path d="M 88,1320 L 88,1664" fill="none" stroke="black"/>
                <path d="M 152,48 L 152,736" fill="none" stroke="black"/>
                <path d="M 152,792 L 152,800" fill="none" stroke="black"/>
                <path d="M 152,856 L 152,864" fill="none" stroke="black"/>
                <path d="M 152,920 L 152,928" fill="none" stroke="black"/>
                <path d="M 152,984 L 152,1664" fill="none" stroke="black"/>
                <path d="M 24,192 L 80,192" fill="none" stroke="black"/>
                <path d="M 88,544 L 144,544" fill="none" stroke="black"/>
                <path d="M 96,1008 L 152,1008" fill="none" stroke="black"/>
                <path d="M 32,1344 L 88,1344" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="152,544 140,538.4 140,549.6" fill="black" transform="rotate(0,144,544)"/>
                <polygon class="arrowhead" points="104,1008 92,1002.4 92,1013.6" fill="black" transform="rotate(180,96,1008)"/>
                <polygon class="arrowhead" points="88,192 76,186.4 76,197.6" fill="black" transform="rotate(0,80,192)"/>
                <polygon class="arrowhead" points="40,1344 28,1338.4 28,1349.6" fill="black" transform="rotate(180,32,1344)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="88" y="36">Proxy</text>
                  <text x="148" y="36">Server</text>
                  <text x="24" y="52">|</text>
                  <text x="32" y="68">Encrypt</text>
                  <text x="16" y="84">REQ</text>
                  <text x="52" y="84">with</text>
                  <text x="32" y="100">CTX_C_S</text>
                  <text x="32" y="132">Encrypt</text>
                  <text x="16" y="148">REQ</text>
                  <text x="52" y="148">with</text>
                  <text x="32" y="164">CTX_C_P</text>
                  <text x="216" y="196">Code:</text>
                  <text x="260" y="196">0.02</text>
                  <text x="308" y="196">(POST)</text>
                  <text x="52" y="212">POST</text>
                  <text x="212" y="212">Token:</text>
                  <text x="260" y="212">0x8c</text>
                  <text x="208" y="228">OSCORE:</text>
                  <text x="284" y="228">[kid:0x20,</text>
                  <text x="360" y="228">Partial</text>
                  <text x="420" y="228">IV:31]</text>
                  <text x="212" y="244">0xff</text>
                  <text x="204" y="260">Payload:</text>
                  <text x="268" y="260">{Code:</text>
                  <text x="316" y="260">0.02</text>
                  <text x="368" y="260">(POST),</text>
                  <text x="288" y="276">Uri-Host:</text>
                  <text x="388" y="276">"example.com",</text>
                  <text x="280" y="292">OSCORE:</text>
                  <text x="356" y="292">[kid:0x5f,</text>
                  <text x="432" y="292">Partial</text>
                  <text x="496" y="292">IV:42],</text>
                  <text x="304" y="308">Proxy-Scheme:</text>
                  <text x="392" y="308">"coap",</text>
                  <text x="272" y="324">0xff,</text>
                  <text x="276" y="340">{Code:</text>
                  <text x="324" y="340">0.01</text>
                  <text x="372" y="340">(GET),</text>
                  <text x="296" y="356">Uri-Path:</text>
                  <text x="396" y="356">"alarm_status"</text>
                  <text x="256" y="372">}</text>
                  <text x="292" y="372">//</text>
                  <text x="344" y="372">Encrypted</text>
                  <text x="404" y="372">with</text>
                  <text x="456" y="372">CTX_C_S</text>
                  <text x="248" y="388">}</text>
                  <text x="268" y="388">//</text>
                  <text x="320" y="388">Encrypted</text>
                  <text x="380" y="388">with</text>
                  <text x="432" y="388">CTX_C_P</text>
                  <text x="96" y="420">Decrypt</text>
                  <text x="80" y="436">REQ</text>
                  <text x="116" y="436">with</text>
                  <text x="96" y="452">CTX_C_P</text>
                  <text x="96" y="484">Encrypt</text>
                  <text x="80" y="500">REQ</text>
                  <text x="116" y="500">with</text>
                  <text x="96" y="516">CTX_P_S</text>
                  <text x="216" y="548">Code:</text>
                  <text x="260" y="548">0.02</text>
                  <text x="308" y="548">(POST)</text>
                  <text x="116" y="564">POST</text>
                  <text x="212" y="564">Token:</text>
                  <text x="260" y="564">0x7b</text>
                  <text x="200" y="580">Uri-Host:</text>
                  <text x="300" y="580">"example.com",</text>
                  <text x="208" y="596">OSCORE:</text>
                  <text x="284" y="596">[kid:0xd4,</text>
                  <text x="360" y="596">Partial</text>
                  <text x="420" y="596">IV:53]</text>
                  <text x="212" y="612">0xff</text>
                  <text x="204" y="628">Payload:</text>
                  <text x="268" y="628">{Code:</text>
                  <text x="316" y="628">0.02</text>
                  <text x="368" y="628">(POST),</text>
                  <text x="280" y="644">OSCORE:</text>
                  <text x="356" y="644">[kid:0x5f,</text>
                  <text x="432" y="644">Partial</text>
                  <text x="496" y="644">IV:42],</text>
                  <text x="272" y="660">0xff,</text>
                  <text x="276" y="676">{Code:</text>
                  <text x="324" y="676">0.01</text>
                  <text x="372" y="676">(GET),</text>
                  <text x="296" y="692">Uri-Path:</text>
                  <text x="396" y="692">"alarm_status"</text>
                  <text x="256" y="708">}</text>
                  <text x="292" y="708">//</text>
                  <text x="344" y="708">Encrypted</text>
                  <text x="404" y="708">with</text>
                  <text x="456" y="708">CTX_C_S</text>
                  <text x="248" y="724">}</text>
                  <text x="268" y="724">//</text>
                  <text x="320" y="724">Encrypted</text>
                  <text x="380" y="724">with</text>
                  <text x="432" y="724">CTX_P_S</text>
                  <text x="160" y="756">Decrypt</text>
                  <text x="144" y="772">REQ</text>
                  <text x="180" y="772">with</text>
                  <text x="160" y="788">CTX_P_S</text>
                  <text x="160" y="820">Decrypt</text>
                  <text x="144" y="836">REQ</text>
                  <text x="180" y="836">with</text>
                  <text x="160" y="852">CTX_C_S</text>
                  <text x="160" y="884">Encrypt</text>
                  <text x="148" y="900">RESP</text>
                  <text x="188" y="900">with</text>
                  <text x="160" y="916">CTX_C_S</text>
                  <text x="160" y="948">Encrypt</text>
                  <text x="148" y="964">RESP</text>
                  <text x="188" y="964">with</text>
                  <text x="160" y="980">CTX_P_S</text>
                  <text x="208" y="1012">Code:</text>
                  <text x="252" y="1012">2.04</text>
                  <text x="312" y="1012">(Changed)</text>
                  <text x="124" y="1028">2.04</text>
                  <text x="204" y="1028">Token:</text>
                  <text x="252" y="1028">0x7b</text>
                  <text x="200" y="1044">OSCORE:</text>
                  <text x="240" y="1044">-</text>
                  <text x="204" y="1060">0xff</text>
                  <text x="196" y="1076">Payload:</text>
                  <text x="260" y="1076">{Code:</text>
                  <text x="308" y="1076">2.04</text>
                  <text x="372" y="1076">(Changed),</text>
                  <text x="272" y="1092">OSCORE:</text>
                  <text x="316" y="1092">-,</text>
                  <text x="264" y="1108">0xff,</text>
                  <text x="268" y="1124">{Code:</text>
                  <text x="316" y="1124">2.05</text>
                  <text x="380" y="1124">(Content),</text>
                  <text x="272" y="1140">0xff,</text>
                  <text x="264" y="1156">"0"</text>
                  <text x="248" y="1172">}</text>
                  <text x="284" y="1172">//</text>
                  <text x="336" y="1172">Encrypted</text>
                  <text x="396" y="1172">with</text>
                  <text x="448" y="1172">CTX_C_S</text>
                  <text x="240" y="1188">}</text>
                  <text x="260" y="1188">//</text>
                  <text x="312" y="1188">Encrypted</text>
                  <text x="372" y="1188">with</text>
                  <text x="424" y="1188">CTX_P_S</text>
                  <text x="96" y="1220">Decrypt</text>
                  <text x="84" y="1236">RESP</text>
                  <text x="124" y="1236">with</text>
                  <text x="96" y="1252">CTX_P_S</text>
                  <text x="96" y="1284">Encrypt</text>
                  <text x="84" y="1300">RESP</text>
                  <text x="124" y="1300">with</text>
                  <text x="96" y="1316">CTX_C_P</text>
                  <text x="208" y="1348">Code:</text>
                  <text x="252" y="1348">2.04</text>
                  <text x="312" y="1348">(Changed)</text>
                  <text x="60" y="1364">2.04</text>
                  <text x="204" y="1364">Token:</text>
                  <text x="252" y="1364">0x8c</text>
                  <text x="200" y="1380">OSCORE:</text>
                  <text x="240" y="1380">-</text>
                  <text x="204" y="1396">0xff</text>
                  <text x="196" y="1412">Payload:</text>
                  <text x="260" y="1412">{Code:</text>
                  <text x="308" y="1412">2.04</text>
                  <text x="372" y="1412">(Changed),</text>
                  <text x="272" y="1428">OSCORE:</text>
                  <text x="316" y="1428">-,</text>
                  <text x="264" y="1444">0xff,</text>
                  <text x="268" y="1460">{Code:</text>
                  <text x="316" y="1460">2.05</text>
                  <text x="380" y="1460">(Content),</text>
                  <text x="272" y="1476">0xff,</text>
                  <text x="264" y="1492">"0"</text>
                  <text x="248" y="1508">}</text>
                  <text x="284" y="1508">//</text>
                  <text x="336" y="1508">Encrypted</text>
                  <text x="396" y="1508">with</text>
                  <text x="448" y="1508">CTX_C_S</text>
                  <text x="240" y="1524">}</text>
                  <text x="260" y="1524">//</text>
                  <text x="312" y="1524">Encrypted</text>
                  <text x="372" y="1524">with</text>
                  <text x="424" y="1524">CTX_C_P</text>
                  <text x="32" y="1556">Decrypt</text>
                  <text x="20" y="1572">RESP</text>
                  <text x="60" y="1572">with</text>
                  <text x="32" y="1588">CTX_C_P</text>
                  <text x="32" y="1620">Decrypt</text>
                  <text x="20" y="1636">RESP</text>
                  <text x="60" y="1636">with</text>
                  <text x="32" y="1652">CTX_C_S</text>
                  <text x="28" y="1700">Square</text>
                  <text x="92" y="1700">brackets</text>
                  <text x="136" y="1700">[</text>
                  <text x="160" y="1700">...</text>
                  <text x="184" y="1700">]</text>
                  <text x="228" y="1700">indicate</text>
                  <text x="296" y="1700">content</text>
                  <text x="340" y="1700">of</text>
                  <text x="396" y="1700">compressed</text>
                  <text x="460" y="1700">COSE</text>
                  <text x="512" y="1700">object.</text>
                  <text x="24" y="1716">Curly</text>
                  <text x="84" y="1716">brackets</text>
                  <text x="128" y="1716">{</text>
                  <text x="152" y="1716">...</text>
                  <text x="176" y="1716">}</text>
                  <text x="220" y="1716">indicate</text>
                  <text x="296" y="1716">encrypted</text>
                  <text x="360" y="1716">data.</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
Client  Proxy  Server
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_S   |       |
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_P   |       |
  |       |       |
  +------>|       |     Code: 0.02 (POST)
  | POST  |       |    Token: 0x8c
  |       |       |   OSCORE: [kid:0x20, Partial IV:31]
  |       |       |     0xff
  |       |       |  Payload: {Code: 0.02 (POST),
  |       |       |            Uri-Host: "example.com",
  |       |       |            OSCORE: [kid:0x5f, Partial IV:42],
  |       |       |            Proxy-Scheme: "coap",
  |       |       |            0xff,
  |       |       |            {Code: 0.01 (GET),
  |       |       |             Uri-Path: "alarm_status"
  |       |       |            }   // Encrypted with CTX_C_S
  |       |       |           } // Encrypted with CTX_C_P
  |       |       |
  |     Decrypt   |
  |     REQ with  |
  |     CTX_C_P   |
  |       |       |
  |     Encrypt   |
  |     REQ with  |
  |     CTX_P_S   |
  |       |       |
  |       +------>|     Code: 0.02 (POST)
  |       | POST  |    Token: 0x7b
  |       |       | Uri-Host: "example.com",
  |       |       |   OSCORE: [kid:0xd4, Partial IV:53]
  |       |       |     0xff
  |       |       |  Payload: {Code: 0.02 (POST),
  |       |       |            OSCORE: [kid:0x5f, Partial IV:42],
  |       |       |            0xff,
  |       |       |            {Code: 0.01 (GET),
  |       |       |             Uri-Path: "alarm_status"
  |       |       |            }   // Encrypted with CTX_C_S
  |       |       |           } // Encrypted with CTX_P_S
  |       |       |
  |       |     Decrypt
  |       |     REQ with
  |       |     CTX_P_S
  |       |       |
  |       |     Decrypt
  |       |     REQ with
  |       |     CTX_C_S
  |       |       |
  |       |     Encrypt
  |       |     RESP with
  |       |     CTX_C_S
  |       |       |
  |       |     Encrypt
  |       |     RESP with
  |       |     CTX_P_S
  |       |       |
  |       |<------+    Code: 2.04 (Changed)
  |       |  2.04 |   Token: 0x7b
  |       |       |  OSCORE: -
  |       |       |    0xff
  |       |       | Payload: {Code: 2.04 (Changed),
  |       |       |           OSCORE: -,
  |       |       |           0xff,
  |       |       |           {Code: 2.05 (Content),
  |       |       |            0xff,
  |       |       |            "0"
  |       |       |           }   // Encrypted with CTX_C_S
  |       |       |          } // Encrypted with CTX_P_S
  |       |       |
  |     Decrypt   |
  |     RESP with |
  |     CTX_P_S   |
  |       |       |
  |     Encrypt   |
  |     RESP with |
  |     CTX_C_P   |
  |       |       |
  |<------+       |    Code: 2.04 (Changed)
  |  2.04 |       |   Token: 0x8c
  |       |       |  OSCORE: -
  |       |       |    0xff
  |       |       | Payload: {Code: 2.04 (Changed),
  |       |       |           OSCORE: -,
  |       |       |           0xff,
  |       |       |           {Code: 2.05 (Content),
  |       |       |            0xff,
  |       |       |            "0"
  |       |       |           }   // Encrypted with CTX_C_S
  |       |       |          } // Encrypted with CTX_C_P
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_P   |       |
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_S   |       |
  |       |       |

Square brackets [ ... ] indicate content of compressed COSE object.
Curly brackets { ... } indicate encrypted data.
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="sec-example-edhoc">
        <name>With Forward-Proxy and LAKE; OSCORE: C-S, C-P</name>
        <t>In the example shown in <xref target="fig-example-edhoc"/>, message exchanges are protected as follows.</t>
        <ul spacing="normal">
          <li>
            <t>End-to-end, between the client and the server, using the OSCORE Security Context CTX_C_S. The client uses the OSCORE Sender ID 0x5f when using OSCORE with the server.</t>
          </li>
          <li>
            <t>Between the client and the proxy, using the OSCORE Security Context CTX_C_P. The client uses the OSCORE Sender ID 0x20 when using OSCORE with the proxy.</t>
          </li>
        </ul>
        <t>The example also shows how the client establishes the OSCORE Security Contexts CTX_C_P with the proxy and CTX_C_S with the server, by using the key exchange protocol LAKE <xref target="RFC9528"/>.</t>
        <t>After a first phase where the OSCORE Security Contexts are established, the second phase consists in a protected message exchange equivalent to that shown in <xref target="sec-examples-1"/>.</t>
        <figure anchor="fig-example-edhoc">
          <name>Use of OSCORE between Client-Server and Proxy-Server, with OSCORE Security Contexts established through LAKE</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="3312" width="544" viewBox="0 0 544 3312" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 24,48 L 24,240" fill="none" stroke="black"/>
                <path d="M 24,280 L 24,496" fill="none" stroke="black"/>
                <path d="M 24,552 L 24,1248" fill="none" stroke="black"/>
                <path d="M 24,1304 L 24,1312" fill="none" stroke="black"/>
                <path d="M 24,1352 L 24,1360" fill="none" stroke="black"/>
                <path d="M 24,1416 L 24,1968" fill="none" stroke="black"/>
                <path d="M 24,2024 L 24,2032" fill="none" stroke="black"/>
                <path d="M 24,2088 L 24,3072" fill="none" stroke="black"/>
                <path d="M 24,3128 L 24,3136" fill="none" stroke="black"/>
                <path d="M 24,3192 L 24,3200" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,400" fill="none" stroke="black"/>
                <path d="M 88,440 L 88,768" fill="none" stroke="black"/>
                <path d="M 88,824 L 88,1040" fill="none" stroke="black"/>
                <path d="M 88,1096 L 88,1632" fill="none" stroke="black"/>
                <path d="M 88,1688 L 88,2320" fill="none" stroke="black"/>
                <path d="M 88,2376 L 88,2800" fill="none" stroke="black"/>
                <path d="M 88,2856 L 88,3200" fill="none" stroke="black"/>
                <path d="M 152,48 L 152,1824" fill="none" stroke="black"/>
                <path d="M 152,1864 L 152,2528" fill="none" stroke="black"/>
                <path d="M 152,2584 L 152,2592" fill="none" stroke="black"/>
                <path d="M 152,2648 L 152,3200" fill="none" stroke="black"/>
                <path d="M 24,64 L 80,64" fill="none" stroke="black"/>
                <path d="M 32,176 L 88,176" fill="none" stroke="black"/>
                <path d="M 24,304 L 80,304" fill="none" stroke="black"/>
                <path d="M 32,464 L 88,464" fill="none" stroke="black"/>
                <path d="M 24,576 L 80,576" fill="none" stroke="black"/>
                <path d="M 88,848 L 144,848" fill="none" stroke="black"/>
                <path d="M 96,976 L 152,976" fill="none" stroke="black"/>
                <path d="M 32,1120 L 88,1120" fill="none" stroke="black"/>
                <path d="M 24,1440 L 80,1440" fill="none" stroke="black"/>
                <path d="M 88,1712 L 144,1712" fill="none" stroke="black"/>
                <path d="M 96,1888 L 152,1888" fill="none" stroke="black"/>
                <path d="M 32,1936 L 88,1936" fill="none" stroke="black"/>
                <path d="M 24,2112 L 80,2112" fill="none" stroke="black"/>
                <path d="M 88,2400 L 144,2400" fill="none" stroke="black"/>
                <path d="M 96,2672 L 152,2672" fill="none" stroke="black"/>
                <path d="M 32,2880 L 88,2880" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="152,2400 140,2394.4 140,2405.6" fill="black" transform="rotate(0,144,2400)"/>
                <polygon class="arrowhead" points="152,1712 140,1706.4 140,1717.6" fill="black" transform="rotate(0,144,1712)"/>
                <polygon class="arrowhead" points="152,848 140,842.4 140,853.6" fill="black" transform="rotate(0,144,848)"/>
                <polygon class="arrowhead" points="104,2672 92,2666.4 92,2677.6" fill="black" transform="rotate(180,96,2672)"/>
                <polygon class="arrowhead" points="104,1888 92,1882.4 92,1893.6" fill="black" transform="rotate(180,96,1888)"/>
                <polygon class="arrowhead" points="104,976 92,970.4 92,981.6" fill="black" transform="rotate(180,96,976)"/>
                <polygon class="arrowhead" points="88,2112 76,2106.4 76,2117.6" fill="black" transform="rotate(0,80,2112)"/>
                <polygon class="arrowhead" points="88,1440 76,1434.4 76,1445.6" fill="black" transform="rotate(0,80,1440)"/>
                <polygon class="arrowhead" points="88,576 76,570.4 76,581.6" fill="black" transform="rotate(0,80,576)"/>
                <polygon class="arrowhead" points="88,304 76,298.4 76,309.6" fill="black" transform="rotate(0,80,304)"/>
                <polygon class="arrowhead" points="88,64 76,58.4 76,69.6" fill="black" transform="rotate(0,80,64)"/>
                <polygon class="arrowhead" points="40,2880 28,2874.4 28,2885.6" fill="black" transform="rotate(180,32,2880)"/>
                <polygon class="arrowhead" points="40,1936 28,1930.4 28,1941.6" fill="black" transform="rotate(180,32,1936)"/>
                <polygon class="arrowhead" points="40,1120 28,1114.4 28,1125.6" fill="black" transform="rotate(180,32,1120)"/>
                <polygon class="arrowhead" points="40,464 28,458.4 28,469.6" fill="black" transform="rotate(180,32,464)"/>
                <polygon class="arrowhead" points="40,176 28,170.4 28,181.6" fill="black" transform="rotate(180,32,176)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="88" y="36">Proxy</text>
                  <text x="148" y="36">Server</text>
                  <text x="216" y="68">Code:</text>
                  <text x="260" y="68">0.02</text>
                  <text x="308" y="68">(POST)</text>
                  <text x="52" y="84">POST</text>
                  <text x="212" y="84">Token:</text>
                  <text x="260" y="84">0xf3</text>
                  <text x="200" y="100">Uri-Path:</text>
                  <text x="296" y="100">".well-known"</text>
                  <text x="200" y="116">Uri-Path:</text>
                  <text x="272" y="116">"edhoc"</text>
                  <text x="212" y="132">0xff</text>
                  <text x="204" y="148">Payload:</text>
                  <text x="268" y="148">(true,</text>
                  <text x="316" y="148">LAKE</text>
                  <text x="380" y="148">message_1)</text>
                  <text x="216" y="180">Code:</text>
                  <text x="260" y="180">2.04</text>
                  <text x="320" y="180">(Changed)</text>
                  <text x="60" y="196">2.04</text>
                  <text x="212" y="196">Token:</text>
                  <text x="260" y="196">0xf3</text>
                  <text x="212" y="212">0xff</text>
                  <text x="204" y="228">Payload:</text>
                  <text x="260" y="228">LAKE</text>
                  <text x="320" y="228">message_2</text>
                  <text x="40" y="260">Establish</text>
                  <text x="32" y="276">CTX_C_P</text>
                  <text x="216" y="308">Code:</text>
                  <text x="260" y="308">0.02</text>
                  <text x="308" y="308">(POST)</text>
                  <text x="52" y="324">POST</text>
                  <text x="212" y="324">Token:</text>
                  <text x="260" y="324">0x82</text>
                  <text x="200" y="340">Uri-Path:</text>
                  <text x="296" y="340">".well-known"</text>
                  <text x="200" y="356">Uri-Path:</text>
                  <text x="272" y="356">"edhoc"</text>
                  <text x="212" y="372">0xff</text>
                  <text x="204" y="388">Payload:</text>
                  <text x="264" y="388">(C_R,</text>
                  <text x="308" y="388">LAKE</text>
                  <text x="372" y="388">message_3)</text>
                  <text x="104" y="420">Establish</text>
                  <text x="96" y="436">CTX_C_P</text>
                  <text x="56" y="484">ACK</text>
                  <text x="32" y="516">Encrypt</text>
                  <text x="16" y="532">REQ</text>
                  <text x="52" y="532">with</text>
                  <text x="32" y="548">CTX_C_P</text>
                  <text x="216" y="580">Code:</text>
                  <text x="260" y="580">0.02</text>
                  <text x="308" y="580">(POST)</text>
                  <text x="52" y="596">POST</text>
                  <text x="212" y="596">Token:</text>
                  <text x="260" y="596">0xbe</text>
                  <text x="208" y="612">OSCORE:</text>
                  <text x="284" y="612">[kid:0x20,</text>
                  <text x="360" y="612">Partial</text>
                  <text x="416" y="612">IV:0]</text>
                  <text x="212" y="628">0xff</text>
                  <text x="204" y="644">Payload:</text>
                  <text x="268" y="644">{Code:</text>
                  <text x="316" y="644">0.02</text>
                  <text x="368" y="644">(POST),</text>
                  <text x="288" y="660">Uri-Host:</text>
                  <text x="388" y="660">"example.com",</text>
                  <text x="288" y="676">Uri-Path:</text>
                  <text x="388" y="676">".well-known",</text>
                  <text x="288" y="692">Uri-Path:</text>
                  <text x="364" y="692">"edhoc",</text>
                  <text x="304" y="708">Proxy-Scheme:</text>
                  <text x="392" y="708">"coap",</text>
                  <text x="272" y="724">0xff,</text>
                  <text x="276" y="740">(true,</text>
                  <text x="324" y="740">LAKE</text>
                  <text x="388" y="740">message_1)</text>
                  <text x="248" y="756">}</text>
                  <text x="268" y="756">//</text>
                  <text x="320" y="756">Encrypted</text>
                  <text x="380" y="756">with</text>
                  <text x="432" y="756">CTX_C_P</text>
                  <text x="96" y="788">Decrypt</text>
                  <text x="80" y="804">REQ</text>
                  <text x="116" y="804">with</text>
                  <text x="96" y="820">CTX_C_P</text>
                  <text x="216" y="852">Code:</text>
                  <text x="260" y="852">0.02</text>
                  <text x="308" y="852">(POST)</text>
                  <text x="116" y="868">POST</text>
                  <text x="212" y="868">Token:</text>
                  <text x="260" y="868">0xa5</text>
                  <text x="200" y="884">Uri-Host:</text>
                  <text x="300" y="884">"example.com",</text>
                  <text x="200" y="900">Uri-Path:</text>
                  <text x="296" y="900">".well-known"</text>
                  <text x="200" y="916">Uri-Path:</text>
                  <text x="272" y="916">"edhoc"</text>
                  <text x="212" y="932">0xff</text>
                  <text x="204" y="948">Payload:</text>
                  <text x="268" y="948">(true,</text>
                  <text x="316" y="948">LAKE</text>
                  <text x="380" y="948">message_1)</text>
                  <text x="216" y="980">Code:</text>
                  <text x="260" y="980">2.04</text>
                  <text x="320" y="980">(Changed)</text>
                  <text x="124" y="996">2.04</text>
                  <text x="212" y="996">Token:</text>
                  <text x="260" y="996">0xa5</text>
                  <text x="212" y="1012">0xff</text>
                  <text x="204" y="1028">Payload:</text>
                  <text x="260" y="1028">LAKE</text>
                  <text x="320" y="1028">message_2</text>
                  <text x="96" y="1060">Encrypt</text>
                  <text x="84" y="1076">RESP</text>
                  <text x="124" y="1076">with</text>
                  <text x="96" y="1092">CTX_C_P</text>
                  <text x="216" y="1124">Code:</text>
                  <text x="260" y="1124">2.04</text>
                  <text x="320" y="1124">(Changed)</text>
                  <text x="60" y="1140">2.04</text>
                  <text x="212" y="1140">Token:</text>
                  <text x="260" y="1140">0xbe</text>
                  <text x="208" y="1156">OSCORE:</text>
                  <text x="248" y="1156">-</text>
                  <text x="212" y="1172">0xff</text>
                  <text x="204" y="1188">Payload:</text>
                  <text x="268" y="1188">{Code:</text>
                  <text x="316" y="1188">2.04</text>
                  <text x="380" y="1188">(Changed),</text>
                  <text x="272" y="1204">0xff,</text>
                  <text x="268" y="1220">LAKE</text>
                  <text x="328" y="1220">message_2</text>
                  <text x="248" y="1236">}</text>
                  <text x="268" y="1236">//</text>
                  <text x="320" y="1236">Encrypted</text>
                  <text x="380" y="1236">with</text>
                  <text x="432" y="1236">CTX_C_P</text>
                  <text x="32" y="1268">Decrypt</text>
                  <text x="20" y="1284">RESP</text>
                  <text x="60" y="1284">with</text>
                  <text x="32" y="1300">CTX_C_P</text>
                  <text x="40" y="1332">Establish</text>
                  <text x="32" y="1348">CTX_C_S</text>
                  <text x="32" y="1380">Encrypt</text>
                  <text x="16" y="1396">REQ</text>
                  <text x="52" y="1396">with</text>
                  <text x="32" y="1412">CTX_C_P</text>
                  <text x="216" y="1444">Code:</text>
                  <text x="260" y="1444">0.02</text>
                  <text x="308" y="1444">(POST)</text>
                  <text x="52" y="1460">POST</text>
                  <text x="212" y="1460">Token:</text>
                  <text x="260" y="1460">0xb9</text>
                  <text x="208" y="1476">OSCORE:</text>
                  <text x="284" y="1476">[kid:0x20,</text>
                  <text x="360" y="1476">Partial</text>
                  <text x="416" y="1476">IV:1]</text>
                  <text x="212" y="1492">0xff</text>
                  <text x="204" y="1508">Payload:</text>
                  <text x="268" y="1508">{Code:</text>
                  <text x="316" y="1508">0.02</text>
                  <text x="368" y="1508">(POST),</text>
                  <text x="288" y="1524">Uri-Host:</text>
                  <text x="388" y="1524">"example.com",</text>
                  <text x="288" y="1540">Uri-Path:</text>
                  <text x="388" y="1540">".well-known",</text>
                  <text x="288" y="1556">Uri-Path:</text>
                  <text x="364" y="1556">"edhoc",</text>
                  <text x="304" y="1572">Proxy-Scheme:</text>
                  <text x="392" y="1572">"coap",</text>
                  <text x="272" y="1588">0xff,</text>
                  <text x="272" y="1604">(C_R,</text>
                  <text x="316" y="1604">LAKE</text>
                  <text x="380" y="1604">message_3)</text>
                  <text x="248" y="1620">}</text>
                  <text x="292" y="1620">//</text>
                  <text x="344" y="1620">Encrypted</text>
                  <text x="404" y="1620">with</text>
                  <text x="456" y="1620">CTX_C_P</text>
                  <text x="96" y="1652">Decrypt</text>
                  <text x="80" y="1668">REQ</text>
                  <text x="116" y="1668">with</text>
                  <text x="96" y="1684">CTX_C_P</text>
                  <text x="216" y="1716">Code:</text>
                  <text x="260" y="1716">0.02</text>
                  <text x="308" y="1716">(POST)</text>
                  <text x="116" y="1732">POST</text>
                  <text x="212" y="1732">Token:</text>
                  <text x="260" y="1732">0xdd</text>
                  <text x="200" y="1748">Uri-Host:</text>
                  <text x="300" y="1748">"example.com",</text>
                  <text x="200" y="1764">Uri-Path:</text>
                  <text x="296" y="1764">".well-known"</text>
                  <text x="200" y="1780">Uri-Path:</text>
                  <text x="272" y="1780">"edhoc"</text>
                  <text x="212" y="1796">0xff</text>
                  <text x="204" y="1812">Payload:</text>
                  <text x="264" y="1812">(C_R,</text>
                  <text x="308" y="1812">LAKE</text>
                  <text x="372" y="1812">message_3)</text>
                  <text x="168" y="1844">Establish</text>
                  <text x="160" y="1860">CTX_C_S</text>
                  <text x="120" y="1908">ACK</text>
                  <text x="56" y="1956">ACK</text>
                  <text x="32" y="1988">Encrypt</text>
                  <text x="16" y="2004">REQ</text>
                  <text x="52" y="2004">with</text>
                  <text x="32" y="2020">CTX_C_S</text>
                  <text x="32" y="2052">Encrypt</text>
                  <text x="16" y="2068">REQ</text>
                  <text x="52" y="2068">with</text>
                  <text x="32" y="2084">CTX_C_P</text>
                  <text x="216" y="2116">Code:</text>
                  <text x="260" y="2116">0.02</text>
                  <text x="308" y="2116">(POST)</text>
                  <text x="52" y="2132">POST</text>
                  <text x="212" y="2132">Token:</text>
                  <text x="260" y="2132">0x8c</text>
                  <text x="208" y="2148">OSCORE:</text>
                  <text x="284" y="2148">[kid:0x20,</text>
                  <text x="360" y="2148">Partial</text>
                  <text x="416" y="2148">IV:2]</text>
                  <text x="212" y="2164">0xff</text>
                  <text x="204" y="2180">Payload:</text>
                  <text x="268" y="2180">{Code:</text>
                  <text x="316" y="2180">0.02</text>
                  <text x="368" y="2180">(POST),</text>
                  <text x="288" y="2196">Uri-Host:</text>
                  <text x="388" y="2196">"example.com",</text>
                  <text x="280" y="2212">OSCORE:</text>
                  <text x="356" y="2212">[kid:0x5f,</text>
                  <text x="432" y="2212">Partial</text>
                  <text x="492" y="2212">IV:0],</text>
                  <text x="304" y="2228">Proxy-Scheme:</text>
                  <text x="392" y="2228">"coap",</text>
                  <text x="272" y="2244">0xff,</text>
                  <text x="276" y="2260">{Code:</text>
                  <text x="324" y="2260">0.01</text>
                  <text x="372" y="2260">(GET),</text>
                  <text x="296" y="2276">Uri-Path:</text>
                  <text x="396" y="2276">"alarm_status"</text>
                  <text x="256" y="2292">}</text>
                  <text x="292" y="2292">//</text>
                  <text x="344" y="2292">Encrypted</text>
                  <text x="404" y="2292">with</text>
                  <text x="456" y="2292">CTX_C_S</text>
                  <text x="248" y="2308">}</text>
                  <text x="268" y="2308">//</text>
                  <text x="320" y="2308">Encrypted</text>
                  <text x="380" y="2308">with</text>
                  <text x="432" y="2308">CTX_C_P</text>
                  <text x="96" y="2340">Decrypt</text>
                  <text x="80" y="2356">REQ</text>
                  <text x="116" y="2356">with</text>
                  <text x="96" y="2372">CTX_C_P</text>
                  <text x="216" y="2404">Code:</text>
                  <text x="260" y="2404">0.02</text>
                  <text x="308" y="2404">(POST)</text>
                  <text x="116" y="2420">POST</text>
                  <text x="212" y="2420">Token:</text>
                  <text x="260" y="2420">0x7b</text>
                  <text x="200" y="2436">Uri-Host:</text>
                  <text x="300" y="2436">"example.com",</text>
                  <text x="208" y="2452">OSCORE:</text>
                  <text x="284" y="2452">[kid:0x5f,</text>
                  <text x="360" y="2452">Partial</text>
                  <text x="416" y="2452">IV:0]</text>
                  <text x="212" y="2468">0xff</text>
                  <text x="204" y="2484">Payload:</text>
                  <text x="268" y="2484">{Code:</text>
                  <text x="316" y="2484">0.01</text>
                  <text x="364" y="2484">(GET),</text>
                  <text x="288" y="2500">Uri-Path:</text>
                  <text x="388" y="2500">"alarm_status"</text>
                  <text x="248" y="2516">}</text>
                  <text x="268" y="2516">//</text>
                  <text x="320" y="2516">Encrypted</text>
                  <text x="380" y="2516">with</text>
                  <text x="432" y="2516">CTX_C_S</text>
                  <text x="160" y="2548">Decrypt</text>
                  <text x="144" y="2564">REQ</text>
                  <text x="180" y="2564">with</text>
                  <text x="160" y="2580">CTX_C_S</text>
                  <text x="160" y="2612">Encrypt</text>
                  <text x="148" y="2628">RESP</text>
                  <text x="188" y="2628">with</text>
                  <text x="160" y="2644">CTX_C_S</text>
                  <text x="216" y="2676">Code:</text>
                  <text x="260" y="2676">2.04</text>
                  <text x="320" y="2676">(Changed)</text>
                  <text x="124" y="2692">2.04</text>
                  <text x="212" y="2692">Token:</text>
                  <text x="260" y="2692">0x7b</text>
                  <text x="208" y="2708">OSCORE:</text>
                  <text x="248" y="2708">-</text>
                  <text x="212" y="2724">0xff</text>
                  <text x="204" y="2740">Payload:</text>
                  <text x="268" y="2740">{Code:</text>
                  <text x="316" y="2740">2.05</text>
                  <text x="380" y="2740">(Content),</text>
                  <text x="272" y="2756">0xff,</text>
                  <text x="264" y="2772">"0"</text>
                  <text x="248" y="2788">}</text>
                  <text x="268" y="2788">//</text>
                  <text x="320" y="2788">Encrypted</text>
                  <text x="380" y="2788">with</text>
                  <text x="432" y="2788">CTX_C_S</text>
                  <text x="96" y="2820">Encrypt</text>
                  <text x="84" y="2836">RESP</text>
                  <text x="124" y="2836">with</text>
                  <text x="96" y="2852">CTX_C_P</text>
                  <text x="216" y="2884">Code:</text>
                  <text x="260" y="2884">2.04</text>
                  <text x="320" y="2884">(Changed)</text>
                  <text x="60" y="2900">2.04</text>
                  <text x="212" y="2900">Token:</text>
                  <text x="260" y="2900">0x8c</text>
                  <text x="208" y="2916">OSCORE:</text>
                  <text x="248" y="2916">-</text>
                  <text x="212" y="2932">0xff</text>
                  <text x="204" y="2948">Payload:</text>
                  <text x="268" y="2948">{Code:</text>
                  <text x="316" y="2948">2.04</text>
                  <text x="380" y="2948">(Changed),</text>
                  <text x="280" y="2964">OSCORE:</text>
                  <text x="324" y="2964">-,</text>
                  <text x="272" y="2980">0xff,</text>
                  <text x="276" y="2996">{Code:</text>
                  <text x="324" y="2996">2.05</text>
                  <text x="388" y="2996">(Content),</text>
                  <text x="280" y="3012">0xff,</text>
                  <text x="272" y="3028">"0"</text>
                  <text x="256" y="3044">}</text>
                  <text x="292" y="3044">//</text>
                  <text x="344" y="3044">Encrypted</text>
                  <text x="404" y="3044">with</text>
                  <text x="456" y="3044">CTX_C_S</text>
                  <text x="248" y="3060">}</text>
                  <text x="268" y="3060">//</text>
                  <text x="320" y="3060">Encrypted</text>
                  <text x="380" y="3060">with</text>
                  <text x="432" y="3060">CTX_C_P</text>
                  <text x="32" y="3092">Decrypt</text>
                  <text x="20" y="3108">RESP</text>
                  <text x="60" y="3108">with</text>
                  <text x="32" y="3124">CTX_C_P</text>
                  <text x="32" y="3156">Decrypt</text>
                  <text x="20" y="3172">RESP</text>
                  <text x="60" y="3172">with</text>
                  <text x="32" y="3188">CTX_C_S</text>
                  <text x="28" y="3236">Square</text>
                  <text x="92" y="3236">brackets</text>
                  <text x="136" y="3236">[</text>
                  <text x="160" y="3236">...</text>
                  <text x="184" y="3236">]</text>
                  <text x="228" y="3236">indicate</text>
                  <text x="296" y="3236">content</text>
                  <text x="340" y="3236">of</text>
                  <text x="396" y="3236">compressed</text>
                  <text x="460" y="3236">COSE</text>
                  <text x="512" y="3236">object.</text>
                  <text x="24" y="3252">Curly</text>
                  <text x="84" y="3252">brackets</text>
                  <text x="128" y="3252">{</text>
                  <text x="152" y="3252">...</text>
                  <text x="176" y="3252">}</text>
                  <text x="220" y="3252">indicate</text>
                  <text x="296" y="3252">encrypted</text>
                  <text x="360" y="3252">data.</text>
                  <text x="16" y="3284">(A,</text>
                  <text x="44" y="3284">B)</text>
                  <text x="96" y="3284">indicates</text>
                  <text x="144" y="3284">a</text>
                  <text x="172" y="3284">CBOR</text>
                  <text x="228" y="3284">sequence</text>
                  <text x="304" y="3284">[RFC8742]</text>
                  <text x="68" y="3300">of</text>
                  <text x="96" y="3300">two</text>
                  <text x="132" y="3300">CBOR</text>
                  <text x="172" y="3300">data</text>
                  <text x="216" y="3300">items</text>
                  <text x="248" y="3300">A</text>
                  <text x="272" y="3300">and</text>
                  <text x="300" y="3300">B.</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
Client  Proxy  Server
  |       |       |
  +------>|       |     Code: 0.02 (POST)
  | POST  |       |    Token: 0xf3
  |       |       | Uri-Path: ".well-known"
  |       |       | Uri-Path: "edhoc"
  |       |       |     0xff
  |       |       |  Payload: (true, LAKE message_1)
  |       |       |
  |<------+       |     Code: 2.04 (Changed)
  |  2.04 |       |    Token: 0xf3
  |       |       |     0xff
  |       |       |  Payload: LAKE message_2
  |       |       |
Establish |       |
CTX_C_P   |       |
  |       |       |
  +------>|       |     Code: 0.02 (POST)
  | POST  |       |    Token: 0x82
  |       |       | Uri-Path: ".well-known"
  |       |       | Uri-Path: "edhoc"
  |       |       |     0xff
  |       |       |  Payload: (C_R, LAKE message_3)
  |       |       |
  |     Establish |
  |     CTX_C_P   |
  |       |       |
  |<------+       |
  |  ACK  |       |
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_P   |       |
  |       |       |
  +------>|       |     Code: 0.02 (POST)
  | POST  |       |    Token: 0xbe
  |       |       |   OSCORE: [kid:0x20, Partial IV:0]
  |       |       |     0xff
  |       |       |  Payload: {Code: 0.02 (POST),
  |       |       |            Uri-Host: "example.com",
  |       |       |            Uri-Path: ".well-known",
  |       |       |            Uri-Path: "edhoc",
  |       |       |            Proxy-Scheme: "coap",
  |       |       |            0xff,
  |       |       |            (true, LAKE message_1)
  |       |       |           } // Encrypted with CTX_C_P
  |       |       |
  |     Decrypt   |
  |     REQ with  |
  |     CTX_C_P   |
  |       |       |
  |       +------>|     Code: 0.02 (POST)
  |       | POST  |    Token: 0xa5
  |       |       | Uri-Host: "example.com",
  |       |       | Uri-Path: ".well-known"
  |       |       | Uri-Path: "edhoc"
  |       |       |     0xff
  |       |       |  Payload: (true, LAKE message_1)
  |       |       |
  |       |<------+     Code: 2.04 (Changed)
  |       |  2.04 |    Token: 0xa5
  |       |       |     0xff
  |       |       |  Payload: LAKE message_2
  |       |       |
  |     Encrypt   |
  |     RESP with |
  |     CTX_C_P   |
  |       |       |
  |<------+       |     Code: 2.04 (Changed)
  |  2.04 |       |    Token: 0xbe
  |       |       |   OSCORE: -
  |       |       |     0xff
  |       |       |  Payload: {Code: 2.04 (Changed),
  |       |       |            0xff,
  |       |       |            LAKE message_2
  |       |       |           } // Encrypted with CTX_C_P
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_P   |       |
  |       |       |
Establish |       |
CTX_C_S   |       |
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_P   |       |
  |       |       |
  +------>|       |     Code: 0.02 (POST)
  | POST  |       |    Token: 0xb9
  |       |       |   OSCORE: [kid:0x20, Partial IV:1]
  |       |       |     0xff
  |       |       |  Payload: {Code: 0.02 (POST),
  |       |       |            Uri-Host: "example.com",
  |       |       |            Uri-Path: ".well-known",
  |       |       |            Uri-Path: "edhoc",
  |       |       |            Proxy-Scheme: "coap",
  |       |       |            0xff,
  |       |       |            (C_R, LAKE message_3)
  |       |       |           }    // Encrypted with CTX_C_P
  |       |       |
  |     Decrypt   |
  |     REQ with  |
  |     CTX_C_P   |
  |       |       |
  |       +------>|     Code: 0.02 (POST)
  |       | POST  |    Token: 0xdd
  |       |       | Uri-Host: "example.com",
  |       |       | Uri-Path: ".well-known"
  |       |       | Uri-Path: "edhoc"
  |       |       |     0xff
  |       |       |  Payload: (C_R, LAKE message_3)
  |       |       |
  |       |     Establish
  |       |     CTX_C_S
  |       |       |
  |       |<------+
  |       |  ACK  |
  |       |       |
  |<------+       |
  |  ACK  |       |
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_S   |       |
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_P   |       |
  |       |       |
  +------>|       |     Code: 0.02 (POST)
  | POST  |       |    Token: 0x8c
  |       |       |   OSCORE: [kid:0x20, Partial IV:2]
  |       |       |     0xff
  |       |       |  Payload: {Code: 0.02 (POST),
  |       |       |            Uri-Host: "example.com",
  |       |       |            OSCORE: [kid:0x5f, Partial IV:0],
  |       |       |            Proxy-Scheme: "coap",
  |       |       |            0xff,
  |       |       |            {Code: 0.01 (GET),
  |       |       |             Uri-Path: "alarm_status"
  |       |       |            }   // Encrypted with CTX_C_S
  |       |       |           } // Encrypted with CTX_C_P
  |       |       |
  |     Decrypt   |
  |     REQ with  |
  |     CTX_C_P   |
  |       |       |
  |       +------>|     Code: 0.02 (POST)
  |       | POST  |    Token: 0x7b
  |       |       | Uri-Host: "example.com",
  |       |       |   OSCORE: [kid:0x5f, Partial IV:0]
  |       |       |     0xff
  |       |       |  Payload: {Code: 0.01 (GET),
  |       |       |            Uri-Path: "alarm_status"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |
  |       |     Decrypt
  |       |     REQ with
  |       |     CTX_C_S
  |       |       |
  |       |     Encrypt
  |       |     RESP with
  |       |     CTX_C_S
  |       |       |
  |       |<------+     Code: 2.04 (Changed)
  |       |  2.04 |    Token: 0x7b
  |       |       |   OSCORE: -
  |       |       |     0xff
  |       |       |  Payload: {Code: 2.05 (Content),
  |       |       |            0xff,
  |       |       |            "0"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |
  |     Encrypt   |
  |     RESP with |
  |     CTX_C_P   |
  |       |       |
  |<------+       |     Code: 2.04 (Changed)
  |  2.04 |       |    Token: 0x8c
  |       |       |   OSCORE: -
  |       |       |     0xff
  |       |       |  Payload: {Code: 2.04 (Changed),
  |       |       |            OSCORE: -,
  |       |       |            0xff,
  |       |       |            {Code: 2.05 (Content),
  |       |       |             0xff,
  |       |       |             "0"
  |       |       |            }   // Encrypted with CTX_C_S
  |       |       |           } // Encrypted with CTX_C_P
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_P   |       |
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_S   |       |
  |       |       |

Square brackets [ ... ] indicate content of compressed COSE object.
Curly brackets { ... } indicate encrypted data.

(A, B) indicates a CBOR sequence [RFC8742]
       of two CBOR data items A and B.
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="sec-example-edhoc-comb-req">
        <name>With Forward-Proxy and LAKE (Optimized); OSCORE: C-S, C-P</name>
        <t>In the example shown in <xref target="fig-example-edhoc-comb-req"/>, message exchanges are protected as follows.</t>
        <ul spacing="normal">
          <li>
            <t>End-to-end, between the client and the server, using the OSCORE Security Context CTX_C_S. The client uses the OSCORE Sender ID 0x5f when using OSCORE with the server.</t>
          </li>
          <li>
            <t>Between the client and the proxy, using the OSCORE Security Context CTX_C_P. The client uses the OSCORE Sender ID 0x20 when using OSCORE with the proxy.</t>
          </li>
        </ul>
        <t>The example also shows how the client establishes the OSCORE Security Contexts CTX_C_P with the proxy and CTX_C_S with the server, by using the key exchange protocol LAKE <xref target="RFC9528"/>.</t>
        <t>In particular, the client relies on the LAKE + OSCORE request defined in <xref target="RFC9668"/> (denoted therein as "EDHOC + OSCORE request") and indicated as COMB_REQ, in order to transport the last LAKE message_3 and the first OSCORE-protected application CoAP request combined together.</t>
        <t>After a first phase where the OSCORE Security Contexts are established, the second phase consists in a protected message exchange equivalent to that shown in <xref target="sec-examples-1"/>. In the example shown in the present section, the two phases partly overlap at the POST request sent by the client with Token 0x83 and forwarded by the proxy with Token 0xa6, as the LAKE + OSCORE request that conveys both the last LAKE message_3 from the client intended for the server and the first OSCORE-protected application CoAP request combined together.</t>
        <figure anchor="fig-example-edhoc-comb-req">
          <name>Use of OSCORE between Client-Server and Proxy-Server, with OSCORE Security Contexts established through LAKE using the LAKE + OSCORE request</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="3040" width="544" viewBox="0 0 544 3040" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 24,48 L 24,240" fill="none" stroke="black"/>
                <path d="M 24,280 L 24,288" fill="none" stroke="black"/>
                <path d="M 24,344 L 24,352" fill="none" stroke="black"/>
                <path d="M 24,432 L 24,1264" fill="none" stroke="black"/>
                <path d="M 24,1320 L 24,1328" fill="none" stroke="black"/>
                <path d="M 24,1368 L 24,1376" fill="none" stroke="black"/>
                <path d="M 24,1432 L 24,1440" fill="none" stroke="black"/>
                <path d="M 24,1592 L 24,2800" fill="none" stroke="black"/>
                <path d="M 24,2856 L 24,2864" fill="none" stroke="black"/>
                <path d="M 24,2920 L 24,2928" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,672" fill="none" stroke="black"/>
                <path d="M 88,712 L 88,720" fill="none" stroke="black"/>
                <path d="M 88,840 L 88,1056" fill="none" stroke="black"/>
                <path d="M 88,1112 L 88,1872" fill="none" stroke="black"/>
                <path d="M 88,1944 L 88,2528" fill="none" stroke="black"/>
                <path d="M 88,2584 L 88,2928" fill="none" stroke="black"/>
                <path d="M 152,48 L 152,2144" fill="none" stroke="black"/>
                <path d="M 152,2184 L 152,2192" fill="none" stroke="black"/>
                <path d="M 152,2312 L 152,2320" fill="none" stroke="black"/>
                <path d="M 152,2376 L 152,2928" fill="none" stroke="black"/>
                <path d="M 24,64 L 80,64" fill="none" stroke="black"/>
                <path d="M 32,176 L 88,176" fill="none" stroke="black"/>
                <path d="M 24,448 L 80,448" fill="none" stroke="black"/>
                <path d="M 88,864 L 144,864" fill="none" stroke="black"/>
                <path d="M 96,992 L 152,992" fill="none" stroke="black"/>
                <path d="M 32,1136 L 88,1136" fill="none" stroke="black"/>
                <path d="M 24,1616 L 80,1616" fill="none" stroke="black"/>
                <path d="M 88,1968 L 144,1968" fill="none" stroke="black"/>
                <path d="M 96,2400 L 152,2400" fill="none" stroke="black"/>
                <path d="M 32,2608 L 88,2608" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="152,1968 140,1962.4 140,1973.6" fill="black" transform="rotate(0,144,1968)"/>
                <polygon class="arrowhead" points="152,864 140,858.4 140,869.6" fill="black" transform="rotate(0,144,864)"/>
                <polygon class="arrowhead" points="104,2400 92,2394.4 92,2405.6" fill="black" transform="rotate(180,96,2400)"/>
                <polygon class="arrowhead" points="104,992 92,986.4 92,997.6" fill="black" transform="rotate(180,96,992)"/>
                <polygon class="arrowhead" points="88,1616 76,1610.4 76,1621.6" fill="black" transform="rotate(0,80,1616)"/>
                <polygon class="arrowhead" points="88,448 76,442.4 76,453.6" fill="black" transform="rotate(0,80,448)"/>
                <polygon class="arrowhead" points="88,64 76,58.4 76,69.6" fill="black" transform="rotate(0,80,64)"/>
                <polygon class="arrowhead" points="40,2608 28,2602.4 28,2613.6" fill="black" transform="rotate(180,32,2608)"/>
                <polygon class="arrowhead" points="40,1136 28,1130.4 28,1141.6" fill="black" transform="rotate(180,32,1136)"/>
                <polygon class="arrowhead" points="40,176 28,170.4 28,181.6" fill="black" transform="rotate(180,32,176)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="88" y="36">Proxy</text>
                  <text x="148" y="36">Server</text>
                  <text x="216" y="68">Code:</text>
                  <text x="260" y="68">0.02</text>
                  <text x="308" y="68">(POST)</text>
                  <text x="52" y="84">POST</text>
                  <text x="212" y="84">Token:</text>
                  <text x="260" y="84">0xf3</text>
                  <text x="200" y="100">Uri-Path:</text>
                  <text x="296" y="100">".well-known"</text>
                  <text x="200" y="116">Uri-Path:</text>
                  <text x="272" y="116">"edhoc"</text>
                  <text x="212" y="132">0xff</text>
                  <text x="204" y="148">Payload:</text>
                  <text x="268" y="148">(true,</text>
                  <text x="316" y="148">LAKE</text>
                  <text x="380" y="148">message_1)</text>
                  <text x="208" y="180">Code:</text>
                  <text x="252" y="180">2.04</text>
                  <text x="312" y="180">(Changed)</text>
                  <text x="60" y="196">2.04</text>
                  <text x="204" y="196">Token:</text>
                  <text x="252" y="196">0xf3</text>
                  <text x="204" y="212">0xff</text>
                  <text x="196" y="228">Payload:</text>
                  <text x="252" y="228">LAKE</text>
                  <text x="312" y="228">message_2</text>
                  <text x="40" y="260">Establish</text>
                  <text x="32" y="276">CTX_C_P</text>
                  <text x="32" y="308">Encrypt</text>
                  <text x="16" y="324">REQ</text>
                  <text x="52" y="324">with</text>
                  <text x="32" y="340">CTX_C_P</text>
                  <text x="32" y="372">Prepare</text>
                  <text x="36" y="388">COMB_REQ</text>
                  <text x="16" y="404">for</text>
                  <text x="40" y="404">P</text>
                  <text x="20" y="420">from</text>
                  <text x="56" y="420">REQ</text>
                  <text x="216" y="452">Code:</text>
                  <text x="260" y="452">0.02</text>
                  <text x="308" y="452">(POST)</text>
                  <text x="52" y="468">POST</text>
                  <text x="212" y="468">Token:</text>
                  <text x="260" y="468">0x82</text>
                  <text x="208" y="484">OSCORE:</text>
                  <text x="284" y="484">[kid:0x20,</text>
                  <text x="360" y="484">Partial</text>
                  <text x="416" y="484">IV:0]</text>
                  <text x="212" y="500">EDHOC:</text>
                  <text x="248" y="500">-</text>
                  <text x="212" y="516">0xff</text>
                  <text x="204" y="532">Payload:</text>
                  <text x="260" y="532">LAKE</text>
                  <text x="324" y="532">message_3,</text>
                  <text x="380" y="532">//</text>
                  <text x="428" y="532">Intended</text>
                  <text x="480" y="532">for</text>
                  <text x="504" y="532">P</text>
                  <text x="268" y="548">{Code:</text>
                  <text x="316" y="548">0.02</text>
                  <text x="368" y="548">(POST),</text>
                  <text x="288" y="564">Uri-Host:</text>
                  <text x="388" y="564">"example.com",</text>
                  <text x="288" y="580">Uri-Path:</text>
                  <text x="388" y="580">".well-known",</text>
                  <text x="288" y="596">Uri-Path:</text>
                  <text x="364" y="596">"edhoc",</text>
                  <text x="304" y="612">Proxy-Scheme:</text>
                  <text x="392" y="612">"coap",</text>
                  <text x="272" y="628">0xff,</text>
                  <text x="276" y="644">(true,</text>
                  <text x="324" y="644">LAKE</text>
                  <text x="388" y="644">message_1)</text>
                  <text x="248" y="660">}</text>
                  <text x="268" y="660">//</text>
                  <text x="320" y="660">Encrypted</text>
                  <text x="380" y="660">with</text>
                  <text x="432" y="660">CTX_C_P</text>
                  <text x="104" y="692">Establish</text>
                  <text x="96" y="708">CTX_C_P</text>
                  <text x="96" y="740">Rebuild</text>
                  <text x="80" y="756">REQ</text>
                  <text x="116" y="756">from</text>
                  <text x="100" y="772">COMB_REQ</text>
                  <text x="88" y="788">|</text>
                  <text x="96" y="804">Decrypt</text>
                  <text x="80" y="820">REQ</text>
                  <text x="116" y="820">with</text>
                  <text x="96" y="836">CTX_C_P</text>
                  <text x="216" y="868">Code:</text>
                  <text x="260" y="868">0.02</text>
                  <text x="308" y="868">(POST)</text>
                  <text x="116" y="884">POST</text>
                  <text x="212" y="884">Token:</text>
                  <text x="260" y="884">0xa5</text>
                  <text x="200" y="900">Uri-Host:</text>
                  <text x="300" y="900">"example.com",</text>
                  <text x="200" y="916">Uri-Path:</text>
                  <text x="296" y="916">".well-known"</text>
                  <text x="200" y="932">Uri-Path:</text>
                  <text x="272" y="932">"edhoc"</text>
                  <text x="212" y="948">0xff</text>
                  <text x="204" y="964">Payload:</text>
                  <text x="268" y="964">(true,</text>
                  <text x="316" y="964">LAKE</text>
                  <text x="380" y="964">message_1)</text>
                  <text x="208" y="996">Code:</text>
                  <text x="252" y="996">2.04</text>
                  <text x="312" y="996">(Changed)</text>
                  <text x="124" y="1012">2.04</text>
                  <text x="204" y="1012">Token:</text>
                  <text x="252" y="1012">0xa5</text>
                  <text x="204" y="1028">0xff</text>
                  <text x="196" y="1044">Payload:</text>
                  <text x="252" y="1044">LAKE</text>
                  <text x="312" y="1044">message_2</text>
                  <text x="96" y="1076">Encrypt</text>
                  <text x="84" y="1092">RESP</text>
                  <text x="124" y="1092">with</text>
                  <text x="96" y="1108">CTX_C_P</text>
                  <text x="216" y="1140">Code:</text>
                  <text x="260" y="1140">2.04</text>
                  <text x="320" y="1140">(Changed)</text>
                  <text x="60" y="1156">2.04</text>
                  <text x="212" y="1156">Token:</text>
                  <text x="260" y="1156">0x82</text>
                  <text x="208" y="1172">OSCORE:</text>
                  <text x="248" y="1172">-</text>
                  <text x="212" y="1188">0xff</text>
                  <text x="204" y="1204">Payload:</text>
                  <text x="268" y="1204">{Code:</text>
                  <text x="316" y="1204">2.04</text>
                  <text x="380" y="1204">(Changed),</text>
                  <text x="272" y="1220">0xff,</text>
                  <text x="268" y="1236">LAKE</text>
                  <text x="328" y="1236">message_2</text>
                  <text x="248" y="1252">}</text>
                  <text x="268" y="1252">//</text>
                  <text x="320" y="1252">Encrypted</text>
                  <text x="380" y="1252">with</text>
                  <text x="432" y="1252">CTX_C_P</text>
                  <text x="32" y="1284">Decrypt</text>
                  <text x="20" y="1300">RESP</text>
                  <text x="60" y="1300">with</text>
                  <text x="32" y="1316">CTX_C_P</text>
                  <text x="40" y="1348">Establish</text>
                  <text x="32" y="1364">CTX_C_S</text>
                  <text x="32" y="1396">Encrypt</text>
                  <text x="16" y="1412">REQ</text>
                  <text x="52" y="1412">with</text>
                  <text x="32" y="1428">CTX_C_S</text>
                  <text x="32" y="1460">Prepare</text>
                  <text x="36" y="1476">COMB_REQ</text>
                  <text x="16" y="1492">for</text>
                  <text x="40" y="1492">S</text>
                  <text x="20" y="1508">from</text>
                  <text x="56" y="1508">REQ</text>
                  <text x="24" y="1524">|</text>
                  <text x="32" y="1540">Encrypt</text>
                  <text x="36" y="1556">COMB_REQ</text>
                  <text x="20" y="1572">with</text>
                  <text x="32" y="1588">CTX_C_P</text>
                  <text x="216" y="1620">Code:</text>
                  <text x="260" y="1620">0.02</text>
                  <text x="308" y="1620">(POST)</text>
                  <text x="52" y="1636">POST</text>
                  <text x="212" y="1636">Token:</text>
                  <text x="260" y="1636">0x83</text>
                  <text x="208" y="1652">OSCORE:</text>
                  <text x="284" y="1652">[kid:0x20,</text>
                  <text x="360" y="1652">Partial</text>
                  <text x="416" y="1652">IV:1]</text>
                  <text x="212" y="1668">0xff</text>
                  <text x="204" y="1684">Payload:</text>
                  <text x="268" y="1684">{Code:</text>
                  <text x="316" y="1684">0.02</text>
                  <text x="368" y="1684">(POST),</text>
                  <text x="288" y="1700">Uri-Host:</text>
                  <text x="388" y="1700">"example.com",</text>
                  <text x="280" y="1716">OSCORE:</text>
                  <text x="356" y="1716">[kid:0x5f,</text>
                  <text x="432" y="1716">Partial</text>
                  <text x="492" y="1716">IV:0],</text>
                  <text x="276" y="1732">EDHOC:</text>
                  <text x="316" y="1732">-,</text>
                  <text x="304" y="1748">Proxy-Scheme:</text>
                  <text x="392" y="1748">"coap",</text>
                  <text x="272" y="1764">0xff,</text>
                  <text x="268" y="1780">LAKE</text>
                  <text x="332" y="1780">message_3,</text>
                  <text x="388" y="1780">//</text>
                  <text x="436" y="1780">Intended</text>
                  <text x="488" y="1780">for</text>
                  <text x="512" y="1780">S</text>
                  <text x="256" y="1796">{</text>
                  <text x="280" y="1812">Code:</text>
                  <text x="324" y="1812">0.01</text>
                  <text x="372" y="1812">(GET),</text>
                  <text x="352" y="1828">Uri-Path:"alarm_status"</text>
                  <text x="256" y="1844">}</text>
                  <text x="292" y="1844">//</text>
                  <text x="344" y="1844">Encrypted</text>
                  <text x="404" y="1844">with</text>
                  <text x="456" y="1844">CTX_C_S</text>
                  <text x="248" y="1860">}</text>
                  <text x="268" y="1860">//</text>
                  <text x="320" y="1860">Encrypted</text>
                  <text x="380" y="1860">with</text>
                  <text x="432" y="1860">CTX_C_P</text>
                  <text x="96" y="1892">Decrypt</text>
                  <text x="100" y="1908">COMB_REQ</text>
                  <text x="84" y="1924">with</text>
                  <text x="96" y="1940">CTX_C_P</text>
                  <text x="216" y="1972">Code:</text>
                  <text x="260" y="1972">0.02</text>
                  <text x="308" y="1972">(POST)</text>
                  <text x="116" y="1988">POST</text>
                  <text x="212" y="1988">Token:</text>
                  <text x="260" y="1988">0xa6</text>
                  <text x="200" y="2004">Uri-Host:</text>
                  <text x="300" y="2004">"example.com",</text>
                  <text x="208" y="2020">OSCORE:</text>
                  <text x="284" y="2020">[kid:0x5f,</text>
                  <text x="360" y="2020">Partial</text>
                  <text x="416" y="2020">IV:0]</text>
                  <text x="212" y="2036">EDHOC:</text>
                  <text x="248" y="2036">-</text>
                  <text x="212" y="2052">0xff</text>
                  <text x="204" y="2068">Payload:</text>
                  <text x="260" y="2068">LAKE</text>
                  <text x="324" y="2068">message_3,</text>
                  <text x="380" y="2068">//</text>
                  <text x="428" y="2068">Intended</text>
                  <text x="480" y="2068">for</text>
                  <text x="504" y="2068">S</text>
                  <text x="248" y="2084">{</text>
                  <text x="272" y="2100">Code:</text>
                  <text x="316" y="2100">0.01</text>
                  <text x="364" y="2100">(GET),</text>
                  <text x="288" y="2116">Uri-Path:</text>
                  <text x="388" y="2116">"alarm_status"</text>
                  <text x="248" y="2132">}</text>
                  <text x="268" y="2132">//</text>
                  <text x="320" y="2132">Encrypted</text>
                  <text x="380" y="2132">with</text>
                  <text x="432" y="2132">CTX_C_S</text>
                  <text x="168" y="2164">Establish</text>
                  <text x="160" y="2180">CTX_C_S</text>
                  <text x="160" y="2212">Rebuild</text>
                  <text x="144" y="2228">REQ</text>
                  <text x="180" y="2228">from</text>
                  <text x="164" y="2244">COMB_REQ</text>
                  <text x="152" y="2260">|</text>
                  <text x="160" y="2276">Decrypt</text>
                  <text x="144" y="2292">REQ</text>
                  <text x="180" y="2292">with</text>
                  <text x="160" y="2308">CTX_C_S</text>
                  <text x="160" y="2340">Encrypt</text>
                  <text x="148" y="2356">RESP</text>
                  <text x="188" y="2356">with</text>
                  <text x="160" y="2372">CTX_C_S</text>
                  <text x="216" y="2404">Code:</text>
                  <text x="260" y="2404">2.04</text>
                  <text x="320" y="2404">(Changed)</text>
                  <text x="124" y="2420">2.04</text>
                  <text x="212" y="2420">Token:</text>
                  <text x="260" y="2420">0xa6</text>
                  <text x="208" y="2436">OSCORE:</text>
                  <text x="248" y="2436">-</text>
                  <text x="212" y="2452">0xff</text>
                  <text x="204" y="2468">Payload:</text>
                  <text x="268" y="2468">{Code:</text>
                  <text x="316" y="2468">2.05</text>
                  <text x="380" y="2468">(Content),</text>
                  <text x="272" y="2484">0xff,</text>
                  <text x="264" y="2500">"0"</text>
                  <text x="248" y="2516">}</text>
                  <text x="268" y="2516">//</text>
                  <text x="320" y="2516">Encrypted</text>
                  <text x="380" y="2516">with</text>
                  <text x="432" y="2516">CTX_C_S</text>
                  <text x="96" y="2548">Encrypt</text>
                  <text x="84" y="2564">RESP</text>
                  <text x="124" y="2564">with</text>
                  <text x="96" y="2580">CTX_C_P</text>
                  <text x="216" y="2612">Code:</text>
                  <text x="260" y="2612">2.04</text>
                  <text x="320" y="2612">(Changed)</text>
                  <text x="60" y="2628">2.04</text>
                  <text x="212" y="2628">Token:</text>
                  <text x="260" y="2628">0x83</text>
                  <text x="208" y="2644">OSCORE:</text>
                  <text x="248" y="2644">-</text>
                  <text x="212" y="2660">0xff</text>
                  <text x="204" y="2676">Payload:</text>
                  <text x="268" y="2676">{Code:</text>
                  <text x="316" y="2676">2.04</text>
                  <text x="380" y="2676">(Changed),</text>
                  <text x="280" y="2692">OSCORE:</text>
                  <text x="324" y="2692">-,</text>
                  <text x="272" y="2708">0xff,</text>
                  <text x="276" y="2724">{Code:</text>
                  <text x="324" y="2724">2.05</text>
                  <text x="388" y="2724">(Content),</text>
                  <text x="280" y="2740">0xff,</text>
                  <text x="272" y="2756">"0"</text>
                  <text x="256" y="2772">}</text>
                  <text x="292" y="2772">//</text>
                  <text x="344" y="2772">Encrypted</text>
                  <text x="404" y="2772">with</text>
                  <text x="456" y="2772">CTX_C_S</text>
                  <text x="248" y="2788">}</text>
                  <text x="268" y="2788">//</text>
                  <text x="320" y="2788">Encrypted</text>
                  <text x="380" y="2788">with</text>
                  <text x="432" y="2788">CTX_C_P</text>
                  <text x="32" y="2820">Decrypt</text>
                  <text x="20" y="2836">RESP</text>
                  <text x="60" y="2836">with</text>
                  <text x="32" y="2852">CTX_C_P</text>
                  <text x="32" y="2884">Decrypt</text>
                  <text x="20" y="2900">RESP</text>
                  <text x="60" y="2900">with</text>
                  <text x="32" y="2916">CTX_C_S</text>
                  <text x="28" y="2964">Square</text>
                  <text x="92" y="2964">brackets</text>
                  <text x="136" y="2964">[</text>
                  <text x="160" y="2964">...</text>
                  <text x="184" y="2964">]</text>
                  <text x="228" y="2964">indicate</text>
                  <text x="296" y="2964">content</text>
                  <text x="340" y="2964">of</text>
                  <text x="396" y="2964">compressed</text>
                  <text x="460" y="2964">COSE</text>
                  <text x="512" y="2964">object.</text>
                  <text x="24" y="2980">Curly</text>
                  <text x="84" y="2980">brackets</text>
                  <text x="128" y="2980">{</text>
                  <text x="152" y="2980">...</text>
                  <text x="176" y="2980">}</text>
                  <text x="220" y="2980">indicate</text>
                  <text x="296" y="2980">encrypted</text>
                  <text x="360" y="2980">data.</text>
                  <text x="16" y="3012">(A,</text>
                  <text x="44" y="3012">B)</text>
                  <text x="96" y="3012">indicates</text>
                  <text x="144" y="3012">a</text>
                  <text x="172" y="3012">CBOR</text>
                  <text x="228" y="3012">sequence</text>
                  <text x="304" y="3012">[RFC8742]</text>
                  <text x="68" y="3028">of</text>
                  <text x="96" y="3028">two</text>
                  <text x="132" y="3028">CBOR</text>
                  <text x="172" y="3028">data</text>
                  <text x="216" y="3028">items</text>
                  <text x="248" y="3028">A</text>
                  <text x="272" y="3028">and</text>
                  <text x="300" y="3028">B.</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
Client  Proxy  Server
  |       |       |
  +------>|       |     Code: 0.02 (POST)
  | POST  |       |    Token: 0xf3
  |       |       | Uri-Path: ".well-known"
  |       |       | Uri-Path: "edhoc"
  |       |       |     0xff
  |       |       |  Payload: (true, LAKE message_1)
  |       |       |
  |<------+       |    Code: 2.04 (Changed)
  |  2.04 |       |   Token: 0xf3
  |       |       |    0xff
  |       |       | Payload: LAKE message_2
  |       |       |
Establish |       |
CTX_C_P   |       |
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_P   |       |
  |       |       |
Prepare   |       |
COMB_REQ  |       |
for P     |       |
from REQ  |       |
  |       |       |
  +------>|       |     Code: 0.02 (POST)
  | POST  |       |    Token: 0x82
  |       |       |   OSCORE: [kid:0x20, Partial IV:0]
  |       |       |    EDHOC: -
  |       |       |     0xff
  |       |       |  Payload: LAKE message_3, // Intended for P
  |       |       |           {Code: 0.02 (POST),
  |       |       |            Uri-Host: "example.com",
  |       |       |            Uri-Path: ".well-known",
  |       |       |            Uri-Path: "edhoc",
  |       |       |            Proxy-Scheme: "coap",
  |       |       |            0xff,
  |       |       |            (true, LAKE message_1)
  |       |       |           } // Encrypted with CTX_C_P
  |       |       |
  |     Establish |
  |     CTX_C_P   |
  |       |       |
  |     Rebuild   |
  |     REQ from  |
  |     COMB_REQ  |
  |       |       |
  |     Decrypt   |
  |     REQ with  |
  |     CTX_C_P   |
  |       |       |
  |       +------>|     Code: 0.02 (POST)
  |       | POST  |    Token: 0xa5
  |       |       | Uri-Host: "example.com",
  |       |       | Uri-Path: ".well-known"
  |       |       | Uri-Path: "edhoc"
  |       |       |     0xff
  |       |       |  Payload: (true, LAKE message_1)
  |       |       |
  |       |<------+    Code: 2.04 (Changed)
  |       |  2.04 |   Token: 0xa5
  |       |       |    0xff
  |       |       | Payload: LAKE message_2
  |       |       |
  |     Encrypt   |
  |     RESP with |
  |     CTX_C_P   |
  |       |       |
  |<------+       |     Code: 2.04 (Changed)
  |  2.04 |       |    Token: 0x82
  |       |       |   OSCORE: -
  |       |       |     0xff
  |       |       |  Payload: {Code: 2.04 (Changed),
  |       |       |            0xff,
  |       |       |            LAKE message_2
  |       |       |           } // Encrypted with CTX_C_P
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_P   |       |
  |       |       |
Establish |       |
CTX_C_S   |       |
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_S   |       |
  |       |       |
Prepare   |       |
COMB_REQ  |       |
for S     |       |
from REQ  |       |
  |       |       |
Encrypt   |       |
COMB_REQ  |       |
with      |       |
CTX_C_P   |       |
  |       |       |
  +------>|       |     Code: 0.02 (POST)
  | POST  |       |    Token: 0x83
  |       |       |   OSCORE: [kid:0x20, Partial IV:1]
  |       |       |     0xff
  |       |       |  Payload: {Code: 0.02 (POST),
  |       |       |            Uri-Host: "example.com",
  |       |       |            OSCORE: [kid:0x5f, Partial IV:0],
  |       |       |            EDHOC: -,
  |       |       |            Proxy-Scheme: "coap",
  |       |       |            0xff,
  |       |       |            LAKE message_3, // Intended for S
  |       |       |            {
  |       |       |             Code: 0.01 (GET),
  |       |       |             Uri-Path:"alarm_status"
  |       |       |            }   // Encrypted with CTX_C_S
  |       |       |           } // Encrypted with CTX_C_P
  |       |       |
  |     Decrypt   |
  |     COMB_REQ  |
  |     with      |
  |     CTX_C_P   |
  |       |       |
  |       +------>|     Code: 0.02 (POST)
  |       | POST  |    Token: 0xa6
  |       |       | Uri-Host: "example.com",
  |       |       |   OSCORE: [kid:0x5f, Partial IV:0]
  |       |       |    EDHOC: -
  |       |       |     0xff
  |       |       |  Payload: LAKE message_3, // Intended for S
  |       |       |           {
  |       |       |            Code: 0.01 (GET),
  |       |       |            Uri-Path: "alarm_status"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |
  |       |     Establish
  |       |     CTX_C_S
  |       |       |
  |       |     Rebuild
  |       |     REQ from
  |       |     COMB_REQ
  |       |       |
  |       |     Decrypt
  |       |     REQ with
  |       |     CTX_C_S
  |       |       |
  |       |     Encrypt
  |       |     RESP with
  |       |     CTX_C_S
  |       |       |
  |       |<------+     Code: 2.04 (Changed)
  |       |  2.04 |    Token: 0xa6
  |       |       |   OSCORE: -
  |       |       |     0xff
  |       |       |  Payload: {Code: 2.05 (Content),
  |       |       |            0xff,
  |       |       |            "0"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |
  |     Encrypt   |
  |     RESP with |
  |     CTX_C_P   |
  |       |       |
  |<------+       |     Code: 2.04 (Changed)
  |  2.04 |       |    Token: 0x83
  |       |       |   OSCORE: -
  |       |       |     0xff
  |       |       |  Payload: {Code: 2.04 (Changed),
  |       |       |            OSCORE: -,
  |       |       |            0xff,
  |       |       |            {Code: 2.05 (Content),
  |       |       |             0xff,
  |       |       |             "0"
  |       |       |            }   // Encrypted with CTX_C_S
  |       |       |           } // Encrypted with CTX_C_P
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_P   |       |
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_S   |       |
  |       |       |

Square brackets [ ... ] indicate content of compressed COSE object.
Curly brackets { ... } indicate encrypted data.

(A, B) indicates a CBOR sequence [RFC8742]
       of two CBOR data items A and B.
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="with-two-forward-proxies-oscore-c-s-c-p1-p1-p2-p2-s">
        <name>With Two Forward-Proxies; OSCORE: C-S, C-P1, P1-P2, P2-S</name>
        <t>In the example shown in <xref target="fig-example-client-two-proxies-server"/>, message exchanges are protected with OSCORE as follows.</t>
        <ul spacing="normal">
          <li>
            <t>End-to-end between the client and the server, using the OSCORE Security Context CTX_C_S. The client uses the OSCORE Sender ID 0x5f when using OSCORE with the server.</t>
          </li>
          <li>
            <t>Between the client and the proxy Proxy1 (P1), using the OSCORE Security Context CTX_C_P1. The client uses the OSCORE Sender ID 0x20 when using OSCORE with P1.</t>
          </li>
          <li>
            <t>Between P1 and the proxy Proxy2 (P2), using the OSCORE Security Context CTX_P1_P2. P1 uses the OSCORE Sender ID 0xd4 when using OSCORE with P2.</t>
          </li>
          <li>
            <t>Between P2 and the server, using the OSCORE Security Context CTX_P2_S. P2 uses the OSCORE Sender ID 0x77 when using OSCORE with the server.</t>
          </li>
        </ul>
        <figure anchor="fig-example-client-two-proxies-server">
          <name>Use of OSCORE between Client-Server, Client-Proxy1, Proxy1-Proxy2, and Proxy2-Server</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="2464" width="552" viewBox="0 0 552 2464" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 24,104 L 24,112" fill="none" stroke="black"/>
                <path d="M 24,168 L 24,2272" fill="none" stroke="black"/>
                <path d="M 24,2328 L 24,2336" fill="none" stroke="black"/>
                <path d="M 24,2392 L 24,2400" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,416" fill="none" stroke="black"/>
                <path d="M 88,472 L 88,480" fill="none" stroke="black"/>
                <path d="M 88,536 L 88,1936" fill="none" stroke="black"/>
                <path d="M 88,1992 L 88,2000" fill="none" stroke="black"/>
                <path d="M 88,2056 L 88,2400" fill="none" stroke="black"/>
                <path d="M 152,48 L 152,784" fill="none" stroke="black"/>
                <path d="M 152,840 L 152,848" fill="none" stroke="black"/>
                <path d="M 152,904 L 152,1600" fill="none" stroke="black"/>
                <path d="M 152,1656 L 152,1664" fill="none" stroke="black"/>
                <path d="M 152,1720 L 152,2400" fill="none" stroke="black"/>
                <path d="M 216,48 L 216,1136" fill="none" stroke="black"/>
                <path d="M 216,1192 L 216,1200" fill="none" stroke="black"/>
                <path d="M 216,1256 L 216,1264" fill="none" stroke="black"/>
                <path d="M 216,1320 L 216,1328" fill="none" stroke="black"/>
                <path d="M 216,1384 L 216,2400" fill="none" stroke="black"/>
                <path d="M 24,192 L 80,192" fill="none" stroke="black"/>
                <path d="M 88,560 L 144,560" fill="none" stroke="black"/>
                <path d="M 152,928 L 208,928" fill="none" stroke="black"/>
                <path d="M 160,1408 L 216,1408" fill="none" stroke="black"/>
                <path d="M 96,1744 L 152,1744" fill="none" stroke="black"/>
                <path d="M 32,2080 L 88,2080" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="216,928 204,922.4 204,933.6" fill="black" transform="rotate(0,208,928)"/>
                <polygon class="arrowhead" points="168,1408 156,1402.4 156,1413.6" fill="black" transform="rotate(180,160,1408)"/>
                <polygon class="arrowhead" points="152,560 140,554.4 140,565.6" fill="black" transform="rotate(0,144,560)"/>
                <polygon class="arrowhead" points="104,1744 92,1738.4 92,1749.6" fill="black" transform="rotate(180,96,1744)"/>
                <polygon class="arrowhead" points="88,192 76,186.4 76,197.6" fill="black" transform="rotate(0,80,192)"/>
                <polygon class="arrowhead" points="40,2080 28,2074.4 28,2085.6" fill="black" transform="rotate(180,32,2080)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="92" y="36">P1</text>
                  <text x="156" y="36">P2</text>
                  <text x="220" y="36">Server</text>
                  <text x="24" y="52">|</text>
                  <text x="32" y="68">Encrypt</text>
                  <text x="16" y="84">REQ</text>
                  <text x="52" y="84">with</text>
                  <text x="32" y="100">CTX_C_S</text>
                  <text x="32" y="132">Encrypt</text>
                  <text x="16" y="148">REQ</text>
                  <text x="52" y="148">with</text>
                  <text x="36" y="164">CTX_C_P1</text>
                  <text x="280" y="196">Code:</text>
                  <text x="324" y="196">0.02</text>
                  <text x="372" y="196">(POST)</text>
                  <text x="52" y="212">POST</text>
                  <text x="276" y="212">Token:</text>
                  <text x="324" y="212">0x8c</text>
                  <text x="272" y="228">OSCORE:</text>
                  <text x="348" y="228">[kid:0x20,</text>
                  <text x="424" y="228">Partial</text>
                  <text x="484" y="228">IV:31]</text>
                  <text x="276" y="244">0xff</text>
                  <text x="268" y="260">Payload:</text>
                  <text x="332" y="260">{Code:</text>
                  <text x="380" y="260">0.02</text>
                  <text x="432" y="260">(POST),</text>
                  <text x="352" y="276">Uri-Host:</text>
                  <text x="452" y="276">"example.com",</text>
                  <text x="344" y="292">OSCORE:</text>
                  <text x="420" y="292">[kid:0x5f,</text>
                  <text x="416" y="308">Partial</text>
                  <text x="480" y="308">IV:42],</text>
                  <text x="368" y="324">Proxy-Scheme:</text>
                  <text x="456" y="324">"coap",</text>
                  <text x="336" y="340">0xff,</text>
                  <text x="340" y="356">{Code:</text>
                  <text x="388" y="356">0.01</text>
                  <text x="436" y="356">(GET),</text>
                  <text x="360" y="372">Uri-Path:</text>
                  <text x="460" y="372">"alarm_status"</text>
                  <text x="320" y="388">}</text>
                  <text x="356" y="388">//</text>
                  <text x="408" y="388">Encrypted</text>
                  <text x="468" y="388">with</text>
                  <text x="520" y="388">CTX_C_S</text>
                  <text x="312" y="404">}</text>
                  <text x="332" y="404">//</text>
                  <text x="384" y="404">Encrypted</text>
                  <text x="444" y="404">with</text>
                  <text x="500" y="404">CTX_C_P1</text>
                  <text x="96" y="436">Decrypt</text>
                  <text x="80" y="452">REQ</text>
                  <text x="116" y="452">with</text>
                  <text x="100" y="468">CTX_C_P1</text>
                  <text x="96" y="500">Encrypt</text>
                  <text x="80" y="516">REQ</text>
                  <text x="116" y="516">with</text>
                  <text x="104" y="532">CTX_P1_P2</text>
                  <text x="272" y="564">Code:</text>
                  <text x="316" y="564">0.02</text>
                  <text x="364" y="564">(POST)</text>
                  <text x="116" y="580">POST</text>
                  <text x="268" y="580">Token:</text>
                  <text x="316" y="580">0x7b</text>
                  <text x="264" y="596">OSCORE:</text>
                  <text x="340" y="596">[kid:0xd4,</text>
                  <text x="416" y="596">Partial</text>
                  <text x="476" y="596">IV:53]</text>
                  <text x="268" y="612">0xff</text>
                  <text x="260" y="628">Payload:</text>
                  <text x="324" y="628">{Code:</text>
                  <text x="372" y="628">0.02</text>
                  <text x="424" y="628">(POST),</text>
                  <text x="344" y="644">Uri-Host:</text>
                  <text x="444" y="644">"example.com",</text>
                  <text x="336" y="660">OSCORE:</text>
                  <text x="412" y="660">[kid:0x5f,</text>
                  <text x="408" y="676">Partial</text>
                  <text x="472" y="676">IV:42],</text>
                  <text x="360" y="692">Proxy-Scheme:</text>
                  <text x="448" y="692">"coap",</text>
                  <text x="328" y="708">0xff,</text>
                  <text x="332" y="724">{Code:</text>
                  <text x="380" y="724">0.01</text>
                  <text x="428" y="724">(GET),</text>
                  <text x="352" y="740">Uri-Path:</text>
                  <text x="452" y="740">"alarm_status"</text>
                  <text x="312" y="756">}</text>
                  <text x="348" y="756">//</text>
                  <text x="400" y="756">Encrypted</text>
                  <text x="460" y="756">with</text>
                  <text x="512" y="756">CTX_C_S</text>
                  <text x="304" y="772">}</text>
                  <text x="324" y="772">//</text>
                  <text x="376" y="772">Encrypted</text>
                  <text x="436" y="772">with</text>
                  <text x="496" y="772">CTX_P1_P2</text>
                  <text x="160" y="804">Decrypt</text>
                  <text x="144" y="820">REQ</text>
                  <text x="180" y="820">with</text>
                  <text x="168" y="836">CTX_P1_P2</text>
                  <text x="160" y="868">Encrypt</text>
                  <text x="144" y="884">REQ</text>
                  <text x="180" y="884">with</text>
                  <text x="164" y="900">CTX_P2_S</text>
                  <text x="280" y="932">Code:</text>
                  <text x="324" y="932">0.02</text>
                  <text x="372" y="932">(POST)</text>
                  <text x="180" y="948">POST</text>
                  <text x="276" y="948">Token:</text>
                  <text x="324" y="948">0x6a</text>
                  <text x="264" y="964">Uri-Host:</text>
                  <text x="364" y="964">"example.com",</text>
                  <text x="272" y="980">OSCORE:</text>
                  <text x="348" y="980">[kid:0x77,</text>
                  <text x="424" y="980">Partial</text>
                  <text x="484" y="980">IV:75]</text>
                  <text x="276" y="996">0xff</text>
                  <text x="268" y="1012">Payload:</text>
                  <text x="332" y="1012">{Code:</text>
                  <text x="380" y="1012">0.02</text>
                  <text x="432" y="1012">(POST),</text>
                  <text x="344" y="1028">OSCORE:</text>
                  <text x="420" y="1028">[kid:0x5f,</text>
                  <text x="416" y="1044">Partial</text>
                  <text x="480" y="1044">IV:42],</text>
                  <text x="336" y="1060">0xff,</text>
                  <text x="340" y="1076">{Code:</text>
                  <text x="388" y="1076">0.01</text>
                  <text x="436" y="1076">(GET),</text>
                  <text x="360" y="1092">Uri-Path:</text>
                  <text x="460" y="1092">"alarm_status"</text>
                  <text x="320" y="1108">}</text>
                  <text x="356" y="1108">//</text>
                  <text x="408" y="1108">Encrypted</text>
                  <text x="468" y="1108">with</text>
                  <text x="520" y="1108">CTX_C_S</text>
                  <text x="312" y="1124">}</text>
                  <text x="332" y="1124">//</text>
                  <text x="384" y="1124">Encrypted</text>
                  <text x="444" y="1124">with</text>
                  <text x="500" y="1124">CTX_P2_S</text>
                  <text x="224" y="1156">Decrypt</text>
                  <text x="208" y="1172">REQ</text>
                  <text x="244" y="1172">with</text>
                  <text x="228" y="1188">CTX_P2_S</text>
                  <text x="224" y="1220">Decrypt</text>
                  <text x="208" y="1236">REQ</text>
                  <text x="244" y="1236">with</text>
                  <text x="224" y="1252">CTX_C_S</text>
                  <text x="224" y="1284">Encrypt</text>
                  <text x="212" y="1300">RESP</text>
                  <text x="252" y="1300">with</text>
                  <text x="224" y="1316">CTX_C_S</text>
                  <text x="224" y="1348">Encrypt</text>
                  <text x="212" y="1364">RESP</text>
                  <text x="252" y="1364">with</text>
                  <text x="228" y="1380">CTX_P2_S</text>
                  <text x="272" y="1412">Code:</text>
                  <text x="316" y="1412">2.04</text>
                  <text x="376" y="1412">(Changed)</text>
                  <text x="188" y="1428">2.04</text>
                  <text x="268" y="1428">Token:</text>
                  <text x="316" y="1428">0x6a</text>
                  <text x="264" y="1444">OSCORE:</text>
                  <text x="304" y="1444">-</text>
                  <text x="268" y="1460">0xff</text>
                  <text x="260" y="1476">Payload:</text>
                  <text x="324" y="1476">{Code:</text>
                  <text x="372" y="1476">2.04</text>
                  <text x="436" y="1476">(Changed),</text>
                  <text x="336" y="1492">OSCORE:</text>
                  <text x="380" y="1492">-,</text>
                  <text x="328" y="1508">0xff,</text>
                  <text x="332" y="1524">{Code:</text>
                  <text x="380" y="1524">2.05</text>
                  <text x="444" y="1524">(Content),</text>
                  <text x="336" y="1540">0xff,</text>
                  <text x="328" y="1556">"0"</text>
                  <text x="312" y="1572">}</text>
                  <text x="348" y="1572">//</text>
                  <text x="400" y="1572">Encrypted</text>
                  <text x="460" y="1572">with</text>
                  <text x="512" y="1572">CTX_C_S</text>
                  <text x="304" y="1588">}</text>
                  <text x="324" y="1588">//</text>
                  <text x="376" y="1588">Encrypted</text>
                  <text x="436" y="1588">with</text>
                  <text x="492" y="1588">CTX_P2_S</text>
                  <text x="160" y="1620">Decrypt</text>
                  <text x="148" y="1636">RESP</text>
                  <text x="188" y="1636">with</text>
                  <text x="164" y="1652">CTX_P2_S</text>
                  <text x="160" y="1684">Encrypt</text>
                  <text x="148" y="1700">RESP</text>
                  <text x="188" y="1700">with</text>
                  <text x="168" y="1716">CTX_P1_P2</text>
                  <text x="272" y="1748">Code:</text>
                  <text x="316" y="1748">2.04</text>
                  <text x="376" y="1748">(Changed)</text>
                  <text x="124" y="1764">2.04</text>
                  <text x="268" y="1764">Token:</text>
                  <text x="316" y="1764">0x7b</text>
                  <text x="264" y="1780">OSCORE:</text>
                  <text x="304" y="1780">-</text>
                  <text x="268" y="1796">0xff</text>
                  <text x="260" y="1812">Payload:</text>
                  <text x="324" y="1812">{Code:</text>
                  <text x="372" y="1812">2.04</text>
                  <text x="436" y="1812">(Changed),</text>
                  <text x="336" y="1828">OSCORE:</text>
                  <text x="380" y="1828">-,</text>
                  <text x="328" y="1844">0xff,</text>
                  <text x="332" y="1860">{Code:</text>
                  <text x="380" y="1860">2.05</text>
                  <text x="444" y="1860">(Content),</text>
                  <text x="336" y="1876">0xff,</text>
                  <text x="328" y="1892">"0"</text>
                  <text x="312" y="1908">}</text>
                  <text x="348" y="1908">//</text>
                  <text x="400" y="1908">Encrypted</text>
                  <text x="460" y="1908">with</text>
                  <text x="512" y="1908">CTX_C_S</text>
                  <text x="304" y="1924">}</text>
                  <text x="324" y="1924">//</text>
                  <text x="376" y="1924">Encrypted</text>
                  <text x="436" y="1924">with</text>
                  <text x="496" y="1924">CTX_P1_P2</text>
                  <text x="96" y="1956">Decrypt</text>
                  <text x="84" y="1972">RESP</text>
                  <text x="124" y="1972">with</text>
                  <text x="104" y="1988">CTX_P1_P2</text>
                  <text x="96" y="2020">Encrypt</text>
                  <text x="84" y="2036">RESP</text>
                  <text x="124" y="2036">with</text>
                  <text x="100" y="2052">CTX_C_P1</text>
                  <text x="272" y="2084">Code:</text>
                  <text x="316" y="2084">2.04</text>
                  <text x="376" y="2084">(Changed)</text>
                  <text x="60" y="2100">2.04</text>
                  <text x="268" y="2100">Token:</text>
                  <text x="316" y="2100">0x8c</text>
                  <text x="264" y="2116">OSCORE:</text>
                  <text x="304" y="2116">-</text>
                  <text x="268" y="2132">0xff</text>
                  <text x="260" y="2148">Payload:</text>
                  <text x="324" y="2148">{Code:</text>
                  <text x="372" y="2148">2.04</text>
                  <text x="436" y="2148">(Changed),</text>
                  <text x="336" y="2164">OSCORE:</text>
                  <text x="380" y="2164">-,</text>
                  <text x="328" y="2180">0xff,</text>
                  <text x="332" y="2196">{Code:</text>
                  <text x="380" y="2196">2.05</text>
                  <text x="444" y="2196">(Content),</text>
                  <text x="336" y="2212">0xff,</text>
                  <text x="328" y="2228">"0"</text>
                  <text x="312" y="2244">}</text>
                  <text x="348" y="2244">//</text>
                  <text x="400" y="2244">Encrypted</text>
                  <text x="460" y="2244">with</text>
                  <text x="512" y="2244">CTX_C_S</text>
                  <text x="304" y="2260">}</text>
                  <text x="324" y="2260">//</text>
                  <text x="376" y="2260">Encrypted</text>
                  <text x="436" y="2260">with</text>
                  <text x="492" y="2260">CTX_C_P1</text>
                  <text x="32" y="2292">Decrypt</text>
                  <text x="20" y="2308">RESP</text>
                  <text x="60" y="2308">with</text>
                  <text x="36" y="2324">CTX_C_P1</text>
                  <text x="32" y="2356">Decrypt</text>
                  <text x="20" y="2372">RESP</text>
                  <text x="60" y="2372">with</text>
                  <text x="32" y="2388">CTX_C_S</text>
                  <text x="28" y="2436">Square</text>
                  <text x="92" y="2436">brackets</text>
                  <text x="136" y="2436">[</text>
                  <text x="160" y="2436">...</text>
                  <text x="184" y="2436">]</text>
                  <text x="228" y="2436">indicate</text>
                  <text x="296" y="2436">content</text>
                  <text x="340" y="2436">of</text>
                  <text x="396" y="2436">compressed</text>
                  <text x="460" y="2436">COSE</text>
                  <text x="512" y="2436">object.</text>
                  <text x="24" y="2452">Curly</text>
                  <text x="84" y="2452">brackets</text>
                  <text x="128" y="2452">{</text>
                  <text x="152" y="2452">...</text>
                  <text x="176" y="2452">}</text>
                  <text x="220" y="2452">indicate</text>
                  <text x="296" y="2452">encrypted</text>
                  <text x="360" y="2452">data.</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
Client    P1      P2    Server
  |       |       |       |
Encrypt   |       |       |
REQ with  |       |       |
CTX_C_S   |       |       |
  |       |       |       |
Encrypt   |       |       |
REQ with  |       |       |
CTX_C_P1  |       |       |
  |       |       |       |
  +------>|       |       |     Code: 0.02 (POST)
  | POST  |       |       |    Token: 0x8c
  |       |       |       |   OSCORE: [kid:0x20, Partial IV:31]
  |       |       |       |     0xff
  |       |       |       |  Payload: {Code: 0.02 (POST),
  |       |       |       |            Uri-Host: "example.com",
  |       |       |       |            OSCORE: [kid:0x5f,
  |       |       |       |                     Partial IV:42],
  |       |       |       |            Proxy-Scheme: "coap",
  |       |       |       |            0xff,
  |       |       |       |            {Code: 0.01 (GET),
  |       |       |       |             Uri-Path: "alarm_status"
  |       |       |       |            }   // Encrypted with CTX_C_S
  |       |       |       |           } // Encrypted with CTX_C_P1
  |       |       |       |
  |     Decrypt   |       |
  |     REQ with  |       |
  |     CTX_C_P1  |       |
  |       |       |       |
  |     Encrypt   |       |
  |     REQ with  |       |
  |     CTX_P1_P2 |       |
  |       |       |       |
  |       +------>|       |    Code: 0.02 (POST)
  |       | POST  |       |   Token: 0x7b
  |       |       |       |  OSCORE: [kid:0xd4, Partial IV:53]
  |       |       |       |    0xff
  |       |       |       | Payload: {Code: 0.02 (POST),
  |       |       |       |           Uri-Host: "example.com",
  |       |       |       |           OSCORE: [kid:0x5f,
  |       |       |       |                    Partial IV:42],
  |       |       |       |           Proxy-Scheme: "coap",
  |       |       |       |           0xff,
  |       |       |       |           {Code: 0.01 (GET),
  |       |       |       |            Uri-Path: "alarm_status"
  |       |       |       |           }   // Encrypted with CTX_C_S
  |       |       |       |          } // Encrypted with CTX_P1_P2
  |       |       |       |
  |       |     Decrypt   |
  |       |     REQ with  |
  |       |     CTX_P1_P2 |
  |       |       |       |
  |       |     Encrypt   |
  |       |     REQ with  |
  |       |     CTX_P2_S  |
  |       |       |       |
  |       |       +------>|     Code: 0.02 (POST)
  |       |       | POST  |    Token: 0x6a
  |       |       |       | Uri-Host: "example.com",
  |       |       |       |   OSCORE: [kid:0x77, Partial IV:75]
  |       |       |       |     0xff
  |       |       |       |  Payload: {Code: 0.02 (POST),
  |       |       |       |            OSCORE: [kid:0x5f,
  |       |       |       |                     Partial IV:42],
  |       |       |       |            0xff,
  |       |       |       |            {Code: 0.01 (GET),
  |       |       |       |             Uri-Path: "alarm_status"
  |       |       |       |            }   // Encrypted with CTX_C_S
  |       |       |       |           } // Encrypted with CTX_P2_S
  |       |       |       |
  |       |       |     Decrypt
  |       |       |     REQ with
  |       |       |     CTX_P2_S
  |       |       |       |
  |       |       |     Decrypt
  |       |       |     REQ with
  |       |       |     CTX_C_S
  |       |       |       |
  |       |       |     Encrypt
  |       |       |     RESP with
  |       |       |     CTX_C_S
  |       |       |       |
  |       |       |     Encrypt
  |       |       |     RESP with
  |       |       |     CTX_P2_S
  |       |       |       |
  |       |       |<------+    Code: 2.04 (Changed)
  |       |       |  2.04 |   Token: 0x6a
  |       |       |       |  OSCORE: -
  |       |       |       |    0xff
  |       |       |       | Payload: {Code: 2.04 (Changed),
  |       |       |       |           OSCORE: -,
  |       |       |       |           0xff,
  |       |       |       |           {Code: 2.05 (Content),
  |       |       |       |            0xff,
  |       |       |       |            "0"
  |       |       |       |           }   // Encrypted with CTX_C_S
  |       |       |       |          } // Encrypted with CTX_P2_S
  |       |       |       |
  |       |     Decrypt   |
  |       |     RESP with |
  |       |     CTX_P2_S  |
  |       |       |       |
  |       |     Encrypt   |
  |       |     RESP with |
  |       |     CTX_P1_P2 |
  |       |       |       |
  |       |<------+       |    Code: 2.04 (Changed)
  |       |  2.04 |       |   Token: 0x7b
  |       |       |       |  OSCORE: -
  |       |       |       |    0xff
  |       |       |       | Payload: {Code: 2.04 (Changed),
  |       |       |       |           OSCORE: -,
  |       |       |       |           0xff,
  |       |       |       |           {Code: 2.05 (Content),
  |       |       |       |            0xff,
  |       |       |       |            "0"
  |       |       |       |           }   // Encrypted with CTX_C_S
  |       |       |       |          } // Encrypted with CTX_P1_P2
  |       |       |       |
  |     Decrypt   |       |
  |     RESP with |       |
  |     CTX_P1_P2 |       |
  |       |       |       |
  |     Encrypt   |       |
  |     RESP with |       |
  |     CTX_C_P1  |       |
  |       |       |       |
  |<------+       |       |    Code: 2.04 (Changed)
  |  2.04 |       |       |   Token: 0x8c
  |       |       |       |  OSCORE: -
  |       |       |       |    0xff
  |       |       |       | Payload: {Code: 2.04 (Changed),
  |       |       |       |           OSCORE: -,
  |       |       |       |           0xff,
  |       |       |       |           {Code: 2.05 (Content),
  |       |       |       |            0xff,
  |       |       |       |            "0"
  |       |       |       |           }   // Encrypted with CTX_C_S
  |       |       |       |          } // Encrypted with CTX_C_P1
  |       |       |       |
Decrypt   |       |       |
RESP with |       |       |
CTX_C_P1  |       |       |
  |       |       |       |
Decrypt   |       |       |
RESP with |       |       |
CTX_C_S   |       |       |
  |       |       |       |

Square brackets [ ... ] indicate content of compressed COSE object.
Curly brackets { ... } indicate encrypted data.
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="with-reverse-proxy-oscore-c-p-p-s">
        <name>With Reverse-Proxy; OSCORE: C-P, P-S</name>
        <t>In the example shown in <xref target="fig-example-reverse-proxy-without-end-to-end"/>, message exchanges are protected with OSCORE as follows.</t>
        <ul spacing="normal">
          <li>
            <t>Between the client and the proxy, using the OSCORE Security Context CTX_C_P. The client uses the OSCORE Sender ID 0x20 when using OSCORE with the proxy.</t>
          </li>
          <li>
            <t>Between the proxy and the server, using the OSCORE Security Context CTX_P_S. The proxy uses the OSCORE Sender ID 0xd4 when using OSCORE with the server.</t>
          </li>
        </ul>
        <t>In this example, the proxy is specifically a reverse-proxy. Like typically expected in such a case, the client is not aware of that and believes to communicate with an origin server.</t>
        <t>In order to determine where it has to forward an incoming request to, the proxy relies on the hostname that clients specify in the Uri-Host Option of their sent requests. In particular, upon receiving a request that includes the Uri-Host Option with value "dev.example", the proxy forwards the request to the origin server shown in the example.</t>
        <t>Furthermore, this example assumes that, in the URI identifying the target resource at the server, the host subcomponent represents the destination IP address of the request as an IP-literal. Therefore, the request from the proxy to the server does not include a Uri-Host Option (see <xref section="6.4" sectionFormat="of" target="RFC7252"/>).</t>
        <figure anchor="fig-example-reverse-proxy-without-end-to-end">
          <name>Use of OSCORE between Client-Proxy and Proxy-Server (the Proxy is a Reverse-Proxy)</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1200" width="544" viewBox="0 0 544 1200" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 24,104 L 24,1072" fill="none" stroke="black"/>
                <path d="M 24,1128 L 24,1136" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,256" fill="none" stroke="black"/>
                <path d="M 88,312 L 88,320" fill="none" stroke="black"/>
                <path d="M 88,376 L 88,800" fill="none" stroke="black"/>
                <path d="M 88,856 L 88,864" fill="none" stroke="black"/>
                <path d="M 88,920 L 88,1136" fill="none" stroke="black"/>
                <path d="M 152,48 L 152,528" fill="none" stroke="black"/>
                <path d="M 152,584 L 152,592" fill="none" stroke="black"/>
                <path d="M 152,648 L 152,1136" fill="none" stroke="black"/>
                <path d="M 24,128 L 80,128" fill="none" stroke="black"/>
                <path d="M 88,400 L 144,400" fill="none" stroke="black"/>
                <path d="M 96,672 L 152,672" fill="none" stroke="black"/>
                <path d="M 32,944 L 88,944" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="152,400 140,394.4 140,405.6" fill="black" transform="rotate(0,144,400)"/>
                <polygon class="arrowhead" points="104,672 92,666.4 92,677.6" fill="black" transform="rotate(180,96,672)"/>
                <polygon class="arrowhead" points="88,128 76,122.4 76,133.6" fill="black" transform="rotate(0,80,128)"/>
                <polygon class="arrowhead" points="40,944 28,938.4 28,949.6" fill="black" transform="rotate(180,32,944)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="88" y="36">Proxy</text>
                  <text x="148" y="36">Server</text>
                  <text x="24" y="52">|</text>
                  <text x="32" y="68">Encrypt</text>
                  <text x="16" y="84">REQ</text>
                  <text x="52" y="84">with</text>
                  <text x="32" y="100">CTX_C_P</text>
                  <text x="216" y="132">Code:</text>
                  <text x="260" y="132">0.02</text>
                  <text x="308" y="132">(POST)</text>
                  <text x="52" y="148">POST</text>
                  <text x="212" y="148">Token:</text>
                  <text x="260" y="148">0x8c</text>
                  <text x="200" y="164">Uri-Host:</text>
                  <text x="296" y="164">"dev.example"</text>
                  <text x="208" y="180">OSCORE:</text>
                  <text x="284" y="180">[kid:0x20,</text>
                  <text x="360" y="180">Partial</text>
                  <text x="420" y="180">IV:31]</text>
                  <text x="212" y="196">0xff</text>
                  <text x="204" y="212">Payload:</text>
                  <text x="268" y="212">{Code:</text>
                  <text x="316" y="212">0.01</text>
                  <text x="364" y="212">(GET),</text>
                  <text x="288" y="228">Uri-Path:</text>
                  <text x="388" y="228">"alarm_status"</text>
                  <text x="248" y="244">}</text>
                  <text x="268" y="244">//</text>
                  <text x="320" y="244">Encrypted</text>
                  <text x="380" y="244">with</text>
                  <text x="432" y="244">CTX_C_P</text>
                  <text x="96" y="276">Decrypt</text>
                  <text x="80" y="292">REQ</text>
                  <text x="116" y="292">with</text>
                  <text x="96" y="308">CTX_C_P</text>
                  <text x="96" y="340">Encrypt</text>
                  <text x="80" y="356">REQ</text>
                  <text x="116" y="356">with</text>
                  <text x="96" y="372">CTX_P_S</text>
                  <text x="216" y="404">Code:</text>
                  <text x="260" y="404">0.02</text>
                  <text x="308" y="404">(POST)</text>
                  <text x="116" y="420">POST</text>
                  <text x="212" y="420">Token:</text>
                  <text x="260" y="420">0x7b</text>
                  <text x="208" y="436">OSCORE:</text>
                  <text x="284" y="436">[kid:0xd4,</text>
                  <text x="360" y="436">Partial</text>
                  <text x="420" y="436">IV:42]</text>
                  <text x="212" y="452">0xff</text>
                  <text x="204" y="468">Payload:</text>
                  <text x="248" y="468">{</text>
                  <text x="272" y="484">Code:</text>
                  <text x="316" y="484">0.01</text>
                  <text x="364" y="484">(GET),</text>
                  <text x="288" y="500">Uri-Path:</text>
                  <text x="388" y="500">"alarm_status"</text>
                  <text x="248" y="516">}</text>
                  <text x="268" y="516">//</text>
                  <text x="320" y="516">Encrypted</text>
                  <text x="380" y="516">with</text>
                  <text x="432" y="516">CTX_P_S</text>
                  <text x="160" y="548">Decrypt</text>
                  <text x="144" y="564">REQ</text>
                  <text x="180" y="564">with</text>
                  <text x="160" y="580">CTX_P_S</text>
                  <text x="160" y="612">Encrypt</text>
                  <text x="148" y="628">RESP</text>
                  <text x="188" y="628">with</text>
                  <text x="160" y="644">CTX_P_S</text>
                  <text x="216" y="676">Code:</text>
                  <text x="260" y="676">2.04</text>
                  <text x="320" y="676">(Changed)</text>
                  <text x="124" y="692">2.04</text>
                  <text x="212" y="692">Token:</text>
                  <text x="260" y="692">0x7b</text>
                  <text x="208" y="708">OSCORE:</text>
                  <text x="248" y="708">-</text>
                  <text x="212" y="724">0xff</text>
                  <text x="204" y="740">Payload:</text>
                  <text x="268" y="740">{Code:</text>
                  <text x="316" y="740">2.05</text>
                  <text x="380" y="740">(Content),</text>
                  <text x="272" y="756">0xff,</text>
                  <text x="264" y="772">"0"</text>
                  <text x="248" y="788">}</text>
                  <text x="268" y="788">//</text>
                  <text x="320" y="788">Encrypted</text>
                  <text x="380" y="788">with</text>
                  <text x="432" y="788">CTX_P_S</text>
                  <text x="96" y="820">Decrypt</text>
                  <text x="84" y="836">RESP</text>
                  <text x="124" y="836">with</text>
                  <text x="96" y="852">CTX_P_S</text>
                  <text x="96" y="884">Encrypt</text>
                  <text x="84" y="900">RESP</text>
                  <text x="124" y="900">with</text>
                  <text x="96" y="916">CTX_C_P</text>
                  <text x="216" y="948">Code:</text>
                  <text x="260" y="948">2.04</text>
                  <text x="320" y="948">(Changed)</text>
                  <text x="60" y="964">2.04</text>
                  <text x="212" y="964">Token:</text>
                  <text x="260" y="964">0x8c</text>
                  <text x="208" y="980">OSCORE:</text>
                  <text x="248" y="980">-</text>
                  <text x="212" y="996">0xff</text>
                  <text x="204" y="1012">Payload:</text>
                  <text x="268" y="1012">{Code:</text>
                  <text x="316" y="1012">2.05</text>
                  <text x="380" y="1012">(Content),</text>
                  <text x="272" y="1028">0xff,</text>
                  <text x="264" y="1044">"0"</text>
                  <text x="248" y="1060">}</text>
                  <text x="268" y="1060">//</text>
                  <text x="320" y="1060">Encrypted</text>
                  <text x="380" y="1060">with</text>
                  <text x="432" y="1060">CTX_C_P</text>
                  <text x="32" y="1092">Decrypt</text>
                  <text x="20" y="1108">RESP</text>
                  <text x="60" y="1108">with</text>
                  <text x="32" y="1124">CTX_C_P</text>
                  <text x="28" y="1172">Square</text>
                  <text x="92" y="1172">brackets</text>
                  <text x="136" y="1172">[</text>
                  <text x="160" y="1172">...</text>
                  <text x="184" y="1172">]</text>
                  <text x="228" y="1172">indicate</text>
                  <text x="296" y="1172">content</text>
                  <text x="340" y="1172">of</text>
                  <text x="396" y="1172">compressed</text>
                  <text x="460" y="1172">COSE</text>
                  <text x="512" y="1172">object.</text>
                  <text x="24" y="1188">Curly</text>
                  <text x="84" y="1188">brackets</text>
                  <text x="128" y="1188">{</text>
                  <text x="152" y="1188">...</text>
                  <text x="176" y="1188">}</text>
                  <text x="220" y="1188">indicate</text>
                  <text x="296" y="1188">encrypted</text>
                  <text x="360" y="1188">data.</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
Client  Proxy  Server
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_P   |       |
  |       |       |
  +------>|       |     Code: 0.02 (POST)
  | POST  |       |    Token: 0x8c
  |       |       | Uri-Host: "dev.example"
  |       |       |   OSCORE: [kid:0x20, Partial IV:31]
  |       |       |     0xff
  |       |       |  Payload: {Code: 0.01 (GET),
  |       |       |            Uri-Path: "alarm_status"
  |       |       |           } // Encrypted with CTX_C_P
  |       |       |
  |     Decrypt   |
  |     REQ with  |
  |     CTX_C_P   |
  |       |       |
  |     Encrypt   |
  |     REQ with  |
  |     CTX_P_S   |
  |       |       |
  |       +------>|     Code: 0.02 (POST)
  |       | POST  |    Token: 0x7b
  |       |       |   OSCORE: [kid:0xd4, Partial IV:42]
  |       |       |     0xff
  |       |       |  Payload: {
  |       |       |            Code: 0.01 (GET),
  |       |       |            Uri-Path: "alarm_status"
  |       |       |           } // Encrypted with CTX_P_S
  |       |       |
  |       |     Decrypt
  |       |     REQ with
  |       |     CTX_P_S
  |       |       |
  |       |     Encrypt
  |       |     RESP with
  |       |     CTX_P_S
  |       |       |
  |       |<------+     Code: 2.04 (Changed)
  |       |  2.04 |    Token: 0x7b
  |       |       |   OSCORE: -
  |       |       |     0xff
  |       |       |  Payload: {Code: 2.05 (Content),
  |       |       |            0xff,
  |       |       |            "0"
  |       |       |           } // Encrypted with CTX_P_S
  |       |       |
  |     Decrypt   |
  |     RESP with |
  |     CTX_P_S   |
  |       |       |
  |     Encrypt   |
  |     RESP with |
  |     CTX_C_P   |
  |       |       |
  |<------+       |     Code: 2.04 (Changed)
  |  2.04 |       |    Token: 0x8c
  |       |       |   OSCORE: -
  |       |       |     0xff
  |       |       |  Payload: {Code: 2.05 (Content),
  |       |       |            0xff,
  |       |       |            "0"
  |       |       |           } // Encrypted with CTX_C_P
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_P   |       |
  |       |       |

Square brackets [ ... ] indicate content of compressed COSE object.
Curly brackets { ... } indicate encrypted data.
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="with-reverse-proxy-oscore-c-s-c-p-p-s">
        <name>With Reverse-Proxy; OSCORE: C-S, C-P, P-S</name>
        <t>In the example shown in <xref target="fig-example-reverse-proxy-with-end-to-end"/>, message exchanges are protected with OSCORE as follows.</t>
        <ul spacing="normal">
          <li>
            <t>End-to-end between the client and the server, using the OSCORE Security Context CTX_C_S. The client uses the OSCORE Sender ID 0x5f when using OSCORE with the server.</t>
          </li>
          <li>
            <t>Between the client and the proxy, using the OSCORE Security Context CTX_C_P. The client uses the OSCORE Sender ID 0x20 when using OSCORE with the proxy.</t>
          </li>
          <li>
            <t>Between the proxy and the server, using the OSCORE Security Context CTX_P_S. The proxy uses the OSCORE Sender ID 0xd4 when using OSCORE with the server.</t>
          </li>
        </ul>
        <t>In this example, the proxy is specifically a reverse-proxy. However, unlike typically expected, the client is aware to communicate with a reverse-proxy. This is the case, e.g., in the LwM2M scenario considered in <xref target="ssec-uc4"/>, where the LwM2M Server acts as a CoAP client and uses a LwM2M Gateway acting as a CoAP-to-CoAP reverse-proxy in order to reach an end IoT device.</t>
        <t>In order to determine where it has to forward an incoming request to, the proxy relies on the URI path components that are specified as value of the Uri-Path Options included in the request. In particular, the proxy relies on the first URI path segment to identify the specific IoT device to which the request has to be forwarded, while the remaining URI path segments specify the target resource at that IoT device.</t>
        <t>However, as shown in the example, the URI path segments that specify the target resource are hidden from the proxy, since they are protected by the additional use of OSCORE end-to-end between the client and the server.</t>
        <t>Furthermore, this example assumes that, in the URIs identifying the target resource at the proxy as well as in the URI identifying the target resource at the server, the host subcomponent represents the destination IP address of the request as an IP-literal. Therefore, both the request from the client to the proxy and the request from the proxy to the server do not include a Uri-Host Option (see <xref section="6.4" sectionFormat="of" target="RFC7252"/>).</t>
        <figure anchor="fig-example-reverse-proxy-with-end-to-end">
          <name>Use of OSCORE between Client-Proxy and Proxy-Server (the Proxy is a Reverse-Proxy)</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1696" width="544" viewBox="0 0 544 1696" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 24,104 L 24,112" fill="none" stroke="black"/>
                <path d="M 24,168 L 24,1504" fill="none" stroke="black"/>
                <path d="M 24,1560 L 24,1568" fill="none" stroke="black"/>
                <path d="M 24,1624 L 24,1632" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,384" fill="none" stroke="black"/>
                <path d="M 88,440 L 88,448" fill="none" stroke="black"/>
                <path d="M 88,504 L 88,1168" fill="none" stroke="black"/>
                <path d="M 88,1224 L 88,1232" fill="none" stroke="black"/>
                <path d="M 88,1288 L 88,1632" fill="none" stroke="black"/>
                <path d="M 152,48 L 152,704" fill="none" stroke="black"/>
                <path d="M 152,760 L 152,768" fill="none" stroke="black"/>
                <path d="M 152,824 L 152,832" fill="none" stroke="black"/>
                <path d="M 152,888 L 152,896" fill="none" stroke="black"/>
                <path d="M 152,952 L 152,1632" fill="none" stroke="black"/>
                <path d="M 24,192 L 80,192" fill="none" stroke="black"/>
                <path d="M 88,528 L 144,528" fill="none" stroke="black"/>
                <path d="M 96,976 L 152,976" fill="none" stroke="black"/>
                <path d="M 32,1312 L 88,1312" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="152,528 140,522.4 140,533.6" fill="black" transform="rotate(0,144,528)"/>
                <polygon class="arrowhead" points="104,976 92,970.4 92,981.6" fill="black" transform="rotate(180,96,976)"/>
                <polygon class="arrowhead" points="88,192 76,186.4 76,197.6" fill="black" transform="rotate(0,80,192)"/>
                <polygon class="arrowhead" points="40,1312 28,1306.4 28,1317.6" fill="black" transform="rotate(180,32,1312)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="88" y="36">Proxy</text>
                  <text x="148" y="36">Server</text>
                  <text x="24" y="52">|</text>
                  <text x="32" y="68">Encrypt</text>
                  <text x="16" y="84">REQ</text>
                  <text x="52" y="84">with</text>
                  <text x="32" y="100">CTX_C_S</text>
                  <text x="32" y="132">Encrypt</text>
                  <text x="16" y="148">REQ</text>
                  <text x="52" y="148">with</text>
                  <text x="32" y="164">CTX_C_P</text>
                  <text x="208" y="196">Code:</text>
                  <text x="252" y="196">0.02</text>
                  <text x="300" y="196">(POST)</text>
                  <text x="52" y="212">POST</text>
                  <text x="204" y="212">Token:</text>
                  <text x="252" y="212">0x8c</text>
                  <text x="200" y="228">OSCORE:</text>
                  <text x="276" y="228">[kid:0x20,</text>
                  <text x="352" y="228">Partial</text>
                  <text x="412" y="228">IV:31]</text>
                  <text x="204" y="244">0xff</text>
                  <text x="196" y="260">Payload:</text>
                  <text x="260" y="260">{Code:</text>
                  <text x="308" y="260">0.02</text>
                  <text x="360" y="260">(POST),</text>
                  <text x="272" y="276">OSCORE:</text>
                  <text x="348" y="276">[kid:0x5f,</text>
                  <text x="424" y="276">Partial</text>
                  <text x="488" y="276">IV:42],</text>
                  <text x="280" y="292">Uri-Path:</text>
                  <text x="352" y="292">"dev1",</text>
                  <text x="264" y="308">0xff,</text>
                  <text x="268" y="324">{Code:</text>
                  <text x="316" y="324">0.01</text>
                  <text x="364" y="324">(GET),</text>
                  <text x="288" y="340">Uri-Path:</text>
                  <text x="388" y="340">"alarm_status"</text>
                  <text x="248" y="356">}</text>
                  <text x="284" y="356">//</text>
                  <text x="336" y="356">Encrypted</text>
                  <text x="396" y="356">with</text>
                  <text x="448" y="356">CTX_C_S</text>
                  <text x="240" y="372">}</text>
                  <text x="260" y="372">//</text>
                  <text x="312" y="372">Encrypted</text>
                  <text x="372" y="372">with</text>
                  <text x="424" y="372">CTX_C_P</text>
                  <text x="96" y="404">Decrypt</text>
                  <text x="80" y="420">REQ</text>
                  <text x="116" y="420">with</text>
                  <text x="96" y="436">CTX_C_P</text>
                  <text x="96" y="468">Encrypt</text>
                  <text x="80" y="484">REQ</text>
                  <text x="116" y="484">with</text>
                  <text x="96" y="500">CTX_P_S</text>
                  <text x="208" y="532">Code:</text>
                  <text x="252" y="532">0.02</text>
                  <text x="300" y="532">(POST)</text>
                  <text x="116" y="548">POST</text>
                  <text x="204" y="548">Token:</text>
                  <text x="252" y="548">0x7b</text>
                  <text x="200" y="564">OSCORE:</text>
                  <text x="276" y="564">[kid:0xd4,</text>
                  <text x="352" y="564">Partial</text>
                  <text x="412" y="564">IV:53]</text>
                  <text x="204" y="580">0xff</text>
                  <text x="196" y="596">Payload:</text>
                  <text x="260" y="596">{Code:</text>
                  <text x="308" y="596">0.02</text>
                  <text x="360" y="596">(POST),</text>
                  <text x="272" y="612">OSCORE:</text>
                  <text x="348" y="612">[kid:0x5f,</text>
                  <text x="424" y="612">Partial</text>
                  <text x="488" y="612">IV:42],</text>
                  <text x="264" y="628">0xff,</text>
                  <text x="268" y="644">{Code:</text>
                  <text x="316" y="644">0.01</text>
                  <text x="364" y="644">(GET),</text>
                  <text x="288" y="660">Uri-Path:</text>
                  <text x="388" y="660">"alarm_status"</text>
                  <text x="248" y="676">}</text>
                  <text x="284" y="676">//</text>
                  <text x="336" y="676">Encrypted</text>
                  <text x="396" y="676">with</text>
                  <text x="448" y="676">CTX_C_S</text>
                  <text x="240" y="692">}</text>
                  <text x="260" y="692">//</text>
                  <text x="312" y="692">Encrypted</text>
                  <text x="372" y="692">with</text>
                  <text x="424" y="692">CTX_P_S</text>
                  <text x="160" y="724">Decrypt</text>
                  <text x="144" y="740">REQ</text>
                  <text x="180" y="740">with</text>
                  <text x="160" y="756">CTX_P_S</text>
                  <text x="160" y="788">Decrypt</text>
                  <text x="144" y="804">REQ</text>
                  <text x="180" y="804">with</text>
                  <text x="160" y="820">CTX_C_S</text>
                  <text x="160" y="852">Encrypt</text>
                  <text x="148" y="868">RESP</text>
                  <text x="188" y="868">with</text>
                  <text x="160" y="884">CTX_C_S</text>
                  <text x="160" y="916">Encrypt</text>
                  <text x="148" y="932">RESP</text>
                  <text x="188" y="932">with</text>
                  <text x="160" y="948">CTX_P_S</text>
                  <text x="208" y="980">Code:</text>
                  <text x="252" y="980">2.04</text>
                  <text x="312" y="980">(Changed)</text>
                  <text x="124" y="996">2.04</text>
                  <text x="204" y="996">Token:</text>
                  <text x="252" y="996">0x7b</text>
                  <text x="200" y="1012">OSCORE:</text>
                  <text x="240" y="1012">-</text>
                  <text x="204" y="1028">0xff</text>
                  <text x="196" y="1044">Payload:</text>
                  <text x="260" y="1044">{Code:</text>
                  <text x="308" y="1044">2.04</text>
                  <text x="372" y="1044">(Changed),</text>
                  <text x="272" y="1060">OSCORE:</text>
                  <text x="316" y="1060">-,</text>
                  <text x="264" y="1076">0xff,</text>
                  <text x="268" y="1092">{Code:</text>
                  <text x="316" y="1092">2.05</text>
                  <text x="380" y="1092">(Content),</text>
                  <text x="272" y="1108">0xff,</text>
                  <text x="264" y="1124">"0"</text>
                  <text x="248" y="1140">}</text>
                  <text x="284" y="1140">//</text>
                  <text x="336" y="1140">Encrypted</text>
                  <text x="396" y="1140">with</text>
                  <text x="448" y="1140">CTX_C_S</text>
                  <text x="240" y="1156">}</text>
                  <text x="260" y="1156">//</text>
                  <text x="312" y="1156">Encrypted</text>
                  <text x="372" y="1156">with</text>
                  <text x="424" y="1156">CTX_P_S</text>
                  <text x="96" y="1188">Decrypt</text>
                  <text x="84" y="1204">RESP</text>
                  <text x="124" y="1204">with</text>
                  <text x="96" y="1220">CTX_P_S</text>
                  <text x="96" y="1252">Encrypt</text>
                  <text x="84" y="1268">RESP</text>
                  <text x="124" y="1268">with</text>
                  <text x="96" y="1284">CTX_C_P</text>
                  <text x="208" y="1316">Code:</text>
                  <text x="252" y="1316">2.04</text>
                  <text x="312" y="1316">(Changed)</text>
                  <text x="60" y="1332">2.04</text>
                  <text x="204" y="1332">Token:</text>
                  <text x="252" y="1332">0x8c</text>
                  <text x="200" y="1348">OSCORE:</text>
                  <text x="240" y="1348">-</text>
                  <text x="204" y="1364">0xff</text>
                  <text x="196" y="1380">Payload:</text>
                  <text x="260" y="1380">{Code:</text>
                  <text x="308" y="1380">2.04</text>
                  <text x="372" y="1380">(Changed),</text>
                  <text x="272" y="1396">OSCORE:</text>
                  <text x="316" y="1396">-,</text>
                  <text x="264" y="1412">0xff,</text>
                  <text x="268" y="1428">{Code:</text>
                  <text x="316" y="1428">2.05</text>
                  <text x="380" y="1428">(Content),</text>
                  <text x="272" y="1444">0xff,</text>
                  <text x="264" y="1460">"0"</text>
                  <text x="248" y="1476">}</text>
                  <text x="284" y="1476">//</text>
                  <text x="336" y="1476">Encrypted</text>
                  <text x="396" y="1476">with</text>
                  <text x="448" y="1476">CTX_C_S</text>
                  <text x="240" y="1492">}</text>
                  <text x="260" y="1492">//</text>
                  <text x="312" y="1492">Encrypted</text>
                  <text x="372" y="1492">with</text>
                  <text x="424" y="1492">CTX_C_P</text>
                  <text x="32" y="1524">Decrypt</text>
                  <text x="20" y="1540">RESP</text>
                  <text x="60" y="1540">with</text>
                  <text x="32" y="1556">CTX_C_P</text>
                  <text x="32" y="1588">Decrypt</text>
                  <text x="20" y="1604">RESP</text>
                  <text x="60" y="1604">with</text>
                  <text x="32" y="1620">CTX_C_S</text>
                  <text x="28" y="1668">Square</text>
                  <text x="92" y="1668">brackets</text>
                  <text x="136" y="1668">[</text>
                  <text x="160" y="1668">...</text>
                  <text x="184" y="1668">]</text>
                  <text x="228" y="1668">indicate</text>
                  <text x="296" y="1668">content</text>
                  <text x="340" y="1668">of</text>
                  <text x="396" y="1668">compressed</text>
                  <text x="460" y="1668">COSE</text>
                  <text x="512" y="1668">object.</text>
                  <text x="24" y="1684">Curly</text>
                  <text x="84" y="1684">brackets</text>
                  <text x="128" y="1684">{</text>
                  <text x="152" y="1684">...</text>
                  <text x="176" y="1684">}</text>
                  <text x="220" y="1684">indicate</text>
                  <text x="296" y="1684">encrypted</text>
                  <text x="360" y="1684">data.</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
Client  Proxy  Server
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_S   |       |
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_P   |       |
  |       |       |
  +------>|       |    Code: 0.02 (POST)
  | POST  |       |   Token: 0x8c
  |       |       |  OSCORE: [kid:0x20, Partial IV:31]
  |       |       |    0xff
  |       |       | Payload: {Code: 0.02 (POST),
  |       |       |           OSCORE: [kid:0x5f, Partial IV:42],
  |       |       |           Uri-Path: "dev1",
  |       |       |           0xff,
  |       |       |           {Code: 0.01 (GET),
  |       |       |            Uri-Path: "alarm_status"
  |       |       |           }   // Encrypted with CTX_C_S
  |       |       |          } // Encrypted with CTX_C_P
  |       |       |
  |     Decrypt   |
  |     REQ with  |
  |     CTX_C_P   |
  |       |       |
  |     Encrypt   |
  |     REQ with  |
  |     CTX_P_S   |
  |       |       |
  |       +------>|    Code: 0.02 (POST)
  |       | POST  |   Token: 0x7b
  |       |       |  OSCORE: [kid:0xd4, Partial IV:53]
  |       |       |    0xff
  |       |       | Payload: {Code: 0.02 (POST),
  |       |       |           OSCORE: [kid:0x5f, Partial IV:42],
  |       |       |           0xff,
  |       |       |           {Code: 0.01 (GET),
  |       |       |            Uri-Path: "alarm_status"
  |       |       |           }   // Encrypted with CTX_C_S
  |       |       |          } // Encrypted with CTX_P_S
  |       |       |
  |       |     Decrypt
  |       |     REQ with
  |       |     CTX_P_S
  |       |       |
  |       |     Decrypt
  |       |     REQ with
  |       |     CTX_C_S
  |       |       |
  |       |     Encrypt
  |       |     RESP with
  |       |     CTX_C_S
  |       |       |
  |       |     Encrypt
  |       |     RESP with
  |       |     CTX_P_S
  |       |       |
  |       |<------+    Code: 2.04 (Changed)
  |       |  2.04 |   Token: 0x7b
  |       |       |  OSCORE: -
  |       |       |    0xff
  |       |       | Payload: {Code: 2.04 (Changed),
  |       |       |           OSCORE: -,
  |       |       |           0xff,
  |       |       |           {Code: 2.05 (Content),
  |       |       |            0xff,
  |       |       |            "0"
  |       |       |           }   // Encrypted with CTX_C_S
  |       |       |          } // Encrypted with CTX_P_S
  |       |       |
  |     Decrypt   |
  |     RESP with |
  |     CTX_P_S   |
  |       |       |
  |     Encrypt   |
  |     RESP with |
  |     CTX_C_P   |
  |       |       |
  |<------+       |    Code: 2.04 (Changed)
  |  2.04 |       |   Token: 0x8c
  |       |       |  OSCORE: -
  |       |       |    0xff
  |       |       | Payload: {Code: 2.04 (Changed),
  |       |       |           OSCORE: -,
  |       |       |           0xff,
  |       |       |           {Code: 2.05 (Content),
  |       |       |            0xff,
  |       |       |            "0"
  |       |       |           }   // Encrypted with CTX_C_S
  |       |       |          } // Encrypted with CTX_C_P
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_P   |       |
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_S   |       |
  |       |       |

Square brackets [ ... ] indicate content of compressed COSE object.
Curly brackets { ... } indicate encrypted data.
]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="sec-option-protection-diag">
      <name>State Diagram: Protection of CoAP Options</name>
      <t><xref target="fig-option-protection-diagram"/> overviews the rules defined in <xref target="general-rules"/>, which are used to determine whether a CoAP option that is originally specified only as an outer option (Class U or I) for OSCORE has to be processed as Class E, when protecting an outgoing message.</t>
      <figure anchor="fig-option-protection-diagram">
        <name>Protection of CoAP Options Originally Specified only as Outer Options (Class U or I) for OSCORE</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1200" width="576" viewBox="0 0 576 1200" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,160 L 8,272" fill="none" stroke="black"/>
              <path d="M 8,336 L 8,384" fill="none" stroke="black"/>
              <path d="M 24,512 L 24,688" fill="none" stroke="black"/>
              <path d="M 40,280 L 40,328" fill="none" stroke="black"/>
              <path d="M 40,392 L 40,432" fill="none" stroke="black"/>
              <path d="M 40,464 L 40,504" fill="none" stroke="black"/>
              <path d="M 40,736 L 40,1168" fill="none" stroke="black"/>
              <path d="M 64,1072 L 64,1104" fill="none" stroke="black"/>
              <path d="M 80,816 L 80,848" fill="none" stroke="black"/>
              <path d="M 80,880 L 80,1064" fill="none" stroke="black"/>
              <path d="M 104,336 L 104,384" fill="none" stroke="black"/>
              <path d="M 112,928 L 112,976" fill="none" stroke="black"/>
              <path d="M 112,1152 L 112,1184" fill="none" stroke="black"/>
              <path d="M 120,784 L 120,832" fill="none" stroke="black"/>
              <path d="M 184,336 L 184,400" fill="none" stroke="black"/>
              <path d="M 224,408 L 224,432" fill="none" stroke="black"/>
              <path d="M 224,464 L 224,504" fill="none" stroke="black"/>
              <path d="M 224,736 L 224,776" fill="none" stroke="black"/>
              <path d="M 224,1024 L 224,1064" fill="none" stroke="black"/>
              <path d="M 240,512 L 240,688" fill="none" stroke="black"/>
              <path d="M 264,1072 L 264,1104" fill="none" stroke="black"/>
              <path d="M 320,512 L 320,592" fill="none" stroke="black"/>
              <path d="M 336,336 L 336,400" fill="none" stroke="black"/>
              <path d="M 336,640 L 336,776" fill="none" stroke="black"/>
              <path d="M 336,880 L 336,920" fill="none" stroke="black"/>
              <path d="M 336,1024 L 336,1144" fill="none" stroke="black"/>
              <path d="M 352,784 L 352,832" fill="none" stroke="black"/>
              <path d="M 416,336 L 416,416" fill="none" stroke="black"/>
              <path d="M 440,928 L 440,976" fill="none" stroke="black"/>
              <path d="M 480,464 L 480,504" fill="none" stroke="black"/>
              <path d="M 480,640 L 480,1144" fill="none" stroke="black"/>
              <path d="M 496,512 L 496,592" fill="none" stroke="black"/>
              <path d="M 496,1152 L 496,1184" fill="none" stroke="black"/>
              <path d="M 552,464 L 552,1168" fill="none" stroke="black"/>
              <path d="M 568,160 L 568,272" fill="none" stroke="black"/>
              <path d="M 568,336 L 568,416" fill="none" stroke="black"/>
              <path d="M 8,160 L 88,160" fill="none" stroke="black"/>
              <path d="M 104,160 L 568,160" fill="none" stroke="black"/>
              <path d="M 8,272 L 568,272" fill="none" stroke="black"/>
              <path d="M 8,336 L 104,336" fill="none" stroke="black"/>
              <path d="M 184,336 L 336,336" fill="none" stroke="black"/>
              <path d="M 416,336 L 568,336" fill="none" stroke="black"/>
              <path d="M 112,352 L 128,352" fill="none" stroke="black"/>
              <path d="M 160,352 L 176,352" fill="none" stroke="black"/>
              <path d="M 344,352 L 360,352" fill="none" stroke="black"/>
              <path d="M 392,352 L 408,352" fill="none" stroke="black"/>
              <path d="M 8,384 L 104,384" fill="none" stroke="black"/>
              <path d="M 184,400 L 336,400" fill="none" stroke="black"/>
              <path d="M 416,416 L 568,416" fill="none" stroke="black"/>
              <path d="M 24,512 L 240,512" fill="none" stroke="black"/>
              <path d="M 320,512 L 496,512" fill="none" stroke="black"/>
              <path d="M 320,592 L 496,592" fill="none" stroke="black"/>
              <path d="M 24,688 L 240,688" fill="none" stroke="black"/>
              <path d="M 120,784 L 352,784" fill="none" stroke="black"/>
              <path d="M 80,816 L 112,816" fill="none" stroke="black"/>
              <path d="M 120,832 L 352,832" fill="none" stroke="black"/>
              <path d="M 112,928 L 440,928" fill="none" stroke="black"/>
              <path d="M 112,976 L 440,976" fill="none" stroke="black"/>
              <path d="M 64,1072 L 264,1072" fill="none" stroke="black"/>
              <path d="M 64,1104 L 264,1104" fill="none" stroke="black"/>
              <path d="M 112,1152 L 496,1152" fill="none" stroke="black"/>
              <path d="M 40,1168 L 104,1168" fill="none" stroke="black"/>
              <path d="M 504,1168 L 552,1168" fill="none" stroke="black"/>
              <path d="M 112,1184 L 496,1184" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="512,1168 500,1162.4 500,1173.6" fill="black" transform="rotate(180,504,1168)"/>
              <polygon class="arrowhead" points="488,1144 476,1138.4 476,1149.6" fill="black" transform="rotate(90,480,1144)"/>
              <polygon class="arrowhead" points="488,504 476,498.4 476,509.6" fill="black" transform="rotate(90,480,504)"/>
              <polygon class="arrowhead" points="416,352 404,346.4 404,357.6" fill="black" transform="rotate(0,408,352)"/>
              <polygon class="arrowhead" points="344,1144 332,1138.4 332,1149.6" fill="black" transform="rotate(90,336,1144)"/>
              <polygon class="arrowhead" points="344,920 332,914.4 332,925.6" fill="black" transform="rotate(90,336,920)"/>
              <polygon class="arrowhead" points="344,776 332,770.4 332,781.6" fill="black" transform="rotate(90,336,776)"/>
              <polygon class="arrowhead" points="232,1064 220,1058.4 220,1069.6" fill="black" transform="rotate(90,224,1064)"/>
              <polygon class="arrowhead" points="232,776 220,770.4 220,781.6" fill="black" transform="rotate(90,224,776)"/>
              <polygon class="arrowhead" points="232,504 220,498.4 220,509.6" fill="black" transform="rotate(90,224,504)"/>
              <polygon class="arrowhead" points="184,352 172,346.4 172,357.6" fill="black" transform="rotate(0,176,352)"/>
              <polygon class="arrowhead" points="112,1168 100,1162.4 100,1173.6" fill="black" transform="rotate(0,104,1168)"/>
              <polygon class="arrowhead" points="88,1064 76,1058.4 76,1069.6" fill="black" transform="rotate(90,80,1064)"/>
              <polygon class="arrowhead" points="48,504 36,498.4 36,509.6" fill="black" transform="rotate(90,40,504)"/>
              <polygon class="arrowhead" points="48,328 36,322.4 36,333.6" fill="black" transform="rotate(90,40,328)"/>
              <circle cx="40" cy="528" r="6" class="closeddot" fill="black"/>
              <circle cx="40" cy="608" r="6" class="closeddot" fill="black"/>
              <circle cx="96" cy="96" r="6" class="opendot" fill="white" stroke="black"/>
              <circle cx="96" cy="112" r="6" class="opendot" fill="white" stroke="black"/>
              <circle cx="96" cy="128" r="6" class="opendot" fill="white" stroke="black"/>
              <circle cx="96" cy="144" r="6" class="opendot" fill="white" stroke="black"/>
              <circle cx="96" cy="160" r="6" class="opendot" fill="white" stroke="black"/>
              <g class="text">
                <text x="108" y="36">..........................</text>
                <text x="8" y="52">:</text>
                <text x="208" y="52">:</text>
                <text x="8" y="68">:</text>
                <text x="44" y="68">Source</text>
                <text x="100" y="68">OSCORE</text>
                <text x="164" y="68">endpoint</text>
                <text x="208" y="68">:</text>
                <text x="8" y="84">:</text>
                <text x="208" y="84">:</text>
                <text x="48" y="100">:..........</text>
                <text x="156" y="100">.............:</text>
                <text x="24" y="196">I</text>
                <text x="52" y="196">must</text>
                <text x="104" y="196">protect</text>
                <text x="148" y="196">an</text>
                <text x="196" y="196">outgoing</text>
                <text x="264" y="196">message</text>
                <text x="304" y="196">M</text>
                <text x="328" y="196">for</text>
                <text x="376" y="196">another</text>
                <text x="436" y="196">OSCORE</text>
                <text x="500" y="196">endpoint</text>
                <text x="548" y="196">X.</text>
                <text x="24" y="228">M</text>
                <text x="68" y="228">includes</text>
                <text x="112" y="228">a</text>
                <text x="140" y="228">CoAP</text>
                <text x="188" y="228">option</text>
                <text x="232" y="228">OPT</text>
                <text x="268" y="228">that</text>
                <text x="300" y="228">is</text>
                <text x="356" y="228">originally</text>
                <text x="440" y="228">specified</text>
                <text x="500" y="228">only</text>
                <text x="532" y="228">as</text>
                <text x="28" y="244">an</text>
                <text x="64" y="244">outer</text>
                <text x="116" y="244">option</text>
                <text x="172" y="244">(Class</text>
                <text x="208" y="244">U</text>
                <text x="228" y="244">or</text>
                <text x="252" y="244">I)</text>
                <text x="280" y="244">for</text>
                <text x="328" y="244">OSCORE.</text>
                <text x="32" y="356">Did</text>
                <text x="56" y="356">I</text>
                <text x="80" y="356">add</text>
                <text x="144" y="356">YES</text>
                <text x="204" y="356">As</text>
                <text x="232" y="356">far</text>
                <text x="260" y="356">as</text>
                <text x="280" y="356">I</text>
                <text x="304" y="356">can</text>
                <text x="376" y="356">YES</text>
                <text x="436" y="356">As</text>
                <text x="464" y="356">far</text>
                <text x="492" y="356">as</text>
                <text x="512" y="356">I</text>
                <text x="536" y="356">can</text>
                <text x="32" y="372">OPT</text>
                <text x="60" y="372">to</text>
                <text x="84" y="372">M?</text>
                <text x="216" y="372">tell,</text>
                <text x="252" y="372">is</text>
                <text x="272" y="372">X</text>
                <text x="288" y="372">a</text>
                <text x="448" y="372">tell,</text>
                <text x="484" y="372">is</text>
                <text x="504" y="372">X</text>
                <text x="528" y="372">the</text>
                <text x="228" y="388">consumer</text>
                <text x="276" y="388">of</text>
                <text x="308" y="388">OPT?</text>
                <text x="472" y="388">immediately</text>
                <text x="540" y="388">next</text>
                <text x="460" y="404">consumer</text>
                <text x="508" y="404">of</text>
                <text x="540" y="404">OPT?</text>
                <text x="480" y="436">|</text>
                <text x="552" y="436">|</text>
                <text x="44" y="452">NO</text>
                <text x="228" y="452">NO</text>
                <text x="480" y="452">YES</text>
                <text x="556" y="452">NO</text>
                <text x="60" y="532">As</text>
                <text x="88" y="532">far</text>
                <text x="116" y="532">as</text>
                <text x="136" y="532">I</text>
                <text x="160" y="532">can</text>
                <text x="200" y="532">tell,</text>
                <text x="348" y="532">Does</text>
                <text x="376" y="532">X</text>
                <text x="404" y="532">need</text>
                <text x="436" y="532">to</text>
                <text x="56" y="548">X</text>
                <text x="76" y="548">is</text>
                <text x="100" y="548">my</text>
                <text x="132" y="548">next</text>
                <text x="168" y="548">hop</text>
                <text x="356" y="548">access</text>
                <text x="400" y="548">OPT</text>
                <text x="444" y="548">before</text>
                <text x="372" y="564">decrypting</text>
                <text x="424" y="564">M</text>
                <text x="444" y="564">or</text>
                <text x="468" y="564">in</text>
                <text x="44" y="580">OR</text>
                <text x="352" y="580">order</text>
                <text x="388" y="580">to</text>
                <text x="432" y="580">decrypt</text>
                <text x="476" y="580">M?</text>
                <text x="60" y="612">As</text>
                <text x="88" y="612">far</text>
                <text x="116" y="612">as</text>
                <text x="136" y="612">I</text>
                <text x="160" y="612">can</text>
                <text x="200" y="612">tell,</text>
                <text x="336" y="612">|</text>
                <text x="480" y="612">|</text>
                <text x="64" y="628">the</text>
                <text x="128" y="628">immediately</text>
                <text x="196" y="628">next</text>
                <text x="340" y="628">NO</text>
                <text x="480" y="628">YES</text>
                <text x="84" y="644">consumer</text>
                <text x="132" y="644">of</text>
                <text x="160" y="644">OPT</text>
                <text x="188" y="644">is</text>
                <text x="216" y="644">not</text>
                <text x="56" y="660">a</text>
                <text x="80" y="660">hop</text>
                <text x="108" y="660">in</text>
                <text x="152" y="660">between</text>
                <text x="76" y="676">myself</text>
                <text x="120" y="676">and</text>
                <text x="144" y="676">X</text>
                <text x="40" y="708">|</text>
                <text x="224" y="708">|</text>
                <text x="44" y="724">NO</text>
                <text x="224" y="724">YES</text>
                <text x="140" y="804">Is</text>
                <text x="168" y="804">OPT</text>
                <text x="200" y="804">the</text>
                <text x="252" y="804">Uri-Host</text>
                <text x="316" y="804">Option</text>
                <text x="140" y="820">or</text>
                <text x="168" y="820">the</text>
                <text x="220" y="820">Uri-Port</text>
                <text x="288" y="820">Option?</text>
                <text x="336" y="852">|</text>
                <text x="84" y="868">NO</text>
                <text x="336" y="868">YES</text>
                <text x="140" y="948">Does</text>
                <text x="168" y="948">M</text>
                <text x="208" y="948">include</text>
                <text x="256" y="948">the</text>
                <text x="324" y="948">Proxy-Scheme</text>
                <text x="404" y="948">Option</text>
                <text x="132" y="964">or</text>
                <text x="160" y="964">the</text>
                <text x="256" y="964">Proxy-Scheme-Number</text>
                <text x="368" y="964">Option?</text>
                <text x="224" y="996">|</text>
                <text x="336" y="996">|</text>
                <text x="224" y="1012">YES</text>
                <text x="340" y="1012">NO</text>
                <text x="104" y="1092">Process</text>
                <text x="152" y="1092">OPT</text>
                <text x="180" y="1092">as</text>
                <text x="216" y="1092">Class</text>
                <text x="248" y="1092">E</text>
                <text x="152" y="1172">Process</text>
                <text x="200" y="1172">OPT</text>
                <text x="228" y="1172">as</text>
                <text x="256" y="1172">per</text>
                <text x="288" y="1172">its</text>
                <text x="340" y="1172">original</text>
                <text x="400" y="1172">Class</text>
                <text x="432" y="1172">U</text>
                <text x="452" y="1172">or</text>
                <text x="472" y="1172">I</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
..........................
:                        :
: Source OSCORE endpoint :
:                        :
:..........o.............:
           o
           o
           o
+----------o----------------------------------------------------------+
|                                                                     |
| I must protect an outgoing message M for another OSCORE endpoint X. |
|                                                                     |
| M includes a CoAP option OPT that is originally specified only as   |
| an outer option (Class U or I) for OSCORE.                          |
|                                                                     |
+---------------------------------------------------------------------+
    |
    |
    v
+-----------+         +------------------+         +------------------+
| Did I add |---YES-->| As far as I can  |---YES-->| As far as I can  |
| OPT to M? |         | tell, is X a     |         | tell, is X the   |
+-----------+         | consumer of OPT? |         | immediately next |
    |                 +------------------+         | consumer of OPT? |
    |                      |                       +------------------+
    |                      |                               |        |
    NO                     NO                             YES       NO
    |                      |                               |        |
    |                      |                               |        |
    v                      v                               v        |
  +--------------------------+         +---------------------+      |
  | * As far as I can tell,  |         | Does X need to      |      |
  |   X is my next hop       |         | access OPT before   |      |
  |                          |         | decrypting M or in  |      |
  | OR                       |         | order to decrypt M? |      |
  |                          |         +---------------------+      |
  | * As far as I can tell,  |           |                 |        |
  |   the immediately next   |           NO               YES       |
  |   consumer of OPT is not |           |                 |        |
  |   a hop in between       |           |                 |        |
  |   myself and X           |           |                 |        |
  +--------------------------+           |                 |        |
    |                      |             |                 |        |
    NO                    YES            |                 |        |
    |                      |             |                 |        |
    |                      |             |                 |        |
    |                      v             v                 |        |
    |         +----------------------------+               |        |
    |         | Is OPT the Uri-Host Option |               |        |
    |    +----| or the Uri-Port Option?    |               |        |
    |    |    +----------------------------+               |        |
    |    |                               |                 |        |
    |    NO                             YES                |        |
    |    |                               |                 |        |
    |    |                               |                 |        |
    |    |                               v                 |        |
    |    |   +----------------------------------------+    |        |
    |    |   | Does M include the Proxy-Scheme Option |    |        |
    |    |   | or the Proxy-Scheme-Number Option?     |    |        |
    |    |   +----------------------------------------+    |        |
    |    |                 |             |                 |        |
    |    |                YES            NO                |        |
    |    |                 |             |                 |        |
    |    |                 |             |                 |        |
    |    v                 v             |                 |        |
    |  +------------------------+        |                 |        |
    |  | Process OPT as Class E |        |                 |        |
    |  +------------------------+        |                 |        |
    |                                    |                 |        |
    |                                    v                 v        |
    |        +-----------------------------------------------+      |
    +------->| Process OPT as per its original Class U or I  |<-----+
             +-----------------------------------------------+
]]></artwork>
        </artset>
      </figure>
    </section>
    <section anchor="sec-incoming-req-diag">
      <name>State Diagram: Processing of Incoming Requests</name>
      <t><xref target="fig-incoming-request-diagram"/> overviews the processing of an incoming request, which is specified in <xref target="incoming-requests"/>. The dotted boxes indicate ending states where the processing terminates.</t>
      <figure anchor="fig-incoming-request-diagram">
        <name>Processing of an Incoming Request</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1840" width="576" viewBox="0 0 576 1840" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,224 L 8,352" fill="none" stroke="black"/>
              <path d="M 8,560 L 8,784" fill="none" stroke="black"/>
              <path d="M 8,1168 L 8,1344" fill="none" stroke="black"/>
              <path d="M 8,1680 L 8,1760" fill="none" stroke="black"/>
              <path d="M 32,400 L 32,552" fill="none" stroke="black"/>
              <path d="M 32,832 L 32,1160" fill="none" stroke="black"/>
              <path d="M 32,1352 L 32,1672" fill="none" stroke="black"/>
              <path d="M 80,1520 L 80,1600" fill="none" stroke="black"/>
              <path d="M 96,1008 L 96,1072" fill="none" stroke="black"/>
              <path d="M 112,32 L 112,64" fill="none" stroke="black"/>
              <path d="M 128,112 L 128,216" fill="none" stroke="black"/>
              <path d="M 136,1440 L 136,1472" fill="none" stroke="black"/>
              <path d="M 136,1608 L 136,1632" fill="none" stroke="black"/>
              <path d="M 160,224 L 160,352" fill="none" stroke="black"/>
              <path d="M 176,272 L 176,512" fill="none" stroke="black"/>
              <path d="M 184,560 L 184,784" fill="none" stroke="black"/>
              <path d="M 192,832 L 192,896" fill="none" stroke="black"/>
              <path d="M 200,560 L 200,656" fill="none" stroke="black"/>
              <path d="M 208,1376 L 208,1440" fill="none" stroke="black"/>
              <path d="M 208,1520 L 208,1600" fill="none" stroke="black"/>
              <path d="M 216,224 L 216,288" fill="none" stroke="black"/>
              <path d="M 224,296 L 224,352" fill="none" stroke="black"/>
              <path d="M 224,384 L 224,552" fill="none" stroke="black"/>
              <path d="M 248,1168 L 248,1344" fill="none" stroke="black"/>
              <path d="M 256,160 L 256,176" fill="none" stroke="black"/>
              <path d="M 288,496 L 288,512" fill="none" stroke="black"/>
              <path d="M 288,704 L 288,824" fill="none" stroke="black"/>
              <path d="M 288,904 L 288,1000" fill="none" stroke="black"/>
              <path d="M 288,1120 L 288,1160" fill="none" stroke="black"/>
              <path d="M 288,1248 L 288,1368" fill="none" stroke="black"/>
              <path d="M 288,1448 L 288,1552" fill="none" stroke="black"/>
              <path d="M 296,224 L 296,288" fill="none" stroke="black"/>
              <path d="M 296,1680 L 296,1760" fill="none" stroke="black"/>
              <path d="M 320,560 L 320,656" fill="none" stroke="black"/>
              <path d="M 320,832 L 320,896" fill="none" stroke="black"/>
              <path d="M 336,72 L 336,960" fill="none" stroke="black"/>
              <path d="M 336,1376 L 336,1440" fill="none" stroke="black"/>
              <path d="M 344,1008 L 344,1072" fill="none" stroke="black"/>
              <path d="M 352,224 L 352,272" fill="none" stroke="black"/>
              <path d="M 368,280 L 368,1712" fill="none" stroke="black"/>
              <path d="M 392,832 L 392,880" fill="none" stroke="black"/>
              <path d="M 416,320 L 416,824" fill="none" stroke="black"/>
              <path d="M 416,928 L 416,1096" fill="none" stroke="black"/>
              <path d="M 448,112 L 448,216" fill="none" stroke="black"/>
              <path d="M 448,432 L 448,464" fill="none" stroke="black"/>
              <path d="M 448,544 L 448,576" fill="none" stroke="black"/>
              <path d="M 464,624 L 464,696" fill="none" stroke="black"/>
              <path d="M 472,320 L 472,424" fill="none" stroke="black"/>
              <path d="M 488,224 L 488,272" fill="none" stroke="black"/>
              <path d="M 488,472 L 488,536" fill="none" stroke="black"/>
              <path d="M 488,928 L 488,1000" fill="none" stroke="black"/>
              <path d="M 496,32 L 496,64" fill="none" stroke="black"/>
              <path d="M 504,584 L 504,640" fill="none" stroke="black"/>
              <path d="M 512,832 L 512,880" fill="none" stroke="black"/>
              <path d="M 528,432 L 528,464" fill="none" stroke="black"/>
              <path d="M 536,544 L 536,576" fill="none" stroke="black"/>
              <path d="M 568,48 L 568,640" fill="none" stroke="black"/>
              <path d="M 112,32 L 496,32" fill="none" stroke="black"/>
              <path d="M 80,48 L 104,48" fill="none" stroke="black"/>
              <path d="M 504,48 L 568,48" fill="none" stroke="black"/>
              <path d="M 112,64 L 496,64" fill="none" stroke="black"/>
              <path d="M 8,224 L 160,224" fill="none" stroke="black"/>
              <path d="M 216,224 L 296,224" fill="none" stroke="black"/>
              <path d="M 352,224 L 488,224" fill="none" stroke="black"/>
              <path d="M 168,240 L 208,240" fill="none" stroke="black"/>
              <path d="M 176,272 L 208,272" fill="none" stroke="black"/>
              <path d="M 352,272 L 488,272" fill="none" stroke="black"/>
              <path d="M 216,288 L 296,288" fill="none" stroke="black"/>
              <path d="M 8,352 L 160,352" fill="none" stroke="black"/>
              <path d="M 448,432 L 528,432" fill="none" stroke="black"/>
              <path d="M 448,464 L 528,464" fill="none" stroke="black"/>
              <path d="M 448,544 L 536,544" fill="none" stroke="black"/>
              <path d="M 8,560 L 184,560" fill="none" stroke="black"/>
              <path d="M 200,560 L 320,560" fill="none" stroke="black"/>
              <path d="M 448,576 L 536,576" fill="none" stroke="black"/>
              <path d="M 504,640 L 520,640" fill="none" stroke="black"/>
              <path d="M 552,640 L 568,640" fill="none" stroke="black"/>
              <path d="M 200,656 L 320,656" fill="none" stroke="black"/>
              <path d="M 8,784 L 184,784" fill="none" stroke="black"/>
              <path d="M 192,832 L 320,832" fill="none" stroke="black"/>
              <path d="M 392,832 L 512,832" fill="none" stroke="black"/>
              <path d="M 392,880 L 512,880" fill="none" stroke="black"/>
              <path d="M 192,896 L 320,896" fill="none" stroke="black"/>
              <path d="M 96,1008 L 344,1008" fill="none" stroke="black"/>
              <path d="M 96,1072 L 344,1072" fill="none" stroke="black"/>
              <path d="M 8,1168 L 248,1168" fill="none" stroke="black"/>
              <path d="M 8,1344 L 248,1344" fill="none" stroke="black"/>
              <path d="M 208,1376 L 336,1376" fill="none" stroke="black"/>
              <path d="M 208,1440 L 336,1440" fill="none" stroke="black"/>
              <path d="M 80,1520 L 208,1520" fill="none" stroke="black"/>
              <path d="M 216,1552 L 232,1552" fill="none" stroke="black"/>
              <path d="M 264,1552 L 288,1552" fill="none" stroke="black"/>
              <path d="M 80,1600 L 208,1600" fill="none" stroke="black"/>
              <path d="M 8,1680 L 296,1680" fill="none" stroke="black"/>
              <path d="M 304,1712 L 320,1712" fill="none" stroke="black"/>
              <path d="M 344,1712 L 368,1712" fill="none" stroke="black"/>
              <path d="M 8,1760 L 296,1760" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="512,48 500,42.4 500,53.6" fill="black" transform="rotate(180,504,48)"/>
              <polygon class="arrowhead" points="496,1000 484,994.4 484,1005.6" fill="black" transform="rotate(90,488,1000)"/>
              <polygon class="arrowhead" points="496,536 484,530.4 484,541.6" fill="black" transform="rotate(90,488,536)"/>
              <polygon class="arrowhead" points="480,424 468,418.4 468,429.6" fill="black" transform="rotate(90,472,424)"/>
              <polygon class="arrowhead" points="472,696 460,690.4 460,701.6" fill="black" transform="rotate(90,464,696)"/>
              <polygon class="arrowhead" points="456,216 444,210.4 444,221.6" fill="black" transform="rotate(90,448,216)"/>
              <polygon class="arrowhead" points="424,1096 412,1090.4 412,1101.6" fill="black" transform="rotate(90,416,1096)"/>
              <polygon class="arrowhead" points="424,824 412,818.4 412,829.6" fill="black" transform="rotate(90,416,824)"/>
              <polygon class="arrowhead" points="376,280 364,274.4 364,285.6" fill="black" transform="rotate(270,368,280)"/>
              <polygon class="arrowhead" points="344,72 332,66.4 332,77.6" fill="black" transform="rotate(270,336,72)"/>
              <polygon class="arrowhead" points="296,1448 284,1442.4 284,1453.6" fill="black" transform="rotate(270,288,1448)"/>
              <polygon class="arrowhead" points="296,1248 284,1242.4 284,1253.6" fill="black" transform="rotate(270,288,1248)"/>
              <polygon class="arrowhead" points="296,1160 284,1154.4 284,1165.6" fill="black" transform="rotate(90,288,1160)"/>
              <polygon class="arrowhead" points="296,1000 284,994.4 284,1005.6" fill="black" transform="rotate(90,288,1000)"/>
              <polygon class="arrowhead" points="296,824 284,818.4 284,829.6" fill="black" transform="rotate(90,288,824)"/>
              <polygon class="arrowhead" points="296,496 284,490.4 284,501.6" fill="black" transform="rotate(270,288,496)"/>
              <polygon class="arrowhead" points="264,160 252,154.4 252,165.6" fill="black" transform="rotate(270,256,160)"/>
              <polygon class="arrowhead" points="232,552 220,546.4 220,557.6" fill="black" transform="rotate(90,224,552)"/>
              <polygon class="arrowhead" points="216,272 204,266.4 204,277.6" fill="black" transform="rotate(0,208,272)"/>
              <polygon class="arrowhead" points="216,240 204,234.4 204,245.6" fill="black" transform="rotate(0,208,240)"/>
              <polygon class="arrowhead" points="144,1608 132,1602.4 132,1613.6" fill="black" transform="rotate(270,136,1608)"/>
              <polygon class="arrowhead" points="144,1440 132,1434.4 132,1445.6" fill="black" transform="rotate(270,136,1440)"/>
              <polygon class="arrowhead" points="136,216 124,210.4 124,221.6" fill="black" transform="rotate(90,128,216)"/>
              <polygon class="arrowhead" points="112,48 100,42.4 100,53.6" fill="black" transform="rotate(0,104,48)"/>
              <polygon class="arrowhead" points="40,1672 28,1666.4 28,1677.6" fill="black" transform="rotate(90,32,1672)"/>
              <polygon class="arrowhead" points="40,1160 28,1154.4 28,1165.6" fill="black" transform="rotate(90,32,1160)"/>
              <polygon class="arrowhead" points="40,552 28,546.4 28,557.6" fill="black" transform="rotate(90,32,552)"/>
              <g class="text">
                <text x="36" y="52">Incoming</text>
                <text x="192" y="52">Are</text>
                <text x="232" y="52">there</text>
                <text x="312" y="52">proxy-related</text>
                <text x="404" y="52">options?</text>
                <text x="32" y="68">request</text>
                <text x="128" y="84">|</text>
                <text x="448" y="84">|</text>
                <text x="128" y="100">YES</text>
                <text x="260" y="100">..........</text>
                <text x="452" y="100">NO</text>
                <text x="224" y="116">:</text>
                <text x="260" y="116">Return</text>
                <text x="296" y="116">:</text>
                <text x="224" y="132">:</text>
                <text x="252" y="132">5.05</text>
                <text x="296" y="132">:</text>
                <text x="260" y="148">:........:</text>
                <text x="260" y="196">NO</text>
                <text x="256" y="212">|</text>
                <text x="184" y="228">YES</text>
                <text x="28" y="244">Is</text>
                <text x="64" y="244">there</text>
                <text x="104" y="244">the</text>
                <text x="236" y="244">Am</text>
                <text x="256" y="244">I</text>
                <text x="272" y="244">a</text>
                <text x="372" y="244">Is</text>
                <text x="408" y="244">there</text>
                <text x="444" y="244">an</text>
                <text x="56" y="260">Proxy-Uri</text>
                <text x="124" y="260">Option</text>
                <text x="256" y="260">forward</text>
                <text x="388" y="260">OSCORE</text>
                <text x="448" y="260">Option?</text>
                <text x="28" y="276">or</text>
                <text x="56" y="276">the</text>
                <text x="112" y="276">Proxy-Cri</text>
                <text x="252" y="276">proxy?</text>
                <text x="48" y="292">Option,</text>
                <text x="116" y="292">possibly</text>
                <text x="416" y="292">|</text>
                <text x="472" y="292">|</text>
                <text x="36" y="308">with</text>
                <text x="72" y="308">the</text>
                <text x="420" y="308">NO</text>
                <text x="472" y="308">YES</text>
                <text x="80" y="324">Uri-Path-Abbrev</text>
                <text x="48" y="340">Option?</text>
                <text x="32" y="372">|</text>
                <text x="224" y="372">YES</text>
                <text x="36" y="388">NO</text>
                <text x="284" y="436">..........</text>
                <text x="248" y="452">:</text>
                <text x="284" y="452">Return</text>
                <text x="320" y="452">:</text>
                <text x="488" y="452">Decrypt</text>
                <text x="248" y="468">:</text>
                <text x="276" y="468">4.01</text>
                <text x="320" y="468">:</text>
                <text x="284" y="484">:........:</text>
                <text x="176" y="532">YES</text>
                <text x="292" y="532">NO</text>
                <text x="176" y="548">|</text>
                <text x="288" y="548">|</text>
                <text x="492" y="564">Success?</text>
                <text x="28" y="580">Is</text>
                <text x="64" y="580">there</text>
                <text x="104" y="580">the</text>
                <text x="220" y="580">Is</text>
                <text x="244" y="580">it</text>
                <text x="68" y="596">Proxy-Scheme</text>
                <text x="252" y="596">acceptable</text>
                <text x="464" y="596">|</text>
                <text x="44" y="612">Option</text>
                <text x="84" y="612">or</text>
                <text x="112" y="612">the</text>
                <text x="220" y="612">to</text>
                <text x="264" y="612">forward</text>
                <text x="468" y="612">NO</text>
                <text x="96" y="628">Proxy-Scheme-Number</text>
                <text x="224" y="628">the</text>
                <text x="276" y="628">request?</text>
                <text x="48" y="644">Option,</text>
                <text x="100" y="644">with</text>
                <text x="128" y="644">a</text>
                <text x="224" y="644">(#)</text>
                <text x="536" y="644">YES</text>
                <text x="64" y="660">combination</text>
                <text x="124" y="660">of</text>
                <text x="152" y="660">the</text>
                <text x="56" y="676">following</text>
                <text x="132" y="676">options?</text>
                <text x="288" y="676">|</text>
                <text x="288" y="692">YES</text>
                <text x="24" y="708">-</text>
                <text x="72" y="708">Uri-Host;</text>
                <text x="508" y="708">................</text>
                <text x="24" y="724">-</text>
                <text x="72" y="724">Uri-Port;</text>
                <text x="448" y="724">:</text>
                <text x="484" y="724">OSCORE</text>
                <text x="536" y="724">error</text>
                <text x="568" y="724">:</text>
                <text x="24" y="740">-</text>
                <text x="100" y="740">Uri-Path-Abbrev,</text>
                <text x="448" y="740">:</text>
                <text x="492" y="740">handling</text>
                <text x="568" y="740">:</text>
                <text x="44" y="756">or</text>
                <text x="72" y="756">one</text>
                <text x="100" y="756">or</text>
                <text x="132" y="756">more</text>
                <text x="508" y="756">:..............:</text>
                <text x="68" y="772">Uri-Path</text>
                <text x="32" y="804">|</text>
                <text x="36" y="820">NO</text>
                <text x="232" y="852">Consume</text>
                <text x="280" y="852">the</text>
                <text x="412" y="852">Is</text>
                <text x="448" y="852">there</text>
                <text x="484" y="852">an</text>
                <text x="256" y="868">proxy-related</text>
                <text x="452" y="868">application?</text>
                <text x="232" y="884">options</text>
                <text x="416" y="900">|</text>
                <text x="488" y="900">|</text>
                <text x="416" y="916">YES</text>
                <text x="492" y="916">NO</text>
                <text x="336" y="980">YES</text>
                <text x="336" y="996">|</text>
                <text x="492" y="1012">..........</text>
                <text x="124" y="1028">Does</text>
                <text x="160" y="1028">the</text>
                <text x="216" y="1028">authority</text>
                <text x="296" y="1028">component</text>
                <text x="456" y="1028">:</text>
                <text x="492" y="1028">Return</text>
                <text x="528" y="1028">:</text>
                <text x="128" y="1044">(host</text>
                <text x="168" y="1044">and</text>
                <text x="208" y="1044">port)</text>
                <text x="244" y="1044">of</text>
                <text x="272" y="1044">the</text>
                <text x="456" y="1044">:</text>
                <text x="484" y="1044">4.04</text>
                <text x="528" y="1044">:</text>
                <text x="136" y="1060">request</text>
                <text x="184" y="1060">URI</text>
                <text x="236" y="1060">identify</text>
                <text x="288" y="1060">me?</text>
                <text x="492" y="1060">:........:</text>
                <text x="288" y="1092">|</text>
                <text x="292" y="1108">NO</text>
                <text x="468" y="1108">..................</text>
                <text x="400" y="1124">:</text>
                <text x="440" y="1124">Deliver</text>
                <text x="488" y="1124">the</text>
                <text x="536" y="1124">:</text>
                <text x="400" y="1140">:</text>
                <text x="440" y="1140">request</text>
                <text x="484" y="1140">to</text>
                <text x="512" y="1140">the</text>
                <text x="536" y="1140">:</text>
                <text x="400" y="1156">:</text>
                <text x="456" y="1156">application</text>
                <text x="536" y="1156">:</text>
                <text x="304" y="1172">...........</text>
                <text x="468" y="1172">:................:</text>
                <text x="40" y="1188">There</text>
                <text x="76" y="1188">is</text>
                <text x="100" y="1188">no</text>
                <text x="264" y="1188">:</text>
                <text x="304" y="1188">Forward</text>
                <text x="344" y="1188">:</text>
                <text x="68" y="1204">Proxy-Scheme</text>
                <text x="148" y="1204">Option</text>
                <text x="188" y="1204">or</text>
                <text x="264" y="1204">:</text>
                <text x="288" y="1204">the</text>
                <text x="344" y="1204">:</text>
                <text x="96" y="1220">Proxy-Scheme-Number</text>
                <text x="208" y="1220">Option,</text>
                <text x="264" y="1220">:</text>
                <text x="304" y="1220">request</text>
                <text x="344" y="1220">:</text>
                <text x="32" y="1236">but</text>
                <text x="72" y="1236">there</text>
                <text x="108" y="1236">is</text>
                <text x="128" y="1236">a</text>
                <text x="184" y="1236">combination</text>
                <text x="304" y="1236">:.........:</text>
                <text x="28" y="1252">of</text>
                <text x="56" y="1252">the</text>
                <text x="112" y="1252">following</text>
                <text x="188" y="1252">options:</text>
                <text x="24" y="1284">-</text>
                <text x="72" y="1284">Uri-Host;</text>
                <text x="24" y="1300">-</text>
                <text x="72" y="1300">Uri-Port;</text>
                <text x="24" y="1316">-</text>
                <text x="100" y="1316">Uri-Path-Abbrev,</text>
                <text x="180" y="1316">or</text>
                <text x="48" y="1332">one</text>
                <text x="76" y="1332">or</text>
                <text x="108" y="1332">more</text>
                <text x="164" y="1332">Uri-Path</text>
                <text x="132" y="1380">..........</text>
                <text x="96" y="1396">:</text>
                <text x="132" y="1396">Return</text>
                <text x="168" y="1396">:</text>
                <text x="248" y="1396">Consume</text>
                <text x="296" y="1396">the</text>
                <text x="96" y="1412">:</text>
                <text x="124" y="1412">4.01</text>
                <text x="168" y="1412">:</text>
                <text x="272" y="1412">proxy-related</text>
                <text x="132" y="1428">:........:</text>
                <text x="248" y="1428">options</text>
                <text x="140" y="1492">NO</text>
                <text x="136" y="1508">|</text>
                <text x="100" y="1540">Is</text>
                <text x="124" y="1540">it</text>
                <text x="132" y="1556">acceptable</text>
                <text x="188" y="1556">to</text>
                <text x="248" y="1556">YES</text>
                <text x="120" y="1572">forward</text>
                <text x="168" y="1572">the</text>
                <text x="124" y="1588">request?</text>
                <text x="176" y="1588">(#)</text>
                <text x="136" y="1652">YES</text>
                <text x="136" y="1668">|</text>
                <text x="28" y="1700">Am</text>
                <text x="48" y="1700">I</text>
                <text x="64" y="1700">a</text>
                <text x="128" y="1700">reverse-proxy</text>
                <text x="208" y="1700">using</text>
                <text x="248" y="1700">the</text>
                <text x="48" y="1716">request</text>
                <text x="96" y="1716">URI</text>
                <text x="132" y="1716">from</text>
                <text x="168" y="1716">the</text>
                <text x="216" y="1716">options</text>
                <text x="332" y="1716">NO</text>
                <text x="56" y="1732">Uri-Host,</text>
                <text x="136" y="1732">Uri-Port,</text>
                <text x="216" y="1732">Uri-Path,</text>
                <text x="32" y="1748">and</text>
                <text x="112" y="1748">Uri-Path-Abbrev</text>
                <text x="192" y="1748">for</text>
                <text x="248" y="1748">proxying?</text>
                <text x="16" y="1812">(#)</text>
                <text x="52" y="1812">This</text>
                <text x="84" y="1812">is</text>
                <text x="140" y="1812">determined</text>
                <text x="224" y="1812">according</text>
                <text x="276" y="1812">to</text>
                <text x="304" y="1812">the</text>
                <text x="364" y="1812">endpoint's</text>
                <text x="464" y="1812">configuration</text>
                <text x="48" y="1828">and</text>
                <text x="72" y="1828">a</text>
                <text x="116" y="1828">possible</text>
                <text x="208" y="1828">authorization</text>
                <text x="316" y="1828">enforcement.</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
             +-----------------------------------------------+
Incoming --->|        Are there proxy-related options?       |<-------+
request      +-----------------------------------------------+        |
               |                         ^             |              |
              YES          ..........    |             NO             |
               |           : Return :    |             |              |
               |           : 5.05   :    |             |              |
               |           :........:    |             |              |
               |               ^         |             |              |
               |               |         |             |              |
               |               NO        |             |              |
               v               |         |             v              |
+------------------+ YES  +---------+    | +----------------+         |
| Is there the     |----->| Am I a  |    | | Is there an    |         |
| Proxy-Uri Option |      | forward |    | | OSCORE Option? |         |
| or the Proxy-Cri | +--->| proxy?  |    | +----------------+         |
| Option, possibly | |    +---------+    |   ^     |      |           |
| with the         | |     |             |   |     NO    YES          |
| Uri-Path-Abbrev  | |     |             |   |     |      |           |
| Option?          | |     |             |   |     |      |           |
+------------------+ |     |             |   |     |      |           |
   |                 |    YES            |   |     |      |           |
   NO                |     |             |   |     |      |           |
   |                 |     |             |   |     |      |           |
   |                 |     |             |   |     |      v           |
   |                 |     |  .......... |   |     |   +---------+    |
   |                 |     |  : Return : |   |     |   | Decrypt |    |
   |                 |     |  : 4.01   : |   |     |   +---------+    |
   |                 |     |  :........: |   |     |        |         |
   |                 |     |       ^     |   |     |        |         |
   |                 |     |       |     |   |     |        |         |
   |                YES    |       NO    |   |     |        v         |
   v                 |     v       |     |   |     |   +----------+   |
+---------------------+ +--------------+ |   |     |   | Success? |   |
| Is there the        | | Is it        | |   |     |   +----------+   |
| Proxy-Scheme        | | acceptable   | |   |     |     |    |       |
| Option or the       | | to forward   | |   |     |     NO   |       |
| Proxy-Scheme-Number | | the request? | |   |     |     |    |       |
| Option, with a      | | (#)          | |   |     |     |    +--YES--+
| combination of the  | +--------------+ |   |     |     |
| following options?  |            |     |   |     |     |
|                     |           YES    |   |     |     v
| - Uri-Host;         |            |     |   |     |   ................
| - Uri-Port;         |            |     |   |     |   : OSCORE error :
| - Uri-Path-Abbrev,  |            |     |   |     |   : handling     :
|   or one or more    |            |     |   |     |   :..............:
|   Uri-Path          |            |     |   |     |
+---------------------+            |     |   |     |
   |                               |     |   |     |
   NO                              v     |   |     v
   |                   +---------------+ |   |  +--------------+
   |                   | Consume the   | |   |  | Is there an  |
   |                   | proxy-related | |   |  | application? |
   |                   | options       | |   |  +--------------+
   |                   +---------------+ |   |     |        |
   |                               |     |   |    YES       NO
   |                               |     |   |     |        |
   |                               |     |   |     |        |
   |                               |     |   |     |        |
   |                               |    YES  |     |        |
   |                               v     |   |     |        v
   |       +------------------------------+  |     |    ..........
   |       | Does the authority component |  |     |    : Return :
   |       | (host and port) of the       |  |     |    : 4.04   :
   |       | request URI identify me?     |  |     |    :........:
   |       +------------------------------+  |     |
   |                               |         |     v
   |                               NO        |   ..................
   |                               |         |   : Deliver the    :
   |                               |         |   : request to the :
   v                               v         |   : application    :
+-----------------------------+ ...........  |   :................:
| There is no                 | : Forward :  |
| Proxy-Scheme Option or      | : the     :  |
| Proxy-Scheme-Number Option, | : request :  |
| but there is a combination  | :.........:  |
| of the following options:   |    ^         |
|                             |    |         |
| - Uri-Host;                 |    |         |
| - Uri-Port;                 |    |         |
| - Uri-Path-Abbrev, or       |    |         |
|   one or more Uri-Path      |    |         |
+-----------------------------+    |         |
   |                               |         |
   |       ..........    +---------------+   |
   |       : Return :    | Consume the   |   |
   |       : 4.01   :    | proxy-related |   |
   |       :........:    | options       |   |
   |            ^        +---------------+   |
   |            |                  ^         |
   |            |                  |         |
   |            NO                 |         |
   |            |                  |         |
   |     +---------------+         |         |
   |     | Is it         |         |         |
   |     | acceptable to |---YES---+         |
   |     | forward the   |                   |
   |     | request? (#)  |                   |
   |     +---------------+                   |
   |            ^                            |
   |            |                            |
   |           YES                           |
   v            |                            |
+-----------------------------------+        |
| Am I a reverse-proxy using the    |        |
| request URI from the options      |---NO---+
| Uri-Host, Uri-Port, Uri-Path,     |
| and Uri-Path-Abbrev for proxying? |
+-----------------------------------+


(#) This is determined according to the endpoint's configuration
    and a possible authorization enforcement.
]]></artwork>
        </artset>
      </figure>
    </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>More precise step for escalating the protection of CoAP options.</t>
          </li>
          <li>
            <t>Added section on replay protection and ordering of responses.</t>
          </li>
          <li>
            <t>Aligned SCHC terminology with that of draft-ietf-schc-8824-update.</t>
          </li>
          <li>
            <t>Added "Implementation Status" section.</t>
          </li>
          <li>
            <t>Added "Operational Considerations" section.</t>
          </li>
          <li>
            <t>Registration of DNS SVCB SvcParamKeys.</t>
          </li>
          <li>
            <t>Removed one item from "Further Use Cases".</t>
          </li>
          <li>
            <t>Editorial fixes and improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-06-07">
        <name>Version -06 to -07</name>
        <ul spacing="normal">
          <li>
            <t>Revised presentation of the algorithm for processing incoming requests.</t>
          </li>
          <li>
            <t>Added guidelines for proxies on establishing/using OSCORE with an origin server.</t>
          </li>
          <li>
            <t>Added example of message exchange with two forward-proxies.</t>
          </li>
          <li>
            <t>Fixes in the examples of message exchange.</t>
          </li>
          <li>
            <t>Minor clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-05-06">
        <name>Version -05 to -06</name>
        <ul spacing="normal">
          <li>
            <t>Removed normative language when behavior is not new.</t>
          </li>
          <li>
            <t>Removed inappropriate references to RFC 7252.</t>
          </li>
          <li>
            <t>Defined meaning of "consumer" of a CoAP option.</t>
          </li>
          <li>
            <t>Fixed use of error codes at the origin server.</t>
          </li>
          <li>
            <t>Reorganized text on policies for source-based processing of incoming requests.</t>
          </li>
          <li>
            <t>Covered the use of the CoAP Uri-Path-Abbrev Option.</t>
          </li>
          <li>
            <t>Added requirements on including the Partial IV in the OSCORE Option of responses.</t>
          </li>
          <li>
            <t>Use of SCHC Compression/Decompression:  </t>
            <ul spacing="normal">
              <li>
                <t>Fixed generalization of Outer SCHC Compression.</t>
              </li>
              <li>
                <t>Explicit distinction between Inner and Outer SCHC Compression Rules.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Improved visibility and discussion on two use cases: "Access Control to a Proxy" and "Access Control to the Origin Server" (via a pproxy).</t>
          </li>
          <li>
            <t>Updated references.</t>
          </li>
          <li>
            <t>Minor clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-04-05">
        <name>Version -04 to -05</name>
        <ul spacing="normal">
          <li>
            <t>Fixes in the examples of message exchange.</t>
          </li>
          <li>
            <t>Minor clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-03-04">
        <name>Version -03 to -04</name>
        <ul spacing="normal">
          <li>
            <t>Removed definition and use of "OSCORE-in-OSCORE".</t>
          </li>
          <li>
            <t>Moved use cases to an appendix.</t>
          </li>
          <li>
            <t>Explain deviations from RFC 8613 as an actual subsection.</t>
          </li>
          <li>
            <t>More precise indication of outer or inner CoAP options.</t>
          </li>
          <li>
            <t>Added security consideration on membership of OSCORE groups.</t>
          </li>
          <li>
            <t>Updated references.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-02-03">
        <name>Version -02 to -03</name>
        <ul spacing="normal">
          <li>
            <t>Clarified motivation for updating RFC 8768 in the introduction.</t>
          </li>
          <li>
            <t>Explained that OSCORE-capable proxies have to recognize CoAP options included in outgoing messages to protect.</t>
          </li>
          <li>
            <t>Fixed typo about the intended class of Hop-Limit option for OSCORE.</t>
          </li>
          <li>
            <t>Fixed protection of the Uri-Host option in examples.</t>
          </li>
          <li>
            <t>Added security considerations about the Hop-Limit option.</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>Revised escalation of CoAP option protection.</t>
          </li>
          <li>
            <t>Specified general ordering for protecting outgoing requests.</t>
          </li>
          <li>
            <t>Explicit definition of OSCORE processing for the Hop-Limit option (update to RFC 8768).</t>
          </li>
          <li>
            <t>Added examples of message exchange with a reverse-proxy.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-00-01">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>
            <t>Escalation of option protection as explicit update point to RFC 8613.</t>
          </li>
          <li>
            <t>Clarified examples of Class U/I CoAP options that become encrypted.</t>
          </li>
          <li>
            <t>Considered also the CoAP Options Proxy-Cri and Proxy-Scheme-Number.</t>
          </li>
          <li>
            <t>Added reference to Onion CoAP as use case.</t>
          </li>
          <li>
            <t>Required to set a limit on OSCORE layers that can be added/removed.</t>
          </li>
          <li>
            <t>Revised general rules on protecting CoAP options.</t>
          </li>
          <li>
            <t>A forward-proxy consumes a request when the request URI identifies the proxy itself.</t>
          </li>
          <li>
            <t>Consistency fix: a reverse-proxy can forward based on Uri-Host, Uri-Port or Uri-Path.</t>
          </li>
          <li>
            <t>Generalized authorization checks as acceptability checks.</t>
          </li>
          <li>
            <t>Added acceptability check before decrypting a request.</t>
          </li>
          <li>
            <t>Fixes in the examples of message exchange.</t>
          </li>
          <li>
            <t>Updated state diagram of the incoming request processing.</t>
          </li>
          <li>
            <t>Added state diagram on the protection of CoAP options of Class U/I.</t>
          </li>
          <li>
            <t>Updated references.</t>
          </li>
          <li>
            <t>Editorial fixes and improvements.</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <contact fullname="Christian Amsüss"/>, <contact fullname="Peter Blomqvist"/>, <contact fullname="Carsten Bormann"/>, <contact fullname="David Navarro"/>, <contact fullname="Göran Selander"/>, and <contact fullname="Lucas Åhl"/> 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 projects CRITISEC and CYPRESS; and by the H2020 project SIFIS-Home (Grant agreement 952652).</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+y921Yc2ZUo+s5XxKHGOA1WZkogdCna7doIUS62daGAssvD
dtcIMgMIKzMiOyIShCXtt/Mf5yv20346/WNnXtctVuQFVCqVLbpdgsyIdZlr
rnm/9Pv9tavd5OHaWpM342w3eX2y//r4oD9Mp+nZOEuOqvJtntVr6dlZlV11
fj0qh0U6gddHVXre9POsOe8PyyrrlzX9I8/3p/x8f5w2Wd2sraVVlu4mh0WT
VUXWrF1f7Cb75fFB8qeyepMXF8nvq3I2XXtzbZ/pP8cZ1oZps5vUzWitnp1N
8rrOy6K5mcICDg9Ov12bTUc4wW7y9PHWw17y9Mnjp2trw3IEQ+4mM1gb/JnO
msuy2l1L6Kcv/yZJXsB7LwfJaT4uh6n5mLf3Mq2GZfhVWcGox4cnB8neM/Nh
3VRZBms8rNPzv5fVqL5Im7RItrfNE8O8udlN/pDXjR0K1giznBz0tx7vJDsP
nM9nRVPB4yfX2SgrzOfZJM3Hu8kElzVoaFn/o8oHdRbf1vEg+e6///fFeFaM
go0d52/SatT+9pffW0UrG1yWtDDZ3VpRVpO0ya8yPMDjb/efbD/all/xzPXX
J9s75tfHT+XXr3ceP7C/buGvh/3ngxbSXiDyDcvJpP3EZZWde5/Ww8th/+nT
7Z0+4177lVmV96dpc9mXqwQP7Jd7R4PX0waQd/BqNjnLqprx0cdNOoPDvVd7
9DeNnpynYzlkubc4VsJjJTIWf51WF3hWl00zrXfv37++vh7kaZEOYNT7KVyc
i2KSFU19nxY5TStAB7hprb8Hby+byfirkmboF2aG569OBid/3H82OLkaHuHT
f8hubr8LGC3B0ZKTrLrKh0BgdAEJjptsuLNsrrbBUVH366vhmflFtiR/0lbf
wLBra3lxHqLXg4eKMk8e72wZnNpRpPt6a+eJ/rr94IH9VVHx60fbBv8eMyr6
+GGwrX+W1/O+Rhp6E0HasxpglvUns3GTD9O66Rdlk5/Dr3hikRE7Huwaf1im
0/50dgYEt/1lU6VFPS0rIP3FSEbqvFcA5NgtSYf8ld0pP996iFYC7KPr+2x0
WQ51MtjNeT5uP0SzzHtI+NbwMiPOFZlrnL7J+ul0qq8bGKeTepbVdb/ZbqqL
flngjcFF4/cvrl9uv+zvy1jRS/J6mhXJy/IMhkz2xmNA5qF3SV7kF5fNdYb/
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
VrBmxxgZj/doIveEBQGplUOBBEyQAQ/OsqYhep0Ts2bKpucZAgor/+QYK8kl
lzWrE/aV4oFKY3PamBy8U2w75HM9CcPAGpezIeo2xBPbbW14x07EaOA9fgly
Zqmd5h3yEWnR65Z4DbrRcl+OyGWRHEqtlu+5rOkdvSuIZ6TLZclVzu5Fx2ct
aqc9W7nvFSfb09tqU1SnAxzIdFbBwWWmfgU/10jJP4DdVXYj4lDgXUglX6qp
UvKj1mxTnpugyDZgU9LSnmVK/ne8FU01GzoJd9q/KdIQel4/6FVaQQ/EX3hO
failcaAogEZXU+pqs5yIsMSIiUFcN4KqtaC7kT6q/pe6TuJuoa0kOZ/yhSTf
N7qg1LajUSdHoPGnjcE0imTIw6qMkVLpOqUntoZRuE5ehFpQiGUI8Ntkwjkv
4jaLmR8Ot7DymGMM6IDm7c978ZnKDaThvOC7xQhjnDG8YjfXuSE3qcTEdiXK
oM6yD7dXNBURcY6MiGOT31VfMQbyIb8GasveWCKrcmOEt9VIasOtl+4i1rMc
M8FZsvQsH+OqY0KY44u3WGpan1xijiHGR5aMo1khprtYn7bQRyhzj9XmgPYR
q2lRIA3lWiH/fi71UzFTY6hl11qhgnQx0pxj3icYn1+er9pbmK9kJBKo5ZCg
wjChN4Q0dC20YsDKiWgKk7zm7iBq7NOUF9MdID3XaFi64xtyU44PuBxmnakt
PkW0Joy4ybPxiHNU+HTrJI1ECTKj8NOJ3KWZPidk2FxW2G20QLyon38v6czp
dqPFa2giwAnQWru2XeyPvEjTMZJXVyh3U694IYYnu+MS8LSy68jFGJJwmDpK
q0aaKYpV8yLEVFJrh2UQqTjLaDeOZBk5Ac4sNt1nPekVb4SaXKSHW+eNdKAm
hA4k9GE2D44shUgSZ3rBzakWgcMUxaWXp1zrlyKQcLGXeaOIpnUR/mQ7cXrI
1TLqU06eY9kXtTHpKk3crrHI9pmYMY1M0EFAgYkmMF0pnU7A7IPSBLE6GVqy
bQYlE1xnVUc6j1UTaw0qcI2c/LztsVOlJb1K8zGh92hWmcRbt2IJl9jqBtZU
m1M6pyd99CSQU6LLZErqfWeinDXXysPv5StakInKwRr2QNjGdnntYL4fkzcv
889FPpokEK5KjawL8pA7AjJXLmMcQQf3fq5S8UPXoXkNP3PIZtp9vfx07FNT
aXwqDTRKZBEBoqaNQ7XC7C6cIZdblQ1a+EYjjlz1fBHKLX9ExJA17KWsQJa6
QNOUKVsxxEbHhtdiUBIWT/VuthbJ5GKHNjEFaT4zBE6Ga/UAt76Wx17VLDdI
2HvwITt950Z90bTM8HysNh0SpdLvzIkA9SLHLceKDuPbExcEdskZWgCoq4iG
EVeRt8cn83Zo4wW/Sg40H30ilpOunOS1tReoN60oBbf6BrOt9qrUrPDCTei2
MhIbH223UOPypdwmyg/ShUsYW7d60O5XGPBItdmOwqZQ1PI2Q0rgBcaEXuUl
BF4/JwmUGg8dahuY6k4kscfhCTkiWUsJdIIu6bnlemwnG9idm2seUW9tt4s2
9bqs69nE5BDK5NaO7fUXVsAJjYg67qP9hTsF4W6FlrU12yYobrIWWj8DpRL3
uVhTtvG6NhHTF8adROXQEcWhbiw3SEpNkXjNuPvZ6LIcan7Ut3yXJ6X2GrOm
fUJ2OXGO6oRN0hbu6SEo+Qxda18/JjPThnamathLhQBf597l4RDrJB541RXO
QJqHe43GT7WQkGtgyR32cc0oG8FWCaSZ0CtNW0ZMlevGLWZjXj12yAokwmiO
oEOUqnwRnIrioSmwNhcHjVPaj18jN4axB6I+1pIjRGXCoJCzJo0mIHg7inkw
MHXDXhy84LO6u1G7Q4vSYdZ/k904hN/YAHBFRu/HoRzaoBLgnleEFUnuPpk4
qYZAclBc5VVZsBy/sbcP1OO8gp1TXQ/GwO0HD4R8fCtGIzHY1kZd9+xtlURc
cgkWr89Jabodo9ysHtGWbsotxuZC1MisYn6eS6Wk/ZoKfD7NduwXHIz4+1mO
NbsKKXNzJOQArU4X5istOaLpwupMMcHYYQvo1WwjnCamlEiSeo3NDrOD1CkU
05tJtgiulFNQOTXhJD5P0pRjKz0Ysrm47h/A7kTSbbySwLY24Rmb4IzZn7zQ
6NwUK4TUB/Yw5sjbaAil5MQRj6Wir+OCSV1P2kkPBuPFkP0FzR43RToRmdw0
HbIVQUoLnoX22hMJKyi4pbpTHEjsPEw4nbEltztATcegamKotZeY44mYagMD
i5DMNI+IsLBMZGvGOCaeTML/SqqhsuIeZQuFKYayXAGEk8DlQg06qbA2l5TJ
tPwduVx4C2lRX4ux1k1Eq4BhEXRyU5MVLwoTkYnv9JchAGzrRblOHOj7rd3k
Odq2T2BlsGXZxwaRms0w/ZAr5er99N2w3yg9NKlUwbphWl0oVyoyLBLXeHI1
PEqBzqL0ti5yJsKKZfp19XWlyfNXJ8nJH/efofmbo4COMwxDTDaOjzeFQO88
foBpRfzrFltzxPKmte1GmhOG4zl1WghlmKeRdsU1GclUh0/CDgBLQCOcNXSK
lgUs2ICqwBRaY3nRdQ6PcWUVdsPWpp9MNpk2NwOb1bUIQjYE2jS9Yjgd63pZ
rJTSh3I/+Nw5Gu2WJ89GySWWV2UXWMPXFJzK0yLt11fDM4lP/n7bIKOWmG+s
hKTCSg9ob91YvwmbND4m+vH4IlREUe/4k2OUv6aPjE3Bhm+LSXJo9fKnpuFE
J5RhI2xPyqcaO6vbXVrM2JgP0GBhotpTpm12bJf/M4Kr7c3Px9Nk4RBOBwuG
EEVvURpvDAgu5AB7h834xkGvHJlbXgxJTjeuO+RTb6dUJMs7IBLdMTdLVUj1
qpB8bqKfThwd15GDjHTTDtKL2w+dU+OiTRtseNycW71pQ42Fm16YlqZSobpl
Q0I0pev7h1HiAHqAExysaj6pko6uvyp1sMYvdtl2WbXG6ZusDztHInees9/c
oKumWKnFPeVlYc9iCjLhsvMs1Mi6as0Gk9ezt5cpBr9JasGRZwZJx4CjKCRc
6TJJIjRiQiAcODTmNbp6jhgHUN2id4wMbN/4fqsHRJljM79/KHGgvIhfVHwi
83N9iS2TVTd1W1LxIQFSq8Fq2mdr9P+yP0ma1lcXa/f64c+9tfcCGistv4fP
YIkmLBWEZ/gs9m6iP++jv17Jr/zqvcT9aQ8XGfm9/vfVazt+MufnvXnx+61v
/Dl+957uRCzS9gRe+G3n3O7wc+durWL1fbeGiE/6n5HfWn/OH+J915fun5/h
EH8+OLnbEFe3XkX86O7pk/L1Pf8s/SHeO0Ggcu/MM+/x/4+coBt9NxwCkyPG
GdXakEr+3hCeJ6ZjCOsl5PTNYBX7pz/+dPTTifduOITrWcQu9N4Q92Iwag3h
XMMeixHetXOQ2fw6ZwgT+u8M4Tz+vmuIsCbKN/4qFg+xAC+CIQSB3zs0jbEz
NtEKqwgG9W6KHeKexdF7HUMsWkXwxO2GOOHagUyjXQp5y1V4D4VDeFc+hEWE
RodDhHQ8XEBAhGNDhJxs0R6iQ3y/7fK0e7cZIvJgDC+6h4jxNN3N8axgoW/h
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
W0moMcR/rP/AHm6RqFXxYLG578REyCckGK1/WE65OuqfLKtI0Zr6rGR8NEXq
V6RHTSMNapdd3JEujgeZt7bRzlJr+5z0qC69B3+W1n3wZzEb6NQ45hCu20mG
Mf1iLnXs5j/4E1GyltYuktsrGMnHlg/iesIRY8lKegK9u6yugD+LhbmPgB2j
naU1avxZ+dCX1qwja7uFlqxrXOrB26HmXXDzTsIIvx9/++jn1Id+1sF/cWXr
DqMvAZhAVVhNncOfZajAMuoC/qx2e1dUG7xl/CwXdVUVYqU5llEl8OeXusFx
M1ZcfV3AnqLqK727ggqLP8vILz8bbq6KCktjwnKIsKqY8U+vyrn60qqqnAif
9MGyqtx+/2glfc5VNf+F1brPyz32ReX84rpLwn+/uO6SL647/PnYrrufW8X/
uV2BXac7X6d/9PBTX7W7X5l/Bez/orP/CnT2FdT1hZr6QkWo8zbeTTVfWitf
5tb9wr7fW1/Dz0Dvpt9+Zjf0Cir8QhHuC75+hvj6xfX8M7ieVzdb9Dz3c295
KwZX1dn7w8HisF9uD7p05C8/vYRJ40uY70e3Y5w6x8OllC+xPBEmBziLzWpM
58Y6s/W8NdaG+Ac5mBT1IPctgE/PzznB9DY9fluHAtFOmqI82n5KlZD3qNVX
qh1YLm0DzbkLpMQ1sxtTVxI7i8sg1EqrbkyWqiJfiJwJpqFdpeNMO65g0rlF
8CAK/sMd7TIfz+5x/rBTcxMFY4CVh/rYM66I8wnnWbq73dxkCTVto6lmWY+P
WGD809bmKqLD7SLYOuCw5Kq95W7HTV+KZrdgYh/RzBVd3C943Ps/HQen/bDz
tOk3B453ETL5ub39PyyC/edrsjzLbmWyfPBrsVh2IOUq7zGC/oKWzeXJmfPS
52JnvLtdMH10d7vgr4QV6e93D3rvANqSq16CFRlS+jmGki+kar9AKPlSV30x
4J2Hf2m1uFsa+TU78c6+vhVH/NX48P4pOOKyEp/zDtqf/ml44mj0a+aJK8vr
htkoxWl9s2I2mf8cS/C/sNT/a6aZtwx8uGNi5ucS9/DgS9jDrybs4TMNU2hh
1Me5GF8ykr9kJH/JSKb3vmQkz2MfXzKSnc/+pdzCaxt7veTZpnmAqrg9e32c
1FjWCauiYSvYp084V5J+sN7ZdclP4SBJ3mSTOtkjn9yz+Z5m0h7uEhLf86LQ
2944xxNnal2hqrHYCZ1sYFfmCfaR3VzWId2HYzjrV9l/reaZtq99cVF/cVGv
4KKO1FA1leDGTuVfevWerlgrtDkV7njYx49h2GSDS7nRyVQZ+qjrZP3g+Xev
91tDrG/SrpRYEHLuv3757K8/gczmlzu1XVhwQWPss+er/AYZ2N/OE/UdvHca
Cnl1JYdaQ74pL7KG+9L+6nz3SRe5aGwZQa1l2DP1YGlNNeEAVrEGTBpjUziG
MWkrCiR632/+SzhIwg3KNgx/p7vwjYO63qPpY2rk0I1XXPQbm0bc1NztouvI
TW9FbdyH/GwkbQns9fioqPElRiImfd49RuI24ZXdERKL4yd/5viIj21dO6qy
KZIX710glUgp3c8Q84+Cd+maBM/9vOjZEdNx+zgA4h931JB84tFDcf/QJRhR
MT+xP1+8Kvrz+cUZ3DIEh347zriorvcZ3Ba6Nu549rr9yoyM/+IxD7fJNOmO
ePgorMXg7WdpqFpEvb/EO8hnv454h8XjrSJdnATvLitdxNYcm4P34L/7C/gg
u0TLf5K4jTv7IFUi+wUljEUC3cKiMQuL8a5ejdfyvl+nNzQm5Dg38pcQXh7f
XXi5vYf0Uygei873n6Zm9J0Dbui/Iq+3PxeZvT244PRSo/+repE7rtkXL/Ln
JpwvEky+eJHnPvXFi+yM98WL3Hai/hLuZLcNeswn4rqbT2Gbrss5z+q2f3kL
xJut/tE2/LO9ciE3ACQlb8PIX8q5+U2t6bBByjra2lzB37z1ERzOMIi7wqOt
2MpQqN5eemVHWz8dbQ9wqNvVdIOXvSVt37bA3DaeJbw+bxlPntyxtFyCG6Uf
mCmZ56czxC9isnCIasvcMo+4ziOyH2k+3N5q83WXW3cFlOVKrgdSyryypa60
snoNu8XSjP57S7uKJwvcwr4SFY2s3rnsm+Zn+QJf3vur2l1WktNi8tpy+qe/
x1sooh9FVFtSZNtacH3495jMpb/HrLLmerWv7VLzxSypy85HNH/F+TrIxCol
9/Hf5eptv79L0T35dyFp+AiU4Y6E4e504XZk4S5UYRWicHuacEeS8BEoQmdB
M7w7S96YFmXoNCjFvnNu6krzxSwWS8+3jRLLavOtZt3Vf2NW3sfp3LO55W0L
btmTJx4lefLoc5Eyfjkp4QujZ8xfEe296935fafNOLx3v9zsC6DX+V2XJdtO
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
AgA=

-->

</rfc>
