<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-ohai-chunked-ohttp-07" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="Chunked OHTTP">Chunked Oblivious HTTP Messages</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-ohai-chunked-ohttp-07"/>
    <author fullname="Tommy Pauly">
      <organization>Apple</organization>
      <address>
        <email>tpauly@apple.com</email>
      </address>
    </author>
    <author fullname="Martin Thomson">
      <organization>Mozilla</organization>
      <address>
        <email>mt@lowentropy.net</email>
      </address>
    </author>
    <date year="2026" month="January" day="22"/>
    <area>ART</area>
    <workgroup>OHAI Working Group</workgroup>
    <abstract>
      <?line 40?>

<t>This document defines a variant of the Oblivious HTTP message format that allows
chunks of requests and responses to be encrypted and decrypted before the entire
request or response is processed. This allows incremental processing of Oblivious
HTTP messages, which is particularly useful for handling large messages or systems
that process messages slowly.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-ohai.github.io/draft-ohai-chunked-ohttp/draft-ietf-ohai-chunked-ohttp.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-ohai-chunked-ohttp/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        OHAI Working Group mailing list (<eref target="mailto:ohai@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/ohai/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/ohai/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-ohai/draft-ohai-chunked-ohttp"/>.</t>
    </note>
  </front>
  <middle>
    <?line 48?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Oblivious HTTP <xref target="OHTTP"/> defines a system for sending HTTP requests
and responses as encrypted messages. Clients send requests via a relay to a gateway, which
is able to decrypt and forward the request to a target server. Responses are encrypted
with an ephemeral symmetric key by the gateway and sent back to the client via the relay.
The messages are protected with Hybrid Public Key Encryption (HPKE; <xref target="HPKE"/>),
and are intended to prevent the gateway from linking any two independent requests to the
same client.</t>
      <t>The definition of Oblivious HTTP in <xref target="OHTTP"/> encrypts messages such that entire request
and response bodies need to be received before any of the content can be decrypted. This
is well-suited for many of the use cases of Oblivious HTTP, such as DNS queries or metrics
reporting.</t>
      <t>However, some applications of Oblivious HTTP can benefit from being able to encrypt and
decrypt parts of the messages in chunks. If a request or response can be processed by a
receiver in separate parts, and is particularly large or will be generated slowly, then
sending a series of encrypted chunks can improve the performance of applications.</t>
      <t>Incremental delivery of responses allows an Oblivious Gateway Resource to provide
Informational (1xx) responses (<xref section="15.2" sectionFormat="of" target="HTTP"/>).</t>
      <t>This document defines an optional message format for Oblivious HTTP that supports the
progressive creation and processing of both requests and responses. New media types are
defined for this purpose.</t>
      <section anchor="applicability">
        <name>Applicability</name>
        <t>Like the non-chunked variant, chunked Oblivious HTTP has limited applicability
as described in <xref section="2.1" sectionFormat="of" target="OHTTP"/>, and requires the use of a willing
Oblivious Relay Resource and Oblivious Gateway Resource.</t>
        <t>Chunked Oblivious HTTP is intended to be used in cases for where the privacy
properties of Oblivious HTTP are needed -- specifically, removing linkage
at the transport layer between separate HTTP requests -- but incremental
processing is also needed for performance or functionality.</t>
        <t>One specific functional capability that requires chunked Oblivious HTTP
is support for Informational (1xx) responses
(<xref section="15.2" sectionFormat="of" target="HTTP"/>).</t>
        <t>In order to be useful, the content of chunked Oblivious HTTP needs to be
possible to process incrementally. Since incremental processing means that the
message might end up being truncated, for example in the case of an error on the
underlying transport, applications also need to be prepared to safely handle
incomplete messages (see <xref target="security"/> for more discussion). Choices about how
the inner content is structured can be made independently of this chunked
format; that is, Binary HTTP chunks do need not to align with those
of OHTTP.</t>
        <t>Applications that use the Indeterminate format of Binary HTTP (<xref section="3.2" sectionFormat="of" target="BHTTP"/>) are well-suited to using chunked Oblivious HTTP as it enables
incremental construction of messages.  That only applies to construction; how a
message can be processed after decryption depends on how the format is
processed.  Binary HTTP messages in any format (either Known- or
Indeterminate-Length) can be incrementally processed.</t>
        <t>Chunked Oblivious HTTP is not intended to be used for long-lived sessions
between clients and servers that might build up state, or as a replacement
for a proxied TLS session.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>Notational conventions from <xref target="OHTTP"/> are used in this document.</t>
    </section>
    <section anchor="chunked-requests-and-responses">
      <name>Chunked Requests and Responses</name>
      <t>Chunked Oblivious HTTP defines different media types than the non-chunked variant.
These media types are "message/ohttp-chunked-req" (defined in <xref target="iana-req"/>)
and "message/ohttp-chunked-res" (defined in <xref target="iana-res"/>).
If a request uses the media type "message/ohttp-chunked-req",
a successful corresponding response <bcp14>MUST</bcp14> use the media type "message/ohttp-chunked-res".</t>
      <t>Use cases that require the use of Chunked OHTTP <bcp14>SHOULD</bcp14> only use the chunked
media types for their requests, to indicate that Chunked OHTTP is required.
If the gateway unexpectedly does not support Chunked OHTTP, then the request
will fail as if OHTTP as a whole were not supported. If clients retry requests
with the non-chunked media type, a gateway could partition client anonymity
sets by rejecting some requests and accepting others.</t>
      <t>Chunked OHTTP requests and responses <bcp14>SHOULD</bcp14> include the
<tt>Incremental</tt> header field <xref target="INCREMENTAL"/>
in order to signal to intermediaries (such as the relay) that the content of
the messages are intended to be delivered incrementally. Without this signal,
intermediaries might buffer request or response body until complete, removing
the benefits of using Chunked OHTTP.</t>
      <t>Chunked OHTTP messages generally will not include a <tt>Content-Length</tt> header field,
since the complete length of all chunks might not be known ahead of time.</t>
      <t>For example, a Chunked OHTTP request could look like the following:</t>
      <sourcecode type="http-message"><![CDATA[
POST /request.example.net/proxy HTTP/1.1
Host: proxy.example.org
Content-Type: message/ohttp-chunked-req
Incremental: ?1
Transfer-Encoding: chunked

<content is an Encapsulated Request>
]]></sourcecode>
      <t>Implementations <bcp14>MUST</bcp14> support receiving chunks that contain 2<sup>14</sup> (16384) octets
of data prior to encapsulation. Senders of chunks <bcp14>SHOULD</bcp14> limit their chunks to
this size, unless they are aware of support for larger sizes by the receiving
party.</t>
    </section>
    <section anchor="request">
      <name>Request Format</name>
      <t>Chunked OHTTP requests start with the same header as used for the non-chunked variant,
which consists of a key ID, algorithm IDs, and the KEM shared secret. This header is
followed by chunks of data protected with HPKE, each of which is preceded by a
variable-length integer (as defined in <xref section="16" sectionFormat="of" target="QUIC"/>)
that indicates the length of the chunk.</t>
      <t>The final chunk is preceded by a length field with the value 0,
which means the chunk extends to the end of the outer stream.
This format relies on its length being indicated
by the protocol that carries the message;
for HTTP, the final chunk ends at the end of the HTTP message content.</t>
      <figure anchor="fig-enc-request">
        <name>Chunked Encapsulated Request Format</name>
        <artwork><![CDATA[
Chunked Encapsulated Request {
  Chunked Request Header (56 + 8 * Nenc),
  Chunked Request Chunks (..),
}

Chunked Request Header {
  Key Identifier (8),
  HPKE KEM ID (16),
  HPKE KDF ID (16),
  HPKE AEAD ID (16),
  KEM Encapsulated Key (8 * Nenc),
}

Chunked Request Chunks {
  Non-Final Request Chunk (..) ...,
  Final Request Chunk Indicator (i) = 0,
  HPKE-Protected Final Chunk (..),
}

Non-Final Request Chunk {
  Length (i) = 1..,
  HPKE-Protected Chunk (..),
}
]]></artwork>
      </figure>
      <t>The content of the HPKE-protected chunks is defined in <xref target="request-encap"/>.</t>
    </section>
    <section anchor="response">
      <name>Response Format</name>
      <t>Chunked OHTTP responses start with a nonce, followed by chunks of data protected with
an AEAD. Each chunk is preceded by a variable-length integer that indicates the length
of the chunk.</t>
      <t>The final chunk is preceded by a length field with the value 0,
which means the chunk extends to the end of the outer stream.</t>
      <figure anchor="fig-enc-response">
        <name>Chunked Encapsulated Response Format</name>
        <artwork><![CDATA[
Chunked Encapsulated Response {
  Response Nonce (8 * max(Nn, Nk)),
  Chunked Response Chunks (..),
}

Chunked Response Chunks {
  Non-Final Response Chunk (..) ...,
  Final Response Chunk Indicator (i) = 0,
  AEAD-Protected Final Response Chunk (..),
}

Non-Final Response Chunk {
  Length (i) = 1..,
  AEAD-Protected Chunk (..),
}
]]></artwork>
      </figure>
    </section>
    <section anchor="chunks">
      <name>Encapsulation of Chunks</name>
      <t>The encapsulation of chunked Oblivious HTTP requests and responses uses
the same approach as the non-chunked variant, with the difference that
the bodies of requests and responses are sealed and opened in chunks, instead
of as a whole.</t>
      <t>The AEAD that protects both requests and responses protects individual chunks from
modification or truncation. Additionally, chunk authentication protects two other
pieces of information:</t>
      <ol spacing="normal" type="1"><li>
          <t>the order of the chunks (the sequence number of each chunk), which is
included in the nonce of each chunk.</t>
        </li>
        <li>
          <t>which chunk is the final chunk, which is indicated by a sentinel
in the Additional Authenticated Data (AAD)
of the final chunk.</t>
        </li>
      </ol>
      <t>The format of the outer packaging that carries the chunks (the length prefix for each
chunk specifically) is not explicitly authenticated. This allows the chunks to be
transported by alternative means, and still be valid as long as the order and
finality are preserved.  In particular, the variable-length encoding used for lengths
allows for different expressions of the same value, where the choice between
equivalent encodings is not authenticated.</t>
      <t>When translating from an HTTP message that is already divided into chunks --
such as the chunked transfer coding in HTTP/1.1
(<xref section="7.1" sectionFormat="of" target="RFC9112"/>)
or DATA frames in HTTP/2 or HTTP/3
(<xref section="6.1" sectionFormat="of" target="RFC9113"/> and <xref section="7.2.1" sectionFormat="of" target="RFC9114"/>) --
there is no expectation that any chunks align.
As noted in <xref target="applicability"/>,
the chunking of the encapsulated binary HTTP message
and the binary HTTP message do not need to be aligned.</t>
      <t>A non-final chunk <bcp14>MUST NOT</bcp14> contain a zero-length plaintext.
A receiver <bcp14>MUST</bcp14> treat the receipt of a chunk that contains no data
as equivalent to a decryption error,
unless that chunk is the final chunk.</t>
      <section anchor="request-encap">
        <name>Request Encapsulation</name>
        <t>For requests, the setup of the HPKE context and the encrypted request header
is the same as the non-chunked variant. This is the Chunked Request Header
defined in <xref target="request"/>.</t>
        <artwork><![CDATA[
hdr = concat(encode(1, key_id),
             encode(2, kem_id),
             encode(2, kdf_id),
             encode(2, aead_id))
info = concat(encode_str("message/bhttp chunked request"),
              encode(1, 0),
              hdr)
enc, sctxt = SetupBaseS(pkR, info)
enc_request_hdr = concat(hdr, enc)
]]></artwork>
        <t>Each chunk is sealed using the HPKE context. For non-final chunks, the AAD
is empty.</t>
        <artwork><![CDATA[
sealed_chunk = sctxt.Seal("", chunk)
sealed_chunk_len = varint_encode(len(sealed_chunk))
non_final_chunk = concat(sealed_chunk_len, sealed_chunk)
]]></artwork>
        <t>The final chunk in a request uses an AAD of the ASCII string "final" (0x66696e616c)
and is prefixed with a zero length.</t>
        <artwork><![CDATA[
sealed_final_chunk = sctxt.Seal("final", chunk)
final_chunk = concat(varint_encode(0), sealed_final_chunk)
]]></artwork>
        <t>HPKE already maintains a sequence number for sealing operations as part of
the context, so the order of chunks is protected. HPKE will produce an
error if the sequence number overflows, which puts a limit on the number
of chunks that can be sent in a request.</t>
      </section>
      <section anchor="response-encap">
        <name>Response Encapsulation</name>
        <t>For responses, the first piece of data sent back is the response nonce,
as in the non-chunked variant. As in the non-chunked variant, the length
of the nonce is <tt>max(Nn, Nk)</tt>, where <tt>Nn</tt> and <tt>Nk</tt> are the length of
the AEAD nonce and key.</t>
        <artwork><![CDATA[
entropy_len = max(Nn, Nk)
response_nonce = random(entropy_len)
]]></artwork>
        <t>Each chunk is sealed using the same AEAD key and AEAD nonce that are
derived for the non-chunked variant, which are calculated as follows:</t>
        <artwork><![CDATA[
secret = context.Export("message/bhttp chunked response", entropy_len)
salt = concat(enc, response_nonce)
prk = Extract(salt, secret)
aead_key = Expand(prk, "key", Nk)
aead_nonce = Expand(prk, "nonce", Nn)
]]></artwork>
        <t>The sender also maintains a counter of chunks, which is set to 0 for the first
chunk and incremented by 1 after encoding each chunk.</t>
        <artwork><![CDATA[
counter = 0
]]></artwork>
        <t>The AEAD nonce is XORed with the counter for encrypting (and decrypting) each
chunk.  For non-final chunks, the AAD is empty.</t>
        <artwork><![CDATA[
chunk_nonce = aead_nonce XOR encode(Nn, counter)
sealed_chunk = Seal(aead_key, chunk_nonce, "", chunk)
sealed_chunk_len = varint_encode(len(sealed_chunk))
non_final_chunk = concat(sealed_chunk_len, sealed_chunk)
counter++
]]></artwork>
        <t>The final chunk in a response uses an AAD of the string "final" and is prefixed
with a zero length.</t>
        <artwork><![CDATA[
chunk_nonce = aead_nonce XOR encode(Nn, counter)
sealed_final_chunk = Seal(aead_key, chunk_nonce, "final", chunk)
final_chunk = concat(varint_encode(0), sealed_final_chunk)
]]></artwork>
        <t>If the counter reached the maximum value that can be held in an
integer with <tt>Nn</tt> bytes (that maximum being 256<sup><tt>Nn</tt></sup>), where <tt>Nn</tt> is the
length of the AEAD nonce, the <tt>chunk_nonce</tt> would wrap and be reused.
Therefore, the response <bcp14>MUST NOT</bcp14> use 256<sup><tt>Nn</tt></sup> or more chunks.
However, this limit does not consider security margins; see <xref target="sec-limits"/>.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>In general, Chunked OHTTP inherits the same security considerations as Oblivious
HTTP <xref target="OHTTP"/>. Note specifically that while Chunked OHTTP allows for incremental
delivery and processing of messages, it does not add forward secrecy between
chunks. As with the non-chunked variant, forward secrecy is only provided when
changing the key configuration. This is particularly important when chunking is
used to enable interactivity.</t>
      <t>The use of Chunked OHTTP can be considered part of the configuration a client
knows about for a particular gateway. As such, the use of Chunked OHTTP falls
under the same consistency privacy considerations as the rest of the configuration
(see <xref section="7" sectionFormat="of" target="OHTTP"/>). Specifically, clients <bcp14>SHOULD NOT</bcp14> fall back from
Chunked OHTTP to the non-chunked variant if they are configured to used chunking.
Falling back would allow clients to have inconsistent behavior that could be used to partition client anonymity sets.</t>
      <section anchor="message-truncation">
        <name>Message Truncation</name>
        <t>The primary advantage of a chunked encoding is that chunked requests or responses can
be generated or processed incrementally.  However, for a recipient in particular,
processing an incomplete message can have security consequences.</t>
        <t>The potential for message truncation is not a new concern for HTTP.  All versions of
HTTP provide incremental delivery of messages.  For this use of Oblivious HTTP,
incremental processing that might result in side-effects demands particular attention
as Oblivious HTTP does not provide strong protection against replay attacks; see
<xref section="6.5" sectionFormat="of" target="OHTTP"/>.  Truncation might be the result of interference at the
network layer, or by a malicious Oblivious Relay Resource.</t>
        <t>Endpoints that receive chunked messages can perform early processing if the risks are
understood and accepted. Conversely, endpoints that depend on having a complete
message <bcp14>MUST</bcp14> ensure that they do not consider a message complete until having
received a chunk with a 0-valued length prefix, which was successfully decrypted
using the expected sentinel value, "final", in the AAD.</t>
      </section>
      <section anchor="interactivity-and-privacy">
        <name>Interactivity and Privacy</name>
        <t>Without chunking, Oblivious HTTP involves a single request and response, with no
further interactivity.  Using a chunked variant at both Client and Oblivious
Gateway Resource creates the possibility that an exchange could lead to multiple
rounds of interaction.  Information from early chunks from a peer could
influence how an endpoint constructs later chunks of their message.  However,
the use of Chunked OHTTP does not necessarily mean that exchanges will involve
interactivity.</t>
        <t>Interactivity for Chunked OHTTP can be defined as any case in which the response
can influence the timing or content of the request. To help explain this
distinction, the following scenarios can be used to understand different
modalities for requests and responses:</t>
        <ul spacing="normal">
          <li>
            <t>The request is sent as a single chunk, and the response is sent as a single
chunk. This is a non-interactive case that is identical to the non-chunked
variant.</t>
          </li>
          <li>
            <t>The request is sent as a single chunk, and the response is sent in multiple
chunks. This is a non-interactive case, because there is no possibility
that the client can influence its request based on the response content.</t>
          </li>
          <li>
            <t>The request is sent in multiple chunks, but either all chunks are sent before
a response chunk is received, or the sending of the chunks is not influenced
by the response chunks. This is a non-interactive case, since again the
client's request is not influenced by any response content.</t>
          </li>
          <li>
            <t>The request is sent in multiple chunks, at least one of which specifically
is sent after receiving -- and possibly processing -- a response chunk (or the complete response), where
the response influences the timing and/or content of the request chunk.
This is an interactive case.</t>
          </li>
        </ul>
        <t>In the interactive case, the Oblivious Gateway Resource can
observe the round trip time to the Client, which can change the privacy
assumptions of the system.</t>
        <t>Any interactivity also allows a network adversary (including the Oblivious Relay Resource)
to measure the round-trip delay from themselves to the Client.</t>
        <t>Client implementations therefore need to be aware of the possibility that
interactively processing chunks might reveal round-trip time information that
would be kept private in a non-interactive exchange.</t>
        <t>For cases when interactivity introduces unacceptable risks, the client can ensure that it never has an
interactive exchange, either by not sending its request in multiple chunks, or
by ensuring that the sending of request chunks cannot be influenced by the response.</t>
        <t>Interactivity that is deliberate might be acceptable. For instance, the
100-continue feature in HTTP, which has the client withhold the body of a
request until it receives a 100 Informational response, is not possible without
an interactive exchange.  This highlights the risks involved in the use of this
chunked encoding to adapt an existing HTTP-based interaction to use Oblivious HTTP
as such an adaptation might not achieve expected privacy outcomes.</t>
        <t>Interactivity does not inherently reduce replay risk unless the server
explicitly verifies that a client is live (such as by having the client echo
content from the response in its request).  A request that is generated
interactively can be replayed by a malicious relay.</t>
      </section>
      <section anchor="sec-limits">
        <name>Message Size Limits</name>
        <t>The security margins for many ciphers degrade
as more data is protected.
The total size of messages needs to be limited
to limit the ability of an attacker to compromise cipher
confidentiality and integrity.</t>
        <t>The multi-user analysis in <xref section="6" sectionFormat="of" target="AEAD-LIMITS"/>
describes a process for estimating limits on usage
that maintain security margins.
For instance, that analysis shows that to keep the Authenticated Encryption Advantage (AEA)
for AEAD_AES_GCM_128 below 2<sup>-50</sup>,
the total number of bytes protected by a key can be kept below 2<sup>80</sup>,
divided by the total number of bytes protected by any key.
Therefore, for a target advantage of 2<sup>-50</sup>,
no message can exceed 2<sup>40</sup> bytes
protected with AEAD_AES_GCM_128.</t>
        <t>The use of most AEAD ciphers is subject to a hard limit on ciphertext length.
For this format, this limit applies to each chunk
and is determined by the <tt>C_MAX</tt> parameter of the AEAD;
see <xref target="AEAD"/>.
AEAD ciphers also have a hard limit on the total number of chunks,
which is 256<sup>Nn</sup>.
These hard Limits on chunk size and count
apply to both request and response.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document updates the "Media Types" registry at
<eref target="https://iana.org/assignments/media-types">https://iana.org/assignments/media-types</eref> to add the media types
"message/ohttp-chunked-req" (<xref target="iana-req"/>), and
"message/ohttp-chunked-res" (<xref target="iana-res"/>), following the procedures of
<xref target="RFC6838"/>.</t>
      <section anchor="iana-req">
        <name>message/ohttp-chunked-req Media Type</name>
        <t>The "message/ohttp-chunked-req" identifies an encrypted binary HTTP request
that is transmitted or processed in chunks. This is a binary format that is
defined in <xref target="request"/>.</t>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>message</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>ohttp-chunked-req</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>"binary"</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>see <xref target="security"/></t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t>this specification</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Oblivious HTTP and applications that use Oblivious HTTP use this media type to
identify encapsulated binary HTTP requests that are incrementally generated or processed.</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl spacing="compact">
              <dt>Magic number(s):</dt>
              <dd>N/A</dd>
              <dt>Deprecated alias names for this type:</dt>
              <dd>N/A</dd>
              <dt>File extension(s):</dt>
              <dd>N/A</dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>N/A</dd>
            </dl>
          </dd>
          <dt>Person and email address to contact for further information:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-res">
        <name>message/ohttp-chunked-res Media Type</name>
        <t>The "message/ohttp-chunked-res" identifies an encrypted binary HTTP response
that is transmitted or processed in chunks. This is a binary format that
is defined in <xref target="response"/>.</t>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>message</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>ohttp-chunked-res</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>"binary"</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>see <xref target="security"/></t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t>this specification</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Oblivious HTTP and applications that use Oblivious HTTP use this media type to
identify encapsulated binary HTTP responses that are incrementally generated or processed.</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl spacing="compact">
              <dt>Magic number(s):</dt>
              <dd>N/A</dd>
              <dt>Deprecated alias names for this type:</dt>
              <dd>N/A</dd>
              <dt>File extension(s):</dt>
              <dd>N/A</dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>N/A</dd>
            </dl>
          </dd>
          <dt>Person and email address to contact for further information:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <displayreference target="RFC9112" to="HTTP/1.1"/>
    <displayreference target="RFC9113" to="HTTP/2"/>
    <displayreference target="RFC9114" to="HTTP/3"/>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="OHTTP">
          <front>
            <title>Oblivious HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="January" year="2024"/>
            <abstract>
              <t>This document describes Oblivious HTTP, a protocol for forwarding encrypted HTTP messages. Oblivious HTTP allows a client to make multiple requests to an origin server without that server being able to link those requests to the client or to identify the requests as having come from the same client, while placing only limited trust in the nodes used to forward the messages.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9458"/>
          <seriesInfo name="DOI" value="10.17487/RFC9458"/>
        </reference>
        <reference anchor="HPKE">
          <front>
            <title>Hybrid Public Key Encryption</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="K. Bhargavan" initials="K." surname="Bhargavan"/>
            <author fullname="B. Lipp" initials="B." surname="Lipp"/>
            <author fullname="C. Wood" initials="C." surname="Wood"/>
            <date month="February" year="2022"/>
            <abstract>
              <t>This document describes a scheme for hybrid public key encryption (HPKE). This scheme provides a variant of public key encryption of arbitrary-sized plaintexts for a recipient public key. It also includes three authenticated variants, including one that authenticates possession of a pre-shared key and two optional ones that authenticate possession of a key encapsulation mechanism (KEM) private key. HPKE works for any combination of an asymmetric KEM, key derivation function (KDF), and authenticated encryption with additional data (AEAD) encryption function. Some authenticated variants may not be supported by all KEMs. We provide instantiations of the scheme using widely used and efficient primitives, such as Elliptic Curve Diffie-Hellman (ECDH) key agreement, HMAC-based key derivation function (HKDF), and SHA2.</t>
              <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9180"/>
          <seriesInfo name="DOI" value="10.17487/RFC9180"/>
        </reference>
        <reference anchor="BHTTP">
          <front>
            <title>Binary Representation of HTTP Messages</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document defines a binary format for representing HTTP messages.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9292"/>
          <seriesInfo name="DOI" value="10.17487/RFC9292"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="INCREMENTAL">
          <front>
            <title>Incremental Forwarding of HTTP Messages</title>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple</organization>
            </author>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <date day="12" month="November" year="2025"/>
            <abstract>
              <t>   This document specifies the "Incremental" HTTP header field, which
   instructs HTTP intermediaries to forward the HTTP message
   incrementally.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-incremental-03"/>
        </reference>
        <reference anchor="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="AEAD-LIMITS">
          <front>
            <title>Usage Limits on AEAD Algorithms</title>
            <author fullname="Felix Günther" initials="F." surname="Günther">
              <organization>IBM Research Europe - Zurich</organization>
            </author>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="4" month="December" year="2025"/>
            <abstract>
              <t>   An Authenticated Encryption with Associated Data (AEAD) algorithm
   provides confidentiality and integrity.  Excessive use of the same
   key can give an attacker advantages in breaking these properties.
   This document provides simple guidance for users of common AEAD
   functions about how to limit the use of keys in order to bound the
   advantage given to an attacker.  It considers limits in both single-
   and multi-key settings.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-aead-limits-11"/>
        </reference>
        <reference anchor="AEAD">
          <front>
            <title>An Interface and Algorithms for Authenticated Encryption</title>
            <author fullname="D. McGrew" initials="D." surname="McGrew"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>This document defines algorithms for Authenticated Encryption with Associated Data (AEAD), and defines a uniform interface and a registry for such algorithms. The interface and registry can be used as an application-independent set of cryptoalgorithm suites. This approach provides advantages in efficiency and security, and promotes the reuse of crypto implementations. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5116"/>
          <seriesInfo name="DOI" value="10.17487/RFC5116"/>
        </reference>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC9112">
          <front>
            <title>HTTP/1.1</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document specifies the HTTP/1.1 message syntax, message parsing, connection management, and related security concerns.</t>
              <t>This document obsoletes portions of RFC 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="99"/>
          <seriesInfo name="RFC" value="9112"/>
          <seriesInfo name="DOI" value="10.17487/RFC9112"/>
        </reference>
        <reference anchor="RFC9113">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9113"/>
          <seriesInfo name="DOI" value="10.17487/RFC9113"/>
        </reference>
        <reference anchor="RFC9114">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
      </references>
    </references>
    <?line 679?>

<section anchor="example">
      <name>Example</name>
      <!-- Generated using ohttp (https://github.com/martinthomson/ohttp/tree/stream):
RUST_LOG=ohttp cargo test -\-features nss,stream,client,server,unsafe-print-secrets -\-no-default-features -p ohttp -\-lib -\- -\-nocapture split_in
Note: The "rust-hpke" crate doesn't log the client/sender keying material; this needs NSS.
-->

<t>A single request and response exchange is shown here.
This follows the same basic setup as the example in <xref section="A" sectionFormat="of" target="OHTTP"/>.</t>
      <t>The Oblivious Gateway Resource key pair is generated with a X25519 secret key of:</t>
      <artwork type="hex-dump"><![CDATA[
1c190d72acdbe4dbc69e680503bb781a932c70a12c8f3754434c67d8640d8698
]]></artwork>
      <t>The corresponding key configuration is:</t>
      <artwork type="hex-dump"><![CDATA[
010020668eb21aace159803974a4c67f08b4152d29bed10735fd08f98ccdd6fe
09570800080001000100010003
]]></artwork>
      <t>This key configuration is somehow obtained by the Client,
which constructs a binary HTTP request:</t>
      <artwork type="hex-dump"><![CDATA[
00034745540568747470730b6578616d706c652e636f6d012f
]]></artwork>
      <t>The client constructs an HPKE sending context with a secret key of:</t>
      <artwork type="hex-dump"><![CDATA[
b26d565f3f875ed480d1abced3d665159650c99174fd0b124ac4bda0c64ae324
]]></artwork>
      <t>The corresponding public key is:</t>
      <artwork type="hex-dump"><![CDATA[
8811eb457e100811c40a0aa71340a1b81d804bb986f736f2f566a7199761a032
]]></artwork>
      <t>The context is created with an <tt>info</tt> parameter of:</t>
      <artwork type="hex-dump"><![CDATA[
6d6573736167652f6268747470206368756e6b65642072657175657374000100
2000010001
]]></artwork>
      <t>This produces an encrypted
message, allowing the Client to construct the following Encapsulated Request:</t>
      <artwork type="hex-dump"><![CDATA[
01002000010001
8811eb457e100811c40a0aa71340a1b81d804bb986f736f2f566a7199761a032
1c2ad24942d4d692563012f2980c8fef437a336b9b2fc938ef77a5834f
1d2e33d8fd25577afe31bd1c79d094f76b6250ae6549b473ecd950501311
001c6c1395d0ef7c1022297966307b8a7f
]]></artwork>
      <t>This message contains a header, the encapsulated secret, and three encrypted chunks.
Line breaks are included above to show where these chunks start.</t>
      <t>The encrypted chunks are the result of invoking the HPKE <tt>ContextS.Seal()</tt> function three times:
the first with 12 bytes of the request,
the second with the remaining 13 bytes,
and the last containing no data.
This final chunk is marked by a zero length in the encoding
and an AAD of "final" to protect against undetected message truncation.
Each chunk is expanded by 16 bytes for AEAD protection.</t>
      <aside>
        <t>A BSD-like <tt>read()</tt> interface that returns 0
when it reaches the end of a stream
naturally leads to a zero-length chunk like this
if the data returned is protected immediately.</t>
      </aside>
      <t>After sending this to the Oblivious Relay Resource, the
Oblivious Gateway Resource decrypts and processes this message.
The Target Resource produces a response like:</t>
      <artwork type="hex-dump"><![CDATA[
0140c8
]]></artwork>
      <t>The response is protected by exporting a secret from the HPKE context,
using input keying material of:</t>
      <artwork type="hex-dump"><![CDATA[
1d4484834ae36102a6ac42a5523454d9
]]></artwork>
      <t>The salt is:</t>
      <artwork type="hex-dump"><![CDATA[
8811eb457e100811c40a0aa71340a1b81d804bb986f736f2f566a7199761a032
bcce7f4cb921309ba5d62edf1769ef09
]]></artwork>
      <t>From these, HKDF-SHA256 produces a pseudorandom key of:</t>
      <artwork type="hex-dump"><![CDATA[
3967884b5f7b4bce4a5320a3e3f79fdc97389f7deba1c1e11c5ea62278187786
]]></artwork>
      <t>The resulting AES-GCM key is:</t>
      <artwork type="hex-dump"><![CDATA[
8209f78f2a1610d80c7125009b00aff0
]]></artwork>
      <t>The 12-byte base nonce is:</t>
      <artwork type="hex-dump"><![CDATA[
fead854635d2d5527d64f546
]]></artwork>
      <t>The AEAD <tt>Seal()</tt> function is then used to encrypt the response in chunks
to produce the Encapsulated Response:</t>
      <artwork type="hex-dump"><![CDATA[
bcce7f4cb921309ba5d62edf1769ef09
1179bf1cc87fa0e2c02de4546945aa3d1e48
12b348b5bd4c594c16b6170b07b475845d1f32
00ed9d8a796617a5b27265f4d73247f639
]]></artwork>
      <t>This example is split onto separate lines to show the nonce and three chunks:
the first with one byte of response,
the second with the remaining two bytes,
and the final with zero bytes of data.</t>
      <t>The nonces for processing the chunks are, in order:</t>
      <artwork type="hex-dump"><![CDATA[
fead854635d2d5527d64f546
fead854635d2d5527d64f547
fead854635d2d5527d64f544
]]></artwork>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to Chris Wood for helping build an initial test implementation and providing reviews.
Thanks to Jonathan Hoyland for identifying some of the privacy leaks.
Thanks to Ricardo Perez, Derrell Piper, and Ben Schwartz for helping find and fix issues in the document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1923LbSJbge35FtuqhpWmSIninyna3SpLLmrJlr6WK7onZ
DTsBJCWMSYCDBHUph/tb9lv2y/ZcMhMJkFQ7tntj5qE7oqtEIJF58uS5X7K6
3a6osmqpT+TB2d0m/6JT+T5eZvdZsTHyzc3NB/lOG6NutTkQKo5LfR+OxAEH
IlGVvi3KpxNpqlSItEhytYIZ01Itqm6mq0W3uFNZN+HP4EdVrbv9qTCbeJUZ
kxV59bSGDy4vbl6LfLOKdXkiUpj1RCRFbnRuNuZEVuVGC1h+KFSp1Yk8/Xgj
Horyy21ZbNYnAMzppfwz/M7yW/kzPhP3Ot/AHFIGQ+AXL9YcKuVKZcsTiYD+
CUHuFeUtPFVlcnciEWBzcnyMY/BJdq97btAxPjiOy+LB6GP8/BgXzKq7TXwi
afMPt7T/Y8bHNipg/BI2a6p6ofC7Hk/Wy4q9Mxw/i+reXbVaCqE21V0BiJVd
WFDKxWa55HO6KVarJ/lBbZZP9AY2pfLsN1XBwQCa1+ulpueaUVStceSfFD7v
JcVqe8J3qqyyXN7cFStT5DvmfFf8li2XKpx1Vf1pWTzovCqL9VMv15UQWb4o
yhV8ck+H+PH12TyKBif0VZqZ9VIBySEJHke9yA8Y7how8K9Hu14Pheh2u1LF
pipVAkvf3GVGAiFvVgCRTPUiy7WRSt6rMlPwpFjI6k63WWXFrCIZbBgB/1BL
2JYRdCAGvyv1f27grGG2PIUfZo0UbmRVyFhLnSfl07oC3sK3qXa/Yg1zaloT
AMpKLew0gFg/iQSY12WRABQ67UnaAy8vM5hX417U0g1B2gdw/BZEuAXTkQ93
WXJHU+JpJhsg/OWT3BgN54w7lHcA4hJngTewafclQmSeTKVXRhAG7Hr1AAMg
LZ96jPNVlqZAX+IHeYlnn24SJBEhWqj9+vV3JG1e4imOxrNv34JT4eUIKBAW
KcJEHzlUiyaqlQnw7KDqybNlBggyNEV9SveZghVKDcSCZ6TkLbDqg3qyCBKI
43ip8Z09Ljo6gOVBlSmdmDsq+rxCZFWwSHmvy578WENVBscvHoDnYSKp13dw
biUcm3larXRVZon8op9k/ERTW2BoSYOkGqvkCy6ELxPaEO2AwYA99IC0g7PC
ReF8Kp0gLmjRN09xmaXywwYOIJG/wFoXDBUcizx88+GXix/xNPAPOoxo1v/2
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
3U8RY8Mg1zndYXzc5/15FNUbuUyVj5CxvG5kNoJe/Tp56ao0XH98jcfPZ5/e
nf7lM8bE1EpXdY0pQvij4EAxkTN2w4yjaIJpkAb4ZEtRWLEN+q6DsnpX+Byt
y+Bc5YxT1+NLU731xG/LNlEA4GYo3YUt3ku6lCus5W04nJyyuTy9Om2la9q3
52zWqY9qHLyj7k9sZDMHMNUtqB6M/Vbihb+eD3iK7/4z2KiIU5hj6lLsUsfs
K1ZeNg9Xd9KKZ1uVG/3J5FruH2/C8YbG1547W8YgT9JNSVXFgpvmJ7PhjPJY
IML3AiLr7YNM9xAxFT8Hf+aaaQyHY/zddUHpoWvidbqIyjfhkHdEwXf4e3am
8Ho9DGHsq42jLdCNhEL4lkQhrjdx1Xiz3aQoPtre5ZozDA29Oj4V4r27X2nX
S9fG2ErL0IAD3sABwLA76Uej2leiWBuEipOsPtvxFS1Ol7YZTAB7t9MWkp+w
lGg83n9XSWYCqqWv21eK5GnzGhj/cWvgjvmwD1I6annaX8Ja3wNny2Rat3js
zp+gH1KqW+LqrG7v2oexoEK9WXl/Il+kYHKsVQKH+fIA7QWwlA5eAegv0urV
O3WbJVawHZqjkxfH8PBFmr6CWeHv1I0719iXw6U6ywzMnJzKjf0tWITgfR+/
xmwuNeVgOuW5Zd4hmFVhsOMHrxNCNFPxwL5vjtPlK6AXIF17vRddw4kyqyTL
teCa3IRzmHVIuYkiJNVTulbU/B6L/fFb7KDS9hLHS9f6TcYLfYJXWLy/Qg7D
Io3Euux5MILPxV5W+h2LnLl4M3qYy6Xmr+gu2a8n2yf4TTwr/8xO+Wf+lvwz
3yv/bAD3HyUAxXYfnG1w+3skoPmnBPzvIQH97bD/FIH/FIH/SBGIV+9igQV1
DPI1DkK8+B08/dnTFGc8STbIQ2f62suoYarjFV3zXPEtzywRj6tS62PuEz06
ER9/vb759Pb9zy95kgQ8r0LiTdey+z+7NpoF9GBMhz/pcJSjw0GTzibHG+S6
a6yG63JpqcEv86ILMk+BM15P0l1bSOH9MovxXzwUeIuCZgZ4tfqU5Xj5EV56
jdK83Jiqe7f+og9kQlE5jO/kvwdfqwijLse2+hT8Sbp1D7OKmVr+yPTLUYir
6+seYPUVts48k6at86NZ8yIq27tfN5lRvU+sDPAY96DYKF9wdd/XryC+MFL5
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
zJiN9m289aXA/xdAxdYKTWwAAA==

-->

</rfc>
