<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-meunier-privacypass-reverse-flow-http-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="Privacy Pass Reverse Flow HTTP Transport">Privacy Pass Reverse Flow HTTP Transport</title>
    <seriesInfo name="Internet-Draft" value="draft-meunier-privacypass-reverse-flow-http-00"/>
    <author fullname="Thibault Meunier">
      <organization>Cloudflare Inc.</organization>
      <address>
        <email>ot-ietf@thibault.uk</email>
      </address>
    </author>
    <date year="2026" month="June" day="18"/>
    <area>Security</area>
    <workgroup>Privacy Pass</workgroup>
    <abstract>
      <?line 37?>

<t>This document specifies an instantiation of Privacy Pass Reverse Flow <xref target="REVERSE-FLOW"/>
where HTTP is used as a transport mechanism.</t>
      <t>It describes a novel HTTP header field that Clients and Origins can use to carry
reverse flow data.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://thibmeu.github.io/draft-meunier-privacypass-reverse-flow-informational/draft-meunier-privacypass-reverse-flow-http.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-meunier-privacypass-reverse-flow-http/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Privacy Pass Working Group mailing list (<eref target="mailto:privacy-pass@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/privacy-pass/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/privacy-pass/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/thibmeu/draft-meunier-privacypass-reverse-flow-informational"/>.</t>
    </note>
  </front>
  <middle>
    <?line 45?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document specifies an instantiation of Privacy Pass Reverse Flow <xref target="REVERSE-FLOW"/>
where HTTP is used as a transport mechanism.</t>
      <t><xref target="REVERSE-FLOW"/> specifies an architecture in which a client can both present a token
and initiate a new credential issuance flow.</t>
      <t>As described in <xref section="4" sectionFormat="of" target="REVERSE-FLOW"/>, this requires in-band encoding of information
used by the issuance protocol.</t>
      <t>This document introduces a new HTTP header field as defined in <xref target="RFC9110"/>. This allows Clients
to convey a CredentialRequest, and Origins to transmit a CredentialResponse.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="privacypass-reverse-header-field">
      <name><tt>PrivacyPass-Reverse</tt> Header Field</name>
      <t>A Client or an Origin following <xref target="REVERSE-FLOW"/> <bcp14>MAY</bcp14> include a
<tt>PrivacyPass-Reverse</tt> header field to communicate Privacy Pass protocol
data. This header field contains a base64url (per <xref target="BASE64"/>) encoded CredentialRequest
or CredentialResponse.</t>
      <figure anchor="fig-reverse-flow-architecture">
        <name>Privacy Pass with a Reverse Flow through PrivacyPass-Reverse header field</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="176" width="664" viewBox="0 0 664 176" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
              <path d="M 32,64 L 32,160" fill="none" stroke="black"/>
              <path d="M 136,32 L 136,64" fill="none" stroke="black"/>
              <path d="M 208,32 L 208,64" fill="none" stroke="black"/>
              <path d="M 240,64 L 240,160" fill="none" stroke="black"/>
              <path d="M 280,32 L 280,64" fill="none" stroke="black"/>
              <path d="M 584,32 L 584,64" fill="none" stroke="black"/>
              <path d="M 616,64 L 616,160" fill="none" stroke="black"/>
              <path d="M 656,32 L 656,64" fill="none" stroke="black"/>
              <path d="M 8,32 L 136,32" fill="none" stroke="black"/>
              <path d="M 208,32 L 280,32" fill="none" stroke="black"/>
              <path d="M 584,32 L 656,32" fill="none" stroke="black"/>
              <path d="M 8,64 L 136,64" fill="none" stroke="black"/>
              <path d="M 208,64 L 280,64" fill="none" stroke="black"/>
              <path d="M 584,64 L 656,64" fill="none" stroke="black"/>
              <path d="M 248,96 L 264,96" fill="none" stroke="black"/>
              <path d="M 592,96 L 616,96" fill="none" stroke="black"/>
              <path d="M 40,112 L 56,112" fill="none" stroke="black"/>
              <path d="M 216,112 L 240,112" fill="none" stroke="black"/>
              <path d="M 32,128 L 56,128" fill="none" stroke="black"/>
              <path d="M 240,144 L 256,144" fill="none" stroke="black"/>
              <path d="M 592,144 L 608,144" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="616,144 604,138.4 604,149.6" fill="black" transform="rotate(0,608,144)"/>
              <polygon class="arrowhead" points="256,96 244,90.4 244,101.6" fill="black" transform="rotate(180,248,96)"/>
              <polygon class="arrowhead" points="48,112 36,106.4 36,117.6" fill="black" transform="rotate(180,40,112)"/>
              <g class="text">
                <text x="44" y="52">Origin</text>
                <text x="100" y="52">Issuer</text>
                <text x="244" y="52">Origin</text>
                <text x="620" y="52">Client</text>
                <text x="356" y="100">PrivacyPass-Reverse:</text>
                <text x="512" y="100">CredentialRequest</text>
                <text x="136" y="116">CredentialRequest</text>
                <text x="140" y="132">CredentialResponse</text>
                <text x="228" y="132">-&gt;</text>
                <text x="348" y="148">PrivacyPass-Reverse:</text>
                <text x="508" y="148">CredentialResponse</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+---------------+        +--------+                                     +--------+
| Origin Issuer |        | Origin |                                     | Client |
+--+------------+        +---+----+                                     +---+----+
   |                         |                                              |
   |                         |<-- PrivacyPass-Reverse: CredentialRequest ---+
   |<-- CredentialRequest ---+                                              |
   +--- CredentialResponse ->|                                              |
   |                         +-- PrivacyPass-Reverse: CredentialResponse -->|
   |                         |                                              |
]]></artwork>
        </artset>
      </figure>
      <section anchor="example">
        <name>Example</name>
        <t>Below is an example request that uses <xref target="RFC9577"/> to pass the request Token, as well as <tt>PrivacyPass-Reverse</tt> for its reverse flow.</t>
        <artwork><![CDATA[
GET /foo HTTP/1.1
Host: example.com
Authorization: PrivateToken token="abc..."
PrivacyPass-Reverse: "def..."

HTTP/1.1 200 OK
PrivacyPass-Reverse: "001..."

[BODY]
]]></artwork>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="BASE64">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <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="REVERSE-FLOW">
          <front>
            <title>Privacy Pass Reverse Flow</title>
            <author fullname="Thibault Meunier" initials="T." surname="Meunier">
              <organization>Cloudflare Inc.</organization>
            </author>
            <date day="13" month="May" year="2026"/>
            <abstract>
              <t>   This document specifies an instantiation of Privacy Pass Architecture
   [RFC9576] that allows for a "reverse" flow from the Origin to the
   Client.  It describes a method for an Origin to issue a state update
   to the Client in response to a request in which a token is redeemed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-meunier-privacypass-reverse-flow-04"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC9577">
          <front>
            <title>The Privacy Pass HTTP Authentication Scheme</title>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <author fullname="S. Valdez" initials="S." surname="Valdez"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="June" year="2024"/>
            <abstract>
              <t>This document defines an HTTP authentication scheme for Privacy Pass, a privacy-preserving authentication mechanism used for authorization. The authentication scheme specified in this document can be used by Clients to redeem Privacy Pass tokens with an Origin. It can also be used by Origins to challenge Clients to present Privacy Pass tokens.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9577"/>
          <seriesInfo name="DOI" value="10.17487/RFC9577"/>
        </reference>
      </references>
    </references>
    <?line 124?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO</t>
    </section>
    <section numbered="false" anchor="changelog">
      <name>Changelog</name>
      <t>v00</t>
      <ul spacing="normal">
        <li>
          <t>Initial draft</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
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
Tddvm+GHJwtxdJVudnNfBewfmhKqtjsPAAA=

-->

</rfc>
