<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.3.7) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-oscore-capable-proxies-05" category="std" consensus="true" submissionType="IETF" updates="8613, 8768" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.1 -->
  <front>
    <title abbrev="OSCORE-capable Proxies">OSCORE-capable Proxies</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-capable-proxies-05"/>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>164 40</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <author initials="R." surname="Höglund" fullname="Rikard Höglund">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>164 40</code>
          <country>Sweden</country>
        </postal>
        <email>rikard.hoglund@ri.se</email>
      </address>
    </author>
    <date year="2025" month="September" 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 between an application endpoint (i.e., a CoAP origin client/server) and an intermediary as well as between two adjacent intermediaries in a chain. This especially applies to the communication leg between the CoAP origin client and the adjacent intermediary acting as the next hop towards the CoAP origin server.</t>
      <t>In such cases, and especially if the origin client already uses OSCORE to achieve end-to-end security with the origin server, it would be convenient that OSCORE is 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, after which the result is further OSCORE-protected over the leg between the current and next hop (e.g., the origin client and the adjacent intermediary acting as the next hop towards the origin server).</t>
        </li>
      </ul>
      <t>Furthermore, this document updates <xref target="RFC8768"/>, by explicitly defining the CoAP 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 that rely on a longer chain of intermediaries. For instance, the origin client can sequentially apply multiple OSCORE layers to a request, each of which is intended to be consumed and removed by one of the intermediaries in the chain, until the origin server is reached and it consumes the innermost OSCORE layer.  </t>
            <t>
An OSCORE endpoint <bcp14>SHOULD</bcp14> define the maximum number of OSCORE layers that it is able to apply (remove) when processing an outgoing (incoming) CoAP message. The defined limit has to appropriately reflect the security requirements of the application. At the same time, such a limit is typically bounded by the maximum number of OSCORE Security Contexts that can be active at the endpoint as well as by the number of intermediary OSCORE endpoints that have been explicitly set up by the communicating parties.  </t>
            <t>
If its defined limit is reached when processing a CoAP message, an OSCORE endpoint <bcp14>MUST NOT</bcp14> perform any further OSCORE processing on that message. If the message is an outgoing request and it requires further OSCORE processing beyond the set limit, the endpoint <bcp14>MUST</bcp14> abort the message sending. If the message is an incoming request and it requires further OSCORE processing beyond the set limit, the endpoint <bcp14>MUST</bcp14> reply with a 4.01 (Unauthorized) error response. The endpoint protects such a response by applying the same OSCORE layers that it successfully removed from the corresponding incoming request, but in the reverse order than the one according to which they were removed (see <xref target="outgoing-responses"/>).</t>
          </li>
        </ul>
      </section>
      <section anchor="general-rules">
        <name>Protection of CoAP Options</name>
        <t>The following considers a sender endpoint that, when protecting an outgoing message M, applies the i-th OSCORE layer in sequence, by using the OSCORE Security Context that is shares with another OSCORE endpoint X.</t>
        <t>As usual, the sender endpoint encrypts and integrity-protects the CoAP options included in M that are processed as Class E for OSCORE, as per Sections <xref target="RFC8613" section="4.1.1" sectionFormat="bare"/> and <xref target="RFC8613" section="4.1.3" sectionFormat="bare"/> of <xref target="RFC8613"/>.</t>
        <t>Per the update made by this document, the sender endpoint <bcp14>MUST</bcp14> perform the procedure defined below for each CoAP option OPT that is included in M and is originally specified only as an outer option (Class U or I) for OSCORE. This procedure does not apply to options that are specified (also) as Class E. Depending on the outcome of this procedure, the sender endpoint processes OPT as per its original Class U or I, or instead as Class E.</t>
        <t>Before protecting M by using the OSCORE Security Context shared with the other OSCORE endpoint X and applying the i-th OSCORE layer in sequence, the sender endpoint performs the following steps for each CoAP option OPT that is included in M and is originally specified only as an outer option (Class U or I) for OSCORE. <xref target="sec-option-protection-diag"/> provides an overview of these steps through a state diagram.</t>
        <t>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 that acts as OSCORE endpoint does not recognize a CoAP option included in M, then the proxy <bcp14>MUST</bcp14> stop processing M and performs the following actions.</t>
        <ul spacing="normal">
          <li>
            <t>If M is a request, then the proxy <bcp14>MUST</bcp14> respond with a 4.02 (Bad Option) error response to (the previous hop towards) the origin client.</t>
          </li>
          <li>
            <t>If M is a response, then the proxy <bcp14>MUST</bcp14> send a 5.02 (Bad Gateway) error response to (the previous hop towards) the origin client.</t>
          </li>
        </ul>
        <t>In either case, this may result in protecting the error response over that communication leg, as per <xref target="outgoing-responses"/>.</t>
      </section>
      <section anchor="outgoing-requests">
        <name>Processing of an Outgoing Request</name>
        <t>The rules from <xref target="general-rules"/> apply when processing an outgoing request message, with the following additions.</t>
        <t>When a source application endpoint applies multiple OSCORE layers in sequence to protect an outgoing request and it uses an OSCORE Security Context shared with the other application endpoint, then the first OSCORE layer <bcp14>MUST</bcp14> be applied by using that Security Context.</t>
        <t>After that, the source application endpoint further protects the outgoing request, by applying one OSCORE layer for each intermediary with which it shares an OSCORE Security Context. When doing so, the source application endpoint applies those OSCORE layers in the same order according to which those intermediaries are positioned in the chain, starting from the one closest to the other application endpoint and moving backwards towards the one closest to the source application endpoint.</t>
      </section>
      <section anchor="incoming-requests">
        <name>Processing of an Incoming Request</name>
        <t>Upon receiving a request REQ, the recipient endpoint performs the actions described in the following steps. <xref target="sec-incoming-req-diag"/> provides an overview of these steps through a state diagram.</t>
        <ol spacing="normal" type="1"><li>
            <t>If REQ includes proxy-related options, the endpoint moves to Step 2. Otherwise, the endpoint moves to Step 3.</t>
          </li>
          <li>
            <t>The endpoint proceeds as defined below, depending on which of the two following conditions holds.  </t>
            <ul spacing="normal">
              <li>
                <t>REQ includes either of the following (set) of CoAP options: 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 moves 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 it is defined in this document, the process defined in <xref target="general-rules"/> seamlessly applies also to the Hop-Limit option. Therefore, in a scenario where the origin client also shares an OSCORE Security Context with the first proxy in the chain, the origin client does not protect the Hop-Limit option end-to-end for the origin server, but it does protect the option when protecting the request for that proxy by means of their shared OSCORE Security Context.</t>
    </section>
    <section anchor="sec-response-caching">
      <name>Caching of OSCORE-Protected Responses</name>
      <t>Although it is not possible as per the original OSCORE specification <xref target="RFC8613"/>, effective cacheability of OSCORE-protected responses at proxies can be achieved. To this end, the approach defined in <xref target="I-D.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 to process (in the REST sense) and that do not yield side effects at the origin server.</t>
      <t>In particular, this approach requires both the origin client and the origin server to have already joined the correct OSCORE group. Then, starting from the same plain CoAP request, different clients in the OSCORE group are able to deterministically generate 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 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 OSCORE Security Context used.  </t>
          <t>
The SCHC processing occurs hop-by-hop as to the Outer SCHC Compression/Decompression. This relies on Outer SCHC Rules that are shared between two adjacent hops.</t>
        </li>
      </ul>
      <t>When using the method defined in this document, thus enabling also an intermediary proxy to be an OSCORE endpoint, the SCHC processing above is generalized as specified below.</t>
      <t>When processing an outgoing CoAP message, a sender endpoint proceeds as follows.</t>
      <ul spacing="normal">
        <li>
          <t>The sender endpoint performs one Inner SCHC Compression for each OSCORE layer applied to the outgoing message.  </t>
          <t>
Each Inner SCHC Compression occurs before protecting the message with that OSCORE layer and relies on the 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 specific CoAP options, extensions, and methods that are used when relying on OSCORE or Group OSCORE.</t>
      <t>This document does not change the security properties of OSCORE and Group OSCORE. That is, given any two OSCORE endpoints, the method defined in this document provides them with the same security guarantees that OSCORE and Group OSCORE provide in the case where such endpoints are specifically application endpoints.</t>
      <t>If Group OSCORE is used over a communication leg and the group mode is used to apply a protection layer to a message over that leg (see <xref section="7" sectionFormat="of" target="I-D.ietf-core-oscore-groupcomm"/>), then all the members of the OSCORE group that support the group mode are able to remove that protection layer, i.e., to accordingly decrypt and verify the message. Therefore, the OSCORE group should only include OSCORE endpoints for which that is acceptable.</t>
      <section anchor="preserving-location-anonymity">
        <name>Preserving Location Anonymity</name>
        <t>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. The performed check is in accordance with the endpoint's configuration and a possible authorization enforcement as well as 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="5" month="July" 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 each other member of the group for pairwise OSCORE
   communication.  Group OSCORE can be used between endpoints
   communicating with CoAP or CoAP-mappable HTTP.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-groupcomm-26"/>
        </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="30" month="August" year="2025"/>
            <abstract>
              <t>   The Constrained Resource Identifier (CRI) is a complement to the
   Uniform Resource Identifier (URI) that represents the URI components
   in Concise Binary Object Representation (CBOR) rather than as a
   sequence of characters.  This approach simplifies parsing,
   comparison, and reference resolution in environments with severe
   limitations on processing power, code size, and memory size.

   This RFC updates RFC 7595 to add a note on how the "URI Schemes"
   registry of RFC 7595 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 –24 attempts to address follow-on AD review
   // comments as well as comments from the ARTART review.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-schc-8824-update-05"/>
        </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="2" month="July" year="2025"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP) is a web transfer
   protocol for constrained devices and constrained networks.  In a
   number of use cases, constrained devices often naturally operate in
   groups (e.g., in a building automation scenario, all lights in a
   given room may need to be switched on/off as a group).  This document
   specifies the use of CoAP for group communication, including the use
   of UDP/IP multicast as the default underlying data transport.  Both
   unsecured and secured CoAP group communication are specified.
   Security is achieved by use of the Group Object Security for
   Constrained RESTful Environments (Group OSCORE) protocol.  The target
   application area of this specification is any group communication use
   cases that involve resource-constrained devices or networks that
   support CoAP.  This document replaces and obsoletes RFC 7390, while
   it updates RFC 7252 and RFC 7641.

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

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-transport-indication-09"/>
        </reference>
        <reference anchor="I-D.ietf-ace-key-groupcomm-oscore">
          <front>
            <title>Key Management for Group Object Security for Constrained RESTful Environments (Group OSCORE) Using Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="28" month="August" year="2025"/>
            <abstract>
              <t>   This document defines an application profile of the Authentication
   and Authorization for Constrained Environments (ACE) framework, to
   request and provision keying material in group communication
   scenarios that are based on the Constrained Application Protocol
   (CoAP) and are secured with Group Object Security for Constrained
   RESTful Environments (Group OSCORE).  This application profile
   delegates the authentication and authorization of Clients, which join
   an OSCORE group through a Resource Server acting as Group Manager for
   that group.  This application profile leverages protocol-specific
   transport profiles of ACE to achieve communication security, server
   authentication, and proof of possession 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-18"/>
        </reference>
        <reference anchor="I-D.ietf-core-coap-pm">
          <front>
            <title>Constrained Application Protocol (CoAP) Performance Measurement Option</title>
            <author fullname="Giuseppe Fioccola" initials="G." surname="Fioccola">
              <organization>Huawei</organization>
            </author>
            <author fullname="Tianran Zhou" initials="T." surname="Zhou">
              <organization>Huawei</organization>
            </author>
            <author fullname="Mauro Cociglio" initials="M." surname="Cociglio">
         </author>
            <author fullname="Fabio Bulgarella" initials="F." surname="Bulgarella">
              <organization>Telecom Italia</organization>
            </author>
            <author fullname="Yongqing Zhu" initials="Y." surname="Zhu">
              <organization>China Telecom</organization>
            </author>
            <date day="4" month="April" year="2025"/>
            <abstract>
              <t>   This document specifies a method for the Performance Measurement of
   the Constrained Application Protocol (CoAP).  A new CoAP option is
   defined in order to enable network telemetry both end-to-end and hop-
   by-hop.  The endpoints cooperate by marking and, possibly, mirroring
   information on the round-trip connection.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-coap-pm-04"/>
        </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="7" month="July" year="2025"/>
            <abstract>
              <t>   Enrollment over Secure Transport (EST) is a certificate provisioning
   protocol over HTTPS [RFC7030] or CoAPs [RFC9148].  This document
   specifies how to carry EST over the Constrained Application Protocol
   (CoAP) protected with Object Security for Constrained RESTful
   Environments (OSCORE).  The specification builds on the EST-coaps
   [RFC9148] specification, but uses OSCORE and Ephemeral Diffie-Hellman
   over COSE (EDHOC) instead of DTLS.  The specification also leverages
   the certificate structures defined in
   [I-D.ietf-cose-cbor-encoded-cert], which can be optionally used
   alongside X.509 certificates.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-amsuess-t2trg-onion-coap-04"/>
        </reference>
        <reference anchor="LwM2M-Core" target="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 <xref target="I-D.ietf-core-groupcomm-bis"/>, e.g., over IP multicast, which can be protected end-to-end between origin client and origin servers by using Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
        <t>This communication model can be assisted by intermediaries such as a CoAP forward-proxy or reverse-proxy, which relays a group request to the origin servers. If Group OSCORE is used, the proxy is intentionally not a member of the OSCORE group. Furthermore, <xref target="I-D.ietf-core-groupcomm-proxy"/> defines a signaling protocol between origin client and proxy, to ensure that responses from the different origin servers are forwarded back to the origin client within a time interval set by the client and that those responses can be distinguished from one another.</t>
        <t>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 based on publish-subscribe communication <xref target="I-D.ietf-core-coap-pubsub"/>, multiple clients are interested in observing the same resource at the same server. 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 a CoAP client sends its request to the LwM2M Gateway acting as a CoAP server.</t>
        <t>If CoAP is used in the communication leg between the LwM2M Gateway and the end IoT devices, then the LwM2M Gateway fundamentally acts as a CoAP reverse-proxy (see <xref section="5.7.3" sectionFormat="of" target="RFC7252"/>). That is, in addition to its own resources, the LwM2M Gateway serves the resources hosted by each end IoT device standing behind it, as exposed by the LwM2M Gateway under a dedicated URI path. As per <xref target="LwM2M-Gateway"/>, the first URI path segment is used as a "prefix" to identify the specific IoT device, while the remaining URI path segments specify the target resource at the IoT device.</t>
        <t>As per Section 7 of <xref target="LwM2M-Gateway"/>, message exchanges between the LwM2M Server and the LwM2M Gateway are secured using the LwM2M-defined technologies, while the LwM2M protocol does not provide end-to-end security between the LwM2M Server and the end IoT devices. However, the approach defined in this document makes it possible to achieve both goals, by allowing the LwM2M Server to use OSCORE for protecting a message both end-to-end with the targeted end IoT device and with the LwM2M Gateway acting as a reverse-proxy.</t>
      </section>
      <section anchor="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 that are available for that server (see <xref section="5" 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 that have permission to use it, and that the proxy can identify through a secure communication association.  </t>
            <t>
However, in order for OSCORE to be an applicable security mechanism for this scenario, OSCORE has to be terminated at the proxy. That is, it would be required for a client and the proxy to share a dedicated OSCORE Security Context and to use it for protecting their communication leg.</t>
          </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 secure communication association used between a client and the proxy. If the proxy could share a different OSCORE Security Context with each different client, then the proxy can rely on it to identify a client before forwarding messages from that client to other members of the firewalled network.</t>
          </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:53]</text>
                  <text x="204" y="596">0xff</text>
                  <text x="196" y="612">Payload:</text>
                  <text x="260" y="612">{Code:</text>
                  <text x="308" y="612">0.02</text>
                  <text x="360" y="612">(POST),</text>
                  <text x="280" y="628">Uri-Host:</text>
                  <text x="380" y="628">"example.com",</text>
                  <text x="272" y="644">OSCORE:</text>
                  <text x="348" y="644">[kid:0x5f,</text>
                  <text x="424" y="644">Partial</text>
                  <text x="488" y="644">IV:42],</text>
                  <text x="264" y="660">0xff,</text>
                  <text x="268" y="676">{Code:</text>
                  <text x="316" y="676">0.01</text>
                  <text x="364" y="676">(GET),</text>
                  <text x="288" y="692">Uri-Path:</text>
                  <text x="388" y="692">"alarm_status"</text>
                  <text x="248" y="708">}</text>
                  <text x="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:53]
  |       |       |    0xff
  |       |       | Payload: {Code: 0.02 (POST),
  |       |       |           Uri-Host: "example.com",
  |       |       |           OSCORE: [kid:0x5f, Partial IV:42],
  |       |       |           0xff,
  |       |       |           {Code: 0.01 (GET),
  |       |       |            Uri-Path: "alarm_status"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |          } // Encrypted with CTX_P_S
  |       |       |
  |       |     Decrypt
  |       |     REQ with
  |       |     CTX_P_S
  |       |       |
  |       |     Decrypt
  |       |     REQ with
  |       |     CTX_C_S
  |       |       |
  |       |     Encrypt
  |       |     RESP with
  |       |     CTX_C_S
  |       |       |
  |       |     Encrypt
  |       |     RESP with
  |       |     CTX_P_S
  |       |       |
  |       |<------+    Code: 2.04 (Changed)
  |       |  2.04 |   Token: 0x7b
  |       |       |  OSCORE: -
  |       |       |    0xff
  |       |       | Payload: {Code: 2.04 (Changed),
  |       |       |           OSCORE: -,
  |       |       |           0xff,
  |       |       |           {Code: 2.05 (Content),
  |       |       |            0xff,
  |       |       |            "0"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |          } // Encrypted with CTX_P_S
  |       |       |
  |     Decrypt   |
  |     RESP with |
  |     CTX_P_S   |
  |       |       |
  |     Encrypt   |
  |     RESP with |
  |     CTX_C_P   |
  |       |       |
  |<------+       |    Code: 2.04 (Changed)
  |  2.04 |       |   Token: 0x8c
  |       |       |  OSCORE: -
  |       |       |    0xff
  |       |       | Payload: {Code: 2.04 (Changed),
  |       |       |           OSCORE: -,
  |       |       |           0xff,
  |       |       |           {Code: 2.05 (Content),
  |       |       |            0xff,
  |       |       |            "0"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |          } // Encrypted with CTX_C_P
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_P   |       |
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_S   |       |
  |       |       |

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

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

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

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

(A, B) indicates a CBOR sequence [RFC8742]
       of two CBOR data items A and B.
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="with-reverse-proxy-oscore-c-p-p-s">
        <name>With Reverse-Proxy; OSCORE: C-P, P-S</name>
        <t>In the example shown in <xref target="fig-example-reverse-proxy-without-end-to-end"/>, message exchanges are protected with OSCORE as follows.</t>
        <ul spacing="normal">
          <li>
            <t>Between the client and the proxy, using the OSCORE Security Context CTX_C_P. The client uses the OSCORE Sender ID 0x20 when using OSCORE with the proxy.</t>
          </li>
          <li>
            <t>Between the proxy and the server, using the OSCORE Security Context CTX_P_S. The proxy uses the OSCORE Sender ID 0xd4 when using OSCORE with the server.</t>
          </li>
        </ul>
        <t>In this example, the proxy is specifically a reverse-proxy. Like typically expected in such a case, the client is not aware of that and believes to communicate with an origin server.</t>
        <t>In order to determine where it has to forward an incoming request to, the proxy relies on the hostname that clients specify in the Uri-Host option of their sent requests. In particular, upon receiving a request that includes the Uri-Host option with value "dev.example", the proxy forwards the request to the origin server shown in the example.</t>
        <t>Furthermore, this example assumes that, in the URI identifying the target resource at the server, the host 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 a CoAP client and uses a LwM2M Gateway acting as a CoAP-to-CoAP reverse-proxy in order to reach an end IoT device.</t>
        <t>In order to determine where it has to forward an incoming request to, the proxy relies on the URI path components that are specified as value of the Uri-Path options included in the request. In particular, the proxy relies on the first URI path segment to identify the specific IoT device to which the request has to be forwarded, while the remaining URI path segments specify the target resource at the IoT device.</t>
        <t>However, as shown in the example, the URI path segments that specify the target resource are hidden from the proxy, since they are protected by the additional use of OSCORE end-to-end between the client and the server.</t>
        <t>Furthermore, this example assumes that, in the URIs identifying the target resource at the proxy as well as in the URI identifying the target resource at the server, the host 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:53]</text>
                  <text x="204" y="580">0xff</text>
                  <text x="196" y="596">Payload:</text>
                  <text x="260" y="596">{Code:</text>
                  <text x="308" y="596">0.02</text>
                  <text x="360" y="596">(POST),</text>
                  <text x="272" y="612">OSCORE:</text>
                  <text x="348" y="612">[kid:0x5f,</text>
                  <text x="424" y="612">Partial</text>
                  <text x="488" y="612">IV:42],</text>
                  <text x="264" y="628">0xff,</text>
                  <text x="268" y="644">{Code:</text>
                  <text x="316" y="644">0.01</text>
                  <text x="364" y="644">(GET),</text>
                  <text x="288" y="660">Uri-Path:</text>
                  <text x="388" y="660">"alarm_status"</text>
                  <text x="248" y="676">}</text>
                  <text x="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:53]
  |       |       |    0xff
  |       |       | Payload: {Code: 0.02 (POST),
  |       |       |           OSCORE: [kid:0x5f, Partial IV:42],
  |       |       |           0xff,
  |       |       |           {Code: 0.01 (GET),
  |       |       |            Uri-Path: "alarm_status"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |          } // Encrypted with CTX_P_S
  |       |       |
  |       |     Decrypt
  |       |     REQ with
  |       |     CTX_P_S
  |       |       |
  |       |     Decrypt
  |       |     REQ with
  |       |     CTX_C_S
  |       |       |
  |       |     Encrypt
  |       |     RESP with
  |       |     CTX_C_S
  |       |       |
  |       |     Encrypt
  |       |     RESP with
  |       |     CTX_P_S
  |       |       |
  |       |<------+    Code: 2.04 (Changed)
  |       |  2.04 |   Token: 0x7b
  |       |       |  OSCORE: -
  |       |       |    0xff
  |       |       | Payload: {Code: 2.04 (Changed),
  |       |       |           OSCORE: -,
  |       |       |           0xff,
  |       |       |           {Code: 2.05 (Content),
  |       |       |            0xff,
  |       |       |            "0"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |          } // Encrypted with CTX_P_S
  |       |       |
  |     Decrypt   |
  |     RESP with |
  |     CTX_P_S   |
  |       |       |
  |     Encrypt   |
  |     RESP with |
  |     CTX_C_P   |
  |       |       |
  |<------+       |    Code: 2.04 (Changed)
  |  2.04 |       |   Token: 0x8c
  |       |       |  OSCORE: -
  |       |       |    0xff
  |       |       | Payload: {Code: 2.04 (Changed),
  |       |       |           OSCORE: -,
  |       |       |           0xff,
  |       |       |           {Code: 2.05 (Content),
  |       |       |            0xff,
  |       |       |            "0"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |          } // Encrypted with CTX_C_P
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_P   |       |
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_S   |       |
  |       |       |

Square brackets [ ... ] indicate content of compressed COSE object.
Curly brackets { ... } indicate encrypted data.
]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="sec-option-protection-diag">
      <name>State Diagram: Protection of CoAP Options</name>
      <t><xref target="fig-option-protection-diagram"/> overviews the rules defined in <xref target="general-rules"/>, which are used to determine whether a CoAP option that is originally specified only as an outer option (Class U or I) for OSCORE has to be processed as Class E, when protecting an outgoing message.</t>
      <figure anchor="fig-option-protection-diagram">
        <name>Protection of CoAP Options Originally Specified only as Outer Options (Class U or I) for OSCORE</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="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, which is specified in <xref target="incoming-requests"/>. The dotted boxes indicate ending states where the processing terminates.</t>
      <figure anchor="fig-incoming-request-diagram">
        <name>Processing of an Incoming Request</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="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-04-05">
        <name>Version -04 to -05</name>
        <ul spacing="normal">
          <li>
            <t>Fixes in the examples of message exchange.</t>
          </li>
          <li>
            <t>Minor clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-03-04">
        <name>Version -03 to -04</name>
        <ul spacing="normal">
          <li>
            <t>Removed definition and use of "OSCORE-in-OSCORE".</t>
          </li>
          <li>
            <t>Moved use cases to an appendix.</t>
          </li>
          <li>
            <t>Explain deviations from RFC 8613 as an actual subsection.</t>
          </li>
          <li>
            <t>More precise indication of outer or inner CoAP options.</t>
          </li>
          <li>
            <t>Added security consideration on membership of OSCORE groups.</t>
          </li>
          <li>
            <t>Updated references.</t>
          </li>
          <li>
            <t>Editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-02-03">
        <name>Version -02 to -03</name>
        <ul spacing="normal">
          <li>
            <t>Clarified motivation for updating RFC 8768 in the introduction.</t>
          </li>
          <li>
            <t>Explained that OSCORE-capable proxies have to recognize CoAP options included in outgoing messages to protect.</t>
          </li>
          <li>
            <t>Fixed typo about the intended class of Hop-Limit option for OSCORE.</t>
          </li>
          <li>
            <t>Fixed protection of the Uri-Host option in examples.</t>
          </li>
          <li>
            <t>Added security considerations about the Hop-Limit option.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-01-02">
        <name>Version -01 to -02</name>
        <ul spacing="normal">
          <li>
            <t>Revised escalation of CoAP option protection.</t>
          </li>
          <li>
            <t>Specified general ordering for protecting outgoing requests.</t>
          </li>
          <li>
            <t>Explicit definition of OSCORE processing for the Hop-Limit option (update to RFC 8768).</t>
          </li>
          <li>
            <t>Added examples of message exchange with a reverse-proxy.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-00-01">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>
            <t>Escalation of option protection as explicit update point to RFC 8613.</t>
          </li>
          <li>
            <t>Clarified examples of Class U/I CoAP options that become encrypted.</t>
          </li>
          <li>
            <t>Considered also the CoAP Options Proxy-Cri and Proxy-Scheme-Number.</t>
          </li>
          <li>
            <t>Added reference to Onion CoAP as use case.</t>
          </li>
          <li>
            <t>Required to set a limit on OSCORE layers that can be added/removed.</t>
          </li>
          <li>
            <t>Revised general rules on protecting CoAP options.</t>
          </li>
          <li>
            <t>A forward-proxy consumes a request when the request URI identifies the proxy itself.</t>
          </li>
          <li>
            <t>Consistency fix: a reverse-proxy can forward based on Uri-Host, Uri-Port or Uri-Path.</t>
          </li>
          <li>
            <t>Generalized authorization checks as acceptability checks.</t>
          </li>
          <li>
            <t>Added acceptability check before decrypting a request.</t>
          </li>
          <li>
            <t>Fixes in the examples of message exchange.</t>
          </li>
          <li>
            <t>Updated state diagram of the incoming request processing.</t>
          </li>
          <li>
            <t>Added state diagram on the protection of CoAP options of Class U/I.</t>
          </li>
          <li>
            <t>Updated references.</t>
          </li>
          <li>
            <t>Editorial fixes and improvements.</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <contact fullname="Christian Amsüss"/>, <contact fullname="Peter Blomqvist"/>, <contact fullname="Carsten Bormann"/>, <contact fullname="David Navarro"/>, <contact fullname="Göran Selander"/>, and <contact fullname="Lucas Åhl"/> for their comments and feedback.</t>
      <t>The work on this document has been partly supported by the Sweden's Innovation Agency VINNOVA and the Celtic-Next projects CRITISEC and CYPRESS; and by the H2020 project SIFIS-Home (Grant agreement 952652).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
j/YeP9oDzv//AUqVDgEqnwEA

-->

</rfc>
