<?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-rfc2629 version 1.6.6 (Ruby 2.7.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-ace-revoked-token-notification-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.4 -->
  <front>
    <title abbrev="Notification of Revoked Tokens in ACE">Notification of Revoked Access Tokens in the Authentication and Authorization for Constrained Environments (ACE) Framework</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-ace-revoked-token-notification-02"/>
    <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="L." surname="Seitz" fullname="Ludwig Seitz">
      <organization>Combitech</organization>
      <address>
        <postal>
          <street>Djaeknegatan 31</street>
          <city>Malmoe</city>
          <code>21135</code>
          <country>Sweden</country>
        </postal>
        <email>ludwig.seitz@combitech.com</email>
      </address>
    </author>
    <author initials="F." surname="Palombini" fullname="Francesca Palombini">
      <organization>Ericsson AB</organization>
      <address>
        <postal>
          <street>Torshamnsgatan 23</street>
          <city>Kista</city>
          <code>16440</code>
          <country>Sweden</country>
        </postal>
        <email>francesca.palombini@ericsson.com</email>
      </address>
    </author>
    <author initials="S." surname="Echeverria" fullname="Sebastian Echeverria">
      <organization>CMU SEI</organization>
      <address>
        <postal>
          <street>4500 Fifth Avenue</street>
          <city>Pittsburgh, PA</city>
          <code>15213-2612</code>
          <country>United States of America</country>
        </postal>
        <email>secheverria@sei.cmu.edu</email>
      </address>
    </author>
    <author initials="G." surname="Lewis" fullname="Grace Lewis">
      <organization>CMU SEI</organization>
      <address>
        <postal>
          <street>4500 Fifth Avenue</street>
          <city>Pittsburgh, PA</city>
          <code>15213-2612</code>
          <country>United States of America</country>
        </postal>
        <email>glewis@sei.cmu.edu</email>
      </address>
    </author>
    <date year="2022" month="July" day="11"/>
    <area>Internet</area>
    <workgroup>ACE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document specifies a method of the Authentication and Authorization for Constrained  Environments (ACE) framework, which allows an Authorization Server to notify Clients and Resource Servers (i.e., registered devices) about revoked Access Tokens. The method allows Clients and Resource Servers to access a Token Revocation List on the Authorization Server, with the possible additional use of resource observation for the Constrained Application Protocol (CoAP). Resulting (unsolicited) notifications of revoked Access Tokens complement alternative approaches such as token introspection, while not requiring additional endpoints on Clients and Resource Servers.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Authentication and Authorization for Constrained Environments Working Group mailing list (ace@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/ace/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/ace-wg/ace-revoked-token-notification"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>Authentication and Authorization for Constrained Environments (ACE) <xref target="I-D.ietf-ace-oauth-authz"/> is a framework that enforces access control on IoT devices acting as Resource Servers. In order to use ACE, both Clients and Resource Servers have to register with an Authorization Server and become a registered device. Once registered, a Client can send a request to the Authorization Server, to obtain an Access Token for a Resource Server. For a Client to access the Resource Server, the Client must present the issued Access Token at the Resource Server, which then validates it before storing it (see <xref section="5.10.1.1" sectionFormat="of" target="I-D.ietf-ace-oauth-authz"/>).</t>
      <t>Even though Access Tokens have expiration times, there are circumstances by which an Access Token may need to be revoked before its expiration time, such as: (1) a registered device has been compromised, or is suspected of being compromised; (2) a registered device is decommissioned; (3) there has been a change in the ACE profile for a registered device; (4) there has been a change in access policies for a registered device; and (5) there has been a change in the outcome of policy evaluation for a registered device (e.g., if policy assessment depends on dynamic conditions in the execution environment, the user context, or the resource utilization).</t>
      <t>As discussed in <xref section="6.1" sectionFormat="of" target="I-D.ietf-ace-oauth-authz"/>, only client-initiated revocation is currently specified <xref target="RFC7009"/> for OAuth 2.0 <xref target="RFC6749"/>, based on the assumption that Access Tokens in OAuth are issued with a relatively short lifetime. However, this is not expected to be the case for constrained, intermittently connected devices, that need Access Tokens with relatively long lifetimes.</t>
      <t>This document specifies a method for allowing registered devices to access and possibly subscribe to a Token Revocation List (TRL) resource on the Authorization Server, in order to obtain an updated list of revoked, but yet not expired, pertaining Access Tokens. In particular, registered devices can subscribe to the TRL at the Authorization Server by using resource observation <xref target="RFC7641"/> for the Constrained Application Protocol (CoAP) <xref target="RFC7252"/>.</t>
      <t>Unlike in the case of token introspection (see <xref section="5.9" sectionFormat="of" target="I-D.ietf-ace-oauth-authz"/>), a registered device does not provide an owned Access Token to the Authorization Server for inquiring about its current state. Instead, registered devices simply obtain an updated list of revoked, but yet not expired, pertaining Access Tokens, as efficiently identified by corresponding hash values.</t>
      <t>The benefits of this method are that it complements token introspection, and it does not require any additional endpoints on the registered devices. The only additional requirements for registered devices are a request/response interaction with the Authorization Server to access and possibly subscribe to the TRL (see <xref target="sec-overview"/>), and the lightweight computation of hash values to use as Token identifiers (see <xref target="sec-token-name"/>).</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 described in the ACE framework for Authentication and Authorization <xref target="I-D.ietf-ace-oauth-authz"/>, as well as with terms and concepts related to CBOR Web Tokens (CWTs) <xref target="RFC8392"/>, and JSON Web Tokens (JWTs) <xref target="RFC7519"/>. The terminology for entities in the considered architecture is defined in OAuth 2.0 <xref target="RFC6749"/>. In particular, this includes Client, Resource Server, and Authorization Server.</t>
        <t>Readers are also expected to be familiar with the terms and concepts related to CBOR <xref target="RFC8949"/>, JSON <xref target="RFC8259"/>, the CoAP protocol <xref target="RFC7252"/>, CoAP Observe <xref target="RFC7641"/>, and the use of hash functions to name objects as defined in <xref target="RFC6920"/>.</t>
        <t>Note that, unless otherwise indicated, the term "endpoint" is used here following its OAuth definition, aimed at denoting resources such as /token and /introspect at the Authorization Server, and /authz-info at the Resource Server. This document does not use the CoAP definition of "endpoint", which is "An entity participating in the CoAP protocol."</t>
        <t>This specification also refers to the following terminology.</t>
        <ul spacing="normal">
          <li>Token hash: identifier of an Access Token, in binary format encoding. The token hash has no relation to other possibly used token identifiers, such as the "cti" (CWT ID) claim of CBOR Web Tokens (CWTs) <xref target="RFC8392"/>.</li>
          <li>Token Revocation List (TRL): a collection of token hashes such that the corresponding Access Tokens have been revoked but are not expired yet.</li>
          <li>TRL resource: a resource on the Authorization Server, with a TRL as its representation.</li>
          <li>TRL endpoint: an endpoint at the Authorization Server associated with the TRL resource. The default name of the TRL endpoint in a url-path is '/revoke/trl'. Implementations are not required to use this name, and can define their own instead.</li>
          <li>Registered device: a device registered at the Authorization Server, i.e., as a Client, or a Resource Server, or both. A registered device acts as a caller of the TRL endpoint.</li>
          <li>Administrator: entity authorized to get full access to the TRL at the Authorization Server, and acting as a caller of the TRL endpoint. An administrator is not necessarily a registered device as defined above, i.e., a Client requesting Access Tokens or a Resource Server consuming Access Tokens. How the administrator authorization is established and verified is out of the scope of this specification.</li>
          <li>
            <t>Pertaining Access Token:  </t>
            <ul spacing="normal">
              <li>With reference to an administrator, an Access Token issued by the Authorization Server.</li>
              <li>With reference to a registered device, an Access Token intended to be owned by that device. An Access Token pertains to a Client if the Authorization Server has issued the Access Token and provided it to that Client. An Access Token pertains to a Resource Server if the Authorization Server has issued the Access Token to be consumed by that Resource Server.</li>
            </ul>
          </li>
        </ul>
        <t>Examples throughout this document are expressed in CBOR diagnostic notation without the tag and value abbreviations.</t>
      </section>
    </section>
    <section anchor="sec-overview">
      <name>Protocol Overview</name>
      <t>This protocol defines how a CoAP-based Authorization Server informs Clients and Resource Servers, i.e., registered devices, about pertaining revoked Access Tokens. How the relationship between a registered device and the Authorization Server is established is out of the scope of this specification.</t>
      <t>At a high level, the steps of this protocol are as follows.</t>
      <ul spacing="normal">
        <li>Upon startup, the Authorization Server creates a single TRL resource. At any point in time, the TRL resource represents the list of all revoked Access Tokens issued by the Authorization Server that are not expired yet.</li>
        <li>
          <t>When a device registers at the Authorization Server, it also receives the url-path to the TRL resource.  </t>
          <t>
After the registration procedure is finished, the registered device can send an Observation Request to the TRL resource as described in <xref target="RFC7641"/>, i.e., a GET request including the CoAP Observe Option set to 0 (register). By doing so, the registered device effectively subscribes to the TRL resource, as interested to receive notifications about its update. Upon receiving the request, the Authorization Server adds the registered device to the list of observers of the TRL resource.  </t>
          <t>
At any time, the registered device can send a GET request to the TRL endpoint. When doing so, it can request for: the current list of pertaining revoked Access Tokens (see <xref target="ssec-trl-full-query"/>); or the most recent TRL updates occurred over the list of pertaining revoked Access Tokens (see <xref target="ssec-trl-diff-query"/>). In either case, the registered device may also rely on an Observation Request for subscribing to the TRL resource as discussed above.</t>
        </li>
        <li>
          <t>When an Access Token is revoked, the Authorization Server adds the corresponding token hash to the TRL. Also, when a revoked Access Token eventually expires, the Authorization Server removes the corresponding token hash from the TRL.  </t>
          <t>
In either case, after updating the TRL, the Authorization Server sends Observe Notifications as per <xref target="RFC7641"/>. That is, an Observe Notification is sent to each registered device subscribed to the TRL resource and to which the Access Token pertains.  </t>
          <t>
Depending on the specific subscription established through the observation request, the notification provides the current updated list of revoked Access Tokens in the portion of the TRL pertaining to that device (see <xref target="ssec-trl-full-query"/>), or rather the most recent TRL updates occurred over that list of pertaining revoked Access Tokens (see <xref target="ssec-trl-diff-query"/>).  </t>
          <t>
Further Observe Notifications may be sent, consistently with ongoing additional observations of the TRL resource.</t>
        </li>
        <li>An administrator can access and subscribe to the TRL like a registered device, while getting the full updated representation of the TRL.</li>
      </ul>
      <t><xref target="fig-protocol-overview"/> shows a high-level overview of the service provided by this protocol. In particular, it shows the Observe Notifications sent by the Authorization Server to one administrator and four registered devices, upon revocation of the issued Access Tokens t1, t2 and t3, with token hash th1, th2 and th3, respectively. Each dotted line associated with a pair of registered devices indicates the Access Token that they both own.</t>
      <figure anchor="fig-protocol-overview">
        <name>Protocol Overview</name>
        <artwork align="center"><![CDATA[
                    +----------------------+
                    | Authorization Server |
                    +-----------o----------+
                    revoke/trl  |  TRL: {th1,th2,th3}
                                |
 +-----------------+------------+------------+------------+
 |                 |            |            |            |
 | th1,th2,th3     | th1,th2    | th1        | th3        | th2,th3
 v                 v            v            v            v
+---------------+ +----------+ +----------+ +----------+ +----------+
| Administrator | | Client 1 | | Resource | | Client 2 | | Resource |
|               | |          | | Server 1 | |          | | Server 2 |
+---------------+ +----------+ +----------+ +----------+ +----------+
                     :    :        :           :            :    :
                     :    :   t1   :           :     t3     :    :
                     :    :........:           :............:    :
                     :                   t2                      :
                     :...........................................:

]]></artwork>
      </figure>
      <t><xref target="sec-RS-examples"/> provides examples of the protocol flow and message exchange between the Authorization Server and a registered device.</t>
    </section>
    <section anchor="sec-token-name">
      <name>Token Hash</name>
      <t>The token hash of an Access Token is computed as follows.</t>
      <ol spacing="normal" type="1"><li>
          <t>The Authorization Server defines ENCODED_TOKEN, as the content of the 'access_token' parameter in the Authorization Server response (see <xref section="5.8.2" sectionFormat="of" target="I-D.ietf-ace-oauth-authz"/>), where the Access Token was included and provided to the requesting Client.  </t>
          <t>
Note that the content of the 'access_token' parameter is either:  </t>
          <ul spacing="normal">
            <li>A CBOR byte string, if the Access Token was transported using CBOR. With reference to the example in <xref target="fig-as-response-cbor"/>, and assuming the string's length in bytes to be 119 (i.e., 0x77 in hexadecimal), then ENCODED_TOKEN takes the bytes {0x58 0x77 0xd0 0x83 0x44 0xa1 ...}, i.e., the raw content of the parameter 'access_token'.</li>
            <li>A text string, if the Access Token was transported using JSON. With reference to the example in <xref target="fig-as-response-json"/>, ENCODED_TOKEN takes "2YotnFZFEjr1zCsicMWpAA", i.e., the raw content of the parameter 'access_token'.</li>
          </ul>
        </li>
        <li>
          <t>The Authorization Server defines HASH_INPUT as follows.  </t>
          <ul spacing="normal">
            <li>If CBOR was used to transport the Access Token (as a CWT or JWT), HASH_INPUT takes the same value of ENCODED_TOKEN.</li>
            <li>
              <t>If JSON was used to transport the Access Token (as a CWT or JWT), HASH_INPUT takes the serialization of ENCODED_TOKEN.      </t>
              <t>
In either case, HASH_INPUT results in the binary representation of the content of the 'access_token' parameter from the Authorization Server response.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>The Authorization Server generates a hash value of HASH_INPUT as per <xref section="6" sectionFormat="of" target="RFC6920"/>. The resulting output in binary format is used as the token hash. Note that the used binary format embeds the identifier of the used hash function, in the first byte of the computed token hash.  </t>
          <t>
The specifically used hash function MUST be collision-resistant on byte-strings, and MUST be selected from the "Named Information Hash Algorithm" Registry <xref target="Named.Information.Hash.Algorithm"/>.  </t>
          <t>
The Authorization Server specifies the used hash function to registered devices during their registration procedure (see <xref target="sec-registration"/>).</t>
        </li>
      </ol>
      <figure anchor="fig-as-response-cbor">
        <name>Example of Authorization Server response using CBOR</name>
        <artwork align="left"><![CDATA[
2.01 Created
Content-Format: application/ace+cbor
Max-Age: 85800
Payload:
{
   "access_token" : h'd08344a1 ...
    (remainder of the Access Token omitted for brevity) ...',
   "token_type" : pop,
   "expires_in" : 86400,
   "profile" : coap_dtls,
   (remainder of the response omitted for brevity)
}
]]></artwork>
      </figure>
      <figure anchor="fig-as-response-json">
        <name>Example of Authorization Server response using JSON</name>
        <artwork align="left"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
Payload:
{
   "access_token" : "2YotnFZFEjr1zCsicMWpAA ...
    (remainder of the Access Token omitted for brevity) ...",
   "token_type" : "pop",
   "expires_in" : 86400,
   "profile" : "coap_dtls",
   (remainder of the response omitted for brevity)
}
]]></artwork>
      </figure>
    </section>
    <section anchor="sec-trl-resource">
      <name>The TRL Resource</name>
      <t>Upon startup, the Authorization Server creates a single TRL resource, encoded as a CBOR array.</t>
      <t>Each element of the array is a CBOR byte string, with value the token hash of an Access Token. The order of the token hashes in the CBOR array is irrelevant, and the CBOR array MUST be treated as a set in which the order of elements has no significant meaning.</t>
      <t>The TRL is initialized as empty, i.e., the initial content of the TRL resource representation MUST be an empty CBOR array.</t>
      <section anchor="ssec-trl-update">
        <name>Update of the TRL Resource</name>
        <t>The Authorization Server updates the TRL in the following two cases.</t>
        <ul spacing="normal">
          <li>When a non-expired Access Token is revoked, the token hash of the Access Token is added to the TRL resource representation. That is, a CBOR byte string with the token hash as its value is added to the CBOR array used as TRL resource representation.</li>
          <li>When a revoked Access Token expires, the token hash of the Access Token is removed from the TRL resource representation. That is, the CBOR byte string with the token hash as its value is removed from the CBOR array used as TRL resource representation.</li>
        </ul>
      </section>
    </section>
    <section anchor="sec-trl-endpoint">
      <name>The TRL Endpoint</name>
      <t>Consistent with <xref section="6.5" sectionFormat="of" target="I-D.ietf-ace-oauth-authz"/>, all communications between a caller of the TRL endpoint and the Authorization Server MUST be encrypted, as well as integrity and replay protected. Furthermore, responses from the Authorization Server to the caller MUST be bound to the caller's request.</t>
      <t>Following a request to the TRL endpoint, the messages defined in this document that the Authorization Server sends as response use Content-Format "application/ace-trl+cbor". Their payload is formatted as a CBOR map, and the CBOR values for the parameters included therein are defined in <xref target="trl-registry-parameters"/>.</t>
      <t>The Authorization Server MUST implement measures to prevent access to the TRL endpoint by entities other than registered devices and authorized administrators.</t>
      <t>The TRL endpoint supports only the GET method, and allows two types of query of the TRL.</t>
      <ul spacing="normal">
        <li>
          <t>Full query: the Authorization Server returns the token hashes of the revoked Access Tokens currently in the TRL and pertaining to the requester.  </t>
          <t>
The Authorization Server MUST support this type of query. The processing of a full query and the related response format are defined in <xref target="ssec-trl-full-query"/>.</t>
        </li>
        <li>
          <t>Diff query: the Authorization Server returns a list of diff entries. Each diff entry is related to one of the most recent updates, in the portion of the TRL pertaining to the requester.  </t>
          <t>
The entry associated with one of such updates contains a list of token hashes, such that: i) the corresponding revoked Access Tokens pertain to the requester; and ii) they were added to or removed from the TRL at that update.  </t>
          <t>
The Authorization Server MAY support this type of query. In such a case, the Authorization Server maintains the history of updates to the TRL resource as defined in <xref target="sec-trl-endpoint-supporting-diff-queries"/>. The processing of a diff query and the related response format are defined in <xref target="ssec-trl-diff-query"/>.</t>
        </li>
      </ul>
      <t>If it supports diff queries, the Authorization Server MAY additionally support its "Cursor" extension, which has two benefits. First, the Authorization Server can avoid excessively big latencies when several diff entries have to be transferred, by delivering one adjacent subset at the time, in different diff query responses. Second, a requester can retrieve diff entries associated with TRL updates that, even if not the most recent ones, occurred after a TRL update indicated as reference point.</t>
      <t>If it supports the "Cursor" extension, the Authorization Server stores additional information when maintaining the history of updates to the TRL resource, as defined in <xref target="sec-trl-endpoint-supporting-cursor"/>. Also, the processing of full query requests and diff query requests, as well as the related response format, are further extended as defined in <xref target="sec-using-cursor"/>.</t>
      <section anchor="sec-trl-endpoint-supporting-diff-queries">
        <name>Supporting Diff Queries</name>
        <t>If the Authorization Server supports diff queries, it is able to transfer a list of diff entries, as a series of TRL updates. That is, when replying to a diff query performed by a requester, the Authorization Server specifies the most recent updates to the portion of the TRL pertaining to that requester.</t>
        <t>The following defines how the Authorization Server builds and maintains consistent histories of TRL updates for each registered device and administrator, hereafter referred to as requesters.</t>
        <t>For each requester, the Authorization Server maintains an update collection of maximum N_MAX series items, where N_MAX is a pre-defined positive integer. The Authorization Server MUST keep track of the N_MAX most recent updates to the portion of the TRL that pertains to each requester. The Authorization Server SHOULD provide requesters with the value of N_MAX, upon their registration (see <xref target="sec-registration"/>).</t>
        <t>The series items in the update collection MUST be strictly ordered in a chronological fashion. That is, at any point in time, the current first series item is the one least recently added to the update collection and still retained by the Authorization Server, while the current last series item is the one most recently added to the update collection. The particular method used to achieve this is implementation-specific.</t>
        <t>Each time the TRL changes, the Authorization Server performs the following operations for each requester.</t>
        <ol spacing="normal" type="1"><li>The Authorization Server considers the portion of the TRL pertaining to that requester. If the TRL portion is not affected by this TRL update, the Authorization Server stops the processing for that requester.</li>
          <li>Otherwise, the Authorization Server creates two sets "trl_patch" of token hashes, i.e., one  "removed" set and one "added" set, as related to this TRL update.</li>
          <li>The Authorization Server fills the two sets with the token hashes of the removed and added Access Tokens, respectively, from/to the TRL portion considered at step 1.</li>
          <li>The Authorization Server creates a new series item, which includes the two sets from step 3.</li>
          <li>
            <t>If the update collection associated with the requester currently includes N_MAX series items, the Authorization Server MUST delete the oldest series item in the update collection.  </t>
            <t>
This occurs when the number of TRL updates pertaining to the requester and currently stored at the Authorization Server is equal to N_MAX.</t>
          </li>
          <li>The Authorization Server adds the series item to the update collection associated with the requester, as the most recent one.</li>
        </ol>
        <section anchor="sec-trl-endpoint-supporting-cursor">
          <name>Supporting the "Cursor" Extension</name>
          <t>If it supports the "Cursor" extension for diff queries, the Authorization Server performs also the following actions.</t>
          <t>When maintaining the history of updates to the TRL resource, the following applies for each update collection.</t>
          <ul spacing="normal">
            <li>
              <t>Each series item X in the update collection is also associated with an unsigned integer 'index'. The value of 'index' is the absolute counter of series items added to that update collection until and including X, minus 1.  </t>
              <t>
That is, the first series item ever added to that update collection has 'index' with value 0. Also, after having added V series item to the update collection, the last series item has 'index' with value (V - 1), independently of the maximum possible size of the update collection (i.e., N_MAX).</t>
            </li>
            <li>
              <t>The unsigned integer LAST_INDEX is also defined. At every point in time, the value of LAST_INDEX is the value of 'index' currently associated with the latest added series item in the update collection.  </t>
              <t>
That is, the value of LAST_INDEX is the total number of series items added so far to the update collection, minus 1.</t>
            </li>
          </ul>
          <t>When processing a diff query using the "Cursor" extension, the values of 'index' are used as cursor information, as defined in <xref target="sec-using-cursor-diff-query-response"/>.</t>
          <t>Furthermore, the Authorization Server defines an unsigned integer MAX_DIFF_BATCH &lt;= N_MAX. The value of MAX_DIFF_BATCH specifies the maximum number of diff entries to be included in a single diff query response. If supporting the "Cursor" extension, the Authorization Server SHOULD provide registered devices and administrators with the value of MAX_DIFF_BATCH, upon their registration (see <xref target="sec-registration"/>).</t>
        </section>
      </section>
      <section anchor="sec-trl-endpoint-query-parameters">
        <name>Query Parameters</name>
        <t>The TRL endpoint allows the following query parameters to be present in a GET request. The Authorization Server MUST silently ignore unknown query parameters.</t>
        <ul spacing="normal">
          <li>
            <t>'pmax': if included, it follows the semantics defined in <xref section="3.2.2" sectionFormat="of" target="I-D.ietf-core-conditional-attributes"/>. This query parameter is relevant only in case the GET request is specifically an Observation Request, i.e., if it includes the CoAP Observe Option set to 0 (register). In such a case, this parameter indicates the maximum time, in seconds, between two consecutive notifications for the observation in question, regardless whether the TRL resource has changed or not.  </t>
            <t>
If the Observation Request does not include the 'pmax' parameter, the maximum time to consider is up to the Authorization Server. If the Observation Request includes the 'pmax' parameter, its value MUST be greater than zero, otherwise the Authorization Server MUST return a 4.00 (Bad Request) response.  </t>
            <t>
If the GET request is not an Observation Request, the Authorization Server MUST ignore the 'pmax' parameter, in case this is included.</t>
          </li>
          <li>
            <t>'diff': if included, it indicates to perform a diff query of the TRL (see <xref target="ssec-trl-diff-query"/>). Its value MUST be either:  </t>
            <ul spacing="normal">
              <li>the integer 0, indicating that a (notification) response should include as many diff entries as the Authorization Server can provide in the response; or</li>
              <li>a positive integer greater than 0, indicating the maximum number of diff entries that a (notification) response should include.</li>
            </ul>
            <t>
If the Authorization Server does not support diff queries, it ignores the query parameter 'diff' when present in the GET request and proceeds like when processing a full query of the TRL (see <xref target="ssec-trl-full-query"/>).  </t>
            <t>
Otherwise, the Authorization Server MUST return a 4.00 (Bad Request) response in case the query parameter 'diff' of the GET request specifies a value other than 0 or than a positive integer. The response MUST have Content-Format "application/ace-trl+cbor". The payload of the response is a CBOR map, which MUST include the 'error' field with value 0 ("Invalid parameter value") and MAY include the 'error_description' field to provide additional context.</t>
          </li>
          <li>
            <t>'cursor': if included, it indicates to perform a diff query of the TRL together with the "Cursor" extension, as defined in <xref target="sec-using-cursor-diff-query-response"/>. Its value MUST be either 0 or a positive integer.  </t>
            <t>
If the Authorization Server does not support the "Cursor" extension, it ignores the query parameter 'cursor' when present in the GET request. In such a case, the Authorization Server proceeds: i) like when processing a diff query of the TRL (see <xref target="ssec-trl-diff-query"/>), if it supports diff queries and the query parameter 'diff' is present in the GET request, or ii) like when processing a full query of the TRL (see <xref target="ssec-trl-full-query"/>) otherwise.  </t>
            <t>
If the Authorization Server supports both diff queries and the "Cursor" extension, and the GET request specifies the query parameter 'cursor', then the Authorization Server MUST return a 4.00 (Bad Request) response in case any of the following conditions holds.  </t>
            <ul spacing="normal">
              <li>The GET request does not specify the query parameter 'diff'. The 'error' parameter within the CBOR map carried in the response payload MUST have value 1 ("Invalid set of parameters").</li>
              <li>The query parameter 'cursor' has a value other than 0 or than a positive integer. The 'error' parameter within the CBOR map carried in the response payload MUST have value 0 ("Invalid parameter value").</li>
              <li>The query parameter 'cursor' has a value strictly greater than the current LAST_INDEX for the update collection associated with the requester (see <xref target="sec-trl-endpoint-supporting-cursor"/>). The 'error' parameter within the CBOR map carried in the response payload MUST have value 2 ("Out of bound cursor value"). The CBOR map MUST also include the 'cursor' parameter, which MUST specify the current value of LAST_INDEX for the update collection associated with the requester.</li>
            </ul>
            <t>
The 4.00 (Bad Request) response MUST have Content-Format "application/ace-trl+cbor". The payload of the response MUST be a CBOR map, which MUST include the 'error' parameter and MAY include the 'error_description' parameter to provide additional context.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="ssec-trl-full-query">
      <name>Full Query of the TRL</name>
      <t>In order to produce a (notification) response to a GET request asking for a full query of the TRL, the Authorization Server performs the following actions.</t>
      <ol spacing="normal" type="1"><li>
          <t>From the current TRL resource representation, the Authorization Server builds a set HASHES, such that:  </t>
          <ul spacing="normal">
            <li>If the requester is a registered device, HASHES specifies the token hashes of the Access Tokens pertaining to that registered device. The Authorization Server can use the authenticated identity of the registered device to perform the necessary filtering on the TRL resource representation.</li>
            <li>If the requester is an administrator, HASHES specifies all the token hashes in the current TRL resource representation.</li>
          </ul>
        </li>
        <li>
          <t>The Authorization Server sends a 2.05 (Content) response to the requester. The response MUST have Content-Format "application/ace-trl+cbor". The payload of the response is a CBOR map, which MUST be formatted as follows.  </t>
          <ul spacing="normal">
            <li>
              <t>The 'full_set' parameter MUST be included and specifies a CBOR array 'full_set_value'. Each element of 'full_set_value' specifies one of the token hashes from the set HASHES, encoded as a CBOR byte string. If the set HASHES is empty, the 'full_set' parameter specifies the empty CBOR array.      </t>
              <t>
The order of the token hashes in the CBOR array is irrelevant, i.e., the CBOR array MUST be treated as a set in which the order of elements has no significant meaning.</t>
            </li>
            <li>
              <t>The 'cursor' parameter MUST be included if the Authorization Server supports both the diff queries and the related "Cursor" extension (see <xref target="sec-trl-endpoint-supporting-diff-queries"/> and <xref target="sec-trl-endpoint-supporting-cursor"/>). Its value is specified according to what is defined in <xref target="sec-using-cursor-full-query-response"/>, and provides the requester with information for performing a follow-up diff query using the "Cursor" extension (see <xref target="sec-using-cursor-diff-query-response"/>).      </t>
              <t>
If the Authorization Server does not support both diff queries and the "Cursor" extension, this parameter MUST NOT be included. In case the requester does not support both diff queries and the "Cursor" extension, it MUST silently ignore the 'cursor' parameter if present.</t>
            </li>
          </ul>
        </li>
      </ol>
      <t><xref target="cddl-full"/> provides the CDDL definition <xref target="RFC8610"/> of the CBOR array 'full_set_value' specified in the response from the Authorization Server, as value of the 'full_set' parameter.</t>
      <figure anchor="cddl-full">
        <name>CDDL definition of 'full_set_value'</name>
        <artwork type="CDDL" align="left"><![CDATA[
token_hash = bytes
full_set_value = [* token_hash]
]]></artwork>
      </figure>
      <t><xref target="response-full"/> shows an example of response from the Authorization Server, following a full query request to the TRL endpoint. Full token hashes are omitted for brevity.</t>
      <figure anchor="response-full">
        <name>Example of response following a Full Query request to the TRL endpoint</name>
        <artwork align="left"><![CDATA[
2.05 Content
Content-Format: application/ace-trl+cbor
Payload:
{
   "full_set" : [
     h'01fa51cc ... ', h'01748190 ... '
   ]
}
]]></artwork>
      </figure>
    </section>
    <section anchor="ssec-trl-diff-query">
      <name>Diff Query of the TRL</name>
      <t>In order to produce a (notification) response to a GET request asking for a diff query of the TRL, the Authorization Server performs the following actions.</t>
      <ol spacing="normal" type="1"><li>The Authorization Server defines the positive integer NUM as follows. If the value N specified in the query parameter 'diff' in the GET request is equal to 0 or greater than the pre-defined positive integer N_MAX (see <xref target="sec-trl-endpoint-supporting-diff-queries"/>), then NUM takes the value of N_MAX. Otherwise, NUM takes N.</li>
        <li>The Authorization Server determines U = min(NUM, SIZE), where SIZE &lt;= N_MAX is the number of TRL updates pertaining to the requester and currently stored at the Authorization Server.</li>
        <li>
          <t>The Authorization Server prepares U diff entries. If U is equal to 0 (e.g., because SIZE is equal to 0 at step 2), then no diff entries are prepared.  </t>
          <t>
The prepared diff entries are related to the U most recent TRL updates pertaining to the requester, as maintained in the update collection for that requester (see <xref target="sec-trl-endpoint-supporting-diff-queries"/>). In particular, the first diff entry refers to the most recent of such updates, the second diff entry refers to the second from last of such updates, and so on.  </t>
          <t>
Each diff entry is a CBOR array 'diff_entry', which includes the following two elements.  </t>
          <ul spacing="normal">
            <li>The first element is a CBOR array 'removed'. Each element of the array is a CBOR byte string, with value the token hash of an Access Token such that: it pertained to the requester; and it was removed from the TRL during the update associated with the diff entry.</li>
            <li>The second element is a CBOR array 'added'. Each element of the array is a CBOR byte string, with value the token hash of an Access Token such that: it pertains to the requester; and it was added to the TRL during the update associated with the diff entry.</li>
          </ul>
          <t>
The order of the token hashes in the CBOR arrays 'removed' and 'added' is irrelevant. That is, the CBOR arrays 'removed' and 'added' MUST be treated as a set in which the order of elements has no significant meaning.</t>
        </li>
        <li>
          <t>The Authorization Server prepares a 2.05 (Content) response for the requester. The response MUST have Content-Format "application/ace-trl+cbor". The payload of the response is a CBOR map, which MUST be formatted as follows.  </t>
          <ul spacing="normal">
            <li>
              <t>The 'diff_set' parameter MUST be present and specifies a CBOR array 'diff_set_value' of U elements. Each element of 'diff_set_value' specifies one of the CBOR arrays 'diff_entry' prepared above as diff entry. Note that U might have value 0, in which case 'diff_set_value' is the empty CBOR array.      </t>
              <t>
Within 'diff_set_value', the CBOR arrays 'diff_entry' MUST be sorted to reflect the corresponding updates to the TRL in reverse chronological order. That is, the first 'diff_entry' element of 'diff_set_value' relates to the most recent update to the portion of the TRL pertaining to the requester. The second 'diff_entry' element relates to the second from last most recent update to that portion, and so on.</t>
            </li>
            <li>
              <t>The 'cursor' parameter and the 'more' parameters MUST be included if the Authorization Server supports both the diff queries and the related "Cursor" extension (see <xref target="sec-trl-endpoint-supporting-cursor"/>). Their values are specified according to what is defined in <xref target="sec-using-cursor-diff-query-response"/>, and provide the requester with information for performing a follow-up query to the TRL endpoint (see <xref target="sec-using-cursor-diff-query-response"/>).      </t>
              <t>
If the Authorization Server does not support both diff queries and the "Cursor" extension, these parameters MUST NOT be included. In case the requester does not support both diff queries and the "Cursor" extension, it MUST silently ignore the 'cursor' parameter and the 'more' parameter if present.</t>
            </li>
          </ul>
        </li>
      </ol>
      <t><xref target="cddl-diff"/> provides the CDDL definition <xref target="RFC8610"/> of the CBOR array 'diff_set_value' specified in the response from the Authorization Server, as value of the 'diff_set' parameter.</t>
      <figure anchor="cddl-diff">
        <name>CDDL definition of 'diff_set_value'</name>
        <artwork type="CDDL" align="left"><![CDATA[
   token_hash = bytes
   trl_patch = [* token_hash]
   diff_entry = [removed: trl_patch, added: trl_patch]
   diff_set_value = [* diff_entry]
]]></artwork>
      </figure>
      <t><xref target="response-diff"/> shows an example of response from the Authorization Server, following a Diff Query request to the TRL endpoint, where U = 3 diff entries are specified. Full token hashes are omitted for brevity.</t>
      <figure anchor="response-diff">
        <name>Example of response following a Diff Query request to the TRL endpoint</name>
        <artwork align="left"><![CDATA[
2.05 Content
Content-Format: application/ace-trl+cbor
Payload:
{
   "diff_set" : [
     [
       [ h'01fa51cc ... ', h'01748190 ... '],
       [ h'01cdf1ca ... ', h'01be41a6 ... ']
     ],
     [
       [ h'0144dd12 ... ', h'01231fff ... '],
       []
     ],
     [
       [],
       [ h'01ca986f ... ', h'01fe1a2b ... ']
     ]
   ]
}
]]></artwork>
      </figure>
      <t><xref target="sec-series-pattern"/> discusses how performing a diff query of the TRL is in fact a usage example of the Series Transfer Pattern defined in <xref target="I-D.bormann-t2trg-stp"/>.</t>
    </section>
    <section anchor="sec-using-cursor">
      <name>Using the "Cursor" Extension</name>
      <t>If it supports both diff queries and the "Cursor" extension, the Authorization Server composes a response to a full query request or diff query request as defined in <xref target="sec-using-cursor-full-query-response"/> and <xref target="sec-using-cursor-diff-query-response"/>, respectively.</t>
      <t>The exact format of the response depends on the request being a full query or diff query request, on the presence of the query parameter 'cursor' in the diff query request, and on the current status of the update collection associated with the requester.</t>
      <section anchor="sec-using-cursor-full-query-response">
        <name>Response to Full Query</name>
        <t>When processing a full query request to the TRL endpoint, the Authorization Server composes a response as defined in <xref target="ssec-trl-full-query"/>.</t>
        <t>In particular, the 'cursor' parameter included in the CBOR map carried in the response payload specifies either the CBOR simple value "null" (0xf6) or a CBOR unsigned integer.</t>
        <t>The 'cursor' parameter MUST specify the CBOR simple value "null" in case there are currently no TRL updates pertinent to the requester, i.e., the update collection for that requester is empty. This is the case from when the requester registers at the Authorization Server until a first update pertaining to that requester occurs to the TRL.</t>
        <t>Otherwise, the 'cursor' parameter MUST specify a CBOR unsigned integer. This MUST take the 'index' value of the last series item in the update collection associated with the request (see <xref target="sec-trl-endpoint-supporting-cursor"/>), as corresponding to the most recent update pertaining to the requester occurred to the TRL.</t>
      </section>
      <section anchor="sec-using-cursor-diff-query-response">
        <name>Response to Diff Query</name>
        <t>When processing a diff query request to the TRL endpoint, the Authorization Server composes a response as defined in the following.</t>
        <section anchor="sec-using-cursor-diff-query-response-empty">
          <name>Empty Collection</name>
          <t>If the update collection associated with the requester has no elements, the Authorization Server returns a 2.05 (Content) response. The response MUST have Content-Format "application/ace-trl+cbor" and its payload MUST be a CBOR map formatted as follows.</t>
          <ul spacing="normal">
            <li>The 'diff_set' parameter MUST be included and specifies the empty CBOR array.</li>
            <li>The 'cursor' parameter MUST be included and specifies the CBOR simple value "null" (0xf6).</li>
            <li>The 'more' parameter MUST be included and specifies the CBOR simple value "false" (0xf4).</li>
          </ul>
          <t>Note that the above applies when the update collection associated with the requester has no elements, regardeless whether the query parameter 'cursor' is included or not in the diff query request.</t>
        </section>
        <section anchor="sec-using-cursor-diff-query-response-no-cursor">
          <name>Cursor Not Specified in the Diff Query Request</name>
          <t>If the update collection associated with the requester is not empty and the diff query request does not include the query parameter 'cursor', the Authorization Server performs the same actions defined in <xref target="ssec-trl-diff-query"/>, with the following differences.</t>
          <ul spacing="normal">
            <li>
              <t>At step 3, the Authorization Server considers the value MAX_DIFF_BATCH (see <xref target="sec-trl-endpoint-supporting-cursor"/>), and prepares L = min(U, MAX_DIFF_BATCH) diff entries. If L is equal to 0 (e.g., because U is equal to 0), then no diff entries are prepared.  </t>
              <t>
If U &lt;= MAX_DIFF_BATCH, the prepared diff entries are the last series items in the update collection associated with the requester, corresponding to the L most recent TRL updates pertaining to the requester.  </t>
              <t>
If U &gt; MAX_DIFF_BATCH, the prepared diff entries are the eldest of the last U series items in the update collection associated with the requester, as corresponding to the first L of the U most recent TRL updates pertaining to the requester.</t>
            </li>
            <li>
              <t>At step 4, the CBOR map to carry in the payload of the 2.05 (Content) response MUST be formatted as follows.  </t>
              <ul spacing="normal">
                <li>The 'diff_set' parameter MUST be present and specifies a CBOR array 'diff_set_value' of L elements. Each element of 'diff_set_value' specifies one of the CBOR arrays 'diff_entry' prepared as diff entry. Note that L might have value 0, in which case 'diff_set_value' is the empty CBOR array.</li>
                <li>
                  <t>The 'cursor' parameter MUST be present and specifies a CBOR unsigned integer. This MUST take the 'index' value of the series item of the update collection included as first diff entry in the 'diff_set_value' CBOR array, which is specified by the 'diff_set' parameter. That is, the 'cursor' parameter takes the 'index' value of the series item in the update collection corresponding to the most recent update pertaining to the requester and returned in this diff query response.      </t>
                  <t>
Note that the 'cursor' parameter takes the same 'index' value of the last series item in the update collection when U &lt;= MAX_DIFF_BATCH.</t>
                </li>
                <li>
                  <t>The 'more' parameter MUST be present and MUST specify the CBOR simple value "false" (0xf4) if U &lt;= MAX_DIFF_BATCH, or the CBOR simple value "true" (0xf5) otherwise.      </t>
                  <t>
If the 'more' parameter has value "true", the requester can send a follow-up diff query request including the query parameter 'cursor', with the same value of the 'cursor' parameter specified in this diff query response. As defined in <xref target="sec-using-cursor-diff-query-response-cursor"/>, this would result in the Authorization Server transferring the following subset of series items as diff entries, thus resuming from where interrupted in the previous transfer.</t>
                </li>
              </ul>
            </li>
          </ul>
        </section>
        <section anchor="sec-using-cursor-diff-query-response-cursor">
          <name>Cursor Specified in the Diff Query Request</name>
          <t>If the update collection associated with the requester is not empty and the diff query request includes the query parameter 'cursor' with value P, the Authorization Server proceeds as follows, depending on which of the following two cases hold.</t>
          <ul spacing="normal">
            <li>
              <t>Case A - The series item X with 'index' having value P and the series item Y with 'index' having value P+1 are both not found in the update collection associated with the requester. This occurs when the item Y (and possibly further ones after it) has been previously removed from the history of updates for that requester (see step 5 at <xref target="sec-trl-endpoint-supporting-diff-queries"/>).  </t>
              <t>
In this case, the Authorization Server returns a 2.05 (Content) response. The response MUST have Content-Format "application/ace-trl+cbor" and its payload MUST be a CBOR map formatted as follows.  </t>
              <ul spacing="normal">
                <li>The 'diff_set' parameter MUST be included and specifies the empty CBOR array.</li>
                <li>The 'cursor' parameter MUST be included and specifies the CBOR simple value "null" (0xf6).</li>
                <li>The 'more' parameter MUST be included and specifies the CBOR simple value "true" (0xf5).</li>
              </ul>
              <t>
With the combination ('cursor', 'more') = ("null", "true"), the Authorization Server is signaling that the update collection is in fact not empty, but that one or more series items have been lost due to their removal. These include the item with 'index' value P+1, that the requester wished to obtain as the first one following the specified reference point with 'index' value P.  </t>
              <t>
When receiving this diff query response, the requester should send a new full query request to the Authorization Server, in order to fully retrieve the current pertaining portion of the TRL.</t>
            </li>
            <li>
              <t>Case B - The series item X with 'index' having value P is found in the update collection associated with the requester; or the series item X is not found and the series item Y with 'index' having value P+1 is found in the update collection associated with the requester.  </t>
              <t>
In this case, the Authorization Server performs the same actions defined in <xref target="ssec-trl-diff-query"/>, with the following differences.  </t>
              <ul spacing="normal">
                <li>
                  <t>At step 3, the Authorization Server considers the value MAX_DIFF_BATCH (see <xref target="sec-trl-endpoint-supporting-cursor"/>), and prepares L = min(SUB_U, MAX_DIFF_BATCH) diff entries, where SUB_U = min(NUM, SUB_SIZE), and SUB_SIZE is the number of series items in the update collection following the series item X. If L is equal to 0 (e.g., because SUB_U is equal to 0), then no diff entries are prepared.      </t>
                  <t>
If SUB_U &lt;= MAX_DIFF_BATCH, the prepared diff entries are the last series items in the update collection associated with the requester, corresponding to the L most recent TRL updates pertaining to the requester.      </t>
                  <t>
If SUB_U &gt; MAX_DIFF_BATCH, the prepared diff entries are the eldest of the last SUB_U series items in the update collection associated with the requester, corresponding to the first L of the SUB_U most recent TRL updates pertaining to the requester.</t>
                </li>
                <li>
                  <t>At step 4, the CBOR map to carry in the payload of the 2.05 (Content) response MUST be formatted as follows.      </t>
                  <ul spacing="normal">
                    <li>The 'diff_set' parameter MUST be present and specifies a CBOR array 'diff_set_value' of L elements. Each element of 'diff_set_value' specifies one of the CBOR arrays 'diff_entry' prepared as diff entry. Note that L might have value 0, in which case 'diff_set_value' is the empty CBOR array.</li>
                    <li>
                      <t>The 'cursor' parameter MUST be present and MUST specify a CBOR unsigned integer. In particular:          </t>
                      <ul spacing="normal">
                        <li>If L is equal to 0, i.e., the series item X is the last one in the update collection, then the 'cursor' parameter MUST take the same 'index' value of the last series item in the update collection.</li>
                        <li>If L is different than 0, then the 'cursor' parameter MUST take the 'index' value of the series element of the update collection included as first diff entry in the 'diff_set' CBOR array. That is, the 'cursor' parameter takes the 'index' value of the series item in the update collection corresponding to the most recent update pertaining to the requester and returned in this diff query response.</li>
                      </ul>
                      <t>
Note that the 'cursor' parameter takes the same 'index' value of the last series item in the update collection when SUB_U &lt;= MAX_DIFF_BATCH.</t>
                    </li>
                    <li>
                      <t>The 'more' parameter MUST be present and MUST specify the CBOR simple value "false" (0xf4) if SUB_U &lt;= MAX_DIFF_BATCH, or the CBOR simple value "true" (0xf5) otherwise.          </t>
                      <t>
If 'more' has value "true", the requester can send a follow-up diff query request including the query parameter 'cursor', with the same value of the 'cursor' parameter specified in this diff query response. This would result in the Authorization Server transferring the following subset of series items as diff entries, thus resuming from where interrupted in the previous transfer.</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="sec-registration">
      <name>Upon Registration</name>
      <t>During the registration process at the Authorization Server, an administrator or a registered device receives the following information as part of the registration response.</t>
      <ul spacing="normal">
        <li>The url-path to the TRL endpoint at the Authorization Server.</li>
        <li>The hash function used to compute token hashes. This is specified as an integer or a text string, taking value from the "ID" or "Hash Name String" column of the "Named Information Hash Algorithm" Registry <xref target="Named.Information.Hash.Algorithm"/>, respectively.</li>
        <li>Optionally, a positive integer N_MAX, if the Authorization Server supports diff queries of the TRL resource (see <xref target="sec-trl-endpoint-supporting-diff-queries"/> and <xref target="ssec-trl-diff-query"/>).</li>
        <li>Optionally, a positive integer MAX_DIFF_BATCH, if the Authorization Server supports diff queries of the TRL resource as well as the related "Cursor" extension (see <xref target="sec-trl-endpoint-supporting-cursor"/> and <xref target="sec-using-cursor"/>).</li>
      </ul>
      <t>After the registration procedure is finished, the administrator or registered device can send a GET request to the TRL resource, including the CoAP Observe Option set to 0 (register), in order to start an observation of the TRL resource at the Authorization Server as per <xref section="3.1" sectionFormat="of" target="RFC7641"/>. The GET request can express the wish for a full query (see <xref target="ssec-trl-full-query"/>) or a diff query (see <xref target="ssec-trl-diff-query"/>) of the TRL.</t>
      <t>In case the request is successfully processed, the Authorization Server replies with a response specifying the CoAP response code 2.05 (Content) and including the CoAP Observe Option. The payload of the response is formatted as defined in <xref target="ssec-trl-full-query"/> or in <xref target="ssec-trl-diff-query"/>, in case the GET request yielded the execution of a full query or a diff query of the TRL, respectively.</t>
      <t>Further details about the registration process at the Authorization Server are out of scope for this specification. Note that the registration process is also out of the scope of the ACE framework for Authentication and Authorization (see <xref section="5.5" sectionFormat="of" target="I-D.ietf-ace-oauth-authz"/>).</t>
    </section>
    <section anchor="sec-notification">
      <name>Notification of Revoked Tokens</name>
      <t>When the TRL is updated (see <xref target="ssec-trl-update"/>), the Authorization Server sends Observe Notifications to the observers of the TRL resource. Observe Notifications are sent as per <xref section="4.2" sectionFormat="of" target="RFC7641"/>.</t>
      <t>If the 'pmax' query parameter was specified in the Observation Request starting an observation (see <xref target="sec-trl-endpoint-query-parameters"/>), the Authorization Server might accordingly send additional Observe Notifications to the associated observer. That is, the Authorization Server ensures that no more than pmax seconds elapse between two consecutive notifications sent to that observer, regardless whether the TRL resource has changed or not. If the 'pmax' query parameter was not specified in the Observation Request, a possible maximum time to consider is up to the Authorization Server.</t>
      <t>The payload of each Observe Notification is formatted as defined in <xref target="ssec-trl-full-query"/> or in <xref target="ssec-trl-diff-query"/>, in case the original Observation Request yielded the execution of a full query or a diff query of the TRL, respectively.</t>
      <t>Furthermore, an administrator or a registered device can send additional GET requests to the TRL endpoint at any time, in order to retrieve the token hashes of the pertaining revoked Access Tokens. When doing so, the caller of the TRL endpoint can perform a full query (see <xref target="ssec-trl-full-query"/>) or a diff query (see <xref target="ssec-trl-diff-query"/>) of the TRL.</t>
      <t>When receiving a response from the TRL endpoint, a registered device MUST expunge every stored Access Token associated with a token hash specified in the response.</t>
      <t>When a Resource Server RS receives a response from the TRL endpoint specifying the token hash th1 associated with a revoked Access Token t1, the RS might not have received and stored that Access Token yet. This occurs if the Access Token is revoked before it is successfully posted to the Authorization Information Endpoint at the RS (see <xref section="5.10.1" sectionFormat="of" target="I-D.ietf-ace-oauth-authz"/>). Such a delay can be due, for example, to messages that get lost in transmission, or rather to the Client experiencing failures in sending the Access Token to the RS, or deliberately holding the Access Token back.</t>
      <t>Thus, in order to ensure that no revoked Access Tokens are accepted and stored, the RS performs the following actions.</t>
      <ul spacing="normal">
        <li>
          <t>The RS MUST store the token hash th1, until gaining knowledge that the associated revoked Access Token t1 is also expired.  </t>
          <t>
This can happen when receiving a subsequent response from the TRL endpoint (i.e., indicating that the token hash th1 is not in the TRL portion pertaining to the RS anymore), or when the Access Token t1 is posted to the Authorization Information Endpoint and is found to be expired based on its 'exp' claim <xref target="RFC7519"/>, if included.</t>
        </li>
        <li>The RS MUST NOT accept as valid and store an Access Token t1 posted to the Authorization Information Endpoint, if the corresponding token hash th1 is among the stored ones.</li>
      </ul>
    </section>
    <section anchor="sec-RS-examples">
      <name>Interaction Examples</name>
      <t>This section provides examples of interactions between a Resource Server RS as a registered device and an Authorization Server AS. The Authorization Server supports both full query and diff query of the TRL, as defined in <xref target="ssec-trl-full-query"/> and <xref target="ssec-trl-diff-query"/>, respectively.</t>
      <t>The details of the registration process are omitted, but it is assumed that the Resource Server sends an unspecified payload to the Authorization Server, which replies with a 2.01 (Created) response.</t>
      <t>The payload of the registration response is a CBOR map, which includes the following entries:</t>
      <ul spacing="normal">
        <li>a "trl_path" parameter, specifying the path of the TRL resource;</li>
        <li>a "trl_hash" parameter, specifying the hash function used to computed token hashes as defined in <xref target="sec-token-name"/>;</li>
        <li>an "n_max" parameter, specifying the value of N_MAX, i.e., the maximum number of TRL updates pertaining to each registered device that the Authorization Server retains for that device (see <xref target="ssec-trl-diff-query"/>);</li>
        <li>possible further parameters related to the registration process.</li>
      </ul>
      <t>Furthermore, 'h(x)' refers to the hash function used to compute the token hashes, as defined in <xref target="sec-token-name"/> of this specification and according to <xref target="RFC6920"/>. Assuming the usage of CWTs transported in CBOR, 'bstr.h(t1)' and 'bstr.h(t2)' denote the byte-string representations of the token hashes for the Access Tokens t1 and t2, respectively.</t>
      <section anchor="sec-RS-example-1">
        <name>Full Query with Observation</name>
        <t><xref target="fig-RS-AS"/> shows an interaction example considering a CoAP observation and a full query of the TRL.</t>
        <figure anchor="fig-RS-AS">
          <name>Interaction for Full Query with Observation</name>
          <artwork align="center"><![CDATA[
RS                                                 AS
|                                                   |
| Registration: POST                                |
+-------------------------------------------------->|
|                                                   |
|<--------------------------------------------------+
|                   2.01 CREATED                    |
|                     Payload: {                    |
|                        ...                        |
|                        "trl_path" : "revoke/trl", |
|                        "trl_hash" : "sha-256",    |
|                        "n_max" : 10               |
|                     }                             |
|                                                   |
| GET Observe: 0                                    |
|  coap://as.example.com/revoke/trl/                |
+-------------------------------------------------->|
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 42                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "full_set" : []                         |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|          (Access Tokens t1 and t2 issued          |
|          and successfully submitted to RS)        |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|                                                   |
|            (Access Token t1 is revoked)           |
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 53                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "full_set" : [bstr.h(t1)]               |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|            (Access Token t2 is revoked)           |
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 64                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "full_set" : [bstr.h(t1), bstr.h(t2)]   |
|        }                                          |
|                                                   |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|             (Access Token t1 expires)             |
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 75                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "full_set" : [bstr.h(t2)]               |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|            (Access Token t2 expires)              |
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 86                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "full_set" : []                         |
|         }                                         |
|                                                   |
]]></artwork>
        </figure>
      </section>
      <section anchor="sec-RS-example-2">
        <name>Diff Query with Observation</name>
        <t><xref target="fig-RS-AS-2"/> shows an interaction example considering a CoAP observation and a diff query of the TRL.</t>
        <t>The Resource Server indicates N=3 as value of the query parameter 'diff', i.e., as the maximum number of diff entries to be specified in a response from the Authorization Server.</t>
        <figure anchor="fig-RS-AS-2">
          <name>Interaction for Diff Query with Observation</name>
          <artwork align="center"><![CDATA[
RS                                                 AS
|                                                   |
| Registration: POST                                |
+-------------------------------------------------->|
|                                                   |
|<--------------------------------------------------+
|                    2.01 CREATED                   |
|                     Payload: {                    |
|                        ...                        |
|                        "trl_path" : "revoke/trl", |
|                        "trl_hash" : "sha-256",    |
|                        "n_max" : 10               |
|                     }                             |
|                                                   |
| GET Observe: 0                                    |
|  coap://as.example.com/revoke/trl?diff=3          |
+-------------------------------------------------->|
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 42                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "diff_set" : []                         |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|          (Access Tokens t1 and t2 issued          |
|          and successfully submitted to RS)        |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|            (Access Token t1 is revoked)           |
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 53                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "diff_set" : [                          |
|                          [ [], [bstr.h(t1)] ]     |
|                        ]                          |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|            (Access Token t2 is revoked)           |
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 64                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "diff_set" : [                          |
|                          [ [], [bstr.h(t2)] ],    |
|                          [ [], [bstr.h(t1)] ]     |
|                        ]                          |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|              (Access Token t1 expires)            |
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 75                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "diff_set" : [                          |
|                          [ [bstr.h(t1)], [] ],    |
|                          [ [], [bstr.h(t2)] ],    |
|                          [ [], [bstr.h(t1)] ]     |
|                        ]                          |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|              (Access Token t2 expires)            |
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 86                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "diff_set" : [                          |
|                          [ [bstr.h(t2)], [] ],    |
|                          [ [bstr.h(t1)], [] ],    |
|                          [ [], [bstr.h(t2)] ]     |
|                        ]                          |
|         }                                         |
|                                                   |
]]></artwork>
        </figure>
      </section>
      <section anchor="sec-RS-example-3">
        <name>Full Query with Observation and Additional Diff Query</name>
        <t><xref target="fig-RS-AS-3"/> shows an interaction example considering a CoAP observation and a full query of the TRL.</t>
        <t>The example also considers one of the notifications from the Authorization Server to get lost in transmission, and thus not reaching the Resource Server.</t>
        <t>When this happens, and after a waiting time defined by the application has elapsed, the Resource Server sends a GET request with no Observe Option to the Authorization Server, to perform a diff query of the TRL. The Resource Server indicates N=8 as value of the query parameter 'diff', i.e., as the maximum number of diff entries to be specified in a response from the Authorization Server.</t>
        <figure anchor="fig-RS-AS-3">
          <name>Interaction for Full Query with Observation and Diff Query</name>
          <artwork align="center"><![CDATA[
RS                                                 AS
|                                                   |
| Registration: POST                                |
+-------------------------------------------------->|
|                                                   |
|<--------------------------------------------------+
|                    2.01 CREATED                   |
|                     Payload: {                    |
|                        ...                        |
|                        "trl_path" : "revoke/trl", |
|                        "trl_hash" : "sha-256",    |
|                        "n_max" : 10               |
|                     }                             |
|                                                   |
| GET Observe: 0                                    |
|  coap://as.example.com/revoke/trl/                |
+-------------------------------------------------->|
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 42                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "full_set" : []                         |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|          (Access Tokens t1 and t2 issued          |
|          and successfully submitted to RS)        |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|            (Access Token t1 is revoked)           |
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 53                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "full_set" : [bstr.h(t1)]               |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|            (Access Token t2 is revoked)           |
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 64                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "full_set" : [bstr.h(t1), bstr.h(t2)]   |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|             (Access Token t1 expires)             |
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 75                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "full_set" : [bstr.h(t2)]               |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|             (Access Token t2 expires)             |
|                                                   |
|    X<---------------------------------------------+
|        2.05 CONTENT Observe: 86                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "full_set" : []                         |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|           (Enough time has passed since           |
|         the latest received notification)         |
|                                                   |
| GET                                               |
|  coap://as.example.com/revoke/trl?diff=8          |
+-------------------------------------------------->|
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT                               |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "diff_set" : [                          |
|                          [ [bstr.h(t2)], [] ],    |
|                          [ [bstr.h(t1)], [] ],    |
|                          [ [], [bstr.h(t2)] ],    |
|                          [ [], [bstr.h(t1)] ]     |
|                        ]                          |
|         }                                         |
|                                                   |
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="trl-registry-parameters">
      <name>ACE Token Revocation List Parameters</name>
      <t>This specification defines a number of parameters that can be transported in the response from the TRL endpoint, when the response payload is a CBOR map. Note that such a response MUST use the Content-Format "application/ace-trl+cbor" defined in <xref target="iana-content-type"/> of this specification.</t>
      <t>The table below summarizes them, and specifies the CBOR value to use as abbreviation instead of the full descriptive name.</t>
      <figure anchor="fig-cbor-trl-params">
        <name>CBOR abbreviations for the ACE Token Revocation List parameters</name>
        <artwork align="center"><![CDATA[
+-------------------+------------+------------------------+
| Name              | CBOR Value | CBOR Type              |
+-------------------+------------+------------------------+
| full_set          |  0         | array                  |
+-------------------+------------+------------------------+
| diff_set          |  1         | array                  |
+-------------------+------------+------------------------+
| cursor            |  2         | unsigned integer /     |
|                   |            | simple value "null"    |
+-------------------+------------+------------------------+
| more              |  3         | simple value "false" / |
|                   |            | simple value "true"    |
+-------------------+------------+------------------------+
| error             | -1         | int                    |
+-------------------+------------+------------------------+
| error_description | -2         | tstr                   |
+-------------------+------------+------------------------+
]]></artwork>
      </figure>
    </section>
    <section anchor="error-types">
      <name>ACE Token Revocation List Error Identifiers</name>
      <t>This specification defines a number of values that the Authorization Server can include as error identifiers, in the 'error' field of an error response from the TRL endpoint. This applies to error responses whose payload is a CBOR map and whose Content-Format is "application/ace-trl+cbor".</t>
      <figure anchor="fig-ACE-TRL-Error">
        <name>ACE Token Revocation List Error Identifiers</name>
        <artwork align="center"><![CDATA[
+-------+---------------------------+
| Value | Description               |
+-------+---------------------------+
|   0   | Invalid parameter value   |
+-------+---------------------------+
|   1   | Invalid set of parameters |
+-------+---------------------------+
|   2   | Out of bound cursor value |
+-------+---------------------------+
]]></artwork>
      </figure>
    </section>
    <section anchor="sec-security-considerations">
      <name>Security Considerations</name>
      <t>Security considerations are inherited from the ACE framework for Authentication and Authorization <xref target="I-D.ietf-ace-oauth-authz"/>, from <xref target="RFC8392"/> as to the usage of CWTs, from <xref target="RFC7519"/> as to the usage of JWTs, from <xref target="RFC7641"/> as to the usage of CoAP Observe, and from <xref target="RFC6920"/> with regard to resource naming through hashes. The following considerations also apply.</t>
      <t>The Authorization Server MUST ensure that each registered device can access and retrieve only its pertaining portion of the TRL. To this end, the Authorization Server can perform the required filtering based on the authenticated identity of the registered device, i.e., a (non-public) identifier that the Authorization Server can securely relate to the registered device and the secure association that they use to communicate.</t>
      <t>Disclosing any information about revoked Access Tokens to entities other than the intended registered devices may result in privacy concerns. Therefore, the Authorization Server MUST ensure that, other than registered devices accessing their own pertaining portion of the TRL, only authorized and authenticated administrators can retrieve the full TRL. To this end, the Authorization Server may rely on an access control list or similar.</t>
      <t>If a registered device has many non-expired Access Tokens associated with itself that are revoked, the pertaining portion of the TRL could grow to a size bigger than what the registered device is prepared to handle upon reception, especially if relying on a full query of the TRL resource (see <xref target="ssec-trl-full-query"/>). This could be exploited by attackers to negatively affect the behavior of a registered device. Issuing Access Tokens with not too long expiration time could help reduce the size of a TRL, but an Authorization Server SHOULD take measures to limit this size.</t>
      <t>Most of the communication about revoked Access Tokens presented in this specification relies on CoAP Observe Notifications sent from the Authorization Server to a registered device. The suppression of those notifications by an external attacker that has access to the network would prevent registered devices from ever knowing that their pertaining Access Tokens have been revoked. In order to avoid this, a registered device SHOULD NOT rely solely on the CoAP Observe notifications. In particular, a registered device SHOULD also regularly poll the Authorization Server for the most current information about revoked Access Tokens, by sending GET requests to the TRL endpoint according to a related application policy.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document has the following actions for IANA.</t>
      <t>Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]" with
the RFC number of this specification and delete this paragraph.</t>
      <section anchor="iana-media-type">
        <name>Media Type Registrations</name>
        <t>IANA is asked to register the media type "application/ace-trl+cbor" for messages of the protocols defined in this document encoded in CBOR. This registration follows the procedures specified in <xref target="RFC6838"/>.</t>
        <t>Type name: application</t>
        <t>Subtype name: ace-trl+cbor</t>
        <t>Required parameters: N/A</t>
        <t>Optional parameters: N/A</t>
        <t>Encoding considerations: Must be encoded as CBOR map containing the protocol parameters defined in [RFC-XXXX].</t>
        <t>Security considerations: See <xref target="sec-security-considerations"/> of this document.</t>
        <t>Interoperability considerations: N/A</t>
        <t>Published specification: [RFC-XXXX]</t>
        <t>Applications that use this media type: The type is used by Authorization Servers, Clients and Resource Servers that support the notification of revoked Access Tokens, according to a Token Revocation List maintained by the Authorization Server as specified in [RFC-XXXX].</t>
        <t>Fragment identifier considerations: N/A</t>
        <t>Additional information: N/A</t>
        <t>Person &amp; email address to contact for further information: &lt;iesg@ietf.org&gt;</t>
        <t>Intended usage: COMMON</t>
        <t>Restrictions on usage: None</t>
        <t>Author: Marco Tiloca &lt;marco.tiloca@ri.se&gt;</t>
        <t>Change controller: IESG</t>
      </section>
      <section anchor="iana-content-type">
        <name>CoAP Content-Formats Registry</name>
        <t>IANA is asked to add the following entry to the "CoAP Content-Formats" registry within the "CoRE Parameters" registry group.</t>
        <t>Media Type: application/ace-trl+cbor</t>
        <t>Encoding: -</t>
        <t>ID: TBD</t>
        <t>Reference: [RFC-XXXX]</t>
      </section>
      <section anchor="iana-token-revocation-list">
        <name>ACE Token Revocation List Parameters Registry</name>
        <t>This specification establishes the "ACE Token Revocation List Parameters" IANA registry. The
registry has been created to use the "Expert Review" registration procedure <xref target="RFC8126"/>. Expert Review guidelines are provided in <xref target="review"/>. It should be noted that, in addition to the Expert Review, some portions of the registry require a specification, potentially a Standards Track RFC, to be supplied as well.</t>
        <t>The columns of this registry are:</t>
        <ul spacing="normal">
          <li>Name: This is a descriptive name that enables easier reference to the item. The name MUST be unique. It is not used in the encoding.</li>
          <li>CBOR Value: This is the value used as CBOR abbreviation of the item. These values MUST be unique. The value can be a positive integer or a negative integer. Different ranges of values use different registration policies <xref target="RFC8126"/>. Integer values from -256 to 255 are designated as Standards Action. Integer values from -65536 to -257 and from 256 to 65535 are designated as Specification Required. Integer values greater than 65535 are designated as Expert Review. Integer values less than -65536 are marked as Private Use.</li>
          <li>CBOR Type: This contains the CBOR type of the item, or a pointer to the registry that defines its type, when that depends on another item.</li>
          <li>Reference: This contains a pointer to the public specification for the item.</li>
        </ul>
        <t>This registry has been initially populated by the values in <xref target="trl-registry-parameters"/>. The "Reference" column for all of these entries refers to this document.</t>
      </section>
      <section anchor="iana-token-revocation-list-errors">
        <name>ACE Token Revocation List Errors</name>
        <t>This specification establishes the "ACE Token Revocation List Errors" IANA registry. The registry has been created to use the "Expert Review" registration procedure <xref target="RFC8126"/>. Expert Review guidelines are provided in <xref target="review"/>. It should be noted that, in addition to the Expert Review, some portions of the registry require a specification, potentially a Standards Track RFC, to be supplied as well.</t>
        <t>The columns of this registry are:</t>
        <ul spacing="normal">
          <li>Value: The value to be used to identify the error. The value MUST be unique. The value can be a positive integer or a negative integer. Integer values between 0 and 255 are designated as Standards Track Document required. Integer values from 256 to 65535 are designated as Specification Required. Integer values greater than 65535 are designated as Expert Review. Integer values less than -65536 are marked as private use.</li>
          <li>Description: This field contains a brief description of the error.</li>
          <li>Reference: This field contains a pointer to the public specification defining the error, if one exists.</li>
        </ul>
        <t>This registry has been initially populated by the values in <xref target="error-types"/>. The "Reference" column for all of these entries refers to this document.</t>
      </section>
      <section anchor="review">
        <name>Expert Review Instructions</name>
        <t>The IANA registries established in this document is defined as Expert Review. This section gives some general guidelines for what the experts should be looking for, but they are being designated as experts for a reason so they should be given substantial latitude.</t>
        <t>Expert reviewers should take into consideration the following points:</t>
        <ul spacing="normal">
          <li>Point squatting should be discouraged. Reviewers are encouraged to get sufficient information for registration requests to ensure that the usage is not going to duplicate one that is already registered and that the point is likely to be used in deployments. The zones tagged as private use are intended for testing purposes and closed environments. Code points in other ranges should not be assigned for testing.</li>
          <li>Specifications are required for the Standards Track range of point assignment. Specifications should exist for Specification Required ranges, but early assignment before a specification is available is considered to be permissible. Specifications are needed for the Expert Review range if they are expected to be used outside of closed environments in an interoperable way. When specifications are not provided, the description provided needs to have sufficient information to identify what the point is being used for.</li>
          <li>Experts should take into account the expected usage of fields when approving point assignment. The fact that there is a range for Standards Track documents does not mean that a Standards Track document cannot have points assigned outside of that range. The length of the encoded value should be weighed against how many code points of that length are left, the size of device it will be used on, and the number of code points left that encode to that size.</li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="I-D.ietf-ace-oauth-authz" target="https://www.ietf.org/archive/id/draft-ietf-ace-oauth-authz-46.txt">
          <front>
            <title>Authentication and Authorization for Constrained Environments (ACE) using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="Ludwig Seitz">
              <organization>Combitech</organization>
            </author>
            <author fullname="Goeran Selander">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Erik Wahlstroem">
	 </author>
            <author fullname="Samuel Erdtman">
              <organization>Spotify AB</organization>
            </author>
            <author fullname="Hannes Tschofenig">
              <organization>Arm Ltd.</organization>
            </author>
            <date day="8" month="November" year="2021"/>
            <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="Internet-Draft" value="draft-ietf-ace-oauth-authz-46"/>
        </reference>
        <reference anchor="I-D.ietf-core-conditional-attributes" target="https://www.ietf.org/archive/id/draft-ietf-core-conditional-attributes-04.txt">
          <front>
            <title>Conditional Attributes for Constrained RESTful Environments</title>
            <author fullname="Michael Koster">
              <organization>Dogtiger Labs</organization>
            </author>
            <author fullname="Alan Soloway">
              <organization>Qualcomm Technologies</organization>
            </author>
            <author fullname="Bilhanan Silverajan">
              <organization>Tampere University</organization>
            </author>
            <date day="10" month="May" year="2022"/>
            <abstract>
              <t>   This specification defines Conditional Notification and Control
   Attributes that work with CoAP Observe (RFC7641).

Editor note

   The git repository for the draft is found at https://github.com/core-
   wg/conditional-attributes/

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-conditional-attributes-04"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <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="RFC6749" target="https://www.rfc-editor.org/info/rfc6749">
          <front>
            <title>The OAuth 2.0 Authorization Framework</title>
            <author fullname="D. Hardt" initials="D." role="editor" surname="Hardt">
              <organization/>
            </author>
            <date month="October" year="2012"/>
            <abstract>
              <t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf.  This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6749"/>
          <seriesInfo name="DOI" value="10.17487/RFC6749"/>
        </reference>
        <reference anchor="RFC6838" target="https://www.rfc-editor.org/info/rfc6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed">
              <organization/>
            </author>
            <author fullname="J. Klensin" initials="J." surname="Klensin">
              <organization/>
            </author>
            <author fullname="T. Hansen" initials="T." surname="Hansen">
              <organization/>
            </author>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols.  This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC6920" target="https://www.rfc-editor.org/info/rfc6920">
          <front>
            <title>Naming Things with Hashes</title>
            <author fullname="S. Farrell" initials="S." surname="Farrell">
              <organization/>
            </author>
            <author fullname="D. Kutscher" initials="D." surname="Kutscher">
              <organization/>
            </author>
            <author fullname="C. Dannewitz" initials="C." surname="Dannewitz">
              <organization/>
            </author>
            <author fullname="B. Ohlman" initials="B." surname="Ohlman">
              <organization/>
            </author>
            <author fullname="A. Keranen" initials="A." surname="Keranen">
              <organization/>
            </author>
            <author fullname="P. Hallam-Baker" initials="P." surname="Hallam-Baker">
              <organization/>
            </author>
            <date month="April" year="2013"/>
            <abstract>
              <t>This document defines a set of ways to identify a thing (a digital object in this case) using the output from a hash function.  It specifies a new URI scheme for this purpose, a way to map these to HTTP URLs, and binary and human-speakable formats for these names. The various formats are designed to support, but not require, a strong link to the referenced object, such that the referenced object may be authenticated to the same degree as the reference to it.  The reason for this work is to standardise current uses of hash outputs in URLs and to support new information-centric applications and other uses of hash outputs in protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6920"/>
          <seriesInfo name="DOI" value="10.17487/RFC6920"/>
        </reference>
        <reference anchor="RFC7252" target="https://www.rfc-editor.org/info/rfc7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <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="RFC7641" target="https://www.rfc-editor.org/info/rfc7641">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <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="RFC8259" target="https://www.rfc-editor.org/info/rfc8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray">
              <organization/>
            </author>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format.  It was derived from the ECMAScript Programming Language Standard.  JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC7519" target="https://www.rfc-editor.org/info/rfc7519">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones">
              <organization/>
            </author>
            <author fullname="J. Bradley" initials="J." surname="Bradley">
              <organization/>
            </author>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura">
              <organization/>
            </author>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties.  The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </reference>
        <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton">
              <organization/>
            </author>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <author fullname="T. Narten" initials="T." surname="Narten">
              <organization/>
            </author>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters.  To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper.  For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed.  This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <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="RFC8392" target="https://www.rfc-editor.org/info/rfc8392">
          <front>
            <title>CBOR Web Token (CWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones">
              <organization/>
            </author>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem">
              <organization/>
            </author>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
              <organization/>
            </author>
            <date month="May" year="2018"/>
            <abstract>
              <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties.  The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection.  A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value.  CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8392"/>
          <seriesInfo name="DOI" value="10.17487/RFC8392"/>
        </reference>
        <reference anchor="RFC8610" target="https://www.rfc-editor.org/info/rfc8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz">
              <organization/>
            </author>
            <author fullname="C. Vigano" initials="C." surname="Vigano">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049).  Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman">
              <organization/>
            </author>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049.  It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="Named.Information.Hash.Algorithm" target="https://www.iana.org/assignments/named-information/named-information.xhtml">
          <front>
            <title>Named Information Hash Algorithm</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC7009" target="https://www.rfc-editor.org/info/rfc7009">
          <front>
            <title>OAuth 2.0 Token Revocation</title>
            <author fullname="T. Lodderstedt" initials="T." role="editor" surname="Lodderstedt">
              <organization/>
            </author>
            <author fullname="S. Dronia" initials="S." surname="Dronia">
              <organization/>
            </author>
            <author fullname="M. Scurtescu" initials="M." surname="Scurtescu">
              <organization/>
            </author>
            <date month="August" year="2013"/>
            <abstract>
              <t>This document proposes an additional endpoint for OAuth authorization servers, which allows clients to notify the authorization server that a previously obtained refresh or access token is no longer needed. This allows the authorization server to clean up security credentials.  A revocation request will invalidate the actual token and, if applicable, other tokens based on the same authorization grant.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7009"/>
          <seriesInfo name="DOI" value="10.17487/RFC7009"/>
        </reference>
        <reference anchor="I-D.bormann-t2trg-stp" target="https://www.ietf.org/archive/id/draft-bormann-t2trg-stp-03.txt">
          <front>
            <title>The Series Transfer Pattern (STP)</title>
            <author fullname="Carsten Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Klaus Hartke">
              <organization>Ericsson</organization>
            </author>
            <date day="7" month="April" year="2020"/>
            <abstract>
              <t>   Many applications make use of Series of data items, i.e., an array of
   data items where new items can be added over time.  Where such Series
   are to be made available using REST protocols such as CoAP or HTTP,
   the Series has to be mapped into a structure of one or more resources
   and a protocol for a client to obtain the Series and to learn about
   new items.

   Various protocols have been standardized that make Series-shaped data
   available, with rather different properties and objectives.  The
   present document is an attempt to extract a common underlying pattern
   and to define media types and an access scheme that can be used right
   away for further protocols that provide Series-shaped data.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-t2trg-stp-03"/>
        </reference>
      </references>
    </references>
    <section anchor="sec-series-pattern">
      <name>On using the Series Transfer Pattern</name>
      <t>Performing a diff query of the TRL as specified in <xref target="ssec-trl-diff-query"/> is in fact a usage example of the Series Transfer Pattern defined in <xref target="I-D.bormann-t2trg-stp"/>.</t>
      <t>That is, a diff query enables the transfer of a series of TRL updates, with the Authorization Server specifying U &lt;= N_MAX diff entries as the U most recent updates to the portion of the TRL pertaining to a requester, i.e., a registered device or an administrator.</t>
      <t>When responding to a diff query request from a requester (see <xref target="ssec-trl-diff-query"/>), 'diff_set' is a subset of the update collection associated with the requester, where each 'diff_entry' record is a series item from that update collection. Note that 'diff_set' specifies the whole current update collection when the value of U is equal to SIZE, i.e., the current number of series items in the update collection.</t>
      <t>The value N of the query parameter 'diff' in the GET request allows the requester and the Authorization Server to trade the amount of provided information with the latency of the information transfer.</t>
      <t>Since the update collection associated with each requester includes up to N_MAX series item, the Authorization Server deletes the oldest series item when a new one is generated and added to the end of the update collection, due to a new TRL update pertaining to that requester (see <xref target="sec-trl-endpoint-supporting-diff-queries"/>). This addresses the question "When can the server decide to no longer retain older items?" raised in <xref section="3.2" sectionFormat="of" target="I-D.bormann-t2trg-stp"/>.</t>
      <t>Furthermore, performing a diff query of the TRL together with the "Cursor" extension as specified in <xref target="sec-using-cursor"/> in fact relies on the "Cursor" pattern of the Series Transfer Pattern (see <xref section="3.3" sectionFormat="of" target="I-D.bormann-t2trg-stp"/>).</t>
    </section>
    <section anchor="sec-document-updates">
      <name>Document Updates</name>
      <t>RFC EDITOR: Please remove this section.</t>
      <section anchor="sec-01-02">
        <name>Version -01 to -02</name>
        <ul spacing="normal">
          <li>Earlier mentioning of error cases.</li>
          <li>Clearer distinction between maintaining the history of TRL updates and preparing the response to a diff query.</li>
          <li>Defined the use of "cursor" in the document body, as an extension of diff queries.</li>
          <li>Both success and error responses have a CBOR map as payload.</li>
          <li>Corner cases of message processing explained more explcitly.</li>
          <li>Clarifications and editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-00-01">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>Added actions to perform upon receiving responses from the TRL endpoint.</li>
          <li>Fixed off-by-one error when using the "Cursor" pattern.</li>
          <li>Improved error handling, with registered error codes.</li>
          <li>Section restructuring (full- and diff-query as self-standing sections).</li>
          <li>Renamed identifiers and CBOR parameters.</li>
          <li>Clarifications and editorial improvements.</li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowldegment">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <contact fullname="Christian Amsüss"/>, <contact fullname="Carsten Bormann"/>, <contact fullname="Benjamin Kaduk"/>, <contact fullname="David Navarro"/>, <contact fullname="Marco Rasori"/>, <contact fullname="Michael Richardson"/>, <contact fullname="Jim Schaad"/>, <contact fullname="Göran Selander"/> and <contact fullname="Travis Spencer"/> 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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
l4y4iBS0NC0B2T9fl6CVrC7EBme3Cpp+/rDdesbBCN6mZHw/p9OoicFijRQs
tdY4UfFbxWs1Et0SQGb/xLyOpqXSLusZ80IcFYA/UZGYWqjy4gkP/M4VKzyV
ii3Cg7x0Y1UOUMOacevYLlog/eHkwgS82HIj/Vcr0druec5+6kLRVDvBll7i
9ij49gqYA75VZG3LV9MpapHsstZemcK3atIyyKkAK2K+LeCuRXQrRx4740aM
sfyw3oPsrAN/wygqWhYtq9PIyB5VRBJLV6idNGN7heRdB+mA3oJEpX4Qklag
jTlKqV+ZompEqrc4MvVC1/Eo458iBxWgL6pRQxg0v/rwYfu3Or6yAG5O4ISh
cV0MZtj9hCaMguytoPWNJ47i6dRMTN4EFZMFhJ7lNghiPFDIEH2yaRtJoLND
4xrhQwuJmFgRqWoWd2joKpWbdz06ufaQZfVVywDumOC5Xs5FMjRBFgDnTssV
8MErYWFFx+S5WmSaLbXOP82zhVkBYW0d7CHxKzpuTUfwbMe8BQX3NKs4c8m0
QLSweQ+aS+icLgbVyblvURRWwuQqnMw9SGCYSOQ/15Q+N/Fvv4rF239MwUnc
qRiYWpDqSZj12WJYdCMOllqo57Abm11pDbBwCLYliuDPj15muTHDZbsWvWmt
UgdjuyicrDQQQnN1PUIPP4LFuJROcH+yymkJfrxBKgeNtSBbk3yUhUQlyQbP
0llWy7WxDqKNRf+madEhR7ViB96QAcW8vOYGp/+AKWoohUxSfbCuC8JaFKzl
/ftpPBtqDcyKRZB/uxDdbUi6W6C/NZof/gnnbAwLUoQsja7hmgXhwePi636Q
E8l1alQZwL1hbaYYu135AjsDAESW2tFzWb4nhwUWtgt0s8eku68zyCy+Ocfv
5/LAfB+1dA5joVYxCk6QUURZyQSVqobbJgR4xDnTWSMEpZ2shcd0EhfXFWcr
gQkJp/e/qh+TiGr/fDX0/nzlffgXP7h/WTtytm7kysGEsyDmHQbvEZIASPj/
/gfvW87aep69fLXhHz2ctLHZzf7Ad62VyhPyifmjelc/I3/QS73gbWP+txv+
0atv+ysbEJv+0fvFdWbB2n7RHoVd+sPYoNY3e7VvenUw/mIDC/8QlNlt/QaG
vKUdNSCKP4fmH+eX2u/y2Johyl3vEOX+hkOM5McZYmT9rB2i9lPueR9tHWK0
+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
w9CH13Wl/e5869323cAt8rfGb15TtP1dg+wjYfSoO06Yk9jlgohxP3i0t4N+
vqNCAiMUVqMyDDDM8fcXEgNZcskqmBBxG3Yyhr2O5lvl7rbUYdMf7MEHkUoz
WTtWbhmyEz9wa80bjuDWP5cYmategCiglKm9Boe547RkIDq2jbEm4x7uUvWK
aTzDD4/O7YIrFrs2VSi0Xcrin7x7tvMh5DibrzFDrQwKMPnr/hyd93659ktB
8Au8ZcepDoMXz0H6rn3rq+G1f/79l5uu8HfXn+wr71zEtI9fnhxdnDxug4bv
RxeYCd5f5y34wZos7ftq+8pi74dBn/XSe/BZf7D2LWbo8FYxD4d7Bw/glTVz
CTc+DHZ3Nlzhh7ax1u1rzVvoaxDPzGFQX0z7XJMsXB7euxcWI6HDETDEexXU
7jXf+hVhL1dEen52cXJmQef+Xhs0+KdeOqkjH93eVzeet8wV1Kt+/7jRW91Y
1D6X+9NKXp/NW+0/zltbLVIMtMRiBeLU/xZZRLZrA2xOKbIFYvvl+fan29dn
CMObvrXlMYjFG7Dd/tbmc30KDnCw372vfyoHqDS+Oi/4wgE63qrh4d6vAQ8f
3O/e12eCh4OgMjp+dN/aHA0/AY/6F8LeJhtlh2Cx3fnWxnN9Cuz9+qB7X58F
9u594aKdP+u4qBcNPy88fPige1//bfT5rrfqtUyNX0bXMbX98egc6vD2NIqV
YmK7yqkBkNMBaBM30Z7rJoK/b8NR5PW8i3+57tyuOo6ffbPfKKXcyNemzjza
ryrZlE3XqnO9iUM8TqDZFzZuScL44txqXeGtObfWebe+OLc2WeGvzLn1P5FI
v9m33/oVYe+vw7nl1BP/4tza7OeLc2vTt9p/vripPi0tb/pW7edvWJTfdXL9
uO6tdrbxhW90vfXFJWZG+JxwHl0SP67Tvr5Qyi281f7TeGsj/9tnRSmfm/vt
lijFwvcBaozXp5Qv9PWPeqv9Zx19+R2LnxV9fW5uxVumr71r0dctUeW6Ff5D
6avrrVZ36XCvzWHa4ffsdph25dXRDcnqRpE1h8eVul9zpe5/0py7i3nVQopy
/KsiYlb5H/fKXKerEw3T9lsbXMptxSn8Oean6jTKmj93ZG52xoVcL5AGzlxf
Mwwuw5jvCeCVOJ3jKeWbLSKmW3p8I1BfsPCnRTuXf+kI06x+07wzSRq+rC5f
+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
9kJOAQA=

-->

</rfc>
