<?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.24 (Ruby 3.3.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-oscore-capable-proxies-04" category="std" consensus="true" submissionType="IETF" updates="8613, 8768" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.27.0 -->
  <front>
    <title abbrev="OSCORE-capable Proxies">OSCORE-capable Proxies</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-capable-proxies-04"/>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440</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>16440</code>
          <country>Sweden</country>
        </postal>
        <email>rikard.hoglund@ri.se</email>
      </address>
    </author>
    <date year="2025" month="March" day="03"/>
    <area>Internet</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 89?>

<t>Object Security for Constrained RESTful Environments (OSCORE) can be used to protect CoAP messages end-to-end between two endpoints at the application layer, 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 option Hop-Limit. The approach defined in this document can be seamlessly used 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 93?>

<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 supports also 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 <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 also 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 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 used also 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 require to consider also 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, and 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 next hop towards the origin server).</t>
        </li>
      </ul>
      <t>Furthermore, this document updates <xref target="RFC8768"/>, as it explicitly defines the CoAP option Hop-Limit 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 specify any new signaling method to guide the message processing on the different endpoints. In particular, every endpoint is always able to understand what steps to take on an incoming message, depending on the presence of the OSCORE option and of other CoAP options intended for an intermediary.</t>
      <t>The approach defined in this document can be seamlessly adopted 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"/> and <xref target="I-D.ietf-core-href"/>.  </t>
            <ul spacing="normal">
              <li>
                <t>The Proxy-Uri option or the Proxy-Cri option. 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 any of the Uri-* options. This is relevant when using a forward-proxy.</t>
              </li>
              <li>
                <t>The set of CoAP options comprising any of the Uri-Host, Uri-Port, and Uri-Path options, 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 relying on a longer chain of intermediaries. For instance, the origin client can sequentially apply multiple OSCORE layers to a request, each of which 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, and also 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 they were removed (see <xref target="outgoing-responses"/>).</t>
          </li>
        </ul>
      </section>
      <section anchor="general-rules">
        <name>Protection of CoAP Options</name>
        <t>Let us consider a sender endpoint that, when protecting an outgoing message M, applies the i-th OSCORE layer in sequence, by using the OSCORE Security Context shared 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 another 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>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 or 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 or 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 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 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: the Proxy-Uri option; the Proxy-Cri option; the Proxy-Scheme option or the Proxy-Scheme-Number option, together with any of the Uri-* options.      </t>
                <t>
If the endpoint is not configured to be a forward-proxy, it <bcp14>MUST</bcp14> stop processing the request and <bcp14>MUST</bcp14> respond 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 this request 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 the incoming message, before performing this step.      </t>
                <t>
In case the check fails, the endpoint <bcp14>MUST</bcp14> stop processing the request and <bcp14>MUST</bcp14> respond with a 4.01 (Unauthorized) 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>
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 (host and port) of the request URI identifies the endpoint itself. In such a case, 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-Notifications option (see <xref section="12" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>).      </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 one or more Uri-Path options, and/or the Uri-Host option, and/or the Uri-Port option.      </t>
                <t>
If the endpoint is not configured to be a reverse-proxy, or what is targeted by the value of the Uri-Path, Uri-Host, and Uri-Port options is not intended to support reverse-proxy functionalities, then the endpoint proceeds to Step 3.      </t>
                <t>
Otherwise, the endpoint <bcp14>MUST</bcp14> check whether forwarding this request 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 the incoming message, before performing this step.      </t>
                <t>
In case the check fails, the endpoint <bcp14>MUST</bcp14> stop processing the request and <bcp14>MUST</bcp14> respond with a 4.01 (Unauthorized) 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 consumes the present Uri-Path, Uri-Host, and Uri-Port 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>
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>
                <t>
Note that, when forwarding REQ, the endpoint might not remove all the Uri-Path options originally present, e.g., in case the next hop towards the origin server is a reverse-proxy.</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.00 (Bad Request) 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>
If REQ includes any Uri-Path options, the endpoint <bcp14>MUST</bcp14> stop processing the request and <bcp14>MAY</bcp14> respond with a 4.00 (Bad Request) 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 <bcp14>MUST</bcp14> check whether decrypting the request is an acceptable operation to perform, according to the endpoint's configuration and a possible authorization enforcement, and in view of the (previous hop towards the) origin client being the alleged request sender. This check can be based, for instance, on considering the source addressing information of the request, and then asserting whether the OSCORE Security Context indicated by the OSCORE option is 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>
In case the check fails, the endpoint <bcp14>MUST</bcp14> stop processing the request and <bcp14>MUST</bcp14> respond with a 4.01 (Unauthorized) 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>
Instead, in case the check succeeds, the endpoint decrypts REQ using the OSCORE Security Context indicated by the OSCORE option, which 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 OSCORE processing results in an error, the endpoint <bcp14>MUST</bcp14> stop processing the request 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>
      <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>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 <bcp14>MUST</bcp14> be applied by using that Security Context.</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 they were removed.</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 they were removed.</t>
      </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 they 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>
    </section>
    <section anchor="sec-hop-limit">
      <name>OSCORE Processing of the Hop-Limit Option</name>
      <t>The CoAP option Hop-Limit is defined in <xref target="RFC8768"/> and can be used to detect forwarding loops through a chain of proxies. The first proxy in the chain that understands the option can include it in a received request (if not present already), then sets 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 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 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.amsuess-core-cachable-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 (in the REST sense) to process and 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 a 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 exactly 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 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 exactly 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 both 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 and results in the possible protection of the same CoAP message with multiple, nested OSCORE layers. Especially when this 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 to 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 consistently 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 used OSCORE Security Context.  </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, and 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 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 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 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 a corresponding Outer SCHC Decompression on an incoming message, by relying on the SCHC Rules shared with the previous hop towards the destination application endpoint.</t>
        </li>
        <li>
          <t>Unless it is exactly the destination application endpoint, it performs a new Outer SCHC Compression on the result from the previous step, by relying on the 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 specifically used CoAP options, extensions, and methods employed 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>Before decrypting an incoming request (see Step 3 in <xref target="incoming-requests"/>), the recipient endpoint checks whether decrypting the request is an acceptable operation to perform, according to the endpoint's configuration and a possible authorization enforcement, and in the light of the alleged request sender and the OSCORE Security Context to use.</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), 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 unfolding 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="8" month="February" 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 CoAP messages exchanged 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 any 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-24"/>
        </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="3" month="February" 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) instead of in a
   sequence of characters.  This simplifies parsing, comparison, and
   reference resolution in environments with severe limitations on
   processing power, code size, and memory size.

   This RFC updates RFC 7595 to add a note on how the URI Schemes
   registry RFC 7595 describes cooperates with the CRI Scheme Numbers
   registry created by the present RFC.


   // (This "cref" paragraph will be removed by the RFC editor:) The
   // present revision –18 integrates two small changes from the CoRE
   // interim on 2025-01-29 and should be ready for WGLC.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-18"/>
        </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="Ivan Martinez" initials="I." surname="Martinez">
              <organization>Nokia Bell Labs</organization>
            </author>
            <author fullname="Ana Minaburo" initials="A." surname="Minaburo">
              <organization>Consultant</organization>
            </author>
            <date day="3" month="March" 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/UDP headers,
   this document applies SCHC to CoAP headers.  The CoAP header
   structure differs from IPv6 and UDP, since CoAP uses a flexible
   header with a variable number of options, themselves of variable
   length.  The CoAP message format is asymmetric: the request messages
   have a header format different from the format in the response
   messages.  This specification gives guidance on applying SCHC to
   flexible headers and how to leverage the asymmetry for more efficient
   compression Rules.  This document replaces and obsoletes RFC 8824.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-schc-8824-update-04"/>
        </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="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="24" month="February" year="2025"/>
            <abstract>
              <t>   This document specifies the use of the Constrained Application
   Protocol (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-13"/>
        </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="March" year="2025"/>
            <abstract>
              <t>   This document specifies the operations performed by a proxy, when
   using the Constrained Application Protocol (CoAP) in group
   communication scenarios.  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-04"/>
        </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="3" month="March" year="2025"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP) allows clients to
   "observe" resources at a server, and 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 a 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
   a same resource on a same shared Token value.  Besides, this document
   defines how 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-11"/>
        </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="21" month="October" year="2024"/>
            <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-07"/>
        </reference>
        <reference anchor="I-D.ietf-ace-key-groupcomm-oscore">
          <front>
            <title>Key Management for OSCORE Groups in ACE</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Jiye Park" initials="J." surname="Park">
              <organization>Universitaet Duisburg-Essen</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="6" month="March" year="2023"/>
            <abstract>
              <t>   This document defines an application profile of the ACE framework for
   Authentication and Authorization, to request and provision keying
   material in group communication scenarios that are based on CoAP and
   are secured with Group Object Security for Constrained RESTful
   Environments (Group OSCORE).  This application profile delegates the
   authentication and authorization of Clients, that 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 for 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-16"/>
        </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="Massimo Nilo" initials="M." surname="Nilo">
              <organization>Telecom Italia</organization>
            </author>
            <author fullname="Fabio Bulgarella" initials="F." surname="Bulgarella">
              <organization>Telecom Italia</organization>
            </author>
            <date day="3" month="October" year="2024"/>
            <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-03"/>
        </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="21" month="October" year="2024"/>
            <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-06"/>
        </reference>
        <reference anchor="I-D.amsuess-core-cachable-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="8" month="January" 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-amsuess-core-cachable-oscore-10"/>
        </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="17" month="November" year="2024"/>
            <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 (The Onion Router) enables
   it for TCP-based protocols.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-amsuess-t2trg-onion-coap-03"/>
        </reference>
        <reference anchor="LwM2M-Core" target="http://www.openmobilealliance.org/release/LightweightM2M/V1_2-20201110-A/OMA-TS-LightweightM2M_Core-V1_2-20201110-A.pdf">
          <front>
            <title>Lightweight Machine to Machine Technical Specification - Core, Approved Version 1.2, OMA-TS-LightweightM2M_Core-V1_2-20201110-A</title>
            <author>
              <organization>Open Mobile Alliance</organization>
            </author>
            <date year="2020" month="November"/>
          </front>
        </reference>
        <reference anchor="LwM2M-Transport" target="http://www.openmobilealliance.org/release/LightweightM2M/V1_2-20201110-A/OMA-TS-LightweightM2M_Transport-V1_2-20201110-A.pdf">
          <front>
            <title>Lightweight Machine to Machine Technical Specification - Transport Bindings, Approved Version 1.2, OMA-TS-LightweightM2M_Transport-V1_2-20201110-A</title>
            <author>
              <organization>Open Mobile Alliance</organization>
            </author>
            <date year="2020" month="November"/>
          </front>
        </reference>
        <reference anchor="LwM2M-Gateway" target="https://www.openmobilealliance.org/release/LwM2M_Gateway/V1_1-20210518-A/OMA-TS-LWM2M_Gateway-V1_1-20210518-A.pdf">
          <front>
            <title>Lightweight Machine to Machine Gateway Technical Specification - Approved Version 1.1, OMA-TS-LWM2M_Gateway-V1_1-20210518-A</title>
            <author>
              <organization>Open Mobile Alliance</organization>
            </author>
            <date year="2021" month="May"/>
          </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>
      </references>
    </references>
    <?line 472?>

<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 supports also one-to-many group communication, e.g., over IP multicast <xref target="I-D.ietf-core-groupcomm-bis"/>, 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 they can be distinguished from one another.</t>
        <t>In particular, it is required 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"/>). This requires a security association between the origin client and the proxy, which would be convenient to provide with a dedicated OSCORE Security Context 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 pub-sub <xref target="I-D.ietf-core-coap-pubsub"/>, multiple clients are interested in observing the same resource at the same server. Hence, <xref target="I-D.ietf-core-observe-multicast-notifications"/> defines a method that allows the server to send a multicast notification 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="12" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>). 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="15.3" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>). Like for the use case in <xref target="ssec-uc1"/>, this would be conveniently achieved with a dedicated OSCORE Security Context 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.5.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.</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 CoAP client sends its request to the LwM2M Gateway acting as 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 "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 reverse-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>A server aware of a suitable cross-proxy can rely on it as a third-party service, in order to indicate transports for CoAP available to that server (see <xref section="4" sectionFormat="of" target="I-D.ietf-core-transport-indication"/>).  </t>
            <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 which 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>
          </li>
          <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>A proxy may be deployed to act as an entry point to a firewalled network that only authenticated clients can join. In particular, authentication can rely on the used secure communication association 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>
          </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="with-forward-proxy-oscore-c-s-c-p">
        <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"/>
                <path d="M 264,384 L 272,368" fill="none" stroke="black"/>
                <path d="M 272,384 L 284,360" fill="none" stroke="black"/>
                <path d="M 264,1152 L 272,1136" fill="none" stroke="black"/>
                <path d="M 272,1152 L 280,1136" 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="328" y="372">Encrypted</text>
                  <text x="388" y="372">with</text>
                  <text x="440" y="372">CTX_C_S</text>
                  <text x="248" 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="328" y="1140">Encrypted</text>
                  <text x="388" y="1140">with</text>
                  <text x="440" y="1140">CTX_C_S</text>
                  <text x="248" 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"/>
                <path d="M 296,528 L 304,512" fill="none" stroke="black"/>
                <path d="M 304,528 L 316,504" fill="none" stroke="black"/>
                <path d="M 296,992 L 304,976" fill="none" stroke="black"/>
                <path d="M 304,992 L 312,976" 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="360" y="516">Encrypted</text>
                  <text x="420" y="516">with</text>
                  <text x="472" y="516">CTX_C_S</text>
                  <text x="280" 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="360" y="980">Encrypted</text>
                  <text x="420" y="980">with</text>
                  <text x="472" y="980">CTX_C_S</text>
                  <text x="280" 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"/>
                <path d="M 264,384 L 272,368" fill="none" stroke="black"/>
                <path d="M 272,384 L 284,360" fill="none" stroke="black"/>
                <path d="M 256,720 L 264,704" fill="none" stroke="black"/>
                <path d="M 264,720 L 276,696" fill="none" stroke="black"/>
                <path d="M 256,1184 L 264,1168" fill="none" stroke="black"/>
                <path d="M 264,1184 L 272,1168" fill="none" stroke="black"/>
                <path d="M 256,1520 L 264,1504" fill="none" stroke="black"/>
                <path d="M 264,1520 L 272,1504" 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="328" y="372">Encrypted</text>
                  <text x="388" y="372">with</text>
                  <text x="440" y="372">CTX_C_S</text>
                  <text x="248" 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:31]</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="320" y="708">Encrypted</text>
                  <text x="380" y="708">with</text>
                  <text x="432" y="708">CTX_C_S</text>
                  <text x="240" 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="320" y="1172">Encrypted</text>
                  <text x="380" y="1172">with</text>
                  <text x="432" y="1172">CTX_C_S</text>
                  <text x="240" 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="320" y="1508">Encrypted</text>
                  <text x="380" y="1508">with</text>
                  <text x="432" y="1508">CTX_C_S</text>
                  <text x="240" 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:31]
  |       |       |    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 an OSCORE Security Context CTX_C_P with the proxy and CTX_C_S with the server, by using the key exchange protocol EDHOC <xref target="RFC9528"/>.</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="3248" width="544" viewBox="0 0 544 3248" 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,1288 L 24,1296" fill="none" stroke="black"/>
                <path d="M 24,1352 L 24,1904" fill="none" stroke="black"/>
                <path d="M 24,1960 L 24,1968" fill="none" stroke="black"/>
                <path d="M 24,2024 L 24,3008" fill="none" stroke="black"/>
                <path d="M 24,3064 L 24,3072" fill="none" stroke="black"/>
                <path d="M 24,3128 L 24,3136" 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,1568" fill="none" stroke="black"/>
                <path d="M 88,1624 L 88,2256" fill="none" stroke="black"/>
                <path d="M 88,2312 L 88,2736" fill="none" stroke="black"/>
                <path d="M 88,2792 L 88,3136" fill="none" stroke="black"/>
                <path d="M 152,48 L 152,1760" fill="none" stroke="black"/>
                <path d="M 152,1800 L 152,2464" fill="none" stroke="black"/>
                <path d="M 152,2520 L 152,2528" fill="none" stroke="black"/>
                <path d="M 152,2584 L 152,3136" 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,1376 L 80,1376" fill="none" stroke="black"/>
                <path d="M 88,1648 L 144,1648" fill="none" stroke="black"/>
                <path d="M 96,1824 L 152,1824" fill="none" stroke="black"/>
                <path d="M 32,1872 L 88,1872" fill="none" stroke="black"/>
                <path d="M 24,2048 L 80,2048" fill="none" stroke="black"/>
                <path d="M 88,2336 L 144,2336" fill="none" stroke="black"/>
                <path d="M 96,2608 L 152,2608" fill="none" stroke="black"/>
                <path d="M 32,2816 L 88,2816" fill="none" stroke="black"/>
                <path d="M 264,1552 L 268,1544" fill="none" stroke="black"/>
                <path d="M 264,2240 L 272,2224" fill="none" stroke="black"/>
                <path d="M 272,2240 L 284,2216" fill="none" stroke="black"/>
                <path d="M 264,2992 L 272,2976" fill="none" stroke="black"/>
                <path d="M 272,2992 L 280,2976" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="152,2336 140,2330.4 140,2341.6" fill="black" transform="rotate(0,144,2336)"/>
                <polygon class="arrowhead" points="152,1648 140,1642.4 140,1653.6" fill="black" transform="rotate(0,144,1648)"/>
                <polygon class="arrowhead" points="152,848 140,842.4 140,853.6" fill="black" transform="rotate(0,144,848)"/>
                <polygon class="arrowhead" points="104,2608 92,2602.4 92,2613.6" fill="black" transform="rotate(180,96,2608)"/>
                <polygon class="arrowhead" points="104,1824 92,1818.4 92,1829.6" fill="black" transform="rotate(180,96,1824)"/>
                <polygon class="arrowhead" points="104,976 92,970.4 92,981.6" fill="black" transform="rotate(180,96,976)"/>
                <polygon class="arrowhead" points="88,2048 76,2042.4 76,2053.6" fill="black" transform="rotate(0,80,2048)"/>
                <polygon class="arrowhead" points="88,1376 76,1370.4 76,1381.6" fill="black" transform="rotate(0,80,1376)"/>
                <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,2816 28,2810.4 28,2821.6" fill="black" transform="rotate(180,32,2816)"/>
                <polygon class="arrowhead" points="40,1872 28,1866.4 28,1877.6" fill="black" transform="rotate(180,32,1872)"/>
                <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="40" y="1268">Establish</text>
                  <text x="32" y="1284">CTX_C_S</text>
                  <text x="32" y="1316">Encrypt</text>
                  <text x="16" y="1332">REQ</text>
                  <text x="52" y="1332">with</text>
                  <text x="32" y="1348">CTX_C_P</text>
                  <text x="216" y="1380">Code:</text>
                  <text x="260" y="1380">0.02</text>
                  <text x="308" y="1380">(POST)</text>
                  <text x="52" y="1396">POST</text>
                  <text x="212" y="1396">Token:</text>
                  <text x="260" y="1396">0xb9</text>
                  <text x="208" y="1412">OSCORE:</text>
                  <text x="284" y="1412">[kid:0x20,</text>
                  <text x="360" y="1412">Partial</text>
                  <text x="416" y="1412">IV:1]</text>
                  <text x="212" y="1428">0xff</text>
                  <text x="204" y="1444">Payload:</text>
                  <text x="268" y="1444">{Code:</text>
                  <text x="316" y="1444">0.02</text>
                  <text x="368" y="1444">(POST),</text>
                  <text x="288" y="1460">Uri-Host:</text>
                  <text x="388" y="1460">"example.com",</text>
                  <text x="288" y="1476">Uri-Path:</text>
                  <text x="388" y="1476">".well-known",</text>
                  <text x="288" y="1492">Uri-Path:</text>
                  <text x="364" y="1492">"edhoc",</text>
                  <text x="304" y="1508">Proxy-Scheme:</text>
                  <text x="392" y="1508">"coap",</text>
                  <text x="272" y="1524">0xff,</text>
                  <text x="272" y="1540">(C_R,</text>
                  <text x="320" y="1540">EDHOC</text>
                  <text x="388" y="1540">message_3)</text>
                  <text x="248" y="1556">}</text>
                  <text x="272" y="1556">/</text>
                  <text x="320" y="1556">Encrypted</text>
                  <text x="380" y="1556">with</text>
                  <text x="432" y="1556">CTX_C_P</text>
                  <text x="96" y="1588">Decrypt</text>
                  <text x="80" y="1604">REQ</text>
                  <text x="116" y="1604">with</text>
                  <text x="96" y="1620">CTX_C_P</text>
                  <text x="216" y="1652">Code:</text>
                  <text x="260" y="1652">0.02</text>
                  <text x="308" y="1652">(POST)</text>
                  <text x="116" y="1668">POST</text>
                  <text x="212" y="1668">Token:</text>
                  <text x="260" y="1668">0xdd</text>
                  <text x="200" y="1684">Uri-Host:</text>
                  <text x="300" y="1684">"example.com",</text>
                  <text x="200" y="1700">Uri-Path:</text>
                  <text x="296" y="1700">".well-known"</text>
                  <text x="200" y="1716">Uri-Path:</text>
                  <text x="272" y="1716">"edhoc"</text>
                  <text x="212" y="1732">0xff</text>
                  <text x="204" y="1748">Payload:</text>
                  <text x="264" y="1748">(C_R,</text>
                  <text x="312" y="1748">EDHOC</text>
                  <text x="380" y="1748">message_3)</text>
                  <text x="168" y="1780">Establish</text>
                  <text x="160" y="1796">CTX_C_S</text>
                  <text x="120" y="1844">ACK</text>
                  <text x="56" y="1892">ACK</text>
                  <text x="32" y="1924">Encrypt</text>
                  <text x="16" y="1940">REQ</text>
                  <text x="52" y="1940">with</text>
                  <text x="32" y="1956">CTX_C_S</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_P</text>
                  <text x="216" y="2052">Code:</text>
                  <text x="260" y="2052">0.02</text>
                  <text x="308" y="2052">(POST)</text>
                  <text x="52" y="2068">POST</text>
                  <text x="212" y="2068">Token:</text>
                  <text x="260" y="2068">0x8c</text>
                  <text x="208" y="2084">OSCORE:</text>
                  <text x="284" y="2084">[kid:0x20,</text>
                  <text x="360" y="2084">Partial</text>
                  <text x="416" y="2084">IV:2]</text>
                  <text x="212" y="2100">0xff</text>
                  <text x="204" y="2116">Payload:</text>
                  <text x="268" y="2116">{Code:</text>
                  <text x="316" y="2116">0.02</text>
                  <text x="368" y="2116">(POST),</text>
                  <text x="280" y="2132">OSCORE:</text>
                  <text x="356" y="2132">[kid:0x5f,</text>
                  <text x="432" y="2132">Partial</text>
                  <text x="492" y="2132">IV:0],</text>
                  <text x="288" y="2148">Uri-Host:</text>
                  <text x="388" y="2148">"example.com",</text>
                  <text x="304" y="2164">Proxy-Scheme:</text>
                  <text x="392" y="2164">"coap",</text>
                  <text x="272" y="2180">0xff,</text>
                  <text x="276" y="2196">{Code:</text>
                  <text x="324" y="2196">0.01</text>
                  <text x="372" y="2196">(GET),</text>
                  <text x="296" y="2212">Uri-Path:</text>
                  <text x="396" y="2212">"alarm_status"</text>
                  <text x="256" y="2228">}</text>
                  <text x="328" y="2228">Encrypted</text>
                  <text x="388" y="2228">with</text>
                  <text x="440" y="2228">CTX_C_S</text>
                  <text x="248" y="2244">}</text>
                  <text x="320" y="2244">Encrypted</text>
                  <text x="380" y="2244">with</text>
                  <text x="432" y="2244">CTX_C_P</text>
                  <text x="96" y="2276">Decrypt</text>
                  <text x="80" y="2292">REQ</text>
                  <text x="116" y="2292">with</text>
                  <text x="96" y="2308">CTX_C_P</text>
                  <text x="216" y="2340">Code:</text>
                  <text x="260" y="2340">0.02</text>
                  <text x="308" y="2340">(POST)</text>
                  <text x="116" y="2356">POST</text>
                  <text x="212" y="2356">Token:</text>
                  <text x="260" y="2356">0x7b</text>
                  <text x="200" y="2372">Uri-Host:</text>
                  <text x="300" y="2372">"example.com",</text>
                  <text x="208" y="2388">OSCORE:</text>
                  <text x="284" y="2388">[kid:0x5f,</text>
                  <text x="360" y="2388">Partial</text>
                  <text x="416" y="2388">IV:0]</text>
                  <text x="212" y="2404">0xff</text>
                  <text x="204" y="2420">Payload:</text>
                  <text x="268" y="2420">{Code:</text>
                  <text x="316" y="2420">0.01</text>
                  <text x="364" y="2420">(GET),</text>
                  <text x="288" y="2436">Uri-Path:</text>
                  <text x="388" y="2436">"alarm_status"</text>
                  <text x="248" y="2452">}</text>
                  <text x="268" y="2452">//</text>
                  <text x="320" y="2452">Encrypted</text>
                  <text x="380" y="2452">with</text>
                  <text x="432" y="2452">CTX_C_S</text>
                  <text x="160" y="2484">Decrypt</text>
                  <text x="144" y="2500">REQ</text>
                  <text x="180" y="2500">with</text>
                  <text x="160" y="2516">CTX_C_S</text>
                  <text x="160" y="2548">Encrypt</text>
                  <text x="148" y="2564">RESP</text>
                  <text x="188" y="2564">with</text>
                  <text x="160" y="2580">CTX_C_S</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="124" y="2628">2.04</text>
                  <text x="212" y="2628">Token:</text>
                  <text x="260" y="2628">0x7b</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.05</text>
                  <text x="380" y="2676">(Content),</text>
                  <text x="272" y="2692">0xff,</text>
                  <text x="264" y="2708">"0"</text>
                  <text x="248" y="2724">}</text>
                  <text x="268" y="2724">//</text>
                  <text x="320" y="2724">Encrypted</text>
                  <text x="380" y="2724">with</text>
                  <text x="432" y="2724">CTX_C_S</text>
                  <text x="96" y="2756">Encrypt</text>
                  <text x="84" y="2772">RESP</text>
                  <text x="124" y="2772">with</text>
                  <text x="96" y="2788">CTX_C_P</text>
                  <text x="216" y="2820">Code:</text>
                  <text x="260" y="2820">2.04</text>
                  <text x="320" y="2820">(Changed)</text>
                  <text x="60" y="2836">2.04</text>
                  <text x="212" y="2836">Token:</text>
                  <text x="260" y="2836">0x8c</text>
                  <text x="208" y="2852">OSCORE:</text>
                  <text x="248" y="2852">-</text>
                  <text x="212" y="2868">0xff</text>
                  <text x="204" y="2884">Payload:</text>
                  <text x="268" y="2884">{Code:</text>
                  <text x="316" y="2884">2.04</text>
                  <text x="380" y="2884">(Changed),</text>
                  <text x="280" y="2900">OSCORE:</text>
                  <text x="324" y="2900">-,</text>
                  <text x="272" y="2916">0xff,</text>
                  <text x="276" y="2932">{Code:</text>
                  <text x="324" y="2932">2.05</text>
                  <text x="388" y="2932">(Content),</text>
                  <text x="280" y="2948">0xff,</text>
                  <text x="272" y="2964">"0"</text>
                  <text x="256" y="2980">}</text>
                  <text x="328" y="2980">Encrypted</text>
                  <text x="388" y="2980">with</text>
                  <text x="440" y="2980">CTX_C_S</text>
                  <text x="248" y="2996">}</text>
                  <text x="320" y="2996">Encrypted</text>
                  <text x="380" y="2996">with</text>
                  <text x="432" y="2996">CTX_C_P</text>
                  <text x="32" y="3028">Decrypt</text>
                  <text x="20" y="3044">RESP</text>
                  <text x="60" y="3044">with</text>
                  <text x="32" 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_S</text>
                  <text x="28" y="3172">Square</text>
                  <text x="92" y="3172">brackets</text>
                  <text x="136" y="3172">[</text>
                  <text x="160" y="3172">...</text>
                  <text x="184" y="3172">]</text>
                  <text x="228" y="3172">indicate</text>
                  <text x="296" y="3172">content</text>
                  <text x="340" y="3172">of</text>
                  <text x="396" y="3172">compressed</text>
                  <text x="460" y="3172">COSE</text>
                  <text x="512" y="3172">object.</text>
                  <text x="24" y="3188">Curly</text>
                  <text x="84" y="3188">brackets</text>
                  <text x="128" y="3188">{</text>
                  <text x="152" y="3188">...</text>
                  <text x="176" y="3188">}</text>
                  <text x="220" y="3188">indicate</text>
                  <text x="296" y="3188">encrypted</text>
                  <text x="360" y="3188">data.</text>
                  <text x="16" y="3220">(A,</text>
                  <text x="44" y="3220">B)</text>
                  <text x="96" y="3220">indicates</text>
                  <text x="144" y="3220">a</text>
                  <text x="172" y="3220">CBOR</text>
                  <text x="228" y="3220">sequence</text>
                  <text x="304" y="3220">[RFC8742]</text>
                  <text x="68" y="3236">of</text>
                  <text x="96" y="3236">two</text>
                  <text x="132" y="3236">CBOR</text>
                  <text x="172" y="3236">data</text>
                  <text x="216" y="3236">items</text>
                  <text x="248" y="3236">A</text>
                  <text x="272" y="3236">and</text>
                  <text x="300" y="3236">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
  |       |       |
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 an OSCORE Security Context 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>
        <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="3008" width="544" viewBox="0 0 544 3008" 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,1576 L 24,2768" fill="none" stroke="black"/>
                <path d="M 24,2824 L 24,2832" fill="none" stroke="black"/>
                <path d="M 24,2888 L 24,2896" 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,1856" fill="none" stroke="black"/>
                <path d="M 88,1912 L 88,2496" fill="none" stroke="black"/>
                <path d="M 88,2552 L 88,2896" fill="none" stroke="black"/>
                <path d="M 152,48 L 152,2112" fill="none" stroke="black"/>
                <path d="M 152,2152 L 152,2160" fill="none" stroke="black"/>
                <path d="M 152,2280 L 152,2288" fill="none" stroke="black"/>
                <path d="M 152,2344 L 152,2896" 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,1600 L 80,1600" fill="none" stroke="black"/>
                <path d="M 88,1936 L 144,1936" fill="none" stroke="black"/>
                <path d="M 96,2368 L 152,2368" fill="none" stroke="black"/>
                <path d="M 32,2576 L 88,2576" fill="none" stroke="black"/>
                <path d="M 264,1840 L 272,1824" fill="none" stroke="black"/>
                <path d="M 272,1840 L 284,1816" fill="none" stroke="black"/>
                <path d="M 264,2752 L 272,2736" fill="none" stroke="black"/>
                <path d="M 272,2752 L 280,2736" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="152,1936 140,1930.4 140,1941.6" fill="black" transform="rotate(0,144,1936)"/>
                <polygon class="arrowhead" points="152,864 140,858.4 140,869.6" fill="black" transform="rotate(0,144,864)"/>
                <polygon class="arrowhead" points="104,2368 92,2362.4 92,2373.6" fill="black" transform="rotate(180,96,2368)"/>
                <polygon class="arrowhead" points="104,992 92,986.4 92,997.6" fill="black" transform="rotate(180,96,992)"/>
                <polygon class="arrowhead" points="88,1600 76,1594.4 76,1605.6" fill="black" transform="rotate(0,80,1600)"/>
                <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,2576 28,2570.4 28,2581.6" fill="black" transform="rotate(180,32,2576)"/>
                <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="16" y="1556">REQ</text>
                  <text x="52" y="1556">with</text>
                  <text x="32" y="1572">CTX_C_P</text>
                  <text x="216" y="1604">Code:</text>
                  <text x="260" y="1604">0.02</text>
                  <text x="308" y="1604">(POST)</text>
                  <text x="52" y="1620">POST</text>
                  <text x="212" y="1620">Token:</text>
                  <text x="260" y="1620">0x83</text>
                  <text x="208" y="1636">OSCORE:</text>
                  <text x="284" y="1636">[kid:0x20,</text>
                  <text x="360" y="1636">Partial</text>
                  <text x="416" y="1636">IV:1]</text>
                  <text x="212" y="1652">0xff</text>
                  <text x="204" y="1668">Payload:</text>
                  <text x="268" y="1668">{Code:</text>
                  <text x="316" y="1668">0.02</text>
                  <text x="368" y="1668">(POST),</text>
                  <text x="288" y="1684">Uri-Host:</text>
                  <text x="388" y="1684">"example.com",</text>
                  <text x="280" y="1700">OSCORE:</text>
                  <text x="356" y="1700">[kid:0x5f,</text>
                  <text x="432" y="1700">Partial</text>
                  <text x="492" y="1700">IV:0],</text>
                  <text x="276" y="1716">EDHOC:</text>
                  <text x="316" y="1716">-,</text>
                  <text x="304" y="1732">Proxy-Scheme:</text>
                  <text x="392" y="1732">"coap",</text>
                  <text x="272" y="1748">0xff,</text>
                  <text x="272" y="1764">EDHOC</text>
                  <text x="340" y="1764">message_3,</text>
                  <text x="396" y="1764">//</text>
                  <text x="444" y="1764">Intended</text>
                  <text x="496" y="1764">for</text>
                  <text x="520" y="1764">S</text>
                  <text x="256" y="1780">{</text>
                  <text x="280" y="1796">Code:</text>
                  <text x="324" y="1796">0.01</text>
                  <text x="372" y="1796">(GET),</text>
                  <text x="352" y="1812">Uri-Path:"alarm_status"</text>
                  <text x="256" y="1828">}</text>
                  <text x="328" y="1828">Encrypted</text>
                  <text x="388" y="1828">with</text>
                  <text x="440" y="1828">CTX_C_S</text>
                  <text x="248" y="1844">}</text>
                  <text x="320" y="1844">Encrypted</text>
                  <text x="380" y="1844">with</text>
                  <text x="432" y="1844">CTX_C_P</text>
                  <text x="96" y="1876">Decrypt</text>
                  <text x="80" y="1892">REQ</text>
                  <text x="116" y="1892">with</text>
                  <text x="96" y="1908">CTX_C_P</text>
                  <text x="216" y="1940">Code:</text>
                  <text x="260" y="1940">0.02</text>
                  <text x="308" y="1940">(POST)</text>
                  <text x="116" y="1956">POST</text>
                  <text x="212" y="1956">Token:</text>
                  <text x="260" y="1956">0xa6</text>
                  <text x="200" y="1972">Uri-Host:</text>
                  <text x="300" y="1972">"example.com",</text>
                  <text x="208" y="1988">OSCORE:</text>
                  <text x="284" y="1988">[kid:0x5f,</text>
                  <text x="360" y="1988">Partial</text>
                  <text x="416" y="1988">IV:0]</text>
                  <text x="212" y="2004">EDHOC:</text>
                  <text x="248" y="2004">-</text>
                  <text x="212" y="2020">0xff</text>
                  <text x="204" y="2036">Payload:</text>
                  <text x="264" y="2036">EDHOC</text>
                  <text x="332" y="2036">message_3,</text>
                  <text x="388" y="2036">//</text>
                  <text x="436" y="2036">Intended</text>
                  <text x="488" y="2036">for</text>
                  <text x="512" y="2036">S</text>
                  <text x="248" y="2052">{</text>
                  <text x="272" y="2068">Code:</text>
                  <text x="316" y="2068">0.01</text>
                  <text x="364" y="2068">(GET),</text>
                  <text x="288" y="2084">Uri-Path:</text>
                  <text x="388" y="2084">"alarm_status"</text>
                  <text x="248" y="2100">}</text>
                  <text x="268" y="2100">//</text>
                  <text x="320" y="2100">Encrypted</text>
                  <text x="380" y="2100">with</text>
                  <text x="432" y="2100">CTX_C_S</text>
                  <text x="168" y="2132">Establish</text>
                  <text x="160" y="2148">CTX_C_S</text>
                  <text x="160" y="2180">Rebuild</text>
                  <text x="144" y="2196">REQ</text>
                  <text x="180" y="2196">from</text>
                  <text x="164" y="2212">COMB_REQ</text>
                  <text x="152" y="2228">|</text>
                  <text x="160" y="2244">Decrypt</text>
                  <text x="144" y="2260">REQ</text>
                  <text x="180" y="2260">with</text>
                  <text x="160" y="2276">CTX_C_S</text>
                  <text x="160" y="2308">Encrypt</text>
                  <text x="148" y="2324">RESP</text>
                  <text x="188" y="2324">with</text>
                  <text x="160" y="2340">CTX_C_S</text>
                  <text x="216" y="2372">Code:</text>
                  <text x="260" y="2372">2.04</text>
                  <text x="320" y="2372">(Changed)</text>
                  <text x="124" y="2388">2.04</text>
                  <text x="212" y="2388">Token:</text>
                  <text x="260" y="2388">0xa6</text>
                  <text x="208" y="2404">OSCORE:</text>
                  <text x="248" y="2404">-</text>
                  <text x="212" y="2420">0xff</text>
                  <text x="204" y="2436">Payload:</text>
                  <text x="268" y="2436">{Code:</text>
                  <text x="316" y="2436">2.05</text>
                  <text x="380" y="2436">(Content),</text>
                  <text x="272" y="2452">0xff,</text>
                  <text x="264" y="2468">"0"</text>
                  <text x="248" y="2484">}</text>
                  <text x="268" y="2484">//</text>
                  <text x="320" y="2484">Encrypted</text>
                  <text x="380" y="2484">with</text>
                  <text x="432" y="2484">CTX_C_S</text>
                  <text x="96" y="2516">Encrypt</text>
                  <text x="84" y="2532">RESP</text>
                  <text x="124" y="2532">with</text>
                  <text x="96" y="2548">CTX_C_P</text>
                  <text x="216" y="2580">Code:</text>
                  <text x="260" y="2580">2.04</text>
                  <text x="320" y="2580">(Changed)</text>
                  <text x="60" y="2596">2.04</text>
                  <text x="212" y="2596">Token:</text>
                  <text x="260" y="2596">0x83</text>
                  <text x="208" y="2612">OSCORE:</text>
                  <text x="248" y="2612">-</text>
                  <text x="212" y="2628">0xff</text>
                  <text x="204" y="2644">Payload:</text>
                  <text x="268" y="2644">{Code:</text>
                  <text x="316" y="2644">2.04</text>
                  <text x="380" y="2644">(Changed),</text>
                  <text x="280" y="2660">OSCORE:</text>
                  <text x="324" y="2660">-,</text>
                  <text x="272" y="2676">0xff,</text>
                  <text x="276" y="2692">{Code:</text>
                  <text x="324" y="2692">2.05</text>
                  <text x="388" y="2692">(Content),</text>
                  <text x="280" y="2708">0xff,</text>
                  <text x="272" y="2724">"0"</text>
                  <text x="256" y="2740">}</text>
                  <text x="328" y="2740">Encrypted</text>
                  <text x="388" y="2740">with</text>
                  <text x="440" y="2740">CTX_C_S</text>
                  <text x="248" y="2756">}</text>
                  <text x="320" y="2756">Encrypted</text>
                  <text x="380" y="2756">with</text>
                  <text x="432" y="2756">CTX_C_P</text>
                  <text x="32" y="2788">Decrypt</text>
                  <text x="20" y="2804">RESP</text>
                  <text x="60" y="2804">with</text>
                  <text x="32" y="2820">CTX_C_P</text>
                  <text x="32" y="2852">Decrypt</text>
                  <text x="20" y="2868">RESP</text>
                  <text x="60" y="2868">with</text>
                  <text x="32" y="2884">CTX_C_S</text>
                  <text x="28" y="2932">Square</text>
                  <text x="92" y="2932">brackets</text>
                  <text x="136" y="2932">[</text>
                  <text x="160" y="2932">...</text>
                  <text x="184" y="2932">]</text>
                  <text x="228" y="2932">indicate</text>
                  <text x="296" y="2932">content</text>
                  <text x="340" y="2932">of</text>
                  <text x="396" y="2932">compressed</text>
                  <text x="460" y="2932">COSE</text>
                  <text x="512" y="2932">object.</text>
                  <text x="24" y="2948">Curly</text>
                  <text x="84" y="2948">brackets</text>
                  <text x="128" y="2948">{</text>
                  <text x="152" y="2948">...</text>
                  <text x="176" y="2948">}</text>
                  <text x="220" y="2948">indicate</text>
                  <text x="296" y="2948">encrypted</text>
                  <text x="360" y="2948">data.</text>
                  <text x="16" y="2980">(A,</text>
                  <text x="44" y="2980">B)</text>
                  <text x="96" y="2980">indicates</text>
                  <text x="144" y="2980">a</text>
                  <text x="172" y="2980">CBOR</text>
                  <text x="228" y="2980">sequence</text>
                  <text x="304" y="2980">[RFC8742]</text>
                  <text x="68" y="2996">of</text>
                  <text x="96" y="2996">two</text>
                  <text x="132" y="2996">CBOR</text>
                  <text x="172" y="2996">data</text>
                  <text x="216" y="2996">items</text>
                  <text x="248" y="2996">A</text>
                  <text x="272" y="2996">and</text>
                  <text x="300" y="2996">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   |       |
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   |
  |     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 component 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 CoAP client, and it 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 where to forward the request to, 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 component 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"/>
                <path d="M 256,368 L 264,352" fill="none" stroke="black"/>
                <path d="M 264,368 L 276,344" fill="none" stroke="black"/>
                <path d="M 256,688 L 264,672" fill="none" stroke="black"/>
                <path d="M 264,688 L 276,664" fill="none" stroke="black"/>
                <path d="M 256,1152 L 264,1136" fill="none" stroke="black"/>
                <path d="M 264,1152 L 272,1136" fill="none" stroke="black"/>
                <path d="M 256,1488 L 264,1472" fill="none" stroke="black"/>
                <path d="M 264,1488 L 272,1472" 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="320" y="356">Encrypted</text>
                  <text x="380" y="356">with</text>
                  <text x="432" y="356">CTX_C_S</text>
                  <text x="240" 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:31]</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="320" y="676">Encrypted</text>
                  <text x="380" y="676">with</text>
                  <text x="432" y="676">CTX_C_S</text>
                  <text x="240" 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="320" y="1140">Encrypted</text>
                  <text x="380" y="1140">with</text>
                  <text x="432" y="1140">CTX_C_S</text>
                  <text x="240" 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="320" y="1476">Encrypted</text>
                  <text x="380" y="1476">with</text>
                  <text x="432" y="1476">CTX_C_S</text>
                  <text x="240" 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: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   |
  |       |       |
  |     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"/>, 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="1136" width="576" viewBox="0 0 576 1136" 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 48,280 L 48,328" fill="none" stroke="black"/>
              <path d="M 48,392 L 48,432" fill="none" stroke="black"/>
              <path d="M 48,464 L 48,488" fill="none" stroke="black"/>
              <path d="M 48,704 L 48,1104" fill="none" stroke="black"/>
              <path d="M 80,752 L 80,784" fill="none" stroke="black"/>
              <path d="M 104,336 L 104,384" fill="none" stroke="black"/>
              <path d="M 104,1008 L 104,1040" fill="none" stroke="black"/>
              <path d="M 104,1088 L 104,1120" fill="none" stroke="black"/>
              <path d="M 120,832 L 120,1000" fill="none" stroke="black"/>
              <path d="M 144,880 L 144,928" 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,704 L 208,744" fill="none" stroke="black"/>
              <path d="M 208,976 L 208,1000" fill="none" stroke="black"/>
              <path d="M 232,496 L 232,656" fill="none" stroke="black"/>
              <path d="M 304,1008 L 304,1040" fill="none" stroke="black"/>
              <path d="M 320,496 L 320,576" fill="none" stroke="black"/>
              <path d="M 336,336 L 336,400" fill="none" stroke="black"/>
              <path d="M 352,624 L 352,744" fill="none" stroke="black"/>
              <path d="M 352,832 L 352,872" fill="none" stroke="black"/>
              <path d="M 352,976 L 352,1080" fill="none" stroke="black"/>
              <path d="M 416,336 L 416,416" fill="none" stroke="black"/>
              <path d="M 416,752 L 416,784" fill="none" stroke="black"/>
              <path d="M 416,880 L 416,928" fill="none" stroke="black"/>
              <path d="M 456,464 L 456,488" fill="none" stroke="black"/>
              <path d="M 456,624 L 456,1080" fill="none" stroke="black"/>
              <path d="M 480,1088 L 480,1120" fill="none" stroke="black"/>
              <path d="M 496,496 L 496,576" fill="none" stroke="black"/>
              <path d="M 536,464 L 536,1104" 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 320,496 L 496,496" fill="none" stroke="black"/>
              <path d="M 320,576 L 496,576" fill="none" stroke="black"/>
              <path d="M 24,656 L 232,656" fill="none" stroke="black"/>
              <path d="M 80,752 L 416,752" fill="none" stroke="black"/>
              <path d="M 80,784 L 416,784" fill="none" stroke="black"/>
              <path d="M 144,880 L 416,880" fill="none" stroke="black"/>
              <path d="M 144,928 L 416,928" fill="none" stroke="black"/>
              <path d="M 104,1008 L 304,1008" fill="none" stroke="black"/>
              <path d="M 104,1040 L 304,1040" fill="none" stroke="black"/>
              <path d="M 104,1088 L 480,1088" fill="none" stroke="black"/>
              <path d="M 48,1104 L 96,1104" fill="none" stroke="black"/>
              <path d="M 488,1104 L 536,1104" fill="none" stroke="black"/>
              <path d="M 104,1120 L 480,1120" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="496,1104 484,1098.4 484,1109.6" fill="black" transform="rotate(180,488,1104)"/>
              <polygon class="arrowhead" points="464,1080 452,1074.4 452,1085.6" fill="black" transform="rotate(90,456,1080)"/>
              <polygon class="arrowhead" points="464,488 452,482.4 452,493.6" fill="black" transform="rotate(90,456,488)"/>
              <polygon class="arrowhead" points="416,352 404,346.4 404,357.6" fill="black" transform="rotate(0,408,352)"/>
              <polygon class="arrowhead" points="360,1080 348,1074.4 348,1085.6" fill="black" transform="rotate(90,352,1080)"/>
              <polygon class="arrowhead" points="360,872 348,866.4 348,877.6" fill="black" transform="rotate(90,352,872)"/>
              <polygon class="arrowhead" points="360,744 348,738.4 348,749.6" fill="black" transform="rotate(90,352,744)"/>
              <polygon class="arrowhead" points="216,1000 204,994.4 204,1005.6" fill="black" transform="rotate(90,208,1000)"/>
              <polygon class="arrowhead" points="216,744 204,738.4 204,749.6" fill="black" transform="rotate(90,208,744)"/>
              <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="128,1000 116,994.4 116,1005.6" fill="black" transform="rotate(90,120,1000)"/>
              <polygon class="arrowhead" points="104,1104 92,1098.4 92,1109.6" fill="black" transform="rotate(0,96,1104)"/>
              <polygon class="arrowhead" points="56,488 44,482.4 44,493.6" fill="black" transform="rotate(90,48,488)"/>
              <polygon class="arrowhead" points="56,328 44,322.4 44,333.6" fill="black" transform="rotate(90,48,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="456" y="436">|</text>
                <text x="536" y="436">|</text>
                <text x="52" y="452">NO</text>
                <text x="212" y="452">NO</text>
                <text x="456" y="452">YES</text>
                <text x="540" 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="348" y="516">Does</text>
                <text x="376" y="516">X</text>
                <text x="404" y="516">need</text>
                <text x="436" 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="356" y="532">access</text>
                <text x="400" y="532">OPT</text>
                <text x="444" y="532">before</text>
                <text x="372" y="548">decrypting</text>
                <text x="424" y="548">M</text>
                <text x="444" y="548">or</text>
                <text x="468" y="548">in</text>
                <text x="44" y="564">OR</text>
                <text x="352" y="564">order</text>
                <text x="388" y="564">to</text>
                <text x="432" y="564">decrypt</text>
                <text x="476" 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="352" y="596">|</text>
                <text x="456" 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="356" y="612">NO</text>
                <text x="456" 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="48" y="676">|</text>
                <text x="208" y="676">|</text>
                <text x="52" y="692">NO</text>
                <text x="208" y="692">YES</text>
                <text x="100" y="772">Is</text>
                <text x="128" y="772">OPT</text>
                <text x="160" y="772">the</text>
                <text x="212" y="772">Uri-Host</text>
                <text x="260" y="772">or</text>
                <text x="308" y="772">Uri-Port</text>
                <text x="376" y="772">option?</text>
                <text x="120" y="804">|</text>
                <text x="352" y="804">|</text>
                <text x="124" y="820">NO</text>
                <text x="352" y="820">YES</text>
                <text x="172" y="900">Does</text>
                <text x="200" y="900">M</text>
                <text x="240" y="900">include</text>
                <text x="288" y="900">the</text>
                <text x="356" y="900">Proxy-Scheme</text>
                <text x="164" y="916">or</text>
                <text x="256" y="916">Proxy-Scheme-Number</text>
                <text x="368" y="916">option?</text>
                <text x="208" y="948">|</text>
                <text x="352" y="948">|</text>
                <text x="208" y="964">YES</text>
                <text x="356" y="964">NO</text>
                <text x="144" y="1028">Process</text>
                <text x="192" y="1028">OPT</text>
                <text x="220" y="1028">as</text>
                <text x="256" y="1028">Class</text>
                <text x="288" y="1028">E</text>
                <text x="144" y="1108">Process</text>
                <text x="192" y="1108">OPT</text>
                <text x="220" y="1108">as</text>
                <text x="248" y="1108">per</text>
                <text x="280" y="1108">its</text>
                <text x="332" y="1108">original</text>
                <text x="392" y="1108">Class</text>
                <text x="424" y="1108">U</text>
                <text x="444" y="1108">or</text>
                <text x="464" y="1108">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 or Uri-Port option? |    |         |
     |   +-----------------------------------------+    |         |
     |        |                            |            |         |
     |        NO                          YES           |         |
     |        |                            |            |         |
     |        |                            |            |         |
     |        |                            v            |         |
     |        |  +---------------------------------+    |         |
     |        |  | Does M include the Proxy-Scheme |    |         |
     |        |  | or 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, as 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="1712" width="576" viewBox="0 0 576 1712" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,224 L 8,304" fill="none" stroke="black"/>
              <path d="M 8,512 L 8,624" fill="none" stroke="black"/>
              <path d="M 8,1040 L 8,1136" fill="none" stroke="black"/>
              <path d="M 8,1552 L 8,1632" fill="none" stroke="black"/>
              <path d="M 32,352 L 32,504" fill="none" stroke="black"/>
              <path d="M 32,672 L 32,1032" fill="none" stroke="black"/>
              <path d="M 32,1144 L 32,1544" fill="none" stroke="black"/>
              <path d="M 80,1392 L 80,1472" fill="none" stroke="black"/>
              <path d="M 112,32 L 112,64" fill="none" stroke="black"/>
              <path d="M 120,112 L 120,216" fill="none" stroke="black"/>
              <path d="M 128,224 L 128,304" fill="none" stroke="black"/>
              <path d="M 136,880 L 136,944" fill="none" stroke="black"/>
              <path d="M 136,1312 L 136,1344" fill="none" stroke="black"/>
              <path d="M 136,1480 L 136,1504" fill="none" stroke="black"/>
              <path d="M 152,272 L 152,464" fill="none" stroke="black"/>
              <path d="M 184,512 L 184,624" fill="none" stroke="black"/>
              <path d="M 184,704 L 184,768" fill="none" stroke="black"/>
              <path d="M 200,224 L 200,288" fill="none" stroke="black"/>
              <path d="M 200,512 L 200,592" fill="none" stroke="black"/>
              <path d="M 208,1248 L 208,1312" fill="none" stroke="black"/>
              <path d="M 208,1392 L 208,1472" fill="none" stroke="black"/>
              <path d="M 216,336 L 216,504" fill="none" stroke="black"/>
              <path d="M 224,1040 L 224,1136" fill="none" stroke="black"/>
              <path d="M 232,160 L 232,176" fill="none" stroke="black"/>
              <path d="M 272,448 L 272,464" fill="none" stroke="black"/>
              <path d="M 272,1552 L 272,1632" fill="none" stroke="black"/>
              <path d="M 280,224 L 280,288" fill="none" stroke="black"/>
              <path d="M 280,640 L 280,696" fill="none" stroke="black"/>
              <path d="M 280,776 L 280,872" fill="none" stroke="black"/>
              <path d="M 280,992 L 280,1032" fill="none" stroke="black"/>
              <path d="M 280,1120 L 280,1240" fill="none" stroke="black"/>
              <path d="M 280,1320 L 280,1424" fill="none" stroke="black"/>
              <path d="M 312,704 L 312,768" fill="none" stroke="black"/>
              <path d="M 328,512 L 328,592" fill="none" stroke="black"/>
              <path d="M 336,1248 L 336,1312" fill="none" stroke="black"/>
              <path d="M 344,72 L 344,832" fill="none" stroke="black"/>
              <path d="M 352,880 L 352,944" fill="none" stroke="black"/>
              <path d="M 368,224 L 368,272" fill="none" stroke="black"/>
              <path d="M 376,280 L 376,1584" fill="none" stroke="black"/>
              <path d="M 400,1344 L 400,1392" fill="none" stroke="black"/>
              <path d="M 408,320 L 408,1336" fill="none" stroke="black"/>
              <path d="M 424,704 L 424,784" fill="none" stroke="black"/>
              <path d="M 424,1440 L 424,1544" fill="none" stroke="black"/>
              <path d="M 432,112 L 432,216" fill="none" stroke="black"/>
              <path d="M 448,432 L 448,496" fill="none" stroke="black"/>
              <path d="M 448,832 L 448,904" fill="none" stroke="black"/>
              <path d="M 448,1104 L 448,1136" fill="none" stroke="black"/>
              <path d="M 456,544 L 456,568" fill="none" stroke="black"/>
              <path d="M 456,1008 L 456,1040" fill="none" stroke="black"/>
              <path d="M 456,1184 L 456,1240" fill="none" stroke="black"/>
              <path d="M 472,320 L 472,424" fill="none" stroke="black"/>
              <path d="M 496,32 L 496,64" fill="none" stroke="black"/>
              <path d="M 496,1048 L 496,1096" fill="none" stroke="black"/>
              <path d="M 496,1144 L 496,1200" fill="none" stroke="black"/>
              <path d="M 496,1440 L 496,1464" fill="none" stroke="black"/>
              <path d="M 504,224 L 504,272" fill="none" stroke="black"/>
              <path d="M 520,1344 L 520,1392" fill="none" stroke="black"/>
              <path d="M 528,832 L 528,1000" fill="none" stroke="black"/>
              <path d="M 536,544 L 536,696" fill="none" stroke="black"/>
              <path d="M 536,1008 L 536,1040" fill="none" stroke="black"/>
              <path d="M 536,1104 L 536,1136" fill="none" stroke="black"/>
              <path d="M 544,432 L 544,496" fill="none" stroke="black"/>
              <path d="M 552,704 L 552,784" fill="none" stroke="black"/>
              <path d="M 568,48 L 568,1200" 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 128,224" fill="none" stroke="black"/>
              <path d="M 200,224 L 280,224" fill="none" stroke="black"/>
              <path d="M 368,224 L 504,224" fill="none" stroke="black"/>
              <path d="M 136,240 L 192,240" fill="none" stroke="black"/>
              <path d="M 152,272 L 192,272" fill="none" stroke="black"/>
              <path d="M 368,272 L 504,272" fill="none" stroke="black"/>
              <path d="M 200,288 L 280,288" fill="none" stroke="black"/>
              <path d="M 8,304 L 128,304" fill="none" stroke="black"/>
              <path d="M 448,432 L 544,432" fill="none" stroke="black"/>
              <path d="M 448,496 L 544,496" fill="none" stroke="black"/>
              <path d="M 8,512 L 184,512" fill="none" stroke="black"/>
              <path d="M 200,512 L 328,512" fill="none" stroke="black"/>
              <path d="M 200,592 L 328,592" fill="none" stroke="black"/>
              <path d="M 8,624 L 184,624" fill="none" stroke="black"/>
              <path d="M 184,704 L 312,704" fill="none" stroke="black"/>
              <path d="M 424,704 L 552,704" fill="none" stroke="black"/>
              <path d="M 184,768 L 312,768" fill="none" stroke="black"/>
              <path d="M 424,784 L 552,784" fill="none" stroke="black"/>
              <path d="M 136,880 L 352,880" fill="none" stroke="black"/>
              <path d="M 136,944 L 352,944" fill="none" stroke="black"/>
              <path d="M 456,1008 L 536,1008" fill="none" stroke="black"/>
              <path d="M 8,1040 L 224,1040" fill="none" stroke="black"/>
              <path d="M 456,1040 L 536,1040" fill="none" stroke="black"/>
              <path d="M 448,1104 L 536,1104" fill="none" stroke="black"/>
              <path d="M 8,1136 L 224,1136" fill="none" stroke="black"/>
              <path d="M 448,1136 L 536,1136" fill="none" stroke="black"/>
              <path d="M 496,1200 L 520,1200" fill="none" stroke="black"/>
              <path d="M 552,1200 L 568,1200" fill="none" stroke="black"/>
              <path d="M 208,1248 L 336,1248" fill="none" stroke="black"/>
              <path d="M 208,1312 L 336,1312" fill="none" stroke="black"/>
              <path d="M 400,1344 L 520,1344" fill="none" stroke="black"/>
              <path d="M 80,1392 L 208,1392" fill="none" stroke="black"/>
              <path d="M 400,1392 L 520,1392" fill="none" stroke="black"/>
              <path d="M 216,1424 L 232,1424" fill="none" stroke="black"/>
              <path d="M 264,1424 L 280,1424" fill="none" stroke="black"/>
              <path d="M 80,1472 L 208,1472" fill="none" stroke="black"/>
              <path d="M 8,1552 L 272,1552" fill="none" stroke="black"/>
              <path d="M 280,1584 L 296,1584" fill="none" stroke="black"/>
              <path d="M 320,1584 L 376,1584" fill="none" stroke="black"/>
              <path d="M 8,1632 L 272,1632" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="544,696 532,690.4 532,701.6" fill="black" transform="rotate(90,536,696)"/>
              <polygon class="arrowhead" points="536,1000 524,994.4 524,1005.6" fill="black" transform="rotate(90,528,1000)"/>
              <polygon class="arrowhead" points="512,48 500,42.4 500,53.6" fill="black" transform="rotate(180,504,48)"/>
              <polygon class="arrowhead" points="504,1464 492,1458.4 492,1469.6" fill="black" transform="rotate(90,496,1464)"/>
              <polygon class="arrowhead" points="504,1096 492,1090.4 492,1101.6" fill="black" transform="rotate(90,496,1096)"/>
              <polygon class="arrowhead" points="480,424 468,418.4 468,429.6" fill="black" transform="rotate(90,472,424)"/>
              <polygon class="arrowhead" points="464,1240 452,1234.4 452,1245.6" fill="black" transform="rotate(90,456,1240)"/>
              <polygon class="arrowhead" points="464,568 452,562.4 452,573.6" fill="black" transform="rotate(90,456,568)"/>
              <polygon class="arrowhead" points="456,904 444,898.4 444,909.6" fill="black" transform="rotate(90,448,904)"/>
              <polygon class="arrowhead" points="440,216 428,210.4 428,221.6" fill="black" transform="rotate(90,432,216)"/>
              <polygon class="arrowhead" points="432,1544 420,1538.4 420,1549.6" fill="black" transform="rotate(90,424,1544)"/>
              <polygon class="arrowhead" points="416,1336 404,1330.4 404,1341.6" fill="black" transform="rotate(90,408,1336)"/>
              <polygon class="arrowhead" points="384,280 372,274.4 372,285.6" fill="black" transform="rotate(270,376,280)"/>
              <polygon class="arrowhead" points="352,72 340,66.4 340,77.6" fill="black" transform="rotate(270,344,72)"/>
              <polygon class="arrowhead" points="288,1320 276,1314.4 276,1325.6" fill="black" transform="rotate(270,280,1320)"/>
              <polygon class="arrowhead" points="288,1120 276,1114.4 276,1125.6" fill="black" transform="rotate(270,280,1120)"/>
              <polygon class="arrowhead" points="288,1032 276,1026.4 276,1037.6" fill="black" transform="rotate(90,280,1032)"/>
              <polygon class="arrowhead" points="288,872 276,866.4 276,877.6" fill="black" transform="rotate(90,280,872)"/>
              <polygon class="arrowhead" points="288,696 276,690.4 276,701.6" fill="black" transform="rotate(90,280,696)"/>
              <polygon class="arrowhead" points="280,448 268,442.4 268,453.6" fill="black" transform="rotate(270,272,448)"/>
              <polygon class="arrowhead" points="240,160 228,154.4 228,165.6" fill="black" transform="rotate(270,232,160)"/>
              <polygon class="arrowhead" points="224,504 212,498.4 212,509.6" fill="black" transform="rotate(90,216,504)"/>
              <polygon class="arrowhead" points="200,272 188,266.4 188,277.6" fill="black" transform="rotate(0,192,272)"/>
              <polygon class="arrowhead" points="200,240 188,234.4 188,245.6" fill="black" transform="rotate(0,192,240)"/>
              <polygon class="arrowhead" points="144,1480 132,1474.4 132,1485.6" fill="black" transform="rotate(270,136,1480)"/>
              <polygon class="arrowhead" points="144,1312 132,1306.4 132,1317.6" fill="black" transform="rotate(270,136,1312)"/>
              <polygon class="arrowhead" points="128,216 116,210.4 116,221.6" fill="black" transform="rotate(90,120,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,1544 28,1538.4 28,1549.6" fill="black" transform="rotate(90,32,1544)"/>
              <polygon class="arrowhead" points="40,1032 28,1026.4 28,1037.6" fill="black" transform="rotate(90,32,1032)"/>
              <polygon class="arrowhead" points="40,504 28,498.4 28,509.6" fill="black" transform="rotate(90,32,504)"/>
              <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="120" y="84">|</text>
                <text x="432" y="84">|</text>
                <text x="120" y="100">YES</text>
                <text x="236" y="100">..........</text>
                <text x="436" y="100">NO</text>
                <text x="200" y="116">:</text>
                <text x="236" y="116">Return</text>
                <text x="272" y="116">:</text>
                <text x="200" y="132">:</text>
                <text x="228" y="132">5.05</text>
                <text x="272" y="132">:</text>
                <text x="236" y="148">:........:</text>
                <text x="236" y="196">NO</text>
                <text x="232" y="212">|</text>
                <text x="152" 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="220" y="244">Am</text>
                <text x="240" y="244">I</text>
                <text x="256" y="244">a</text>
                <text x="388" y="244">Is</text>
                <text x="424" y="244">there</text>
                <text x="460" y="244">an</text>
                <text x="56" y="260">Proxy-Uri</text>
                <text x="108" y="260">or</text>
                <text x="240" y="260">forward</text>
                <text x="404" y="260">OSCORE</text>
                <text x="464" y="260">option?</text>
                <text x="56" y="276">Proxy-Cri</text>
                <text x="236" y="276">proxy?</text>
                <text x="48" y="292">option?</text>
                <text x="408" y="292">|</text>
                <text x="472" y="292">|</text>
                <text x="216" y="308">|</text>
                <text x="412" y="308">NO</text>
                <text x="472" y="308">YES</text>
                <text x="32" y="324">|</text>
                <text x="216" y="324">YES</text>
                <text x="36" y="340">NO</text>
                <text x="276" y="388">..........</text>
                <text x="240" y="404">:</text>
                <text x="276" y="404">Return</text>
                <text x="312" y="404">:</text>
                <text x="240" y="420">:</text>
                <text x="268" y="420">4.01</text>
                <text x="312" y="420">:</text>
                <text x="276" y="436">:........:</text>
                <text x="472" y="452">Are</text>
                <text x="512" y="452">there</text>
                <text x="492" y="468">Uri-Path</text>
                <text x="152" y="484">YES</text>
                <text x="276" y="484">NO</text>
                <text x="492" y="484">options?</text>
                <text x="152" y="500">|</text>
                <text x="272" y="500">|</text>
                <text x="456" y="516">|</text>
                <text x="536" y="516">|</text>
                <text x="28" y="532">Is</text>
                <text x="64" y="532">there</text>
                <text x="104" y="532">the</text>
                <text x="220" y="532">Is</text>
                <text x="244" y="532">it</text>
                <text x="456" y="532">YES</text>
                <text x="540" y="532">NO</text>
                <text x="68" y="548">Proxy-Scheme</text>
                <text x="132" y="548">or</text>
                <text x="252" y="548">acceptable</text>
                <text x="308" y="548">to</text>
                <text x="96" y="564">Proxy-Scheme-Number</text>
                <text x="240" y="564">forward</text>
                <text x="288" y="564">the</text>
                <text x="48" y="580">option,</text>
                <text x="116" y="580">together</text>
                <text x="244" y="580">request?</text>
                <text x="296" y="580">(#)</text>
                <text x="476" y="580">..........</text>
                <text x="36" y="596">with</text>
                <text x="72" y="596">the</text>
                <text x="124" y="596">Uri-Host</text>
                <text x="440" y="596">:</text>
                <text x="476" y="596">Return</text>
                <text x="512" y="596">:</text>
                <text x="28" y="612">or</text>
                <text x="76" y="612">Uri-Port</text>
                <text x="144" y="612">option?</text>
                <text x="280" y="612">|</text>
                <text x="440" y="612">:</text>
                <text x="468" y="612">4.00</text>
                <text x="512" y="612">:</text>
                <text x="280" y="628">YES</text>
                <text x="476" y="628">..........</text>
                <text x="32" y="644">|</text>
                <text x="36" y="660">NO</text>
                <text x="224" y="724">Consume</text>
                <text x="272" y="724">the</text>
                <text x="444" y="724">Is</text>
                <text x="468" y="724">it</text>
                <text x="248" y="740">proxy-related</text>
                <text x="476" y="740">acceptable</text>
                <text x="532" y="740">to</text>
                <text x="224" y="756">options</text>
                <text x="464" y="756">decrypt</text>
                <text x="512" y="756">the</text>
                <text x="468" y="772">request?</text>
                <text x="520" y="772">(#)</text>
                <text x="448" y="804">|</text>
                <text x="528" y="804">|</text>
                <text x="452" y="820">NO</text>
                <text x="528" y="820">YES</text>
                <text x="344" y="852">YES</text>
                <text x="344" y="868">|</text>
                <text x="164" y="900">Does</text>
                <text x="200" y="900">the</text>
                <text x="256" y="900">authority</text>
                <text x="168" y="916">(host</text>
                <text x="208" y="916">and</text>
                <text x="248" y="916">port)</text>
                <text x="284" y="916">of</text>
                <text x="312" y="916">the</text>
                <text x="468" y="916">..........</text>
                <text x="176" y="932">request</text>
                <text x="224" y="932">URI</text>
                <text x="276" y="932">identify</text>
                <text x="328" y="932">me?</text>
                <text x="432" y="932">:</text>
                <text x="468" y="932">Return</text>
                <text x="504" y="932">:</text>
                <text x="432" y="948">:</text>
                <text x="460" y="948">4.01</text>
                <text x="504" y="948">:</text>
                <text x="280" y="964">|</text>
                <text x="468" y="964">:........:</text>
                <text x="284" y="980">NO</text>
                <text x="496" y="1028">Decrypt</text>
                <text x="296" y="1044">...........</text>
                <text x="40" y="1060">There</text>
                <text x="76" y="1060">is</text>
                <text x="100" y="1060">no</text>
                <text x="164" y="1060">Proxy-Scheme</text>
                <text x="256" y="1060">:</text>
                <text x="296" y="1060">Forward</text>
                <text x="336" y="1060">:</text>
                <text x="28" y="1076">or</text>
                <text x="120" y="1076">Proxy-Scheme-Number</text>
                <text x="256" y="1076">:</text>
                <text x="280" y="1076">the</text>
                <text x="336" y="1076">:</text>
                <text x="48" y="1092">option,</text>
                <text x="96" y="1092">but</text>
                <text x="136" y="1092">there</text>
                <text x="176" y="1092">are</text>
                <text x="256" y="1092">:</text>
                <text x="296" y="1092">request</text>
                <text x="336" y="1092">:</text>
                <text x="52" y="1108">Uri-Path</text>
                <text x="116" y="1108">and/or</text>
                <text x="180" y="1108">Uri-Host</text>
                <text x="296" y="1108">:.........:</text>
                <text x="44" y="1124">and/or</text>
                <text x="108" y="1124">Uri-Port</text>
                <text x="176" y="1124">options</text>
                <text x="492" y="1124">Success?</text>
                <text x="456" y="1156">|</text>
                <text x="460" y="1172">NO</text>
                <text x="536" y="1204">YES</text>
                <text x="132" y="1252">..........</text>
                <text x="500" y="1252">................</text>
                <text x="96" y="1268">:</text>
                <text x="132" y="1268">Return</text>
                <text x="168" y="1268">:</text>
                <text x="248" y="1268">Consume</text>
                <text x="296" y="1268">the</text>
                <text x="440" y="1268">:</text>
                <text x="476" y="1268">OSCORE</text>
                <text x="528" y="1268">error</text>
                <text x="560" y="1268">:</text>
                <text x="96" y="1284">:</text>
                <text x="124" y="1284">4.01</text>
                <text x="168" y="1284">:</text>
                <text x="272" y="1284">proxy-related</text>
                <text x="440" y="1284">:</text>
                <text x="484" y="1284">handling</text>
                <text x="560" y="1284">:</text>
                <text x="132" y="1300">:........:</text>
                <text x="248" y="1300">options</text>
                <text x="500" y="1300">:..............:</text>
                <text x="140" y="1364">NO</text>
                <text x="420" y="1364">Is</text>
                <text x="456" y="1364">there</text>
                <text x="492" y="1364">an</text>
                <text x="136" y="1380">|</text>
                <text x="460" y="1380">application?</text>
                <text x="100" y="1412">Is</text>
                <text x="124" y="1412">it</text>
                <text x="424" y="1412">|</text>
                <text x="496" y="1412">|</text>
                <text x="132" y="1428">acceptable</text>
                <text x="188" y="1428">to</text>
                <text x="248" y="1428">YES</text>
                <text x="424" y="1428">YES</text>
                <text x="500" y="1428">NO</text>
                <text x="120" y="1444">forward</text>
                <text x="168" y="1444">the</text>
                <text x="124" y="1460">request?</text>
                <text x="176" y="1460">(#)</text>
                <text x="500" y="1476">..........</text>
                <text x="464" y="1492">:</text>
                <text x="500" y="1492">Return</text>
                <text x="536" y="1492">:</text>
                <text x="464" y="1508">:</text>
                <text x="492" y="1508">4.00</text>
                <text x="536" y="1508">:</text>
                <text x="136" y="1524">YES</text>
                <text x="500" y="1524">:........:</text>
                <text x="136" y="1540">|</text>
                <text x="468" y="1556">..................</text>
                <text x="28" y="1572">Am</text>
                <text x="48" y="1572">I</text>
                <text x="64" y="1572">a</text>
                <text x="128" y="1572">reverse-proxy</text>
                <text x="208" y="1572">using</text>
                <text x="248" y="1572">the</text>
                <text x="400" y="1572">:</text>
                <text x="440" y="1572">Deliver</text>
                <text x="488" y="1572">the</text>
                <text x="536" y="1572">:</text>
                <text x="40" y="1588">exact</text>
                <text x="88" y="1588">value</text>
                <text x="124" y="1588">of</text>
                <text x="160" y="1588">these</text>
                <text x="224" y="1588">Uri-Path,</text>
                <text x="308" y="1588">NO</text>
                <text x="400" y="1588">:</text>
                <text x="440" y="1588">request</text>
                <text x="484" y="1588">to</text>
                <text x="512" y="1588">the</text>
                <text x="536" y="1588">:</text>
                <text x="56" y="1604">Uri-Host,</text>
                <text x="112" y="1604">and</text>
                <text x="164" y="1604">Uri-Port</text>
                <text x="232" y="1604">options</text>
                <text x="400" y="1604">:</text>
                <text x="456" y="1604">application</text>
                <text x="536" y="1604">:</text>
                <text x="32" y="1620">for</text>
                <text x="88" y="1620">proxying?</text>
                <text x="468" y="1620">:................:</text>
                <text x="16" y="1684">(#)</text>
                <text x="52" y="1684">This</text>
                <text x="84" y="1684">is</text>
                <text x="140" y="1684">determined</text>
                <text x="224" y="1684">according</text>
                <text x="276" y="1684">to</text>
                <text x="304" y="1684">the</text>
                <text x="364" y="1684">endpoint's</text>
                <text x="464" y="1684">configuration</text>
                <text x="48" y="1700">and</text>
                <text x="72" y="1700">a</text>
                <text x="116" y="1700">possible</text>
                <text x="208" y="1700">authorization</text>
                <text x="316" y="1700">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 or |        | forward |       |  | OSCORE option? |       |
| Proxy-Cri    |  +---->| proxy?  |       |  +----------------+       |
| option?      |  |     +---------+       |   ^   |       |           |
+--------------+  |       |               |   |   NO     YES          |
   |              |      YES              |   |   |       |           |
   NO             |       |               |   |   |       |           |
   |              |       |               |   |   |       |           |
   |              |       |               |   |   |       |           |
   |              |       |  ..........   |   |   |       |           |
   |              |       |  : Return :   |   |   |       |           |
   |              |       |  : 4.01   :   |   |   |       v           |
   |              |       |  :........:   |   |   |    +-----------+  |
   |              |       |      ^        |   |   |    | Are there |  |
   |              |       |      |        |   |   |    | Uri-Path  |  |
   |             YES      |      NO       |   |   |    | options?  |  |
   v              |       v      |        |   |   |    +-----------+  |
+---------------------+ +---------------+ |   |   |     |         |   |
| Is there the        | | Is it         | |   |   |    YES        NO  |
| Proxy-Scheme or     | | acceptable to | |   |   |     |         |   |
| Proxy-Scheme-Number | | forward the   | |   |   |     v         |   |
| option, together    | | request? (#)  | |   |   |   ..........  |   |
| with the Uri-Host   | +---------------+ |   |   |   : Return :  |   |
| or Uri-Port option? |           |       |   |   |   : 4.00   :  |   |
+---------------------+          YES      |   |   |   ..........  |   |
   |                              |       |   |   |               |   |
   NO                             |       |   |   |               |   |
   |                              |       |   |   |               |   |
   |                              v       |   |   |               v   |
   |                  +---------------+   |   |   | +---------------+ |
   |                  | Consume the   |   |   |   | | Is it         | |
   |                  | proxy-related |   |   |   | | acceptable to | |
   |                  | options       |   |   |   | | decrypt the   | |
   |                  +---------------+   |   |   | | request? (#)  | |
   |                              |       |   |   | +---------------+ |
   |                              |       |   |   |    |         |    |
   |                              |       |   |   |    NO       YES   |
   |                              |       |   |   |    |         |    |
   |                              |      YES  |   |    |         |    |
   |                              v       |   |   |    |         |    |
   |            +--------------------------+  |   |    |         |    |
   |            | Does the authority       |  |   |    v         |    |
   |            | (host and port) of the   |  |   |  ..........  |    |
   |            | request URI identify me? |  |   |  : Return :  |    |
   |            +--------------------------+  |   |  : 4.01   :  |    |
   |                              |           |   |  :........:  |    |
   |                              NO          |   |              |    |
   |                              |           |   |              v    |
   |                              |           |   |     +---------+   |
   v                              v           |   |     | Decrypt |   |
+--------------------------+   ...........    |   |     +---------+   |
| There is no Proxy-Scheme |   : Forward :    |   |          |        |
| or Proxy-Scheme-Number   |   : the     :    |   |          |        |
| option, but there are    |   : request :    |   |          v        |
| Uri-Path and/or Uri-Host |   :.........:    |   |    +----------+   |
| and/or Uri-Port options  |      ^           |   |    | Success? |   |
+--------------------------+      |           |   |    +----------+   |
   |                              |           |   |     |    |        |
   |                              |           |   |     NO   |        |
   |                              |           |   |     |    |        |
   |                              |           |   |     |    +---YES--+
   |                              |           |   |     |
   |                              |           |   |     v
   |       ..........    +---------------+    |   |   ................
   |       : Return :    | Consume the   |    |   |   : OSCORE error :
   |       : 4.01   :    | proxy-related |    |   |   : handling     :
   |       :........:    | options       |    |   |   :..............:
   |            ^        +---------------+    |   |
   |            |                 ^           |   v
   |            |                 |           |  +--------------+
   |            NO                |           |  | Is there an  |
   |            |                 |           |  | application? |
   |     +---------------+        |           |  +--------------+
   |     | Is it         |        |           |     |        |
   |     | acceptable to |---YES--+           |    YES       NO
   |     | forward the   |                    |     |        |
   |     | request? (#)  |                    |     |        v
   |     +---------------+                    |     |    ..........
   |            ^                             |     |    : Return :
   |            |                             |     |    : 4.00   :
   |           YES                            |     |    :........:
   v            |                             |     v
+--------------------------------+            |  ..................
| Am I a reverse-proxy using the |            |  : Deliver the    :
| exact value of these Uri-Path, |---NO-------+  : request to the :
| Uri-Host, and Uri-Port options |               : application    :
| 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-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"/>, and <contact fullname="Göran Selander"/> 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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
7gCf//+/l59vcZ0BAA==

-->

</rfc>
