<?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.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-oscore-capable-proxies-01" category="std" consensus="true" submissionType="IETF" updates="8613" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title abbrev="OSCORE-capable Proxies">OSCORE-capable Proxies</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-capable-proxies-01"/>
    <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="March" day="04"/>
    <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, as well as between an application endpoint and an intermediary or between two intermediaries. Thus, this document updates RFC 8613. The same approach 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 related 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 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 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. However, the original specification <xref target="RFC8613"/> does not define how OSCORE can be used to protect CoAP messages in such communication leg, which would require to consider also the 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 possible "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 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>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, as exclusively included or instead combined together with 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 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" 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/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 used not 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/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 to 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 to observe 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, to especially 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 MAY 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 MUST 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 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 "behind" the LwM2M Gateway. While it is outside the scope of such 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 the CoAP protocol 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 of each end IoT device behind itself, as exposed 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 for the targeted end IoT device as well as for 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 reying 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, which 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 dedicated OSCORE Security Context with each client, the proxy can rely on it to identify the client, before forwarding its messages to any other member 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. Therefore, 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 SHOULD 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, it is typically bounded by the maximum number of OSCORE Security Contexts that can be active at the endpoint, and 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 MUST NOT 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 MUST abort the message sending. If the message is an incoming request and it requires further OSCORE processing beyond the set limit, the endpoint MUST 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>In addition to the CoAP options specified as Class E in <xref target="RFC8613"/> or in the document defining them, the sender endpoint MUST encrypt and integrity-protect the following CoAP options. That is, even if they are originally specified as Class U or I for OSCORE, such options are processed like if they were specified as Class E.</t>
        <ul spacing="normal">
          <li>
            <t>Any CoAP option OPT such that all the following conditions hold.  </t>
            <ol spacing="normal" type="1"><li>
                <t>The sender endpoint has added OPT to the message M.</t>
              </li>
              <li>
                <t>The other OSCORE endpoint X is not a consumer of OPT.</t>
              </li>
              <li>
                <t>Any of the following applies:      </t>
                <ul spacing="normal">
                  <li>
                    <t>X is the next hop for the sender endpoint; or</t>
                  </li>
                  <li>
                    <t>The next hop is not the immediately next consumer of OPT.</t>
                  </li>
                </ul>
              </li>
            </ol>
            <t>
Examples of such CoAP options are:  </t>
            <ul spacing="normal">
              <li>
                <t>The OSCORE Option present as the result of the OSCORE layer immediately previously applied for an OSCORE endpoint different than X, when the sender endpoint is an origin endpoint.</t>
              </li>
              <li>
                <t>The EDHOC Option defined in <xref target="I-D.ietf-core-oscore-edhoc"/>, when the sender endpoint is the EDHOC Initiator.</t>
              </li>
              <li>
                <t>The Request-Hash Option defined in <xref target="I-D.amsuess-core-cachable-oscore"/>, when X is not an origin endpoint.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Any CoAP option OPT such that all the following conditions hold.  </t>
            <ol spacing="normal" type="1"><li>
                <t>The sender endpoint has added OPT to the message M.</t>
              </li>
              <li>
                <t>The other OSCORE endpoint X is the immediately next consumer of OPT.</t>
              </li>
              <li>
                <t>At the other OSCORE endpoint X, OPT does not play a role in processing M before having removed the i-th OSCORE layer or in removing the i-th OSCORE layer altogether.</t>
              </li>
            </ol>
            <t>
Examples of such CoAP options are:  </t>
            <ul spacing="normal">
              <li>
                <t>The Proxy-Uri, Proxy-Scheme, Uri-Host, and Uri-Port Options defined in <xref target="RFC7252"/>.</t>
              </li>
              <li>
                <t>The Proxy-Cri and Proxy-Scheme-Number Options defined in <xref target="I-D.ietf-core-href"/>.</t>
              </li>
              <li>
                <t>The Listen-To-Multicast-Notifications Option defined in <xref target="I-D.ietf-core-observe-multicast-notifications"/>.</t>
              </li>
              <li>
                <t>The Multicast-Timeout, Response-Forwarding, and Group-ETag Options defined in <xref target="I-D.ietf-core-groupcomm-proxy"/>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Any CoAP option OPT such that all the following conditions hold.  </t>
            <ol spacing="normal" type="1"><li>
                <t>The sender endpoint has not added OPT to the message M.</t>
              </li>
              <li>
                <t>Any of the following applies:      </t>
                <ul spacing="normal">
                  <li>
                    <t>X is the next hop for the sender endpoint; or</t>
                  </li>
                  <li>
                    <t>The next hop is not supposed to be the immediately next consumer of OPT.</t>
                  </li>
                </ul>
              </li>
            </ol>
            <t>
Examples of such CoAP options are:  </t>
            <ul spacing="normal">
              <li>
                <t>The OSCORE Option present as the result of the OSCORE layer immediately previously applied for an OSCORE endpoint different than X, when the sender endpoint is not an origin endpoint.</t>
              </li>
              <li>
                <t>The EDHOC Option defined in <xref target="I-D.ietf-core-oscore-edhoc"/>, when the sender endpoint is not the EDHOC Initiator.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t><xref target="sec-option-protection-diag"/> provides an overview as a state diagram.</t>
        <t>Note that, in a simple scenario where no intermediaries are deployed between two origin endpoints, the rules defined above result in encrypting and integrity-protecting the Uri-Host and Uri-Port Options included in a CoAP request. This is different from what was intended in <xref target="RFC8613"/>, according to which the two options were meant to be always unprotected.</t>
        <t>However, in the absence of intermediaries, there is no reason for those two options to be unprotected. In fact, at the origin server, they do not play a role in retrieving the OSCORE Security Context to use for decrypting a received request, and the server can still consume them as usual, after the request has been decrypted.</t>
        <t>If only one of the two origin endpoints has not implemented this updated behavior, this is not an interoperability issue. That is, if such an endpoint is a client, then the two options remain unprotected in a sent request, and the recipient server processes those as expected in <xref target="RFC8613"/>. Instead, if such an endpoint is a server, then it still decrypts the received request according to <xref target="RFC8613"/>, after which it has access to the two options.</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 addition.</t>
        <t>When an 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 MUST be applied by using that Security Context.</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 as 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 MUST stop processing the request and MUST 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 MUST 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 MUST stop processing the request and MUST 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 MUST 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 MUST stop processing the request and MUST 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 further 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 MUST stop processing the request and MAY 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 MUST stop processing the request and MAY 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 MUST 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 MUST stop processing the request and MUST 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, i.e., REQ* = dec(REQ). After that, the possible presence of an OSCORE Option in the decrypted request REQ* is not treated as an error situation.      </t>
                <t>
If the OSCORE processing results in an error, the endpoint MUST 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="8.2" sectionFormat="bare"/> and <xref target="I-D.ietf-core-oscore-groupcomm" section="9.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 an 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 MUST 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 removed.</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 outgoing request. In such a case, the endpoint MUST stop processing the response.</t>
      </section>
    </section>
    <section anchor="sec-response-caching">
      <name>Caching of OSCORE-Protected Responses</name>
      <t>Although not possible as per the original OSCORE specification <xref target="RFC8613"/>, 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 RESTful 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 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.</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, if no cache hit has occurred; and ii) is the result of an OSCORE decryption at the proxy, if OSCORE is used on the communication leg between the proxy and (the previous hop towards) the origin client.</t>
        </li>
        <li>
          <t>Upon receiving a response from (the next hop towards) the origin server, the proxy first removes the same OSCORE layers that it added when protecting the corresponding outgoing request, as defined in <xref target="incoming-responses"/>.  </t>
          <t>
Then, the proxy stores specifically that resulting response message in its cache. That is, such a 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 establishment protocol EDHOC <xref target="I-D.ietf-lake-edhoc"/>.  </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 applications 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. 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. 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) recipient application endpoint.</t>
        </li>
      </ul>
      <t>That is, with respect to the SCHC Compression/Decompression processing, the following holds.</t>
      <ul spacing="normal">
        <li>
          <t>An Inner SCHC Compression is intended for a recipient OSCORE endpoint, which will: first, decrypt an incoming message with the OSCORE Security Context shared with the other OSCORE endpoint; and then, perform the corresponding Inner SCHC Decompression, by relying on the SCHC Rules shared with the other OSCORE endpoint.</t>
        </li>
        <li>
          <t>An Outer SCHC Compression is intended for the (next hop towards the) recipient application endpoint, which will: first, perform a corresponding Outer SCHC Decompression on an incoming message, by relying on the SCHC Rules shared with the (previous hop towards the) recipient application endpoint; then, perform a new Outer SCHC Compression on the result, by relying on the SCHC Rules shared with the (next hop towards the) recipient application endpoint; and, finally, send the result to the (next-hop towards the) recipient application endpoint.</t>
        </li>
      </ul>
      <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 from CoAP <xref target="RFC7252"/> 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-anonimity">
        <name>Preserving Location Anonimity</name>
        <t>Before decrypting an incoming request (see step 3 in <xref target="incoming-requests"/>), the recipient endpoint checks whether decryption 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 their shared OSCORE Security Context CTX. Making such an association would compromise the location anonimity 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 anonimity of the origin server.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no actions for IANA.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <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="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="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>
        <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="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="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="Jiye Park" initials="J." surname="Park">
              <organization>Universitaet Duisburg-Essen</organization>
            </author>
            <date day="2" month="September" year="2023"/>
            <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-20"/>
        </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="9" month="January" 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 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 "cref" paragraph will be removed by the RFC editor:) The
   // present revision –14 of this draft picks up comments from the
   // shepherd review and adds sections on CoAP integration and on cri
   // application-oriented literals for the Extended Diagnostic
   // Notation.  This revision still contains open issues and is
   // intended to serve as a snapshot while the processing of the
   // shepherd review is being completed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-14"/>
        </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="5" month="December" year="2023"/>
            <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-00"/>
        </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="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="23" month="October" year="2023"/>
            <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-10"/>
        </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="19" month="December" year="2023"/>
            <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 over IP
   multicast to a group of servers.  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-00"/>
        </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="23" month="October" year="2023"/>
            <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-07"/>
        </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="20" month="October" year="2023"/>
            <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-13"/>
        </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="29" month="November" year="2023"/>
            <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-10"/>
        </reference>
        <reference anchor="I-D.ietf-lake-edhoc">
          <front>
            <title>Ephemeral Diffie-Hellman Over COSE (EDHOC)</title>
            <author fullname="Göran Selander" initials="G." surname="Selander">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
              <organization>Ericsson AB</organization>
            </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="22" month="January" 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
   OSCORE security context.  By reusing COSE for cryptography, CBOR for
   encoding, and CoAP for transport, the additional code size can be
   kept very low.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lake-edhoc-23"/>
        </reference>
        <reference anchor="I-D.ietf-core-transport-indication">
          <front>
            <title>CoAP Protocol Indication</title>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="23" month="October" year="2023"/>
            <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-03"/>
        </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="Fabrizio Milan" initials="F." surname="Milan">
              <organization>Telecom Italia</organization>
            </author>
            <author fullname="Fabio Bulgarella" initials="F." surname="Bulgarella">
              <organization>Telecom Italia</organization>
            </author>
            <date day="19" month="October" year="2023"/>
            <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-01"/>
        </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="23" month="October" year="2023"/>
            <abstract>
              <t>   This document specifies public-key certificate enrollment procedures
   protected with lightweight application-layer security protocols
   suitable for Internet of Things (IoT) deployments.  The protocols
   leverage payload formats defined in Enrollment over Secure Transport
   (EST) and existing IoT standards including the Constrained
   Application Protocol (CoAP), Concise Binary Object Representation
   (CBOR) and the CBOR Object Signing and Encryption (COSE) format.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-coap-est-oscore-03"/>
        </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="10" month="January" 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-08"/>
        </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="4" month="July" year="2023"/>
            <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-01"/>
        </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"/>, and illustrate 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">
                <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="240" y="388">OSCORE:</text>
                  <text x="316" y="388">[kid:0xd4,</text>
                  <text x="392" y="388">Partial</text>
                  <text x="452" y="388">IV:31]</text>
                  <text x="244" y="404">0xff</text>
                  <text x="236" y="420">Payload:</text>
                  <text x="300" y="420">{Code:</text>
                  <text x="348" y="420">0.02</text>
                  <text x="400" y="420">(POST),</text>
                  <text x="320" y="436">Uri-Host:</text>
                  <text x="420" y="436">"example.com",</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
  |       |       |       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   |
  |       |       |
  |<------+       |         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">
                <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 256,384 L 264,368" fill="none" stroke="black"/>
                <path d="M 264,384 L 276,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="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-Host:</text>
                  <text x="380" y="292">"example.com",</text>
                  <text x="296" y="308">Proxy-Scheme:</text>
                  <text x="384" y="308">"coap",</text>
                  <text x="264" y="324">0xff,</text>
                  <text x="268" y="340">{Code:</text>
                  <text x="316" y="340">0.01</text>
                  <text x="364" y="340">(GET),</text>
                  <text x="288" y="356">Uri-Path:</text>
                  <text x="388" y="356">"alarm_status"</text>
                  <text x="248" y="372">}</text>
                  <text x="320" y="372">Encrypted</text>
                  <text x="380" y="372">with</text>
                  <text x="432" y="372">CTX_C_S</text>
                  <text x="240" y="388">}</text>
                  <text x="312" y="388">Encrypted</text>
                  <text x="372" y="388">with</text>
                  <text x="424" 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">ERSP</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
  |       |       |  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   |
  |       |       |
  |     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   |
  |     ERSP 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 establishment protocol EDHOC <xref target="I-D.ietf-lake-edhoc"/>.</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 establishment protocol EDHOC <xref target="I-D.ietf-lake-edhoc"/>.</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>
    <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="960" width="576" viewBox="0 0 576 960" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
              <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 8,464 L 8,656" fill="none" stroke="black"/>
              <path d="M 56,264 L 56,312" fill="none" stroke="black"/>
              <path d="M 56,416 L 56,456" fill="none" stroke="black"/>
              <path d="M 56,704 L 56,848" fill="none" stroke="black"/>
              <path d="M 88,736 L 88,784" fill="none" stroke="black"/>
              <path d="M 104,320 L 104,368" fill="none" stroke="black"/>
              <path d="M 136,704 L 136,728" fill="none" stroke="black"/>
              <path d="M 168,320 L 168,384" fill="none" stroke="black"/>
              <path d="M 168,464 L 168,656" fill="none" stroke="black"/>
              <path d="M 192,464 L 192,656" fill="none" stroke="black"/>
              <path d="M 224,432 L 224,456" fill="none" stroke="black"/>
              <path d="M 224,704 L 224,728" fill="none" stroke="black"/>
              <path d="M 256,320 L 256,384" fill="none" stroke="black"/>
              <path d="M 256,832 L 256,864" fill="none" stroke="black"/>
              <path d="M 288,736 L 288,784" fill="none" stroke="black"/>
              <path d="M 320,320 L 320,368" fill="none" stroke="black"/>
              <path d="M 320,704 L 320,824" fill="none" stroke="black"/>
              <path d="M 336,464 L 336,656" fill="none" stroke="black"/>
              <path d="M 360,464 L 360,544" fill="none" stroke="black"/>
              <path d="M 368,896 L 368,944" fill="none" stroke="black"/>
              <path d="M 416,592 L 416,824" fill="none" stroke="black"/>
              <path d="M 456,832 L 456,864" fill="none" stroke="black"/>
              <path d="M 496,416 L 496,456" fill="none" stroke="black"/>
              <path d="M 496,592 L 496,888" fill="none" stroke="black"/>
              <path d="M 512,320 L 512,368" fill="none" stroke="black"/>
              <path d="M 536,464 L 536,544" fill="none" stroke="black"/>
              <path d="M 560,336 L 560,888" fill="none" stroke="black"/>
              <path d="M 568,160 L 568,256" fill="none" stroke="black"/>
              <path d="M 568,896 L 568,944" 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 168,320 L 256,320" fill="none" stroke="black"/>
              <path d="M 320,320 L 512,320" fill="none" stroke="black"/>
              <path d="M 144,336 L 160,336" fill="none" stroke="black"/>
              <path d="M 296,336 L 312,336" fill="none" stroke="black"/>
              <path d="M 544,336 L 560,336" fill="none" stroke="black"/>
              <path d="M 8,368 L 104,368" fill="none" stroke="black"/>
              <path d="M 320,368 L 512,368" fill="none" stroke="black"/>
              <path d="M 168,384 L 256,384" fill="none" stroke="black"/>
              <path d="M 8,464 L 168,464" fill="none" stroke="black"/>
              <path d="M 192,464 L 336,464" fill="none" stroke="black"/>
              <path d="M 360,464 L 536,464" fill="none" stroke="black"/>
              <path d="M 360,544 L 536,544" fill="none" stroke="black"/>
              <path d="M 8,656 L 168,656" fill="none" stroke="black"/>
              <path d="M 192,656 L 336,656" fill="none" stroke="black"/>
              <path d="M 88,736 L 288,736" fill="none" stroke="black"/>
              <path d="M 88,784 L 288,784" fill="none" stroke="black"/>
              <path d="M 256,832 L 456,832" fill="none" stroke="black"/>
              <path d="M 56,848 L 248,848" fill="none" stroke="black"/>
              <path d="M 256,864 L 456,864" fill="none" stroke="black"/>
              <path d="M 368,896 L 568,896" fill="none" stroke="black"/>
              <path d="M 368,944 L 568,944" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="568,888 556,882.4 556,893.6" fill="black" transform="rotate(90,560,888)"/>
              <polygon class="arrowhead" points="504,888 492,882.4 492,893.6" fill="black" transform="rotate(90,496,888)"/>
              <polygon class="arrowhead" points="504,456 492,450.4 492,461.6" fill="black" transform="rotate(90,496,456)"/>
              <polygon class="arrowhead" points="424,824 412,818.4 412,829.6" fill="black" transform="rotate(90,416,824)"/>
              <polygon class="arrowhead" points="328,824 316,818.4 316,829.6" fill="black" transform="rotate(90,320,824)"/>
              <polygon class="arrowhead" points="320,336 308,330.4 308,341.6" fill="black" transform="rotate(0,312,336)"/>
              <polygon class="arrowhead" points="256,848 244,842.4 244,853.6" fill="black" transform="rotate(0,248,848)"/>
              <polygon class="arrowhead" points="232,728 220,722.4 220,733.6" fill="black" transform="rotate(90,224,728)"/>
              <polygon class="arrowhead" points="232,456 220,450.4 220,461.6" fill="black" transform="rotate(90,224,456)"/>
              <polygon class="arrowhead" points="168,336 156,330.4 156,341.6" fill="black" transform="rotate(0,160,336)"/>
              <polygon class="arrowhead" points="144,728 132,722.4 132,733.6" fill="black" transform="rotate(90,136,728)"/>
              <polygon class="arrowhead" points="64,456 52,450.4 52,461.6" fill="black" transform="rotate(90,56,456)"/>
              <polygon class="arrowhead" points="64,312 52,306.4 52,317.6" fill="black" transform="rotate(90,56,312)"/>
              <circle cx="24" cy="480" r="6" class="closeddot" fill="black"/>
              <circle cx="24" cy="560" 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"/>
              <circle cx="208" cy="480" r="6" class="closeddot" fill="black"/>
              <circle cx="208" cy="560" r="6" class="closeddot" fill="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">Sender</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="124" y="340">-YES</text>
                <text x="188" y="340">Is</text>
                <text x="208" y="340">X</text>
                <text x="224" y="340">a</text>
                <text x="276" y="340">-YES</text>
                <text x="340" y="340">Is</text>
                <text x="360" y="340">X</text>
                <text x="384" y="340">the</text>
                <text x="448" y="340">immediately</text>
                <text x="528" y="340">-NO</text>
                <text x="32" y="356">OPT</text>
                <text x="60" y="356">to</text>
                <text x="84" y="356">M?</text>
                <text x="212" y="356">consumer</text>
                <text x="348" y="356">next</text>
                <text x="404" y="356">consumer</text>
                <text x="452" y="356">of</text>
                <text x="484" y="356">OPT?</text>
                <text x="188" y="372">of</text>
                <text x="220" y="372">OPT?</text>
                <text x="56" y="388">|</text>
                <text x="496" y="388">|</text>
                <text x="60" y="404">NO</text>
                <text x="224" y="404">|</text>
                <text x="496" y="404">YES</text>
                <text x="228" y="420">NO</text>
                <text x="40" y="484">X</text>
                <text x="60" y="484">is</text>
                <text x="84" y="484">my</text>
                <text x="224" y="484">X</text>
                <text x="244" y="484">is</text>
                <text x="268" y="484">my</text>
                <text x="388" y="484">Does</text>
                <text x="416" y="484">X</text>
                <text x="444" y="484">need</text>
                <text x="476" y="484">to</text>
                <text x="52" y="500">next</text>
                <text x="92" y="500">hop;</text>
                <text x="236" y="500">next</text>
                <text x="276" y="500">hop;</text>
                <text x="396" y="500">access</text>
                <text x="440" y="500">OPT</text>
                <text x="484" y="500">before</text>
                <text x="412" y="516">decrypting</text>
                <text x="464" y="516">M</text>
                <text x="484" y="516">or</text>
                <text x="508" y="516">in</text>
                <text x="28" y="532">OR</text>
                <text x="212" y="532">OR</text>
                <text x="392" y="532">order</text>
                <text x="428" y="532">to</text>
                <text x="472" y="532">decrypt</text>
                <text x="516" y="532">M?</text>
                <text x="44" y="564">My</text>
                <text x="76" y="564">next</text>
                <text x="112" y="564">hop</text>
                <text x="228" y="564">My</text>
                <text x="260" y="564">next</text>
                <text x="296" y="564">hop</text>
                <text x="416" y="564">|</text>
                <text x="496" y="564">|</text>
                <text x="44" y="580">is</text>
                <text x="72" y="580">not</text>
                <text x="124" y="580">supposed</text>
                <text x="228" y="580">is</text>
                <text x="256" y="580">not</text>
                <text x="288" y="580">the</text>
                <text x="420" y="580">NO</text>
                <text x="496" y="580">YES</text>
                <text x="44" y="596">to</text>
                <text x="68" y="596">be</text>
                <text x="96" y="596">the</text>
                <text x="264" y="596">immediately</text>
                <text x="80" y="612">immediately</text>
                <text x="236" y="612">next</text>
                <text x="292" y="612">consumer</text>
                <text x="52" y="628">next</text>
                <text x="108" y="628">consumer</text>
                <text x="228" y="628">of</text>
                <text x="256" y="628">OPT</text>
                <text x="44" y="644">of</text>
                <text x="72" y="644">OPT</text>
                <text x="56" y="676">|</text>
                <text x="136" y="676">|</text>
                <text x="224" y="676">|</text>
                <text x="320" y="676">|</text>
                <text x="56" y="692">YES</text>
                <text x="140" y="692">NO</text>
                <text x="228" y="692">NO</text>
                <text x="320" y="692">YES</text>
                <text x="128" y="756">Process</text>
                <text x="176" y="756">OPT</text>
                <text x="204" y="756">as</text>
                <text x="232" y="756">per</text>
                <text x="264" y="756">its</text>
                <text x="132" y="772">original</text>
                <text x="192" y="772">Class</text>
                <text x="224" y="772">U</text>
                <text x="244" y="772">or</text>
                <text x="264" y="772">I</text>
                <text x="296" y="852">Process</text>
                <text x="344" y="852">OPT</text>
                <text x="372" y="852">as</text>
                <text x="408" y="852">Class</text>
                <text x="440" y="852">E</text>
                <text x="408" y="916">Process</text>
                <text x="456" y="916">OPT</text>
                <text x="484" y="916">as</text>
                <text x="512" y="916">per</text>
                <text x="544" y="916">its</text>
                <text x="412" y="932">original</text>
                <text x="472" y="932">Class</text>
                <text x="504" y="932">U</text>
                <text x="524" y="932">or</text>
                <text x="544" y="932">I</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
..........................
:                        :
: Sender 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-->| Is X a   |-YES-->| Is X the immediately  |-NO--+
| OPT to M? |       | consumer |       | next consumer of OPT? |     |
+-----------+       | of OPT?  |       +-----------------------+     |
      |             +----------+                             |       |
      NO                   |                                YES      |
      |                    NO                                |       |
      |                    |                                 |       |
      v                    v                                 v       |
+-------------------+  +-----------------+  +---------------------+  |
| * X is my         |  | * X is my       |  | Does X need to      |  |
|   next hop;       |  |   next hop;     |  | access OPT before   |  |
|                   |  |                 |  | decrypting M or in  |  |
| OR                |  | OR              |  | order to decrypt M? |  |
|                   |  |                 |  +---------------------+  |
| * My next hop     |  | * My next hop   |         |         |       |
|   is not supposed |  |   is not the    |         NO       YES      |
|   to be the       |  |   immediately   |         |         |       |
|   immediately     |  |   next consumer |         |         |       |
|   next consumer   |  |   of OPT        |         |         |       |
|   of OPT          |  |                 |         |         |       |
+-------------------+  +-----------------+         |         |       |
      |         |          |           |           |         |       |
     YES        NO         NO         YES          |         |       |
      |         |          |           |           |         |       |
      |         v          v           |           |         |       |
      |   +------------------------+   |           |         |       |
      |   | Process OPT as per its |   |           |         |       |
      |   | original Class U or I  |   |           |         |       |
      |   +------------------------+   |           |         |       |
      |                                |           |         |       |
      |                                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="1696" width="576" viewBox="0 0 576 1696" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
              <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,1520 L 8,1600" 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,1512" fill="none" stroke="black"/>
              <path d="M 96,1360 L 96,1440" 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,1296 L 136,1312" fill="none" stroke="black"/>
              <path d="M 136,1448 L 136,1472" 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,1232 L 208,1296" 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 224,1360 L 224,1440" 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,1520 L 272,1600" 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,1224" fill="none" stroke="black"/>
              <path d="M 280,1304 L 280,1392" 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,1232 L 336,1296" 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,1552" fill="none" stroke="black"/>
              <path d="M 400,1312 L 400,1360" fill="none" stroke="black"/>
              <path d="M 408,320 L 408,1304" fill="none" stroke="black"/>
              <path d="M 424,704 L 424,784" fill="none" stroke="black"/>
              <path d="M 424,1104 L 424,1136" 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,1408 L 448,1512" 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 472,320 L 472,424" fill="none" stroke="black"/>
              <path d="M 488,1048 L 488,1096" fill="none" stroke="black"/>
              <path d="M 488,1184 L 488,1208" fill="none" stroke="black"/>
              <path d="M 496,32 L 496,64" fill="none" stroke="black"/>
              <path d="M 504,224 L 504,272" fill="none" stroke="black"/>
              <path d="M 512,1104 L 512,1136" fill="none" stroke="black"/>
              <path d="M 512,1408 L 512,1432" fill="none" stroke="black"/>
              <path d="M 520,1312 L 520,1360" 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 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,1120" 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 424,1104 L 512,1104" fill="none" stroke="black"/>
              <path d="M 8,1136 L 224,1136" fill="none" stroke="black"/>
              <path d="M 424,1136 L 512,1136" fill="none" stroke="black"/>
              <path d="M 208,1232 L 336,1232" fill="none" stroke="black"/>
              <path d="M 208,1296 L 336,1296" fill="none" stroke="black"/>
              <path d="M 400,1312 L 520,1312" fill="none" stroke="black"/>
              <path d="M 96,1360 L 224,1360" fill="none" stroke="black"/>
              <path d="M 400,1360 L 520,1360" fill="none" stroke="black"/>
              <path d="M 264,1392 L 280,1392" fill="none" stroke="black"/>
              <path d="M 96,1440 L 224,1440" fill="none" stroke="black"/>
              <path d="M 8,1520 L 272,1520" fill="none" stroke="black"/>
              <path d="M 304,1552 L 376,1552" fill="none" stroke="black"/>
              <path d="M 8,1600 L 272,1600" 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="520,1432 508,1426.4 508,1437.6" fill="black" transform="rotate(90,512,1432)"/>
              <polygon class="arrowhead" points="512,48 500,42.4 500,53.6" fill="black" transform="rotate(180,504,48)"/>
              <polygon class="arrowhead" points="496,1208 484,1202.4 484,1213.6" fill="black" transform="rotate(90,488,1208)"/>
              <polygon class="arrowhead" points="496,1096 484,1090.4 484,1101.6" fill="black" transform="rotate(90,488,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,568 452,562.4 452,573.6" fill="black" transform="rotate(90,456,568)"/>
              <polygon class="arrowhead" points="456,1512 444,1506.4 444,1517.6" fill="black" transform="rotate(90,448,1512)"/>
              <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="416,1304 404,1298.4 404,1309.6" fill="black" transform="rotate(90,408,1304)"/>
              <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,1304 276,1298.4 276,1309.6" fill="black" transform="rotate(270,280,1304)"/>
              <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,1448 132,1442.4 132,1453.6" fill="black" transform="rotate(270,136,1448)"/>
              <polygon class="arrowhead" points="144,1296 132,1290.4 132,1301.6" fill="black" transform="rotate(270,136,1296)"/>
              <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,1512 28,1506.4 28,1517.6" fill="black" transform="rotate(90,32,1512)"/>
              <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="468" y="1124">Success?</text>
                <text x="532" y="1124">-YES</text>
                <text x="560" y="1124">-</text>
                <text x="488" y="1156">|</text>
                <text x="492" y="1172">NO</text>
                <text x="508" y="1220">................</text>
                <text x="132" y="1236">..........</text>
                <text x="448" y="1236">:</text>
                <text x="484" y="1236">OSCORE</text>
                <text x="536" y="1236">error</text>
                <text x="568" y="1236">:</text>
                <text x="96" y="1252">:</text>
                <text x="132" y="1252">Return</text>
                <text x="168" y="1252">:</text>
                <text x="248" y="1252">Consume</text>
                <text x="296" y="1252">the</text>
                <text x="448" y="1252">:</text>
                <text x="492" y="1252">handling</text>
                <text x="568" y="1252">:</text>
                <text x="96" y="1268">:</text>
                <text x="124" y="1268">4.01</text>
                <text x="168" y="1268">:</text>
                <text x="272" y="1268">proxy-related</text>
                <text x="508" y="1268">:..............:</text>
                <text x="132" y="1284">:........:</text>
                <text x="248" y="1284">options</text>
                <text x="140" y="1332">NO</text>
                <text x="420" y="1332">Is</text>
                <text x="456" y="1332">there</text>
                <text x="492" y="1332">an</text>
                <text x="136" y="1348">|</text>
                <text x="460" y="1348">application?</text>
                <text x="116" y="1380">Is</text>
                <text x="140" y="1380">it</text>
                <text x="448" y="1380">|</text>
                <text x="512" y="1380">|</text>
                <text x="148" y="1396">acceptable</text>
                <text x="204" y="1396">to</text>
                <text x="244" y="1396">-YES</text>
                <text x="448" y="1396">YES</text>
                <text x="516" y="1396">NO</text>
                <text x="136" y="1412">forward</text>
                <text x="184" y="1412">the</text>
                <text x="140" y="1428">request?</text>
                <text x="192" y="1428">(#)</text>
                <text x="532" y="1444">..........</text>
                <text x="496" y="1460">:</text>
                <text x="532" y="1460">Return</text>
                <text x="568" y="1460">:</text>
                <text x="496" y="1476">:</text>
                <text x="524" y="1476">4.00</text>
                <text x="568" y="1476">:</text>
                <text x="136" y="1492">YES</text>
                <text x="532" y="1492">:........:</text>
                <text x="136" y="1508">|</text>
                <text x="500" y="1524">..................</text>
                <text x="28" y="1540">Am</text>
                <text x="48" y="1540">I</text>
                <text x="64" y="1540">a</text>
                <text x="128" y="1540">reverse-proxy</text>
                <text x="208" y="1540">using</text>
                <text x="248" y="1540">the</text>
                <text x="432" y="1540">:</text>
                <text x="472" y="1540">Deliver</text>
                <text x="520" y="1540">the</text>
                <text x="568" y="1540">:</text>
                <text x="40" y="1556">exact</text>
                <text x="88" y="1556">value</text>
                <text x="124" y="1556">of</text>
                <text x="160" y="1556">these</text>
                <text x="224" y="1556">Uri-Path,</text>
                <text x="288" y="1556">-NO</text>
                <text x="432" y="1556">:</text>
                <text x="472" y="1556">request</text>
                <text x="516" y="1556">to</text>
                <text x="544" y="1556">the</text>
                <text x="568" y="1556">:</text>
                <text x="56" y="1572">Uri-Host,</text>
                <text x="112" y="1572">and</text>
                <text x="164" y="1572">Uri-Port</text>
                <text x="232" y="1572">Options</text>
                <text x="432" y="1572">:</text>
                <text x="488" y="1572">application</text>
                <text x="568" y="1572">:</text>
                <text x="32" y="1588">for</text>
                <text x="88" y="1588">proxying?</text>
                <text x="500" y="1588">:................:</text>
                <text x="16" y="1652">(#)</text>
                <text x="52" y="1652">This</text>
                <text x="84" y="1652">is</text>
                <text x="140" y="1652">determined</text>
                <text x="224" y="1652">according</text>
                <text x="276" y="1652">to</text>
                <text x="304" y="1652">the</text>
                <text x="364" y="1652">endpoint's</text>
                <text x="464" y="1652">configuration</text>
                <text x="48" y="1668">and</text>
                <text x="72" y="1668">a</text>
                <text x="116" y="1668">possible</text>
                <text x="208" y="1668">authorization</text>
                <text x="316" y="1668">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? |-YES -+
+--------------------------+      |           |   | +----------+
   |                              |           |   |         |
   |                              |           |   |         NO
   |                              |           |   |         |
   |                              |           |   |         v
   |                              |           |   |    ................
   |       ..........    +---------------+    |   |    : OSCORE error :
   |       : Return :    | Consume the   |    |   |    : handling     :
   |       : 4.01   :    | proxy-related |    |   |    :..............:
   |       :........:    | 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">
      <name>Document Updates</name>
      <t>RFC EDITOR: PLEASE REMOVE THIS SECTION.</t>
      <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="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 VINNOVA and the Celtic-Next project CRITISEC; and by the H2020 project SIFIS-Home (Grant agreement 952652).</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
U2KrlG0k+lMa85w0V1RddC8WR80SO+vy6KzHNKc9UpRnBCouKylntvhK54MK
cfdsXdY78rxNOXVPq3vcjeFdWFWRSdeGZm3FLcpYsiFusjA/wGTyyEq31tMC
8HuUbd8oYBUfAldYqPKh1DeUXvKsyaoWuwjZAvPrFXXfYd4goFbK4YCvYbRA
Mvs9I8zmXTpp15L/E6kBbnZniZS4aiHbUleu7b7WstZOZx/w55ddmsqxRt3l
mvWWfdeQYYaNi2nLG4P6iyUdVlLJRpzXMxb1K8o4BZ2WzlIni1qzFwTDLfPj
hOmJugbFB+wFp3QvQirMIecVK0w60UZrnfQqKqJgc44zAyS1iQOSvpJry7Pb
8s7nM2JXsJoCCcXh0UcDtKiLoNnAlgi9702x/u91y1MbcsExEqLG9++5DFjq
scmAXg6Ko5tIUUtYLmPgqG0drPOrrVs1xmyDsl2HWupRt04bCDCdAge/HtPt
5SADvREGsxqBT6V6ETiLIHMrID3f8KQA07kUEdfsctOoOw7Xg6OGuK9q2/ah
uSMZHNZFTc0X6WfwTsmVK8RHi3xwJAVy00JadmDmsIjXZkm8Ed/dZA5wTCIU
QnYZvE9Gzmr9pkrGzDH/o6o9gHmRIsVSUrUpTRKIctLX2XQ+bWpoeuZk3DJ3
0QENwtQ2T3KHy0Oc6mIm1euCCph06e+Or9HRFtaqJGuK4kUlRRM0O2YXwOwm
YopZn6zYqexFEdw626fdLqsXM8nWIHuGF2gpEpo6Gbc50a1Z0H7Url6bAUMZ
J4tA8fW2UtidQBQr5HxU8QGcDKaToYcTfefAqnTiujVL0HWBto0Su/iE06R8
rDrk01gnb0m6Dkv2E2qwmFc7M9Fy8GvoG3XlMA+zymIKObX9LnFofVTo2rgf
2l8wUIvCpJTWPMWuh3wGOR2gf8N9dcX15i0gmQL1DwdSqXDTCDt83N/dS7Zf
5tzOD0t1dhJVllQjIkWitEPCGk7thTa3ea3VDM3Hd7AtgKKNxRzKqIbDouRB
2WIMEMLal3AsiQ5qn844FXmHNRJDGGckWRYmlRjmrajWj98pgTNNBz2TrM6x
Me4+pF6nmMiFGdkS4Kq80if9u2PTrbZRtYvdcfI0gtgc7jzz+oBwtYCU7b35
SgJoPWohAlr7T7hFK1flQHJTpV0/Nnv0DjSxXGczaDied20DIuTvPVtHS+vp
99/Y2DSVIpbGTv+zX8TtpbnoekXriMa0kgnYhsmxqRSVNjUkddlY9Top6qR0
ncvuo4d2yPJWhL6V48LlRNcUuQavmOYoUGxbtUSgf4ngnjixQClbcCtiZasT
Q32lzOBE0DGEsK8rX3hdWk7PLnlkXUsQTGeI247fOS4mouXu6YoPH1coJ2GZ
UGOCUWWdDPXwo/v8aMtS65LpNHGNNxiNH37UJ/gbxchClgcd3fabRzL2ProF
TBDZBxpbBNnHLt0nBBai9SmJRxL89HsUvGO98XWkOSxiPnDKbj0bQ7qM1Nr4
EbvJd37IJnNAgadusmJemdZgpn9IiFnrnyGm+OeubW8TrqKIQlb1nJJ+A/nx
02enRxpwryy7vWu29BRsfWNtxj3JgdzSuijdV54zr+89w873bW9e1vbavN+S
WGyOv4b9sT49PjL6ZstwXQLEukcnmGqTlMWErFxHlXiuvWqgB7LsZXkZlwPM
aekeLQCaN6UTXRZ+h81j6vm7Xr141ylRN4XpqG9pARlvItDsFIAdAXCA9mL0
ahnlNxsQ/IQlBnnvsuiZ8r2eX9u3xn5aVWTivtC+BpMOQJZ3YROxMtP70fjf
ndYuvePL9HqdycXaaH74fUNbdvXe+fjigUKWlWnA8xuUFq3c9INKDC2am1KD
tXRGZM+6FnuAh2tPZ88pHwCT2thHW9WYh4C3lekUBoINqnRYIKeaclww4/YR
/T5vdCnidiVhNPq2CFEkecDc7k+jBQzEG9sXbr3GeziK5nxxxmf6ktFEwoYr
3FXDrjqZXtQz7TZ1epP5CnW3xaTimcp7SRl1WxFKjzanIyEg2k2CI3Np0NqZ
uSac0/qj+6CSCmdK7/He3Oh8SCHXq3SIsqGOBcJIex4VMVFYqrqUhrvLzBnJ
cLuiHkl22Wzsy9isQfmpjf3rpkxokSBVzqt5OoH7r2qpHtN+ANOCw/VAn1xx
MMNx7cXoznBUU5FEshxtUOrvOaIu1MAsStsXUXY5rQeFwAbZhJoNV6B1uWmE
Ossy91VKN2qcN+iEc8S9RpW85ZAcG1gDfGYzqTnQXbXIFKqEEFLH4+5TLVIB
teVbAqlDEBTO5pURPGuW66+ovxf8XUJLZ4oISQkkd4eWYg4ejIVv/FYcutKm
uOjBYOg7LgruKS4lQsxMaAO/eeN7A96Je3SZV1RPx7jeTITXEadiiQOwlCTY
2sNenAUtjmvHW+B6PSLQdLXTixq2tRfHNSPdpPbGgHPIkCPpntQko3+gjJh0
fBlpHavJiy3aiXZU2UXTvit30V7OqN4ayclrH5ecH/9bN6B263RjpyfTYjrU
OpvTiNBfMmp92Zfu2S4UmwvFPXJUAnA2r2wWax0WeBrRXiCKp6J40NROcW1u
M13B2HLjIw5Xhh7HoVIjqtXRUpPaCXX97p2SjGPZYKv2KW7q3/nTWtb6bCds
mcWtpYxdIoL3987Vo+jVD9UNTCut4lQONSdAwFV2PS+N3ho0CKO4BG2DqgZd
1+EWrgzCbSkuZPLPaifyk/7uk2SbZoGPgB6VXHBmX9OdjO/fxkG1euo2n91p
hscoQMx1TLYYa2+3v+9VY5kk7YWjSgUaUwCH9NkNW8Vzp23zzphr2CC7jaYJ
R7Caw1fIfGn1nByoWmc4SsnctmeYxDBhA3DIe4fYQ5MiYDY1xWZ5B2qaC9c/
VYYOJJeM8wt03ouOAWjWCcMNSVsQ7PKMJOJEOSbcSdYGNyV7zRSItSpO4yBS
ZZzhInUloug36zUJZc4RG1wHAazD7gC3+wdBfJVmk5A/3ZnWVwdM/pEo3CpP
DaxSEAfYcoBYLyYclRSx6X7TmG0kO9m+AwGozN4iocjLATS2PdZWETKgHc0u
9bpiTWLQCMsySyqwpHc3Su5bBNbeSmYgO78iYbPJdm/sY2cKGKXHns/WiKOM
Fp3TCYOQOmFOYDHHdYgAwfCsH7nwsxQC8WB9hraLp+FgXs55fMWbHSHXdpC9
nx46beLxrosjdpK/G7clNrvj7ksceOONKNqi3YeHYg+mYUTXLAw1OXeD4qlT
icCajrlXpz7dQy2hIKyz7mSBlpwN2+wPKme0eH4LJ9vK/c1xY9xBqQkaGxYl
uzXQ+6drUSV94SadzJWrSyHEKx3KmUagbausaxj8+nG3u0LmlaQ39VpX+f2i
WHxRLH4LikUbhQfqA/u9192e3ilqd+Dpa8hUfeDGGjL1Ny914OO41MkN5XAr
4++wmhUl6eKwHG80YaRQoLjJFEIjTpqm2aSrjzZh/5+GPew18OjjOiIa4jnM
TG6lJ/OkqfByXGBU+JWPgA0Txte28w//EuFQu8n2D+lIu7juy6A+L9YzUpOM
2tjKriSzwknmjPmMli1RcOMiohfdQXL85pYlovM4wRYXP59MjRGHdU4NM/TG
345hG3/ZCfK/uXKJqG0C+HKCDBwG3URJ0ol/JglTWuuMRqUQlNsB0zeNndKw
tKqw/hjLlxwbu03psjJSdGs/ei06M1fduC1M5rjWppZGC/uMc+rxOO1Jxj0X
l6dAY/h1XulBtZ5nDVSTWNqC3i/63WfhODLxNuSbq1NJlxMdl850cazfJX/A
sbfh606/odKYze2e+xVydZNIqkOvbtDmdyY7oVTcb4XrhwmlVVbP05jsbqZv
O4fv6cfvQnomVMQAkOiXwh6fVL41dGITZs2vFf2M433Xj7QTap5XYBc6ftSO
PR9ADryhcve+t+nMRLmznEHi3fdHRF3+mHKMFAnqG4N0YuPZS3yJK8LBAqYX
D9YgvKeAsLxinYhw9TFCwgzP5x8TRuSHeUumWIJ36eaVEp+wOCJopG6gzyI7
M55Lb2af1b/G6pDVcX6zG50Qe7Abm7F8Hr1ahQVOfgzrNJoYaCZPvFcM0PYe
0Quq4p4iU9DlVIiP5VV4ooM7hiQzriFXjdMGUFYMYVNWkoATZC6nKAfyRYDs
VDLWGNkCcojRFfGgJVLZnLL3VXKU8lEWRpvtnZnMJ01I9oQm/SiltWdcjz8B
tRHbC0hjCzFJbJvxtSvqsRYeNDGd0GUhsrlY9tCOtA47i+mu9JGDIWJlT+vk
6rtF8SRmTdOMp4ob2eE5OENt37pNxGzDqjQjqUtnJOGkNjxwiR3FkQLqRicA
OXjab4uvW5NQ2z6DWO5ErbGCDaywKI8d0trfZo2YKr1SWKdK8zk/vrjENpWw
wyowGVk8UhoZvl/SFvkEMGoIxU2EqmiuY/OgIB8wU1w4KPyeIUsrxk1HITng
HfvcSI0AsaihkahyuNMlnX0K1iqblvasCOSCswkmBLqZql0nQ1X32BDkuOMS
6qz159AL+QdZBaqpqxof1cK6ckBCLrXovj4YAFC6/Y9tTdnSaSRCD7ZZjtvi
iXaf5hDSp6B1B4YnarhnOLTgjc8tEI2XDlPRaKMHolvK9jzgQw+4pwYxPAR2
nNVaFmglyKGfbqgeUmsMUf0yv5RPh+M8DtHShORdt6GqhpGbKnEOoGTRqVNc
q2Roea5haFS80JqDR8je1MQw68xZCZhmqlkvEiDeoAsXrPvDOVhBvQZlUvtj
OF1ON1wJ0wff6ZWpgqVJEpuRK6JK3kntI6gjRTqsBRyU/xwx9ah4/TAEzDEv
LACU5ErSF1Rv2ykiC8sVrIC3HTu89qQ0ctCEslinLzivAL54I0dnCzG4W2+T
2IyGg82JD67opcE2imih70ybktwFENQVZPcBnfIZeMKRQkMQX5HJpnLzv31q
24TS1l8kMq106JcN3HSAjeHkoDJnB+uTprjRgJlE40RZ6zD72vOWeX12vDu/
WeM0O5IPSw9PJ2XwuEL/dFaNuUllu4Oz06EjLzZU7xqV5qgqjNRNIZoH6sHO
iQJGDeDgue1CY+sHdJWD0oCL26D91JL4iSGNGq0gclZLwGymcIewqGnxJ62h
0a1ooEi735FpWvgTTw5XaJkrMmze57cCxG6e/nC6MZfUMjkzmaSvTDmUdE6p
qvnUuB0abZ65jVThHv889mpAWjrpRnpJtWp9zM2YcfidYrirh+11NPaVTxlH
uOE8r2TC1qPUOrKJRMS72CW615p5BNdIGyqUMsaSlUrurJIhFzSKdf9z9+wi
WkDbIFMaiYsEGhAD4Vk80KuhWc/ahW7U9tfsP+wBAzoqNpKG9+lGEeR3WXMi
PYQMlQSYEaPOach5y2deBf2KGkgz7RVlwqHv1m1oBXSn7ZgI9biHL7qlb/5h
THFyM37CxmmzTt9WtDMaQlVMAezNSyfdRQSoN6VwE+PCYyWR3SPmOPOlhq3p
fwzb3JEHxrKlBjypo8ccHh2DYgGQU6dSKsj0W4GSeelFGrPc63Kq8pusLHLW
cYnxf7e/uysM40fddnVeYplqZaxQLQ/8krpc6apQp0m+tM5adlIvkBViaylK
jQYnAZqlHCloEd/e6pacKWjtPAOjU2HH9umMYpu6R/bF0bMjVhmka3VrDxZz
jBz1yTLRl8DH5XZfMVTnddOj12rS7Ua7iPVB5vtbkkAZAzJUXkW79Q5lYvTS
MU+W96uYiF7v4uAYiSkW+Jh8Nupxzt3T7XHH9vAdeqM+DuOn4rZ3VtzCOH/K
Rqp3CLZ98kK6HifbP5396fAFZTZ5zp/g4Capi0TAL/BA16EhiciiUcpWmdIB
MUwV27iEO84uYe3mm/3HkcRwZxtWw/Gw9+23+497XNboHTKH7TQFLhyeCE6j
GCmOMVyZOh+LWMIMrZk1OstGZzl7FLy8wJnjw6dq6Mw4Mz32XMSLSmw8qvpc
p9eZqhpc3SkldJKLUm3gnvixOFEB+WAfqs5nOUdwul2z2IFq28R3uaW9ER70
wDkp4MZrRSkHmMxNLcI4+uIWQZtGftgptgU6MfTo9M5oB8Mo05AADvnksTfi
CrSL3+6Umheuutcmg6rGOa4SOV1CdzvR+gW7Uk7u12X7OrgHRJjq0XWmarqo
65MxnIeC1QsXbLzkAAbtF5Mm2Q0rARHM/aXrsaim7QbC8qk7JxXYqa+zco2p
Ow+tmHqEVj2P10qB4nQONSfoRtvEGlE7cJP8vLhkAzHcJwDeJjFdTCBB3NjO
T5SKqIFuCe8GffZiITuT4sjkajXDxr060wCN/DhZstGIipPfC8Zvsx12HgNh
iY+0DCkUojO2491HbYto98VdEfXugTFLKCOIIQfLtBov2hGC+InTrlBrLHBl
uY/OgjVFB5EWvaKbhJi864S3Y6mzO040M8YfyFEjXiEaSTI99DKvYLmWYtu4
JXadaaOKzOlbwfqsBbaxv5iNoaf7gG3Qrk0byxs+ZouWzXIOgtf+3hi1XdPE
smmkONPz0BNK4mAl16fYwzYJ2EDhnQkhimDTtzOYsAOMTw9FHluMDfGwJAlz
+Rx+H6xUCmr9bRvmCh1tRxtiUwjvgmGipS433caTSOnQUcfXLjuOxu5tvo1N
1j6NYgSO2KckiEzKeTrRnUrQ4nViQmjMXIOmNy7k2FXU81WKJ9MafrVKC7Ny
ggSX6OhkA7qbkFJe2VQUZzHaaKZL79C7g9360pHf+H0lNaoufJEuDapWDuc2
nsSJruGdjL9QQl5LXZ+OX9Oe3KRtE3sWdyvE+E6s24DFLigPZJ6zGMhyeIz8
Ojbq6IYISKVzS1y6fARxZYtvWEUC2TeVfkih/yk+J5Id0TM8eH4MizmgkDrS
1BkTknO4tjekjVFcZzdkJyyi3u3uOrqd7ZhRY6ces3190riep2UKPFTL1hbQ
9GDG6YnWEHeXonCKo1KXwRJEFXOdqaR0POSnQm45zIscXXWLTucHVpjcRkWR
dsNk6nA1YmsQcqe1T0lQmO1E+fiBzyVPH0ebULWRbtodTQ03LvDlDaA08YZu
XaB6dZPK+WZhxggTCLtVK84HoRZD1slgHQyuUbzw3aYV53uR7YyRZyooWISV
sBTMQnJy7BvvaPlK1XM6myWVRaToHB+jlUxT7ACOQjRUdY+YUZgziXQdw9Jy
Ax8NF2YvZaUWjm3oPrr8cz95ntLZ2bqVk3dGHh0nQxIEaFY8UJPCOFZlL0QB
ocAfqU2URZReXRWl05c9rA1z+18dJZhkUSWv8uJ2okbXfPRoMW1FxOHTp+fi
vDiSqrfg2PBRhvkzuN95BBaC+Bwnefu+J8LLoY12Nn8W1LBXkFaZxiKVj5qk
rVi3C7drG9spTq0sifY0m5jANVGQ2fVhM7SLBFuQZ/rAtfVKIyRvRA5WDqbX
BdUA3WYzywI3WHrSJ04OXxxGdAlXBHAXNdN/iU4thKfg8V6vlwzS4SsK7jp9
HvWhO8fmXGqd4WeaistLKvEtzT52h/FL43YkTqPfNMCTkvQS6vBTNcZjzb2o
+GF/z6siEBY7mcwxXlGrZvqckIGteUpBvcauU3PRpUJO2U3sIbteVwqBPh0M
SnvC0Nb58b9tERDw7eJsS8qDdBF4XtTK2WcmMUd2X5j87hUrkJSV5U32iH22
YAdkkwnR8bR1hkDsrPJWb7IuR3CNYZBTbAsfG6HgR9WC6K2pbV5ZUQP76Jej
Xy5Y5ZVR5pUksJiHSACcPE12Xz+5iuiqVjGy5+390A6dZP2sC9zZ2sDt7y4D
TpPP/7afJE2rm+vOEQ/NvS8SOQe9kyRvubjD/ts5libx7jUs+KCXONcErd59
9x/vbOV4SfKgR59/8X87KkbqINnt7+4n22enF5c79DR+C0a5LF6pHO58/e0w
9gIsdSG0HiT//iobHSDOu8kZKkDpJDn5+eDR3n+0PJfAoFdX8R/P+GDXg+RN
A9Bu63DyCeB5cuXB83j/P1aOoPsLHCRbsn/7oE5srXzObZUCz+KBbqsfQiSs
vMmiAUTkH4/XwIKpMwZAiLv+wtx1a9WD75KHDxMhQ0e4IvWueLT9ybMW2uTv
T5WheXPNoXlzzaH5peOFNB+ndf20Q/OG1r8ZRKfaQhfr7YsmHd5rX6xaxo0J
5o70siG5NK7J4jeuawJo/LDJ4AJXZPCLs3uN/s9MYA8cVO/3dx8n20fsiPFJ
jH9bi8Qs2fTeA9vcp5aMJD3zejUJrMWKtnY/FEk4ss/hA7JSm/EBb33Mc63r
ZNdH37y+2HtP6+TAtLaE671X4bIhsaw39hrk8hEljiNpzDWHwsy1dbWrzcZb
rf11Lv42RztgUIIZqeoq+fek3+8n/2Hq3NHlVUsyqvaRozf29ALMhMFfwXbo
d47mlE2oh3hDQ7yzQyiDr1Fap31X/e28OUi+ajNbkjqrJ+oPWy85N1C0aW10
sMrcu7BnlsoVUoq23nlm0/66ZhM3EmQr4sOYTb8iq8mWN2wO3JkGjgdZBtvo
8VqwfU5WU5uVg5+1LR38rGb7rdZB9P6YRbCEp91dZcRPu7zBT8SkWtuWSO5u
TiTvWx+I2wVnTCUb2QX07Lq2AX5WK2/4CRZx9Hhtexg/Gy/i2nYxfu5q2Ubm
dQe7Ws9vrRvvRqb3odN7KCLLnj77kJbQBx38k5tZ9xh9DcQERsJmhhx+NuMH
7YYCfjbb9xsaDB4YH2Sbbmo8bPSOdYwI/Hya/Rt3X8XN1hViKmq20rMbmK74
WUeP+WCUuSkhrE0H65HBpurGP7wR5xpRmxpxosDShcCIe3SX2NcXW+5zjIB9
sTM/q+jcuibrSi5/59BcK8+/hwFyb/vhjsbLXaJy64ikzQ2UjxNiWefBjxuQ
+8CG/Lo2/Ep1/c6W+4fYLnek9nvvsn9s0v9ijP8KjPEN7PC193SrjbP23t3M
5l7b3N5gv/0qwrmrH/yIBjV9i4mf4/P3FlfewDZfW2H7Qq2fDbV+iSV/gFjy
5t6IrhdPXuWbeBymWEvXnXVdFuYw+lVOii+5uR/WM3HprBVV0eOCSR8P+x7T
WWt5V3C9Ff23cLKC7KoAO12347e6Txev+7gx3l8S79WjKBN0tPM+tgTrYRFL
Hme1zr00u3aGvEb+03ZdzlVXkCd77Ze9nU3E793SuloQsSbYPrz7cV+RppM7
yIL3mLUdBe4TLvjRL+fhej9qXW/65iDyPqoa33d49K+rkP/5puAPVAvql/v5
dj92Bv5dswxaqHKT55hCP2Gm/gYczXnqc/HU3T91Pn3SykTWJolfizjS3++f
Dd6CtTXBXkccGW76OSZZr2RsnyDJeq3dvgbmnbs33eXtKsRnE6q6ixT77k5S
7KPXkf2mpdjaaprz0D+OEBuNfs1CbHMV2wgHzXAav2xYF+Xfx0r3J1bUf80s
8461t/csMXzfpbe7Xypvlz74pfJ208rbtrVYRYfvZ1t8XrHvxrVfZ5T5S2Xt
klu+VNbeYZ2+VNZ+qaz9NNHQzvZhN/lhx9yA/ZyOfjg9t+fd/ju1tOfCPvpg
Z6rbgu/CQZKsVtMqOaQg1Q/LA6xkOtwnwbvr5Vw3D1q3YbaR6cZEdkYQfX0S
j77aE0o2CsM6B5t8xHjsxw+yfomcxiOnkR76pomY29L63gfy0JGa1BuMeqof
nT7/4X/9AtqSf6pGXaZ5NStKbpY3SeEVga0dnJnUONXR7d7pHdlozhaqi2vq
nfklbuz/+D7jxndJ22qPGq/Oy/rQMeP37b04K9UMeav3LGwJ3BHuNWyAeBY8
Sx38gvs+LIG2xLnvHhql5bqnDhrwhS7qVCduc/WoLpXYzxevtf58hrHXO+Yl
0Ldzxa01vWuwX2jjuOPZDfcrc+T81uPAd8lhb48Cvx/xYij3s3QHrOLgv80Y
8Ps2rD9eTHn1eJuoGBfBs+uqGJ9xUKdNmfwHiYPfOxikVbBPqFGs1OBWNpZY
2ahz806dVtZ9iS9trJZ8fX+15O7xpY9iVKxazH+Y1rH3zlag/4oq3rwu6nhz
cJFQa43+Ww3CteyzL0G4z03rXqWEfAnCLb3rSxDuSxCuGYQzIatPEo1zwi7x
mAiF6+hQbpU8zdLrMp0e4KudM84pLnHK57uZaB6f96YjGfh1BE/DYBy1i/8M
g797R3G5m0zdclCrpEMQvciMnC/Yo58w0kcHteBxuXCPOUssdQ+eM8cB8UEx
dDKaPQgXIziTtKqSl3jM3AmpRoKGMZ8mPFD6uFG4fZLhWXhXeIj5rXegrhnn
WE7lcw6bdQ/V1cfWxkI2/dZP5yBp+RzATxL1C86qo5/an7KDF96rDjrOfcWS
P0THxk/Ru/PnQcfnlHf9vIVxTpLpvDJHPsXQnjyX89WiZ54mf+7TOO8Lnud4
ZN5kzic0uRR5enZJuydOeP1wnPcDz4PVi7HWeunx/H9vvPG1yvFg6aUGITzN
RoCJdDRK3vb+cnxBBtxJlfwZ0JeEl5BBZFM6JbtWsKXh9xenPAyiFzbu8+8d
4YLHWs6nsOb2Eh2maq4j3z271I+8jU7nrbnLDNM6HR9L3lpEsNKyaGbx+N8X
p0tuav0A2vxhok9Ex14KTXSY1dQaDnMTuyl6MXpHnLAfxFYmelF+wH32OyAr
kBPThQtr8zJdfIpnjv4ZaIgPCzM/0HbVx/T+3n0ivEwX8WBL4AFIsXJIuTNM
BHPNy3TROajzObITkJV6GFBOYk+El+miyV7QJ1zzFtoMmhUofr4weHBR7F9+
6w4YfGNo5Hi/aj6bFSiYBRq5jMzBe9hQt7MZ8FeW73K7nZTHWNaBxrvfX/AG
52kfxr/fDMNMp/3hcBj//vaVWjLMJntqyTDtr/Igin8PhjEr5/Eq56tzw4eH
xvnF4VUu21p/mFbJ/GCjYegcAcNOQCGdARHhSa5vNxxGK8q+grLhMO9pUks/
72mYm+j3tYdZOtPGMG13/0tj+cSe4BHCYVo/m0Fzx4/G0s1mw7TDttk47ZS+
6ThtpP7e5hVzArRawNoPsMTIDs0GkPSn2sh5ro91x4NM69uifNVLJ9l1/oct
PMdZuh9FDPqhnOMLY5/oM77P5QRvY9W7Z3v7Bn146nerPT/zXhU5UZzOVbY2
dduZ4pwCOypqdN8Miteqcv06dAo4hha8M3Cdd7O3AH+PWuHrrWzrghsM9twT
RA4ZjFJSYmEyk5QSkXlZv9cE+c9mHJ3teTcwDIUHhLyMF/7nktuCcRxRaz0H
kYcbRkU7PAdAcvW8zJOD5m8r4fHGeYIu3OTe4xiHyP3Gwc9/tv224Titf204
jr8sm4zj22Wt8DTMt4ZG+UDT0IMG0cZsCFv2S+Z/bfb1W7kBttrhFJ0HjozD
/5mbgd04MOI47EV9WWbISQ3wb/W50f444ipiNvx9ZJwjGMcBHuChnf69B8/S
eemx7Utb8UMU5Yy7DM/R+/Tf+H+hBl997jQfkD+9+9xx4vAkDS6wCp7WceLw
fI7jeEzxHuN4TPFe4zzGOH0SHcczWlaM4zJFb5zAXbYGnv/TvW7GeeuIyrdr
jfO2ZRydbpC0jGM9AfyPodJgnFMjovU4AXcL8BiHp4GfNjdJeP1BsF5vvfc2
+KH5ja5ndeJeccYJrGnLxzg/Clmifgp9VDMMIil0l7xdCY87Tu/FfDog34fl
qwxmOM5NYxxGfNeUuWh4RDP6Ptn+aiccx914ehxTcqTTd+je5Xh2N54eB1BC
NIVFPaEccDHhjwMbb5e+yDit7jH98eiyfV4e6qOfGDzh7zH+fOdx3hc8K8Yx
nt+WcW6WjNNcdXecCE20jPMWA6zopjPU7P4/svdax/HtgXCcxt5rHUcsiQhu
cBzt0DV77074iey9O637+nhePo73DP9513ECB/EngIdefJ9xovti5ThLTMsH
m4wjIREksHRejwvKQjBPmHFuVo+zPUYejXkOWD+5Q3kWepPJOCE7jI6jLeiX
5ydJNlJ5nV0tkqn63hknZPN3xY+rX21Mh/r7W1+/Wnscl31H+OF94HE/N/cb
x7djYnpU+Amd6W/lm843WiZPzYv6Lqksg+ctOpVAiaIIkq8LsSD/UdSXgyZ+
nG+sJ8RUoETG0VraynG0/jOY19qGLU1Y68CQd2ScG28cowjDlnooSgypQTRO
3yG5CH9+YMdxHnd0oMq82PVyaHlxMacA5/ccvU96D1atVxKjHxeeexHy/bbB
i9NP+PKbuz7dyCVybvQ3R0z423EOTLpMWQIZHLjj+M67mHLkjjMGSpqgi5T+
9Mdx7NQkphw54/jT8scJiLqpHAn3CHFqaLgVF811aC5KsBNCl0xjhKYCHqxk
4MeKSbuVIzj9BL73R4jOtTHCslk0Fd7YCP6Xt/4AgabLyT4PIgMY+8jfjk37
sh0lLSCEyu3qAW7WQOOSAeKbkj6+y3jFOHb7rUEYS8fR1mo4TsPpt3wcb1Pe
RO9cPs7N6nS1B5EHQ14HiDV+4VLdqLKSc06d5NcYug5AyZhkukkMIeQttkkZ
1slNOpkr0UkrZYRrV/LPfOCslMaWIDDUQcdWEXVJx22I0xiGDrxuIAIPZgzS
ZGAm3zefiY4ToudgDTx3Oh3cEJdjUI2yyqbbjnDPFiXF22R6OpPynypMY7nK
ruclgUxRBJxtCjp9VWW4y8VK+DvPSeUwnaHCni9+VM5ETdvCjE7Q1I8uhrHM
5WHRp8VwTh1nXs5GFDvUgc+R/NCb8w9w9/mPR8nx05PL0/OD5Oyn48OL4+T8
+Pnpz8fJ5bOTi+Ti+Ojy5PRFn7od/QxEhxPswcYCLPVAvH2lh97dhT/fUdOh
aphOUh3xlTRRGyDGuKh6jRQATJbhSDhlFYZEaL79eu8RtQ86mqQlR08l1dwN
GT88cdNQK86MHihAk5MQz8PAz2AzlbjI2BUIF9eLQ9ugh5OQ7uq7NMzhCMvN
SnUFI2EOPUB7mpuGNjCpOWyhYVopuhvXKSs5oa5SYAImk2wKEy5Mx6FJugB0
MtxDWOKBwmxRNXpYqmlxI7Cfq5sMU8IkV1zSyAsvJdtFA0OqxYfwB8nCqohx
8BamtG7KS28alpkyIW54OKsrNbmyiKxqmP0iucpeHzQYEU5DS65BinADpJZF
GPagNW/gNTTwH3l22d9xibytBKswfFUhdrVMzSZojPN1Z10iP+ssRCeh0CCA
nvwx43C725eLSCxsuUV3814acTg+0RtWDPow+u/E6B0gg0fN2cNhgkTRSJB4
eOLBYKhQ2nyNshpwBvRxRVNCMs6mMPANMSG86avkcIi9JCZqdE3XiCek/rV3
yKByInk1+sNWXiA7uTRekCqB+Qzht8kCyTZ/lbx58+ZoXAJNZLDyh9Pqv/9v
Vb3DUgb44Qx5a/LDpJj+DWi41pefpjfZKHmR3qSgetNFhBZ++ON//1cJo1yA
gowlAPATSQVAUVZiaQxDjTdfKTUaAOjS8gu5ICMTObpmfVjxMMCSE+ykhWUS
mF1ZUpbFIvn55MWL058PTduqIzWps2HvBeYsAtqw7CY5Oj+5PAH293u6a7Cg
G5/t7+7vmlsuTn48uQDiBpaz/UcAHrb5dakI58l3T/a/frK/0+/8f1plyYsG
UAEA

-->

</rfc>
