<?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.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-moq-privacy-pass-auth-04" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="Privacy Pass MoQ Auth">Privacy Pass Authentication for Media over QUIC (MoQ)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-moq-privacy-pass-auth-04"/>
    <author initials="S." surname="Nandakumar" fullname="Suhas Nandakumar">
      <organization>Cisco</organization>
      <address>
        <email>snandaku@cisco.com</email>
      </address>
    </author>
    <author initials="C." surname="Jennings" fullname="Cullen Jennings">
      <organization>Cisco</organization>
      <address>
        <email>fluffy@iii.ca</email>
      </address>
    </author>
    <author initials="T." surname="Meunier" fullname="Thibault Meunier">
      <organization>Cloudflare Inc.</organization>
      <address>
        <email>ot-ietf@thibault.uk</email>
      </address>
    </author>
    <date year="2026" month="November" day="02"/>
    <area>Web and Internet Transport</area>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>media over quic</keyword>
    <keyword>privacy-pass</keyword>
    <abstract>
      <?line 61?>

<t>This document specifies the use of Privacy Pass architecture and issuance
protocols for authorization in Media over QUIC (MoQ) transport protocol. It
defines how Privacy Pass tokens can be integrated with MoQ's authorization
framework to provide privacy-preserving authentication for subscriptions,
fetches, publications, and relay operations while supporting fine-grained
access control through prefix-based track namespace and track name matching
rules.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://moq-wg.github.io/privacy-pass/draft-ietf-moq-privacy-pass-auth.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-moq-privacy-pass-auth/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Media Over QUIC Working Group mailing list (<eref target="mailto:moq@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/moq/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/moq/"/>.
        Working Group information can be found at <eref target="https://datatracker.ietf.org/wg/moq/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/moq-wg/privacy-pass"/>.</t>
    </note>
  </front>
  <middle>
    <?line 72?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Media over QUIC (MoQ) <xref target="MoQ-TRANSPORT"/> provides a transport protocol for live
and on-demand media delivery, real-time communication, and interactive content
distribution over QUIC connections. The protocol supports a wide range of
applications including video streaming, video conferencing, gaming, interactive
broadcasts, and other latency-sensitive use cases. MoQ includes mechanisms for
authorization through tokens that can be used to control access to media
streams, interactive sessions, and relay operations.</t>
      <t>Traditional authorization mechanisms often lack the privacy protection needed
for modern media distribution scenarios, where users' viewing patterns and
content preferences should remain private while still enabling fine-grained
access control, namespace restrictions, and operational constraints.</t>
      <t>Privacy Pass <xref target="RFC9576"/> provides a privacy-preserving authorization
architecture that enables anonymous authentication through unlinkable tokens.
The Privacy Pass architecture consists of four entities: Client, Origin, Issuer,
and Attester, which work together to provide token-based authorization without
compromising user privacy. The issuance protocols <xref target="RFC9578"/> define how these
tokens are created and verified.</t>
      <t>This document defines how Privacy Pass tokens can be integrated with MoQ's
authorization framework to provide comprehensive access control for media
streaming, real-time communication, and interactive content services while
preserving user privacy through unlinkable authentication tokens.</t>
      <section anchor="requirements-language">
        <name>Requirements Language</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="moqt-conventions">
        <name>MoQ Transport Conventions</name>
        <t><xref target="MoQ-TRANSPORT"/> defines a single SETUP message
(<xref section="9.1" sectionFormat="of" target="MoQ-TRANSPORT"/>) that each endpoint sends on its control
stream. In this document, <tt>CLIENT_SETUP</tt> denotes the SETUP message
sent by the client and <tt>SERVER_SETUP</tt> denotes the SETUP message sent by the
server.</t>
      </section>
    </section>
    <section anchor="privacy-pass-architecture-for-moq">
      <name>Privacy Pass Architecture for MoQ</name>
      <t>Privacy Pass Terminology defined in <xref section="2" sectionFormat="of" target="RFC9576"/> is reused here.
The Privacy Pass MoQ integration involves the following entities and their
interactions:</t>
      <dl>
        <dt><strong>Client</strong></dt>
        <dd>
          <t>The MoQ client requesting authorization to subscribe to, fetch,
or publish media content. The client is responsible for obtaining Privacy Pass
tokens through the attestation and issuance process, and presenting these
tokens when requesting MoQ operations such as SUBSCRIBE, FETCH, PUBLISH, or
PUBLISH_NAMESPACE.</t>
        </dd>
        <dt><strong>MoQ Relay</strong></dt>
        <dd>
          <t>The MoQ relay server that forwards media content and verifies
that clients are authorized. The relay validates Privacy Pass tokens presented
by clients, enforces access policies, and forwards authorized requests to other
relays. Relays maintain configuration for trusted issuers and validate token
signatures and metadata.</t>
        </dd>
        <dt><strong>Privacy Pass Issuer</strong></dt>
        <dd>
          <t>The entity that issues Privacy Pass tokens to clients
after successful attestation. The issuer operates the token issuance protocol,
manages cryptographic keys. The issuer creates tokens with appropriate
MoQ-specific metadata.</t>
        </dd>
        <dt><strong>Privacy Pass Attester</strong></dt>
        <dd>
          <t>The entity that attests to properties of clients
for the purposes of token issuance. The attester verifies client credentials,
subscription status, or other eligibility criteria. Common attestation methods
include username/password, OAuth, device certificates, or other authentication
mechanisms.</t>
        </dd>
      </dl>
      <section anchor="joint-issuer-attester">
        <name>Joint Attester and Issuer</name>
        <t>In the below deployment, the MoQ relay and Privacy Pass issuer are operated
by different entities to enhance privacy through separation of concerns.
This corresponds to <xref section="4.4" sectionFormat="of" target="RFC9576"/>.</t>
        <figure anchor="fig-overview">
          <name>Separated Issuer and Relay Architecture</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="224" width="544" viewBox="0 0 544 224" 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 56,64 L 56,208" fill="none" stroke="black"/>
                <path d="M 104,32 L 104,64" fill="none" stroke="black"/>
                <path d="M 208,32 L 208,64" fill="none" stroke="black"/>
                <path d="M 240,64 L 240,208" fill="none" stroke="black"/>
                <path d="M 280,32 L 280,64" fill="none" stroke="black"/>
                <path d="M 360,32 L 360,64" fill="none" stroke="black"/>
                <path d="M 400,64 L 400,144" fill="none" stroke="black"/>
                <path d="M 400,192 L 400,208" fill="none" stroke="black"/>
                <path d="M 448,32 L 448,64" fill="none" stroke="black"/>
                <path d="M 464,32 L 464,64" fill="none" stroke="black"/>
                <path d="M 496,64 L 496,208" fill="none" stroke="black"/>
                <path d="M 536,32 L 536,64" fill="none" stroke="black"/>
                <path d="M 8,32 L 104,32" fill="none" stroke="black"/>
                <path d="M 208,32 L 280,32" fill="none" stroke="black"/>
                <path d="M 360,32 L 448,32" fill="none" stroke="black"/>
                <path d="M 464,32 L 536,32" fill="none" stroke="black"/>
                <path d="M 8,64 L 104,64" fill="none" stroke="black"/>
                <path d="M 208,64 L 280,64" fill="none" stroke="black"/>
                <path d="M 360,64 L 448,64" fill="none" stroke="black"/>
                <path d="M 464,64 L 536,64" fill="none" stroke="black"/>
                <path d="M 64,96 L 112,96" fill="none" stroke="black"/>
                <path d="M 192,96 L 240,96" fill="none" stroke="black"/>
                <path d="M 56,112 L 80,112" fill="none" stroke="black"/>
                <path d="M 216,112 L 232,112" fill="none" stroke="black"/>
                <path d="M 248,126 L 264,126" fill="none" stroke="black"/>
                <path d="M 248,130 L 264,130" fill="none" stroke="black"/>
                <path d="M 376,126 L 392,126" fill="none" stroke="black"/>
                <path d="M 376,130 L 392,130" fill="none" stroke="black"/>
                <path d="M 240,160 L 312,160" fill="none" stroke="black"/>
                <path d="M 432,160 L 488,160" fill="none" stroke="black"/>
                <path d="M 248,176 L 312,176" fill="none" stroke="black"/>
                <path d="M 440,176 L 496,176" fill="none" stroke="black"/>
                <path d="M 64,192 L 88,192" fill="none" stroke="black"/>
                <path d="M 216,192 L 240,192" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="496,160 484,154.4 484,165.6" fill="black" transform="rotate(0,488,160)"/>
                <polygon class="arrowhead" points="400,128 388,122.4 388,133.6" fill="black" transform="rotate(0,392,128)"/>
                <polygon class="arrowhead" points="256,176 244,170.4 244,181.6" fill="black" transform="rotate(180,248,176)"/>
                <polygon class="arrowhead" points="256,128 244,122.4 244,133.6" fill="black" transform="rotate(180,248,128)"/>
                <polygon class="arrowhead" points="240,112 228,106.4 228,117.6" fill="black" transform="rotate(0,232,112)"/>
                <polygon class="arrowhead" points="72,192 60,186.4 60,197.6" fill="black" transform="rotate(180,64,192)"/>
                <polygon class="arrowhead" points="72,96 60,90.4 60,101.6" fill="black" transform="rotate(180,64,96)"/>
                <g class="text">
                  <text x="32" y="52">MoQ</text>
                  <text x="72" y="52">Relay</text>
                  <text x="244" y="52">Client</text>
                  <text x="404" y="52">Attester</text>
                  <text x="500" y="52">Issuer</text>
                  <text x="152" y="100">Request</text>
                  <text x="148" y="116">TokenChallenge</text>
                  <text x="320" y="132">Attestation</text>
                  <text x="372" y="164">TokenRequest</text>
                  <text x="376" y="180">TokenResponse</text>
                  <text x="152" y="196">Request+Token</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+-----------+            +--------+         +----------+ +--------+
| MoQ Relay |            | Client |         | Attester | | Issuer |
+-----+-----+            +---+----+         +----+-----+ +---+----+
      |                      |                   |           |
      |<------ Request ------+                   |           |
      +--- TokenChallenge -->|                   |           |
      |                      |<== Attestation ==>|           |
      |                      |                   |           |
      |                      +--------- TokenRequest ------->|
      |                      |<-------- TokenResponse -------+
      |<--- Request+Token ---+                   |           |
      |                      |                   |           |
]]></artwork>
          </artset>
        </figure>
        <t>In certain deployments the MoQ relay and Privacy Pass issuer may be
operated by the same entity to simplify key management and policy coordination.
This is the Privacy Pass deployment described in <xref section="4.2" sectionFormat="of" target="RFC9576"/>.</t>
      </section>
      <section anchor="reverse-flow">
        <name>Shared Origin, Attester, Issuer with a Reverse Flow</name>
        <t>The flow described above can be used to bootstrap a shared origin-attester-issuer flow,
as described in <xref section="4.2" sectionFormat="of" target="RFC9576"/>. The MoQ relay plays all roles (origin,
attester, and issuer), allowing it to use privately verifiable token types registered
in <xref target="PRIVACYPASS-IANA"/>.</t>
        <t>In this scenario, the MoQ relay origin would accept tokens signed by two issuers:</t>
        <ol spacing="normal" type="1"><li>
            <t>Type <tt>0x0002</tt> token signed by the bootstrap issuer from <xref target="joint-issuer-attester"/></t>
          </li>
          <li>
            <t>Type <tt>0x0001</tt>, <tt>0x0005</tt>, or <tt>0xE5AC</tt> tokens signed by its own issuer.</t>
          </li>
        </ol>
        <t>This two-phase approach provides several advantages:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Bootstrapping</strong>: The initial publicly verifiable token (<tt>0x0002</tt>) establishes
trust without requiring the relay to share private keys with external verifiers.</t>
          </li>
          <li>
            <t><strong>Efficiency</strong>: Subsequent privately verifiable tokens allow batched issuance,
amortizing cryptographic costs across multiple operations.</t>
          </li>
          <li>
            <t><strong>Privacy</strong>: Each token presentation is unlinkable, even when obtained from
the same credential.</t>
          </li>
        </ul>
        <section anchor="reverse-flow-overview">
          <name>Reverse Flow Overview</name>
          <t>The reverse flow, as described in <xref section="4" sectionFormat="of" target="PRIVACYPASS-REVERSE-FLOW"/>,
allows a client to exchange a publicly verifiable token for privately verifiable
tokens (or credentials) issued directly by the MoQ relay.</t>
          <figure anchor="fig-reverse-flow">
            <name>Complete Reverse Flow Authorization</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="624" width="584" viewBox="0 0 584 624" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,32 L 8,80" fill="none" stroke="black"/>
                  <path d="M 48,80 L 48,112" fill="none" stroke="black"/>
                  <path d="M 48,144 L 48,304" fill="none" stroke="black"/>
                  <path d="M 48,336 L 48,496" fill="none" stroke="black"/>
                  <path d="M 48,528 L 48,608" fill="none" stroke="black"/>
                  <path d="M 80,32 L 80,80" fill="none" stroke="black"/>
                  <path d="M 136,32 L 136,64" fill="none" stroke="black"/>
                  <path d="M 184,64 L 184,112" fill="none" stroke="black"/>
                  <path d="M 184,144 L 184,304" fill="none" stroke="black"/>
                  <path d="M 184,336 L 184,496" fill="none" stroke="black"/>
                  <path d="M 184,528 L 184,608" fill="none" stroke="black"/>
                  <path d="M 232,32 L 232,64" fill="none" stroke="black"/>
                  <path d="M 288,32 L 288,64" fill="none" stroke="black"/>
                  <path d="M 328,64 L 328,112" fill="none" stroke="black"/>
                  <path d="M 328,144 L 328,304" fill="none" stroke="black"/>
                  <path d="M 328,336 L 328,496" fill="none" stroke="black"/>
                  <path d="M 328,528 L 328,608" fill="none" stroke="black"/>
                  <path d="M 360,32 L 360,64" fill="none" stroke="black"/>
                  <path d="M 400,32 L 400,64" fill="none" stroke="black"/>
                  <path d="M 448,64 L 448,112" fill="none" stroke="black"/>
                  <path d="M 448,144 L 448,224" fill="none" stroke="black"/>
                  <path d="M 448,336 L 448,496" fill="none" stroke="black"/>
                  <path d="M 448,528 L 448,608" fill="none" stroke="black"/>
                  <path d="M 488,32 L 488,64" fill="none" stroke="black"/>
                  <path d="M 504,32 L 504,64" fill="none" stroke="black"/>
                  <path d="M 544,64 L 544,112" fill="none" stroke="black"/>
                  <path d="M 544,144 L 544,304" fill="none" stroke="black"/>
                  <path d="M 544,336 L 544,496" fill="none" stroke="black"/>
                  <path d="M 544,528 L 544,608" fill="none" stroke="black"/>
                  <path d="M 576,32 L 576,64" fill="none" stroke="black"/>
                  <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
                  <path d="M 136,32 L 232,32" fill="none" stroke="black"/>
                  <path d="M 288,32 L 360,32" fill="none" stroke="black"/>
                  <path d="M 400,32 L 488,32" fill="none" stroke="black"/>
                  <path d="M 504,32 L 576,32" fill="none" stroke="black"/>
                  <path d="M 136,64 L 232,64" fill="none" stroke="black"/>
                  <path d="M 288,64 L 360,64" fill="none" stroke="black"/>
                  <path d="M 400,64 L 488,64" fill="none" stroke="black"/>
                  <path d="M 504,64 L 576,64" fill="none" stroke="black"/>
                  <path d="M 8,80 L 80,80" fill="none" stroke="black"/>
                  <path d="M 296,176 L 320,176" fill="none" stroke="black"/>
                  <path d="M 296,208 L 320,208" fill="none" stroke="black"/>
                  <path d="M 328,272 L 360,272" fill="none" stroke="black"/>
                  <path d="M 480,272 L 536,272" fill="none" stroke="black"/>
                  <path d="M 336,288 L 360,288" fill="none" stroke="black"/>
                  <path d="M 488,288 L 544,288" fill="none" stroke="black"/>
                  <path d="M 304,352 L 328,352" fill="none" stroke="black"/>
                  <path d="M 296,464 L 320,464" fill="none" stroke="black"/>
                  <path d="M 280,544 L 328,544" fill="none" stroke="black"/>
                  <path d="M 296,592 L 320,592" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="544,272 532,266.4 532,277.6" fill="black" transform="rotate(0,536,272)"/>
                  <polygon class="arrowhead" points="344,288 332,282.4 332,293.6" fill="black" transform="rotate(180,336,288)"/>
                  <polygon class="arrowhead" points="328,592 316,586.4 316,597.6" fill="black" transform="rotate(0,320,592)"/>
                  <polygon class="arrowhead" points="328,464 316,458.4 316,469.6" fill="black" transform="rotate(0,320,464)"/>
                  <polygon class="arrowhead" points="328,208 316,202.4 316,213.6" fill="black" transform="rotate(0,320,208)"/>
                  <polygon class="arrowhead" points="328,176 316,170.4 316,181.6" fill="black" transform="rotate(0,320,176)"/>
                  <g class="text">
                    <text x="44" y="52">Origin</text>
                    <text x="160" y="52">MoQ</text>
                    <text x="200" y="52">Relay</text>
                    <text x="324" y="52">Client</text>
                    <text x="444" y="52">Attester</text>
                    <text x="540" y="52">Issuer</text>
                    <text x="44" y="68">Issuer</text>
                    <text x="48" y="132">:</text>
                    <text x="88" y="132">Phase</text>
                    <text x="124" y="132">1:</text>
                    <text x="176" y="132">Bootstrap</text>
                    <text x="240" y="132">Token</text>
                    <text x="312" y="132">Acquisition</text>
                    <text x="448" y="132">:</text>
                    <text x="544" y="132">:</text>
                    <text x="256" y="164">&lt;-CLIENT_SETUP[]-</text>
                    <text x="240" y="180">-SERVER_SETUP</text>
                    <text x="216" y="196">[AUTH</text>
                    <text x="284" y="196">CHALLENGE]</text>
                    <text x="240" y="212">-UNAUTHORIZED</text>
                    <text x="392" y="244">&lt;=Attestation=&gt;</text>
                    <text x="448" y="260">|</text>
                    <text x="420" y="276">TokenRequest</text>
                    <text x="424" y="292">TokenResponse</text>
                    <text x="448" y="308">|</text>
                    <text x="48" y="324">:</text>
                    <text x="88" y="324">Phase</text>
                    <text x="124" y="324">2:</text>
                    <text x="160" y="324">Token</text>
                    <text x="220" y="324">Exchange</text>
                    <text x="272" y="324">via</text>
                    <text x="320" y="324">Reverse</text>
                    <text x="372" y="324">Flow</text>
                    <text x="448" y="324">:</text>
                    <text x="544" y="324">:</text>
                    <text x="244" y="356">&lt;-CLIENT_SETUP</text>
                    <text x="216" y="372">[AUTH</text>
                    <text x="264" y="372">TOKEN</text>
                    <text x="296" y="372">+</text>
                    <text x="220" y="388">AUTH</text>
                    <text x="276" y="388">REQUEST]</text>
                    <text x="116" y="420">&lt;-CredentialReq-</text>
                    <text x="116" y="436">-CredentialRes-&gt;</text>
                    <text x="240" y="468">-SERVER_SETUP</text>
                    <text x="216" y="484">[AUTH</text>
                    <text x="280" y="484">RESPONSE]</text>
                    <text x="48" y="516">:</text>
                    <text x="88" y="516">Phase</text>
                    <text x="124" y="516">3:</text>
                    <text x="164" y="516">Normal</text>
                    <text x="236" y="516">Operations</text>
                    <text x="300" y="516">with</text>
                    <text x="352" y="516">Derived</text>
                    <text x="412" y="516">Tokens</text>
                    <text x="448" y="516">:</text>
                    <text x="544" y="516">:</text>
                    <text x="232" y="548">&lt;-SUBSCRIBE</text>
                    <text x="220" y="564">[Token</text>
                    <text x="268" y="564">from</text>
                    <text x="248" y="580">credential]</text>
                    <text x="240" y="596">-SUBSCRIBE_OK</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
+--------+      +-----------+      +--------+    +----------+ +--------+
| Origin |      | MoQ Relay |      | Client |    | Attester | | Issuer |
| Issuer |      +-----+-----+      +----+---+    +-----+----+ +----+---+
+----+---+            |                 |              |           |
     |                |                 |              |           |
     |                |                 |              |           |
     :  Phase 1: Bootstrap Token Acquisition           :           :
     |                |                 |              |           |
     |                |<-CLIENT_SETUP[]-+              |           |
     |                +-SERVER_SETUP--->|              |           |
     |                | [AUTH CHALLENGE]|              |           |
     |                +-UNAUTHORIZED--->|              |           |
     |                |                 |              |           |
     |                |                 |<=Attestation=>           |
     |                |                 |              |           |
     |                |                 +---- TokenRequest ------->|
     |                |                 |<--- TokenResponse -------+
     |                |                 |              |           |
     :  Phase 2: Token Exchange via Reverse Flow       :           :
     |                |                 |              |           |
     |                |<-CLIENT_SETUP---+              |           |
     |                | [AUTH TOKEN +   |              |           |
     |                |  AUTH REQUEST]  |              |           |
     |                |                 |              |           |
     |<-CredentialReq-+                 |              |           |
     +-CredentialRes->|                 |              |           |
     |                |                 |              |           |
     |                +-SERVER_SETUP--->|              |           |
     |                | [AUTH RESPONSE] |              |           |
     |                |                 |              |           |
     :  Phase 3: Normal Operations with Derived Tokens :           :
     |                |                 |              |           |
     |                |<-SUBSCRIBE------+              |           |
     |                | [Token from     |              |           |
     |                |  credential]    |              |           |
     |                +-SUBSCRIBE_OK--->|              |           |
     |                |                 |              |           |
]]></artwork>
            </artset>
          </figure>
        </section>
        <section anchor="detailed-reverse-flow-steps">
          <name>Detailed Reverse Flow Steps</name>
          <t><strong>Phase 1: Bootstrap Token Acquisition</strong></t>
          <ol spacing="normal" type="1"><li>
              <t>The client initiates a connection with <tt>CLIENT_SETUP</tt> without authorization.</t>
            </li>
            <li>
              <t>The MoQ relay responds with a <tt>SERVER_SETUP</tt> carrying an AUTH CHALLENGE
option whose <tt>TokenChallenge</tt> specifies a publicly verifiable token type
(<tt>0x0002</tt>), then terminates the session with <tt>UNAUTHORIZED</tt>.</t>
            </li>
            <li>
              <t>The client performs attestation with an external attester/issuer.</t>
            </li>
            <li>
              <t>The client obtains a publicly verifiable token.</t>
            </li>
          </ol>
          <t><strong>Phase 2: Token Exchange via Reverse Flow</strong></t>
          <ol spacing="normal" type="1"><li>
              <t>The client sends <tt>CLIENT_SETUP</tt> with:
              </t>
              <ul spacing="normal">
                <li>
                  <t>An AUTHORIZATION TOKEN option carrying the publicly verifiable <tt>Token</tt>
from Phase 1</t>
                </li>
                <li>
                  <t>An AUTH REQUEST option carrying a <tt>CredentialRequest</tt> (or
<tt>GenericBatchTokenRequest</tt>) for a privately verifiable token type
(<tt>0x0001</tt>, <tt>0x0005</tt>, or <tt>0xE5AC</tt>)</t>
                </li>
              </ul>
            </li>
            <li>
              <t>The MoQ relay validates the bootstrap token, then processes the credential
request using its internal issuer.</t>
            </li>
            <li>
              <t>The MoQ relay responds with <tt>SERVER_SETUP</tt> containing:
              </t>
              <ul spacing="normal">
                <li>
                  <t>An AUTH RESPONSE option carrying the <tt>CredentialResponse</tt> (or
<tt>GenericBatchTokenResponse</tt>) with the privately verifiable
credential/tokens</t>
                </li>
              </ul>
            </li>
          </ol>
          <t><strong>Phase 3: Normal Operations</strong></t>
          <ol spacing="normal" type="1"><li>
              <t>For subsequent operations (SUBSCRIBE, PUBLISH, FETCH), the client presents
tokens derived from the credential obtained in Phase 2.</t>
            </li>
            <li>
              <t>The MoQ relay validates tokens locally using its private verification key.</t>
            </li>
          </ol>
        </section>
        <section anchor="credential-encoding">
          <name>Credential Request/Response Encoding</name>
          <t>When using the reverse flow, the AUTH REQUEST payload
(<xref target="auth-request-response-param"/>) contains the credential or token request
for the privately verifiable token type:</t>
          <ul spacing="normal">
            <li>
              <t>For <tt>0x0001</tt> or <tt>0x0005</tt>: <tt>GenericBatchTokenRequest</tt> as defined in <xref section="6.1" sectionFormat="of" target="PRIVACYPASS-BATCHED"/></t>
            </li>
            <li>
              <t>For <tt>0xE5AC</tt>: <tt>CredentialRequest</tt> as defined in <xref section="7.1" sectionFormat="of" target="PRIVACYPASS-ARC"/></t>
            </li>
          </ul>
          <t>Similarly, the AUTH RESPONSE payload contains:</t>
          <ul spacing="normal">
            <li>
              <t>For <tt>0x0001</tt> or <tt>0x0005</tt>: <tt>GenericBatchTokenResponse</tt> as defined in <xref section="6.2" sectionFormat="of" target="PRIVACYPASS-BATCHED"/></t>
            </li>
            <li>
              <t>For <tt>0xE5AC</tt>: <tt>CredentialResponse</tt> as defined in <xref section="7.2" sectionFormat="of" target="PRIVACYPASS-ARC"/></t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="trust-model">
        <name>Trust Model</name>
        <t>The architecture assumes the following trust relationships based on
<xref section="3" sectionFormat="of" target="RFC9576"/>:</t>
        <ul spacing="normal">
          <li>
            <t>Relays trust issuers to properly validate client eligibility
before issuing tokens</t>
          </li>
          <li>
            <t>Issuers trust attesters to accurately verify client eligibility</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="privacy-pass-token-integration">
      <name>Privacy Pass Token Integration</name>
      <t>This section describes how Privacy Pass tokens are integrated into the MoQ
transport protocol to provide privacy-preserving authorization for various
media operations.</t>
      <section anchor="moq-token-types">
        <name>Token Types for MoQ Authorization</name>
        <t>This specification uses the below existing Privacy Pass token types:</t>
        <t><strong>Publicly verifiable token types</strong></t>
        <ul spacing="normal">
          <li>
            <t><tt>0x0002 (Blind RSA (2048-bit))</tt>: Defined in <xref section="6" sectionFormat="of" target="RFC9578"/>. Uses
blind RSA signatures (<xref target="RFC9474"/>) for deployments requiring distributed validation
across multiple relays.</t>
          </li>
        </ul>
        <t><strong>Privately verifiable token types</strong></t>
        <ul spacing="normal">
          <li>
            <t><tt>0x0001 (VOPRF(P-384, SHA-384))</tt>: Defined in <xref section="6" sectionFormat="of" target="RFC9578"/>. Uses VOPRF (<xref target="RFC9497"/>) for
deployments where the origin is the issuer. Issuance can be batched as defined in <xref section="5" sectionFormat="of" target="PRIVACYPASS-BATCHED"/>.</t>
          </li>
          <li>
            <t><tt>0x0005 (VOPRF(ristretto255, SHA-512))</tt>: Defined in <xref section="8.1" sectionFormat="of" target="PRIVACYPASS-BATCHED"/>. Uses VOPRF (<xref target="RFC9497"/>) for
deployments where the origin is the issuer. Issuance can be batched as defined in <xref section="5" sectionFormat="of" target="PRIVACYPASS-BATCHED"/>.</t>
          </li>
          <li>
            <t><tt>0xE5AC (ARC(P-256))</tt>: Anonymous Rate Limit Credentials Token using <xref target="ARC"/>.
Tokens are presented by clients based on an issued credential and up to a <tt>presentation_limit</tt>.</t>
          </li>
        </ul>
      </section>
      <section anchor="token-structure">
        <name>Token Structure</name>
        <t>Privacy Pass tokens used in MoQ <bcp14>MUST</bcp14> follow the structure defined in
<xref section="2.2" sectionFormat="of" target="RFC9577"/> for the PrivateToken HTTP authentication scheme. The token
structure includes:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Token Type</strong>: 2-byte identifier specifying the issuance protocol used</t>
          </li>
          <li>
            <t><strong>Nonce</strong>: 32-byte client-generated random value for uniqueness</t>
          </li>
          <li>
            <t><strong>Challenge Digest</strong>: 32-byte SHA-256 hash of the TokenChallenge</t>
          </li>
          <li>
            <t><strong>Token Key ID</strong>: Variable-length identifier for the issuer's public key</t>
          </li>
          <li>
            <t><strong>Authenticator</strong>: Variable-length cryptographic proof bound to the token</t>
          </li>
        </ul>
        <section anchor="token-challenge-structure-for-moq">
          <name>Token Challenge Structure for MoQ</name>
          <t>MoQ-specific TokenChallenge structures use the default format defined in
<xref section="2.1" sectionFormat="of" target="RFC9577"/> with MoQ-specific parameters in the origin_info field,
reproduced thereafter for convenience:</t>
          <artwork><![CDATA[
struct {
    uint16_t token_type;
    opaque issuer_name<1..2^16-1>;
    opaque redemption_context<0..32>;
    opaque origin_info<0..2^16-1>;
} TokenChallenge;
]]></artwork>
          <t>For MoQ usage, authorization scope information can be encoded by the origin
within <tt>origin_info</tt> field. This is encoded in the Token at issuance time when
types <tt>0x0001</tt>, <tt>0x0002</tt>, <tt>0x0005</tt> are used. When clients present a credential
such as with <xref target="ARC"/>, the scope may be restricted at presentation time.</t>
          <t>Origins <bcp14>MAY</bcp14> use <tt>redemption_context</tt> to scope token use to properties of the client
session. As described in <xref section="2.1.1.2" sectionFormat="of" target="RFC9577"/>, <tt>redemption context</tt> can
be set to 32-byte random nonce, to the hash of a specific time window, or even
derived from the client's ASN.</t>
        </section>
        <section anchor="moq-actions">
          <name>MoQ Actions</name>
          <t>MoQ operations are identified by the following action values, aligned with
MoQTransport control message types:</t>
          <table anchor="moq-actions-table">
            <name>MoQ Action Values</name>
            <thead>
              <tr>
                <th align="left">Action</th>
                <th align="left">Value</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">CLIENT_SETUP</td>
                <td align="left">0</td>
                <td align="left">
                  <xref section="9.1" sectionFormat="of" target="MoQ-TRANSPORT"/></td>
              </tr>
              <tr>
                <td align="left">SERVER_SETUP</td>
                <td align="left">1</td>
                <td align="left">
                  <xref section="9.1" sectionFormat="of" target="MoQ-TRANSPORT"/></td>
              </tr>
              <tr>
                <td align="left">PUBLISH_NAMESPACE</td>
                <td align="left">2</td>
                <td align="left">
                  <xref section="9.13" sectionFormat="of" target="MoQ-TRANSPORT"/></td>
              </tr>
              <tr>
                <td align="left">SUBSCRIBE_NAMESPACE</td>
                <td align="left">3</td>
                <td align="left">
                  <xref section="9.14" sectionFormat="of" target="MoQ-TRANSPORT"/></td>
              </tr>
              <tr>
                <td align="left">SUBSCRIBE</td>
                <td align="left">4</td>
                <td align="left">
                  <xref section="9.6" sectionFormat="of" target="MoQ-TRANSPORT"/></td>
              </tr>
              <tr>
                <td align="left">REQUEST_UPDATE</td>
                <td align="left">5</td>
                <td align="left">
                  <xref section="9.5" sectionFormat="of" target="MoQ-TRANSPORT"/></td>
              </tr>
              <tr>
                <td align="left">PUBLISH</td>
                <td align="left">6</td>
                <td align="left">
                  <xref section="9.8" sectionFormat="of" target="MoQ-TRANSPORT"/></td>
              </tr>
              <tr>
                <td align="left">FETCH</td>
                <td align="left">7</td>
                <td align="left">
                  <xref section="9.11" sectionFormat="of" target="MoQ-TRANSPORT"/></td>
              </tr>
              <tr>
                <td align="left">TRACK_STATUS</td>
                <td align="left">8</td>
                <td align="left">
                  <xref section="9.12" sectionFormat="of" target="MoQ-TRANSPORT"/></td>
              </tr>
              <tr>
                <td align="left">SUBSCRIBE_TRACKS</td>
                <td align="left">9</td>
                <td align="left">
                  <xref section="9.17" sectionFormat="of" target="MoQ-TRANSPORT"/></td>
              </tr>
            </tbody>
          </table>
          <t>The default authorization policy is "blocked" - all actions are denied unless
explicitly permitted by a token scope.</t>
          <t><tt>MoQAction</tt> wire representation is as follows</t>
          <artwork><![CDATA[
enum {
    CLIENT_SETUP(0),
    SERVER_SETUP(1),
    PUBLISH_NAMESPACE(2),
    SUBSCRIBE_NAMESPACE(3),
    SUBSCRIBE(4),
    REQUEST_UPDATE(5),
    PUBLISH(6),
    FETCH(7),
    TRACK_STATUS(8),
    SUBSCRIBE_TRACKS(9),
    (255)
} MoQAction;
]]></artwork>
        </section>
        <section anchor="match-types">
          <name>Match Types</name>
          <t>Match rules for namespaces and track names support the following types:</t>
          <table anchor="match-types-table">
            <name>Match Type Values</name>
            <thead>
              <tr>
                <th align="left">Match Type</th>
                <th align="left">Value</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">MATCH_EXACT</td>
                <td align="left">0</td>
                <td align="left">Value must equal the pattern exactly</td>
              </tr>
              <tr>
                <td align="left">MATCH_PREFIX</td>
                <td align="left">1</td>
                <td align="left">Value must start with the pattern</td>
              </tr>
              <tr>
                <td align="left">MATCH_SUFFIX</td>
                <td align="left">2</td>
                <td align="left">Value must end with the pattern</td>
              </tr>
              <tr>
                <td align="left">MATCH_CONTAINS</td>
                <td align="left">3</td>
                <td align="left">Value must contain the pattern as substring</td>
              </tr>
            </tbody>
          </table>
          <t>Track namespaces in MoQ are represented as ordered tuples of byte strings
(e.g., <tt>["example.com", "live", "sports"]</tt>). Match rules operate on these
tuples at tuple element boundaries. The pattern in a <tt>MatchRule</tt> (defined in <xref target="scope-origin-info"/>) is also a
tuple of byte strings, and matching is performed element-by-element.</t>
          <t>As for track names, match rules can be applied directly given there is a single
tuple element.</t>
          <t>No normalization is performed on namespace tuple elements or track name values
before matching. Comparisons are performed as byte-level operations on each
tuple element.</t>
          <t><tt>MatchType</tt> wire representation is as follows</t>
          <artwork><![CDATA[
enum {
    MATCH_EXACT(0),
    MATCH_PREFIX(1),
    MATCH_SUFFIX(2),
    MATCH_CONTAINS(3),
    (255)
} MatchType;
]]></artwork>
        </section>
        <section anchor="scope-origin-info">
          <name>Authorization Scope Structure (origin_info)</name>
          <t>When authorization scope is bound at issuance time, the <tt>origin_info</tt> field
contains a binary-encoded <tt>MoQAuthorizationInfo</tt> structure:</t>
          <artwork><![CDATA[
struct {
    opaque element<0..2^16-1>;
} TupleElement;

struct {
    TupleElement elements<0..2^16-1>;
} NamespaceTuple;

struct {
    MatchType match_type;
    NamespaceTuple value;
} NamespaceMatchRule;

struct {
    MatchType match_type;
    opaque value<0..2^16-1>;
} TrackNameMatchRule;

struct {
    MoQAction actions<1..2^8-1>;
    NamespaceMatchRule namespace_match;
    TrackNameMatchRule track_name_match;
} MoQAuthScope;

struct {
    MoQAuthScope scopes<1..2^8-1>;
} MoQAuthorizationInfo;
]]></artwork>
          <t>A token <bcp14>MAY</bcp14> contain multiple <tt>MoQAuthScope</tt> entries to authorize different
combinations of actions and resource patterns. Authorization succeeds if
ANY scope in the token permits the requested operation.</t>
        </section>
        <section anchor="examples">
          <name>Examples</name>
          <t>The following examples illustrate authorization scope configurations:</t>
          <t>Subscribe to live sports namespace (prefix match):</t>
          <artwork><![CDATA[
MoQAuthScope {
    actions = [SUBSCRIBE(4)],
    namespace_match = {
        match_type = MATCH_PREFIX(1),
        value = ["sports.example.com", "live"]
    },
    track_name_match = {
        match_type = MATCH_PREFIX(1),
        value = ""
    }
}
]]></artwork>
          <t>This matches namespace tuples like <tt>["sports.example.com", "live", "soccer"]</tt>
and <tt>["sports.example.com", "live", "tennis", "finals"]</tt>.</t>
          <t>Publish to specific meeting track (exact match):</t>
          <artwork><![CDATA[
MoQAuthScope {
    actions = [PUBLISH(6)],
    namespace_match = {
        match_type = MATCH_EXACT(0),
        value = ["meetings.example.com", "meeting", "m123"]
    },
    track_name_match = {
        match_type = MATCH_PREFIX(1),
        value = "audio-"
    }
}
]]></artwork>
          <t>This matches only the exact namespace tuple <tt>["meetings.example.com", "meeting", "m123"]</tt>
with track names starting with "audio-".</t>
          <t>Fetch video-on-demand with suffix matching:</t>
          <artwork><![CDATA[
MoQAuthScope {
    actions = [FETCH(7)],
    namespace_match = {
        match_type = MATCH_CONTAINS(3),
        value = ["vod", "movies"]
    },
    track_name_match = {
        match_type = MATCH_SUFFIX(2),
        value = ".mp4"
    }
}
]]></artwork>
          <t>This matches namespace tuples containing the contiguous subsequence
<tt>["vod", "movies"]</tt>, such as <tt>["example.com", "vod", "movies", "action"]</tt>.</t>
        </section>
      </section>
      <section anchor="track-namespace-and-track-name-matching-rules">
        <name>Track Namespace and Track Name Matching Rules</name>
        <t>This specification defines matching rules for track namespaces and track names
to enable fine-grained access control while maintaining privacy. Both namespace
and track name matching use the same <tt>MatchRule</tt> structure and algorithm.</t>
        <section anchor="match-rule-evaluation">
          <name>Match Rule Evaluation</name>
          <t>Given a <tt>MatchRule</tt> and a target value (namespace tuple or track name), the
match succeeds according to the following rules. For namespace matching, both
the pattern and target are tuples of byte strings. Matching operates at tuple
element boundaries.</t>
          <t><tt>MATCH_EXACT (0)</tt>:</t>
          <t>The target <bcp14>MUST</bcp14> be identical to the pattern. For namespace
tuples, this means the same number of elements with each element byte-for-byte
identical. The pattern tuple <tt>["example.com", "live"]</tt> matches only
<tt>["example.com", "live"]</tt>, not <tt>["example.com", "live", "sports"]</tt>.</t>
          <t><tt>MATCH_PREFIX (1)</tt>:</t>
          <t>The target <bcp14>MUST</bcp14> start with the pattern at tuple element
boundaries. The pattern tuple <tt>["example.com", "live"]</tt> matches
<tt>["example.com", "live", "sports"]</tt> and <tt>["example.com", "live", "news", "breaking"]</tt>
but not <tt>["example.com", "vod"]</tt>. Note that <tt>["example.com", "liv"]</tt> does NOT
match <tt>["example.com", "live"]</tt> since matching is at element boundaries.</t>
          <t><tt>MATCH_SUFFIX (2)</tt>:</t>
          <t>The target <bcp14>MUST</bcp14> end with the pattern at tuple element
boundaries. The pattern tuple <tt>["audio"]</tt> matches <tt>["meeting123", "audio"]</tt> and
<tt>["conference", "room1", "audio"]</tt> but not <tt>["audio", "opus"]</tt>.</t>
          <t><tt>MATCH_CONTAINS (3)</tt>:</t>
          <t>The target <bcp14>MUST</bcp14> contain the pattern as a contiguous
subsequence of tuple elements. The pattern tuple <tt>["live", "sports"]</tt> matches
<tt>["example.com", "live", "sports", "soccer"]</tt> but the single-element pattern
<tt>["sports"]</tt> does NOT match <tt>["live-sports", "channel"]</tt> since "sports" is a
substring within an element, not a complete element.</t>
          <t>Note: To match all values, use MATCH_PREFIX with an empty pattern (<tt>[]</tt> for
namespaces or <tt>""</tt> for track names). An empty pattern is a prefix of every value.</t>
        </section>
        <section anchor="matching-algorithm">
          <name>Matching Algorithm</name>
          <t>When a MoQ relay receives a request with a Privacy Pass token, it performs the
following validation steps to determine whether to authorize the requested
operation:</t>
          <figure anchor="fig-matching-algorithm">
            <name>Token Validation and Matching Algorithm</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="880" width="448" viewBox="0 0 448 880" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,32 L 8,80" fill="none" stroke="black"/>
                  <path d="M 8,128 L 8,176" fill="none" stroke="black"/>
                  <path d="M 8,224 L 8,272" fill="none" stroke="black"/>
                  <path d="M 8,320 L 8,368" fill="none" stroke="black"/>
                  <path d="M 8,416 L 8,480" fill="none" stroke="black"/>
                  <path d="M 8,528 L 8,576" fill="none" stroke="black"/>
                  <path d="M 8,624 L 8,672" fill="none" stroke="black"/>
                  <path d="M 8,720 L 8,768" fill="none" stroke="black"/>
                  <path d="M 8,816 L 8,864" fill="none" stroke="black"/>
                  <path d="M 80,80 L 80,120" fill="none" stroke="black"/>
                  <path d="M 80,176 L 80,216" fill="none" stroke="black"/>
                  <path d="M 80,272 L 80,312" fill="none" stroke="black"/>
                  <path d="M 80,368 L 80,408" fill="none" stroke="black"/>
                  <path d="M 80,480 L 80,520" fill="none" stroke="black"/>
                  <path d="M 80,576 L 80,616" fill="none" stroke="black"/>
                  <path d="M 80,672 L 80,712" fill="none" stroke="black"/>
                  <path d="M 80,768 L 80,808" fill="none" stroke="black"/>
                  <path d="M 160,32 L 160,80" fill="none" stroke="black"/>
                  <path d="M 160,128 L 160,176" fill="none" stroke="black"/>
                  <path d="M 160,224 L 160,272" fill="none" stroke="black"/>
                  <path d="M 160,320 L 160,368" fill="none" stroke="black"/>
                  <path d="M 160,416 L 160,480" fill="none" stroke="black"/>
                  <path d="M 160,528 L 160,576" fill="none" stroke="black"/>
                  <path d="M 160,624 L 160,672" fill="none" stroke="black"/>
                  <path d="M 160,720 L 160,768" fill="none" stroke="black"/>
                  <path d="M 160,816 L 160,864" fill="none" stroke="black"/>
                  <path d="M 208,128 L 208,176" fill="none" stroke="black"/>
                  <path d="M 208,224 L 208,272" fill="none" stroke="black"/>
                  <path d="M 248,464 L 248,736" fill="none" stroke="black"/>
                  <path d="M 304,416 L 304,464" fill="none" stroke="black"/>
                  <path d="M 344,128 L 344,176" fill="none" stroke="black"/>
                  <path d="M 344,224 L 344,272" fill="none" stroke="black"/>
                  <path d="M 440,416 L 440,464" fill="none" stroke="black"/>
                  <path d="M 8,32 L 160,32" fill="none" stroke="black"/>
                  <path d="M 8,80 L 160,80" fill="none" stroke="black"/>
                  <path d="M 8,128 L 160,128" fill="none" stroke="black"/>
                  <path d="M 208,128 L 344,128" fill="none" stroke="black"/>
                  <path d="M 168,144 L 200,144" fill="none" stroke="black"/>
                  <path d="M 8,176 L 160,176" fill="none" stroke="black"/>
                  <path d="M 208,176 L 344,176" fill="none" stroke="black"/>
                  <path d="M 8,224 L 160,224" fill="none" stroke="black"/>
                  <path d="M 208,224 L 344,224" fill="none" stroke="black"/>
                  <path d="M 168,240 L 200,240" fill="none" stroke="black"/>
                  <path d="M 8,272 L 160,272" fill="none" stroke="black"/>
                  <path d="M 208,272 L 344,272" fill="none" stroke="black"/>
                  <path d="M 8,320 L 160,320" fill="none" stroke="black"/>
                  <path d="M 8,368 L 160,368" fill="none" stroke="black"/>
                  <path d="M 8,416 L 160,416" fill="none" stroke="black"/>
                  <path d="M 304,416 L 440,416" fill="none" stroke="black"/>
                  <path d="M 160,432 L 296,432" fill="none" stroke="black"/>
                  <path d="M 168,464 L 248,464" fill="none" stroke="black"/>
                  <path d="M 304,464 L 440,464" fill="none" stroke="black"/>
                  <path d="M 8,480 L 160,480" fill="none" stroke="black"/>
                  <path d="M 8,528 L 160,528" fill="none" stroke="black"/>
                  <path d="M 168,544 L 248,544" fill="none" stroke="black"/>
                  <path d="M 8,576 L 160,576" fill="none" stroke="black"/>
                  <path d="M 8,624 L 160,624" fill="none" stroke="black"/>
                  <path d="M 168,640 L 248,640" fill="none" stroke="black"/>
                  <path d="M 8,672 L 160,672" fill="none" stroke="black"/>
                  <path d="M 8,720 L 160,720" fill="none" stroke="black"/>
                  <path d="M 168,736 L 248,736" fill="none" stroke="black"/>
                  <path d="M 8,768 L 160,768" fill="none" stroke="black"/>
                  <path d="M 8,816 L 160,816" fill="none" stroke="black"/>
                  <path d="M 8,864 L 160,864" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="304,432 292,426.4 292,437.6" fill="black" transform="rotate(0,296,432)"/>
                  <polygon class="arrowhead" points="208,240 196,234.4 196,245.6" fill="black" transform="rotate(0,200,240)"/>
                  <polygon class="arrowhead" points="208,144 196,138.4 196,149.6" fill="black" transform="rotate(0,200,144)"/>
                  <polygon class="arrowhead" points="176,464 164,458.4 164,469.6" fill="black" transform="rotate(180,168,464)"/>
                  <polygon class="arrowhead" points="88,808 76,802.4 76,813.6" fill="black" transform="rotate(90,80,808)"/>
                  <polygon class="arrowhead" points="88,712 76,706.4 76,717.6" fill="black" transform="rotate(90,80,712)"/>
                  <polygon class="arrowhead" points="88,616 76,610.4 76,621.6" fill="black" transform="rotate(90,80,616)"/>
                  <polygon class="arrowhead" points="88,520 76,514.4 76,525.6" fill="black" transform="rotate(90,80,520)"/>
                  <polygon class="arrowhead" points="88,408 76,402.4 76,413.6" fill="black" transform="rotate(90,80,408)"/>
                  <polygon class="arrowhead" points="88,312 76,306.4 76,317.6" fill="black" transform="rotate(90,80,312)"/>
                  <polygon class="arrowhead" points="88,216 76,210.4 76,221.6" fill="black" transform="rotate(90,80,216)"/>
                  <polygon class="arrowhead" points="88,120 76,114.4 76,125.6" fill="black" transform="rotate(90,80,120)"/>
                  <g class="text">
                    <text x="48" y="52">Extract</text>
                    <text x="104" y="52">Token</text>
                    <text x="36" y="68">from</text>
                    <text x="72" y="68">MoQ</text>
                    <text x="120" y="68">Message</text>
                    <text x="104" y="100">Yes</text>
                    <text x="40" y="148">Check</text>
                    <text x="92" y="148">Replay</text>
                    <text x="272" y="148">Authorization</text>
                    <text x="60" y="164">Protection</text>
                    <text x="180" y="164">No</text>
                    <text x="244" y="164">Failed</text>
                    <text x="44" y="244">Verify</text>
                    <text x="96" y="244">Token</text>
                    <text x="272" y="244">Authorization</text>
                    <text x="80" y="260">(Type-specific)</text>
                    <text x="180" y="260">No</text>
                    <text x="244" y="260">Failed</text>
                    <text x="104" y="292">Yes</text>
                    <text x="48" y="340">Extract</text>
                    <text x="104" y="340">Scope</text>
                    <text x="72" y="356">(origin_info)</text>
                    <text x="368" y="436">Authorization</text>
                    <text x="32" y="452">For</text>
                    <text x="68" y="452">each</text>
                    <text x="112" y="452">Scope</text>
                    <text x="180" y="452">No</text>
                    <text x="212" y="452">more</text>
                    <text x="260" y="452">scopes</text>
                    <text x="340" y="452">Failed</text>
                    <text x="44" y="548">Action</text>
                    <text x="84" y="548">in</text>
                    <text x="76" y="564">scope.actions?</text>
                    <text x="204" y="564">No</text>
                    <text x="104" y="596">Yes</text>
                    <text x="56" y="644">Namespace</text>
                    <text x="120" y="644">Match</text>
                    <text x="36" y="660">Rule</text>
                    <text x="88" y="660">passes?</text>
                    <text x="204" y="660">No</text>
                    <text x="104" y="692">Yes</text>
                    <text x="40" y="740">Track</text>
                    <text x="84" y="740">Name</text>
                    <text x="128" y="740">Match</text>
                    <text x="36" y="756">Rule</text>
                    <text x="88" y="756">passes?</text>
                    <text x="104" y="788">Yes</text>
                    <text x="72" y="836">Authorization</text>
                    <text x="48" y="852">Granted</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
+------------------+
| Extract Token    |
| from MoQ Message |
+--------+---------+
         | Yes
         v
+------------------+     +----------------+
| Check Replay     |---->| Authorization  |
| Protection       | No  | Failed         |
+--------+---------+     +----------------+
         |
         v
+------------------+     +----------------+
| Verify Token     |---->| Authorization  |
| (Type-specific)  | No  | Failed         |
+--------+---------+     +----------------+
         | Yes
         v
+------------------+
| Extract Scope    |
| (origin_info)    |
+--------+---------+
         |
         v
+------------------+                 +----------------+
|                  +---------------->| Authorization  |
| For each Scope   | No more scopes  | Failed         |
|                  |<---------+      +----------------+
+--------+---------+          |
         |                    |
         v                    |
+------------------+          |
| Action in        |----------+
| scope.actions?   |    No    |
+--------+---------+          |
         | Yes                |
         v                    |
+------------------+          |
| Namespace Match  |----------+
| Rule passes?     |    No    |
+--------+---------+          |
         | Yes                |
         v                    |
+------------------+          |
| Track Name Match |----------+
| Rule passes?     |
+--------+---------+
         | Yes
         v
+------------------+
| Authorization    |
| Granted          |
+------------------+
]]></artwork>
            </artset>
          </figure>
          <ol spacing="normal" type="1"><li>
              <t><strong>Token Extraction</strong>: Extract the Privacy Pass token from the MoQ control
message (SETUP, SUBSCRIBE, FETCH, PUBLISH, PUBLISH_NAMESPACE, or other operation).</t>
            </li>
            <li>
              <t><strong>Token Verification</strong>: Verify the token using the appropriate method for
the token type:  </t>
              <ul spacing="normal">
                <li>
                  <t>Token Type <tt>0x0001</tt> or <tt>0x0005</tt> (VOPRF): Verify using the issuer's
private validation key</t>
                </li>
                <li>
                  <t>Token Type <tt>0x0002</tt> (Blind RSA): Verify using the issuer's public
verification key</t>
                </li>
                <li>
                  <t>Token Type <tt>0xE5AC</tt> (ARC): Verify the presentation proof using the
issuer's public parameters</t>
                </li>
              </ul>
            </li>
            <li>
              <t><strong>Replay Protection</strong>: Validate that the token has not been replayed:  </t>
              <ul spacing="normal">
                <li>
                  <t>Check token nonce uniqueness within the configured replay window</t>
                </li>
                <li>
                  <t>Verify token expiration timestamp if present in token metadata</t>
                </li>
              </ul>
            </li>
            <li>
              <t><strong>Scope Extraction</strong>: Extract authorization scope from the token:  </t>
              <ul spacing="normal">
                <li>
                  <t>If using <tt>origin_info</tt>: Decode the <tt>MoQAuthorizationInfo</tt> structure</t>
                </li>
              </ul>
            </li>
            <li>
              <t><strong>Scope Evaluation</strong>: For each <tt>MoQAuthScope</tt> in the token, check if the
requested operation is authorized:  </t>
              <t>
a. <strong>Action Check</strong>: Verify the requested MoQ action (from <xref target="moq-actions"/>)
   is present in the scope's <tt>actions</tt> list  </t>
              <t>
b. <strong>Namespace Match</strong>: Apply the <tt>namespace_match</tt> rule to the requested
   track namespace using the algorithm in <xref target="match-types"/>. Requests that
   carry a Track Namespace Prefix follow <xref target="prefix-requests"/>  </t>
              <t>
c. <strong>Track Name Match</strong>: Apply the <tt>track_name_match</tt> rule to the requested
   track name using the algorithm in <xref target="match-types"/>  </t>
              <t>
d. If all three checks pass, authorization succeeds for this scope</t>
            </li>
            <li>
              <t><strong>Authorization Decision</strong>: Access is granted if and only if:  </t>
              <ul spacing="normal">
                <li>
                  <t>Token verification succeeds (step 2)</t>
                </li>
                <li>
                  <t>Replay protection passes (step 3)</t>
                </li>
                <li>
                  <t>At least one scope in the token authorizes the operation (step 5)</t>
                </li>
              </ul>
            </li>
          </ol>
          <t>If authorization fails, an error is returned as specified in <xref target="errors"/>.</t>
        </section>
        <section anchor="prefix-requests">
          <name>Requests on a Track Namespace Prefix</name>
          <t>PUBLISH_NAMESPACE, SUBSCRIBE_NAMESPACE, and SUBSCRIBE_TRACKS carry a Track
Namespace Prefix instead of a track namespace and track name. Such a request
covers every track namespace that begins with the prefix, so a scope
authorizes it only if it covers all of them:</t>
          <ul spacing="normal">
            <li>
              <t>Namespace check: The <tt>namespace_match</tt> rule <bcp14>MUST</bcp14> be <tt>MATCH_PREFIX</tt>, and
its pattern <bcp14>MUST</bcp14> be a prefix of the requested Track Namespace Prefix. Other
match types cannot cover an open-ended set of namespaces.</t>
            </li>
            <li>
              <t>Track name check: PUBLISH_NAMESPACE and SUBSCRIBE_NAMESPACE do not name
tracks, so <tt>track_name_match</tt> is not evaluated for them. SUBSCRIBE_TRACKS
results in subscriptions to any track under the prefix, so its
<tt>track_name_match</tt> <bcp14>MUST</bcp14> be <tt>MATCH_PREFIX</tt> with an empty pattern.</t>
            </li>
          </ul>
          <t>As an alternative, a relay <bcp14>MAY</bcp14> accept SUBSCRIBE_NAMESPACE or SUBSCRIBE_TRACKS
under a narrower scope, provided it only sends NAMESPACE, NAMESPACE_DONE,
PUBLISH, or PUBLISH_SKIPPED messages for namespaces and tracks that the scope
covers.</t>
          <t>PUBLISH messages that a relay sends as a result of SUBSCRIBE_TRACKS are
covered by the token presented in the SUBSCRIBE_TRACKS. That token is not
copied into them (<xref section="9.19.2" sectionFormat="of" target="MoQ-TRANSPORT"/>).</t>
        </section>
      </section>
      <section anchor="transport-hooks">
        <name>Required MoQ Transport Extensions</name>
        <t>This document uses the Error Details mechanism of <xref target="MoQ-TRANSPORT"/> to
carry AUTH CHALLENGE in <tt>REQUEST_ERROR</tt>. It also defines AUTH CHALLENGE
Setup Options and Message Parameters, and AUTH REQUEST and AUTH RESPONSE
for reverse flow issuance. These hooks are scheme-agnostic: any authorization
scheme with a codepoint in the "MOQT Auth Token Type" registry can use them.</t>
        <t>[[editor's note: These hooks depend on ongoing MoQ Transport authentication
work (see <eref target="https://github.com/moq-wg/moq-transport/issues/1658">https://github.com/moq-wg/moq-transport/issues/1658</eref>).
<xref target="MoQ-TRANSPORT"/> provides Error Details in <tt>REQUEST_ERROR</tt>, but the
AUTH CHALLENGE binding remains undefined. SETUP challenge
delivery and in-band issuance, including successful-response parameters,
also remain open. AUTH REQUEST and AUTH RESPONSE describe the exchange
needed for reverse flow. They are not an adopted AUTH design-team solution.]]</t>
        <section anchor="auth-challenge-param">
          <name>AUTH CHALLENGE</name>
          <t>AUTH CHALLENGE is a repeatable, odd-numbered Error Detail in <tt>REQUEST_ERROR</tt>,
using the Key-Value-Pair encoding of <xref target="MoQ-TRANSPORT"/>. Its value has the
following encoding, also used by the Message Parameter and Setup
Option counterparts:</t>
          <artwork><![CDATA[
Auth Challenge {
  Token Type (vi64),
  Challenge (..)
}
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>Token Type: a codepoint from the "MOQT Auth Token Type" registry of
<xref target="MoQ-TRANSPORT"/>, identifying the authorization scheme.</t>
            </li>
            <li>
              <t>Challenge: opaque bytes whose format is defined by the Token Type.</t>
            </li>
          </ul>
          <t>The parameter conveys that the sender will accept a credential of this Token
Type satisfying this Challenge. It <bcp14>MAY</bcp14> be repeated within a message.
Challenges are ordered by sender preference, most preferred first. A
receiver ignores challenges whose Token Type it does not support.</t>
          <t>The Error Detail applies to the error codes in <xref target="error-codes-table"/> and
<bcp14>MAY</bcp14> appear more than once in a <tt>REQUEST_ERROR</tt>. Its encoding and size limits
follow <xref target="MoQ-TRANSPORT"/>.
The Message Parameter can appear in successful responses
(<tt>REQUEST_OK</tt>, <tt>SUBSCRIBE_OK</tt>, <tt>FETCH_OK</tt>), including <tt>REQUEST_OK</tt> responding
to <tt>REQUEST_UPDATE</tt> (<tt>REQUEST_UPDATE_OK</tt>). The Setup Option can
appear in <tt>SERVER_SETUP</tt>.</t>
          <t>[[editor's note: The codepoint in the "MOQT Error Detail Types" registry
of <xref target="MoQ-TRANSPORT"/> remains TBD, pending definition of the generic transport
challenge mechanism.]]</t>
          <t>For this document, the Token Type is PRIVACY_PASS_TOKEN
(<xref target="iana-moqt-token-type"/>) and the Challenge is a <tt>TokenChallenge</tt> as
defined in <xref section="2.1" sectionFormat="of" target="RFC9577"/>.</t>
        </section>
        <section anchor="auth-request-response-param">
          <name>AUTH REQUEST and AUTH RESPONSE Parameters</name>
          <t>The AUTH REQUEST and AUTH RESPONSE parameters are length-prefixed Message
Parameters, with Setup Option counterparts of identical encoding:</t>
          <artwork><![CDATA[
Auth Request {
  Token Type (vi64),
  Request Payload (..)
}

Auth Response {
  Token Type (vi64),
  Response Payload (..)
}
]]></artwork>
          <t>AUTH REQUEST asks the receiver to produce credential material defined by
the authorization scheme, such as a token issuance or renewal request. It
can appear wherever the AUTHORIZATION TOKEN parameter can, including
<tt>REQUEST_UPDATE</tt>, and in <tt>CLIENT_SETUP</tt> as an option. A receiver that does
not support the Token Type, or is unwilling to issue, ignores the parameter
and processes the message as if it were absent. The sender detects this by
the absence of a matching AUTH RESPONSE.</t>
          <t>AUTH RESPONSE carries the material produced in answer to an AUTH REQUEST.
It can appear in the response to the message that carried the AUTH REQUEST
(<tt>REQUEST_OK</tt>, <tt>SUBSCRIBE_OK</tt>, <tt>FETCH_OK</tt>) and in <tt>SERVER_SETUP</tt> as an
option. It <bcp14>MUST NOT</bcp14> be sent unsolicited.</t>
          <t>Request and response payloads are transient: they are not registered in the
token cache and do not count against MAX_AUTH_TOKEN_CACHE_SIZE.</t>
          <t>Issuance is between the client and its peer relay acting as issuer. These
parameters do not request issuance by an upstream relay or original publisher.</t>
          <t>[[editor's note: The transport binding needs to specify how issuance requests
and responses are correlated when <tt>REQUEST_UPDATE</tt> processing is coalesced.
The existing parameter update rules do not define this exchange.]]</t>
          <t>For this document, the Token Type is PRIVACY_PASS_TOKEN and the payloads
are the issuance structures listed in <xref target="credential-encoding"/>.</t>
        </section>
      </section>
      <section anchor="token-in-moq-messages">
        <name>Token in MOQ Messages</name>
        <t>Privacy Pass tokens are provided to MoQ relays using the existing MoQ
authorization framework with the following adaptations:</t>
        <section anchor="setup-message-authorization">
          <name>SETUP Message Authorization</name>
          <t>For connection-level authorization, the client includes an AUTHORIZATION
TOKEN Setup Option (<xref section="9.1.4" sectionFormat="of" target="MoQ-TRANSPORT"/>) whose Token Type
is PRIVACY_PASS_TOKEN and whose Token Value is a <tt>Token</tt> structure. When
the client also wants tokens or credentials issued over this connection
(<xref target="reverse-flow"/>), it adds an AUTH REQUEST option
(<xref target="auth-request-response-param"/>). The relay answers with an AUTH RESPONSE
option in <tt>SERVER_SETUP</tt>.</t>
          <artwork><![CDATA[
CLIENT_SETUP {
    Setup Options = [
        AUTHORIZATION TOKEN {
            Token Type = PRIVACY_PASS_TOKEN,
            Token Value = Token
        },
        AUTH REQUEST {          /* optional, reverse flow */
            Token Type = PRIVACY_PASS_TOKEN,
            Request Payload = GenericBatchTokenRequest
        }
    ]
}

SERVER_SETUP {
    Setup Options = [
        AUTH RESPONSE {         /* only answering an AUTH REQUEST */
            Token Type = PRIVACY_PASS_TOKEN,
            Response Payload = GenericBatchTokenResponse
        }
    ]
}
]]></artwork>
          <t>The <tt>Token</tt> structure is prepended by a two-byte token type identifier
as registered with IANA:</t>
          <artwork><![CDATA[
struct {
   /* From the IANA Privacy Pass Token Types Registry */
   uint16_t token_type;
   select (token_type) { /* Rest of the token */
     case (0x0001, 0x0002, 0x0005):
         uint8_t nonce[32];
         uint8_t challenge_digest[32];
         uint8_t token_key_id[Nid];
         uint8_t authenticator[Nk];
     case (other):
         /* Other token types from the IANA Privacy Pass
            Token Types Registry */
         opaque remainder<0..2^16-1>;
   }
} Token;
]]></artwork>
          <t>Where <tt>Nk</tt> is determined by token_type per the <xref target="PRIVACYPASS-IANA"/>.</t>
          <t>Unknown token types <bcp14>MUST</bcp14> be rejected.</t>
          <t>Each endpoint sends SETUP independently and <bcp14>MAY</bcp14> send it before receiving the
peer's SETUP (<xref section="9.1" sectionFormat="of" target="MoQ-TRANSPORT"/>). A relay that authenticates
SETUP or supports issuance through AUTH REQUEST <bcp14>MUST</bcp14> receive and process the
client's SETUP before sending its own, so it can include any required AUTH
CHALLENGE or AUTH RESPONSE. Requests that a client pipelines after its SETUP
are lost if the relay terminates the session with <tt>UNAUTHORIZED</tt>.</t>
        </section>
        <section anchor="moq-operation-level-authorization">
          <name>MoQ Operation-Level Authorization</name>
          <t>For individual MoQ operation authorization, tokens are included in
operation-specific control messages:</t>
          <artwork><![CDATA[
SUBSCRIBE {
    Track_Namespace = "sports.example.com/live/soccer",
    Track_Name = "video",
    Parameters = [
        AUTHORIZATION TOKEN {
            Token Type = PRIVACY_PASS_TOKEN,
            Token Value = Token
        }
    ]
}
]]></artwork>
        </section>
        <section anchor="token-aliases">
          <name>Token Aliases</name>
          <t><xref section="8.9" sectionFormat="of" target="MoQ-TRANSPORT"/> lets a sender register a token under an
Alias and refer to it later with USE_ALIAS. Privacy Pass tokens are
single-use, so a sender <bcp14>MUST</bcp14> use Alias Type USE_VALUE for tokens with Token
Type PRIVACY_PASS_TOKEN and <bcp14>MUST NOT</bcp14> register them.</t>
          <t>A receiver still processes a REGISTER as <xref target="MoQ-TRANSPORT"/> requires. Every
message whose token resolves to a PRIVACY_PASS_TOKEN, by value or by alias,
redeems that token and is subject to the replay check in
<xref target="matching-algorithm"/>. A USE_ALIAS that refers to an already redeemed token
therefore fails with <tt>TOKEN_REPLAYED</tt>. A relay that only accepts Privacy Pass
tokens can leave MAX_AUTH_TOKEN_CACHE_SIZE at its default of 0, which
prohibits aliases (<xref section="9.1.3" sectionFormat="of" target="MoQ-TRANSPORT"/>).</t>
        </section>
        <section anchor="continuous-auth-batched">
          <name>Continuous Authorization with Batched Tokens</name>
          <t>Long-lived MoQ sessions (such as live streaming or real-time communication)
require periodic re-authorization to ensure continued eligibility. Unlike
JWT-based approaches that use explicit revalidation intervals, Privacy Pass
can achieve continuous authorization through batched token issuance.</t>
          <t>During the initial SETUP exchange, clients can request multiple tokens by
sending a <tt>GenericBatchTokenRequest</tt> (defined in
<xref section="6.1" sectionFormat="of" target="PRIVACYPASS-BATCHED"/>) in an AUTH REQUEST option. Each
token in the batch is independently valid and can be presented for
subsequent operations or periodic re-authorization.</t>
          <artwork><![CDATA[
Batched Token Usage Timeline:

Time 0:     CLIENT_SETUP with Token_1, request batch of N tokens
            SERVER_SETUP with batch of N tokens

Time T:     SUBSCRIBE with Token_2 (from batch)

Time 2T:    Client presents Token_3 for continued authorization
            (proactive re-auth before relay requests it)

Time 3T:    Relay requests re-authorization
            Client presents Token_4
]]></artwork>
          <t>Relays <bcp14>MAY</bcp14> request periodic re-authorization by attaching an AUTH CHALLENGE
Error Detail to a <tt>REQUEST_ERROR</tt>, or an AUTH CHALLENGE parameter ahead of
time to a successful response alongside the EXPIRES parameter of
<xref target="MoQ-TRANSPORT"/>, which tells the client
what its extending <tt>REQUEST_UPDATE</tt> needs to present. Clients <bcp14>SHOULD</bcp14> present
a fresh token from their batch in response if any satisfy the new
<tt>TokenChallenge</tt>. If not, they <bcp14>SHOULD</bcp14> perform a new issuance process.</t>
          <t>When using <xref target="ARC"/> tokens (<tt>0xE5AC</tt>), the credential's <tt>presentation_limit</tt> controls
how many times the client can present tokens from a single credential issuance.
This provides rate limiting while preserving unlinkability between presentations.</t>
          <t><strong>Deployment Considerations</strong>:</t>
          <ul spacing="normal">
            <li>
              <t>Batch size <bcp14>SHOULD</bcp14> be sufficient for the expected session duration</t>
            </li>
            <li>
              <t>Relays <bcp14>SHOULD</bcp14> configure re-authorization intervals based on content
sensitivity and trust requirements</t>
            </li>
            <li>
              <t>Clients <bcp14>SHOULD</bcp14> request new token batches before exhausting their supply</t>
            </li>
            <li>
              <t>For high-security deployments, shorter re-authorization intervals with
smaller batches provide stronger revocation guarantees</t>
            </li>
          </ul>
        </section>
        <section anchor="continuous-auth-reverse">
          <name>Continuous Authorization with Reverse Flow</name>
          <t>If the client and the relay support it, a Relay <bcp14>MAY</bcp14> perform continuous
authentication using a reverse flow.</t>
          <t>To do so, a client attaches an AUTH REQUEST parameter, carrying at least
one token request, to a message that also carries its AUTHORIZATION TOKEN.
The Relay acts as a reverse issuer and returns the corresponding AUTH
RESPONSE in the message answering it: <tt>SERVER_SETUP</tt> for a <tt>CLIENT_SETUP</tt>,
or the corresponding <tt>REQUEST_OK</tt>, <tt>SUBSCRIBE_OK</tt>, or <tt>FETCH_OK</tt> for
requests on an established connection.</t>
          <t>In particular, a subscriber can replenish its token supply without a new
round trip to the origin issuer by sending <tt>REQUEST_UPDATE</tt> with an AUTH
REQUEST parameter. This composes with the expiry-driven update cycle of
<xref target="MoQ-TRANSPORT"/>: when a subscription carries an EXPIRES parameter, the
extending <tt>REQUEST_UPDATE</tt> presents a fresh token and requests the next one
in the same message.</t>
          <t>Tokens obtained this way can be presented by the Client to maintain
the continuity of the session. The presentations are cryptographically
unlinkable, subject to the privacy properties of the token type and deployment.
Presentations on the same MoQ connection can still be correlated through
the connection, timing, or request metadata. A connection may carry requests
for multiple actors, so this correlation does not by itself identify an actor.</t>
          <artwork><![CDATA[
Reverse Flow Token Usage Timeline:

Time 0:     CLIENT_SETUP with Token_1 + AUTH REQUEST for 1 token
            SERVER_SETUP with AUTH RESPONSE (1 token)

Time T:     SUBSCRIBE with Token_2 + AUTH REQUEST for 1 token
            SUBSCRIBE_OK with AUTH RESPONSE (1 token)

Time 2T:    REQUEST_UPDATE with Token_3 + AUTH REQUEST for 1 token
            REQUEST_OK with AUTH RESPONSE (1 token)
]]></artwork>
        </section>
        <section anchor="errors">
          <name>Errors</name>
          <t>If the authentication fails for any reason, the server <bcp14>MUST</bcp14> send an error.
The error response includes a <tt>TokenChallenge</tt> to enable the client to obtain
a valid token and retry the operation.</t>
          <section anchor="setup-errors">
            <name>SETUP Errors</name>
            <t>[[editor's note: The following SETUP procedure depends on transport work
described in <xref target="transport-hooks"/>. Sending <tt>SERVER_SETUP</tt> before closing
does not guarantee that the client receives the challenge. MoQ Transport
still needs to define challenge delivery before session termination.]]</t>
            <t>If authentication fails during SETUP, the Relay <bcp14>MUST</bcp14> send a <tt>SERVER_SETUP</tt>
carrying one or more AUTH CHALLENGE Setup Options (<xref target="transport-hooks"/>) and
then terminate the session with the <tt>UNAUTHORIZED</tt> (0x02) Termination Error
Code defined in <xref section="12.2" sectionFormat="of" target="MoQ-TRANSPORT"/>. The termination reason
phrase carries no challenge material. It stays a human-readable string, as
the QUIC CONNECTION_CLOSE frame requires.</t>
            <t>Each AUTH CHALLENGE option carries one <tt>TokenChallenge</tt>. Options are ordered
by relay preference, most preferred first, which lets the client select an
issuance protocol based on the token types and issuers it supports.
Different options <bcp14>MAY</bcp14> name different issuers or scopes for different token
types. The Relay <bcp14>MUST</bcp14> include at least one challenge.</t>
            <t>The client can then obtain a token satisfying one of the challenges and
establish a new session presenting it. Since <xref target="MoQ-TRANSPORT"/> requires
endpoints to ignore unknown Setup Options, a client that does not support
this mechanism observes a regular <tt>UNAUTHORIZED</tt> termination.</t>
          </section>
          <section anchor="operation-errors">
            <name>Operation Errors</name>
            <t>If the error occurs over an established connection, the Relay <bcp14>MUST</bcp14> send a <tt>REQUEST_ERROR</tt>
defined in <xref section="9.4" sectionFormat="of" target="MoQ-TRANSPORT"/>.</t>
            <t>The error code <bcp14>MUST</bcp14> be one of:</t>
            <table anchor="error-codes-table">
              <name>Privacy Pass Authorization Error Codes</name>
              <thead>
                <tr>
                  <th align="left">Error Code</th>
                  <th align="left">Name</th>
                  <th align="left">Description</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">0x4</td>
                  <td align="left">MALFORMED_AUTH_TOKEN</td>
                  <td align="left">Token cannot be parsed correctly</td>
                </tr>
                <tr>
                  <td align="left">0x5</td>
                  <td align="left">EXPIRED_AUTH_TOKEN</td>
                  <td align="left">Token has expired or been revoked</td>
                </tr>
                <tr>
                  <td align="left">0x0100</td>
                  <td align="left">TOKEN_MISSING</td>
                  <td align="left">No token provided when required</td>
                </tr>
                <tr>
                  <td align="left">0x0101</td>
                  <td align="left">TOKEN_INVALID</td>
                  <td align="left">Token signature verification failed</td>
                </tr>
                <tr>
                  <td align="left">0x0103</td>
                  <td align="left">TOKEN_REPLAYED</td>
                  <td align="left">Token nonce has been seen before</td>
                </tr>
                <tr>
                  <td align="left">0x0104</td>
                  <td align="left">SCOPE_MISMATCH</td>
                  <td align="left">Token scope does not authorize this operation</td>
                </tr>
                <tr>
                  <td align="left">0x0105</td>
                  <td align="left">ISSUER_UNKNOWN</td>
                  <td align="left">Token issuer is not trusted by this relay</td>
                </tr>
              </tbody>
            </table>
            <t>MALFORMED_AUTH_TOKEN and EXPIRED_AUTH_TOKEN are defined in
<xref section="12.3" sectionFormat="of" target="MoQ-TRANSPORT"/>. This document registers the remaining
codes in the REQUEST_ERROR Codes registry (<xref target="iana-request-error-codes"/>).</t>
            <t>When the client should retry with a new token, the <tt>REQUEST_ERROR</tt> <bcp14>MUST</bcp14>
carry one or more AUTH CHALLENGE Error Details (<xref target="transport-hooks"/>), ordered
by relay preference. The reason phrase stays a human-readable string.</t>
          </section>
          <section anchor="tokenchallenge-construction">
            <name>TokenChallenge Construction</name>
            <t>The <tt>TokenChallenge</tt> carried in each AUTH CHALLENGE <bcp14>MUST</bcp14> be constructed as
follows:</t>
            <ul spacing="normal">
              <li>
                <t><tt>token_type</tt>: The token type for this challenge</t>
              </li>
              <li>
                <t><tt>issuer_name</tt>: The issuer name that can issue tokens for this challenge</t>
              </li>
              <li>
                <t><tt>redemption_context</tt>: A fresh 32-byte random value, or empty if the relay
accepts tokens with any redemption context</t>
              </li>
              <li>
                <t><tt>origin_info</tt>: The relay's origin identifier, optionally including the
required authorization scope</t>
              </li>
            </ul>
            <t>Different challenges <bcp14>MAY</bcp14> specify different issuers or scopes for different
token types. When <tt>origin_info</tt> is empty, the relay accepts tokens with any
scope and performs authorization based solely on the token's embedded scope
information.</t>
          </section>
          <section anchor="error-response-example">
            <name>Error Response Example</name>
            <t>This example uses Error Details from <xref target="MoQ-TRANSPORT"/>
and the AUTH CHALLENGE binding in <xref target="transport-hooks"/>.</t>
            <artwork><![CDATA[
REQUEST_ERROR {
    Error_Code = 0x0104,  /* SCOPE_MISMATCH */
    Retry_Interval = 1,
    Reason = "token scope does not cover this namespace",
    Error Details = [
        AUTH_CHALLENGE {
            token_type = PRIVACY_PASS_TOKEN,
            challenge = TokenChallenge {
                token_type = 0x0002,
                issuer_name = "public-issuer.example.com",
                redemption_context = <32 random bytes>,
                origin_info = <authorization scope>
            }
        },
        AUTH_CHALLENGE {
            token_type = PRIVACY_PASS_TOKEN,
            challenge = TokenChallenge {
                token_type = 0xE5AC,
                issuer_name = "relay.example.com",
                redemption_context = <32 random bytes>,
                origin_info = <authorization scope>
            }
        },
        AUTH_CHALLENGE {
            token_type = PRIVACY_PASS_TOKEN,
            challenge = TokenChallenge {
                token_type = 0x0001,
                issuer_name = "relay.example.com",
                redemption_context = <32 random bytes>,
                origin_info = <authorization scope>
            }
        }
    ]
}
]]></artwork>
            <t>Note the two levels of token type: the Error Detail's <tt>token_type</tt> names the
authorization scheme in the "MOQT Auth Token Type" registry, while the
<tt>TokenChallenge.token_type</tt> names the Privacy Pass issuance protocol inside
that scheme.</t>
          </section>
          <section anchor="control-message-authz">
            <name>Control Message Authorization Failures</name>
            <t>When authorization fails for MoQ control messages other than SETUP, the relay
returns a <tt>REQUEST_ERROR</tt> with the appropriate error code from <xref target="error-codes-table"/>.
The client <bcp14>MAY</bcp14> retry the operation with a valid token obtained using the
<tt>TokenChallenge</tt> from the error response.</t>
            <t>Implementations <bcp14>MAY</bcp14> elevate request-specific errors to session-level errors
by closing the session with <tt>UNAUTHORIZED</tt> (<xref section="12.2" sectionFormat="of" target="MoQ-TRANSPORT"/>).
This elevation is appropriate when:</t>
            <ul spacing="normal">
              <li>
                <t>The authorization failure indicates a systemic issue (e.g., all client tokens
are from an untrusted issuer)</t>
              </li>
              <li>
                <t>Continuing the session would be futile due to policy restrictions</t>
              </li>
              <li>
                <t>The error represents a security concern requiring session termination</t>
              </li>
            </ul>
            <t>Implementations need to consider the impact on other outstanding subscriptions
before elevating to session-level errors.</t>
          </section>
          <section anchor="established-authz">
            <name>Loss of Authorization on Established Requests</name>
            <t>A relay can determine that an established request is no longer authorized,
for example because the client did not present a fresh token before the
EXPIRES deadline, or because a <tt>REQUEST_UPDATE</tt> carried a token that failed
verification. The relay answers a failed <tt>REQUEST_UPDATE</tt> with a
<tt>REQUEST_ERROR</tt> as described in <xref target="control-message-authz"/>. To end the
underlying request:</t>
            <ul spacing="normal">
              <li>
                <t>For a subscription, a failed <tt>REQUEST_UPDATE</tt> requires <tt>PUBLISH_DONE</tt> with
status <tt>UPDATE_FAILED</tt> (<xref section="9.5.1" sectionFormat="of" target="MoQ-TRANSPORT"/>). Token expiry
uses <tt>EXPIRED_AUTH_TOKEN</tt>. Other loss of authorization uses <tt>UNAUTHORIZED</tt>
(<xref section="12.4" sectionFormat="of" target="MoQ-TRANSPORT"/>).</t>
              </li>
              <li>
                <t>For a FETCH in progress, the relay resets the fetch stream with
<tt>EXPIRED_AUTH_TOKEN</tt> (<xref section="12.5" sectionFormat="of" target="MoQ-TRANSPORT"/>).</t>
              </li>
            </ul>
          </section>
          <section anchor="request-migration">
            <name>Request Migration</name>
            <t>A request that is re-issued after a <tt>GOAWAY</tt> (<xref section="9.2" sectionFormat="of" target="MoQ-TRANSPORT"/>),
on a new session or on the current one, <bcp14>MUST</bcp14> carry a fresh token. The token
presented with the original request has already been redeemed.</t>
          </section>
          <section anchor="retry-behavior">
            <name>Retry Behavior</name>
            <t>AUTH CHALLENGE values are ordered by relay preference. A client
selects the first challenge whose token type it supports and whose issuer it
trusts. If no challenge qualifies, the client <bcp14>MUST NOT</bcp14> retry the operation
and <bcp14>SHOULD</bcp14> surface the failure to the application.</t>
            <t>If the client holds an unused token satisfying the selected challenge, for
example from a batch obtained earlier (<xref target="continuous-auth-batched"/>), it <bcp14>SHOULD</bcp14>
present that token rather than start a new issuance.</t>
            <t>For operation errors, retry timing is governed by the Retry Interval field of
<tt>REQUEST_ERROR</tt> (<xref section="9.4" sectionFormat="of" target="MoQ-TRANSPORT"/>): the client <bcp14>MUST NOT</bcp14> retry
before the interval has elapsed, and <bcp14>MUST NOT</bcp14> retry at all when the interval
is 0.</t>
            <t>Tokens are single-use, so every retry consumes a token and possibly an
issuance round trip. A client <bcp14>SHOULD</bcp14> treat a second consecutive failure of
the same operation with the same error code as terminal rather than retry
further. In particular, <tt>SCOPE_MISMATCH</tt> is only worth retrying if the client
can obtain a token whose scope actually covers the operation. Retrying with
an identically scoped token cannot succeed.</t>
            <t>The same limit applies across connections: after a session termination with
<tt>UNAUTHORIZED</tt>, a client <bcp14>SHOULD NOT</bcp14> reconnect with a token for the same
challenge more than once unless its attestation context has changed.</t>
          </section>
        </section>
      </section>
    </section>
    <section anchor="example-authorization-flow">
      <name>Example Authorization Flow</name>
      <t>Below shows an example deployment scenario where the relay has been
configured with the necessary validation keys and content policies. The
relay can verify Privacy Pass tokens locally and deliver media directly
without contacting the Issuer. This example uses publicly verifiable tokens.</t>
      <figure anchor="direct-relay-authorization-flow">
        <name>Direct Relay Authorization Flow</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="464" width="584" viewBox="0 0 584 464" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 80,32 L 80,64" fill="none" stroke="black"/>
              <path d="M 128,64 L 128,368" fill="none" stroke="black"/>
              <path d="M 128,400 L 128,448" fill="none" stroke="black"/>
              <path d="M 176,32 L 176,64" fill="none" stroke="black"/>
              <path d="M 288,32 L 288,64" fill="none" stroke="black"/>
              <path d="M 328,64 L 328,272" fill="none" stroke="black"/>
              <path d="M 328,304 L 328,448" fill="none" stroke="black"/>
              <path d="M 360,32 L 360,64" fill="none" stroke="black"/>
              <path d="M 400,32 L 400,64" fill="none" stroke="black"/>
              <path d="M 448,64 L 448,192" fill="none" stroke="black"/>
              <path d="M 448,272 L 448,448" fill="none" stroke="black"/>
              <path d="M 488,32 L 488,64" fill="none" stroke="black"/>
              <path d="M 504,32 L 504,64" fill="none" stroke="black"/>
              <path d="M 544,64 L 544,448" fill="none" stroke="black"/>
              <path d="M 576,32 L 576,64" fill="none" stroke="black"/>
              <path d="M 80,32 L 176,32" fill="none" stroke="black"/>
              <path d="M 288,32 L 360,32" fill="none" stroke="black"/>
              <path d="M 400,32 L 488,32" fill="none" stroke="black"/>
              <path d="M 504,32 L 576,32" fill="none" stroke="black"/>
              <path d="M 80,64 L 176,64" fill="none" stroke="black"/>
              <path d="M 288,64 L 360,64" fill="none" stroke="black"/>
              <path d="M 400,64 L 488,64" fill="none" stroke="black"/>
              <path d="M 504,64 L 576,64" fill="none" stroke="black"/>
              <path d="M 136,112 L 184,112" fill="none" stroke="black"/>
              <path d="M 128,144 L 144,144" fill="none" stroke="black"/>
              <path d="M 264,144 L 320,144" fill="none" stroke="black"/>
              <path d="M 128,176 L 144,176" fill="none" stroke="black"/>
              <path d="M 328,240 L 384,240" fill="none" stroke="black"/>
              <path d="M 504,240 L 536,240" fill="none" stroke="black"/>
              <path d="M 336,256 L 384,256" fill="none" stroke="black"/>
              <path d="M 512,256 L 544,256" fill="none" stroke="black"/>
              <path d="M 136,320 L 160,320" fill="none" stroke="black"/>
              <path d="M 280,320 L 328,320" fill="none" stroke="black"/>
              <path d="M 24,368 L 144,368" fill="none" stroke="black"/>
              <path d="M 24,400 L 144,400" fill="none" stroke="black"/>
              <path d="M 128,432 L 144,432" fill="none" stroke="black"/>
              <path d="M 264,432 L 320,432" fill="none" stroke="black"/>
              <path d="M 24,368 C 15.16936,368 8,375.16936 8,384" fill="none" stroke="black"/>
              <path d="M 144,368 C 152.83064,368 160,375.16936 160,384" fill="none" stroke="black"/>
              <path d="M 24,400 C 15.16936,400 8,392.83064 8,384" fill="none" stroke="black"/>
              <path d="M 144,400 C 152.83064,400 160,392.83064 160,384" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="544,240 532,234.4 532,245.6" fill="black" transform="rotate(0,536,240)"/>
              <polygon class="arrowhead" points="344,256 332,250.4 332,261.6" fill="black" transform="rotate(180,336,256)"/>
              <polygon class="arrowhead" points="328,432 316,426.4 316,437.6" fill="black" transform="rotate(0,320,432)"/>
              <polygon class="arrowhead" points="328,144 316,138.4 316,149.6" fill="black" transform="rotate(0,320,144)"/>
              <polygon class="arrowhead" points="144,320 132,314.4 132,325.6" fill="black" transform="rotate(180,136,320)"/>
              <polygon class="arrowhead" points="144,112 132,106.4 132,117.6" fill="black" transform="rotate(180,136,112)"/>
              <g class="text">
                <text x="104" y="52">MoQ</text>
                <text x="144" y="52">Relay</text>
                <text x="324" y="52">Client</text>
                <text x="444" y="52">Attester</text>
                <text x="540" y="52">Issuer</text>
                <text x="252" y="116">CLIENT_SETUP[]</text>
                <text x="320" y="116">-</text>
                <text x="204" y="148">SERVER_SETUP</text>
                <text x="168" y="164">[AUTH</text>
                <text x="236" y="164">CHALLENGE]</text>
                <text x="204" y="180">UNAUTHORIZED</text>
                <text x="280" y="180">(0x2)</text>
                <text x="316" y="180">-&gt;</text>
                <text x="392" y="212">&lt;=Attestation=&gt;</text>
                <text x="448" y="228">|</text>
                <text x="444" y="244">TokenRequest</text>
                <text x="448" y="260">TokenResponse</text>
                <text x="328" y="292">FinalizeToken</text>
                <text x="220" y="324">CLIENT_SETUP</text>
                <text x="204" y="340">[AUTHORIZATION</text>
                <text x="292" y="340">TOKEN]</text>
                <text x="40" y="388">Local</text>
                <text x="108" y="388">validation</text>
                <text x="204" y="436">SERVER_SETUP</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
         +-----------+             +--------+    +----------+ +--------+
         | MoQ Relay |             | Client |    | Attester | | Issuer |
         +-----+-----+             +----+---+    +-----+----+ +----+---+
               |                        |              |           |
               |                        |              |           |
               |<------ CLIENT_SETUP[] -+              |           |
               |                        |              |           |
               +-- SERVER_SETUP ------->|              |           |
               |  [AUTH CHALLENGE]      |              |           |
               +-- UNAUTHORIZED (0x2) ->|              |           |
               |                        |              |           |
               |                        |<=Attestation=>           |
               |                        |              |           |
               |                        +------- TokenRequest ---->|
               |                        |<------ TokenResponse ----+
               |                        |              |           |
               |                  FinalizeToken        |           |
               |                        |              |           |
               |<--- CLIENT_SETUP ------+              |           |
               |  [AUTHORIZATION TOKEN] |              |           |
               |                        |              |           |
 .-------------+--.                     |              |           |
| Local validation |                    |              |           |
 '-------------+--'                     |              |           |
               |                        |              |           |
               +-- SERVER_SETUP ------->|              |           |
               |                        |              |           |
]]></artwork>
        </artset>
      </figure>
      <t>The AUTH CHALLENGE options in the <tt>SERVER_SETUP</tt> carry one <tt>TokenChallenge</tt>
per token type the relay accepts (e.g., <tt>0x0002</tt> and <tt>0xE5AC</tt>), each with
the relay's issuer configuration. This allows the client to select the
appropriate issuance protocol based on its capabilities and the available
attesters/issuers.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO: Add considerations for the security and privacy of the Privacy Pass
tokens.</t>
      <ul spacing="normal">
        <li>
          <t>Token Replay</t>
        </li>
        <li>
          <t>Token harvest</t>
        </li>
        <li>
          <t>Key rotation</t>
        </li>
        <li>
          <t>Use of TLS</t>
        </li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="iana-moqt-token-type">
        <name>MOQT Auth Token Type Registration</name>
        <t>IANA is requested to register the following entry in the "MOQT Auth Token
Type" registry defined by <xref target="MoQ-TRANSPORT"/>:</t>
        <table anchor="moqt-token-type-registration">
          <name>MOQT Auth Token Type Registration</name>
          <thead>
            <tr>
              <th align="left">Code</th>
              <th align="left">Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left">PRIVACY_PASS_TOKEN</td>
              <td align="left">This document</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="moq-action-registry">
        <name>MoQ Action Registry</name>
        <t>IANA is requested to create a new registry titled "MoQ Actions for Privacy
Pass Authorization" with the following initial contents:</t>
        <table anchor="moq-action-registry-table">
          <name>MoQ Actions Registry</name>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Action</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">CLIENT_SETUP</td>
              <td align="left">
                <xref target="moq-actions"/></td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">SERVER_SETUP</td>
              <td align="left">
                <xref target="moq-actions"/></td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">PUBLISH_NAMESPACE</td>
              <td align="left">
                <xref target="moq-actions"/></td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">SUBSCRIBE_NAMESPACE</td>
              <td align="left">
                <xref target="moq-actions"/></td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">SUBSCRIBE</td>
              <td align="left">
                <xref target="moq-actions"/></td>
            </tr>
            <tr>
              <td align="left">5</td>
              <td align="left">REQUEST_UPDATE</td>
              <td align="left">
                <xref target="moq-actions"/></td>
            </tr>
            <tr>
              <td align="left">6</td>
              <td align="left">PUBLISH</td>
              <td align="left">
                <xref target="moq-actions"/></td>
            </tr>
            <tr>
              <td align="left">7</td>
              <td align="left">FETCH</td>
              <td align="left">
                <xref target="moq-actions"/></td>
            </tr>
            <tr>
              <td align="left">8</td>
              <td align="left">TRACK_STATUS</td>
              <td align="left">
                <xref target="moq-actions"/></td>
            </tr>
            <tr>
              <td align="left">9</td>
              <td align="left">SUBSCRIBE_TRACKS</td>
              <td align="left">
                <xref target="moq-actions"/></td>
            </tr>
            <tr>
              <td align="left">10-254</td>
              <td align="left">Unassigned</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">255</td>
              <td align="left">Reserved</td>
              <td align="left">This document</td>
            </tr>
          </tbody>
        </table>
        <t>New entries in this registry require Specification Required registration policy.
Values <bcp14>SHOULD</bcp14> align with MoQTransport control message types where applicable.</t>
      </section>
      <section anchor="moq-match-type-registry">
        <name>MoQ Match Type Registry</name>
        <t>IANA is requested to create a new registry titled "MoQ Match Types for Privacy
Pass Authorization" with the following initial contents:</t>
        <table anchor="match-type-registry">
          <name>MoQ Match Types Registry</name>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Match Type</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">MATCH_EXACT</td>
              <td align="left">
                <xref target="match-types"/></td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">MATCH_PREFIX</td>
              <td align="left">
                <xref target="match-types"/></td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">MATCH_SUFFIX</td>
              <td align="left">
                <xref target="match-types"/></td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">MATCH_CONTAINS</td>
              <td align="left">
                <xref target="match-types"/></td>
            </tr>
            <tr>
              <td align="left">4-254</td>
              <td align="left">Unassigned</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">255</td>
              <td align="left">Reserved</td>
              <td align="left">This document</td>
            </tr>
          </tbody>
        </table>
        <t>New entries in this registry require Specification Required registration policy.</t>
      </section>
      <section anchor="iana-request-error-codes">
        <name>REQUEST_ERROR Code Registrations</name>
        <t>IANA is requested to register the following entries in the "REQUEST_ERROR
Codes" registry defined in <xref section="16.12.2" sectionFormat="of" target="MoQ-TRANSPORT"/>:</t>
        <table anchor="error-code-registry">
          <name>REQUEST_ERROR Code Registrations</name>
          <thead>
            <tr>
              <th align="left">Code</th>
              <th align="left">Name</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0100</td>
              <td align="left">TOKEN_MISSING</td>
              <td align="left">
                <xref target="errors"/></td>
            </tr>
            <tr>
              <td align="left">0x0101</td>
              <td align="left">TOKEN_INVALID</td>
              <td align="left">
                <xref target="errors"/></td>
            </tr>
            <tr>
              <td align="left">0x0103</td>
              <td align="left">TOKEN_REPLAYED</td>
              <td align="left">
                <xref target="errors"/></td>
            </tr>
            <tr>
              <td align="left">0x0104</td>
              <td align="left">SCOPE_MISMATCH</td>
              <td align="left">
                <xref target="errors"/></td>
            </tr>
            <tr>
              <td align="left">0x0105</td>
              <td align="left">ISSUER_UNKNOWN</td>
              <td align="left">
                <xref target="errors"/></td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="ARC">
          <front>
            <title>Anonymous Rate-Limited Credentials Cryptography</title>
            <author fullname="Cathie Yun" initials="C." surname="Yun">
              <organization>Apple, Inc.</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Apple, Inc.</organization>
            </author>
            <author fullname="Armando Faz-Hernandez" initials="A. F." surname="Faz-Hernandez">
              <organization>Cloudflare</organization>
            </author>
            <date day="2" month="March" year="2026"/>
            <abstract>
              <t>   This document specifies the Anonymous Rate-Limited Credential (ARC)
   protocol, a specialization of keyed-verification anonymous
   credentials with support for rate limiting.  ARC credentials can be
   presented from client to server up to some fixed number of times,
   where each presentation is cryptographically bound to client secrets
   and application-specific public information, such that each
   presentation is unlinkable from the others as well as the original
   credential creation.  ARC is useful in applications where a server
   needs to throttle or rate-limit access from anonymous clients.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-arc-crypto-01"/>
        </reference>
        <reference anchor="MoQ-TRANSPORT">
          <front>
            <title>Media over QUIC Transport</title>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <author fullname="Ian Swett" initials="I." surname="Swett">
              <organization>Google</organization>
            </author>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Meta</organization>
            </author>
            <date day="1" month="October" year="2026"/>
            <abstract>
              <t>   This document defines Media over QUIC Transport (MOQT), a publish/
   subscribe protocol that runs over QUIC and WebTransport.  MOQT
   leverages the features of these transports, such as streams,
   datagrams, priorities, and partial reliability.  MOQT operates both
   point-to-point and through intermediate relays, enabling scalable
   low-latency delivery.  Despite its name, MOQT is media agnostic and
   can be used for a wide range of use cases.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-22"/>
        </reference>
        <reference anchor="PRIVACYPASS-ARC">
          <front>
            <title>Privacy Pass Issuance Protocol for Anonymous Rate-Limited Credentials</title>
            <author fullname="Cathie Yun" initials="C." surname="Yun">
              <organization>Apple, Inc.</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Apple, Inc.</organization>
            </author>
            <author fullname="Armando Faz-Hernandez" initials="A. F." surname="Faz-Hernandez">
              <organization>Cloudflare</organization>
            </author>
            <date day="2" month="March" year="2026"/>
            <abstract>
              <t>   This document specifies the issuance and redemption protocols for
   tokens based on the Anonymous Rate-Limited Credential (ARC)
   cryptographic protocol.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-arc-protocol-01"/>
        </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="RFC9474">
          <front>
            <title>RSA Blind Signatures</title>
            <author fullname="F. Denis" initials="F." surname="Denis"/>
            <author fullname="F. Jacobs" initials="F." surname="Jacobs"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="October" year="2023"/>
            <abstract>
              <t>This document specifies an RSA-based blind signature protocol. RSA blind signatures were first introduced by Chaum for untraceable payments. A signature that is output from this protocol can be verified as an RSA-PSS signature.</t>
              <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9474"/>
          <seriesInfo name="DOI" value="10.17487/RFC9474"/>
        </reference>
        <reference anchor="RFC9497">
          <front>
            <title>Oblivious Pseudorandom Functions (OPRFs) Using Prime-Order Groups</title>
            <author fullname="A. Davidson" initials="A." surname="Davidson"/>
            <author fullname="A. Faz-Hernandez" initials="A." surname="Faz-Hernandez"/>
            <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="December" year="2023"/>
            <abstract>
              <t>An Oblivious Pseudorandom Function (OPRF) is a two-party protocol between a client and a server for computing the output of a Pseudorandom Function (PRF). The server provides the PRF private key, and the client provides the PRF input. At the end of the protocol, the client learns the PRF output without learning anything about the PRF private key, and the server learns neither the PRF input nor output. An OPRF can also satisfy a notion of 'verifiability', called a VOPRF. A VOPRF ensures clients can verify that the server used a specific private key during the execution of the protocol. A VOPRF can also be partially oblivious, called a POPRF. A POPRF allows clients and servers to provide public input to the PRF computation. This document specifies an OPRF, VOPRF, and POPRF instantiated within standard prime-order groups, including elliptic curves. This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9497"/>
          <seriesInfo name="DOI" value="10.17487/RFC9497"/>
        </reference>
        <reference anchor="RFC9576">
          <front>
            <title>The Privacy Pass Architecture</title>
            <author fullname="A. Davidson" initials="A." surname="Davidson"/>
            <author fullname="J. Iyengar" initials="J." surname="Iyengar"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="June" year="2024"/>
            <abstract>
              <t>This document specifies the Privacy Pass architecture and requirements for its constituent protocols used for authorization based on privacy-preserving authentication mechanisms. It describes the conceptual model of Privacy Pass and its protocols, its security and privacy goals, practical deployment models, and recommendations for each deployment model, to help ensure that the desired security and privacy goals are fulfilled.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9576"/>
          <seriesInfo name="DOI" value="10.17487/RFC9576"/>
        </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>
        <reference anchor="RFC9578">
          <front>
            <title>Privacy Pass Issuance Protocols</title>
            <author fullname="S. Celi" initials="S." surname="Celi"/>
            <author fullname="A. Davidson" initials="A." surname="Davidson"/>
            <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 specifies two variants of the two-message issuance protocol for Privacy Pass tokens: one that produces tokens that are privately verifiable using the Issuer Private Key and one that produces tokens that are publicly verifiable using the Issuer Public Key. Instances of "issuance protocol" and "issuance protocols" in the text of this document are used interchangeably to refer to the two variants of the Privacy Pass issuance protocol.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9578"/>
          <seriesInfo name="DOI" value="10.17487/RFC9578"/>
        </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="PRIVACYPASS-BATCHED">
          <front>
            <title>Batched Token Issuance Protocol</title>
            <author fullname="Raphael Robert" initials="R." surname="Robert">
              <organization>Phoenix R&amp;D</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Thibault Meunier" initials="T." surname="Meunier">
              <organization>Cloudflare Inc.</organization>
            </author>
            <date day="15" month="October" year="2026"/>
            <abstract>
              <t>   This document specifies two variants of the Privacy Pass issuance
   protocol that allow for batched issuance of tokens.  These allow
   clients to request more than one token at a time and for issuers to
   issue more than one token at a time.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-batched-tokens-09"/>
        </reference>
        <reference anchor="PRIVACYPASS-IANA" target="https://www.iana.org/assignments/privacy-pass/privacy-pass.xhtml">
          <front>
            <title>Privacy Pass IANA</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="PRIVACYPASS-REVERSE-FLOW">
          <front>
            <title>Privacy Pass Reverse Flow</title>
            <author fullname="Thibault Meunier" initials="T." surname="Meunier">
              <organization>Cloudflare Inc.</organization>
            </author>
            <date day="4" month="August" year="2026"/>
            <abstract>
              <t>   This document specifies an instantiation of the Privacy Pass
   Architecture (RFC 9576) 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-07"/>
        </reference>
        <reference anchor="PRIVACYPASS-MIRRORS">
          <front>
            <title>Checking Resource Consistency with HTTP Mirrors</title>
            <author fullname="Benjamin Beurdouche" initials="B." surname="Beurdouche">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Matthew Finkel" initials="M." surname="Finkel">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Steven Valdez" initials="S." surname="Valdez">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple Inc.</organization>
            </author>
            <date day="30" month="January" year="2024"/>
            <abstract>
              <t>   This document describes the mirror protocol, an HTTP-based protocol
   for fetching mirrored HTTP resources.  The primary use case for the
   mirror protocol is to support HTTP resource consistency checks in
   protocols that require clients have a consistent view of some
   protocol-specific resource (typically, a public key) for security or
   privacy reasons, including Privacy Pass and Oblivious HTTP.  To that
   end, this document also describes how to use the mirror protocol to
   implement these consistency checks.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-consistency-mirror-00"/>
        </reference>
        <reference anchor="KEYTRANS">
          <front>
            <title>Key Transparency Architecture</title>
            <author fullname="Brendan McMillion" initials="B." surname="McMillion">
              <organization>Independent</organization>
            </author>
            <date day="1" month="November" year="2026"/>
            <abstract>
              <t>   This document defines the terminology and interaction patterns
   involved in the deployment of Key Transparency in end-to-end
   encrypted communication services, and specifies the security
   properties that the protocol provides.  It also gives more general,
   non-prescriptive guidance on how to securely apply Key Transparency
   to a number of common applications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-keytrans-architecture-11"/>
        </reference>
        <reference anchor="SCITT">
          <front>
            <title>An Architecture for Trustworthy and Transparent Digital Supply Chains</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="A. Delignat-Lavaud" initials="A." surname="Delignat-Lavaud"/>
            <author fullname="C. Fournet" initials="C." surname="Fournet"/>
            <author fullname="Y. Deshpande" initials="Y." surname="Deshpande"/>
            <author fullname="S. Lasker" initials="S." surname="Lasker"/>
            <date month="June" year="2026"/>
            <abstract>
              <t>Traceability in supply chains is a growing security concern. While Verifiable Data Structures (VDSs) have addressed specific issues, such as equivocation over digital certificates, they lack a universal architecture for all supply chains. This document defines such an architecture for single-issuer signed statement transparency. It ensures extensibility and interoperability between different transparency services as well as compliance with various auditing procedures and regulatory requirements.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9943"/>
          <seriesInfo name="DOI" value="10.17487/RFC9943"/>
        </reference>
      </references>
    </references>
    <?line 1334?>

<section anchor="deployment-considerations">
      <name>Deployment considerations</name>
      <section anchor="bootstrap-key-material">
        <name>Fetching key material for the bootstrap issuer</name>
        <t>This draft does not define how Clients are expected to retrieve
privacy pass issuer configuration, nor how they establish a relationship
with an attester that is capable of vouching for such tokens to be
issued.</t>
        <t>Clients may reuse issuers that are exposed over HTTP, as defined in <xref target="RFC9577"/>.</t>
        <t>Clients should also consider ways to be less susceptible to partitions,
hurting the privacy guarantees that Privacy Pass provides. This is discussed in
<xref section="6.2" sectionFormat="of" target="RFC9576"/>.
For that, they may rely on mechanisms such as using mirrors <xref target="PRIVACYPASS-MIRRORS"/> providing
multiple vantage points, or transparency mechanisms such as those in <xref target="KEYTRANS"/> or <xref target="SCITT"/>.</t>
      </section>
      <section anchor="fetching-key-material-for-the-relay-reverse-issuer">
        <name>Fetching key material for the relay reverse issuer</name>
        <t>Similarly, Clients should retrieve material for the relay issuer operating in a reverse mode.
This can be via a pre-established relation, such as shipped as part
of the initial app installation, webpage load, or device setup.
This can also be done on the fly via HTTP, or MoQ API.
This draft does not define any of these.</t>
        <t>Consistency considerations mentioned in <xref target="bootstrap-key-material"/> apply.</t>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
    <section numbered="false" anchor="changelog">
      <name>Changelog</name>
      <t>RFC Editor's Note: Please remove this section prior to publication of
a final version of this document.</t>
      <section numbered="false" anchor="since-draft-ietf-moq-privacy-pass-auth-02">
        <name>Since draft-ietf-moq-privacy-pass-auth-02</name>
        <ul spacing="normal">
          <li>
            <t>Move reverse flow issuance to AUTH REQUEST and AUTH RESPONSE parameters</t>
          </li>
          <li>
            <t>Allow token acquisition over an established connection via REQUEST_UPDATE</t>
          </li>
          <li>
            <t>Remove PrivateTokenAuth structures and the auth scheme registry</t>
          </li>
          <li>
            <t>Carry TokenChallenge in AUTH CHALLENGE transport parameters instead of reason phrases</t>
          </li>
          <li>
            <t>Define required MoQ Transport extensions (AUTH CHALLENGE, AUTH REQUEST/RESPONSE)</t>
          </li>
          <li>
            <t>Bind request-error challenges to Error Details and identify remaining SETUP and issuance dependencies</t>
          </li>
          <li>
            <t>Clarify that token unlinkability does not hide connection-level correlation</t>
          </li>
          <li>
            <t>Align with draft-ietf-moq-transport-23: single SETUP message, updated section references</t>
          </li>
          <li>
            <t>Add SUBSCRIBE_TRACKS action and define matching for Track Namespace Prefix requests</t>
          </li>
          <li>
            <t>Require USE_VALUE for Privacy Pass tokens and treat alias reuse as replay</t>
          </li>
          <li>
            <t>Require relays to wait for the client's SETUP before sending challenge or issuance options</t>
          </li>
          <li>
            <t>Reuse MoQT MALFORMED_AUTH_TOKEN and EXPIRED_AUTH_TOKEN, register remaining codes in the REQUEST_ERROR Codes registry</t>
          </li>
          <li>
            <t>Specify PUBLISH_DONE and stream reset codes when authorization ends, and fresh tokens after GOAWAY</t>
          </li>
          <li>
            <t>Register a Privacy Pass codepoint in the MOQT Auth Token Type registry</t>
          </li>
          <li>
            <t>Specify retry behavior after auth challenge errors</t>
          </li>
          <li>
            <t>Expanded reverse flow documentation with three-phase flow (bootstrap, exchange, operations)</t>
          </li>
          <li>
            <t>Defined MoQAuthChallenge structure for error responses with supported_token_types</t>
          </li>
          <li>
            <t>Added TokenChallenge construction requirements</t>
          </li>
          <li>
            <t>Added control message authorization failure handling section</t>
          </li>
          <li>
            <t>Documented credential request/response encoding for different token types</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-moq-privacy-pass-auth-01">
        <name>Since draft-ietf-moq-privacy-pass-auth-01</name>
        <ul spacing="normal">
          <li>
            <t>Replace text-based moq-scope with binary TLS presentation language structures</t>
          </li>
          <li>
            <t>Add MoQ Actions registry aligned with MoQTransport control message types</t>
          </li>
          <li>
            <t>Add Match Types registry with exact, prefix, suffix, and contains matching</t>
          </li>
          <li>
            <t>Define MoQAuthorizationInfo structure for origin_info encoding</t>
          </li>
          <li>
            <t>Add continuous authorization section using reverse flow</t>
          </li>
          <li>
            <t>Add continuous authorization section using batched tokens</t>
          </li>
          <li>
            <t>Add IANA registries for auth schemes, actions, and match types</t>
          </li>
          <li>
            <t>Define error handling</t>
          </li>
          <li>
            <t>Integrate privacy pass reverse flow within PrivateTokenAuth</t>
          </li>
          <li>
            <t>MoQ definition now follow draft-ietf-moq-transport-16</t>
          </li>
          <li>
            <t>Update dependencies</t>
          </li>
          <li>
            <t>Removed b64 encoding given MoQ can use bytes directly</t>
          </li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-moq-privacy-pass-auth-00">
        <name>Since draft-ietf-moq-privacy-pass-auth-00</name>
        <ul spacing="normal">
          <li>
            <t>Add Thibault Meunier as Coauthor</t>
          </li>
          <li>
            <t>Add support for Reverse flow to be deploy and scale friendly way to get tokens</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+196XrbVpbg//sUGPlHJIukLXmJrYpTRct0oo4tqUQ5qbTL
I4IkJKJNEmwAlKyWXM/SzzJPNme9CwBKspNK9XzfuJdQJHCXc8++3Xa7bcq0
nCY70dphnp7Ho8voMC6KqLssJ8m8TEdxmWbz6DTLo7fJOI2j7DzJo7++29uN
1t9mf91YM/FwmCfn1ffhNxpjzcAIyVmWX+5ERTk2ZpyN5vEM5hvn8WnZTpPy
tD3L/rO94LfbC3i7HcOb7YePTbEcztKigBWUlwt4Z693/Nqki3wnKvNlUW4/
fPj84baByR+ZOE9iWMQvyTCK5+Nob14m+Twpo+M8nheLLC/XzEWWfzzLs+UC
nuPNHOhm1szH5BJ+H++YdjRzG/3PZTqCb/zFmfNkvkx2TBStHCuKeLlrv8CM
6fws+gGfxO8nGW59UpaLYufBg3FcxmUejz4meQcB0cnyswcXZw8AHg/g4Vmc
TmEQ+Osv+iuOEeejCXytg+BT+FV6nrhB8IsHwzy7KBIaDd/Lk0Xm5j5Ly8ly
2BllM3ygDbMGm4yiKZxbUboX+KmOvJdmwfMPbjvNzqScTY3Bj1kOwGvDDFHE
mLDWX07iItqHc4s/LmdxvkY/wj7iefpfhIDw0G5ajDL+JRHIFHN+5S8j/A33
slYZeXc5nSbz6N+S+RzOobjrwKfT5enp5V/SNO2M4uqYx5N0GC+nJRDEcp4m
K1Y7zZbjUziYBFBx1AmHzxhSfyllpM7y45qBf/Msn8EA54Rd3aNdQPj2q44H
WgErQzUftUf55aLM4GEgt/bxUXe/f3hwdFx7DU+kVDqApw+P9n7u7v562O33
23eZZpFnZTbKpvDq0evd7a2t5zv88fnjbx/bj8+/1Y9Pvn3qPnrfPtsxJp2f
+rv0l/Kye7z7Y+/VjcsZxuVokozbZfYxmReVAfa6+90dgrTwtIAl4a/8Y5yf
JR5mX1xcdNJ4HjPlALs5m8+A9xUhhvt/dD4ROoezH/V+7h31e+3Xbw5+8fcw
YzQJtgEcM8mLpH06zS4qw7zdOzo6OOrzCLX9j7J5kRZlMoeVzNI8z3J4/afe
r3T43jvAzujE28QaymRULvMEHu3v7h0DguB5PH/8yJh2ux3FwwK5UGkMoHYR
AYde4v6jYpGM0tM0KSKQBdGySKLsNASpPzixXWDWy3g+SoyiTEGig8leqCNK
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
8Bl5nD0NHpTOTKL0MCsYnePLiKcl0+Ujq9k5MylKaRHaZ0v5qHf4pvsrUn/I
P1k9Il9/0XjXMTK2aRKfJ6ttb+oGURa22REg6cMWliyOJgbOZ5IO8VdB6aot
0tT4akMbX2OpzpzqP8NcJNrZS+nEKW0wr+6N7ONt0vmlVScQ0ZsMADylLmfI
xIQ5YnKR+NG4dJ5seYpXISGBaUn90oDNzJZzCYRuGMEjFKUp2J0jeLJdu4wa
FrTMpYB1vqQeK7ZRcCd6N8cKc/Nvvxy3uUen3j+n2QFIStrwCRVyl2JK/d7P
6f744LTIhQSIlJzbWRFslYWJDNQepqHvEID+amnvntMr7Vj4qbnfso34cEL1
itieDIIzw0ujYjK+qXP3emNDx5v6dm+wM63J1OvQ5XLiRhI3Gm0UyTDUSwie
RKHSxcalUWDqcHMXebzCbdWRiwkYYGT0jtjLMaAQynEsUUNsesi3qgTWouOK
J1stC1VePEBiX7tU+2ImsI9ogPrzPOMxz+jkqzfdtmR20rsb8sI2v7EbdsWX
Nx5pS0xB7DCFwV/hOuE0JvgovJwCyBVYovikpc78iGc+Cn+vQjuYpXmVj1nA
Sqdw1EEVqqvJFtl5Wcbs761fGhJEmLhrbjVLIcvr73k+tXjCSXmG2AoN0RCi
A0YJ3KpIJY2497fDPVAWvWFggIYwMrFb0AKn08JzE5mLiTBnvDxkHsby1Ddo
vY4CxI4AFRTOHw/evXml35sYzJuk0Asc1dRJc6WzudsE5YNeaniYVjRPLkw1
bkWpqvOM3YWXdj4utcOsrsTzf4qs7wSXGki7T2U96/b6DfGWWdcSpiM3tDlW
dbQw6GudUQ5cqu3q9bLx2GZa6Ty0eW1u5cdxHDelpCeb40I9XWhKqsOken6v
ObvefsnXlKv72l8v9w1/5a7QBemIWGJvwaBMypdcTI8xZAEmeu6Xch9oaRsC
g3Qha84aCmPpKmPa2l9f3rc5+XWKscLItZqmRqVz9OgUmBAG1I/74TQ5bvhP
0pMqbGGqCqIpkeKxM5INpahYOEfyaRIv2RvLmIeG3vRS7jaYpGeTdpGMQIrB
pF6Xb9BWYdkl6ccr90AdSGHdM0TO3M6sHfVBOwC6pCHOM0lmPlvGlP+M/uXb
FZbK/cRVdUUcb58pRbkSuHB2nkbN0rJFVx5r2qTSjBvVVBpmM73EYboRMN4M
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
PoopBRDk0xgzsrChaxadJTZJ/v8Cf8b1BYXhAAA=

-->

</rfc>
