<?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.6.25 (Ruby 3.1.3) -->
<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-httpbis-digest-headers-11" category="std" consensus="true" obsoletes="3230" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title>Digest Fields</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-digest-headers-11"/>
    <author initials="R." surname="Polli" fullname="Roberto Polli">
      <organization>Team Digitale, Italian Government</organization>
      <address>
        <postal>
          <country>Italy</country>
        </postal>
        <email>robipolli@gmail.com</email>
      </address>
    </author>
    <author initials="L." surname="Pardue" fullname="Lucas Pardue">
      <organization>Cloudflare</organization>
      <address>
        <email>lucaspardue.24.7@gmail.com</email>
      </address>
    </author>
    <date year="2023" month="March" day="07"/>
    <area>Applications and Real-Time</area>
    <workgroup>HTTP</workgroup>
    <keyword>Digest</keyword>
    <abstract>
      <t>This document defines HTTP fields that support integrity digests. The
Content-Digest field can be used for the integrity of HTTP message content. The
Repr-Digest field can be used for the integrity of HTTP representations.
Want-Content-Digest and Want-Repr-Digest can be used to indicate a sender's
interest and preferences for receiving the respective Integrity fields.</t>
      <t>This document obsoletes RFC 3230 and the Digest and Want-Digest HTTP
fields.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-httpbis-digest-headers/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        HTTP Working Group mailing list (<eref target="mailto:ietf-http-wg@w3.org"/>),
        which is archived at <eref target="https://lists.w3.org/Archives/Public/ietf-http-wg/"/>.
        Working Group information can be found at <eref target="https://httpwg.org/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/httpwg/http-extensions/labels/digest-headers"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>HTTP does not define the means to protect the data integrity of content or
representations. When HTTP messages are transferred between endpoints, lower layer
features or properties such as TCP checksums or TLS records <xref target="TLS"/> can provide
some integrity protection. However, transport-oriented integrity provides a
limited utility because it is opaque to the application layer and only covers
the extent of a single connection. HTTP messages often travel over a chain of
separate connections, in between connections there is a possibility for
unintended or malicious data corruption. An HTTP integrity mechanism can provide
the means for endpoints, or applications using HTTP, to detect data corruption
and make a choice about how to act on it. An example use case is to aid
fault detection and diagnosis across system boundaries.</t>
      <t>This document defines two digest integrity mechanisms for HTTP.
First, content integrity, which acts on conveyed content (<xref section="6.4" sectionFormat="of" target="RFC9110"/>).
Second, representation data integrity, which acts on representation data (<xref section="3.2" sectionFormat="of" target="RFC9110"/>). This supports advanced use cases such as validating the
integrity of a resource that was reconstructed from parts retrieved using
multiple requests or connections.</t>
      <t>This document obsoletes RFC 3230 and therefore the Digest and Want-Digest HTTP
fields; see <xref target="obsolete-3230"/>.</t>
      <section anchor="document-structure">
        <name>Document Structure</name>
        <t>This document is structured as follows:</t>
        <ul spacing="normal">
          <li>
            <t>New request and response header and trailer field definitions.
            </t>
            <ul spacing="normal">
              <li>
                <xref target="content-digest"/> (Content-Digest),</li>
              <li>
                <xref target="representation-digest"/> (Repr-Digest), and</li>
              <li>
                <xref target="want-fields"/> (Want-Content-Digest and Want-Repr-Digest).</li>
            </ul>
          </li>
          <li>
            <t>Considerations specific to representation data integrity.
            </t>
            <ul spacing="normal">
              <li>
                <xref target="state-changing-requests"/> (State-changing requests),</li>
              <li>
                <xref target="digest-and-content-location"/> (Content-Location),</li>
              <li>
                <xref target="resource-representation"/> contains worked examples of Representation data
in message exchanges, and</li>
              <li>
                <xref target="examples-unsolicited"/> and <xref target="examples-solicited"/> contain worked examples
of Repr-Digest and Want-Repr-Digest fields in message exchanges.</li>
            </ul>
          </li>
          <li>
            <xref target="algorithms"/> presents hash algorithm considerations and defines
registration procedures for future entries.</li>
        </ul>
      </section>
      <section anchor="concept-overview">
        <name>Concept Overview</name>
        <t>The HTTP fields defined in this document can be used for HTTP integrity. Senders
choose a hashing algorithm and calculate a digest from an input related to the
HTTP message, the algorithm identifier and digest are transmitted in an HTTP
field. Receivers can validate the digest for integrity purposes. Hashing
algorithms are registered in the "Hash Algorithms for HTTP Digest Fields" (see
<xref target="algorithms"/>).</t>
        <t>Selecting the data on which digests are calculated depends on the use case of
HTTP messages. This document provides different fields for HTTP representation
data and HTTP content.</t>
        <t>There are use-cases where a simple digest of the HTTP content bytes is
required. The <tt>Content-Digest</tt> request and response header and trailer field is
defined to support digests of content (<xref section="6.4" sectionFormat="of" target="RFC9110"/>); see
<xref target="content-digest"/>.</t>
        <t>For more advanced use-cases, the <tt>Repr-Digest</tt> request and response header
and trailer field (<xref target="representation-digest"/>) is defined. It contains a digest value
computed by applying a hashing algorithm to selected representation data
(<xref section="3.2" sectionFormat="of" target="RFC9110"/>). Basing <tt>Repr-Digest</tt> on the selected
representation makes it straightforward to apply it to use-cases where the
message content requires some sort of manipulation to be considered as
representation of the resource or content conveys a partial representation of a resource,
such as Range Requests (see <xref section="14" sectionFormat="of" target="RFC9110"/>).</t>
        <t><tt>Content-Digest</tt> and <tt>Repr-Digest</tt> support hashing algorithm agility.
The <tt>Want-Content-Digest</tt> and <tt>Want-Repr-Digest</tt> fields allow
endpoints to express interest in <tt>Content-Digest</tt> and <tt>Repr-Digest</tt>
respectively, and to express algorithm preferences in either.</t>
        <t><tt>Content-Digest</tt> and <tt>Repr-Digest</tt> are collectively termed
Integrity fields.
<tt>Want-Content-Digest</tt> and <tt>Want-Repr-Digest</tt> are
collectively termed Integrity preference fields.</t>
        <t>Integrity fields are tied to the <tt>Content-Encoding</tt>
and <tt>Content-Type</tt> header fields. Therefore, a given resource may have multiple
different digest values when transferred with HTTP.</t>
        <t>Integrity fields do not provide integrity for
HTTP messages or fields. However, they can be combined with other mechanisms that
protect metadata, such as digital signatures, in order to protect
the phases of an HTTP exchange in whole or in part. For example, HTTP Message
Signatures <xref target="SIGNATURES"/> could be used to sign Integrity fields, thus providing
coverage for HTTP content or representation data.</t>
        <t>This specification does not define means for authentication, authorization or privacy.</t>
      </section>
      <section anchor="obsolete-3230">
        <name>Obsoleting RFC 3230</name>
        <t><xref target="RFC3230"/> defined the <tt>Digest</tt> and <tt>Want-Digest</tt> HTTP fields for HTTP integrity.
It also coined the term "instance" and "instance manipulation" in order to
explain concepts that are now more universally defined, and implemented, as HTTP
semantics such as selected representation data (<xref section="3.2" sectionFormat="of" target="RFC9110"/>).</t>
        <t>Experience has shown that implementations of <xref target="RFC3230"/> have interpreted the
meaning of "instance" inconsistently, leading to interoperability issues. The
most common issue relates to the mistake of calculating the digest using (what
we now call) message content, rather than using (what we now call)
representation data as was originally intended. Interestingly, time has also
shown that a digest of message content can be beneficial for some use cases. So
it is difficult to detect if non-conformance to <xref target="RFC3230"/> is intentional or
unintentional.</t>
        <t>In order to address potential inconsistencies and ambiguity across
implementations of <tt>Digest</tt> and <tt>Want-Digest</tt>, this document obsoletes
<xref target="RFC3230"/>. The Integrity fields (Sections <xref format="counter" target="content-digest"/> and
<xref format="counter" target="representation-digest"/>) and Integrity preference fields (<xref target="want-fields"/>)
defined in this document are better aligned with current HTTP semantics and
have names that more clearly articulate the intended usages.</t>
      </section>
      <section anchor="notational-conventions">
        <name>Notational Conventions</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <t>This document uses the Augmented BNF defined in <xref target="RFC5234"/> and updated by
<xref target="RFC7405"/>. This includes the rules: CR (carriage
return), LF (line feed), and CRLF (CR LF).</t>
        <t>This document uses the following terminology from <xref section="3" sectionFormat="of" target="STRUCTURED-FIELDS"/> to specify syntax and parsing:
Boolean, Byte Sequence, Dictionary, Integer, and List.</t>
        <t>The definitions "representation", "selected representation", "representation
data", "representation metadata", "user agent" and "content" in this document are to be
interpreted as described in <xref target="RFC9110"/>.</t>
        <t>This document uses the line folding strategies
described in <xref target="FOLDING"/>.</t>
        <t>Hashing algorithm names respect the casing used in their definition document (e.g. SHA-1, CRC32c)
whereas hashing algorithm keys are quoted (e.g. "sha", "crc32c").</t>
        <t>The term "checksum" describes the output of the application of an algorithm
to a sequence of bytes,
whereas "digest" is only used in relation to the value contained in the fields.</t>
        <t>Integrity fields: collective term for <tt>Content-Digest</tt> and <tt>Repr-Digest</tt></t>
        <t>Integrity preference fields: collective term for <tt>Want-Repr-Digest</tt> and <tt>Want-Content-Digest</tt></t>
      </section>
    </section>
    <section anchor="content-digest">
      <name>The Content-Digest Field</name>
      <t>The <tt>Content-Digest</tt> HTTP field can be used in requests and responses to
communicate digests that are calculated using a hashing algorithm applied to
the actual message content (see <xref section="6.4" sectionFormat="of" target="RFC9110"/>). It is a
<tt>Dictionary</tt> (see <xref section="3.2" sectionFormat="of" target="STRUCTURED-FIELDS"/>)
where each:</t>
      <ul spacing="normal">
        <li>key conveys the hashing algorithm (see <xref target="algorithms"/>)
used to compute the digest;</li>
        <li>value is a <tt>Byte Sequence</tt> (<xref section="3.3.5" sectionFormat="of" target="STRUCTURED-FIELDS"/>), that
conveys an encoded version of the byte output produced by the digest
calculation.</li>
      </ul>
      <t>For example:</t>
      <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

Content-Digest: \
  sha-512=:YMAam51Jz/jOATT6/zvHrLVgOYTGFy1d6GJiOHTohq4yP+pgk4vf2aCs\
  yRZOtw8MjkM7iw7yZ/WkppmM44T3qg==:
]]></sourcecode>
      <t>The <tt>Dictionary</tt> type can be used, for example, to attach multiple digests
calculated using different hashing algorithms in order to support a population
of endpoints with different or evolving capabilities. Such an approach could
support transitions away from weaker algorithms (see <xref target="sec-agility"/>).</t>
      <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

Content-Digest: \
  sha-256=:d435Qo+nKZ+gLcUHn7GQtQ72hiBVAgqoLsZnZPiTGPk=:,\
  sha-512=:YMAam51Jz/jOATT6/zvHrLVgOYTGFy1d6GJiOHTohq4yP+pgk4vf2aCs\
  yRZOtw8MjkM7iw7yZ/WkppmM44T3qg==:
]]></sourcecode>
      <t>A recipient <bcp14>MAY</bcp14> ignore any or all digests.
This allows the recipient to choose which hashing algorithm(s) to use for
validation instead of verifying every digest.</t>
      <t>A sender <bcp14>MAY</bcp14> send a digest without
knowing whether the recipient supports a given hashing algorithm, or even knowing
that the recipient will ignore it.</t>
      <t><tt>Content-Digest</tt> can be sent in a trailer section.
In this case,
<tt>Content-Digest</tt> <bcp14>MAY</bcp14> be merged into the header section; see <xref section="6.5.1" sectionFormat="of" target="RFC9110"/>.</t>
    </section>
    <section anchor="representation-digest">
      <name>The Repr-Digest Field</name>
      <t>The <tt>Repr-Digest</tt> HTTP field can be used in requests and responses to
communicate digests that are calculated using a hashing algorithm applied to
the entire selected representation data (see <xref section="8.1" sectionFormat="of" target="RFC9110"/>).</t>
      <t>Representations take into account the effect of the HTTP semantics on
messages. For example, the content can be affected by Range Requests or methods
such as HEAD, while the way the content is transferred "on the wire" is
dependent on other transformations (e.g. transfer codings for HTTP/1.1 - see
<xref section="6.1" sectionFormat="of" target="RFC9112"/>). To help illustrate HTTP representation concepts,
several examples are provided in <xref target="resource-representation"/>.</t>
      <t>When a message has no representation data it is still possible to assert that no
representation data was sent by computing the digest on an empty
string (see <xref target="usage-in-signatures"/>).</t>
      <t><tt>Repr-Digest</tt> is a <tt>Dictionary</tt> (see <xref section="3.2" sectionFormat="of" target="STRUCTURED-FIELDS"/>) where each:</t>
      <ul spacing="normal">
        <li>key conveys the hashing algorithm (see <xref target="algorithms"/>)
used to compute the digest;</li>
        <li>value is a <tt>Byte Sequence</tt>, that conveys an encoded version of the byte
output produced by the digest calculation.</li>
      </ul>
      <t>For example:</t>
      <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

Repr-Digest: \
  sha-512=:YMAam51Jz/jOATT6/zvHrLVgOYTGFy1d6GJiOHTohq4yP+pgk4vf2aCs\
  yRZOtw8MjkM7iw7yZ/WkppmM44T3qg==:
]]></sourcecode>
      <t>The <tt>Dictionary</tt> type can be used, for example, to attach multiple digests
calculated using different hashing algorithms in order to support a population
of endpoints with different or evolving capabilities. Such an approach could
support transitions away from weaker algorithms (see <xref target="sec-agility"/>).</t>
      <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

Repr-Digest: \
  sha-256=:d435Qo+nKZ+gLcUHn7GQtQ72hiBVAgqoLsZnZPiTGPk=:,\
  sha-512=:YMAam51Jz/jOATT6/zvHrLVgOYTGFy1d6GJiOHTohq4yP+pgk4vf2aCs\
  yRZOtw8MjkM7iw7yZ/WkppmM44T3qg==:
]]></sourcecode>
      <t>A recipient <bcp14>MAY</bcp14> ignore any or all digests.
This allows the recipient to choose which hashing algorithm(s) to use for
validation instead of verifying every digest.</t>
      <t>A sender <bcp14>MAY</bcp14> send a digest without knowing whether the
recipient supports a given hashing algorithm, or even knowing that the recipient
will ignore it.</t>
      <t><tt>Repr-Digest</tt> can be sent in a trailer section.
In this case,
<tt>Repr-Digest</tt> <bcp14>MAY</bcp14> be merged into the header section; see <xref section="6.5.1" sectionFormat="of" target="RFC9110"/>.</t>
      <section anchor="state-changing-requests">
        <name>Using Repr-Digest in State-Changing Requests</name>
        <t>When the representation enclosed in a state-changing request
does not describe the target resource,
the representation digest <bcp14>MUST</bcp14> be computed on the
representation data.
This is the only possible choice because representation digest requires complete
representation metadata (see <xref target="representation-digest"/>).</t>
        <t>In responses,</t>
        <ul spacing="normal">
          <li>if the representation describes the status of the request,
<tt>Repr-Digest</tt> <bcp14>MUST</bcp14> be computed on the enclosed representation
 (see <xref target="post-referencing-status"/> );</li>
          <li>if there is a referenced resource
<tt>Repr-Digest</tt> <bcp14>MUST</bcp14> be computed on the selected representation of the referenced resource
 even if that is different from the target resource.
 That might or might not result in computing <tt>Repr-Digest</tt> on the enclosed representation.</li>
        </ul>
        <t>The latter case is done according to the HTTP semantics of the given
method, for example using the <tt>Content-Location</tt> header field (see <xref section="8.7" sectionFormat="of" target="RFC9110"/>).
In contrast, the <tt>Location</tt> header field does not affect <tt>Repr-Digest</tt> because
it is not representation metadata.</t>
        <t>For example, in <tt>PATCH</tt> requests, the representation digest
will be computed on the patch document
because the representation metadata refers to the patch document and not
to the target resource (see <xref section="2" sectionFormat="of" target="PATCH"/>).
In responses, instead, the representation digest will be computed on the selected
representation of the patched resource.</t>
      </section>
      <section anchor="digest-and-content-location">
        <name>Repr-Digest and Content-Location in Responses</name>
        <t>When a state-changing method returns the <tt>Content-Location</tt> header field, the
enclosed representation refers to the resource identified by its value and
<tt>Repr-Digest</tt> is computed accordingly.
An example is given in <xref target="post-not-request-uri"/>.</t>
      </section>
    </section>
    <section anchor="want-fields">
      <name>Integrity preference fields</name>
      <t>Senders can indicate their interest in Integrity fields and hashing algorithm
preferences using the
<tt>Want-Content-Digest</tt> or <tt>Want-Repr-Digest</tt> fields. These can be used in both
requests and responses.</t>
      <t><tt>Want-Content-Digest</tt> indicates that the sender would like to receive a content digest
on messages associated with the request URI and representation metadata, using
the <tt>Content-Digest</tt> field.</t>
      <t><tt>Want-Repr-Digest</tt> indicates that the sender would like to receive a representation digest
on messages associated with the request URI and representation metadata, using
the <tt>Repr-Digest</tt> field.</t>
      <t>If <tt>Want-Content-Digest</tt> or <tt>Want-Repr-Digest</tt> are used in a response, it
indicates that the server would like the client to provide the respective
Integrity field on future requests.</t>
      <t>Integrity preference fields are only a hint. The receiver of the field can
ignore it and send an Integrity field using any algorithm or omit the field
entirely, for example see <xref target="ex-server-selects-unsupported-algorithm"/>. It is not
a protocol error if preferences are ignored. Applications that use Integrity
fields and Integrity preferences can define expectations or constraints that
operate in addition to this specification. How to deal with an ignored
preferences is a scenario that should be considered.</t>
      <t><tt>Want-Content-Digest</tt> and <tt>Want-Repr-Digest</tt> are of type <tt>Dictionary</tt>
where each:</t>
      <ul spacing="normal">
        <li>key conveys the hashing algorithm (see <xref target="algorithms"/>);</li>
        <li>value is an <tt>Integer</tt> (<xref section="3.3.1" sectionFormat="of" target="STRUCTURED-FIELDS"/>)
that conveys an ascending, relative, weighted preference.
It must be in the range 0 to 10 inclusive.
1 is the least preferred, 10 is the most preferred,
and a value of 0 means "not acceptable".</li>
      </ul>
      <t>Examples:</t>
      <sourcecode type="http-message"><![CDATA[
Want-Repr-Digest: sha-256=1
Want-Repr-Digest: sha-512=3, sha-256=10, unixsum=0
Want-Content-Digest: sha-256=1
Want-Content-Digest: sha-512=3, sha-256=10, unixsum=0
]]></sourcecode>
    </section>
    <section anchor="algorithms">
      <name>Hash Algorithm Considerations and Registration</name>
      <t>There are a wide variety of hashing algorithms that can be used for the purposes
of integrity. The choice of algorithm depends on several factors such as the
integrity use case, implementation needs or constraints, or application design
and workflows.</t>
      <t>An initial set of algorithms will be registered with IANA in the "Hash
Algorithms for HTTP Digest Fields" registry; see
<xref target="establish-hash-algorithm-registry"/>. Additional algorithms can be registered
in accordance with the policies set out in this section.</t>
      <t>Each algorithm has a status field, which is intended to provide an aid to
implementation selection.</t>
      <t>Algorithms with a status value of "standard" are suitable for many purposes,
including adversarial situations where hash functions might need to provide
resistance to collision, first-preimage and second-preimage attacks. For
adversarial situations, selecting which of the "standard" algorithms are
acceptable will depend on the level of protection the circumstances demand. As
there is no negotiation, endpoints that depend on a digest for security will be
vulnerable to attacks on the weakest algorithm they are willing to accept.</t>
      <t>Algorithms with a status value of "insecure" either provide none of these
properties, or are known to be weak (see <xref target="NO-MD5"/> and <xref target="NO-SHA"/>). These
algorithms <bcp14>MAY</bcp14> be used to preserve integrity against corruption, but <bcp14>MUST NOT</bcp14> be
used in a potentially adversarial setting; for example, when signing Integrity
fields' values for authenticity.</t>
      <t>Discussion of algorithm agility is presented in <xref target="sec-agility"/>.</t>
      <t>Registration requests for the "Hash Algorithms for HTTP Digest Fields" registry
use the Specification Required policy (<xref section="4.6" sectionFormat="of" target="RFC8126"/>). Requests
should use the following template:</t>
      <ul spacing="normal">
        <li>Algorithm Key: the Structured Fields key value used in
<tt>Content-Digest</tt>, <tt>Repr-Digest</tt>, <tt>Want-Content-Digest</tt>, or <tt>Want-Repr-Digest</tt>
 field Dictionary member keys</li>
        <li>
          <t>Status: the status of the algorithm. The options are:
          </t>
          <ul spacing="normal">
            <li>"standard" - for standardized algorithms without known problems,</li>
            <li>"provisional" - for non-standard or unproven algorithms,</li>
            <li>"insecure" - for insecure algorithms,</li>
            <li>"reserved"  - for algorithms that use a reserved token value that cannot be expressed in Structured Fields</li>
          </ul>
        </li>
        <li>Description: a short description of the algorithm</li>
        <li>Reference(s): pointer(s) to the primary document(s) defining the technical
details of the algorithm, and optionally the key</li>
      </ul>
      <t>When reviewing registration requests, the designated expert(s) should pay
attention to the requested status. The status value should reflect
standardization status and the broad opinion of relevant interest groups such as
the IETF or security-related SDOs. The "standard" status is not suitable for an
algorithm that is known to be weak, broken or experimental. If a registration
request attempts to register such an algorithm as "standard", the designated
expert(s) should suggest an alternative status of "insecure" or "provisional".</t>
      <t>When reviewing registration requests, the designated expert(s) cannot use a
status of "insecure" or "provisional" as grounds for rejection.</t>
      <t>Requests to update or change the fields in an existing registration are
permitted. For example, this could allow for the transition of an algorithm
status from "standard" to "insecure" as the security environment evolves.</t>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <section anchor="sec-limitations">
        <name>HTTP Messages Are Not Protected In Full</name>
        <t>This document specifies a data integrity mechanism that protects HTTP
representation data or content, but not HTTP header and trailer fields, from
certain kinds of corruption.</t>
        <t>Integrity fields are not intended to be a general protection against malicious tampering with
HTTP messages. This can be achieved by combining it with other approaches such
as transport-layer security or digital signatures (for example, HTTP Message
Signatures <xref target="SIGNATURES"/>).</t>
      </section>
      <section anchor="end-to-end-integrity">
        <name>End-to-End Integrity</name>
        <t>Integrity fields can help detect representation data or content modification due to implementation errors,
undesired "transforming proxies" (see <xref section="7.7" sectionFormat="of" target="RFC9110"/>)
or other actions as the data passes across multiple hops or system boundaries.
Even a simple mechanism for end-to-end representation data integrity is valuable
because a user agent can validate that resource retrieval succeeded before handing off to a
HTML parser, video player etc. for parsing.</t>
        <t>Note that using these mechanisms alone does not provide end-to-end integrity of HTTP messages over
multiple hops, since metadata could be manipulated at any stage. Methods to protect
metadata are discussed in <xref target="usage-in-signatures"/>.</t>
      </section>
      <section anchor="usage-in-signatures">
        <name>Usage in Signatures</name>
        <t>Digital signatures are widely used together with checksums to provide the
certain identification of the origin of a message <xref target="NIST800-32"/>. Such signatures
can protect one or more HTTP fields and there are additional considerations when
Integrity fields are included in this set.</t>
        <t>There are no restrictions placed on the type or format of digitial signature that
Integrity fields can be used with. One possible approach is to combine them with
HTTP Message Signatures <xref target="SIGNATURES"/>.</t>
        <t>Digests explicitly
depend on the "representation metadata" (e.g. the values of <tt>Content-Type</tt>,
<tt>Content-Encoding</tt> etc). A signature that protects Integrity fields but not other
"representation metadata" can expose the communication to tampering. For
example, an actor could manipulate the <tt>Content-Type</tt> field-value and cause a
digest validation failure at the recipient, preventing the application from
accessing the representation. Such an attack consumes the resources of both
endpoints. See also <xref target="digest-and-content-location"/>.</t>
        <t>Signatures are likely to be deemed an adversarial setting
when applying Integrity fields; see <xref target="algorithms"/>.
Using signatures to protect the checksum of an empty representation
allows receiving endpoints to detect if an eventual payload has been stripped or added.</t>
        <t>Any mangling of Integrity fields, including digests' de-duplication
or combining different field values (see <xref section="5.2" sectionFormat="of" target="RFC9110"/>)
might affect signature validation.</t>
      </section>
      <section anchor="usage-in-trailer-fields">
        <name>Usage in Trailer Fields</name>
        <t>Before sending Integrity fields in a trailer section, the sender
should consider that intermediaries are explicitly allowed to drop any trailer
(see <xref section="6.5.2" sectionFormat="of" target="RFC9110"/>).</t>
        <t>When Integrity fields are used in a trailer section, the field-values are received after the content.
Eager processing of content before the trailer section prevents digest validation, possibly leading to
processing of invalid data.</t>
        <t>Not every hashing algorithm is suitable for use in the trailer section, some may require to pre-process
the whole payload before sending a message (e.g. see <xref target="I-D.thomson-http-mice"/>).</t>
      </section>
      <section anchor="variations-within-content-encoding">
        <name>Variations Within Content Encoding</name>
        <t>Content coding mechanisms can support different encoding parameters, meaning that the same input content can produce different outputs. For example, GZIP supports mulitple compression levels. Such encoding parameters are generally not communicated as representation metadata, for instance different compression levels would all use the same "Content-Encoding: gzip" field. Other examples include where encoding relies on nonces or timestamps, such as the aes128gcm content coding defined <xref target="RFC8188"/>.</t>
        <t>Since it is possible for there to be variation within content coding, the checksum conveyed by the integrity field cannot be used to provide a proof of integrity "at rest"
unless the whole (e.g. encoded) content is persisted.</t>
      </section>
      <section anchor="sec-agility">
        <name>Algorithm Agility</name>
        <t>The security properties of hashing algorithms are not fixed.
Algorithm Agility (see <xref target="RFC7696"/>) is achieved by providing implementations with flexibility
to choose hashing algorithms from the IANA Hash Algorithms for HTTP Digest Fields registry; see
<xref target="establish-hash-algorithm-registry"/>.</t>
        <t>Transition from weak algorithms is supported
by negotiation of hashing algorithm using <tt>Want-Content-Digest</tt> or <tt>Want-Repr-Digest</tt> (see <xref target="want-fields"/>)
or by sending multiple digests from which the receiver chooses.
Endpoints are advised that sending multiple values consumes resources,
which may be wasted if the receiver ignores them (see <xref target="representation-digest"/>).</t>
        <t>While algorithm agility allows the migration to stronger algorithms
it does not prevent the use of weaker algorithms.
Integrity fields do not provide any mitigations for downgrade or substitution
attacks (see Section 1 of <xref target="RFC6211"/>) of the hashing algorithm.
To protect against such attacks, endpoints could restrict their set of supported algorithms
to stronger ones and protect the fields value by using TLS and/or digital signatures.</t>
      </section>
      <section anchor="resource-exhaustion">
        <name>Resource exhaustion</name>
        <t>Integrity fields validation consumes computational resources.
In order to avoid resource exhaustion, implementations can restrict
validation of the algorithm types, number of validations, or the size of content.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="http-field-name-registration">
        <name>HTTP Field Name Registration</name>
        <t>IANA is asked to update the
"Hypertext Transfer Protocol (HTTP) Field Name Registry" registry
(<xref target="RFC9110"/>) according to the table below:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field Name</th>
              <th align="left">Status</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Content-Digest</td>
              <td align="left">permanent</td>
              <td align="left">
                <xref target="content-digest"/> of this document</td>
            </tr>
            <tr>
              <td align="left">Repr-Digest</td>
              <td align="left">permanent</td>
              <td align="left">
                <xref target="representation-digest"/> of this document</td>
            </tr>
            <tr>
              <td align="left">Want-Content-Digest</td>
              <td align="left">permanent</td>
              <td align="left">
                <xref target="want-fields"/> of this document</td>
            </tr>
            <tr>
              <td align="left">Want-Repr-Digest</td>
              <td align="left">permanent</td>
              <td align="left">
                <xref target="want-fields"/> of this document</td>
            </tr>
            <tr>
              <td align="left">Digest</td>
              <td align="left">obsoleted</td>
              <td align="left">
                <xref target="RFC3230"/>, <xref target="obsolete-3230"/> of this document</td>
            </tr>
            <tr>
              <td align="left">Want-Digest</td>
              <td align="left">obsoleted</td>
              <td align="left">
                <xref target="RFC3230"/>, <xref target="obsolete-3230"/> of this document</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="establish-hash-algorithm-registry">
        <name>Establish the Hash Algorithms for HTTP Digest Fields Registry</name>
        <t>IANA is requested to create the new "Hash Algorithms for HTTP Digest Fields"
registry at <eref target="https://www.iana.org/assignments/http-digest-hash-alg/">https://www.iana.org/assignments/http-digest-hash-alg/</eref> and
populate it with the entries in <xref target="iana-hash-algorithm-table"/>. The procedure for
new registrations is provided in <xref target="algorithms"/>.</t>
        <table anchor="iana-hash-algorithm-table">
          <name>Initial Hash Algorithms</name>
          <thead>
            <tr>
              <th align="left">Algorithm Key</th>
              <th align="left">Status</th>
              <th align="left">Description</th>
              <th align="left">Reference(s)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">sha-512</td>
              <td align="left">standard</td>
              <td align="left">The SHA-512 algorithm.</td>
              <td align="left">
                <xref target="RFC6234"/>, <xref target="RFC4648"/>, this document.</td>
            </tr>
            <tr>
              <td align="left">sha-256</td>
              <td align="left">standard</td>
              <td align="left">The SHA-256 algorithm.</td>
              <td align="left">
                <xref target="RFC6234"/>, <xref target="RFC4648"/>, this document.</td>
            </tr>
            <tr>
              <td align="left">md5</td>
              <td align="left">insecure</td>
              <td align="left">The MD5 algorithm. It is vulnerable to collision attacks; see <xref target="NO-MD5"/> and <xref target="CMU-836068"/></td>
              <td align="left">
                <xref target="RFC1321"/>, <xref target="RFC4648"/>, this document.</td>
            </tr>
            <tr>
              <td align="left">sha</td>
              <td align="left">insecure</td>
              <td align="left">The SHA-1 algorithm. It is vulnerable to collision attacks; see <xref target="NO-SHA"/> and <xref target="IACR-2020-014"/></td>
              <td align="left">
                <xref target="RFC3174"/>, <xref target="RFC4648"/>, <xref target="RFC6234"/> this document.</td>
            </tr>
            <tr>
              <td align="left">unixsum</td>
              <td align="left">insecure</td>
              <td align="left">The algorithm used by the UNIX "sum" command.</td>
              <td align="left">
                <xref target="RFC4648"/>, <xref target="RFC6234"/>, <xref target="UNIX"/>, this document.</td>
            </tr>
            <tr>
              <td align="left">unixcksum</td>
              <td align="left">insecure</td>
              <td align="left">The algorithm used by the UNIX "cksum" command.</td>
              <td align="left">
                <xref target="RFC4648"/>, <xref target="RFC6234"/>, <xref target="UNIX"/>, this document.</td>
            </tr>
            <tr>
              <td align="left">adler</td>
              <td align="left">insecure</td>
              <td align="left">The ADLER32 algorithm.</td>
              <td align="left">
                <xref target="RFC1950"/>, this document.</td>
            </tr>
            <tr>
              <td align="left">crc32c</td>
              <td align="left">insecure</td>
              <td align="left">The CRC32c algorithm.</td>
              <td align="left">
                <xref target="RFC9260"/> appendix B, this document.</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="deprecate-the-hypertext-transfer-protocol-http-digest-algorithm-values-registry">
        <name>Deprecate the Hypertext Transfer Protocol (HTTP) Digest Algorithm Values Registry</name>
        <t>IANA is requested to deprecate the "Hypertext Transfer Protocol (HTTP) Digest
Algorithm Values" registry at
<eref target="https://www.iana.org/assignments/http-dig-alg/http-dig-alg.xhtml">https://www.iana.org/assignments/http-dig-alg/http-dig-alg.xhtml</eref>.</t>
      </section>
    </section>
  </middle>
  <back>
    <displayreference target="RFC9110" to="HTTP"/>
    <displayreference target="RFC9112" to="HTTP/1.1"/>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC1321">
          <front>
            <title>The MD5 Message-Digest Algorithm</title>
            <author fullname="R. Rivest" initials="R." surname="Rivest">
              <organization/>
            </author>
            <date month="April" year="1992"/>
            <abstract>
              <t>This document describes the MD5 message-digest algorithm. The algorithm takes as input a message of arbitrary length and produces as output a 128-bit "fingerprint" or "message digest" of the input.  This memo provides information for the Internet community.  It does not specify an Internet standard.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1321"/>
          <seriesInfo name="DOI" value="10.17487/RFC1321"/>
        </reference>
        <reference anchor="RFC3174">
          <front>
            <title>US Secure Hash Algorithm 1 (SHA1)</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd">
              <organization/>
            </author>
            <author fullname="P. Jones" initials="P." surname="Jones">
              <organization/>
            </author>
            <date month="September" year="2001"/>
            <abstract>
              <t>The purpose of this document is to make the SHA-1 (Secure Hash Algorithm 1) hash algorithm conveniently available to the Internet community. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3174"/>
          <seriesInfo name="DOI" value="10.17487/RFC3174"/>
        </reference>
        <reference anchor="RFC1950">
          <front>
            <title>ZLIB Compressed Data Format Specification version 3.3</title>
            <author fullname="P. Deutsch" initials="P." surname="Deutsch">
              <organization/>
            </author>
            <author fullname="J-L. Gailly" initials="J-L." surname="Gailly">
              <organization/>
            </author>
            <date month="May" year="1996"/>
            <abstract>
              <t>This specification defines a lossless compressed data format.  This memo provides information for the Internet community.  This memo does not specify an Internet standard of any kind.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1950"/>
          <seriesInfo name="DOI" value="10.17487/RFC1950"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson">
              <organization/>
            </author>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes.  It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker">
              <organization/>
            </author>
            <author fullname="P. Overell" initials="P." surname="Overell">
              <organization/>
            </author>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax.  Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications.  The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power.  The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges.  This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC6234">
          <front>
            <title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd">
              <organization/>
            </author>
            <author fullname="T. Hansen" initials="T." surname="Hansen">
              <organization/>
            </author>
            <date month="May" year="2011"/>
            <abstract>
              <t>Federal Information Processing Standard, FIPS</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6234"/>
          <seriesInfo name="DOI" value="10.17487/RFC6234"/>
        </reference>
        <reference anchor="RFC7405">
          <front>
            <title>Case-Sensitive String Support in ABNF</title>
            <author fullname="P. Kyzivat" initials="P." surname="Kyzivat">
              <organization/>
            </author>
            <date month="December" year="2014"/>
            <abstract>
              <t>This document extends the base definition of ABNF (Augmented Backus-Naur Form) to include a way to specify US-ASCII string literals that are matched in a case-sensitive manner.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7405"/>
          <seriesInfo name="DOI" value="10.17487/RFC7405"/>
        </reference>
        <reference anchor="FOLDING">
          <front>
            <title>Handling Long Lines in Content of Internet-Drafts and RFCs</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen">
              <organization/>
            </author>
            <author fullname="E. Auerswald" initials="E." surname="Auerswald">
              <organization/>
            </author>
            <author fullname="A. Farrel" initials="A." surname="Farrel">
              <organization/>
            </author>
            <author fullname="Q. Wu" initials="Q." surname="Wu">
              <organization/>
            </author>
            <date month="June" year="2020"/>
            <abstract>
              <t>This document defines two strategies for handling long lines in width-bounded text content.  One strategy, called the "single backslash" strategy, is based on the historical use of a single backslash ('\') character to indicate where line-folding has occurred, with the continuation occurring with the first character that is not a space character (' ') on the next line.  The second strategy, called the "double backslash" strategy, extends the first strategy by adding a second backslash character to identify where the continuation begins and is thereby able to handle cases not supported by the first strategy.  Both strategies use a self-describing header enabling automated reconstitution of the original content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8792"/>
          <seriesInfo name="DOI" value="10.17487/RFC8792"/>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <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>
        <reference anchor="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="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="STRUCTURED-FIELDS">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="P-H. Kamp" initials="P-H." surname="Kamp">
              <organization/>
            </author>
            <date month="February" year="2021"/>
            <abstract>
              <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields that wish to use a common syntax that is more restrictive than traditional HTTP field values.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8941"/>
          <seriesInfo name="DOI" value="10.17487/RFC8941"/>
        </reference>
        <reference anchor="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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC3230">
          <front>
            <title>Instance Digests in HTTP</title>
            <author fullname="J. Mogul" initials="J." surname="Mogul">
              <organization/>
            </author>
            <author fullname="A. Van Hoff" initials="A." surname="Van Hoff">
              <organization/>
            </author>
            <date month="January" year="2002"/>
            <abstract>
              <t>HTTP/1.1 defines a Content-MD5 header that allows a server to include a digest of the response body.  However, this is specifically defined to cover the body of the actual message, not the contents of the full file (which might be quite different, if the response is a Content-Range, or uses a delta encoding).  Also, the Content-MD5 is limited to one specific digest algorithm; other algorithms, such as SHA-1 (Secure Hash Standard), may be more appropriate in some circumstances.  Finally, HTTP/1.1 provides no explicit mechanism by which a client may request a digest.  This document proposes HTTP extensions that solve these problems.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3230"/>
          <seriesInfo name="DOI" value="10.17487/RFC3230"/>
        </reference>
        <reference anchor="RFC9112">
          <front>
            <title>HTTP/1.1</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <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="PATCH">
          <front>
            <title>PATCH Method for HTTP</title>
            <author fullname="L. Dusseault" initials="L." surname="Dusseault">
              <organization/>
            </author>
            <author fullname="J. Snell" initials="J." surname="Snell">
              <organization/>
            </author>
            <date month="March" year="2010"/>
            <abstract>
              <t>Several applications extending the Hypertext Transfer Protocol (HTTP) require a feature to do partial resource modification.  The existing HTTP PUT method only allows a complete replacement of a document. This proposal adds a new HTTP method, PATCH, to modify an existing HTTP resource.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5789"/>
          <seriesInfo name="DOI" value="10.17487/RFC5789"/>
        </reference>
        <reference anchor="NO-MD5">
          <front>
            <title>Updated Security Considerations for the MD5 Message-Digest and the HMAC-MD5 Algorithms</title>
            <author fullname="S. Turner" initials="S." surname="Turner">
              <organization/>
            </author>
            <author fullname="L. Chen" initials="L." surname="Chen">
              <organization/>
            </author>
            <date month="March" year="2011"/>
            <abstract>
              <t>This document updates the security considerations for the MD5 message digest algorithm.  It also updates the security considerations for HMAC-MD5.  This document is not an Internet Standards Track  specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6151"/>
          <seriesInfo name="DOI" value="10.17487/RFC6151"/>
        </reference>
        <reference anchor="NO-SHA">
          <front>
            <title>Security Considerations for the SHA-0 and SHA-1 Message-Digest Algorithms</title>
            <author fullname="T. Polk" initials="T." surname="Polk">
              <organization/>
            </author>
            <author fullname="L. Chen" initials="L." surname="Chen">
              <organization/>
            </author>
            <author fullname="S. Turner" initials="S." surname="Turner">
              <organization/>
            </author>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman">
              <organization/>
            </author>
            <date month="March" year="2011"/>
            <abstract>
              <t>This document includes security considerations for the SHA-0 and SHA-1 message digest algorithm.  This document is not an Internet  Standards Track specification; it is published for informational  purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6194"/>
          <seriesInfo name="DOI" value="10.17487/RFC6194"/>
        </reference>
        <reference anchor="SIGNATURES">
          <front>
            <title>HTTP Message Signatures</title>
            <author fullname="Annabelle Backman" initials="A." surname="Backman">
              <organization>Amazon</organization>
            </author>
            <author fullname="Justin Richer" initials="J." surname="Richer">
              <organization>Bespoke Engineering</organization>
            </author>
            <author fullname="Manu Sporny" initials="M." surname="Sporny">
              <organization>Digital Bazaar</organization>
            </author>
            <date day="6" month="February" year="2023"/>
            <abstract>
              <t>   This document describes a mechanism for creating, encoding, and
   verifying digital signatures or message authentication codes over
   components of an HTTP message.  This mechanism supports use cases
   where the full HTTP message may not be known to the signer, and where
   the message may be transformed (e.g., by intermediaries) before
   reaching the verifier.  This document also describes a means for
   requesting that a signature be applied to a subsequent HTTP message
   in an ongoing HTTP exchange.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-message-signatures-16"/>
        </reference>
        <reference anchor="UNIX">
          <front>
            <title>The Single UNIX Specification, Version 2 - 6 Vol Set for UNIX 98</title>
            <author>
              <organization>The Open Group</organization>
            </author>
            <date year="1997" month="February"/>
          </front>
        </reference>
        <reference anchor="NIST800-32" target="https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-32.pdf">
          <front>
            <title>Introduction to Public Key Technology and the Federal PKI Infrastructure</title>
            <author>
              <organization>National Institute of Standards and Technology, U.S. Department of Commerce</organization>
            </author>
            <date year="2001" month="February"/>
          </front>
        </reference>
        <reference anchor="CMU-836068" target="https://www.kb.cert.org/vuls/id/836068/">
          <front>
            <title>MD5 Vulnerable to collision attacks</title>
            <author>
              <organization>Carnegie Mellon University, Software Engineering Institute</organization>
            </author>
            <date year="2008" month="December" day="31"/>
          </front>
        </reference>
        <reference anchor="IACR-2020-014" target="https://eprint.iacr.org/2020/014.pdf">
          <front>
            <title>SHA-1 is a Shambles</title>
            <author initials="G." surname="Leurent">
              <organization>Inria, France</organization>
            </author>
            <author initials="T." surname="Peyrin">
              <organization>Nanyang Technological University, Singapore; Temasek Laboratories, Singapore</organization>
            </author>
            <date year="2020" month="January" day="05"/>
          </front>
        </reference>
        <reference anchor="TLS">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="I-D.thomson-http-mice">
          <front>
            <title>Merkle Integrity Content Encoding</title>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Jeffrey Yasskin" initials="J." surname="Yasskin">
              <organization>Google</organization>
            </author>
            <date day="13" month="August" year="2018"/>
            <abstract>
              <t>   This memo introduces a content-coding for HTTP that provides
   progressive integrity for message contents.  This integrity
   protection can be evaluated on a partial representation, allowing a
   recipient to process a message as it is delivered while retaining
   strong integrity protection.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-thomson-http-mice-03"/>
        </reference>
        <reference anchor="RFC8188">
          <front>
            <title>Encrypted Content-Encoding for HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson">
              <organization/>
            </author>
            <date month="June" year="2017"/>
            <abstract>
              <t>This memo introduces a content coding for HTTP that allows message payloads to be encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8188"/>
          <seriesInfo name="DOI" value="10.17487/RFC8188"/>
        </reference>
        <reference anchor="RFC7696">
          <front>
            <title>Guidelines for Cryptographic Algorithm Agility and Selecting Mandatory-to-Implement Algorithms</title>
            <author fullname="R. Housley" initials="R." surname="Housley">
              <organization/>
            </author>
            <date month="November" year="2015"/>
            <abstract>
              <t>Many IETF protocols use cryptographic algorithms to provide confidentiality, integrity, authentication, or digital signature.  Communicating peers must support a common set of cryptographic algorithms for these mechanisms to work properly.  This memo provides guidelines to ensure that protocols have the ability to migrate from one mandatory-to-implement algorithm suite to another over time.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="201"/>
          <seriesInfo name="RFC" value="7696"/>
          <seriesInfo name="DOI" value="10.17487/RFC7696"/>
        </reference>
        <reference anchor="RFC6211">
          <front>
            <title>Cryptographic Message Syntax (CMS) Algorithm Identifier Protection Attribute</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad">
              <organization/>
            </author>
            <date month="April" year="2011"/>
            <abstract>
              <t>The Cryptographic Message Syntax (CMS), unlike X.509/PKIX certificates, is vulnerable to algorithm substitution attacks.  In an algorithm substitution attack, the attacker changes either the algorithm being used or the parameters of the algorithm in order to change the result of a signature verification process.  In X.509 certificates, the signature algorithm is protected because it is duplicated in the TBSCertificate.signature field with the proviso that the validator is to compare both fields as part of the signature validation process.  This document defines a new attribute that contains a copy of the relevant algorithm identifiers so that they are protected by the signature or authentication process. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6211"/>
          <seriesInfo name="DOI" value="10.17487/RFC6211"/>
        </reference>
        <reference anchor="RFC9260">
          <front>
            <title>Stream Control Transmission Protocol</title>
            <author fullname="R. Stewart" initials="R." surname="Stewart">
              <organization/>
            </author>
            <author fullname="M. Tüxen" initials="M." surname="Tüxen">
              <organization/>
            </author>
            <author fullname="K. Nielsen" initials="K." surname="Nielsen">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>This document describes the Stream Control Transmission Protocol (SCTP) and obsoletes RFC 4960.  It incorporates the specification of the chunk flags registry from RFC 6096 and the specification of the I bit of DATA chunks from RFC 7053. Therefore, RFCs 6096 and 7053 are also obsoleted by this document. In addition, RFCs 4460 and 8540, which describe errata for SCTP, are obsoleted by this document. </t>
              <t>SCTP was originally designed to transport Public Switched Telephone Network (PSTN) signaling messages over IP networks. It is also suited to be used for other applications, for example, WebRTC.</t>
              <t>SCTP is a reliable transport protocol operating on top of a connectionless packet network, such as IP. It offers the following services to its users:</t>
              <t>The design of SCTP includes appropriate congestion avoidance behavior and resistance to flooding and masquerade attacks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9260"/>
          <seriesInfo name="DOI" value="10.17487/RFC9260"/>
        </reference>
        <reference anchor="RFC7396">
          <front>
            <title>JSON Merge Patch</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman">
              <organization/>
            </author>
            <author fullname="J. Snell" initials="J." surname="Snell">
              <organization/>
            </author>
            <date month="October" year="2014"/>
            <abstract>
              <t>This specification defines the JSON merge patch format and processing rules.  The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7396"/>
          <seriesInfo name="DOI" value="10.17487/RFC7396"/>
        </reference>
        <reference anchor="RFC7807">
          <front>
            <title>Problem Details for HTTP APIs</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="E. Wilde" initials="E." surname="Wilde">
              <organization/>
            </author>
            <date month="March" year="2016"/>
            <abstract>
              <t>This document defines a "problem detail" as a way to carry machine- readable details of errors in a HTTP response to avoid the need to define new error response formats for HTTP APIs.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7807"/>
          <seriesInfo name="DOI" value="10.17487/RFC7807"/>
        </reference>
      </references>
    </references>
    <section anchor="resource-representation">
      <name>Resource Representation and Representation Data</name>
      <t>The following examples show how representation metadata, payload transformations
and method impacts on the message and content. When the content
contains non-printable characters (e.g. when it is compressed) it is shown as
a sequence of hex-encoded bytes.</t>
      <figure>
        <name>Request containing a JSON object without any content coding</name>
        <sourcecode type="http-message"><![CDATA[
PUT /entries/1234 HTTP/1.1
Host: foo.example
Content-Type: application/json

{"hello": "world"}
]]></sourcecode>
      </figure>
      <t>Compression is an efficient way to reduce
the content length.</t>
      <figure anchor="ex-put-gz">
        <name>Request containing a gzip-encoded JSON object</name>
        <sourcecode type="http-message"><![CDATA[
PUT /entries/1234 HTTP/1.1
Host: foo.example
Content-Type: application/json
Content-Encoding: gzip

1F 8B 08 00 A5 B4 BD 62 02 FF
AB 56 4A 54 B2 52 50 32 A4 03
50 AA 05 00 44 47 2A 7C 6D 00
00 00
]]></sourcecode>
      </figure>
      <t>Sending the compressed form of the content
without the correct content coding means that
the content is malformed.
In this case, the server can reply with an error.</t>
      <figure>
        <name>Request containing malformed JSON</name>
        <sourcecode type="http-message"><![CDATA[
PUT /entries/1234 HTTP/1.1
Host: foo.example
Content-Type: application/json

1F 8B 08 00 A5 B4 BD 62 02 FF
AB 56 4A 54 B2 52 50 32 A4 03
50 AA 05 00 44 47 2A 7C 6D 00
00 00
]]></sourcecode>
      </figure>
      <figure>
        <name>An error response for a malformed content</name>
        <sourcecode type="http-message"><![CDATA[
HTTP/1.1 400 Bad Request

]]></sourcecode>
      </figure>
      <t>A Range-Request affects the transferred message content,
conveying a partial representation of the JSON object
in <xref target="ex-put-gz"/>.</t>
      <figure>
        <name>Request for partial content</name>
        <sourcecode type="http-message"><![CDATA[
GET /entries/1234 HTTP/1.1
Host: foo.example
Range: bytes=1-7

]]></sourcecode>
      </figure>
      <figure>
        <name>Partial response from a gzip-encoded representation</name>
        <sourcecode type="http-message"><![CDATA[
HTTP/1.1 206 Partial Content
Content-Encoding: gzip
Content-Type: application/json
Content-Range: bytes 0-10/32

1F 8B 08 00 A5 B4 BD 62 02 FF
]]></sourcecode>
      </figure>
      <t>The method can also affect the transferred message content.
For example, the response
to a HEAD request does not carry content.</t>
      <figure>
        <name>HEAD request</name>
        <sourcecode type="http-message"><![CDATA[
HEAD /entries/1234 HTTP/1.1
Host: foo.example
Accept: application/json
Accept-Encoding: gzip

]]></sourcecode>
      </figure>
      <figure>
        <name>Response to HEAD request (empty content)</name>
        <sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Content-Encoding: gzip

]]></sourcecode>
      </figure>
      <t>Finally, the semantics of a response might decouple the target URI
from the enclosed representation. In the example response below, the
<tt>Content-Location</tt> header field indicates that the enclosed representation
refers to the resource available at <tt>/authors/123</tt>, even though the request is
directed to <tt>/authors/</tt>.</t>
      <figure>
        <name>POST request</name>
        <sourcecode type="http-message"><![CDATA[
POST /authors/ HTTP/1.1
Host: foo.example
Accept: application/json
Content-Type: application/json

{"author": "Camilleri"}
]]></sourcecode>
      </figure>
      <figure>
        <name>Response with Content-Location header</name>
        <sourcecode type="http-message"><![CDATA[
HTTP/1.1 201 Created
Content-Type: application/json
Content-Location: /authors/123
Location: /authors/123

{"id": "123", "author": "Camilleri"}
]]></sourcecode>
      </figure>
    </section>
    <section anchor="examples-unsolicited">
      <name>Examples of Unsolicited Digest</name>
      <t>The following examples demonstrate interactions where a server responds with a
<tt>Content-Digest</tt> or <tt>Repr-Digest</tt> fields even though the client did not solicit one using
<tt>Want-Content-Digest</tt> or <tt>Want-Repr-Digest</tt>.</t>
      <t>Some examples include JSON objects in the content.
For presentation purposes, objects that fit completely within the line-length limits
are presented on a single line using compact notation with no leading space.
Objects that would exceed line-length limits are presented across multiple lines
(one line per key-value pair) with 2 spaced of leading indentation.</t>
      <t>Checksum mechanisms defined in this document are media-type agnostic
and do not provide canonicalization algorithms for specific formats.
Examples are calculated inclusive of any space.
While examples can include both fields,
<tt>Content-Digest</tt> and <tt>Repr-Digest</tt> can be returned independently.</t>
      <section anchor="example-full-representation">
        <name>Server Returns Full Representation Data</name>
        <t>In this example, the message content conveys complete representation data.
This means that in the response, <tt>Content-Digest</tt> and <tt>Repr-Digest</tt>
are both computed over the JSON object <tt>{"hello": "world"}</tt> followed by an LF, and thus have the same value.</t>
        <figure>
          <name>GET request for an item</name>
          <sourcecode type="http-message"><![CDATA[
GET /items/123 HTTP/1.1
Host: foo.example

]]></sourcecode>
        </figure>
        <figure>
          <name>Response with identical Repr-Digest and Content-Digest</name>
          <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 19
Content-Digest: \
  sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg=:
Repr-Digest: \
  sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg=:

{"hello": "world"}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="server-returns-no-representation-data">
        <name>Server Returns No Representation Data</name>
        <t>In this example, a HEAD request is used to retrieve the checksum
of a resource.</t>
        <t>The response <tt>Content-Digest</tt> field-value is computed on empty content.
<tt>Repr-Digest</tt> is calculated over the JSON object
<tt>{"hello": "world"}</tt> followed by an LF, which is not shown because there is no payload
data.</t>
        <figure>
          <name>HEAD request for an item</name>
          <sourcecode type="http-message"><![CDATA[
HEAD /items/123 HTTP/1.1
Host: foo.example

]]></sourcecode>
        </figure>
        <figure>
          <name>Response with both Content-Digest and Digest; empty content</name>
          <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 200 OK
Content-Type: application/json
Content-Digest: \
  sha-256=:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=:
Repr-Digest: \
  sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg=:

]]></sourcecode>
        </figure>
      </section>
      <section anchor="server-returns-partial-representation-data">
        <name>Server Returns Partial Representation Data</name>
        <t>In this example, the client makes a range request and the server responds with
partial content.</t>
        <figure>
          <name>Request for partial content</name>
          <sourcecode type="http-message"><![CDATA[
GET /items/123 HTTP/1.1
Host: foo.example
Range: bytes=10-18

]]></sourcecode>
        </figure>
        <figure>
          <name>Partial response with both Content-Digest and Repr-Digest</name>
          <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 206 Partial Content
Content-Type: application/json
Content-Range: bytes 10-18/19
Content-Digest: \
  sha-256=:jjcgBDWNAtbYUXI37CVG3gRuGOAjaaDRGpIUFsdyepQ=:
Repr-Digest: \
  sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg=:

"world"}
]]></sourcecode>
        </figure>
        <t>In the response message above, note that the
<tt>Repr-Digest</tt> and <tt>Content-Digests</tt> are different.
The <tt>Repr-Digest</tt> field-value is calculated across the entire JSON object
<tt>{"hello": "world"}</tt> followed by an LF, and the field is</t>
        <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

Repr-Digest: \
  sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg=:
]]></sourcecode>
        <t>However, since the message content is constrained to bytes 10-18,
the <tt>Content-Digest</tt> field-value is calculated over the
sequence  <tt>"world"}</tt> followed by an LF, thus resulting in</t>
        <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

Content-Digest: \
  sha-256=:jjcgBDWNAtbYUXI37CVG3gRuGOAjaaDRGpIUFsdyepQ=:
]]></sourcecode>
      </section>
      <section anchor="client-and-server-provide-full-representation-data">
        <name>Client and Server Provide Full Representation Data</name>
        <t>The request contains a <tt>Repr-Digest</tt> field-value calculated on the enclosed
representation. It also includes an <tt>Accept-Encoding: br</tt> header field that advertises the
client supports Brotli encoding.</t>
        <t>The response includes a <tt>Content-Encoding: br</tt> that indicates the selected
representation is Brotli-encoded. The <tt>Repr-Digest</tt> field-value is therefore
different compared to the request.</t>
        <t>For presentation purposes, the response body is displayed as a sequence of
hex-encoded bytes because it contains non-printable characters.</t>
        <figure>
          <name>PUT Request with Digest</name>
          <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

PUT /items/123 HTTP/1.1
Host: foo.example
Content-Type: application/json
Accept-Encoding: br
Repr-Digest: \
  sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg=:

{"hello": "world"}
]]></sourcecode>
        </figure>
        <figure>
          <name>Response with Digest of encoded response</name>
          <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 200 OK
Content-Type: application/json
Content-Location: /items/123
Content-Encoding: br
Content-Length: 23
Repr-Digest: \
  sha-256=:d435Qo+nKZ+gLcUHn7GQtQ72hiBVAgqoLsZnZPiTGPk=:

8B 08 80 7B 22 68 65 6C 6C 6F
22 3A 20 22 77 6F 72 6C 64 22
7D 0A 03
]]></sourcecode>
        </figure>
      </section>
      <section anchor="client-provides-full-representation-data-server-provides-no-representation-data">
        <name>Client Provides Full Representation Data, Server Provides No Representation Data</name>
        <t>The request <tt>Repr-Digest</tt> field-value is calculated on the enclosed content, which
is the JSON object <tt>{"hello": "world"}</tt> followed by an LF</t>
        <t>The response <tt>Repr-Digest</tt> field-value
depends on the representation metadata header fields, including
<tt>Content-Encoding: br</tt> even when the response does not contain content.</t>
        <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

PUT /items/123 HTTP/1.1
Host: foo.example
Content-Type: application/json
Content-Length: 19
Accept-Encoding: br
Repr-Digest: \
  sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg==:

{"hello": "world"}
]]></sourcecode>
        <figure>
          <name>Empty response with Digest</name>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 204 No Content
Content-Type: application/json
Content-Encoding: br
Repr-Digest: sha-256=:d435Qo+nKZ+gLcUHn7GQtQ72hiBVAgqoLsZnZPiTGPk=:

]]></sourcecode>
        </figure>
      </section>
      <section anchor="client-and-server-provide-full-representation-data-1">
        <name>Client and Server Provide Full Representation Data</name>
        <t>The response contains two digest values using different algorithms.</t>
        <t>For presentation purposes, the response body is displayed as a sequence of
hex-encoded bytes because it contains non-printable characters.</t>
        <figure>
          <name>PUT Request with Digest</name>
          <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

PUT /items/123 HTTP/1.1
Host: foo.example
Content-Type: application/json
Accept-Encoding: br
Repr-Digest: \
  sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg==:

{"hello": "world"}
]]></sourcecode>
        </figure>
        <figure>
          <name>Response with Digest of Encoded Content</name>
          <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 200 OK
Content-Type: application/json
Content-Encoding: br
Content-Location: /items/123
Repr-Digest: \
  sha-256=:d435Qo+nKZ+gLcUHn7GQtQ72hiBVAgqoLsZnZPiTGPk=:,\
  sha-512=:db7fdBbgZMgX1Wb2MjA8zZj+rSNgfmDCEEXM8qLWfpfoNY0sCpHAzZbj\
  09X1/7HAb7Od5Qfto4QpuBsFbUO3dQ==:

8B 08 80 7B 22 68 65 6C 6C 6F
22 3A 20 22 77 6F 72 6C 64 22
7D 0A 03
]]></sourcecode>
        </figure>
      </section>
      <section anchor="post-not-request-uri">
        <name>POST Response does not Reference the Request URI</name>
        <t>The request <tt>Repr-Digest</tt> field-value is computed on the enclosed representation
(see <xref target="state-changing-requests"/>), which is the JSON object <tt>{"title": "New
Title"}</tt> followed by an LF.</t>
        <t>The representation enclosed in the response is a multiline JSON object followed by an LF.
It refers to the resource identified by
<tt>Content-Location</tt> (see <xref section="6.4.2" sectionFormat="of" target="RFC9110"/>);
an application can thus use <tt>Repr-Digest</tt> in association with the resource
referenced by <tt>Content-Location</tt>.</t>
        <figure>
          <name>POST Request with Digest</name>
          <sourcecode type="http-message"><![CDATA[
POST /books HTTP/1.1
Host: foo.example
Content-Type: application/json
Accept: application/json
Accept-Encoding: identity
Repr-Digest: sha-256=:mEkdbO7Srd9LIOegftO0aBX+VPTVz7/CSHes2Z27gc4=:

{"title": "New Title"}
]]></sourcecode>
        </figure>
        <figure>
          <name>Response with Digest of Resource</name>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 201 Created
Content-Type: application/json
Content-Location: /books/123
Location: /books/123
Repr-Digest: sha-256=:uVSlinTTdQUwm2On4k8TJUikGN1bf/Ds8WPX4oe0h9I=:

{
  "id": "123",
  "title": "New Title"
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="post-referencing-status">
        <name>POST Response Describes the Request Status</name>
        <t>The request <tt>Repr-Digest</tt> field-value is computed on the enclosed representation (see
<xref target="state-changing-requests"/>), which is the JSON object <tt>{"title": "New
Title"}</tt> followed by an LF.</t>
        <t>The representation enclosed in the response describes the status of the request,
so <tt>Repr-Digest</tt> is computed on that enclosed representation. It is a multiline
JSON object followed by an LF.</t>
        <t>Response <tt>Repr-Digest</tt> has no explicit relation with the resource referenced by
<tt>Location</tt>.</t>
        <figure>
          <name>POST Request with Digest</name>
          <sourcecode type="http-message"><![CDATA[
POST /books HTTP/1.1
Host: foo.example
Content-Type: application/json
Accept: application/json
Accept-Encoding: identity
Repr-Digest: sha-256=:mEkdbO7Srd9LIOegftO0aBX+VPTVz7/CSHes2Z27gc4=:

{"title": "New Title"}
]]></sourcecode>
        </figure>
        <figure>
          <name>Response with Digest of Representation</name>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 201 Created
Content-Type: application/json
Repr-Digest: sha-256=:yXIGDTN5VrfoyisKlXgRKUHHMs35SNtyC3szSz1dbO8=:
Location: /books/123

{
  "status": "created",
  "id": "123",
  "ts": 1569327729,
  "instance": "/books/123"
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="digest-with-patch">
        <name>Digest with PATCH</name>
        <t>This case is analogous to a POST request where the target resource reflects the
target URI.</t>
        <t>The PATCH request uses the <tt>application/merge-patch+json</tt> media type defined in
<xref target="RFC7396"/>. <tt>Repr-Digest</tt> is calculated on the enclosed payload, which corresponds to the
patch document and is the JSON object <tt>{"title": "New Title"}</tt> followed by an
LF.</t>
        <t>The response <tt>Repr-Digest</tt> field-value is computed on the complete representation of the patched
resource. It is a multiline JSON object followed by an LF.</t>
        <figure anchor="fig-patch">
          <name>PATCH Request with Digest</name>
          <sourcecode type="http-message"><![CDATA[
PATCH /books/123 HTTP/1.1
Host: foo.example
Content-Type: application/merge-patch+json
Accept: application/json
Accept-Encoding: identity
Repr-Digest: sha-256=:mEkdbO7Srd9LIOegftO0aBX+VPTVz7/CSHes2Z27gc4=:

{"title": "New Title"}
]]></sourcecode>
        </figure>
        <figure>
          <name>Response with Digest of Representation</name>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Repr-Digest: sha-256=:uVSlinTTdQUwm2On4k8TJUikGN1bf/Ds8WPX4oe0h9I=:

{
  "id": "123",
  "title": "New Title"
}
]]></sourcecode>
        </figure>
        <t>Note that a <tt>204 No Content</tt> response without content but with the same
<tt>Repr-Digest</tt> field-value would have been legitimate too.
In that case, <tt>Content-Digest</tt> would have been computed on an empty content.</t>
      </section>
      <section anchor="error-responses">
        <name>Error responses</name>
        <t>In error responses, the representation data does not necessarily refer to the
target resource. Instead, it refers to the representation of the error.</t>
        <t>In the following example, a client sends the same request from <xref target="fig-patch"/> to
patch the resource located at /books/123. However, the resource does not exist
and the server generates a 404 response with a body that describes the error in
accordance with <xref target="RFC7807"/>.</t>
        <t>The response <tt>Repr-Digest</tt> field-value is computed on this enclosed representation.
It is a multiline JSON object followed by an LF.</t>
        <figure>
          <name>Response with Digest of Error Representation</name>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 404 Not Found
Content-Type: application/problem+json
Repr-Digest: sha-256=:EXB0S2VF2H7ijkAVJkH1Sm0pBho0iDZcvVUHHXTTZSA=:

{
  "title": "Not Found",
  "detail": "Cannot PATCH a non-existent resource",
  "status": 404
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="use-with-trailer-fields-and-transfer-coding">
        <name>Use with Trailer Fields and Transfer Coding</name>
        <t>An origin server sends <tt>Repr-Digest</tt> as trailer field, so it can calculate digest-value
while streaming content and thus mitigate resource consumption.
The <tt>Repr-Digest</tt> field-value is the same as in <xref target="example-full-representation"/> because <tt>Repr-Digest</tt> is designed to
be independent from the use of one or more transfer codings (see <xref target="representation-digest"/>).</t>
        <t>In the response content below, the string "\r\n" represent the bytes CRLF.</t>
        <figure>
          <name>GET Request</name>
          <sourcecode type="http-message"><![CDATA[
GET /items/123 HTTP/1.1
Host: foo.example

]]></sourcecode>
        </figure>
        <figure>
          <name>Chunked Response with Digest</name>
          <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Trailer: Digest

8\r\n
{"hello"\r\n
8\r\n
: "world\r\n
3\r\n
"}\n\r\n
0\r\n
Repr-Digest: \
  sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg==:\r\n

]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="examples-solicited">
      <name>Examples of Want-Repr-Digest Solicited Digest</name>
      <t>The following examples demonstrate interactions where a client solicits a
<tt>Repr-Digest</tt> using <tt>Want-Repr-Digest</tt>.
The behavior of <tt>Content-Digest</tt> and <tt>Want-Content-Digest</tt> is identical.</t>
      <t>Some examples include JSON objects in the content.
For presentation purposes, objects that fit completely within the line-length limits
are presented on a single line using compact notation with no leading space.
Objects that would exceed line-length limits are presented across multiple lines
(one line per key-value pair) with 2 spaced of leading indentation.</t>
      <t>Checksum mechanisms described in this document are media-type agnostic
and do not provide canonicalization algorithms for specific formats.
Examples are calculated inclusive of any space.</t>
      <section anchor="server-selects-clients-least-preferred-algorithm">
        <name>Server Selects Client's Least Preferred Algorithm</name>
        <t>The client requests a digest, preferring "sha". The server is free to reply with
"sha-256" anyway.</t>
        <figure>
          <name>GET Request with Want-Repr-Digest</name>
          <sourcecode type="http-message"><![CDATA[
GET /items/123 HTTP/1.1
Host: foo.example
Want-Repr-Digest: sha-256=3, sha=10

]]></sourcecode>
        </figure>
        <figure>
          <name>Response with Different Algorithm</name>
          <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 200 OK
Content-Type: application/json
Repr-Digest: \
  sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg==:

{"hello": "world"}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="ex-server-selects-unsupported-algorithm">
        <name>Server Selects Algorithm Unsupported by Client</name>
        <t>The client requests a "sha" digest because that is the only algorithm it
supports. The server is not obliged to produce a response containing a "sha"
digest, it instead uses a different algorithm.</t>
        <figure>
          <name>GET Request with Want-Repr-Digest</name>
          <sourcecode type="http-message"><![CDATA[
GET /items/123 HTTP/1.1
Host: foo.example
Want-Repr-Digest: sha=10

]]></sourcecode>
        </figure>
        <figure>
          <name>Response with Unsupported Algorithm</name>
          <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 200 OK
Content-Type: application/json
Repr-Digest: \
  sha-512=:YMAam51Jz/jOATT6/zvHrLVgOYTGFy1d6GJiOHTohq4yP+pgk4vf2aCs\
  yRZOtw8MjkM7iw7yZ/WkppmM44T3qg==:

{"hello": "world"}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="server-does-not-support-client-algorithm-and-returns-an-error">
        <name>Server Does Not Support Client Algorithm and Returns an Error</name>
        <t><xref target="ex-server-selects-unsupported-algorithm"/> is an example where a server ignores
the client's preferred digest algorithm.
Alternatively a server can also reject
the request and return a response with
error status code such as 4xx or 5xx.
This specification does not prescribe
any requirement on status code selection;
the follow example illustrates one possible
option.</t>
        <t>In this example, the client requests a "sha" <tt>Repr-Digest</tt>, and the server returns an
error with problem details <xref target="RFC7807"/> contained in the content. The problem
details contain a list of the hashing algorithms that the server supports. This
is purely an example, this specification does not define any format or
requirements for such content.</t>
        <figure>
          <name>GET Request with Want-Repr-Digest</name>
          <sourcecode type="http-message"><![CDATA[
GET /items/123 HTTP/1.1
Host: foo.example
Want-Repr-Digest: sha=10

]]></sourcecode>
        </figure>
        <figure>
          <name>Response advertising the supported algorithms</name>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/problem+json

{
  "title": "Bad Request",
  "detail": "Supported hashing algorithms: sha-256, sha-512",
  "status": 400
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="sample-digest-values">
      <name>Sample Digest Values</name>
      <t>This section shows examples of digest values for different hashing algorithms.
The input value is the JSON object <tt>{"hello": "world"}</tt>. The digest values are
each produced by running the relevant hashing algorithm over the input and
running the output bytes through <tt>Byte Sequence</tt> serialization; see <xref section="4.1.8" sectionFormat="of" target="STRUCTURED-FIELDS"/>.</t>
      <artwork><![CDATA[
NOTE: '\' line wrapping per RFC 8792

sha-512 -   :WZDPaVn/7XgHaAy8pmojAkGWoRx2UFChF41A2svX+TaPm+\
            AbwAgBWnrIiYllu7BNNyealdVLvRwEmTHWXvJwew==:

sha-256 -   :X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=:

md5 -       :Sd/dVLAcvNLSq16eXua5uQ==:

sha -       :07CavjDP4u3/TungoUHJO/Wzr4c=:

unixsum -   :GQU=:

unixcksum - :7zsHAA==:

adler -     :OZkGFw==:

crc32c -    :Q3lHIA==:
]]></artwork>
    </section>
    <section anchor="migrating-from-rfc-3230">
      <name>Migrating from RFC 3230</name>
      <t>HTTP digests are computed by applying a hashing algorithm to input data.
RFC 3230 defined the input data as an "instance", a term it also defined.
The concept of instance has since been superseded by the HTTP semantic term "representation".
It is understood that some implementations of RFC 3230
mistook "instance" to mean HTTP content.
Using content for the Digest field is an error
that leads to interoperability problems between peers that implement RFC 3230.</t>
      <t>RFC 3230 was only ever intended
to use what HTTP now defines as selected representation data.
The semantic concept of digest and representation are explained
alongside the definition of <xref target="representation-digest">the Repr-Digest field</xref>.</t>
      <t>While the syntax of Digest and Repr-Digest are different,
the considerations and examples this document gives for Repr-Digest
apply equally to Digest because they operate on the same input data;
see Sections <xref format="counter" target="state-changing-requests"/>, <xref format="counter" target="security"/> and <xref format="counter" target="usage-in-signatures"/>.</t>
      <t>RFC 3230 could never communicate
the digest of HTTP message content in the Digest field;
Content-Digest now provides that capability.</t>
      <t>RFC 3230 allowed algorithms to define their output encoding format for use with
the Digest field. This resulted in a mixed of formats such as base64, hex or
decimal. By virtue of using Structured fields, Content-Digest and Repr-Digest
use only a single encoding format. Further explanation and examples are provided in <xref target="sample-digest-values"/>.</t>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>This document is based on ideas from <xref target="RFC3230"/>, so thanks
to Jeff Mogul and Arthur Van Hoff for their great work.
The original idea of refreshing RFC3230 arose from an interesting
discussion with Mark Nottingham, Jeffrey Yasskin and Martin Thomson when reviewing
the MICE content coding.</t>
      <t>Thanks to Julian Reschke for his valuable contributions to this document,
and to the following contributors that have helped improve this specification by reporting bugs,
asking smart questions, drafting or reviewing text, and evaluating open issues:
Mike Bishop,
Brian Campbell,
Matthew Kerwin,
James Manger,
Tommy Pauly,
Sean Turner,
Justin Richer,
and Erik Wilde.</t>
    </section>
    <section numbered="false" removeInRFC="true" anchor="code-samples">
      <name>Code Samples</name>
      <t>How can I generate and validate the digest values, computed over the JSON object
<tt>{"hello": "world"}</tt> followed by an LF, shown in the examples throughout this
document?</t>
      <t>The following python3 code can be used to generate digests for JSON objects
using SHA algorithms for a range of encodings. Note that these are formatted as
base64. This function could be adapted to other algorithms and should take into
account their specific formatting rules.</t>
      <artwork><![CDATA[
import base64, json, hashlib, brotli, logging
log = logging.getLogger()

def digest_bytes(bytes_, algorithm=hashlib.sha256):
    checksum_bytes = algorithm(bytes_).digest()
    log.warning("Log bytes: \n[%r]", bytes_)
    return base64.encodebytes(checksum_bytes).strip()

def digest(bytes_, encoding=lambda x: x, algorithm=hashlib.sha256):
    content_encoded = encoding(bytes_)
    return digest_bytes(content_encoded, algorithm)


bytes_ = b'{"hello": "world"}\n'

print("Encoding | hashing algorithm | digest-value")
print("Identity | sha256 |", digest(bytes_))
# Encoding | hashing algorithm | digest-value
# Identity | sha256 | RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg=

print("Encoding | hashing algorithm | digest-value")
print("Brotli | sha256 |", digest(bytes_, encoding=brotli.compress))
# Encoding | hashing algorithm | digest-value
# Brotli | sha256 | d435Qo+nKZ+gLcUHn7GQtQ72hiBVAgqoLsZnZPiTGPk=

print("Encoding | hashing algorithm | digest-value")
print("Identity | sha512 |", digest(bytes_, algorithm=hashlib.sha512))
print("Brotli | sha512 |", digest(bytes_, algorithm=hashlib.sha512,
                                    encoding=brotli.compress))
# Encoding | hashing algorithm | digest-value
# Identity | sha512 |b'YMAam51Jz/jOATT6/zvHrLVgOYTGFy1d6GJiOHTohq4yP'
#                     '+pgk4vf2aCsyRZOtw8MjkM7iw7yZ/WkppmM44T3qg=='

# Brotli | sha512 | b'db7fdBbgZMgX1Wb2MjA8zZj+rSNgfmDCEEXM8qLWfpfoNY'
#                    '0sCpHAzZbj09X1/7HAb7Od5Qfto4QpuBsFbUO3dQ=='

]]></artwork>
    </section>
    <section numbered="false" removeInRFC="true" anchor="changes">
      <name>Changes</name>
      <section numbered="false" anchor="since-draft-ietf-httpbis-digest-headers-10">
        <name>Since draft-ietf-httpbis-digest-headers-10</name>
        <ul spacing="normal">
          <li>Editorial or minor changes</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-httpbis-digest-headers-09">
        <name>Since draft-ietf-httpbis-digest-headers-09</name>
        <ul spacing="normal">
          <li>Editorial or minor changes</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-httpbis-digest-headers-08">
        <name>Since draft-ietf-httpbis-digest-headers-08</name>
        <ul spacing="normal">
          <li>Add note about migrating from RFC 3230. #1968, #1971</li>
          <li>Clarify what Want-* means in responses. #2097</li>
          <li>Editorial changes to structure and to align to HTTP style guide.</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-httpbis-digest-headers-07">
        <name>Since draft-ietf-httpbis-digest-headers-07</name>
        <ul spacing="normal">
          <li>Introduced Repr-Digest and Want-Repr-Digest, and deprecated
Digest and Want-Digest. Use of Structured Fields. #1993, #1919</li>
          <li>IANA refactoring. #1983</li>
          <li>No normative text in security considerations. #1972</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-httpbis-digest-headers-06">
        <name>Since draft-ietf-httpbis-digest-headers-06</name>
        <ul spacing="normal">
          <li>Remove id-sha-256 and id-sha-512 from the list of supported algorithms #855</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-httpbis-digest-headers-05">
        <name>Since draft-ietf-httpbis-digest-headers-05</name>
        <ul spacing="normal">
          <li>Reboot digest-algorithm values registry #1567</li>
          <li>Add Content-Digest #1542</li>
          <li>Remove SRI section #1478</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-httpbis-digest-headers-04">
        <name>Since draft-ietf-httpbis-digest-headers-04</name>
        <ul spacing="normal">
          <li>Improve SRI section #1354</li>
          <li>About duplicate digest-algorithms #1221</li>
          <li>Improve security considerations #852</li>
          <li>md5 and sha deprecation references #1392</li>
          <li>Obsolete 3230 #1395</li>
          <li>Editorial #1362</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-httpbis-digest-headers-03">
        <name>Since draft-ietf-httpbis-digest-headers-03</name>
        <ul spacing="normal">
          <li>Reference semantics-12</li>
          <li>Detail encryption quirks</li>
          <li>Details on Algorithm agility #1250</li>
          <li>Obsolete parameters #850</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-httpbis-digest-headers-02">
        <name>Since draft-ietf-httpbis-digest-headers-02</name>
        <ul spacing="normal">
          <li>Deprecate SHA-1 #1154</li>
          <li>Avoid id-* with encrypted content</li>
          <li>Digest is independent from MESSAGING and HTTP/1.1 is not normative #1215</li>
          <li>Identity is not a valid field value for content-encoding #1223</li>
          <li>Mention trailers #1157</li>
          <li>Reference httpbis-semantics #1156</li>
          <li>Add contentMD5 as an obsoleted digest-algorithm #1249</li>
          <li>Use lowercase digest-algorithms names in the doc and in the digest-algorithm IANA table.</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-httpbis-digest-headers-01">
        <name>Since draft-ietf-httpbis-digest-headers-01</name>
        <ul spacing="normal">
          <li>Digest of error responses is computed on the error representation-data #1004</li>
          <li>Effect of HTTP semantics on payload and message body moved to appendix #1122</li>
          <li>Editorial refactoring, moving headers sections up. #1109-#1112, #1116,
#1117, #1122-#1124</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-httpbis-digest-headers-00">
        <name>Since draft-ietf-httpbis-digest-headers-00</name>
        <ul spacing="normal">
          <li>Align title with document name</li>
          <li>Add id-sha-* algorithm examples #880</li>
          <li>Reference <xref target="RFC6234"/> and <xref target="RFC3174"/> instead of FIPS-1</li>
          <li>Deprecate MD5</li>
          <li>Obsolete ADLER-32 but don't forbid it #828</li>
          <li>Update CRC32C value in IANA table #828</li>
          <li>Use when acting on resources (POST, PATCH) #853</li>
          <li>Added Relationship with SRI, draft Use Cases #868, #971</li>
          <li>Warn about the implications of <tt>Content-Location</tt></li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
PBmZlEohlnQW5A61FiIsbOVz7YIv1DnDqk35C4+eNFRqSBjo+T5WEcEVlM0f
igwetj5P8SxNkJbrzmgoDslyiEyhtqihKiIiUixvMZZHgu+yWqq50i9Zvju+
j8DHDC3Qqoao8aC5tIMlL/Emj8dcyRLoBfl92kCEASUGQ6lfUC6TkZkyJR7w
McxX703sqSrCLSPlFKpTmctT4OdrxYoMim2fEqCSXZ4M4wr0/UrkQVGg1Q7z
yoS9POVrVhWXV3McysZkY6inqGghV5UJSEwgbMlICQv7LEb24mhMHE2mUKV8
uNKWjZZUSZszi1zlmp17akqbkTcWELefSp6JLfi1DyCLuewc3zunnFYnK/lY
mMjc40SXLn/NkOqZU9RC5ScIQnrelEpBNYODO8tOQCqh6WjKVEM2rFpTjQtA
YEkdidoTo2ddJieVncvIGPTv5BEjY8FM4PmY/hPLvYMMMkqikNsNjIKub+Xl
V0gFmAe+hiXD4oRsakP4bbKV5C+4AhZS7qyimbkevryJopoHZB5oTU2bSiKZ
y9+jer0Yte7mcUgEuxs2TaHtxfyPZ2+PzrMgWJDTgnQ85GAlNEfhMZO53kRX
VyyK0EsUJDhwZFVOKg1lUM+NlhALGzsvsrWWp5eYBow6NjZT2vlCkcFu68HH
YLwg8Rb6jIQzm8EhEo3JSzCbif0h3l50w0XkfED1PBihd2tEAmvmy9OenzRb
m4PuyCkpxtRPCgIAspDJd3NTeAnujWPnrAAj+r+t7HBr8IfEFy6K44xdy/MB
W+pW0hOCPIFwrIqZ2V8cXfgJLp/r3dQLrGakC6B1DbGCSXZH+ApIzsSim9Qz
xvwJtL7xBcgM1W2x0LOFwFjkOWLSKqxOyepqB63RxPvBB5yiPLyQTwT1xvrW
ulTScxVrW7mpVLCHZPX+0P8ghZxVFqVesRQbYkoe0/v5Db7KUQowysxBNjch
lzdhawn7PQVbdJxhlXAUje4hAUcC10I1F3gWpjMkspj9IYsl32DqRv4wUFF7
ttII6yK3ASEmxZsUBxWmZQU7K9RhdQCcAqk7mkM9Mv7aAGqZk8NcElYGvhyQ
/Zoy18oOJiebASSP2ErRcFZROMgljGBgrKMdE1OkFydUtbOcYdL4YrE2FBRG
gAgDwVjEsl40DWEhPdKpkkmHO0OQ8CceTNqtLUmIU/MFWW81m3hBRN0soUlD
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
4oFNV8cfVabuZ63Eh8ChUlasI6frgIqyvjHzw/hLpKPQdq0U0G/OUwBA6CIa
q+235Srmhkhk/hhbIOWKi5vhq8q8akKkPLh2rDbiK/Naojorc6lYkGAMGYhh
dNBhobHRnOOQtsZ4FqYDRKycUxHRYUKW4G+QwPB9ydfcuhH3tDsUbAbOCEWr
waWlFOVTsgJEzVC6kv1geb79wEQtmzolVeVaORn5kq+CqCVcqkjcFKb6O6Y0
JZlkz909nHgpKllrWVR5K6xkcOXynEb/pTBFxvP8ZNh8C7tKG6ZKMkA8CW0b
O9vKrVwj2WZ58VqwyKD7JtdNF9U7vY4p4fndDvwJlJvDtt7hnQmsdGzKqkkE
hFptNBubc1pRM8rfkzma4nt1rfX267d7596rcGnjzeDQa882x6Poffvm2evo
4kPr5cHu9cFqs91Kbt/8cOWdj374VbmlvtqdaXuw8zqMj4Kfgdpt7Jyeznxv
2Ht1fHsx3R9dHb5+c/t86k+J1Zk6fDTrm9XN/a3fz6Kb33+Pb3tpshmePb94
frpy9nrvZTR7/WGnv3HTmWzt7Zzv47tYWK8uk25f9pZghnb39vT48vfmuv9m
4q1NXpg5sueWN3a92/d756uTlaWrSTiIXh4+P1t6/TFe7eKzprYcrefZi5fm
O9Z96np742Ny2G7TuFyLjUfePnt78+yA9yR10+iH7Rcrw8Mjet70oj7his9w
AGT/wRPAIp8sntiq16TaGMsnWixN2w+vAsuw1RXhFyf6mSGtYy1DQG5qRJw6
80CiBRo7TaAcSMxV3uNb1MWq9eOUy7pLNX10eHOiCvf2mGDFdu4axQXvaC+m
UAYPXmgus2DstdiNK07SKDI1u1GpL9ZA5hAfBtQowKdvnA0gADBRmae1BP9l
4loGTVs8oTsm/cdWMFI0O2q/CQMUVo2F5D2u427bgcKW0ynueuyT7Z/EdbNc
u0oMFjDHMPUSluR9EoVC7v+G5VlQ3p/iALTwEAQFBj01FDNJGfOys7NKJO4Z
GVGq3C/M9A8h/q6w8dYgkR5S0pbTuC1+4YiUzJhEwPrtyaNK62NW6Zzo/gx+
/YCjVCeV5RPAaqYEVbEfu6X9ebvCAORBJv/OkIouhwaCyf1BIzO1kxM703SW
2HwxzGy72aX4UTn1zVEo+vvccJga/Wo6G5o+yX+f1xfMogEXNw8JCZwmFgSB
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
KdBrIka2JBcIarMi1f8DmX9RaUXdAAA=

-->

</rfc>
