<?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  (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-oscore-capable-proxies-03" category="std" consensus="true" submissionType="IETF" updates="8613, 8768" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title abbrev="OSCORE-capable Proxies">OSCORE-capable Proxies</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-capable-proxies-03"/>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <author initials="R." surname="Höglund" fullname="Rikard Höglund">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440</code>
          <country>Sweden</country>
        </postal>
        <email>rikard.hoglund@ri.se</email>
      </address>
    </author>
    <date year="2024" month="October" day="21"/>
    <area>Internet</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <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>
    <section anchor="intro">
      <name>Introduction</name>
      <t>The Constrained Application Protocol (CoAP) <xref target="RFC7252"/> supports the presence of intermediaries, such as forward-proxies and reverse-proxies, which assist origin clients by performing requests to origin servers on their behalf, and forwarding back the corresponding responses.</t>
      <t>CoAP supports also group communication scenarios <xref target="I-D.ietf-core-groupcomm-bis"/>, where clients can send a one-to-many request targeting all the servers in the group, e.g., by using IP multicast. Like for one-to-one communication, group settings can also rely on intermediaries <xref target="I-D.ietf-core-groupcomm-proxy"/>.</t>
      <t>The security protocol Object Security for Constrained RESTful Environments (OSCORE) <xref target="RFC8613"/> can be used to protect CoAP messages between two endpoints at the application layer, especially achieving end-to-end security in the presence of (non-trusted) intermediaries. When CoAP group communication is used, the same can be achieved by means of the security protocol Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
      <t>For a number of use cases (see <xref target="sec-use-cases"/>), it is required and/or beneficial that communications are secured also between an application endpoint (i.e., a CoAP origin client/server) and an intermediary, as well as between two adjacent intermediaries in a chain. This especially applies to the communication leg between the CoAP origin client and the adjacent intermediary acting as next hop towards the CoAP origin server.</t>
      <t>In such cases, and especially if the origin client already uses OSCORE to achieve end-to-end security with the origin server, it would be convenient that OSCORE is used also to secure communications between the origin client and its next hop.</t>
      <t>However, the original specification <xref target="RFC8613"/> does not define how OSCORE can be used to protect CoAP messages in that communication leg, or how to generally process CoAP messages with OSCORE at an intermediary. In fact, this would require to consider also an intermediary as an "OSCORE endpoint".</t>
      <t>This document fills this gap, and updates <xref target="RFC8613"/> as follows.</t>
      <ul spacing="normal">
        <li>
          <t>It defines how to use OSCORE for protecting a CoAP message in the communication leg between: i) an origin client/server and an intermediary; or ii) two adjacent intermediaries in an intermediary chain. That is, besides origin clients/servers, it allows also intermediaries to be "OSCORE endpoints".</t>
        </li>
        <li>
          <t>It defines rules to escalate the protection of a CoAP option that is originally meant to be unprotected or only integrity-protected by OSCORE. This results in both encrypting and integrity-protecting a CoAP option whenever it is possible.</t>
        </li>
        <li>
          <t>It admits a CoAP message to be secured by multiple, nested OSCORE protections applied in sequence, as an "OSCORE-in-OSCORE" process. For instance, this is the case when the message is OSCORE-protected end-to-end between the origin client and origin server, and the result is further OSCORE-protected over the leg between the current and next hop (e.g., the origin client and the adjacent intermediary acting as next hop towards the origin server).</t>
        </li>
      </ul>
      <t>Furthermore, this document updates <xref target="RFC8768"/>, as it explicitly defines the CoAP option Hop-Limit to be of Class U for OSCORE (see <xref target="sec-hop-limit"/>). In the case where the Hop-Limit option is first added to a request by an origin client instead of an intermediary, this update avoids undesired overhead in terms of message size and ensures that the first intermediary in the chain enforces the intent of the origin client in detecting forwarding loops.</t>
      <t>This document does not specify any new signaling method to guide the message processing on the different endpoints. In particular, every endpoint is always able to understand what steps to take on an incoming message, depending on the presence of the OSCORE option and of other CoAP options intended for an intermediary.</t>
      <t>The approach defined in this document can be seamlessly adopted also when Group OSCORE is used, for protecting CoAP messages in group communication scenarios that rely on intermediaries.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <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>
          <li>
            <t>OSCORE-in-OSCORE: the process by which a message protected with (Group) OSCORE is further protected with (Group) OSCORE. This means that, if such a process is used, a successful decryption and verification of an OSCORE-protected message might yield an OSCORE-protected message.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="sec-use-cases">
      <name>Use Cases</name>
      <t>The approach defined in this document has been motivated by a number of use cases, which are summarized below.</t>
      <section anchor="ssec-uc1">
        <name>CoAP Group Communication with Proxies</name>
        <t>CoAP supports also one-to-many group communication, e.g., over IP multicast <xref target="I-D.ietf-core-groupcomm-bis"/>, which can be protected end-to-end between origin client and origin servers by using Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/>.</t>
        <t>This communication model can be assisted by intermediaries such as a CoAP forward-proxy or reverse-proxy, which relays a group request to the origin servers. If Group OSCORE is used, the proxy is intentionally not a member of the OSCORE group. Furthermore, <xref target="I-D.ietf-core-groupcomm-proxy"/> defines a signaling protocol between origin client and proxy, to ensure that responses from the different origin servers are forwarded back to the origin client within a time interval set by the client, and that they can be distinguished from one another.</t>
        <t>In particular, it is required that the proxy identifies the origin client as allowed-listed, before forwarding a group request to the servers (see <xref section="4" sectionFormat="of" target="I-D.ietf-core-groupcomm-proxy"/>). This requires a security association between the origin client and the proxy, which would be convenient to provide with a dedicated OSCORE Security Context between the two, since the client is possibly using also Group OSCORE with the origin servers.</t>
      </section>
      <section anchor="ssec-uc2">
        <name>CoAP Observe Notifications over Multicast</name>
        <t>The Observe extension for CoAP <xref target="RFC7641"/> allows a client to register its interest in "observing" a resource at a server. The server can then send back notification responses upon changes in the resource representation, all matching with the original observation request.</t>
        <t>In some applications, such as pub-sub <xref target="I-D.ietf-core-coap-pubsub"/>, multiple clients are interested in observing the same resource at the same server. Hence, <xref target="I-D.ietf-core-observe-multicast-notifications"/> defines a method that allows the server to send a multicast notification to all the observer clients at once, e.g., over IP multicast. To this end, the server synchronizes the clients by providing them with a common "phantom observation request", against which the following multicast notifications will match.</t>
        <t>In case the clients and the server use Group OSCORE for end-to-end security and a proxy is also involved, an additional step is required (see <xref section="12" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>). That is, clients are in turn required to provide the proxy with the obtained "phantom observation request", thus enabling the proxy to receive the multicast notifications from the server.</t>
        <t>Therefore, it is preferable to have a security association also between each client and the proxy, in order to ensure the integrity of that information provided to the proxy (see <xref section="15.3" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>). Like for the use case in <xref target="ssec-uc1"/>, this would be conveniently achieved with a dedicated OSCORE Security Context between a client and the proxy, since the client is also using Group OSCORE with the origin server.</t>
      </section>
      <section anchor="ssec-uc3">
        <name>LwM2M Client and External Application Server</name>
        <t>The Lightweight Machine-to-Machine (LwM2M) protocol <xref target="LwM2M-Core"/> enables a LwM2M Client device to securely bootstrap and then register at a LwM2M Server, with which it will perform most of its following communication exchanges. As per the transport bindings specification of LwM2M <xref target="LwM2M-Transport"/>, the LwM2M Client and LwM2M Server can use CoAP and OSCORE to secure their communications at the application layer, including during the device registration process.</t>
        <t>Furthermore, Section 5.5.1 of <xref target="LwM2M-Transport"/> specifies that:</t>
        <blockquote>
          <t>OSCORE <bcp14>MAY</bcp14> also be used between LwM2M endpoint and non-LwM2M endpoint, e.g., between an Application Server and a LwM2M Client via a LwM2M server. Both the LwM2M endpoint and non-LwM2M endpoint <bcp14>MUST</bcp14> implement OSCORE and be provisioned with an OSCORE Security Context.</t>
        </blockquote>
        <t>In such a case, the LwM2M Server can practically act as forward-proxy between the LwM2M Client and the external Application Server. At the same time, the LwM2M Client and LwM2M Server must continue protecting communications on their leg using their OSCORE Security Context. Like for the use case in <xref target="ssec-uc1"/>, this also allows the LwM2M Server to identify the LwM2M Client, before forwarding its request outside the LwM2M domain and towards the external Application Server.</t>
      </section>
      <section anchor="ssec-uc4">
        <name>LwM2M Gateway</name>
        <t>The specification <xref target="LwM2M-Gateway"/> extends the LwM2M architecture by defining the LwM2M Gateway functionality. That is, a LwM2M Server can manage end IoT devices that are deployed "behind" the LwM2M Gateway. While it is outside the scope of that specification, it is possible for the LwM2M Gateway to use any suitable protocol with its connected end IoT devices, as well as to carry out any required protocol translation.</t>
        <t>Practically, the LwM2M Server can send a request to the LwM2M Gateway, asking to forward it to an end IoT device. With particular reference to CoAP and the related transport binding specified in <xref target="LwM2M-Transport"/>, the LwM2M Server acting as CoAP client sends its request to the LwM2M Gateway acting as CoAP server.</t>
        <t>If CoAP is used in the communication leg between the LwM2M Gateway and the end IoT devices, then the LwM2M Gateway fundamentally acts as a CoAP reverse-proxy (see <xref section="5.7.3" sectionFormat="of" target="RFC7252"/>). That is, in addition to its own resources, the LwM2M Gateway serves the resources hosted by each end IoT device standing behind it, as exposed by the LwM2M Gateway under a dedicated URI path. As per <xref target="LwM2M-Gateway"/>, the first URI path segment is used as "prefix" to identify the specific IoT device, while the remaining URI path segments specify the target resource at the IoT device.</t>
        <t>As per Section 7 of <xref target="LwM2M-Gateway"/>, message exchanges between the LwM2M Server and the L2M2M Gateway are secured using the LwM2M-defined technologies, while the LwM2M protocol does not provide end-to-end security between the LwM2M Server and the end IoT devices. However, the approach defined in this document makes it possible to achieve both goals, by allowing the LwM2M Server to use OSCORE for protecting a message both end-to-end with the targeted end IoT device and with the LwM2M Gateway acting as reverse-proxy.</t>
      </section>
      <section anchor="further-use-cases">
        <name>Further Use Cases</name>
        <t>The approach defined in this document can be useful also in the following use cases relying on a proxy.</t>
        <ul spacing="normal">
          <li>
            <t>A server aware of a suitable cross-proxy can rely on it as a third-party service, in order to indicate transports for CoAP available to that server (see <xref section="4" sectionFormat="of" target="I-D.ietf-core-transport-indication"/>).  </t>
            <t>
From a security point of view, it would be convenient if the proxy could provide suitable credentials to the client, as a general trusted proxy for the system. At the same time, it can be desirable to limit the use of such a proxy to a set of clients which have permission to use it, and that the proxy can identify through a secure communication association.  </t>
            <t>
However, in order for OSCORE to be an applicable security mechanism for this scenario, OSCORE has to be terminated at the proxy. That is, it would be required for a client and the proxy to share a dedicated OSCORE Security Context and to use it for protecting their communication leg.</t>
          </li>
          <li>
            <t>The method specified in <xref target="I-D.ietf-core-coap-pm"/> relies on the Performance Measurement option to enable network telemetry for CoAP communications. This makes it possible to efficiently measure Round-Trip Time and message losses, both end-to-end and hop-by-hop. In particular, on-path probes such as intermediary proxies can be deployed to perform measurements hop-by-hop.  </t>
            <t>
When OSCORE is used in deployments including on-path probes, an inner Performance Measurement option is protected end-to-end between the two application endpoints and enables end-to-end measurements between those. At the same time, an outer Performance Measurement option allows also hop-by-hop measurements to be performed by relying on an on-path probe.  </t>
            <t>
Therefore, it is preferable to have a secure association with an on-path probe, in order to also ensure the integrity of the hop-by-hop measurements exchanged with the probe.</t>
          </li>
          <li>
            <t>The method specified in <xref target="I-D.ietf-ace-coap-est-oscore"/> enables public-key certificate enrollment for Internet of Things deployments. This leverages payload formats defined in Enrollment over Secure Transport (EST) <xref target="RFC7030"/>, while relying on CoAP for message transfer and on OSCORE for message protection.  </t>
            <t>
In real-world deployments, an EST server issuing public-key certificates may reside outside a constrained network that includes devices acting as EST clients. In particular, the EST clients are expected to support only CoAP, while the EST server in a non-constrained network is expected to support only HTTP. This requires a CoAP-to-HTTP proxy to be deployed between the EST clients and the EST server, in order to map CoAP messages with HTTP messages across the two networks.  </t>
            <t>
Even in such a scenario, the EST server and every EST client can still effectively use OSCORE to protect their communications end-to-end. At the same time, it is desirable to have an additional secure association between the EST client and the CoAP-to-HTTP proxy, especially in order for the proxy to identify the EST client before forwarding EST messages out of the CoAP boundary of the constrained network and towards the EST server.</t>
          </li>
          <li>
            <t>A proxy may be deployed to act as an entry point to a firewalled network that only authenticated clients can join. In particular, authentication can rely on the used secure communication association between a client and the proxy. If the proxy could share a different OSCORE Security Context with each different client, then the proxy can rely on it to identify a client before forwarding messages from that client to other members of the firewalled network.</t>
          </li>
          <li>
            <t>The approach defined in this document does not pose a limit to the number of OSCORE protections applied to the same CoAP message.  </t>
            <t>
This enables more privacy-oriented scenarios based on proxy chains, where the origin client protects a CoAP request first by using the OSCORE Security Context shared with the origin server, and then by using different OSCORE Security Contexts shared with the different hops in the chain. Once received at a chain hop, the request would be stripped of the OSCORE protection associated with that hop before being forwarded to the next one.  </t>
            <t>
Building on that, it is also possible to enable the operation of hidden services and clients through onion routing with CoAP <xref target="I-D.amsuess-t2trg-onion-coap"/>, similarly to how Tor (The Onion Router) <xref target="TOR-SPEC"/> enables it for TCP-based protocols.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="sec-message-processing">
      <name>Message Processing</name>
      <t>As mentioned in <xref target="intro"/>, this document introduces the following two main deviations from the original OSCORE specification <xref target="RFC8613"/>.</t>
      <ol spacing="normal" type="1"><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, as the output of an "OSCORE-in-OSCORE" process. Hence, following a decryption, the resulting message might legitimately include an OSCORE option, and thus have in turn to be decrypted.  </t>
          <t>
The most common case is expected to consider a message protected with up to two OSCORE layers, i.e.: i) an inner layer, protecting the message end-to-end between the origin client and the origin server acting as application endpoints; and ii) an outer layer, protecting the message between a certain OSCORE endpoint and the other OSCORE endpoint adjacent in the intermediary chain.  </t>
          <t>
However, a message can also be protected with a higher, arbitrary number of nested OSCORE layers, e.g., in scenarios relying on a longer chain of intermediaries. For instance, the origin client can sequentially apply multiple OSCORE layers to a request, each of which to be consumed and removed by one of the intermediaries in the chain, until the origin server is reached and it consumes the innermost OSCORE layer.  </t>
          <t>
An OSCORE endpoint <bcp14>SHOULD</bcp14> define the maximum number of OSCORE layers that it is able to apply (remove) when processing an outgoing (incoming) CoAP message. The defined limit has to appropriately reflect the security requirements of the application. At the same time, such a limit is typically bounded by the maximum number of OSCORE Security Contexts that can be active at the endpoint, and also by the number of intermediary OSCORE endpoints that have been explicitly set up by the communicating parties.  </t>
          <t>
If its defined limit is reached when processing a CoAP message, an OSCORE endpoint <bcp14>MUST NOT</bcp14> perform any further OSCORE processing on that message. If the message is an outgoing request and it requires further OSCORE processing beyond the set limit, the endpoint <bcp14>MUST</bcp14> abort the message sending. If the message is an incoming request and it requires further OSCORE processing beyond the set limit, the endpoint <bcp14>MUST</bcp14> reply with a 4.01 (Unauthorized) error response. The endpoint protects such a response by applying the same OSCORE layers that it successfully removed from the corresponding incoming request, but in the reverse order than the one according to which they were removed (see <xref target="outgoing-responses"/>).</t>
        </li>
      </ol>
      <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="general-rules">
        <name>Protection of CoAP Options</name>
        <t>Let us consider a sender endpoint that, when protecting an outgoing message M, applies the i-th OSCORE layer in sequence, by using the OSCORE Security Context shared with another OSCORE endpoint X.</t>
        <t>As usual, the sender endpoint encrypts and integrity-protects the CoAP options included in M that are specified as Class E for OSCORE <xref target="RFC8613"/>.</t>
        <t>In addition to that, the sender endpoint <bcp14>MUST</bcp14> perform the procedure defined below for each CoAP option OPT that is included in M and that is originally specified as Class U or I for OSCORE. Depending on the outcome of such a procedure, the sender endpoint processes OPT as per its original Class U or I, or instead as if it was specified as Class E.</t>
        <t>When protecting M by using the OSCORE Security Context shared with another OSCORE endpoint X and applying the i-th OSCORE layer in sequence, the sender endpoint performs the following steps, for each CoAP option OPT included in M and originally defined as 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 if it was specified as Class E for OSCORE, i.e., to be both encrypted and integrity-protected. Then, the sender endpoint terminates this algorithm.</t>
          </li>
          <li>
            <t>The sender endpoint determines that OPT will be processed as per its original Class U or I for OSCORE. Then, the sender endpoint terminates this algorithm.</t>
          </li>
        </ol>
        <t>Compared to what is defined in <xref section="5.7.1" sectionFormat="of" target="RFC7252"/>, a new requirement is introduced for a proxy that acts as OSCORE endpoint. That is, for each CoAP option OPT included in an outgoing message M that the proxy protects with OSCORE, the proxy has to be able to recognize OPT and thus be aware of the original Class of OPT for OSCORE.</t>
        <t>If a proxy does not recognize a CoAP option included in M, then the proxy <bcp14>MUST</bcp14> stop processing M and performs the following actions.</t>
        <ul spacing="normal">
          <li>
            <t>If M is a request, then the proxy <bcp14>MUST</bcp14> respond with a 4.02 (Bad Option) error response to (the previous hop towards) the origin client.</t>
          </li>
          <li>
            <t>If M is a response, then the proxy <bcp14>MUST</bcp14> send a 5.02 (Bad Gateway) error response to (the previous hop towards) the origin client.</t>
          </li>
        </ul>
        <t>In either case, this may result in protecting the error response over that communication leg, as per <xref target="outgoing-responses"/>.</t>
      </section>
      <section anchor="outgoing-requests">
        <name>Processing of an Outgoing Request</name>
        <t>The rules from <xref target="general-rules"/> apply when processing an outgoing request message, with the following additions.</t>
        <t>When a source application endpoint applies multiple OSCORE layers in sequence to protect an outgoing request, and it uses an OSCORE Security Context shared with the other application endpoint, then the first OSCORE layer <bcp14>MUST</bcp14> be applied by using that Security Context.</t>
        <t>After that, the source application endpoint further protects the outgoing request, by applying one OSCORE layer for each intermediary with which it shares an OSCORE Security Context. When doing so, the source application endpoint applies those OSCORE layers in the same order according to which those intermediaries are positioned in the chain, starting from the one closest to the other application endpoint and moving backwards towards the one closest to the source application endpoint.</t>
      </section>
      <section anchor="incoming-requests">
        <name>Processing of an Incoming Request</name>
        <t>Upon receiving a request REQ, the recipient endpoint performs the actions described in the following steps. <xref target="sec-incoming-req-diag"/> provides an overview of these steps through a state diagram.</t>
        <ol spacing="normal" type="1"><li>
            <t>If REQ includes proxy-related options, the endpoint moves to Step 2. Otherwise, the endpoint moves to Step 3.</t>
          </li>
          <li>
            <t>The endpoint proceeds as defined below, depending on which of the two following conditions holds.  </t>
            <ul spacing="normal">
              <li>
                <t>REQ includes either of the following (set) of CoAP options: the Proxy-Uri option; the Proxy-Cri option; the Proxy-Scheme option or the Proxy-Scheme-Number option, together with any of the Uri-* options.      </t>
                <t>
If the endpoint is not configured to be a forward-proxy, it <bcp14>MUST</bcp14> stop processing the request and <bcp14>MUST</bcp14> respond with a 5.05 (Proxying Not Supported) error response to (the previous hop towards) the origin client, as per <xref section="5.10.2" sectionFormat="of" target="RFC7252"/>. This may result in protecting the error response over that communication leg, as per <xref target="outgoing-responses"/>.      </t>
                <t>
Otherwise, the endpoint <bcp14>MUST</bcp14> check whether forwarding this request to (the next hop towards) the origin server is an acceptable operation to perform, according to the endpoint's configuration and a possible authorization enforcement. This check can be based, for instance, on the specific OSCORE Security Context that the endpoint used to decrypt the incoming message, before performing this step.      </t>
                <t>
In case the check fails, the endpoint <bcp14>MUST</bcp14> stop processing the request and <bcp14>MUST</bcp14> respond with a 4.01 (Unauthorized) error response to (the previous hop towards) the origin client, as per <xref section="5.10.2" sectionFormat="of" target="RFC7252"/>. This may result in protecting the error response over that communication leg, as per <xref target="outgoing-responses"/>.      </t>
                <t>
Instead, in case the check succeeds, the endpoint consumes the proxy-related options as per <xref section="5.7.2" sectionFormat="of" target="RFC7252"/>. In particular, the endpoint checks whether the authority (host and port) of the request URI identifies the endpoint itself. In such a case, the endpoint moves to Step 1.      </t>
                <t>
Otherwise, the endpoint forwards REQ to (the next hop towards) the origin server according to the request URI, unless differently indicated in REQ, e.g., by means of any of its CoAP options. For instance, a forward-proxy does not forward a request that includes proxy-related options together with the Listen-To-Multicast-Notifications option (see <xref section="12" sectionFormat="of" target="I-D.ietf-core-observe-multicast-notifications"/>).      </t>
                <t>
If the endpoint forwards REQ to (the next hop towards) the origin server, this may result in (further) protecting REQ over that communication leg, as per <xref target="outgoing-requests"/>.      </t>
                <t>
After that, the endpoint does not take any further action.</t>
              </li>
              <li>
                <t>REQ does not include the Proxy-Scheme option or the Proxy-Scheme-Number option, but it includes one or more Uri-Path options, and/or the Uri-Host option, and/or the Uri-Port option.      </t>
                <t>
If the endpoint is not configured to be a reverse-proxy, or what is targeted by the value of the Uri-Path, Uri-Host, and Uri-Port options is not intended to support reverse-proxy functionalities, then the endpoint proceeds to Step 3.      </t>
                <t>
Otherwise, the endpoint <bcp14>MUST</bcp14> check whether forwarding this request to (the next hop towards) the origin server is an acceptable operation to perform, according to the endpoint's configuration and a possible authorization enforcement. This check can be based, for instance, on the specific OSCORE Security Context that the endpoint used to decrypt the incoming message, before performing this step.      </t>
                <t>
In case the check fails, the endpoint <bcp14>MUST</bcp14> stop processing the request and <bcp14>MUST</bcp14> respond with a 4.01 (Unauthorized) error response to (the previous hop towards) the origin client, as per <xref section="5.10.2" sectionFormat="of" target="RFC7252"/>. This may result in protecting the error response over that communication leg, as per <xref target="outgoing-responses"/>.      </t>
                <t>
Otherwise, the endpoint consumes the present Uri-Path, Uri-Host, and Uri-Port options, and forwards REQ to (the next hop towards) the origin server, unless differently indicated in REQ, e.g., by means of any of its CoAP options.      </t>
                <t>
If the endpoint forwards REQ to (the next hop towards) the origin server, this may result in (further) protecting REQ over that communication leg, as per <xref target="outgoing-requests"/>.      </t>
                <t>
After that, the endpoint does not take any further action.      </t>
                <t>
Note that, when forwarding REQ, the endpoint might not remove all the Uri-Path options originally present, e.g., in case the next hop towards the origin server is a reverse-proxy.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>The endpoint proceeds as defined below, depending on which of the two following conditions holds.  </t>
            <ul spacing="normal">
              <li>
                <t>REQ does not include an OSCORE option.      </t>
                <t>
If the endpoint does not have an application to handle REQ, it <bcp14>MUST</bcp14> stop processing the request and <bcp14>MAY</bcp14> respond with a 4.00 (Bad Request) error response to (the previous hop towards) the origin client. This may result in protecting the error response over that communication leg, as per <xref target="outgoing-responses"/>.      </t>
                <t>
Otherwise, the endpoint delivers REQ to the application.</t>
              </li>
              <li>
                <t>REQ includes an OSCORE option.      </t>
                <t>
If REQ includes any Uri-Path options, the endpoint <bcp14>MUST</bcp14> stop processing the request and <bcp14>MAY</bcp14> respond with a 4.00 (Bad Request) error response to (the previous hop towards) the origin client. This may result in protecting the error response over that communication leg, as per <xref target="outgoing-responses"/>.      </t>
                <t>
Otherwise, the endpoint <bcp14>MUST</bcp14> check whether decrypting the request is an acceptable operation to perform, according to the endpoint's configuration and a possible authorization enforcement, and in view of the (previous hop towards the) origin client being the alleged request sender. This check can be based, for instance, on considering the source addressing information of the request, and then asserting whether the OSCORE Security Context indicated by the OSCORE option is not only available to use, but also present in a local list of OSCORE Security Contexts that are usable to decrypt a request from the alleged request sender.      </t>
                <t>
In case the check fails, the endpoint <bcp14>MUST</bcp14> stop processing the request and <bcp14>MUST</bcp14> respond with a 4.01 (Unauthorized) error response to (the previous hop towards) the origin client, as per <xref section="5.10.2" sectionFormat="of" target="RFC7252"/>. This may result in protecting the error response over that communication leg, as per <xref target="outgoing-responses"/>.      </t>
                <t>
Instead, in case the check succeeds, the endpoint decrypts REQ using the OSCORE Security Context indicated by the OSCORE option, which results in the decrypted request REQ*. The possible presence of an OSCORE option in REQ* is not treated as an error situation.      </t>
                <t>
If the OSCORE processing results in an error, the endpoint <bcp14>MUST</bcp14> stop processing the request and performs error handling as per <xref section="8.2" sectionFormat="of" target="RFC8613"/> or Sections <xref target="I-D.ietf-core-oscore-groupcomm" section="7.2" sectionFormat="bare"/> and <xref target="I-D.ietf-core-oscore-groupcomm" section="8.4" sectionFormat="bare"/> of <xref target="I-D.ietf-core-oscore-groupcomm"/>, in case OSCORE or Group OSCORE is used, respectively. In case the endpoint sends an error response to (the previous hop towards) the origin client, this may result in protecting the error response over that communication leg, as per <xref target="outgoing-responses"/>.      </t>
                <t>
Otherwise, REQ takes REQ*, and the endpoint moves to Step 1.</t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
      <section anchor="outgoing-responses">
        <name>Processing of an Outgoing Response</name>
        <t>The rules from <xref target="general-rules"/> apply when processing an outgoing response message, with the following additions.</t>
        <t>When a source application endpoint applies multiple OSCORE layers in sequence to protect an outgoing response, and it uses an OSCORE Security Context shared with the other application endpoint, then the first OSCORE layer <bcp14>MUST</bcp14> be applied by using that Security Context.</t>
        <t>The sender endpoint protects the response by applying the same OSCORE layers that it removed from the corresponding incoming request, but in the reverse order than the one according to which they were removed.</t>
        <t>In case the response is an error response, the sender endpoint protects it by applying the same OSCORE layers that it successfully removed from the corresponding incoming request, but in the reverse order than the one according to which they were removed.</t>
      </section>
      <section anchor="incoming-responses">
        <name>Processing of an Incoming Response</name>
        <t>The recipient endpoint removes the same OSCORE layers that it added when protecting the corresponding outgoing request, but in the reverse order than the one according to which they were added.</t>
        <t>When doing so, the possible presence of an OSCORE option in the decrypted response following the removal of an OSCORE layer is not treated as an error situation, unless it occurs after having removed as many OSCORE layers as were added in the corresponding outgoing request. In such a case, the endpoint <bcp14>MUST</bcp14> stop processing the response.</t>
      </section>
    </section>
    <section anchor="sec-hop-limit">
      <name>OSCORE Processing of the Hop-Limit Option</name>
      <t>The CoAP option Hop-Limit is defined in <xref target="RFC8768"/> and can be used to detect forwarding loops through a chain of proxies. The first proxy in the chain that understands the option can include it in a received request (if not present already), then sets a proper integer value specifying the desired maximum number of hops, and finally forward the request to the next hop. Any following proxy that understands the option decrements the option value and forwards the request if the new value is different from zero, or returns a 5.08 (Hop Limit Reached) error response otherwise.</t>
      <t><xref target="RFC8768"/> does not define how the Hop-Limit option is processed by OSCORE. As a consequence, the default behavior specified in <xref section="4.1" sectionFormat="of" target="RFC8613"/> applies, i.e., the Hop-Limit option has to be processed as Class E for OSCORE.</t>
      <t>However, this results in additionally and unjustifiably increasing the size of OSCORE-protected CoAP messages, in case the origin client is the first endpoint to add the Hop-Limit option in a CoAP request. In the typical scenario where the origin client and the origin server share an OSCORE Security Context, the origin client including the Hop-Limit option in a request will also protect that option when protecting the request end-to-end for the origin server, per the default processing mentioned above. After that, the origin client sends the request to its adjacent proxy in the chain, which will add an outer Hop-Limit option to be effectively considered from then on as the message is forwarded towards the origin server.</t>
      <t>This undesirably prevents the first proxy in the chain from enforcing the intent of the origin client, which was presumably in the position to specify a better initial value for the Hop-Limit option. While this does not fundamentally prevent the detection of forwarding loops, it is conducive to deviations from the intention of the origin client. Moreover, it results in undesired overhead due to the presence of the inner Hop-Limit option included by the client. That inner option will not be visible by the proxies in the chain and therefore will serve no practical purpose, but it will still be conveyed within the request as this traverses each hop towards the origin server.</t>
      <t>In order to prevent that by construction, this section updates <xref target="RFC8768"/> by explicitly defining the Hop-Limit option to be of Class U for OSCORE.</t>
      <t>Therefore, with reference to the scenario discussed above, the origin client does not protect the Hop-Limit option when protecting the request end-to-end for the origin server, thus allowing the first proxy in the chain to see and process the Hop-Limit option as expected.</t>
      <t>When OSCORE is used at proxies like defined in this document, the process defined in <xref target="general-rules"/> seamlessly applies also to the Hop-Limit option. Therefore, in a scenario where the origin client also shares an OSCORE Security Context with the first proxy in the chain, the origin client does not protect the Hop-Limit option end-to-end for the origin server, but it does protect the option when protecting the request for that proxy by means of their shared OSCORE Security Context.</t>
    </section>
    <section anchor="sec-response-caching">
      <name>Caching of OSCORE-Protected Responses</name>
      <t>Although it is not possible as per the original OSCORE specification <xref target="RFC8613"/>, effective cacheability of OSCORE-protected responses at proxies can be achieved. To this end, the approach defined in <xref target="I-D.amsuess-core-cachable-oscore"/> can be used, as based on Deterministic Requests protected with the pairwise mode of Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/> used end-to-end between an origin client and an origin server. The applicability of this approach is limited to requests that are safe (in the REST sense) to process and do not yield side effects at the origin server.</t>
      <t>In particular, this approach requires both the origin client and the origin server to have already joined the correct OSCORE group. Then, starting from the same plain CoAP request, different clients in the OSCORE group are able to deterministically generate a same Deterministic Request protected with Group OSCORE, which is sent to a proxy for being forwarded to the origin server. The proxy can effectively cache the resulting OSCORE-protected response from the server, since the same plain CoAP request will result again in the same Deterministic Request and thus will produce a cache hit at the proxy.</t>
      <t>When using this approach, the following also applies in addition to what is defined in <xref target="sec-message-processing"/>, when processing incoming messages at a proxy that implements caching of responses.</t>
      <ul spacing="normal">
        <li>
          <t>Upon receiving a request from (the previous hop towards) the origin client, the proxy checks if specifically the message available during the execution of Step 2 in <xref target="incoming-requests"/> produces a cache hit.  </t>
          <t>
That is, such a message: i) is exactly the one to be forwarded to (the next hop towards) the origin server, in case no cache hit occurs; and ii) is the result of an OSCORE decryption at the proxy, in case OSCORE is used on the communication leg between the proxy and (the previous hop towards) the origin client.</t>
        </li>
        <li>
          <t>Upon receiving a response from (the next hop towards) the origin server, the proxy first removes the same OSCORE layers that it added when protecting the corresponding outgoing request, as defined in <xref target="incoming-responses"/>.  </t>
          <t>
Then, the proxy stores specifically that resulting response message in its cache. That is, such a stored message is exactly the one to be forwarded to (the previous hop towards) the origin client.</t>
        </li>
      </ul>
      <t>The specific rules about serving a request with a cached response are defined in <xref section="5.6" sectionFormat="of" target="RFC7252"/>, as well as in <xref section="7" sectionFormat="of" target="I-D.ietf-core-groupcomm-proxy"/> for group communication scenarios.</t>
    </section>
    <section anchor="establishment-of-oscore-security-contexts">
      <name>Establishment of OSCORE Security Contexts</name>
      <t>Like the original OSCORE specification <xref target="RFC8613"/>, this document is not devoted to any particular approach that two OSCORE endpoints use for establishing an OSCORE Security Context.</t>
      <t>At the same time, the following applies, depending on the two peers using OSCORE or Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/> to protect their communications.</t>
      <ul spacing="normal">
        <li>
          <t>When using OSCORE, the establishment of the OSCORE Security Context can rely on the authenticated key exchange protocol Ephemeral Diffie-Hellman Over COSE (EDHOC) <xref target="RFC9528"/>.  </t>
          <t>
Assuming that OSCORE has to be used both between the two origin application endpoints as well as between the origin client and the first proxy in the chain, it is expected that the origin client first runs EDHOC with the first proxy in the chain, and then with the origin server through the chain of proxies (see the example in <xref target="sec-example-edhoc"/>).  </t>
          <t>
Furthermore, the additional use of the combined EDHOC + OSCORE request defined in <xref target="I-D.ietf-core-oscore-edhoc"/> is particularly beneficial in this case (see the example in <xref target="sec-example-edhoc-comb-req"/>), and especially when relying on a long chain of proxies.</t>
        </li>
        <li>
          <t>The use of Group OSCORE is expected to be limited between the origin application endpoints, e.g., between the origin client and multiple origin servers. In order to join the same OSCORE group and obtain the corresponding Group OSCORE Security Context, those endpoints can use the approach defined in <xref target="I-D.ietf-ace-key-groupcomm-oscore"/> and based on the ACE framework for Authentication and Authorization in constrained environments <xref target="RFC9200"/>.  </t>
          <t>
For the purposes of this document, there is no need for a proxy to also be a member of the OSCORE group whose Group OSCORE Security Context is used by the origin application endpoints for protecting communications end-to-end.</t>
        </li>
      </ul>
    </section>
    <section anchor="coap-header-compression-with-schc">
      <name>CoAP Header Compression with SCHC</name>
      <t>The method defined in this document enables and results in the possible protection of the same CoAP message with multiple, nested OSCORE layers. Especially when this happens, it is desirable to compress the header of protected CoAP messages, in order to improve performance and ensure that CoAP is usable also in Low-Power Wide-Area Networks (LPWANs).</t>
      <t>To this end, it is possible to use the Static Context Header Compression and fragmentation (SCHC) framework <xref target="RFC8724"/>. In particular, <xref target="I-D.ietf-schc-8824-update"/> specifies how to use SCHC for compressing headers of CoAP messages, also when messages are protected with OSCORE. The SCHC Compression/Decompression is applicable also in the presence of CoAP proxies, and especially to the two following cases.</t>
      <ul spacing="normal">
        <li>
          <t>In case OSCORE is not used at all, the SCHC processing occurs hop-by-hop, by relying on SCHC Rules that are consistently shared between two adjacent hops.</t>
        </li>
        <li>
          <t>In case OSCORE is used only end-to-end between the application endpoints, then an Inner SCHC Compression/Decompression and an Outer SCHC Compression/Decompression are performed (see <xref section="8.2" sectionFormat="of" target="I-D.ietf-schc-8824-update"/>). In particular, the following holds.  </t>
          <t>
The SCHC processing occurs end-to-end as to the Inner SCHC Compression/Decompression. This relies on Inner SCHC Rules that are shared between the two application endpoints, which act as OSCORE endpoints and share the used OSCORE Security Context.  </t>
          <t>
The SCHC processing occurs hop-by-hop as to the Outer SCHC Compression/Decompression. This relies on Outer SCHC Rules that are shared between two adjacent hops.</t>
        </li>
      </ul>
      <t>When using the method defined in this document, and thus enabling also an intermediary proxy to be an OSCORE endpoint, the SCHC processing above is generalized as specified below.</t>
      <t>When processing an outgoing CoAP message, a sender endpoint proceeds as follows.</t>
      <ul spacing="normal">
        <li>
          <t>The sender endpoint performs one Inner SCHC Compression for each OSCORE layer applied to the outgoing message.  </t>
          <t>
Each Inner SCHC Compression occurs before protecting the message with that OSCORE layer, and relies on the SCHC Rules that are shared with the other OSCORE endpoint.</t>
        </li>
        <li>
          <t>The sender endpoint performs exactly one Outer SCHC Compression.  </t>
          <t>
This occurs after having performed all the intended OSCORE protections of the outgoing message, and relies on the SCHC Rules that are shared with the (next hop towards the) destination application endpoint.</t>
        </li>
      </ul>
      <t>That is, with respect to the SCHC Compression/Decompression processing, the following holds.</t>
      <t>An Inner SCHC Compression is intended for a destination OSCORE endpoint, which performs the following steps.</t>
      <ol spacing="normal" type="1"><li>
          <t>It decrypts an incoming message with the OSCORE Security Context shared with the other OSCORE endpoint.</t>
        </li>
        <li>
          <t>It performs the corresponding Inner SCHC Decompression, by relying on the SCHC Rules shared with the other OSCORE endpoint.</t>
        </li>
      </ol>
      <t>An Outer SCHC Compression is intended for the (next hop towards the) destination application endpoint, which performs the following steps.</t>
      <ol spacing="normal" type="1"><li>
          <t>It performs a corresponding Outer SCHC Decompression on an incoming message, by relying on the SCHC Rules shared with the previous hop towards the destination application endpoint.</t>
        </li>
        <li>
          <t>Unless it is exactly the destination application endpoint, it performs a new Outer SCHC Compression on the result from the previous step, by relying on the SCHC Rules shared with the (next hop towards the) destination application endpoint. Then, it sends the result to the (next-hop towards the) destination application endpoint.</t>
        </li>
      </ol>
      <t>Note that the generalization above does not alter the core approach, design choices, and features of the SCHC Compression/Decompression applied to CoAP headers.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The same security considerations about CoAP <xref target="RFC7252"/> and group communication for CoAP <xref target="I-D.ietf-core-groupcomm-bis"/> apply to this document. The same security considerations from <xref target="RFC8613"/> and <xref target="I-D.ietf-core-oscore-groupcomm"/> apply to this document, when using OSCORE or Group OSCORE to protect exchanged messages.</t>
      <t>Further security considerations to take into account are inherited from the specifically used CoAP options, extensions, and methods employed when relying on OSCORE or Group OSCORE.</t>
      <t>This document does not change the security properties of OSCORE and Group OSCORE. That is, given any two OSCORE endpoints, the method defined in this document provides them with the same security guarantees that OSCORE and Group OSCORE provide in the case where such endpoints are specifically application endpoints.</t>
      <section anchor="preserving-location-anonymity">
        <name>Preserving Location Anonymity</name>
        <t>Before decrypting an incoming request (see Step 3 in <xref target="incoming-requests"/>), the recipient endpoint checks whether decrypting the request is an acceptable operation to perform, according to the endpoint's configuration and a possible authorization enforcement, and in the light of the alleged request sender and the OSCORE Security Context to use.</t>
        <t>This is particularly relevant for an origin server that expects to receive messages protected end-to-end by origin clients, but only if sent by a reverse-proxy as its adjacent hop.</t>
        <t>In such a setup, that check prevents a malicious sender endpoint C from associating the addressing information of the origin server S with the OSCORE Security Context CTX that C and S are sharing. Making such an association would compromise the location anonymity of the origin server, as otherwise afforded by the reverse-proxy.</t>
        <t>That is, if C gains knowledge of some addressing information ADDR, then C might send a request directly addressed to ADDR and protected with CTX. A response protected with CTX would prove that ADDR is in fact the addressing information of S.</t>
        <t>However, after performing and failing the check on the received request, S replies with a 4.01 (Unauthorized) error response that is not protected with CTX, hence preserving the location anonymity of the origin server.</t>
      </section>
      <section anchor="sec-security-considerations-hop-limit">
        <name>Hop-Limit Option</name>
        <t><xref target="sec-hop-limit"/> of this document defines that the Hop-Limit option <xref target="RFC8768"/> is of Class U for OSCORE. This overrides the default behavior specified in <xref section="4.1" sectionFormat="of" target="RFC8613"/>, according to which the option would be processed as if it was of 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>
      <name>References</name>
      <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="26" month="September" year="2024"/>
            <abstract>
              <t>   This document defines the security protocol Group Object Security for
   Constrained RESTful Environments (Group OSCORE), providing end-to-end
   security of CoAP messages exchanged between members of a group, e.g.,
   sent over IP multicast.  In particular, the described protocol
   defines how OSCORE is used in a group communication setting to
   provide source authentication for CoAP group requests, sent by a
   client to multiple servers, and for protection of the corresponding
   CoAP responses.  Group OSCORE also defines a pairwise mode where each
   member of the group can efficiently derive a symmetric pairwise key
   with any other member of the group for pairwise OSCORE communication.
   Group OSCORE can be used between endpoints communicating with CoAP or
   CoAP-mappable HTTP.

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

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


   // (This "cref" paragraph will be removed by the RFC editor:) The
   // present revision –16 of this draft continues -15 by picking up
   // more comments; it was made specifically for IETF 120.  This
   // revision still contains open issues and is intended to serve as a
   // snapshot.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-schc-8824-update-02"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references>
        <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="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="Chonggang Wang" initials="C." surname="Wang">
              <organization>InterDigital</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="24" month="April" year="2024"/>
            <abstract>
              <t>   This document specifies the use of the Constrained Application
   Protocol (CoAP) for group communication, including the use of UDP/IP
   multicast as the default underlying data transport.  Both unsecured
   and secured CoAP group communication are specified.  Security is
   achieved by use of the Group Object Security for Constrained RESTful
   Environments (Group OSCORE) protocol.  The target application area of
   this specification is any group communication use cases that involve
   resource-constrained devices or networks that support CoAP.  This
   document replaces and obsoletes RFC 7390, while it updates RFC 7252
   and RFC 7641.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-bis-11"/>
        </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="8" month="July" year="2024"/>
            <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 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-02"/>
        </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="8" month="July" year="2024"/>
            <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-09"/>
        </reference>
        <reference anchor="I-D.ietf-core-oscore-edhoc">
          <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="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson</organization>
            </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>
            <author fullname="Stefan Hristozov" initials="S." surname="Hristozov">
              <organization>Fraunhofer AISEC</organization>
            </author>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson</organization>
            </author>
            <date day="9" month="April" 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.  These especially include 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="Internet-Draft" value="draft-ietf-core-oscore-edhoc-11"/>
        </reference>
        <reference anchor="I-D.ietf-core-coap-pubsub">
          <front>
            <title>A publish-subscribe architecture for the Constrained Application Protocol (CoAP)</title>
            <author fullname="Jaime Jimenez" initials="J." surname="Jimenez">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Michael Koster" initials="M." surname="Koster">
              <organization>Dogtiger Labs</organization>
            </author>
            <author fullname="Ari Keränen" initials="A." surname="Keränen">
              <organization>Ericsson</organization>
            </author>
            <date day="18" month="April" year="2024"/>
            <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-14"/>
        </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="8" month="July" year="2024"/>
            <abstract>
              <t>   The Constrained Application Protocol (CoAP, [RFC7252]) is available
   over different transports (UDP, DTLS, TCP, TLS, WebSockets), but
   lacks a way to unify these addresses.  This document provides
   terminology and provisions based on Web Linking [RFC8288] 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-06"/>
        </reference>
        <reference anchor="I-D.ietf-ace-key-groupcomm-oscore">
          <front>
            <title>Key Management for OSCORE Groups in ACE</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Jiye Park" initials="J." surname="Park">
              <organization>Universitaet Duisburg-Essen</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="6" month="March" year="2023"/>
            <abstract>
              <t>   This document defines an application profile of the ACE framework for
   Authentication and Authorization, to request and provision keying
   material in group communication scenarios that are based on CoAP and
   are secured with Group Object Security for Constrained RESTful
   Environments (Group OSCORE).  This application profile delegates the
   authentication and authorization of Clients, that join an OSCORE
   group through a Resource Server acting as Group Manager for that
   group.  This application profile leverages protocol-specific
   transport profiles of ACE to achieve communication security, server
   authentication and proof-of-possession for a key owned by the Client
   and bound to an OAuth 2.0 Access Token.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-key-groupcomm-oscore-16"/>
        </reference>
        <reference anchor="I-D.ietf-core-coap-pm">
          <front>
            <title>Constrained Application Protocol (CoAP) Performance Measurement Option</title>
            <author fullname="Giuseppe Fioccola" initials="G." surname="Fioccola">
              <organization>Huawei</organization>
            </author>
            <author fullname="Tianran Zhou" initials="T." surname="Zhou">
              <organization>Huawei</organization>
            </author>
            <author fullname="Massimo Nilo" initials="M." surname="Nilo">
              <organization>Telecom Italia</organization>
            </author>
            <author fullname="Fabio Bulgarella" initials="F." surname="Bulgarella">
              <organization>Telecom Italia</organization>
            </author>
            <date day="3" month="October" year="2024"/>
            <abstract>
              <t>   This document specifies a method for the Performance Measurement of
   the Constrained Application Protocol (CoAP).  A new CoAP option is
   defined in order to enable network telemetry both end-to-end and hop-
   by-hop.  The endpoints cooperate by marking and, possibly, mirroring
   information on the round-trip connection.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-coap-pm-03"/>
        </reference>
        <reference anchor="I-D.ietf-ace-coap-est-oscore">
          <front>
            <title>Protecting EST Payloads with OSCORE</title>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Shahid Raza" initials="S." surname="Raza">
              <organization>RISE</organization>
            </author>
            <author fullname="Martin Furuhed" initials="M." surname="Furuhed">
              <organization>Nexus</organization>
            </author>
            <author fullname="Mališa Vučinić" initials="M." surname="Vučinić">
              <organization>Inria</organization>
            </author>
            <author fullname="Timothy Claeys" initials="T." surname="Claeys">
         </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   Enrollment over Secure Transport (EST) is a certificate provisioning
   protocol over HTTPS.  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].

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

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

Square brackets [ ... ] indicate content of compressed COSE object.
Curly brackets { ... } indicate encrypted data.
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="sec-example-edhoc">
        <name>Example 4</name>
        <t>In the example shown in <xref target="fig-example-edhoc"/>, message exchanges are protected over the following legs.</t>
        <ul spacing="normal">
          <li>
            <t>End-to-end, between the client and the server, using the OSCORE Security Context CTX_C_S. The client uses the OSCORE Sender ID 0x5f when using OSCORE with the server.</t>
          </li>
          <li>
            <t>Between the client and the proxy, using the OSCORE Security Context CTX_C_P. The client uses the OSCORE Sender ID 0x20 when using OSCORE with the proxy.</t>
          </li>
        </ul>
        <t>The example also shows how the client establishes an OSCORE Security Context CTX_C_P with the proxy and CTX_C_S with the server, by using the key exchange protocol EDHOC <xref target="RFC9528"/>.</t>
        <figure anchor="fig-example-edhoc">
          <name>Use of OSCORE between Client-Server and Proxy-Server, with OSCORE Security Contexts established through EDHOC</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="3248" width="544" viewBox="0 0 544 3248" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 24,48 L 24,240" fill="none" stroke="black"/>
                <path d="M 24,280 L 24,496" fill="none" stroke="black"/>
                <path d="M 24,552 L 24,1248" fill="none" stroke="black"/>
                <path d="M 24,1288 L 24,1296" fill="none" stroke="black"/>
                <path d="M 24,1352 L 24,1904" fill="none" stroke="black"/>
                <path d="M 24,1960 L 24,1968" fill="none" stroke="black"/>
                <path d="M 24,2024 L 24,3008" fill="none" stroke="black"/>
                <path d="M 24,3064 L 24,3072" fill="none" stroke="black"/>
                <path d="M 24,3128 L 24,3136" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,400" fill="none" stroke="black"/>
                <path d="M 88,440 L 88,768" fill="none" stroke="black"/>
                <path d="M 88,824 L 88,1040" fill="none" stroke="black"/>
                <path d="M 88,1096 L 88,1568" fill="none" stroke="black"/>
                <path d="M 88,1624 L 88,2256" fill="none" stroke="black"/>
                <path d="M 88,2312 L 88,2736" fill="none" stroke="black"/>
                <path d="M 88,2792 L 88,3136" fill="none" stroke="black"/>
                <path d="M 152,48 L 152,1760" fill="none" stroke="black"/>
                <path d="M 152,1800 L 152,2464" fill="none" stroke="black"/>
                <path d="M 152,2520 L 152,2528" fill="none" stroke="black"/>
                <path d="M 152,2584 L 152,3136" fill="none" stroke="black"/>
                <path d="M 24,64 L 80,64" fill="none" stroke="black"/>
                <path d="M 32,176 L 88,176" fill="none" stroke="black"/>
                <path d="M 24,304 L 80,304" fill="none" stroke="black"/>
                <path d="M 32,464 L 88,464" fill="none" stroke="black"/>
                <path d="M 24,576 L 80,576" fill="none" stroke="black"/>
                <path d="M 88,848 L 144,848" fill="none" stroke="black"/>
                <path d="M 96,976 L 152,976" fill="none" stroke="black"/>
                <path d="M 32,1120 L 88,1120" fill="none" stroke="black"/>
                <path d="M 24,1376 L 80,1376" fill="none" stroke="black"/>
                <path d="M 88,1648 L 144,1648" fill="none" stroke="black"/>
                <path d="M 96,1824 L 152,1824" fill="none" stroke="black"/>
                <path d="M 32,1872 L 88,1872" fill="none" stroke="black"/>
                <path d="M 24,2048 L 80,2048" fill="none" stroke="black"/>
                <path d="M 88,2336 L 144,2336" fill="none" stroke="black"/>
                <path d="M 96,2608 L 152,2608" fill="none" stroke="black"/>
                <path d="M 32,2816 L 88,2816" fill="none" stroke="black"/>
                <path d="M 264,1552 L 268,1544" fill="none" stroke="black"/>
                <path d="M 264,2240 L 272,2224" fill="none" stroke="black"/>
                <path d="M 272,2240 L 284,2216" fill="none" stroke="black"/>
                <path d="M 264,2992 L 272,2976" fill="none" stroke="black"/>
                <path d="M 272,2992 L 280,2976" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="152,2336 140,2330.4 140,2341.6" fill="black" transform="rotate(0,144,2336)"/>
                <polygon class="arrowhead" points="152,1648 140,1642.4 140,1653.6" fill="black" transform="rotate(0,144,1648)"/>
                <polygon class="arrowhead" points="152,848 140,842.4 140,853.6" fill="black" transform="rotate(0,144,848)"/>
                <polygon class="arrowhead" points="104,2608 92,2602.4 92,2613.6" fill="black" transform="rotate(180,96,2608)"/>
                <polygon class="arrowhead" points="104,1824 92,1818.4 92,1829.6" fill="black" transform="rotate(180,96,1824)"/>
                <polygon class="arrowhead" points="104,976 92,970.4 92,981.6" fill="black" transform="rotate(180,96,976)"/>
                <polygon class="arrowhead" points="88,2048 76,2042.4 76,2053.6" fill="black" transform="rotate(0,80,2048)"/>
                <polygon class="arrowhead" points="88,1376 76,1370.4 76,1381.6" fill="black" transform="rotate(0,80,1376)"/>
                <polygon class="arrowhead" points="88,576 76,570.4 76,581.6" fill="black" transform="rotate(0,80,576)"/>
                <polygon class="arrowhead" points="88,304 76,298.4 76,309.6" fill="black" transform="rotate(0,80,304)"/>
                <polygon class="arrowhead" points="88,64 76,58.4 76,69.6" fill="black" transform="rotate(0,80,64)"/>
                <polygon class="arrowhead" points="40,2816 28,2810.4 28,2821.6" fill="black" transform="rotate(180,32,2816)"/>
                <polygon class="arrowhead" points="40,1872 28,1866.4 28,1877.6" fill="black" transform="rotate(180,32,1872)"/>
                <polygon class="arrowhead" points="40,1120 28,1114.4 28,1125.6" fill="black" transform="rotate(180,32,1120)"/>
                <polygon class="arrowhead" points="40,464 28,458.4 28,469.6" fill="black" transform="rotate(180,32,464)"/>
                <polygon class="arrowhead" points="40,176 28,170.4 28,181.6" fill="black" transform="rotate(180,32,176)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="88" y="36">Proxy</text>
                  <text x="148" y="36">Server</text>
                  <text x="216" y="68">Code:</text>
                  <text x="260" y="68">0.02</text>
                  <text x="308" y="68">(POST)</text>
                  <text x="52" y="84">POST</text>
                  <text x="212" y="84">Token:</text>
                  <text x="260" y="84">0xf3</text>
                  <text x="200" y="100">Uri-Path:</text>
                  <text x="296" y="100">".well-known"</text>
                  <text x="200" y="116">Uri-Path:</text>
                  <text x="272" y="116">"edhoc"</text>
                  <text x="212" y="132">0xff</text>
                  <text x="204" y="148">Payload:</text>
                  <text x="268" y="148">(true,</text>
                  <text x="320" y="148">EDHOC</text>
                  <text x="388" y="148">message_1)</text>
                  <text x="216" y="180">Code:</text>
                  <text x="260" y="180">2.04</text>
                  <text x="320" y="180">(Changed)</text>
                  <text x="60" y="196">2.04</text>
                  <text x="212" y="196">Token:</text>
                  <text x="260" y="196">0xf3</text>
                  <text x="212" y="212">0xff</text>
                  <text x="204" y="228">Payload:</text>
                  <text x="264" y="228">EDHOC</text>
                  <text x="328" y="228">message_2</text>
                  <text x="40" y="260">Establish</text>
                  <text x="32" y="276">CTX_C_P</text>
                  <text x="216" y="308">Code:</text>
                  <text x="260" y="308">0.02</text>
                  <text x="308" y="308">(POST)</text>
                  <text x="52" y="324">POST</text>
                  <text x="212" y="324">Token:</text>
                  <text x="260" y="324">0x82</text>
                  <text x="200" y="340">Uri-Path:</text>
                  <text x="296" y="340">".well-known"</text>
                  <text x="200" y="356">Uri-Path:</text>
                  <text x="272" y="356">"edhoc"</text>
                  <text x="212" y="372">0xff</text>
                  <text x="204" y="388">Payload:</text>
                  <text x="264" y="388">(C_R,</text>
                  <text x="312" y="388">EDHOC</text>
                  <text x="380" y="388">message_3)</text>
                  <text x="104" y="420">Establish</text>
                  <text x="96" y="436">CTX_C_P</text>
                  <text x="56" y="484">ACK</text>
                  <text x="32" y="516">Encrypt</text>
                  <text x="16" y="532">REQ</text>
                  <text x="52" y="532">with</text>
                  <text x="32" y="548">CTX_C_P</text>
                  <text x="216" y="580">Code:</text>
                  <text x="260" y="580">0.02</text>
                  <text x="308" y="580">(POST)</text>
                  <text x="52" y="596">POST</text>
                  <text x="212" y="596">Token:</text>
                  <text x="260" y="596">0xbe</text>
                  <text x="208" y="612">OSCORE:</text>
                  <text x="284" y="612">[kid:0x20,</text>
                  <text x="360" y="612">Partial</text>
                  <text x="416" y="612">IV:0]</text>
                  <text x="212" y="628">0xff</text>
                  <text x="204" y="644">Payload:</text>
                  <text x="268" y="644">{Code:</text>
                  <text x="316" y="644">0.02</text>
                  <text x="368" y="644">(POST),</text>
                  <text x="288" y="660">Uri-Host:</text>
                  <text x="388" y="660">"example.com",</text>
                  <text x="288" y="676">Uri-Path:</text>
                  <text x="388" y="676">".well-known",</text>
                  <text x="288" y="692">Uri-Path:</text>
                  <text x="364" y="692">"edhoc",</text>
                  <text x="304" y="708">Proxy-Scheme:</text>
                  <text x="392" y="708">"coap",</text>
                  <text x="272" y="724">0xff,</text>
                  <text x="276" y="740">(true,</text>
                  <text x="328" y="740">EDHOC</text>
                  <text x="396" y="740">message_1)</text>
                  <text x="248" y="756">}</text>
                  <text x="268" y="756">//</text>
                  <text x="320" y="756">Encrypted</text>
                  <text x="380" y="756">with</text>
                  <text x="432" y="756">CTX_C_P</text>
                  <text x="96" y="788">Decrypt</text>
                  <text x="80" y="804">REQ</text>
                  <text x="116" y="804">with</text>
                  <text x="96" y="820">CTX_C_P</text>
                  <text x="216" y="852">Code:</text>
                  <text x="260" y="852">0.02</text>
                  <text x="308" y="852">(POST)</text>
                  <text x="116" y="868">POST</text>
                  <text x="212" y="868">Token:</text>
                  <text x="260" y="868">0xa5</text>
                  <text x="200" y="884">Uri-Host:</text>
                  <text x="300" y="884">"example.com",</text>
                  <text x="200" y="900">Uri-Path:</text>
                  <text x="296" y="900">".well-known"</text>
                  <text x="200" y="916">Uri-Path:</text>
                  <text x="272" y="916">"edhoc"</text>
                  <text x="212" y="932">0xff</text>
                  <text x="204" y="948">Payload:</text>
                  <text x="268" y="948">(true,</text>
                  <text x="320" y="948">EDHOC</text>
                  <text x="388" y="948">message_1)</text>
                  <text x="216" y="980">Code:</text>
                  <text x="260" y="980">2.04</text>
                  <text x="320" y="980">(Changed)</text>
                  <text x="124" y="996">2.04</text>
                  <text x="212" y="996">Token:</text>
                  <text x="260" y="996">0xa5</text>
                  <text x="212" y="1012">0xff</text>
                  <text x="204" y="1028">Payload:</text>
                  <text x="264" y="1028">EDHOC</text>
                  <text x="328" y="1028">message_2</text>
                  <text x="96" y="1060">Encrypt</text>
                  <text x="84" y="1076">RESP</text>
                  <text x="124" y="1076">with</text>
                  <text x="96" y="1092">CTX_C_P</text>
                  <text x="216" y="1124">Code:</text>
                  <text x="260" y="1124">2.04</text>
                  <text x="320" y="1124">(Changed)</text>
                  <text x="60" y="1140">2.04</text>
                  <text x="212" y="1140">Token:</text>
                  <text x="260" y="1140">0xbe</text>
                  <text x="208" y="1156">OSCORE:</text>
                  <text x="248" y="1156">-</text>
                  <text x="212" y="1172">0xff</text>
                  <text x="204" y="1188">Payload:</text>
                  <text x="268" y="1188">{Code:</text>
                  <text x="316" y="1188">2.04</text>
                  <text x="380" y="1188">(Changed),</text>
                  <text x="272" y="1204">0xff,</text>
                  <text x="272" y="1220">EDHOC</text>
                  <text x="336" y="1220">message_2</text>
                  <text x="248" y="1236">}</text>
                  <text x="268" y="1236">//</text>
                  <text x="320" y="1236">Encrypted</text>
                  <text x="380" y="1236">with</text>
                  <text x="432" y="1236">CTX_C_P</text>
                  <text x="40" y="1268">Establish</text>
                  <text x="32" y="1284">CTX_C_S</text>
                  <text x="32" y="1316">Encrypt</text>
                  <text x="16" y="1332">REQ</text>
                  <text x="52" y="1332">with</text>
                  <text x="32" y="1348">CTX_C_P</text>
                  <text x="216" y="1380">Code:</text>
                  <text x="260" y="1380">0.02</text>
                  <text x="308" y="1380">(POST)</text>
                  <text x="52" y="1396">POST</text>
                  <text x="212" y="1396">Token:</text>
                  <text x="260" y="1396">0xb9</text>
                  <text x="208" y="1412">OSCORE:</text>
                  <text x="284" y="1412">[kid:0x20,</text>
                  <text x="360" y="1412">Partial</text>
                  <text x="416" y="1412">IV:1]</text>
                  <text x="212" y="1428">0xff</text>
                  <text x="204" y="1444">Payload:</text>
                  <text x="268" y="1444">{Code:</text>
                  <text x="316" y="1444">0.02</text>
                  <text x="368" y="1444">(POST),</text>
                  <text x="288" y="1460">Uri-Host:</text>
                  <text x="388" y="1460">"example.com",</text>
                  <text x="288" y="1476">Uri-Path:</text>
                  <text x="388" y="1476">".well-known",</text>
                  <text x="288" y="1492">Uri-Path:</text>
                  <text x="364" y="1492">"edhoc",</text>
                  <text x="304" y="1508">Proxy-Scheme:</text>
                  <text x="392" y="1508">"coap",</text>
                  <text x="272" y="1524">0xff,</text>
                  <text x="272" y="1540">(C_R,</text>
                  <text x="320" y="1540">EDHOC</text>
                  <text x="388" y="1540">message_3)</text>
                  <text x="248" y="1556">}</text>
                  <text x="272" y="1556">/</text>
                  <text x="320" y="1556">Encrypted</text>
                  <text x="380" y="1556">with</text>
                  <text x="432" y="1556">CTX_C_P</text>
                  <text x="96" y="1588">Decrypt</text>
                  <text x="80" y="1604">REQ</text>
                  <text x="116" y="1604">with</text>
                  <text x="96" y="1620">CTX_C_P</text>
                  <text x="216" y="1652">Code:</text>
                  <text x="260" y="1652">0.02</text>
                  <text x="308" y="1652">(POST)</text>
                  <text x="116" y="1668">POST</text>
                  <text x="212" y="1668">Token:</text>
                  <text x="260" y="1668">0xdd</text>
                  <text x="200" y="1684">Uri-Host:</text>
                  <text x="300" y="1684">"example.com",</text>
                  <text x="200" y="1700">Uri-Path:</text>
                  <text x="296" y="1700">".well-known"</text>
                  <text x="200" y="1716">Uri-Path:</text>
                  <text x="272" y="1716">"edhoc"</text>
                  <text x="212" y="1732">0xff</text>
                  <text x="204" y="1748">Payload:</text>
                  <text x="264" y="1748">(C_R,</text>
                  <text x="312" y="1748">EDHOC</text>
                  <text x="380" y="1748">message_3)</text>
                  <text x="168" y="1780">Establish</text>
                  <text x="160" y="1796">CTX_C_S</text>
                  <text x="120" y="1844">ACK</text>
                  <text x="56" y="1892">ACK</text>
                  <text x="32" y="1924">Encrypt</text>
                  <text x="16" y="1940">REQ</text>
                  <text x="52" y="1940">with</text>
                  <text x="32" y="1956">CTX_C_S</text>
                  <text x="32" y="1988">Encrypt</text>
                  <text x="16" y="2004">REQ</text>
                  <text x="52" y="2004">with</text>
                  <text x="32" y="2020">CTX_C_P</text>
                  <text x="216" y="2052">Code:</text>
                  <text x="260" y="2052">0.02</text>
                  <text x="308" y="2052">(POST)</text>
                  <text x="52" y="2068">POST</text>
                  <text x="212" y="2068">Token:</text>
                  <text x="260" y="2068">0x8c</text>
                  <text x="208" y="2084">OSCORE:</text>
                  <text x="284" y="2084">[kid:0x20,</text>
                  <text x="360" y="2084">Partial</text>
                  <text x="416" y="2084">IV:2]</text>
                  <text x="212" y="2100">0xff</text>
                  <text x="204" y="2116">Payload:</text>
                  <text x="268" y="2116">{Code:</text>
                  <text x="316" y="2116">0.02</text>
                  <text x="368" y="2116">(POST),</text>
                  <text x="280" y="2132">OSCORE:</text>
                  <text x="356" y="2132">[kid:0x5f,</text>
                  <text x="432" y="2132">Partial</text>
                  <text x="492" y="2132">IV:0],</text>
                  <text x="288" y="2148">Uri-Host:</text>
                  <text x="388" y="2148">"example.com",</text>
                  <text x="304" y="2164">Proxy-Scheme:</text>
                  <text x="392" y="2164">"coap",</text>
                  <text x="272" y="2180">0xff,</text>
                  <text x="276" y="2196">{Code:</text>
                  <text x="324" y="2196">0.01</text>
                  <text x="372" y="2196">(GET),</text>
                  <text x="296" y="2212">Uri-Path:</text>
                  <text x="396" y="2212">"alarm_status"</text>
                  <text x="256" y="2228">}</text>
                  <text x="328" y="2228">Encrypted</text>
                  <text x="388" y="2228">with</text>
                  <text x="440" y="2228">CTX_C_S</text>
                  <text x="248" y="2244">}</text>
                  <text x="320" y="2244">Encrypted</text>
                  <text x="380" y="2244">with</text>
                  <text x="432" y="2244">CTX_C_P</text>
                  <text x="96" y="2276">Decrypt</text>
                  <text x="80" y="2292">REQ</text>
                  <text x="116" y="2292">with</text>
                  <text x="96" y="2308">CTX_C_P</text>
                  <text x="216" y="2340">Code:</text>
                  <text x="260" y="2340">0.02</text>
                  <text x="308" y="2340">(POST)</text>
                  <text x="116" y="2356">POST</text>
                  <text x="212" y="2356">Token:</text>
                  <text x="260" y="2356">0x7b</text>
                  <text x="200" y="2372">Uri-Host:</text>
                  <text x="300" y="2372">"example.com",</text>
                  <text x="208" y="2388">OSCORE:</text>
                  <text x="284" y="2388">[kid:0x5f,</text>
                  <text x="360" y="2388">Partial</text>
                  <text x="416" y="2388">IV:0]</text>
                  <text x="212" y="2404">0xff</text>
                  <text x="204" y="2420">Payload:</text>
                  <text x="268" y="2420">{Code:</text>
                  <text x="316" y="2420">0.01</text>
                  <text x="364" y="2420">(GET),</text>
                  <text x="288" y="2436">Uri-Path:</text>
                  <text x="388" y="2436">"alarm_status"</text>
                  <text x="248" y="2452">}</text>
                  <text x="268" y="2452">//</text>
                  <text x="320" y="2452">Encrypted</text>
                  <text x="380" y="2452">with</text>
                  <text x="432" y="2452">CTX_C_S</text>
                  <text x="160" y="2484">Decrypt</text>
                  <text x="144" y="2500">REQ</text>
                  <text x="180" y="2500">with</text>
                  <text x="160" y="2516">CTX_C_S</text>
                  <text x="160" y="2548">Encrypt</text>
                  <text x="148" y="2564">RESP</text>
                  <text x="188" y="2564">with</text>
                  <text x="160" y="2580">CTX_C_S</text>
                  <text x="216" y="2612">Code:</text>
                  <text x="260" y="2612">2.04</text>
                  <text x="320" y="2612">(Changed)</text>
                  <text x="124" y="2628">2.04</text>
                  <text x="212" y="2628">Token:</text>
                  <text x="260" y="2628">0x7b</text>
                  <text x="208" y="2644">OSCORE:</text>
                  <text x="248" y="2644">-</text>
                  <text x="212" y="2660">0xff</text>
                  <text x="204" y="2676">Payload:</text>
                  <text x="268" y="2676">{Code:</text>
                  <text x="316" y="2676">2.05</text>
                  <text x="380" y="2676">(Content),</text>
                  <text x="272" y="2692">0xff,</text>
                  <text x="264" y="2708">"0"</text>
                  <text x="248" y="2724">}</text>
                  <text x="268" y="2724">//</text>
                  <text x="320" y="2724">Encrypted</text>
                  <text x="380" y="2724">with</text>
                  <text x="432" y="2724">CTX_C_S</text>
                  <text x="96" y="2756">Encrypt</text>
                  <text x="84" y="2772">RESP</text>
                  <text x="124" y="2772">with</text>
                  <text x="96" y="2788">CTX_C_P</text>
                  <text x="216" y="2820">Code:</text>
                  <text x="260" y="2820">2.04</text>
                  <text x="320" y="2820">(Changed)</text>
                  <text x="60" y="2836">2.04</text>
                  <text x="212" y="2836">Token:</text>
                  <text x="260" y="2836">0x8c</text>
                  <text x="208" y="2852">OSCORE:</text>
                  <text x="248" y="2852">-</text>
                  <text x="212" y="2868">0xff</text>
                  <text x="204" y="2884">Payload:</text>
                  <text x="268" y="2884">{Code:</text>
                  <text x="316" y="2884">2.04</text>
                  <text x="380" y="2884">(Changed),</text>
                  <text x="280" y="2900">OSCORE:</text>
                  <text x="324" y="2900">-,</text>
                  <text x="272" y="2916">0xff,</text>
                  <text x="276" y="2932">{Code:</text>
                  <text x="324" y="2932">2.05</text>
                  <text x="388" y="2932">(Content),</text>
                  <text x="280" y="2948">0xff,</text>
                  <text x="272" y="2964">"0"</text>
                  <text x="256" y="2980">}</text>
                  <text x="328" y="2980">Encrypted</text>
                  <text x="388" y="2980">with</text>
                  <text x="440" y="2980">CTX_C_S</text>
                  <text x="248" y="2996">}</text>
                  <text x="320" y="2996">Encrypted</text>
                  <text x="380" y="2996">with</text>
                  <text x="432" y="2996">CTX_C_P</text>
                  <text x="32" y="3028">Decrypt</text>
                  <text x="20" y="3044">RESP</text>
                  <text x="60" y="3044">with</text>
                  <text x="32" y="3060">CTX_C_P</text>
                  <text x="32" y="3092">Decrypt</text>
                  <text x="20" y="3108">RESP</text>
                  <text x="60" y="3108">with</text>
                  <text x="32" y="3124">CTX_C_S</text>
                  <text x="28" y="3172">Square</text>
                  <text x="92" y="3172">brackets</text>
                  <text x="136" y="3172">[</text>
                  <text x="160" y="3172">...</text>
                  <text x="184" y="3172">]</text>
                  <text x="228" y="3172">indicate</text>
                  <text x="296" y="3172">content</text>
                  <text x="340" y="3172">of</text>
                  <text x="396" y="3172">compressed</text>
                  <text x="460" y="3172">COSE</text>
                  <text x="512" y="3172">object.</text>
                  <text x="24" y="3188">Curly</text>
                  <text x="84" y="3188">brackets</text>
                  <text x="128" y="3188">{</text>
                  <text x="152" y="3188">...</text>
                  <text x="176" y="3188">}</text>
                  <text x="220" y="3188">indicate</text>
                  <text x="296" y="3188">encrypted</text>
                  <text x="360" y="3188">data.</text>
                  <text x="16" y="3220">(A,</text>
                  <text x="44" y="3220">B)</text>
                  <text x="96" y="3220">indicates</text>
                  <text x="144" y="3220">a</text>
                  <text x="172" y="3220">CBOR</text>
                  <text x="228" y="3220">sequence</text>
                  <text x="304" y="3220">[RFC8742]</text>
                  <text x="68" y="3236">of</text>
                  <text x="96" y="3236">two</text>
                  <text x="132" y="3236">CBOR</text>
                  <text x="172" y="3236">data</text>
                  <text x="216" y="3236">items</text>
                  <text x="248" y="3236">A</text>
                  <text x="272" y="3236">and</text>
                  <text x="300" y="3236">B.</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
Client  Proxy  Server
  |       |       |
  +------>|       |     Code: 0.02 (POST)
  | POST  |       |    Token: 0xf3
  |       |       | Uri-Path: ".well-known"
  |       |       | Uri-Path: "edhoc"
  |       |       |     0xff
  |       |       |  Payload: (true, EDHOC message_1)
  |       |       |
  |<------+       |     Code: 2.04 (Changed)
  |  2.04 |       |    Token: 0xf3
  |       |       |     0xff
  |       |       |  Payload: EDHOC message_2
  |       |       |
Establish |       |
CTX_C_P   |       |
  |       |       |
  +------>|       |     Code: 0.02 (POST)
  | POST  |       |    Token: 0x82
  |       |       | Uri-Path: ".well-known"
  |       |       | Uri-Path: "edhoc"
  |       |       |     0xff
  |       |       |  Payload: (C_R, EDHOC message_3)
  |       |       |
  |     Establish |
  |     CTX_C_P   |
  |       |       |
  |<------+       |
  |  ACK  |       |
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_P   |       |
  |       |       |
  +------>|       |     Code: 0.02 (POST)
  | POST  |       |    Token: 0xbe
  |       |       |   OSCORE: [kid:0x20, Partial IV:0]
  |       |       |     0xff
  |       |       |  Payload: {Code: 0.02 (POST),
  |       |       |            Uri-Host: "example.com",
  |       |       |            Uri-Path: ".well-known",
  |       |       |            Uri-Path: "edhoc",
  |       |       |            Proxy-Scheme: "coap",
  |       |       |            0xff,
  |       |       |            (true, EDHOC message_1)
  |       |       |           } // Encrypted with CTX_C_P
  |       |       |
  |     Decrypt   |
  |     REQ with  |
  |     CTX_C_P   |
  |       |       |
  |       +------>|     Code: 0.02 (POST)
  |       | POST  |    Token: 0xa5
  |       |       | Uri-Host: "example.com",
  |       |       | Uri-Path: ".well-known"
  |       |       | Uri-Path: "edhoc"
  |       |       |     0xff
  |       |       |  Payload: (true, EDHOC message_1)
  |       |       |
  |       |<------+     Code: 2.04 (Changed)
  |       |  2.04 |    Token: 0xa5
  |       |       |     0xff
  |       |       |  Payload: EDHOC message_2
  |       |       |
  |     Encrypt   |
  |     RESP with |
  |     CTX_C_P   |
  |       |       |
  |<------+       |     Code: 2.04 (Changed)
  |  2.04 |       |    Token: 0xbe
  |       |       |   OSCORE: -
  |       |       |     0xff
  |       |       |  Payload: {Code: 2.04 (Changed),
  |       |       |            0xff,
  |       |       |            EDHOC message_2
  |       |       |           } // Encrypted with CTX_C_P
  |       |       |
Establish |       |
CTX_C_S   |       |
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_P   |       |
  |       |       |
  +------>|       |     Code: 0.02 (POST)
  | POST  |       |    Token: 0xb9
  |       |       |   OSCORE: [kid:0x20, Partial IV:1]
  |       |       |     0xff
  |       |       |  Payload: {Code: 0.02 (POST),
  |       |       |            Uri-Host: "example.com",
  |       |       |            Uri-Path: ".well-known",
  |       |       |            Uri-Path: "edhoc",
  |       |       |            Proxy-Scheme: "coap",
  |       |       |            0xff,
  |       |       |            (C_R, EDHOC message_3)
  |       |       |           } // Encrypted with CTX_C_P
  |       |       |
  |     Decrypt   |
  |     REQ with  |
  |     CTX_C_P   |
  |       |       |
  |       +------>|     Code: 0.02 (POST)
  |       | POST  |    Token: 0xdd
  |       |       | Uri-Host: "example.com",
  |       |       | Uri-Path: ".well-known"
  |       |       | Uri-Path: "edhoc"
  |       |       |     0xff
  |       |       |  Payload: (C_R, EDHOC message_3)
  |       |       |
  |       |     Establish
  |       |     CTX_C_S
  |       |       |
  |       |<------+
  |       |  ACK  |
  |       |       |
  |<------+       |
  |  ACK  |       |
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_S   |       |
  |       |       |
Encrypt   |       |
REQ with  |       |
CTX_C_P   |       |
  |       |       |
  +------>|       |     Code: 0.02 (POST)
  | POST  |       |    Token: 0x8c
  |       |       |   OSCORE: [kid:0x20, Partial IV:2]
  |       |       |     0xff
  |       |       |  Payload: {Code: 0.02 (POST),
  |       |       |            OSCORE: [kid:0x5f, Partial IV:0],
  |       |       |            Uri-Host: "example.com",
  |       |       |            Proxy-Scheme: "coap",
  |       |       |            0xff,
  |       |       |            {Code: 0.01 (GET),
  |       |       |             Uri-Path: "alarm_status"
  |       |       |            } // Encrypted with CTX_C_S
  |       |       |           } // Encrypted with CTX_C_P
  |       |       |
  |     Decrypt   |
  |     REQ with  |
  |     CTX_C_P   |
  |       |       |
  |       +------>|     Code: 0.02 (POST)
  |       | POST  |    Token: 0x7b
  |       |       | Uri-Host: "example.com",
  |       |       |   OSCORE: [kid:0x5f, Partial IV:0]
  |       |       |     0xff
  |       |       |  Payload: {Code: 0.01 (GET),
  |       |       |            Uri-Path: "alarm_status"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |
  |       |     Decrypt
  |       |     REQ with
  |       |     CTX_C_S
  |       |       |
  |       |     Encrypt
  |       |     RESP with
  |       |     CTX_C_S
  |       |       |
  |       |<------+     Code: 2.04 (Changed)
  |       |  2.04 |    Token: 0x7b
  |       |       |   OSCORE: -
  |       |       |     0xff
  |       |       |  Payload: {Code: 2.05 (Content),
  |       |       |            0xff,
  |       |       |            "0"
  |       |       |           } // Encrypted with CTX_C_S
  |       |       |
  |     Encrypt   |
  |     RESP with |
  |     CTX_C_P   |
  |       |       |
  |<------+       |     Code: 2.04 (Changed)
  |  2.04 |       |    Token: 0x8c
  |       |       |   OSCORE: -
  |       |       |     0xff
  |       |       |  Payload: {Code: 2.04 (Changed),
  |       |       |            OSCORE: -,
  |       |       |            0xff,
  |       |       |            {Code: 2.05 (Content),
  |       |       |             0xff,
  |       |       |             "0"
  |       |       |            } // Encrypted with CTX_C_S
  |       |       |           } // Encrypted with CTX_C_P
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_P   |       |
  |       |       |
Decrypt   |       |
RESP with |       |
CTX_C_S   |       |
  |       |       |

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

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

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

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

Square brackets [ ... ] indicate content of compressed COSE object.
Curly brackets { ... } indicate encrypted data.
]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="sec-option-protection-diag">
      <name>State Diagram: Protection of CoAP Options</name>
      <t><xref target="fig-option-protection-diagram"/> overviews the rules defined in <xref target="general-rules"/>, to determine whether a CoAP option that is originally specified as Class U or I for OSCORE has to be processed like if it was specified as Class E, when protecting an outgoing message.</t>
      <figure anchor="fig-option-protection-diagram">
        <name>Protection of CoAP Options of Class U or I in Outgoing Messages.</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1120" width="576" viewBox="0 0 576 1120" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,160 L 8,256" fill="none" stroke="black"/>
              <path d="M 8,320 L 8,368" fill="none" stroke="black"/>
              <path d="M 24,480 L 24,640" fill="none" stroke="black"/>
              <path d="M 48,264 L 48,312" fill="none" stroke="black"/>
              <path d="M 48,376 L 48,416" fill="none" stroke="black"/>
              <path d="M 48,448 L 48,472" fill="none" stroke="black"/>
              <path d="M 48,688 L 48,1088" fill="none" stroke="black"/>
              <path d="M 80,736 L 80,768" fill="none" stroke="black"/>
              <path d="M 104,320 L 104,368" fill="none" stroke="black"/>
              <path d="M 104,992 L 104,1024" fill="none" stroke="black"/>
              <path d="M 104,1072 L 104,1104" fill="none" stroke="black"/>
              <path d="M 120,816 L 120,984" fill="none" stroke="black"/>
              <path d="M 144,864 L 144,912" fill="none" stroke="black"/>
              <path d="M 184,320 L 184,384" fill="none" stroke="black"/>
              <path d="M 208,392 L 208,416" fill="none" stroke="black"/>
              <path d="M 208,448 L 208,472" fill="none" stroke="black"/>
              <path d="M 208,688 L 208,728" fill="none" stroke="black"/>
              <path d="M 208,960 L 208,984" fill="none" stroke="black"/>
              <path d="M 232,480 L 232,640" fill="none" stroke="black"/>
              <path d="M 304,992 L 304,1024" fill="none" stroke="black"/>
              <path d="M 320,480 L 320,560" fill="none" stroke="black"/>
              <path d="M 336,320 L 336,384" fill="none" stroke="black"/>
              <path d="M 352,608 L 352,728" fill="none" stroke="black"/>
              <path d="M 352,816 L 352,856" fill="none" stroke="black"/>
              <path d="M 352,960 L 352,1064" fill="none" stroke="black"/>
              <path d="M 416,320 L 416,400" fill="none" stroke="black"/>
              <path d="M 416,736 L 416,768" fill="none" stroke="black"/>
              <path d="M 416,864 L 416,912" fill="none" stroke="black"/>
              <path d="M 456,448 L 456,472" fill="none" stroke="black"/>
              <path d="M 456,608 L 456,1064" fill="none" stroke="black"/>
              <path d="M 480,1072 L 480,1104" fill="none" stroke="black"/>
              <path d="M 496,480 L 496,560" fill="none" stroke="black"/>
              <path d="M 536,448 L 536,1088" fill="none" stroke="black"/>
              <path d="M 568,160 L 568,256" fill="none" stroke="black"/>
              <path d="M 568,320 L 568,400" 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,256 L 568,256" fill="none" stroke="black"/>
              <path d="M 8,320 L 104,320" fill="none" stroke="black"/>
              <path d="M 184,320 L 336,320" fill="none" stroke="black"/>
              <path d="M 416,320 L 568,320" fill="none" stroke="black"/>
              <path d="M 112,336 L 128,336" fill="none" stroke="black"/>
              <path d="M 160,336 L 176,336" fill="none" stroke="black"/>
              <path d="M 344,336 L 360,336" fill="none" stroke="black"/>
              <path d="M 392,336 L 408,336" fill="none" stroke="black"/>
              <path d="M 8,368 L 104,368" fill="none" stroke="black"/>
              <path d="M 184,384 L 336,384" fill="none" stroke="black"/>
              <path d="M 416,400 L 568,400" fill="none" stroke="black"/>
              <path d="M 24,480 L 232,480" fill="none" stroke="black"/>
              <path d="M 320,480 L 496,480" fill="none" stroke="black"/>
              <path d="M 320,560 L 496,560" fill="none" stroke="black"/>
              <path d="M 24,640 L 232,640" fill="none" stroke="black"/>
              <path d="M 80,736 L 416,736" fill="none" stroke="black"/>
              <path d="M 80,768 L 416,768" fill="none" stroke="black"/>
              <path d="M 144,864 L 416,864" fill="none" stroke="black"/>
              <path d="M 144,912 L 416,912" fill="none" stroke="black"/>
              <path d="M 104,992 L 304,992" fill="none" stroke="black"/>
              <path d="M 104,1024 L 304,1024" fill="none" stroke="black"/>
              <path d="M 104,1072 L 480,1072" fill="none" stroke="black"/>
              <path d="M 48,1088 L 96,1088" fill="none" stroke="black"/>
              <path d="M 488,1088 L 536,1088" fill="none" stroke="black"/>
              <path d="M 104,1104 L 480,1104" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="496,1088 484,1082.4 484,1093.6" fill="black" transform="rotate(180,488,1088)"/>
              <polygon class="arrowhead" points="464,1064 452,1058.4 452,1069.6" fill="black" transform="rotate(90,456,1064)"/>
              <polygon class="arrowhead" points="464,472 452,466.4 452,477.6" fill="black" transform="rotate(90,456,472)"/>
              <polygon class="arrowhead" points="416,336 404,330.4 404,341.6" fill="black" transform="rotate(0,408,336)"/>
              <polygon class="arrowhead" points="360,1064 348,1058.4 348,1069.6" fill="black" transform="rotate(90,352,1064)"/>
              <polygon class="arrowhead" points="360,856 348,850.4 348,861.6" fill="black" transform="rotate(90,352,856)"/>
              <polygon class="arrowhead" points="360,728 348,722.4 348,733.6" fill="black" transform="rotate(90,352,728)"/>
              <polygon class="arrowhead" points="216,984 204,978.4 204,989.6" fill="black" transform="rotate(90,208,984)"/>
              <polygon class="arrowhead" points="216,728 204,722.4 204,733.6" fill="black" transform="rotate(90,208,728)"/>
              <polygon class="arrowhead" points="216,472 204,466.4 204,477.6" fill="black" transform="rotate(90,208,472)"/>
              <polygon class="arrowhead" points="184,336 172,330.4 172,341.6" fill="black" transform="rotate(0,176,336)"/>
              <polygon class="arrowhead" points="128,984 116,978.4 116,989.6" fill="black" transform="rotate(90,120,984)"/>
              <polygon class="arrowhead" points="104,1088 92,1082.4 92,1093.6" fill="black" transform="rotate(0,96,1088)"/>
              <polygon class="arrowhead" points="56,472 44,466.4 44,477.6" fill="black" transform="rotate(90,48,472)"/>
              <polygon class="arrowhead" points="56,312 44,306.4 44,317.6" fill="black" transform="rotate(90,48,312)"/>
              <circle cx="40" cy="496" r="6" class="closeddot" fill="black"/>
              <circle cx="40" cy="576" 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="260" y="228">of</text>
                <text x="296" y="228">Class</text>
                <text x="328" y="228">U</text>
                <text x="348" y="228">or</text>
                <text x="368" y="228">I</text>
                <text x="392" y="228">for</text>
                <text x="440" y="228">OSCORE.</text>
                <text x="32" y="340">Did</text>
                <text x="56" y="340">I</text>
                <text x="80" y="340">add</text>
                <text x="144" y="340">YES</text>
                <text x="204" y="340">As</text>
                <text x="232" y="340">far</text>
                <text x="260" y="340">as</text>
                <text x="280" y="340">I</text>
                <text x="304" y="340">can</text>
                <text x="376" y="340">YES</text>
                <text x="436" y="340">As</text>
                <text x="464" y="340">far</text>
                <text x="492" y="340">as</text>
                <text x="512" y="340">I</text>
                <text x="536" y="340">can</text>
                <text x="32" y="356">OPT</text>
                <text x="60" y="356">to</text>
                <text x="84" y="356">M?</text>
                <text x="216" y="356">tell,</text>
                <text x="252" y="356">is</text>
                <text x="272" y="356">X</text>
                <text x="288" y="356">a</text>
                <text x="448" y="356">tell,</text>
                <text x="484" y="356">is</text>
                <text x="504" y="356">X</text>
                <text x="528" y="356">the</text>
                <text x="228" y="372">consumer</text>
                <text x="276" y="372">of</text>
                <text x="308" y="372">OPT?</text>
                <text x="472" y="372">immediately</text>
                <text x="540" y="372">next</text>
                <text x="460" y="388">consumer</text>
                <text x="508" y="388">of</text>
                <text x="540" y="388">OPT?</text>
                <text x="456" y="420">|</text>
                <text x="536" y="420">|</text>
                <text x="52" y="436">NO</text>
                <text x="212" y="436">NO</text>
                <text x="456" y="436">YES</text>
                <text x="540" y="436">NO</text>
                <text x="60" y="500">As</text>
                <text x="88" y="500">far</text>
                <text x="116" y="500">as</text>
                <text x="136" y="500">I</text>
                <text x="160" y="500">can</text>
                <text x="200" y="500">tell,</text>
                <text x="348" y="500">Does</text>
                <text x="376" y="500">X</text>
                <text x="404" y="500">need</text>
                <text x="436" y="500">to</text>
                <text x="56" y="516">X</text>
                <text x="76" y="516">is</text>
                <text x="100" y="516">my</text>
                <text x="132" y="516">next</text>
                <text x="172" y="516">hop;</text>
                <text x="356" y="516">access</text>
                <text x="400" y="516">OPT</text>
                <text x="444" y="516">before</text>
                <text x="372" y="532">decrypting</text>
                <text x="424" y="532">M</text>
                <text x="444" y="532">or</text>
                <text x="468" y="532">in</text>
                <text x="44" y="548">OR</text>
                <text x="352" y="548">order</text>
                <text x="388" y="548">to</text>
                <text x="432" y="548">decrypt</text>
                <text x="476" y="548">M?</text>
                <text x="60" y="580">As</text>
                <text x="88" y="580">far</text>
                <text x="116" y="580">as</text>
                <text x="136" y="580">I</text>
                <text x="160" y="580">can</text>
                <text x="200" y="580">tell,</text>
                <text x="352" y="580">|</text>
                <text x="456" y="580">|</text>
                <text x="60" y="596">my</text>
                <text x="92" y="596">next</text>
                <text x="128" y="596">hop</text>
                <text x="156" y="596">is</text>
                <text x="184" y="596">not</text>
                <text x="356" y="596">NO</text>
                <text x="456" y="596">YES</text>
                <text x="64" y="612">the</text>
                <text x="128" y="612">immediately</text>
                <text x="196" y="612">next</text>
                <text x="84" y="628">consumer</text>
                <text x="132" y="628">of</text>
                <text x="160" y="628">OPT</text>
                <text x="48" y="660">|</text>
                <text x="208" y="660">|</text>
                <text x="52" y="676">NO</text>
                <text x="208" y="676">YES</text>
                <text x="100" y="756">Is</text>
                <text x="128" y="756">OPT</text>
                <text x="160" y="756">the</text>
                <text x="212" y="756">Uri-Host</text>
                <text x="260" y="756">or</text>
                <text x="308" y="756">Uri-Port</text>
                <text x="376" y="756">option?</text>
                <text x="120" y="788">|</text>
                <text x="352" y="788">|</text>
                <text x="124" y="804">NO</text>
                <text x="352" y="804">YES</text>
                <text x="172" y="884">Does</text>
                <text x="200" y="884">M</text>
                <text x="240" y="884">include</text>
                <text x="288" y="884">the</text>
                <text x="356" y="884">Proxy-Scheme</text>
                <text x="164" y="900">or</text>
                <text x="256" y="900">Proxy-Scheme-Number</text>
                <text x="368" y="900">option?</text>
                <text x="208" y="932">|</text>
                <text x="352" y="932">|</text>
                <text x="208" y="948">YES</text>
                <text x="356" y="948">NO</text>
                <text x="144" y="1012">Process</text>
                <text x="192" y="1012">OPT</text>
                <text x="220" y="1012">as</text>
                <text x="256" y="1012">Class</text>
                <text x="288" y="1012">E</text>
                <text x="144" y="1092">Process</text>
                <text x="192" y="1092">OPT</text>
                <text x="220" y="1092">as</text>
                <text x="248" y="1092">per</text>
                <text x="280" y="1092">its</text>
                <text x="332" y="1092">original</text>
                <text x="392" y="1092">Class</text>
                <text x="424" y="1092">U</text>
                <text x="444" y="1092">or</text>
                <text x="464" y="1092">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 of Class U or I for OSCORE.            |
|                                                                     |
+---------------------------------------------------------------------+
     |
     |
     v
+-----------+         +------------------+         +------------------+
| Did I add |---YES-->| As far as I can  |---YES-->| As far as I can  |
| OPT to M? |         | tell, is X a     |         | tell, is X the   |
+-----------+         | consumer of OPT? |         | immediately next |
     |                +------------------+         | consumer of OPT? |
     |                   |                         +------------------+
     |                   |                              |         |
     NO                  NO                            YES        NO
     |                   |                              |         |
     v                   v                              v         |
  +-------------------------+          +---------------------+    |
  | * As far as I can tell, |          | Does X need to      |    |
  |   X is my next hop;     |          | access OPT before   |    |
  |                         |          | decrypting M or in  |    |
  | OR                      |          | order to decrypt M? |    |
  |                         |          +---------------------+    |
  | * As far as I can tell, |              |            |         |
  |   my next hop is not    |              NO          YES        |
  |   the immediately next  |              |            |         |
  |   consumer of OPT       |              |            |         |
  +-------------------------+              |            |         |
     |                   |                 |            |         |
     NO                 YES                |            |         |
     |                   |                 |            |         |
     |                   |                 |            |         |
     |                   v                 v            |         |
     |   +-----------------------------------------+    |         |
     |   | Is OPT the Uri-Host or Uri-Port option? |    |         |
     |   +-----------------------------------------+    |         |
     |        |                            |            |         |
     |        NO                          YES           |         |
     |        |                            |            |         |
     |        |                            |            |         |
     |        |                            v            |         |
     |        |  +---------------------------------+    |         |
     |        |  | Does M include the Proxy-Scheme |    |         |
     |        |  | or Proxy-Scheme-Number option?  |    |         |
     |        |  +---------------------------------+    |         |
     |        |          |                 |            |         |
     |        |         YES                NO           |         |
     |        |          |                 |            |         |
     |        v          v                 |            |         |
     |      +------------------------+     |            |         |
     |      | Process OPT as Class E |     |            |         |
     |      +------------------------+     |            |         |
     |                                     |            |         |
     |                                     v            v         |
     |      +----------------------------------------------+      |
     +----->| Process OPT as per its original Class U or I |<-----+
            +----------------------------------------------+
]]></artwork>
        </artset>
      </figure>
    </section>
    <section anchor="sec-incoming-req-diag">
      <name>State Diagram: Processing of Incoming Requests</name>
      <t><xref target="fig-incoming-request-diagram"/> overviews the processing of an incoming request, as specified in <xref target="incoming-requests"/>. The dotted boxes indicate ending states where the processing terminates.</t>
      <figure anchor="fig-incoming-request-diagram">
        <name>Processing of an Incoming Request.</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1712" width="576" viewBox="0 0 576 1712" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,224 L 8,304" fill="none" stroke="black"/>
              <path d="M 8,512 L 8,624" fill="none" stroke="black"/>
              <path d="M 8,1040 L 8,1136" fill="none" stroke="black"/>
              <path d="M 8,1552 L 8,1632" fill="none" stroke="black"/>
              <path d="M 32,352 L 32,504" fill="none" stroke="black"/>
              <path d="M 32,672 L 32,1032" fill="none" stroke="black"/>
              <path d="M 32,1144 L 32,1544" fill="none" stroke="black"/>
              <path d="M 80,1392 L 80,1472" fill="none" stroke="black"/>
              <path d="M 112,32 L 112,64" fill="none" stroke="black"/>
              <path d="M 120,112 L 120,216" fill="none" stroke="black"/>
              <path d="M 128,224 L 128,304" fill="none" stroke="black"/>
              <path d="M 136,880 L 136,944" fill="none" stroke="black"/>
              <path d="M 136,1312 L 136,1344" fill="none" stroke="black"/>
              <path d="M 136,1480 L 136,1504" fill="none" stroke="black"/>
              <path d="M 152,272 L 152,464" fill="none" stroke="black"/>
              <path d="M 184,512 L 184,624" fill="none" stroke="black"/>
              <path d="M 184,704 L 184,768" fill="none" stroke="black"/>
              <path d="M 200,224 L 200,288" fill="none" stroke="black"/>
              <path d="M 200,512 L 200,592" fill="none" stroke="black"/>
              <path d="M 208,1248 L 208,1312" fill="none" stroke="black"/>
              <path d="M 208,1392 L 208,1472" fill="none" stroke="black"/>
              <path d="M 216,336 L 216,504" fill="none" stroke="black"/>
              <path d="M 224,1040 L 224,1136" fill="none" stroke="black"/>
              <path d="M 232,160 L 232,176" fill="none" stroke="black"/>
              <path d="M 272,448 L 272,464" fill="none" stroke="black"/>
              <path d="M 272,1552 L 272,1632" fill="none" stroke="black"/>
              <path d="M 280,224 L 280,288" fill="none" stroke="black"/>
              <path d="M 280,640 L 280,696" fill="none" stroke="black"/>
              <path d="M 280,776 L 280,872" fill="none" stroke="black"/>
              <path d="M 280,992 L 280,1032" fill="none" stroke="black"/>
              <path d="M 280,1120 L 280,1240" fill="none" stroke="black"/>
              <path d="M 280,1320 L 280,1424" fill="none" stroke="black"/>
              <path d="M 312,704 L 312,768" fill="none" stroke="black"/>
              <path d="M 328,512 L 328,592" fill="none" stroke="black"/>
              <path d="M 336,1248 L 336,1312" fill="none" stroke="black"/>
              <path d="M 344,72 L 344,832" fill="none" stroke="black"/>
              <path d="M 352,880 L 352,944" fill="none" stroke="black"/>
              <path d="M 368,224 L 368,272" fill="none" stroke="black"/>
              <path d="M 376,280 L 376,1584" fill="none" stroke="black"/>
              <path d="M 400,1344 L 400,1392" fill="none" stroke="black"/>
              <path d="M 408,320 L 408,1336" fill="none" stroke="black"/>
              <path d="M 424,704 L 424,784" fill="none" stroke="black"/>
              <path d="M 424,1440 L 424,1544" fill="none" stroke="black"/>
              <path d="M 432,112 L 432,216" fill="none" stroke="black"/>
              <path d="M 448,432 L 448,496" fill="none" stroke="black"/>
              <path d="M 448,832 L 448,904" fill="none" stroke="black"/>
              <path d="M 448,1104 L 448,1136" fill="none" stroke="black"/>
              <path d="M 456,544 L 456,568" fill="none" stroke="black"/>
              <path d="M 456,1008 L 456,1040" fill="none" stroke="black"/>
              <path d="M 456,1184 L 456,1240" fill="none" stroke="black"/>
              <path d="M 472,320 L 472,424" fill="none" stroke="black"/>
              <path d="M 496,32 L 496,64" fill="none" stroke="black"/>
              <path d="M 496,1048 L 496,1096" fill="none" stroke="black"/>
              <path d="M 496,1144 L 496,1200" fill="none" stroke="black"/>
              <path d="M 496,1440 L 496,1464" fill="none" stroke="black"/>
              <path d="M 504,224 L 504,272" fill="none" stroke="black"/>
              <path d="M 520,1344 L 520,1392" fill="none" stroke="black"/>
              <path d="M 528,832 L 528,1000" fill="none" stroke="black"/>
              <path d="M 536,544 L 536,696" fill="none" stroke="black"/>
              <path d="M 536,1008 L 536,1040" fill="none" stroke="black"/>
              <path d="M 536,1104 L 536,1136" fill="none" stroke="black"/>
              <path d="M 544,432 L 544,496" fill="none" stroke="black"/>
              <path d="M 552,704 L 552,784" fill="none" stroke="black"/>
              <path d="M 568,48 L 568,1200" fill="none" stroke="black"/>
              <path d="M 112,32 L 496,32" fill="none" stroke="black"/>
              <path d="M 80,48 L 104,48" fill="none" stroke="black"/>
              <path d="M 504,48 L 568,48" fill="none" stroke="black"/>
              <path d="M 112,64 L 496,64" fill="none" stroke="black"/>
              <path d="M 8,224 L 128,224" fill="none" stroke="black"/>
              <path d="M 200,224 L 280,224" fill="none" stroke="black"/>
              <path d="M 368,224 L 504,224" fill="none" stroke="black"/>
              <path d="M 136,240 L 192,240" fill="none" stroke="black"/>
              <path d="M 152,272 L 192,272" fill="none" stroke="black"/>
              <path d="M 368,272 L 504,272" fill="none" stroke="black"/>
              <path d="M 200,288 L 280,288" fill="none" stroke="black"/>
              <path d="M 8,304 L 128,304" fill="none" stroke="black"/>
              <path d="M 448,432 L 544,432" fill="none" stroke="black"/>
              <path d="M 448,496 L 544,496" fill="none" stroke="black"/>
              <path d="M 8,512 L 184,512" fill="none" stroke="black"/>
              <path d="M 200,512 L 328,512" fill="none" stroke="black"/>
              <path d="M 200,592 L 328,592" fill="none" stroke="black"/>
              <path d="M 8,624 L 184,624" fill="none" stroke="black"/>
              <path d="M 184,704 L 312,704" fill="none" stroke="black"/>
              <path d="M 424,704 L 552,704" fill="none" stroke="black"/>
              <path d="M 184,768 L 312,768" fill="none" stroke="black"/>
              <path d="M 424,784 L 552,784" fill="none" stroke="black"/>
              <path d="M 136,880 L 352,880" fill="none" stroke="black"/>
              <path d="M 136,944 L 352,944" fill="none" stroke="black"/>
              <path d="M 456,1008 L 536,1008" fill="none" stroke="black"/>
              <path d="M 8,1040 L 224,1040" fill="none" stroke="black"/>
              <path d="M 456,1040 L 536,1040" fill="none" stroke="black"/>
              <path d="M 448,1104 L 536,1104" fill="none" stroke="black"/>
              <path d="M 8,1136 L 224,1136" fill="none" stroke="black"/>
              <path d="M 448,1136 L 536,1136" fill="none" stroke="black"/>
              <path d="M 496,1200 L 520,1200" fill="none" stroke="black"/>
              <path d="M 552,1200 L 568,1200" fill="none" stroke="black"/>
              <path d="M 208,1248 L 336,1248" fill="none" stroke="black"/>
              <path d="M 208,1312 L 336,1312" fill="none" stroke="black"/>
              <path d="M 400,1344 L 520,1344" fill="none" stroke="black"/>
              <path d="M 80,1392 L 208,1392" fill="none" stroke="black"/>
              <path d="M 400,1392 L 520,1392" fill="none" stroke="black"/>
              <path d="M 216,1424 L 232,1424" fill="none" stroke="black"/>
              <path d="M 264,1424 L 280,1424" fill="none" stroke="black"/>
              <path d="M 80,1472 L 208,1472" fill="none" stroke="black"/>
              <path d="M 8,1552 L 272,1552" fill="none" stroke="black"/>
              <path d="M 280,1584 L 296,1584" fill="none" stroke="black"/>
              <path d="M 320,1584 L 376,1584" fill="none" stroke="black"/>
              <path d="M 8,1632 L 272,1632" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="544,696 532,690.4 532,701.6" fill="black" transform="rotate(90,536,696)"/>
              <polygon class="arrowhead" points="536,1000 524,994.4 524,1005.6" fill="black" transform="rotate(90,528,1000)"/>
              <polygon class="arrowhead" points="512,48 500,42.4 500,53.6" fill="black" transform="rotate(180,504,48)"/>
              <polygon class="arrowhead" points="504,1464 492,1458.4 492,1469.6" fill="black" transform="rotate(90,496,1464)"/>
              <polygon class="arrowhead" points="504,1096 492,1090.4 492,1101.6" fill="black" transform="rotate(90,496,1096)"/>
              <polygon class="arrowhead" points="480,424 468,418.4 468,429.6" fill="black" transform="rotate(90,472,424)"/>
              <polygon class="arrowhead" points="464,1240 452,1234.4 452,1245.6" fill="black" transform="rotate(90,456,1240)"/>
              <polygon class="arrowhead" points="464,568 452,562.4 452,573.6" fill="black" transform="rotate(90,456,568)"/>
              <polygon class="arrowhead" points="456,904 444,898.4 444,909.6" fill="black" transform="rotate(90,448,904)"/>
              <polygon class="arrowhead" points="440,216 428,210.4 428,221.6" fill="black" transform="rotate(90,432,216)"/>
              <polygon class="arrowhead" points="432,1544 420,1538.4 420,1549.6" fill="black" transform="rotate(90,424,1544)"/>
              <polygon class="arrowhead" points="416,1336 404,1330.4 404,1341.6" fill="black" transform="rotate(90,408,1336)"/>
              <polygon class="arrowhead" points="384,280 372,274.4 372,285.6" fill="black" transform="rotate(270,376,280)"/>
              <polygon class="arrowhead" points="352,72 340,66.4 340,77.6" fill="black" transform="rotate(270,344,72)"/>
              <polygon class="arrowhead" points="288,1320 276,1314.4 276,1325.6" fill="black" transform="rotate(270,280,1320)"/>
              <polygon class="arrowhead" points="288,1120 276,1114.4 276,1125.6" fill="black" transform="rotate(270,280,1120)"/>
              <polygon class="arrowhead" points="288,1032 276,1026.4 276,1037.6" fill="black" transform="rotate(90,280,1032)"/>
              <polygon class="arrowhead" points="288,872 276,866.4 276,877.6" fill="black" transform="rotate(90,280,872)"/>
              <polygon class="arrowhead" points="288,696 276,690.4 276,701.6" fill="black" transform="rotate(90,280,696)"/>
              <polygon class="arrowhead" points="280,448 268,442.4 268,453.6" fill="black" transform="rotate(270,272,448)"/>
              <polygon class="arrowhead" points="240,160 228,154.4 228,165.6" fill="black" transform="rotate(270,232,160)"/>
              <polygon class="arrowhead" points="224,504 212,498.4 212,509.6" fill="black" transform="rotate(90,216,504)"/>
              <polygon class="arrowhead" points="200,272 188,266.4 188,277.6" fill="black" transform="rotate(0,192,272)"/>
              <polygon class="arrowhead" points="200,240 188,234.4 188,245.6" fill="black" transform="rotate(0,192,240)"/>
              <polygon class="arrowhead" points="144,1480 132,1474.4 132,1485.6" fill="black" transform="rotate(270,136,1480)"/>
              <polygon class="arrowhead" points="144,1312 132,1306.4 132,1317.6" fill="black" transform="rotate(270,136,1312)"/>
              <polygon class="arrowhead" points="128,216 116,210.4 116,221.6" fill="black" transform="rotate(90,120,216)"/>
              <polygon class="arrowhead" points="112,48 100,42.4 100,53.6" fill="black" transform="rotate(0,104,48)"/>
              <polygon class="arrowhead" points="40,1544 28,1538.4 28,1549.6" fill="black" transform="rotate(90,32,1544)"/>
              <polygon class="arrowhead" points="40,1032 28,1026.4 28,1037.6" fill="black" transform="rotate(90,32,1032)"/>
              <polygon class="arrowhead" points="40,504 28,498.4 28,509.6" fill="black" transform="rotate(90,32,504)"/>
              <g class="text">
                <text x="36" y="52">Incoming</text>
                <text x="192" y="52">Are</text>
                <text x="232" y="52">there</text>
                <text x="312" y="52">proxy-related</text>
                <text x="404" y="52">options?</text>
                <text x="32" y="68">request</text>
                <text x="120" y="84">|</text>
                <text x="432" y="84">|</text>
                <text x="120" y="100">YES</text>
                <text x="236" y="100">..........</text>
                <text x="436" y="100">NO</text>
                <text x="200" y="116">:</text>
                <text x="236" y="116">Return</text>
                <text x="272" y="116">:</text>
                <text x="200" y="132">:</text>
                <text x="228" y="132">5.05</text>
                <text x="272" y="132">:</text>
                <text x="236" y="148">:........:</text>
                <text x="236" y="196">NO</text>
                <text x="232" y="212">|</text>
                <text x="152" y="228">YES</text>
                <text x="28" y="244">Is</text>
                <text x="64" y="244">there</text>
                <text x="104" y="244">the</text>
                <text x="220" y="244">Am</text>
                <text x="240" y="244">I</text>
                <text x="256" y="244">a</text>
                <text x="388" y="244">Is</text>
                <text x="424" y="244">there</text>
                <text x="460" y="244">an</text>
                <text x="56" y="260">Proxy-Uri</text>
                <text x="108" y="260">or</text>
                <text x="240" y="260">forward</text>
                <text x="404" y="260">OSCORE</text>
                <text x="464" y="260">option?</text>
                <text x="56" y="276">Proxy-Cri</text>
                <text x="236" y="276">proxy?</text>
                <text x="48" y="292">option?</text>
                <text x="408" y="292">|</text>
                <text x="472" y="292">|</text>
                <text x="216" y="308">|</text>
                <text x="412" y="308">NO</text>
                <text x="472" y="308">YES</text>
                <text x="32" y="324">|</text>
                <text x="216" y="324">YES</text>
                <text x="36" y="340">NO</text>
                <text x="276" y="388">..........</text>
                <text x="240" y="404">:</text>
                <text x="276" y="404">Return</text>
                <text x="312" y="404">:</text>
                <text x="240" y="420">:</text>
                <text x="268" y="420">4.01</text>
                <text x="312" y="420">:</text>
                <text x="276" y="436">:........:</text>
                <text x="472" y="452">Are</text>
                <text x="512" y="452">there</text>
                <text x="492" y="468">Uri-Path</text>
                <text x="152" y="484">YES</text>
                <text x="276" y="484">NO</text>
                <text x="492" y="484">options?</text>
                <text x="152" y="500">|</text>
                <text x="272" y="500">|</text>
                <text x="456" y="516">|</text>
                <text x="536" y="516">|</text>
                <text x="28" y="532">Is</text>
                <text x="64" y="532">there</text>
                <text x="104" y="532">the</text>
                <text x="220" y="532">Is</text>
                <text x="244" y="532">it</text>
                <text x="456" y="532">YES</text>
                <text x="540" y="532">NO</text>
                <text x="68" y="548">Proxy-Scheme</text>
                <text x="132" y="548">or</text>
                <text x="252" y="548">acceptable</text>
                <text x="308" y="548">to</text>
                <text x="96" y="564">Proxy-Scheme-Number</text>
                <text x="240" y="564">forward</text>
                <text x="288" y="564">the</text>
                <text x="48" y="580">option,</text>
                <text x="116" y="580">together</text>
                <text x="244" y="580">request?</text>
                <text x="296" y="580">(#)</text>
                <text x="476" y="580">..........</text>
                <text x="36" y="596">with</text>
                <text x="72" y="596">the</text>
                <text x="124" y="596">Uri-Host</text>
                <text x="440" y="596">:</text>
                <text x="476" y="596">Return</text>
                <text x="512" y="596">:</text>
                <text x="28" y="612">or</text>
                <text x="76" y="612">Uri-Port</text>
                <text x="144" y="612">option?</text>
                <text x="280" y="612">|</text>
                <text x="440" y="612">:</text>
                <text x="468" y="612">4.00</text>
                <text x="512" y="612">:</text>
                <text x="280" y="628">YES</text>
                <text x="476" y="628">..........</text>
                <text x="32" y="644">|</text>
                <text x="36" y="660">NO</text>
                <text x="224" y="724">Consume</text>
                <text x="272" y="724">the</text>
                <text x="444" y="724">Is</text>
                <text x="468" y="724">it</text>
                <text x="248" y="740">proxy-related</text>
                <text x="476" y="740">acceptable</text>
                <text x="532" y="740">to</text>
                <text x="224" y="756">options</text>
                <text x="464" y="756">decrypt</text>
                <text x="512" y="756">the</text>
                <text x="468" y="772">request?</text>
                <text x="520" y="772">(#)</text>
                <text x="448" y="804">|</text>
                <text x="528" y="804">|</text>
                <text x="452" y="820">NO</text>
                <text x="528" y="820">YES</text>
                <text x="344" y="852">YES</text>
                <text x="344" y="868">|</text>
                <text x="164" y="900">Does</text>
                <text x="200" y="900">the</text>
                <text x="256" y="900">authority</text>
                <text x="168" y="916">(host</text>
                <text x="208" y="916">and</text>
                <text x="248" y="916">port)</text>
                <text x="284" y="916">of</text>
                <text x="312" y="916">the</text>
                <text x="468" y="916">..........</text>
                <text x="176" y="932">request</text>
                <text x="224" y="932">URI</text>
                <text x="276" y="932">identify</text>
                <text x="328" y="932">me?</text>
                <text x="432" y="932">:</text>
                <text x="468" y="932">Return</text>
                <text x="504" y="932">:</text>
                <text x="432" y="948">:</text>
                <text x="460" y="948">4.01</text>
                <text x="504" y="948">:</text>
                <text x="280" y="964">|</text>
                <text x="468" y="964">:........:</text>
                <text x="284" y="980">NO</text>
                <text x="496" y="1028">Decrypt</text>
                <text x="296" y="1044">...........</text>
                <text x="40" y="1060">There</text>
                <text x="76" y="1060">is</text>
                <text x="100" y="1060">no</text>
                <text x="164" y="1060">Proxy-Scheme</text>
                <text x="256" y="1060">:</text>
                <text x="296" y="1060">Forward</text>
                <text x="336" y="1060">:</text>
                <text x="28" y="1076">or</text>
                <text x="120" y="1076">Proxy-Scheme-Number</text>
                <text x="256" y="1076">:</text>
                <text x="280" y="1076">the</text>
                <text x="336" y="1076">:</text>
                <text x="48" y="1092">option,</text>
                <text x="96" y="1092">but</text>
                <text x="136" y="1092">there</text>
                <text x="176" y="1092">are</text>
                <text x="256" y="1092">:</text>
                <text x="296" y="1092">request</text>
                <text x="336" y="1092">:</text>
                <text x="52" y="1108">Uri-Path</text>
                <text x="116" y="1108">and/or</text>
                <text x="180" y="1108">Uri-Host</text>
                <text x="296" y="1108">:.........:</text>
                <text x="44" y="1124">and/or</text>
                <text x="108" y="1124">Uri-Port</text>
                <text x="176" y="1124">options</text>
                <text x="492" y="1124">Success?</text>
                <text x="456" y="1156">|</text>
                <text x="460" y="1172">NO</text>
                <text x="536" y="1204">YES</text>
                <text x="132" y="1252">..........</text>
                <text x="500" y="1252">................</text>
                <text x="96" y="1268">:</text>
                <text x="132" y="1268">Return</text>
                <text x="168" y="1268">:</text>
                <text x="248" y="1268">Consume</text>
                <text x="296" y="1268">the</text>
                <text x="440" y="1268">:</text>
                <text x="476" y="1268">OSCORE</text>
                <text x="528" y="1268">error</text>
                <text x="560" y="1268">:</text>
                <text x="96" y="1284">:</text>
                <text x="124" y="1284">4.01</text>
                <text x="168" y="1284">:</text>
                <text x="272" y="1284">proxy-related</text>
                <text x="440" y="1284">:</text>
                <text x="484" y="1284">handling</text>
                <text x="560" y="1284">:</text>
                <text x="132" y="1300">:........:</text>
                <text x="248" y="1300">options</text>
                <text x="500" y="1300">:..............:</text>
                <text x="140" y="1364">NO</text>
                <text x="420" y="1364">Is</text>
                <text x="456" y="1364">there</text>
                <text x="492" y="1364">an</text>
                <text x="136" y="1380">|</text>
                <text x="460" y="1380">application?</text>
                <text x="100" y="1412">Is</text>
                <text x="124" y="1412">it</text>
                <text x="424" y="1412">|</text>
                <text x="496" y="1412">|</text>
                <text x="132" y="1428">acceptable</text>
                <text x="188" y="1428">to</text>
                <text x="248" y="1428">YES</text>
                <text x="424" y="1428">YES</text>
                <text x="500" y="1428">NO</text>
                <text x="120" y="1444">forward</text>
                <text x="168" y="1444">the</text>
                <text x="124" y="1460">request?</text>
                <text x="176" y="1460">(#)</text>
                <text x="500" y="1476">..........</text>
                <text x="464" y="1492">:</text>
                <text x="500" y="1492">Return</text>
                <text x="536" y="1492">:</text>
                <text x="464" y="1508">:</text>
                <text x="492" y="1508">4.00</text>
                <text x="536" y="1508">:</text>
                <text x="136" y="1524">YES</text>
                <text x="500" y="1524">:........:</text>
                <text x="136" y="1540">|</text>
                <text x="468" y="1556">..................</text>
                <text x="28" y="1572">Am</text>
                <text x="48" y="1572">I</text>
                <text x="64" y="1572">a</text>
                <text x="128" y="1572">reverse-proxy</text>
                <text x="208" y="1572">using</text>
                <text x="248" y="1572">the</text>
                <text x="400" y="1572">:</text>
                <text x="440" y="1572">Deliver</text>
                <text x="488" y="1572">the</text>
                <text x="536" y="1572">:</text>
                <text x="40" y="1588">exact</text>
                <text x="88" y="1588">value</text>
                <text x="124" y="1588">of</text>
                <text x="160" y="1588">these</text>
                <text x="224" y="1588">Uri-Path,</text>
                <text x="308" y="1588">NO</text>
                <text x="400" y="1588">:</text>
                <text x="440" y="1588">request</text>
                <text x="484" y="1588">to</text>
                <text x="512" y="1588">the</text>
                <text x="536" y="1588">:</text>
                <text x="56" y="1604">Uri-Host,</text>
                <text x="112" y="1604">and</text>
                <text x="164" y="1604">Uri-Port</text>
                <text x="232" y="1604">options</text>
                <text x="400" y="1604">:</text>
                <text x="456" y="1604">application</text>
                <text x="536" y="1604">:</text>
                <text x="32" y="1620">for</text>
                <text x="88" y="1620">proxying?</text>
                <text x="468" y="1620">:................:</text>
                <text x="16" y="1684">(#)</text>
                <text x="52" y="1684">This</text>
                <text x="84" y="1684">is</text>
                <text x="140" y="1684">determined</text>
                <text x="224" y="1684">according</text>
                <text x="276" y="1684">to</text>
                <text x="304" y="1684">the</text>
                <text x="364" y="1684">endpoint's</text>
                <text x="464" y="1684">configuration</text>
                <text x="48" y="1700">and</text>
                <text x="72" y="1700">a</text>
                <text x="116" y="1700">possible</text>
                <text x="208" y="1700">authorization</text>
                <text x="316" y="1700">enforcement.</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
             +-----------------------------------------------+
Incoming --->|        Are there proxy-related options?       |<-------+
request      +-----------------------------------------------+        |
              |                           ^          |                |
             YES        ..........        |          NO               |
              |         : Return :        |          |                |
              |         : 5.05   :        |          |                |
              |         :........:        |          |                |
              |             ^             |          |                |
              |             |             |          |                |
              |             NO            |          |                |
              v             |             |          v                |
+--------------+ YES    +---------+       |  +----------------+       |
| Is there the |------->| Am I a  |       |  | Is there an    |       |
| Proxy-Uri or |        | forward |       |  | OSCORE option? |       |
| Proxy-Cri    |  +---->| proxy?  |       |  +----------------+       |
| option?      |  |     +---------+       |   ^   |       |           |
+--------------+  |       |               |   |   NO     YES          |
   |              |      YES              |   |   |       |           |
   NO             |       |               |   |   |       |           |
   |              |       |               |   |   |       |           |
   |              |       |               |   |   |       |           |
   |              |       |  ..........   |   |   |       |           |
   |              |       |  : Return :   |   |   |       |           |
   |              |       |  : 4.01   :   |   |   |       v           |
   |              |       |  :........:   |   |   |    +-----------+  |
   |              |       |      ^        |   |   |    | Are there |  |
   |              |       |      |        |   |   |    | Uri-Path  |  |
   |             YES      |      NO       |   |   |    | options?  |  |
   v              |       v      |        |   |   |    +-----------+  |
+---------------------+ +---------------+ |   |   |     |         |   |
| Is there the        | | Is it         | |   |   |    YES        NO  |
| Proxy-Scheme or     | | acceptable to | |   |   |     |         |   |
| Proxy-Scheme-Number | | forward the   | |   |   |     v         |   |
| option, together    | | request? (#)  | |   |   |   ..........  |   |
| with the Uri-Host   | +---------------+ |   |   |   : Return :  |   |
| or Uri-Port option? |           |       |   |   |   : 4.00   :  |   |
+---------------------+          YES      |   |   |   ..........  |   |
   |                              |       |   |   |               |   |
   NO                             |       |   |   |               |   |
   |                              |       |   |   |               |   |
   |                              v       |   |   |               v   |
   |                  +---------------+   |   |   | +---------------+ |
   |                  | Consume the   |   |   |   | | Is it         | |
   |                  | proxy-related |   |   |   | | acceptable to | |
   |                  | options       |   |   |   | | decrypt the   | |
   |                  +---------------+   |   |   | | request? (#)  | |
   |                              |       |   |   | +---------------+ |
   |                              |       |   |   |    |         |    |
   |                              |       |   |   |    NO       YES   |
   |                              |       |   |   |    |         |    |
   |                              |      YES  |   |    |         |    |
   |                              v       |   |   |    |         |    |
   |            +--------------------------+  |   |    |         |    |
   |            | Does the authority       |  |   |    v         |    |
   |            | (host and port) of the   |  |   |  ..........  |    |
   |            | request URI identify me? |  |   |  : Return :  |    |
   |            +--------------------------+  |   |  : 4.01   :  |    |
   |                              |           |   |  :........:  |    |
   |                              NO          |   |              |    |
   |                              |           |   |              v    |
   |                              |           |   |     +---------+   |
   v                              v           |   |     | Decrypt |   |
+--------------------------+   ...........    |   |     +---------+   |
| There is no Proxy-Scheme |   : Forward :    |   |          |        |
| or Proxy-Scheme-Number   |   : the     :    |   |          |        |
| option, but there are    |   : request :    |   |          v        |
| Uri-Path and/or Uri-Host |   :.........:    |   |    +----------+   |
| and/or Uri-Port options  |      ^           |   |    | Success? |   |
+--------------------------+      |           |   |    +----------+   |
   |                              |           |   |     |    |        |
   |                              |           |   |     NO   |        |
   |                              |           |   |     |    |        |
   |                              |           |   |     |    +---YES--+
   |                              |           |   |     |
   |                              |           |   |     v
   |       ..........    +---------------+    |   |   ................
   |       : Return :    | Consume the   |    |   |   : OSCORE error :
   |       : 4.01   :    | proxy-related |    |   |   : handling     :
   |       :........:    | options       |    |   |   :..............:
   |            ^        +---------------+    |   |
   |            |                 ^           |   v
   |            |                 |           |  +--------------+
   |            NO                |           |  | Is there an  |
   |            |                 |           |  | application? |
   |     +---------------+        |           |  +--------------+
   |     | Is it         |        |           |     |        |
   |     | acceptable to |---YES--+           |    YES       NO
   |     | forward the   |                    |     |        |
   |     | request? (#)  |                    |     |        v
   |     +---------------+                    |     |    ..........
   |            ^                             |     |    : Return :
   |            |                             |     |    : 4.00   :
   |           YES                            |     |    :........:
   v            |                             |     v
+--------------------------------+            |  ..................
| Am I a reverse-proxy using the |            |  : Deliver the    :
| exact value of these Uri-Path, |---NO-------+  : request to the :
| Uri-Host, and Uri-Port options |               : application    :
| for proxying?                  |               :................:
+--------------------------------+


(#) This is determined according to the endpoint's configuration
    and a possible authorization enforcement.
]]></artwork>
        </artset>
      </figure>
    </section>
    <section anchor="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <section anchor="sec-02-03">
        <name>Version -02 to -03</name>
        <ul spacing="normal">
          <li>
            <t>Clarified motivation for updating RFC 8768 in the introduction.</t>
          </li>
          <li>
            <t>Explained that OSCORE-capable proxies have to recognize CoAP options included in outgoing messages to protect.</t>
          </li>
          <li>
            <t>Fixed typo about the intended class of Hop-Limit option for OSCORE.</t>
          </li>
          <li>
            <t>Fixed protection of the Uri-Host option in examples.</t>
          </li>
          <li>
            <t>Added security considerations about the Hop-Limit option.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-01-02">
        <name>Version -01 to -02</name>
        <ul spacing="normal">
          <li>
            <t>Revised escalation of CoAP option protection.</t>
          </li>
          <li>
            <t>Specified general ordering for protecting outgoing requests.</t>
          </li>
          <li>
            <t>Explicit definition of OSCORE processing for the Hop-Limit option (update to RFC 8768).</t>
          </li>
          <li>
            <t>Added examples of message exchange with a reverse-proxy.</t>
          </li>
          <li>
            <t>Clarifications and editorial improvements.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-00-01">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>
            <t>Escalation of option protection as explicit update point to RFC 8613.</t>
          </li>
          <li>
            <t>Clarified examples of Class U/I CoAP options that become encrypted.</t>
          </li>
          <li>
            <t>Considered also the CoAP Options Proxy-Cri and Proxy-Scheme-Number.</t>
          </li>
          <li>
            <t>Added reference to Onion CoAP as use case.</t>
          </li>
          <li>
            <t>Required to set a limit on OSCORE layers that can be added/removed.</t>
          </li>
          <li>
            <t>Revised general rules on protecting CoAP options.</t>
          </li>
          <li>
            <t>A forward-proxy consumes a request when the request URI identifies the proxy itself.</t>
          </li>
          <li>
            <t>Consistency fix: a reverse-proxy can forward based on Uri-Host, Uri-Port or Uri-Path.</t>
          </li>
          <li>
            <t>Generalized authorization checks as acceptability checks.</t>
          </li>
          <li>
            <t>Added acceptability check before decrypting a request.</t>
          </li>
          <li>
            <t>Fixes in the examples of message exchange.</t>
          </li>
          <li>
            <t>Updated state diagram of the incoming request processing.</t>
          </li>
          <li>
            <t>Added state diagram on the protection of CoAP options of Class U/I.</t>
          </li>
          <li>
            <t>Updated references.</t>
          </li>
          <li>
            <t>Editorial fixes and improvements.</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <contact fullname="Christian Amsüss"/>, <contact fullname="Peter Blomqvist"/>, <contact fullname="Carsten Bormann"/>, <contact fullname="David Navarro"/>, and <contact fullname="Göran Selander"/> for their comments and feedback.</t>
      <t>The work on this document has been partly supported by the Sweden's Innovation Agency VINNOVA and the Celtic-Next projects CRITISEC and CYPRESS; and by the H2020 project SIFIS-Home (Grant agreement 952652).</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1923Ycx5HgO76iFnoYwOwGAfAiCp6xFgIhC2dEEgNAtnw8
tk51dwEos7uqXVUNECY537JfMU/7tPNjG7fMjMzK6gsAUpTMPscW2F2VGRkZ
GRn36Pf7a1d7yaO1tSZvxtle8ur04NXJYX+YTtPBOEuOq/JNntVr6WBQZVed
P4/KYZFO4PVRlZ43/TxrzvvDssr6ZU3/kef7U36+P06brG7W1r5I6iYtRj+l
47KAt5tqlq2t5dOK/qyb3e3tr7Z319IqS/eSo6LJqiJr1q4v9pKD8uQw+WNZ
vc6Li+T3VTmbrr2+ds/0nyMca8O02YMZRmv1bDDJ6zovi+ZmChMdHZ59uzab
jhCMveTZ051HveTZl0+fra0NyxEMuZfMYAXwz3TWXJbV3lpCn778N0nyAt57
sZWc5eNymNqvGQkv0mpYhj+VFYx6cnR6mOx/Y7+smyrLAMajOj3/W1mN6osU
8JHs7tonhnlzs5f8ew54ct+VI5jl9LC/8/Tx42319axoKnj69DobZYX9Ppuk
+XgvmSBUWw1B9b+rfKvO4qs62Uq++5//vhjPilGwrpP8dVqN2r/+7EurCLCt
y5LgksWtFWU1SZv8KsPtO/n24MvdJ7vyJ+64+fPL3cf2z6fP8M+j/vOtFglf
IJENy8mk/cRllZ1739bDy2H/2bPdx32msT0g6uI8BGf70bb58+njHQvDYwPk
V0D+5s8nuxHILEj9QV7P+xmP3U1kZYM6q66y/mQ2bvJhWjf9omzyc/izgZMS
GVFQkY0uy2H712GZTvvT2QAOW/vHpkqLelpWwByKkczgPZUOs/7r7EZBzbN1
zTNpvU3fA1sJXkwn9Syra3k3HV4SJ4o/0+w21UW/LAA4Gg5///76xe6L/oE8
nSQ+SyDafzXNiuRFOciBJe6Px3laDPlwCVP9Pr+4bK4z/H9gDsPLvMiSprR/
nmXDywJwMk5Op9nQbkDST3DWXrI/hQ28ykbJH7IKeViys7XbS1692O+fnfbV
2ADnT/hG/w87P+32d7d3t3d2drb7+wQK0WGCX/Z3dhi4tLrAE3rZNNO9hw+v
r6+3SljIhNaRyjK2YIEPqwy+qLOH/lwPg2keLg/R1nR0blF7Zkjj4+PXTp18
g2RZXNSrYdu+/2mhvBMsD++/B/Cu05sPhXUZfg72I5jecZj+I65EBsF17OA6
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
9Vxio9Ev+RJbXcS2l4NhOK1fVsx+8p9joftnFtR/ySzzlhm2d0wkvG8P/fbn
/Nq5L/7yHfsfO792yciVFh3ez7H4tHzdre9+mV7lz/mzcx75nD97i336nD/7
OX/25/F+rm3s95JvNu0DWLfp4JtXJ0mN5YWwVNWfqawtp+/RByuNXZf8FA6S
5E02qZN98kl9M9+hSqrDXUK6e16UdavBrPKqjWzNJdIzAmfrk7iz1TWaXMnr
qvpTfkT368f3qX52lJKjNNL6zBYG012I7txGFYHngl9Uu/ng1Ytv/vMnEI78
Zoi20CRNOk5hikC1DmqwMjx9R5K6UQFVnjOg2o6wTXlBbQI+u4n9H+/TTXyb
qKxuJ/HisKsP7SK+b2PFcZVNkZV678KRwBOhv8PiisfBu1SVL3juwxJoh1v7
9p5Q2q47ipwBX+ihCHWkG19FRafEfT4bqc3nE3S13jIMgf46ybhipvcdnBc6
OHo8d+B+YXabf3a3721C1LudvvdzvVjK/SS1/0Uc/J/T5XvfevTHcyEvHm8V
EeM0eHdZEeMT9uF0CZO/Erf3nX0/RgT7GSWKhRLcwsoRC6tvrl5+0911n91J
K4slT+8ultzenfRRlIpFm/mrqQd75+AE+n8RxdvfizjeHlxuqKVG/2f1uXWc
s88+t09N6l4khHz2uc196rPP7bPPre1zsx6qn8X5prwscZ9I4J17uqz3zevs
2kfoylnTdx0A77Ns06ebcPgpV0M6krY+smM9BSJ2DfLaZQeNepPv89dZ0txM
5Xfuv8yOM2mF7HroCTKlRV96jXtMPbFS6SQ9QNfcFTfWdP3KMulSV7S6yh4p
Dxt2r8Keoabxdy7dpUrTzSfanrsp9Wp91+AliPYFtiPnVoDcHlrQYdsjGh3A
NIfiHl95xW0MTfsz6iio/ZGzKfX6ws69QY9LapPKjRHr6AyEDO7ZtT7KrrZk
19b1QmTJPEDQPjNs5SmHVp1k1/J+UlZZzyMObPg4m0iX3Z7FwslRko+wxeG5
7bLYpNVFhiioy1kFDFOa8hpiNxgmll0WjC1pEmWa7mL7JvZ4Hh2b5smmi5rt
cUge56Pj/hj4bZWO6WxU1Ju95z1oO9DZnoYOnGRUZkyVgnrYkRDv0s3VNKV6
uvVYmlJ9uftkl9u6fryyYp9A2LDSfjUZ3so8dW9VwH425fNXVfrq/iJuF1W/
+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
AA==

-->

</rfc>
