<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-privacypass-arc-protocol-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="Privacy Pass Issuance Protocol for ARC">Privacy Pass Issuance Protocol for Anonymous Rate-Limited Credentials</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-arc-protocol-00"/>
    <author initials="C." surname="Yun" fullname="Cathie Yun">
      <organization>Apple, Inc.</organization>
      <address>
        <email>cathieyun@gmail.com</email>
      </address>
    </author>
    <author initials="C. A." surname="Wood" fullname="Christopher A. Wood">
      <organization>Apple, Inc.</organization>
      <address>
        <email>caw@heapingbits.net</email>
      </address>
    </author>
    <author initials="A." surname="Faz-Hernandez" fullname="Armando Faz-Hernandez">
      <organization>Cloudflare</organization>
      <address>
        <email>armfazh@cloudflare.com</email>
      </address>
    </author>
    <date year="2026" month="February" day="03"/>
    <abstract>
      <?line 45?>

<t>This document specifies the issuance and redemption protocols for
tokens based on the Anonymous Rate-Limited Credential (ARC) cryptographic protocol.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-privacypass.github.io/draft-arc/draft-ietf-privacypass-arc-protocol.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-privacypass-arc-protocol/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        PRIVACYPASS Privacy Pass mailing list (<eref target="mailto:privacy-pass@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/privacy-pass"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/privacy-pass/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-privacypass/draft-arc"/>.</t>
    </note>
  </front>
  <middle>
    <?line 50?>

<section anchor="introduction">
      <name>Introduction</name>
      <t><xref target="ARCHITECTURE"/> describes the Privacy Pass architecture, and <xref target="ISSUANCE"/>
and <xref target="AUTHSCHEME"/> describe the issuance and redemption protocols for
basic Privacy Pass tokens, i.e., those computed using blind RSA signatures
(as specified in <xref target="BLIND-RSA"/>) or verifiable oblivious
pseudorandom functions (as specified in <xref target="VOPRFS"/>). These protocols
are widely deployed in practice for a variety of applications, including
anonymous authentication for protocols such as Oblivious HTTP <xref target="OHTTP"/>
and the Distributed Aggregation Protocol <xref target="DAP"/>. While
effective, these variants of Privacy Pass tokens are limited in that
each token can only be spent once. These are often calle "one-time-use" tokens.
This means that applications which wish to limit access to a given user, e.g.,
for the purposes of throttling or rate limiting them, must issue one token
for each redemption.</t>
      <t>The Anonymous Rate-Limited Credential (ARC) cryptographic protocol, as specified in <xref target="ARC"/>,
offers a more scalable approach to rate limiting. In particular, ARC credentials
can be issued once and then presented (or redeemed) up to some fixed-amount
of time for distinct, per-origin presentation contexts. This means that a Client
will only be able to present a limited number of tokens associated with a given
context.</t>
      <t>This document specifies the issuance and redemption protocols for ARC. <xref target="motivation"/>
describes motivation for this new type of token, <xref target="overview"/> presents an overview
of the protocols, and the remainder of the document specifies the protocols themselves.</t>
    </section>
    <section anchor="motivation">
      <name>Motivation</name>
      <t>To demonstrate how ARC is useful, consider the case where a client wishes to keep
its IP address private while accessing a service. The client can hide its IP
address using a proxy service or a VPN. However, doing so severely limits the
client's ability to access services and content, since servers might not be able
to enforce their policies without a stable and unique client identifier.</t>
      <t>With one-time-use tokens, the server can verify that each client access meets
a particular bar for attestation, i.e., the bar that is enforced during issuance,
but cannot be used by the server to rate limit a specific client. This is because
there is no mechanism in the issuance protocol to link repeated Client token
requests in order to apply rate-limiting.</t>
      <t>There are several use cases for rate-limiting anonymous clients that are common
on the Internet. These routinely use client IP address tracking, among other
characteristics, to implement rate-limiting.</t>
      <t>One example of this use case is rate-limiting website accesses to a client to
help prevent abusive behavior. Operations that are sensitive to abuse, such as
account creation on a website or logging into an account, often employ rate-limiting
as a defense-in-depth strategy. Additional verification can be required by these
pages when a client exceeds a set rate-limit.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>This document uses the terms Origin, Client, Issuer, and Token as defined in
<xref section="2" sectionFormat="of" target="ARCHITECTURE"/>. Moreover, the following additional terms are
used throughout this document.</t>
      <ul spacing="normal">
        <li>
          <t>Issuer Public Key: The public key (from a private-public key pair) used by
the Issuer for issuing and verifying Tokens.</t>
        </li>
        <li>
          <t>Issuer Private Key: The private key (from a private-public key pair) used by
the Issuer for issuing and verifying Tokens.</t>
        </li>
      </ul>
      <t>Unless otherwise specified, this document encodes protocol messages in TLS
notation from <xref section="3" sectionFormat="of" target="TLS13"/>. Moreover, all constants are in
network byte order.</t>
      <t>Encoding an integer to a sequence of bytes in network byte order is described
using the function encode(n, v), where n is the number of bytes and v is the
integer value. The function len(x) returns the length in bytes of the byte string x.</t>
    </section>
    <section anchor="overview">
      <name>Protocol Overview</name>
      <t>The issuance and redemption protocols defined in this document are built on
the Anonymous Rate-Limited Credential (ARC) protocol. In contrast to the core
Privacy Pass protocols which are one-time-use anonymous credentials, ARC allows
clients to turn a single credential output from an issuance protocol into a
fixed number of unlinkable tokens, each of which are bound to some agreed-upon
public presentation context.</t>
      <t>With ARC, Clients receive TokenChallenge inputs from the redemption protocol
(<xref section="2.1" sectionFormat="comma" target="AUTHSCHEME"/>). If they have a valid credential for the designated
Issuer, Clients can use the TokenChallenge to produce a single token for
presentation. Otherwise, Clients invoke the issuance protocol to obtain a
credential. This interaction is shown below.</t>
      <figure anchor="fig-overview">
        <name>Issuance and Redemption Overview</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="320" width="536" viewBox="0 0 536 320" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 56,48 L 56,80" fill="none" stroke="black"/>
              <path d="M 88,80 L 88,208" fill="none" stroke="black"/>
              <path d="M 88,272 L 88,304" fill="none" stroke="black"/>
              <path d="M 128,48 L 128,80" fill="none" stroke="black"/>
              <path d="M 200,48 L 200,80" fill="none" stroke="black"/>
              <path d="M 248,80 L 248,112" fill="none" stroke="black"/>
              <path d="M 248,160 L 248,176" fill="none" stroke="black"/>
              <path d="M 288,48 L 288,80" fill="none" stroke="black"/>
              <path d="M 320,32 L 320,80" fill="none" stroke="black"/>
              <path d="M 344,48 L 344,80" fill="none" stroke="black"/>
              <path d="M 384,80 L 384,120" fill="none" stroke="black"/>
              <path d="M 384,152 L 384,224" fill="none" stroke="black"/>
              <path d="M 416,48 L 416,80" fill="none" stroke="black"/>
              <path d="M 432,48 L 432,80" fill="none" stroke="black"/>
              <path d="M 464,80 L 464,304" fill="none" stroke="black"/>
              <path d="M 504,48 L 504,80" fill="none" stroke="black"/>
              <path d="M 528,48 L 528,80" fill="none" stroke="black"/>
              <path d="M 320,32 L 512,32" fill="none" stroke="black"/>
              <path d="M 56,48 L 128,48" fill="none" stroke="black"/>
              <path d="M 200,48 L 288,48" fill="none" stroke="black"/>
              <path d="M 344,48 L 416,48" fill="none" stroke="black"/>
              <path d="M 432,48 L 504,48" fill="none" stroke="black"/>
              <path d="M 56,80 L 128,80" fill="none" stroke="black"/>
              <path d="M 200,80 L 288,80" fill="none" stroke="black"/>
              <path d="M 344,80 L 416,80" fill="none" stroke="black"/>
              <path d="M 432,80 L 504,80" fill="none" stroke="black"/>
              <path d="M 336,96 L 376,96" fill="none" stroke="black"/>
              <path d="M 392,96 L 456,96" fill="none" stroke="black"/>
              <path d="M 472,96 L 512,96" fill="none" stroke="black"/>
              <path d="M 96,128 L 232,128" fill="none" stroke="black"/>
              <path d="M 312,128 L 456,128" fill="none" stroke="black"/>
              <path d="M 96,144 L 208,144" fill="none" stroke="black"/>
              <path d="M 344,144 L 464,144" fill="none" stroke="black"/>
              <path d="M 96,174 L 112,174" fill="none" stroke="black"/>
              <path d="M 96,178 L 112,178" fill="none" stroke="black"/>
              <path d="M 224,174 L 240,174" fill="none" stroke="black"/>
              <path d="M 224,178 L 240,178" fill="none" stroke="black"/>
              <path d="M 88,192 L 160,192" fill="none" stroke="black"/>
              <path d="M 320,192 L 376,192" fill="none" stroke="black"/>
              <path d="M 96,208 L 160,208" fill="none" stroke="black"/>
              <path d="M 328,208 L 384,208" fill="none" stroke="black"/>
              <path d="M 88,272 L 208,272" fill="none" stroke="black"/>
              <path d="M 336,272 L 456,272" fill="none" stroke="black"/>
              <path d="M 96,288 L 232,288" fill="none" stroke="black"/>
              <path d="M 320,288 L 464,288" fill="none" stroke="black"/>
              <path d="M 512,32 C 520.83064,32 528,39.16936 528,48" fill="none" stroke="black"/>
              <path d="M 336,96 C 327.16936,96 320,88.83064 320,80" fill="none" stroke="black"/>
              <path d="M 512,96 C 520.83064,96 528,88.83064 528,80" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="464,272 452,266.4 452,277.6" fill="black" transform="rotate(0,456,272)"/>
              <polygon class="arrowhead" points="464,128 452,122.4 452,133.6" fill="black" transform="rotate(0,456,128)"/>
              <polygon class="arrowhead" points="384,192 372,186.4 372,197.6" fill="black" transform="rotate(0,376,192)"/>
              <polygon class="arrowhead" points="248,176 236,170.4 236,181.6" fill="black" transform="rotate(0,240,176)"/>
              <polygon class="arrowhead" points="104,288 92,282.4 92,293.6" fill="black" transform="rotate(180,96,288)"/>
              <polygon class="arrowhead" points="104,208 92,202.4 92,213.6" fill="black" transform="rotate(180,96,208)"/>
              <polygon class="arrowhead" points="104,176 92,170.4 92,181.6" fill="black" transform="rotate(180,96,176)"/>
              <polygon class="arrowhead" points="104,144 92,138.4 92,149.6" fill="black" transform="rotate(180,96,144)"/>
              <g class="text">
                <text x="92" y="68">Client</text>
                <text x="244" y="68">Attester</text>
                <text x="380" y="68">Issuer</text>
                <text x="468" y="68">Origin</text>
                <text x="272" y="132">Request</text>
                <text x="276" y="148">TokenChallenge</text>
                <text x="168" y="180">Attestation</text>
                <text x="240" y="196">CredentialRequest</text>
                <text x="244" y="212">CredentialResponse</text>
                <text x="92" y="228">CredentialFinalization</text>
                <text x="88" y="244">|</text>
                <text x="92" y="260">CredentialPresentation</text>
                <text x="272" y="276">Request+Token</text>
                <text x="276" y="292">Response</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
                                       +------------------------.
      +--------+        +----------+   |  +--------+ +--------+  |
      | Client |        | Attester |   |  | Issuer | | Origin |  |
      +---+----+        +-----+----+   |  +----+---+ +---+----+  |
          |                   |         `------|---------|------'
          |                   |                |         |
          |------------------ Request ------------------>+
          |<-------------- TokenChallenge ---------------+
          |                   |                |         |
          |<== Attestation ==>|                |         |
          +--------- CredentialRequest ------->|         |
          |<-------- CredentialResponse -------+         |
CredentialFinalization                         |         |
          |                                              |
CredentialPresentation                                   |
          +--------------- Request+Token --------------->|
          |<----------------- Response ------------------+
          |                                              |
]]></artwork>
        </artset>
      </figure>
      <t>Similar to the core Privacy Pass protocols, the TokenChallenge can
be interactive or non-interactive, and per-origin or cross-origin.</t>
      <t>ARC is only compatible with deployment models where the Issuer and Origin
are operated by the same entity (see <xref section="4" sectionFormat="of" target="ARCHITECTURE"/>), as
tokens produced from a credential are not publicly verifiable. The details
of attestation are outside the scope of the issuance protocol; see
<xref section="4" sectionFormat="of" target="ARCHITECTURE"/> for information about how attestation can
be implemented in each of the relevant deployment models.</t>
      <t>The issuance and redemption protocols in this document are built on <xref target="ARC"/>.</t>
    </section>
    <section anchor="setup">
      <name>Configuration</name>
      <t>ARC Issuers are configured with key material used for issuance and token
verification. Concretely, Issuers run the <tt>SetupServer</tt> function from <xref target="ARC"/>
to produce a private and public key, denoted skI and pkI, respectively.</t>
      <artwork><![CDATA[
skI, pkI = SetupServer()
]]></artwork>
      <t>The Issuer Public Key ID, denoted <tt>issuer_key_id</tt>, is computed as the
SHA-256 hash of the Issuer Public Key, i.e., <tt>issuer_key_id = SHA-256(pkI_serialized)</tt>,
where <tt>pkI_serialized</tt> is the serialized version of <tt>pkI</tt> as described in <xref section="4.1" sectionFormat="of" target="ARC"/>.</t>
    </section>
    <section anchor="token-challenge-requirements">
      <name>Token Challenge Requirements</name>
      <t>The ARC protocol uses a modified TokenChallenge structure from the one
specified in <xref target="AUTHSCHEME"/>. In particular, the updated TokenChallenge
structure is as follows:</t>
      <artwork><![CDATA[
struct {
    uint16_t token_type = 0xE5AC; /* Type ARC(P-256) */
    opaque issuer_name<1..2^16-1>;
    opaque redemption_context<0..32>;
    opaque origin_info<0..2^16-1>;
    opaque credential_context<0..32>;
} TokenChallenge;
]]></artwork>
      <t>With the exception of <tt>credential_context</tt>, all fields are exactly as specified
in <xref section="2.1.1" sectionFormat="of" target="AUTHSCHEME"/>. The <tt>credential_context</tt> field is defined as
follows:</t>
      <ul spacing="normal">
        <li>
          <t>"credential_context" is a field that is either 0 or 32 bytes, prefixed with a single
octet indicating the length (either 0 or 32). If value is non-empty, it is a 32-byte value
generated by the origin that allows the origin to require that clients fetch credentials
bound to a specific context. Challenges with credential_context values of invalid lengths
<bcp14>MUST</bcp14> be ignored.</t>
        </li>
      </ul>
      <t>Similar to the <tt>redemption_context</tt> field, the <tt>credential_context</tt> is used to bind
information to the credential. This might be useful, for example, to enforce some
expiration on the credential. Origins might do this by constructing <tt>credential_context</tt>
as F(current time window), where F is a pseudorandom function. Semantically, this is
equivalent to the Origin asking the Client for a token from a credential that is
bound to "current time window."</t>
      <t>OPEN ISSUE: give more guidance about how to construct credential_context and redemption_context depending on the application's needs.</t>
      <t>In addition to this updated TokenChallenge, the HTTP authentication challenge
also <bcp14>SHOULD</bcp14> contain the following additional attribute:</t>
      <ul spacing="normal">
        <li>
          <t>"rate-limit", which contains a JSON number indicating the presentation
limit to use for ARC.</t>
        </li>
      </ul>
      <t>Implementation-specific steps: the client should store the Origin-provided input <tt>tokenChallenge</tt> so that when they receive a new <tt>tokenChallenge</tt> value, they can check if it has changed and which fields are different. This will inform the client's behavior - for example, if <tt>credential_context</tt> is being used to enforce an expiration on the credential, then if the <tt>credential_context</tt> has changed, this can prompt the client to request a new credential.</t>
    </section>
    <section anchor="credential-issuance-protocol">
      <name>Credential Issuance Protocol</name>
      <t>Issuers provide an Issuer Private and Public Key, denoted <tt>skI</tt> and <tt>pkI</tt>
respectively, used to produce tokens as input to the protocol. See <xref target="setup"/>
for how these keys are generated.</t>
      <t>Clients provide the following as input to the issuance protocol:</t>
      <ul spacing="normal">
        <li>
          <t>Issuer Request URL: A URL identifying the location to which issuance requests
are sent. This can be a URL derived from the "issuer-request-uri" value in the
Issuer's directory resource, or it can be another Client-configured URL. The value
of this parameter depends on the Client configuration and deployment model.
For example, in the 'Joint Origin and Issuer' deployment model, the Issuer
Request URL might correspond to the Client's configured Attester, and the
Attester is configured to relay requests to the Issuer.</t>
        </li>
        <li>
          <t>Issuer name: An identifier for the Issuer. This is typically a host name that
can be used to construct HTTP requests to the Issuer.</t>
        </li>
        <li>
          <t>Issuer Public Key: <tt>pkI</tt>, with a key identifier <tt>token_key_id</tt> computed as
described in <xref target="setup"/>.</t>
        </li>
      </ul>
      <t>Given this configuration and these inputs, the two messages exchanged in
this protocol to produce a credential are described below.</t>
      <section anchor="client-to-issuer-request">
        <name>Client-to-Issuer Request</name>
        <t>Given Origin-provided input <tt>tokenChallenge</tt> and the fixed-length Issuer Public Key ID <tt>issuer_key_id</tt>,
the Client first creates a credential request message using the <tt>CreateCredentialRequest</tt>
function from <xref target="ARC"/> as follows:</t>
        <artwork><![CDATA[
request_context = concat(
  encode(2, len(tokenChallenge.issuer_name)),
  tokenChallenge.issuer_name,
  encode(2, len(tokenChallenge.origin_info)),
  tokenChallenge.origin_info,
  encode(2, len(tokenChallenge.credential_context)),
  tokenChallenge.credential_context,
  issuer_key_id)
(clientSecrets, request) = CreateCredentialRequest(request_context)
]]></artwork>
        <t>The Client then creates a CredentialRequest structure as follows:</t>
        <artwork><![CDATA[
struct {
  uint16_t token_type = 0xE5AC; /* Type ARC(P-256) */
  uint8_t truncated_issuer_key_id;
  uint8_t encoded_request[Nrequest];
} CredentialRequest;
]]></artwork>
        <t>The structure fields are defined as follows:</t>
        <ul spacing="normal">
          <li>
            <t>"token_type" is a 2-octet integer.</t>
          </li>
          <li>
            <t>"truncated_issuer_key_id" is the least significant byte of the <tt>issuer_key_id</tt>
(<xref target="setup"/>) in network byte order (in other words, the last 8
bits of <tt>issuer_key_id</tt>). This value is truncated so that Issuers cannot use
<tt>issuer_key_id</tt> as a way of uniquely identifying Clients; see <xref target="security"/>
and referenced information for more details.</t>
          </li>
          <li>
            <t>"encoded_request" is the Nrequest-octet request, computed as the serialization
of the <tt>request</tt> value as defined in <xref section="4.2.1" sectionFormat="of" target="ARC"/>.</t>
          </li>
        </ul>
        <t>The Client then generates an HTTP POST request to send to the Issuer Request URL,
with the CredentialRequest as the content. The media type for this request is
"application/private-credential-request". An example request for the Issuer Request URL
"https://issuer.example.net/request" is shown below.</t>
        <artwork><![CDATA[
POST /request HTTP/1.1
Host: issuer.example.net
Accept: application/private-credential-response
Content-Type: application/private-credential-request
Content-Length: <Length of CredentialRequest>

<Bytes containing the CredentialRequest>
]]></artwork>
      </section>
      <section anchor="issuer-to-client-response">
        <name>Issuer-to-Client Response</name>
        <t>Upon receipt of the request, the Issuer validates the following conditions:</t>
        <ul spacing="normal">
          <li>
            <t>The CredentialRequest contains a supported token_type equal to value 0xE5AC.</t>
          </li>
          <li>
            <t>The CredentialRequest.truncated_token_key_id corresponds to the truncated key ID
of an Issuer Public Key, with corresponding secret key <tt>skI</tt>, owned by
the Issuer.</t>
          </li>
          <li>
            <t>The CredentialRequest.encoded_request is of the correct size (<tt>Nrequest</tt>).</t>
          </li>
        </ul>
        <t>If any of these conditions is not met, the Issuer <bcp14>MUST</bcp14> return an HTTP 422
(Unprocessable Content) error to the client.</t>
        <t>If these conditions are met, the Issuer then tries to deserialize
CredentialRequest.encoded_request according to <xref section="4.2.1" sectionFormat="of" target="ARC"/>, yielding <tt>request</tt>.
If this fails, the Issuer <bcp14>MUST</bcp14> return an HTTP 422 (Unprocessable Content)
error to the client. Otherwise, if the Issuer is willing to produce a credential
for the Client, the Issuer completes the issuance flow by an issuance response
as follows:</t>
        <artwork><![CDATA[
response = CreateCredentialResponse(skI, pkI, request)
]]></artwork>
        <t>The Issuer then creates a CredentialResponse structured as follows:</t>
        <artwork><![CDATA[
struct {
   uint8_t encoded_response[Nresponse];
} CredentialResponse;
]]></artwork>
        <t>The structure fields are defined as follows:</t>
        <ul spacing="normal">
          <li>
            <t>"encoded_response" is the Nresponse-octet encoded issuance response message, computed
as the serialization of <tt>response</tt> as specified in <xref section="4.2.2" sectionFormat="of" target="ARC"/>.</t>
          </li>
        </ul>
        <t>The Issuer generates an HTTP response with status code 200 whose content
consists of CredentialResponse, with the content type set as
"application/private-credential-response".</t>
        <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/private-credential-response
Content-Length: <Length of CredentialResponse>

<Bytes containing the CredentialResponse>
]]></artwork>
      </section>
      <section anchor="credential-finalization">
        <name>Credential Finalization</name>
        <t>Upon receipt, the Client handles the response and, if successful, deserializes
the content values <tt>CredentialResponse.encoded_response</tt> according to <xref section="4.2.2" sectionFormat="of" target="ARC"/>
yielding <tt>response</tt>. If deserialization fails, the Client aborts the protocol.
Otherwise, the Client processes the response as follows:</t>
        <artwork><![CDATA[
credential = FinalizeCredential(clientSecrets, pkI, request, response)
]]></artwork>
        <t>The Client then saves the credential structure, associated with the given Issuer
Name, to use when producing Token values in response to future token challenges.</t>
      </section>
    </section>
    <section anchor="token-redemption-protocol">
      <name>Token Redemption Protocol</name>
      <t>The token redemption protocol takes as input TokenChallenge and presentation limit
values from <xref section="2.1" sectionFormat="comma" target="AUTHSCHEME"/>; the presentation limit is sent as an additional
attribute within the HTTP challenge as described in <xref target="token-challenge-requirements"/>.
Clients use credentials from the issuance protocol in producing tokens
bound to the TokenChallenge. The process for producing a token in this
way, as well as verifying a resulting token, is described in the following sections.</t>
      <section anchor="token-creation">
        <name>Token Creation</name>
        <t>Given a TokenChallenge value as input, denoted <tt>challenge</tt>, a presentation limit,
denoted <tt>presentation_limit</tt>, and a previously computed credential that is valid
for the Issuer identifier in the challenge, denoted <tt>credential</tt>, Clients compute
a credential presentation value as follows:</t>
        <artwork><![CDATA[
presentation_context = concat(
  encode(2, len(challenge.issuer_name)),
  challenge.issuer_name,
  encode(2, len(challenge.origin_info)),
  challenge.origin_info,
  encode(2, len(challenge.redemption_context)),
  challenge.redemption_context,
  issuer_key_id)
state = MakePresentationState(credential, presentation_context, presentation_limit)
newState, nonce, presentation = Present(state)
]]></artwork>
        <t>Subsequent presentations <bcp14>MUST</bcp14> use the updated state, denoted <tt>newState</tt>. Reusing
the original state will break the presentation unlinkability properties of ARC;
see <xref target="security"/>.</t>
        <t>The resulting Token value is then constructed as follows:</t>
        <artwork><![CDATA[
struct {
    uint16_t token_type = 0xE5AC; /* Type ARC(P-256) */
    uint32_t presentation_nonce;
    uint8_t challenge_digest[32];
    uint8_t issuer_key_id[Nid];
    uint8_t presentation[Npresentation];
} Token;
]]></artwork>
        <t>The structure fields are defined as follows:</t>
        <ul spacing="normal">
          <li>
            <t>"token_type" is a 2-octet integer, in network byte order, equal to 0xE5AC.</t>
          </li>
          <li>
            <t>"presentation_nonce" is a 4-octet integer, in network byte order, equal to the nonce output from ARC.</t>
          </li>
          <li>
            <t>"challenge_digest" is a 32-octet value containing the hash of the original TokenChallenge, SHA-256(TokenChallenge).</t>
          </li>
          <li>
            <t>"issuer_key_id" is a Nid-octet identifier for the Issuer Public Key, computed
as defined in <xref target="setup"/>.</t>
          </li>
          <li>
            <t>"presentation" is a Npresentation-octet presentation, set to the serialized
<tt>presentation</tt> value (see <xref section="4.3.2" sectionFormat="of" target="ARC"/> for serialiation details).</t>
          </li>
        </ul>
      </section>
      <section anchor="verification">
        <name>Token Verification</name>
        <t>Given a deserialized presentation from the token, denoted <tt>presentation</tt> and
obtained by deserializing a presentation according to <xref section="4.3.2" sectionFormat="of" target="ARC"/>,
a presentation limit, denoted <tt>presentation_limit</tt>, a fixed-length Issuer Public Key
ID, denoted <tt>issuer_key_id</tt>, a presentation nonce from a token, denoted <tt>nonce</tt>, and
the digest of a token challenge, denoted <tt>challenge_digest</tt>, verifying a Token
requires invoking the VerifyPresentation function from <xref section="4.3.3" sectionFormat="of" target="ARC"/> in
the following ways:</t>
        <artwork><![CDATA[
request_context = concat(
  encode(2, len(tokenChallenge.issuer_name)),
  tokenChallenge.issuer_name,
  encode(2, len(tokenChallenge.origin_info)),
  tokenChallenge.origin_info,
  encode(2, len(tokenChallenge.credential_context)),
  tokenChallenge.credential_context,
  issuer_key_id)

presentation_context = concat(
  encode(2, len(tokenChallenge.issuer_name)),
  tokenChallenge.issuer_name,
  encode(2, len(tokenChallenge.origin_info)),
  tokenChallenge.origin_info,
  encode(2, len(tokenChallenge.redemption_context)),
  tokenChallenge.redemption_context,
  issuer_key_id)

valid = VerifyPresentation(
  skI,
  pkI,
  request_context,
  presentation_context,
  nonce,
  presentation,
  presentation_limit)
]]></artwork>
        <t>This function returns True if the CredentialToken is valid, and False otherwise.</t>
        <t>To prevent double spending, the Origin <bcp14>SHOULD</bcp14> perform a check that the tag output
from VerifyPresentation has not previously been seen. It can do this by checking
the tag against previously seen tags. To improve double spend performance, the Origin
can store and look up tags corresponding to the associated request_context and
presentation_context values.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>Privacy considerations for tokens based on deployment details, such as issuer configuration
and issuer selection, are discussed in <xref section="6.1" sectionFormat="of" target="ARCHITECTURE"/>. Note that ARC
requires a joint Origin and Issuer configuration given that it is privately verifiable.</t>
      <t>ARC offers Origin-Client unlinkability, Issuer-Client unlinkability, and redemption context
unlinkability, as described in <xref section="3.3" sectionFormat="of" target="ARCHITECTURE"/>, with one exception.
While redemption context unlinkability is achieved by re-randomizing credentials every time
they are presented as tokens, there is a reduction in the anonymity set in the case of presentation
nonce collisions, as detailed in <xref section="7.2" sectionFormat="of" target="ARC"/>.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This section documents IANA registry updates.</t>
      <section anchor="privacy-pass-token-types-registry-updates">
        <name>Privacy Pass Token Types Registry Updates</name>
        <t>This document updates the "Privacy Pass Token Type" Registry with the
following entries.</t>
        <ul spacing="normal">
          <li>
            <t>Value: 0xE5AC</t>
          </li>
          <li>
            <t>Name: ARC (P-256)</t>
          </li>
          <li>
            <t>Token Structure: As defined in <xref section="2.2" sectionFormat="of" target="AUTHSCHEME"/></t>
          </li>
          <li>
            <t>Token Key Encoding: Serialized as described in <xref target="setup"/></t>
          </li>
          <li>
            <t>TokenChallenge Structure: As defined in <xref section="2.1" sectionFormat="of" target="AUTHSCHEME"/></t>
          </li>
          <li>
            <t>Public Verifiability: N</t>
          </li>
          <li>
            <t>Public Metadata: N</t>
          </li>
          <li>
            <t>Private Metadata: N</t>
          </li>
          <li>
            <t>Nk: 0 (not applicable)</t>
          </li>
          <li>
            <t>Nid: 32</t>
          </li>
          <li>
            <t>Reference: This document</t>
          </li>
          <li>
            <t>Notes: None</t>
          </li>
        </ul>
      </section>
      <section anchor="media-types">
        <name>Media Types</name>
        <t>The following entries should be added to the IANA "media types"
registry:</t>
        <ul spacing="normal">
          <li>
            <t>"application/private-credential-request"</t>
          </li>
          <li>
            <t>"application/private-credential-response"</t>
          </li>
        </ul>
        <t>The templates for these entries are listed below and the
reference should be this RFC.</t>
        <section anchor="applicationprivate-credential-request-media-type">
          <name>"application/private-credential-request" media type</name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>private-credential-request</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>"binary"</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t>see <xref target="security"/></t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>this specification</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Applications that want to issue or facilitate issuance of Privacy Pass tokens,
including Privacy Pass issuer applications themselves.</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Additional information:</dt>
            <dd>
              <dl spacing="compact">
                <dt>Magic number(s):</dt>
                <dd>N/A</dd>
                <dt>Deprecated alias names for this type:</dt>
                <dd>N/A</dd>
                <dt>File extension(s):</dt>
                <dd>N/A</dd>
                <dt>Macintosh file type code(s):</dt>
                <dd>N/A</dd>
              </dl>
            </dd>
            <dt>Person and email address to contact for further information:</dt>
            <dd>
              <t>see Authors' Addresses section</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Author:</dt>
            <dd>
              <t>see Authors' Addresses section</t>
            </dd>
            <dt>Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
          </dl>
        </section>
        <section anchor="applicationprivate-credential-response-media-type">
          <name>"application/private-credential-response" media type</name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>private-credential-response</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>"binary"</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t>see <xref target="security"/></t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>this specification</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>Applications that want to issue or facilitate issuance of Privacy Pass tokens,
including Privacy Pass issuer applications themselves.</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Additional information:</dt>
            <dd>
              <dl spacing="compact">
                <dt>Magic number(s):</dt>
                <dd>N/A</dd>
                <dt>Deprecated alias names for this type:</dt>
                <dd>N/A</dd>
                <dt>File extension(s):</dt>
                <dd>N/A</dd>
                <dt>Macintosh file type code(s):</dt>
                <dd>N/A</dd>
              </dl>
            </dd>
            <dt>Person and email address to contact for further information:</dt>
            <dd>
              <t>see Authors' Addresses section</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Author:</dt>
            <dd>
              <t>see Authors' Addresses section</t>
            </dd>
            <dt>Change controller:</dt>
            <dd>
              <t>IETF</t>
            </dd>
          </dl>
        </section>
      </section>
    </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="3" month="February" 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-00"/>
        </reference>
        <reference anchor="ARCHITECTURE">
          <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="AUTHSCHEME">
          <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="ISSUANCE">
          <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="BLIND-RSA">
          <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="VOPRFS">
          <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="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="TLS13">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="OHTTP">
          <front>
            <title>Oblivious HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="January" year="2024"/>
            <abstract>
              <t>This document describes Oblivious HTTP, a protocol for forwarding encrypted HTTP messages. Oblivious HTTP allows a client to make multiple requests to an origin server without that server being able to link those requests to the client or to identify the requests as having come from the same client, while placing only limited trust in the nodes used to forward the messages.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9458"/>
          <seriesInfo name="DOI" value="10.17487/RFC9458"/>
        </reference>
        <reference anchor="DAP">
          <front>
            <title>Distributed Aggregation Protocol for Privacy Preserving Measurement</title>
            <author fullname="Tim Geoghegan" initials="T." surname="Geoghegan">
              <organization>ISRG</organization>
            </author>
            <author fullname="Christopher Patton" initials="C." surname="Patton">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Brandon Pitman" initials="B." surname="Pitman">
              <organization>ISRG</organization>
            </author>
            <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
              <organization>Independent</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="30" month="January" year="2026"/>
            <abstract>
              <t>   There are many situations in which it is desirable to take
   measurements of data which people consider sensitive.  In these
   cases, the entity taking the measurement is usually not interested in
   people's individual responses but rather in aggregated data.
   Conventional methods require collecting individual responses and then
   aggregating them on some server, thus representing a threat to user
   privacy and rendering many such measurements difficult and
   impractical.  This document describes a multi-party Distributed
   Aggregation Protocol (DAP) for privacy preserving measurement which
   can be used to collect aggregate data without revealing any
   individual contributor's data.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ppm-dap-17"/>
        </reference>
        <reference anchor="RATE-LIMITED">
          <front>
            <title>Rate-Limited Token Issuance Protocol</title>
            <author fullname="Scott Hendrickson" initials="S." surname="Hendrickson">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Jana Iyengar" initials="J." surname="Iyengar">
              <organization>Fastly</organization>
            </author>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <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>
            <date day="1" month="April" year="2024"/>
            <abstract>
              <t>   This document specifies a variant of the Privacy Pass issuance
   protocol that allows for tokens to be rate-limited on a per-origin
   basis.  This enables origins to use tokens for use cases that need to
   restrict access from anonymous clients.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-rate-limit-tokens-06"/>
        </reference>
      </references>
    </references>
    <?line 688?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to thank Tommy Pauly and the authors
of <xref target="RATE-LIMITED"/>
for helpful discussions on rate-limited tokens.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1c63LcxpX+30/RGf0wac0MRUq2FUqUzVDSiolEcknKKZfL
K2KAnhmEM8AsGiA1lphn2WfZJ9tz60bjQorOJj9SZW9qNQT6evpcvnNpjEYj
VablwuzqwUmRXkXxWp9E1upDa6soi40+KfIyj/OFnuaF3s/ybL3MK6tPo9KM
3qbLtDSJPihMYrIyjRZ2oKLJpDBX9xzv9GCgYhhqlhfrXW3LRKkkj7NoCQtK
imhajlJTTkcrHmoFI42iIoa/eZDRo0fKVpNlam2aZ+V6Bd0OX52/VnGeWZPZ
yu7qsqiMyqrlxBS7KoG5dhWs7rG6MlkFv7WeFXm12tUnp4c/7h/8dLJ/dgYP
eaxwC/BwGaWLXS2LGeFqfsDljfNiBm9hYfNdPS/Lld3d2sK2+CS9MmPXaAsf
bE2K/NqarXAYXEVazqvJrqb9Xs/CLW8xJaAztFvADmxZz9PTfsxjjdO87rl1
D2qO5+VyoVRUlfMcaKVHMJ3WaQZEPBjrn6qM/ubDOYjKeWr8Q9hclKW/RiUc
w67eX60WZqgPs3hMbw0TLqY+6yr7YYYPxnG+bE+yP9Z/zfMknGhepLbMV3NT
NN7CjHdMdP3D3ESrNJtN0tKOM1M2JoJxXke/jt6YIouyxPwaTLdfLOFR3vOe
JjxY5FUyhYM14XxRsZxGv85/iP1b2pvKchitBA5ANgNeB+YcvRzfcRJxsV6V
OTd+c3j+6uD8/emrXX36+uCP33z3LT5/f/7m7ODNq3f+6Xfw9PDs7P3+0YF/
9lSpNJvWk6vRaKSjiS2LKC6VOp+nVoOYVUsQWm1XJk6nqbG6nBudOjmFjWsU
6+UKz1Q7HrEot6rML0G69CSyIP3wFnt+UTfoDdjVpuY9zopoNU9jP+6YF7lM
k2RhlHoAZ1oWeVLFOLtSnz6FFLm50YmxcZFOZNUNVUNSV5q4rArgDdzHp0+O
Qjc3ih/UhAwG+w0UgK3D6hvzMlGGOh2b8RCGyq3RwAarCslQWWBGPVmkMOjp
2b626SyLcIVWbUTWH0ICDAqr+8Of3h4evRxBwz080SffPbm52QQO1FemgGbR
ZGF0DoNdpUBvtbKmSvIC+Xapp1VGNLO6b9wfj09OX5/xoH/8DgYd6/O5gYX6
3SngXn2dJmaxBrqsFvmaO6+Qd1IgC+rtSF9FBXDwWudTHYEQpjGJPu4+ixdV
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

-->

</rfc>
