<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.3.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-oscore-capable-proxies-06" category="std" consensus="true" submissionType="IETF" updates="8613, 8768" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="OSCORE-capable Proxies">OSCORE-capable Proxies</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-capable-proxies-06"/>
    <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="March" day="02"/>
    <area>Internet</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 99?>

<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 103?>

<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 the 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., 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 often) to decrypt an incoming message or whether to forward 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.</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 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 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>
      </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="deviations-from-the-original-message-processing">
        <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, the resulting message might legitimately include an OSCORE Option and thus have in turn to be decrypted.  </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, each of which is intended to be consumed and removed by one of the intermediaries in the chain, 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 "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 next hop for the sender endpoint is not the immediately next consumer of OPT.</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> respond 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 actions described in 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, the endpoint moves to Step 2. Otherwise, the endpoint moves to Step 3.</t>
          </li>
          <li>
            <t>The endpoint proceeds as defined below, depending on which of the two following conditions holds.  </t>
            <ul spacing="normal">
              <li>
                <t>REQ includes either of the following (set) of CoAP options:      </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>
If the endpoint is not configured to be a forward-proxy, it stops processing REQ and responds 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, 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.      </t>
                <t>
In case the check fails, the endpoint <bcp14>MUST</bcp14> stop processing REQ and <bcp14>MUST</bcp14> respond 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, in case the check succeeds, the endpoint consumes the proxy-related options as per <xref section="5.7.2" sectionFormat="of" target="RFC7252"/>. 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 the endpoint 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>
                <t>
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.</t>
              </li>
              <li>
                <t>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>
If the endpoint is not configured to be a reverse-proxy, or what is targeted by the value of the included Uri-Host, Uri-Port, Uri-Path, and Uri-Path-Abbrev Options is not intended to support reverse-proxy functionalities, then the endpoint moves to Step 3.      </t>
                <t>
Otherwise, 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.      </t>
                <t>
In case the check fails, the endpoint <bcp14>MUST</bcp14> stop processing REQ and <bcp14>MUST</bcp14> respond 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>
Otherwise, 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., in case the next hop towards the origin server is a reverse-proxy.      </t>
                <t>
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.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>The endpoint proceeds as defined below, depending on which of the two following conditions holds.  </t>
            <ul spacing="normal">
              <li>
                <t>REQ does not include an OSCORE Option.      </t>
                <t>
If the endpoint does not have an application to handle REQ, it <bcp14>MUST</bcp14> stop processing the request and <bcp14>MAY</bcp14> respond 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.</t>
              </li>
              <li>
                <t>REQ includes an OSCORE Option.      </t>
                <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, which the endpoint looks up 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 performs 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 case OSCORE or Group OSCORE is used, respectively. In case 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, REQ takes REQ* and the endpoint moves to Step 1.</t>
              </li>
            </ul>
          </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 help keeping 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>In case 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="partial-iv-in-the-oscore-option">
          <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>
    <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 case 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 2 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, in case no cache hit occurs; and ii) is the result of an OSCORE decryption and verification at the proxy, in case 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 specific rules about serving a request with a cached response are defined in <xref section="5.6" sectionFormat="of" target="RFC7252"/> as well as in <xref section="7" sectionFormat="of" target="I-D.ietf-core-groupcomm-proxy"/> for group communication scenarios.</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 authenticated key exchange protocol Ephemeral Diffie-Hellman Over COSE (EDHOC) <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 EDHOC 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 EDHOC + OSCORE request defined in <xref target="RFC9668"/> 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 ACE framework for Authentication and Authorization in constrained environments <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>
    <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>In case OSCORE is not used at all, the SCHC processing occurs hop-by-hop, by relying on SCHC Rules that are shared between two adjacent hops.</t>
        </li>
        <li>
          <t>In case 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. This relies on Inner SCHC Rules that are shared between the two application endpoints, which act as OSCORE endpoints and share the OSCORE Security Context used.  </t>
          <t>
The SCHC processing occurs hop-by-hop as to the Outer SCHC Compression/Decompression. This relies on Outer SCHC Rules that are shared between two adjacent hops.</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 shared with the other OSCORE endpoint.</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 shared with the (next hop towards the) destination application endpoint.</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 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 3 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 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 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>
      <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 within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
      </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="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="1" month="December" year="2025"/>
            <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.  SCHC 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-07"/>
        </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="20" month="October" year="2025"/>
            <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 registering (relatively verbose) well-known
   URI paths.  This document introduces an option that allows expressing
   well-known paths in as little as two bytes.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-uri-path-abbrev-02"/>
        </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="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 for CoAP Group Communication</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="3" month="September" year="2025"/>
            <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-05"/>
        </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="20" month="October" year="2025"/>
            <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 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 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-13"/>
        </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="20" month="October" year="2025"/>
            <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.



   The present version -00 refers to version -12 of draft-ietf-core-
   observe-multicast-notifications, which includes content about proxies
   that is also included in the present document.  Such content will be
   removed from draft-ietf-core-observe-multicast-notifications in its
   next revision.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-multicast-notifications-proxy-00"/>
        </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="28" month="February" year="2025"/>
            <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-18"/>
        </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="7" month="July" year="2025"/>
            <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-09"/>
        </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="25" month="February" 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-20"/>
        </reference>
        <reference anchor="I-D.ietf-core-coap-pm">
          <front>
            <title>Constrained Application Protocol (CoAP) Performance Measurement Option</title>
            <author fullname="Giuseppe Fioccola" initials="G." surname="Fioccola">
              <organization>Huawei</organization>
            </author>
            <author fullname="Tianran Zhou" initials="T." surname="Zhou">
              <organization>Huawei</organization>
            </author>
            <author fullname="Mauro Cociglio" initials="M." surname="Cociglio">
         </author>
            <author fullname="Fabio Bulgarella" initials="F." surname="Bulgarella">
              <organization>Telecom Italia</organization>
            </author>
            <author fullname="Yongqing Zhu" initials="Y." surname="Zhu">
              <organization>China Telecom</organization>
            </author>
            <date day="20" month="October" year="2025"/>
            <abstract>
              <t>   This document specifies a method for the Performance Measurement of
   the Constrained Application Protocol (CoAP).  A new CoAP option is
   defined in order to enable network telemetry both end-to-end and hop-
   by-hop.  The endpoints cooperate by marking and, possibly, mirroring
   information on the round-trip connection.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-coap-pm-05"/>
        </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>
            <author fullname="Timothy Claeys" initials="T." surname="Claeys">
         </author>
            <date day="20" month="October" year="2025"/>
            <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-09"/>
        </reference>
        <reference anchor="I-D.ietf-core-cacheable-oscore">
          <front>
            <title>Cacheable 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="22" month="September" year="2025"/>
            <abstract>
              <t>   Group communication with the Constrained Application Protocol (CoAP)
   can be secured end-to-end using Group Object Security for Constrained
   RESTful Environments (Group OSCORE), also across untrusted
   intermediary proxies.  However, this sidesteps the proxies' abilities
   to cache responses from the origin server(s).  This specification
   restores cacheability of protected responses at proxies, by
   introducing consensus requests which any client in a 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-00"/>
        </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>
      </references>
    </references>
    <?line 550?>

<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>In case 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 it 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 standing 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 the 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 the client trusts the proxy to perform its tasks in a privacy-oriented way, the client can rely on their shared secure communication association 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-core-coap-pm"/> relies on the Performance Measurement Option to enable network telemetry for CoAP communications. This makes it possible to efficiently measure Round-Trip Time and message losses, both end-to-end and hop-by-hop. In particular, on-path probes such as intermediary proxies can be deployed to perform measurements hop-by-hop.  </t>
            <t>
When OSCORE is used in deployments including on-path probes, an inner Performance Measurement Option is protected end-to-end between the two application endpoints and enables end-to-end measurements between those. At the same time, an outer Performance Measurement Option allows also hop-by-hop measurements to be performed by relying on an on-path probe.  </t>
            <t>
Therefore, it is preferable to have a secure association with an on-path probe, in order to also ensure the integrity of the hop-by-hop measurements exchanged with the probe.</t>
          </li>
          <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="280" y="276">OSCORE:</text>
                  <text x="356" y="276">[kid:0x5f,</text>
                  <text x="432" y="276">Partial</text>
                  <text x="496" y="276">IV:42],</text>
                  <text x="288" y="292">Uri-Host:</text>
                  <text x="388" y="292">"example.com",</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),
  |       |       |            OSCORE: [kid:0x5f, Partial IV:42],
  |       |       |            Uri-Host: "example.com",
  |       |       |            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="216" y="180">Proxy-Scheme:</text>
                  <text x="300" y="180">"coap"</text>
                  <text x="240" y="196">OSCORE:</text>
                  <text x="316" y="196">[kid:0x5f,</text>
                  <text x="392" y="196">Partial</text>
                  <text x="452" y="196">IV:42]</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"
  |       |       | Proxy-Scheme: "coap"
  |       |       |       OSCORE: [kid:0x5f, Partial IV:42]
  |       |       |         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="200" y="228">Uri-Host:</text>
                  <text x="300" y="228">"example.com",</text>
                  <text x="208" y="244">OSCORE:</text>
                  <text x="284" y="244">[kid:0x20,</text>
                  <text x="360" y="244">Partial</text>
                  <text x="420" y="244">IV:31]</text>
                  <text x="212" y="260">0xff</text>
                  <text x="204" y="276">Payload:</text>
                  <text x="268" y="276">{Code:</text>
                  <text x="316" y="276">0.02</text>
                  <text x="368" y="276">(POST),</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="208" y="548">Code:</text>
                  <text x="252" y="548">0.02</text>
                  <text x="300" y="548">(POST)</text>
                  <text x="116" y="564">POST</text>
                  <text x="204" y="564">Token:</text>
                  <text x="252" y="564">0x7b</text>
                  <text x="200" y="580">OSCORE:</text>
                  <text x="276" y="580">[kid:0xd4,</text>
                  <text x="352" y="580">Partial</text>
                  <text x="412" y="580">IV:53]</text>
                  <text x="204" y="596">0xff</text>
                  <text x="196" y="612">Payload:</text>
                  <text x="260" y="612">{Code:</text>
                  <text x="308" y="612">0.02</text>
                  <text x="360" y="612">(POST),</text>
                  <text x="280" y="628">Uri-Host:</text>
                  <text x="380" y="628">"example.com",</text>
                  <text x="272" y="644">OSCORE:</text>
                  <text x="348" y="644">[kid:0x5f,</text>
                  <text x="424" y="644">Partial</text>
                  <text x="488" y="644">IV:42],</text>
                  <text x="264" y="660">0xff,</text>
                  <text x="268" y="676">{Code:</text>
                  <text x="316" y="676">0.01</text>
                  <text x="364" y="676">(GET),</text>
                  <text x="288" y="692">Uri-Path:</text>
                  <text x="388" y="692">"alarm_status"</text>
                  <text x="248" y="708">}</text>
                  <text x="284" y="708">//</text>
                  <text x="336" y="708">Encrypted</text>
                  <text x="396" y="708">with</text>
                  <text x="448" y="708">CTX_C_S</text>
                  <text x="240" y="724">}</text>
                  <text x="260" y="724">//</text>
                  <text x="312" y="724">Encrypted</text>
                  <text x="372" y="724">with</text>
                  <text x="424" 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
  |       |       | Uri-Host: "example.com",
  |       |       |   OSCORE: [kid:0x20, Partial IV:31]
  |       |       |     0xff
  |       |       |  Payload: {Code: 0.02 (POST),
  |       |       |            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
  |       |       |  OSCORE: [kid:0xd4, Partial IV:53]
  |       |       |    0xff
  |       |       | Payload: {Code: 0.02 (POST),
  |       |       |           Uri-Host: "example.com",
  |       |       |           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 EDHOC; 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 EDHOC <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 EDHOC</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="320" y="148">EDHOC</text>
                  <text x="388" 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="264" y="228">EDHOC</text>
                  <text x="328" 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="312" y="388">EDHOC</text>
                  <text x="380" 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="328" y="740">EDHOC</text>
                  <text x="396" 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="320" y="948">EDHOC</text>
                  <text x="388" 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="264" y="1028">EDHOC</text>
                  <text x="328" 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="272" y="1220">EDHOC</text>
                  <text x="336" 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="320" y="1604">EDHOC</text>
                  <text x="388" 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="312" y="1812">EDHOC</text>
                  <text x="380" 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="280" y="2196">OSCORE:</text>
                  <text x="356" y="2196">[kid:0x5f,</text>
                  <text x="432" y="2196">Partial</text>
                  <text x="492" y="2196">IV:0],</text>
                  <text x="288" y="2212">Uri-Host:</text>
                  <text x="388" y="2212">"example.com",</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, EDHOC message_1)
  |       |       |
  |<------+       |     Code: 2.04 (Changed)
  |  2.04 |       |    Token: 0xf3
  |       |       |     0xff
  |       |       |  Payload: EDHOC message_2
  |       |       |
Establish |       |
CTX_C_P   |       |
  |       |       |
  +------>|       |     Code: 0.02 (POST)
  | POST  |       |    Token: 0x82
  |       |       | Uri-Path: ".well-known"
  |       |       | Uri-Path: "edhoc"
  |       |       |     0xff
  |       |       |  Payload: (C_R, EDHOC 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, EDHOC 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, EDHOC message_1)
  |       |       |
  |       |<------+     Code: 2.04 (Changed)
  |       |  2.04 |    Token: 0xa5
  |       |       |     0xff
  |       |       |  Payload: EDHOC message_2
  |       |       |
  |     Encrypt   |
  |     RESP with |
  |     CTX_C_P   |
  |       |       |
  |<------+       |     Code: 2.04 (Changed)
  |  2.04 |       |    Token: 0xbe
  |       |       |   OSCORE: -
  |       |       |     0xff
  |       |       |  Payload: {Code: 2.04 (Changed),
  |       |       |            0xff,
  |       |       |            EDHOC 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, EDHOC 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, EDHOC 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),
  |       |       |            OSCORE: [kid:0x5f, Partial IV:0],
  |       |       |            Uri-Host: "example.com",
  |       |       |            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 EDHOC (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 EDHOC <xref target="RFC9528"/>.</t>
        <t>In particular, the client relies on the EDHOC + OSCORE request defined in <xref target="RFC9668"/> and denoted as COMB_REQ, in order to transport the last EDHOC 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 EDHOC + OSCORE request that conveys both the last EDHOC 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 EDHOC using the EDHOC + 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="320" y="148">EDHOC</text>
                  <text x="388" 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="256" y="228">EDHOC</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="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="264" y="532">EDHOC</text>
                  <text x="332" y="532">message_3,</text>
                  <text x="388" y="532">//</text>
                  <text x="436" y="532">Intended</text>
                  <text x="488" y="532">for</text>
                  <text x="512" 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="328" y="644">EDHOC</text>
                  <text x="396" 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="320" y="964">EDHOC</text>
                  <text x="388" 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="256" y="1044">EDHOC</text>
                  <text x="320" 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="272" y="1236">EDHOC</text>
                  <text x="336" 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="272" y="1780">EDHOC</text>
                  <text x="340" y="1780">message_3,</text>
                  <text x="396" y="1780">//</text>
                  <text x="444" y="1780">Intended</text>
                  <text x="496" y="1780">for</text>
                  <text x="520" 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="264" y="2068">EDHOC</text>
                  <text x="332" y="2068">message_3,</text>
                  <text x="388" y="2068">//</text>
                  <text x="436" y="2068">Intended</text>
                  <text x="488" y="2068">for</text>
                  <text x="512" 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, EDHOC message_1)
  |       |       |
  |<------+       |    Code: 2.04 (Changed)
  |  2.04 |       |   Token: 0xf3
  |       |       |    0xff
  |       |       | Payload: EDHOC 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: EDHOC 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, EDHOC 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, EDHOC message_1)
  |       |       |
  |       |<------+    Code: 2.04 (Changed)
  |       |  2.04 |   Token: 0xa5
  |       |       |    0xff
  |       |       | Payload: EDHOC message_2
  |       |       |
  |     Encrypt   |
  |     RESP with |
  |     CTX_C_P   |
  |       |       |
  |<------+       |     Code: 2.04 (Changed)
  |  2.04 |       |    Token: 0x82
  |       |       |   OSCORE: -
  |       |       |     0xff
  |       |       |  Payload: {Code: 2.04 (Changed),
  |       |       |            0xff,
  |       |       |            EDHOC 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,
  |       |       |            EDHOC 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: EDHOC 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-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 the 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="1152" width="576" viewBox="0 0 576 1152" 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,496 L 24,656" 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,488" fill="none" stroke="black"/>
              <path d="M 40,704 L 40,1120" fill="none" stroke="black"/>
              <path d="M 64,1024 L 64,1056" fill="none" stroke="black"/>
              <path d="M 80,784 L 80,816" fill="none" stroke="black"/>
              <path d="M 80,848 L 80,1016" fill="none" stroke="black"/>
              <path d="M 104,336 L 104,384" fill="none" stroke="black"/>
              <path d="M 112,752 L 112,800" fill="none" stroke="black"/>
              <path d="M 112,896 L 112,944" fill="none" stroke="black"/>
              <path d="M 112,1104 L 112,1136" fill="none" stroke="black"/>
              <path d="M 184,336 L 184,400" fill="none" stroke="black"/>
              <path d="M 208,408 L 208,432" fill="none" stroke="black"/>
              <path d="M 208,464 L 208,488" fill="none" stroke="black"/>
              <path d="M 208,992 L 208,1016" fill="none" stroke="black"/>
              <path d="M 216,704 L 216,744" fill="none" stroke="black"/>
              <path d="M 232,496 L 232,656" fill="none" stroke="black"/>
              <path d="M 264,1024 L 264,1056" fill="none" stroke="black"/>
              <path d="M 312,496 L 312,576" fill="none" stroke="black"/>
              <path d="M 328,624 L 328,744" fill="none" stroke="black"/>
              <path d="M 328,848 L 328,888" fill="none" stroke="black"/>
              <path d="M 328,992 L 328,1096" fill="none" stroke="black"/>
              <path d="M 336,336 L 336,400" fill="none" stroke="black"/>
              <path d="M 344,752 L 344,800" fill="none" stroke="black"/>
              <path d="M 416,336 L 416,416" fill="none" stroke="black"/>
              <path d="M 440,896 L 440,944" fill="none" stroke="black"/>
              <path d="M 472,464 L 472,488" fill="none" stroke="black"/>
              <path d="M 472,624 L 472,1096" fill="none" stroke="black"/>
              <path d="M 488,496 L 488,576" fill="none" stroke="black"/>
              <path d="M 488,1104 L 488,1136" fill="none" stroke="black"/>
              <path d="M 552,464 L 552,1120" 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,496 L 232,496" fill="none" stroke="black"/>
              <path d="M 312,496 L 488,496" fill="none" stroke="black"/>
              <path d="M 312,576 L 488,576" fill="none" stroke="black"/>
              <path d="M 24,656 L 232,656" fill="none" stroke="black"/>
              <path d="M 112,752 L 344,752" fill="none" stroke="black"/>
              <path d="M 80,784 L 104,784" fill="none" stroke="black"/>
              <path d="M 112,800 L 344,800" fill="none" stroke="black"/>
              <path d="M 112,896 L 440,896" fill="none" stroke="black"/>
              <path d="M 112,944 L 440,944" fill="none" stroke="black"/>
              <path d="M 64,1024 L 264,1024" fill="none" stroke="black"/>
              <path d="M 64,1056 L 264,1056" fill="none" stroke="black"/>
              <path d="M 112,1104 L 488,1104" fill="none" stroke="black"/>
              <path d="M 40,1120 L 104,1120" fill="none" stroke="black"/>
              <path d="M 496,1120 L 552,1120" fill="none" stroke="black"/>
              <path d="M 112,1136 L 488,1136" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="504,1120 492,1114.4 492,1125.6" fill="black" transform="rotate(180,496,1120)"/>
              <polygon class="arrowhead" points="480,1096 468,1090.4 468,1101.6" fill="black" transform="rotate(90,472,1096)"/>
              <polygon class="arrowhead" points="480,488 468,482.4 468,493.6" fill="black" transform="rotate(90,472,488)"/>
              <polygon class="arrowhead" points="416,352 404,346.4 404,357.6" fill="black" transform="rotate(0,408,352)"/>
              <polygon class="arrowhead" points="336,1096 324,1090.4 324,1101.6" fill="black" transform="rotate(90,328,1096)"/>
              <polygon class="arrowhead" points="336,888 324,882.4 324,893.6" fill="black" transform="rotate(90,328,888)"/>
              <polygon class="arrowhead" points="336,744 324,738.4 324,749.6" fill="black" transform="rotate(90,328,744)"/>
              <polygon class="arrowhead" points="224,744 212,738.4 212,749.6" fill="black" transform="rotate(90,216,744)"/>
              <polygon class="arrowhead" points="216,1016 204,1010.4 204,1021.6" fill="black" transform="rotate(90,208,1016)"/>
              <polygon class="arrowhead" points="216,488 204,482.4 204,493.6" fill="black" transform="rotate(90,208,488)"/>
              <polygon class="arrowhead" points="184,352 172,346.4 172,357.6" fill="black" transform="rotate(0,176,352)"/>
              <polygon class="arrowhead" points="112,1120 100,1114.4 100,1125.6" fill="black" transform="rotate(0,104,1120)"/>
              <polygon class="arrowhead" points="88,1016 76,1010.4 76,1021.6" fill="black" transform="rotate(90,80,1016)"/>
              <polygon class="arrowhead" points="48,488 36,482.4 36,493.6" fill="black" transform="rotate(90,40,488)"/>
              <polygon class="arrowhead" points="48,328 36,322.4 36,333.6" fill="black" transform="rotate(90,40,328)"/>
              <circle cx="40" cy="512" r="6" class="closeddot" fill="black"/>
              <circle cx="40" cy="592" 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="472" y="436">|</text>
                <text x="552" y="436">|</text>
                <text x="44" y="452">NO</text>
                <text x="212" y="452">NO</text>
                <text x="472" y="452">YES</text>
                <text x="556" y="452">NO</text>
                <text x="60" y="516">As</text>
                <text x="88" y="516">far</text>
                <text x="116" y="516">as</text>
                <text x="136" y="516">I</text>
                <text x="160" y="516">can</text>
                <text x="200" y="516">tell,</text>
                <text x="340" y="516">Does</text>
                <text x="368" y="516">X</text>
                <text x="396" y="516">need</text>
                <text x="428" y="516">to</text>
                <text x="56" y="532">X</text>
                <text x="76" y="532">is</text>
                <text x="100" y="532">my</text>
                <text x="132" y="532">next</text>
                <text x="172" y="532">hop;</text>
                <text x="348" y="532">access</text>
                <text x="392" y="532">OPT</text>
                <text x="436" y="532">before</text>
                <text x="364" y="548">decrypting</text>
                <text x="416" y="548">M</text>
                <text x="436" y="548">or</text>
                <text x="460" y="548">in</text>
                <text x="44" y="564">OR</text>
                <text x="344" y="564">order</text>
                <text x="380" y="564">to</text>
                <text x="424" y="564">decrypt</text>
                <text x="468" y="564">M?</text>
                <text x="60" y="596">As</text>
                <text x="88" y="596">far</text>
                <text x="116" y="596">as</text>
                <text x="136" y="596">I</text>
                <text x="160" y="596">can</text>
                <text x="200" y="596">tell,</text>
                <text x="328" y="596">|</text>
                <text x="472" y="596">|</text>
                <text x="60" y="612">my</text>
                <text x="92" y="612">next</text>
                <text x="128" y="612">hop</text>
                <text x="156" y="612">is</text>
                <text x="184" y="612">not</text>
                <text x="332" y="612">NO</text>
                <text x="472" y="612">YES</text>
                <text x="64" y="628">the</text>
                <text x="128" y="628">immediately</text>
                <text x="196" y="628">next</text>
                <text x="84" y="644">consumer</text>
                <text x="132" y="644">of</text>
                <text x="160" y="644">OPT</text>
                <text x="40" y="676">|</text>
                <text x="216" y="676">|</text>
                <text x="44" y="692">NO</text>
                <text x="216" y="692">YES</text>
                <text x="132" y="772">Is</text>
                <text x="160" y="772">OPT</text>
                <text x="192" y="772">the</text>
                <text x="244" y="772">Uri-Host</text>
                <text x="308" y="772">Option</text>
                <text x="132" y="788">or</text>
                <text x="160" y="788">the</text>
                <text x="212" y="788">Uri-Port</text>
                <text x="280" y="788">Option?</text>
                <text x="328" y="820">|</text>
                <text x="84" y="836">NO</text>
                <text x="328" y="836">YES</text>
                <text x="140" y="916">Does</text>
                <text x="168" y="916">M</text>
                <text x="208" y="916">include</text>
                <text x="256" y="916">the</text>
                <text x="324" y="916">Proxy-Scheme</text>
                <text x="404" y="916">Option</text>
                <text x="132" y="932">or</text>
                <text x="160" y="932">the</text>
                <text x="256" y="932">Proxy-Scheme-Number</text>
                <text x="368" y="932">Option?</text>
                <text x="208" y="964">|</text>
                <text x="328" y="964">|</text>
                <text x="208" y="980">YES</text>
                <text x="332" y="980">NO</text>
                <text x="104" y="1044">Process</text>
                <text x="152" y="1044">OPT</text>
                <text x="180" y="1044">as</text>
                <text x="216" y="1044">Class</text>
                <text x="248" y="1044">E</text>
                <text x="152" y="1124">Process</text>
                <text x="200" y="1124">OPT</text>
                <text x="228" y="1124">as</text>
                <text x="256" y="1124">per</text>
                <text x="288" y="1124">its</text>
                <text x="340" y="1124">original</text>
                <text x="400" y="1124">Class</text>
                <text x="432" y="1124">U</text>
                <text x="452" y="1124">or</text>
                <text x="472" y="1124">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, |           |                 |         |
  |   my next hop is not    |           NO               YES        |
  |   the immediately next  |           |                 |         |
  |   consumer of OPT       |           |                 |         |
  +-------------------------+           |                 |         |
    |                     |             |                 |         |
    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 312,1680 L 312,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 312,1680" fill="none" stroke="black"/>
              <path d="M 352,1712 L 368,1712" fill="none" stroke="black"/>
              <path d="M 8,1760 L 312,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="40" y="1716">exact</text>
                <text x="88" y="1716">value</text>
                <text x="124" y="1716">of</text>
                <text x="152" y="1716">the</text>
                <text x="204" y="1716">included</text>
                <text x="272" 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="272" y="1732">and</text>
                <text x="80" y="1748">Uri-Path-Abbrev</text>
                <text x="160" y="1748">for</text>
                <text x="216" 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      |      |
| exact value of the included 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-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:
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
VBltZfLNo93Hj3aB8///Xl4ipZ/CAQA=

-->

</rfc>
