<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.11 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-privacypass-protocol-06" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.10 -->
  <front>
    <title abbrev="Privacy Pass Issuance">Privacy Pass Issuance Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-protocol-06"/>
    <author initials="S." surname="Celi" fullname="Sofía Celi">
      <organization>Brave Software</organization>
      <address>
        <postal>
          <city>Lisbon</city>
          <country>Portugal</country>
        </postal>
        <email>cherenkov@riseup.net</email>
      </address>
    </author>
    <author initials="A." surname="Davidson" fullname="Alex Davidson">
      <organization>Brave Software</organization>
      <address>
        <postal>
          <city>Lisbon</city>
          <country>Portugal</country>
        </postal>
        <email>alex.davidson92@gmail.com</email>
      </address>
    </author>
    <author initials="A." surname="Faz-Hernandez" fullname="Armando Faz-Hernandez">
      <organization>Cloudflare</organization>
      <address>
        <postal>
          <street>101 Townsend St</street>
          <city>San Francisco</city>
          <country>United States of America</country>
        </postal>
        <email>armfazh@cloudflare.com</email>
      </address>
    </author>
    <author initials="S." surname="Valdez" fullname="Steven Valdez">
      <organization>Google LLC</organization>
      <address>
        <email>svaldez@chromium.org</email>
      </address>
    </author>
    <author initials="C. A." surname="Wood" fullname="Christopher A. Wood">
      <organization>Cloudflare</organization>
      <address>
        <postal>
          <street>101 Townsend St</street>
          <city>San Francisco</city>
          <country>United States of America</country>
        </postal>
        <email>caw@heapingbits.net</email>
      </address>
    </author>
    <date year="2022" month="July" day="06"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document specifies two variants of the the two-message issuance protocol
for Privacy Pass tokens: one that produces tokens that are privately
verifiable, and another that produces tokens that are publicly verifiable.
The privately verifiable issuance protocol optionally supports public
metadata during the issuance flow.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>The Privacy Pass protocol provides a privacy-preserving authorization
mechanism. In essence, the protocol allows clients to provide
cryptographic tokens that prove nothing other than that they have been
created by a given server in the past <xref target="I-D.ietf-privacypass-architecture"/>.</t>
      <t>This document describes the issuance protocol for Privacy Pass. It specifies
two variants: one that is privately verifiable based on the oblivious
pseudorandom function from <xref target="OPRF"/>, and one that is
publicly verifiable based on the blind RSA signature scheme
<xref target="BLINDRSA"/>.</t>
      <t>This document DOES NOT cover the architectural framework required for
running and maintaining the Privacy Pass protocol in the Internet
setting. In addition, it DOES NOT cover the choices that are necessary
for ensuring that client privacy leaks do not occur. Both of these
considerations are covered in <xref target="I-D.ietf-privacypass-architecture"/>.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <t>The following terms are used throughout this document.</t>
      <ul spacing="normal">
        <li>Client: An entity that provides authorization tokens to services
across the Internet, in return for authorization.</li>
        <li>Issuer: A service produces Privacy Pass tokens to clients.</li>
        <li>Private Key: The secret key used by the Issuer for issuing tokens.</li>
        <li>Public Key: The public key used by the Issuer for issuing and verifying
tokens.</li>
      </ul>
      <t>We assume that all protocol messages are encoded into raw byte format
before being sent across the wire.</t>
    </section>
    <section anchor="setup">
      <name>Configuration</name>
      <t>Issuers MUST provide two parameters for configuration:</t>
      <ol spacing="normal" type="1"><li>Issuer Request URI: a token request URL for generating access tokens.
For example, an Issuer URL might be https://issuer.example.net/example-token-request.
This parameter uses resource media type "text/plain".</li>
        <li>Issuer Public Key values: an Issuer Public Key for an issuance protocol.</li>
      </ol>
      <t>The Issuer parameters can be obtained from an Issuer via a directory object, which is a JSON
object whose values are other JSON objects and URLs for the parameters.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Field Name</th>
            <th align="left">Value</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">issuer-request-uri</td>
            <td align="left">Issuer Request URI resource URL as a JSON string</td>
          </tr>
          <tr>
            <td align="left">token-keys</td>
            <td align="left">List of Issuer Public Key values, each as JSON objects</td>
          </tr>
        </tbody>
      </table>
      <t>Each "token-keys" JSON object contains the following fields and corresponding raw values.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Field Name</th>
            <th align="left">Value</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">token-type</td>
            <td align="left">Integer value of the Token Type, as defined in <xref target="token-type"/>, as a JSON number</td>
          </tr>
          <tr>
            <td align="left">token-key</td>
            <td align="left">The base64url encoding of the public key for use with the issuance protocol, including padding, as a JSON string</td>
          </tr>
        </tbody>
      </table>
      <t>Issuers MAY advertise multiple token-keys for the same token-type to
support key rotation. In this case, Issuers indicate preference for which
token key to use based on the order of keys in the list, with preference
given to keys earlier in the list.</t>
      <t>Altogether, the Issuer's JSON directory could look like:</t>
      <artwork><![CDATA[
 {
    "issuer-request-uri": "https://issuer.example.net/example-token-request",
    "token-keys": [
      {
        "token-type": 2,
        "token-key": "MI...AB",
      },
      {
        "token-type": 2,
        "token-key": "MI...AQ",
      }
    ]
 }
]]></artwork>
      <t>Issuer directory resources have the media type "application/json"
and are located at the well-known location /.well-known/token-issuer-directory.</t>
    </section>
    <section anchor="token-challenge-requirements">
      <name>Token Challenge Requirements</name>
      <t>Clients receive challenges for tokens, as described in <xref target="AUTHSCHEME"/>.
The basic token issuance protocols described in this document can be
interactive or non-interactive, and per-origin or cross-origin.</t>
    </section>
    <section anchor="private-flow">
      <name>Issuance Protocol for Privately Verifiable Tokens</name>
      <t>The Privacy Pass issuance protocol is a two message protocol that takes
as input a challenge from the redemption protocol and produces a token,
as shown in the figure below.</t>
      <artwork><![CDATA[
   Origin          Client                   Issuer
                    (pkI)                 (skI, pkI)
                  +------------------------------------\
  Challenge   ----> TokenRequest ------------->        |
                  |                       (evaluate)   |
    Token    <----+     <--------------- TokenResponse |
                  \------------------------------------/
]]></artwork>
      <t>Issuers provide a Private and Public Key, denoted skI and pkI, respectively,
used to produce tokens as input to the protocol. See <xref target="issuer-configuration"/>
for how this key pair is generated.</t>
      <t>Clients provide the following as input to the issuance protocol:</t>
      <ul spacing="normal">
        <li>Issuer name, identifying the Issuer. This is typically a host name that
can be used to construct HTTP requests to the Issuer.</li>
        <li>Issuer Public Key pkI, with a key identifier <tt>key_id</tt> computed as
described in <xref target="issuer-configuration"/>.</li>
        <li>Challenge value <tt>challenge</tt>, an opaque byte string. For example, this might
be provided by the redemption protocol in <xref target="HTTP-Authentication"/>.</li>
      </ul>
      <t>Given this configuration and these inputs, the two messages exchanged in
this protocol are described below. This section uses notation described in
<xref section="4" sectionFormat="comma" target="OPRF"/>, including SerializeElement and DeserializeElement,
SerializeScalar and DeserializeScalar, and DeriveKeyPair.</t>
      <section anchor="private-request">
        <name>Client-to-Issuer Request</name>
        <t>The Client first creates a context as follows:</t>
        <artwork><![CDATA[
client_context = SetupVOPRFClient(0x0004, pkI)
]]></artwork>
        <t>Here, 0x0004 is the two-octet identifier corresponding to the
OPRF(P-384, SHA-384) ciphersuite in <xref target="OPRF"/>. SetupVOPRFClient
is defined in <xref section="3.2" sectionFormat="comma" target="OPRF"/>.</t>
        <t>The Client then creates an issuance request message for a random value <tt>nonce</tt>
using the input challenge and Issuer key identifier as follows:</t>
        <artwork><![CDATA[
nonce = random(32)
context = SHA256(challenge)
token_input = concat(0x0001, nonce, context, key_id)
blind, blinded_element = client_context.Blind(token_input)
]]></artwork>
        <t>The Blind function is defined in <xref section="3.3.2" sectionFormat="comma" target="OPRF"/>.
If the Blind function fails, the Client aborts the protocol. Otherwise,
the Client then creates a TokenRequest structured as follows:</t>
        <artwork><![CDATA[
struct {
   uint16_t token_type = 0x0001;
   uint8_t token_key_id;
   uint8_t blinded_msg[Ne];
} TokenRequest;
]]></artwork>
        <t>The structure fields are defined as follows:</t>
        <ul spacing="normal">
          <li>"token_type" is a 2-octet integer, which matches the type in the challenge.</li>
          <li>"token_key_id" is the least significant byte of the <tt>key_id</tt> in network byte order (in other words, the last 8 bits of <tt>key_id</tt>).</li>
          <li>"blinded_msg" is the Ne-octet blinded message defined above, computed as
<tt>SerializeElement(blinded_element)</tt>. Ne is as defined in <xref section="4" sectionFormat="comma" target="OPRF"/>.</li>
        </ul>
        <t>The values <tt>token_input</tt> and <tt>blinded_element</tt> are stored locally and used later
as described in <xref target="finalization"/>. The Client then generates an HTTP POST request
to send to the Issuer, with the TokenRequest as the body. The media type for
this request is "message/token-request". An example request is shown below.</t>
        <artwork><![CDATA[
:method = POST
:scheme = https
:authority = issuer.example.net
:path = /example-token-request
accept = message/token-response
cache-control = no-cache, no-store
content-type = message/token-request
content-length = <Length of TokenRequest>

<Bytes containing the TokenRequest>
]]></artwork>
        <t>Upon receipt of the request, the Issuer validates the following conditions:</t>
        <ul spacing="normal">
          <li>The TokenRequest contains a supported token_type.</li>
          <li>The TokenRequest.token_key_id corresponds to a key ID of a Public Key owned by the issuer.</li>
          <li>The TokenRequest.blinded_request is of the correct size.</li>
        </ul>
        <t>If any of these conditions is not met, the Issuer MUST return an HTTP 400 error
to the client.</t>
      </section>
      <section anchor="private-response">
        <name>Issuer-to-Client Response</name>
        <t>Upon receipt of a TokenRequest, the Issuer tries to deseralize TokenRequest.blinded_msg
using DeserializeElement from <xref section="2.1" sectionFormat="of" target="OPRF"/>, yielding <tt>blinded_element</tt>.
If this fails, the Issuer MUST return an HTTP 400 error to the client. Otherwise, if the
Issuer is willing to produce a token token to the Client, the Issuer completes the issuance
flow by computing a blinded response as follows:</t>
        <artwork><![CDATA[
server_context = SetupVOPRFServer(0x0004, skI, pkI)
evaluate_element, proof = server_context.Evaluate(skI, blinded_element)
]]></artwork>
        <t>SetupVOPRFServer is in <xref section="3.2" sectionFormat="comma" target="OPRF"/> and Evaluate is defined in
<xref section="3.3.2" sectionFormat="comma" target="OPRF"/>. The Issuer then creates a TokenResponse structured
as follows:</t>
        <artwork><![CDATA[
struct {
   uint8_t evaluate_msg[Nk];
   uint8_t evaluate_proof[Ns+Ns];
} TokenResponse;
]]></artwork>
        <t>The structure fields are defined as follows:</t>
        <ul spacing="normal">
          <li>"evaluate_msg" is the Ne-octet evaluated messaged, computed as
<tt>SerializeElement(evaluate_element)</tt>.</li>
          <li>"evaluate_proof" is the (Ns+Ns)-octet serialized proof, which is a pair of Scalar values,
computed as <tt>concat(SerializeScalar(proof[0]), SerializeScalar(proof[1]))</tt>,
where Ns is as defined in <xref section="4" sectionFormat="comma" target="OPRF"/>.</li>
        </ul>
        <t>The Issuer generates an HTTP response with status code 200 whose body consists
of TokenResponse, with the content type set as "message/token-response".</t>
        <artwork><![CDATA[
:status = 200
content-type = message/token-response
content-length = <Length of TokenResponse>

<Bytes containing the TokenResponse>
]]></artwork>
      </section>
      <section anchor="finalization">
        <name>Finalization</name>
        <t>Upon receipt, the Client handles the response and, if successful, deserializes
the body values TokenResponse.evaluate_response and TokenResponse.evaluate_proof,
yielding <tt>evaluated_element</tt> and <tt>proof</tt>. If deserialization of either value fails,
the Client aborts the protocol. Otherwise, the Client processes the response as
follows:</t>
        <artwork><![CDATA[
authenticator = client_context.Finalize(token_input, blind, evaluated_element, blinded_element, proof)
]]></artwork>
        <t>The Finalize function is defined in <xref section="3.3.2" sectionFormat="comma" target="OPRF"/>. If this
succeeds, the Client then constructs a Token as follows:</t>
        <artwork><![CDATA[
struct {
    uint16_t token_type = 0x0001
    uint8_t nonce[32];
    uint8_t challenge_digest[32];
    uint8_t token_key_id[32];
    uint8_t authenticator[Nk];
} Token;
]]></artwork>
        <t>Otherwise, the Client aborts the protocol.</t>
      </section>
      <section anchor="token-verification">
        <name>Token Verification</name>
        <t>To verify a token, a verifier creates a VOPRF context, evaluates the token contents,
and compares the result against the token authenticator value, as follows:</t>
        <artwork><![CDATA[
server_context = SetupVOPRFServer(0x0004, skI, pkI)
token_authenticator_input =
  concat(Token.token_type,
         Token.nonce,
         Token.challenge_digest,
         Token.token_key_id)
token_authenticator = server_context.Evaluate(token_authenticator_input)
valid = (token_authenticator == Token.authenticator)
]]></artwork>
      </section>
      <section anchor="issuer-configuration">
        <name>Issuer Configuration</name>
        <t>Issuers are configured with Private and Public Key pairs, each denoted skI and
pkI, respectively, used to produce tokens. Each key pair MUST be generated as
follows:</t>
        <artwork><![CDATA[
seed = random(Ns)
(skI, pkI) = DeriveKeyPair(seed, "PrivacyPass")
]]></artwork>
        <t>The key identifier for this specific key pair, denoted <tt>key_id</tt>, is computed
as follows:</t>
        <artwork><![CDATA[
key_id = SHA256(concat(0x0001, SerializeElement(pkI)))
]]></artwork>
      </section>
    </section>
    <section anchor="public-flow">
      <name>Issuance Protocol for Publicly Verifiable Tokens</name>
      <t>This section describes a variant of the issuance protocol in <xref target="private-flow"/>
for producing publicly verifiable tokens. It differs from the previous variant
in two important ways:</t>
      <ol spacing="normal" type="1"><li>The output tokens are publicly verifiable by anyone with the Issuer public
key.</li>
        <li>The issuance protocol does not admit public or private metadata to bind
additional context to tokens.</li>
      </ol>
      <t>The first property means that any Origin can select a given Issuer to produce tokens, as long
as the Origin has the Issuer public key, without explicit coordination or permission
from the Issuer. This is because the Issuer does not learn the Origin that requested
the token during the issuance protocol.</t>
      <t>Beyond these differences, the publicly verifiable issuance protocol variant is nearly
identical to the privately verifiable issuance protocol variant. In particular, Issuers
provide a Private and Public Key, denoted skI and pkI, respectively, used to produce
tokens as input to the protocol. See <xref target="public-issuer-configuration"/> for how this key
pair is generated.</t>
      <t>Clients provide the following as input to the issuance protocol:</t>
      <ul spacing="normal">
        <li>Issuer name, identifying the Issuer. This is typically a host name that
can be used to construct HTTP requests to the Issuer.</li>
        <li>Issuer Public Key pkI, with a key identifier <tt>key_id</tt> computed as
described in <xref target="public-issuer-configuration"/>.</li>
        <li>Challenge value <tt>challenge</tt>, an opaque byte string. For example, this might
be provided by the redemption protocol in <xref target="HTTP-Authentication"/>.</li>
      </ul>
      <t>Given this configuration and these inputs, the two messages exchanged in
this protocol are described below.</t>
      <section anchor="public-request">
        <name>Client-to-Issuer Request</name>
        <t>The Client first creates an issuance request message for a random value
<tt>nonce</tt> using the input challenge and Issuer key identifier as follows:</t>
        <artwork><![CDATA[
nonce = random(32)
context = SHA256(challenge)
token_input = concat(0x0002, nonce, context, key_id)
blinded_msg, blind_inv = rsabssa_blind(pkI, token_input)
]]></artwork>
        <t>The rsabssa_blind function is defined in <xref section="5.1.1." sectionFormat="comma" target="BLINDRSA"/>.
The Client then creates a TokenRequest structured as follows:</t>
        <artwork><![CDATA[
struct {
   uint16_t token_type = 0x0002
   uint8_t token_key_id;
   uint8_t blinded_msg[Nk];
} TokenRequest;
]]></artwork>
        <t>The structure fields are defined as follows:</t>
        <ul spacing="normal">
          <li>"token_type" is a 2-octet integer, which matches the type in the challenge.</li>
          <li>"token_key_id" is the least significant byte of the <tt>key_id</tt> in network byte order (in other words, the last 8 bits of <tt>key_id</tt>).</li>
          <li>"blinded_msg" is the Nk-octet request defined above.</li>
        </ul>
        <t>The Client then generates an HTTP POST request to send to the Issuer,
with the TokenRequest as the body. The media type for this request
is "message/token-request". An example request is shown below, where
Nk = 512.</t>
        <artwork><![CDATA[
:method = POST
:scheme = https
:authority = issuer.example.net
:path = /example-token-request
accept = message/token-response
cache-control = no-cache, no-store
content-type = message/token-request
content-length = <Length of TokenRequest>

<Bytes containing the TokenRequest>
]]></artwork>
        <t>Upon receipt of the request, the Issuer validates the following conditions:</t>
        <ul spacing="normal">
          <li>The TokenRequest contains a supported token_type.</li>
          <li>The TokenRequest.token_key_id corresponds to a key ID of a Public Key owned by the issuer.</li>
          <li>The TokenRequest.blinded_msg is of the correct size.</li>
        </ul>
        <t>If any of these conditions is not met, the Issuer MUST return an HTTP 400 error
to the Client, which will forward the error to the client.</t>
      </section>
      <section anchor="public-response">
        <name>Issuer-to-Client Response</name>
        <t>If the Issuer is willing to produce a token token to the Client, the Issuer
completes the issuance flow by computing a blinded response as follows:</t>
        <artwork><![CDATA[
blind_sig = rsabssa_blind_sign(skI, TokenRequest.blinded_rmsg)
]]></artwork>
        <t>This is encoded and transmitted to the client in the following TokenResponse structure:</t>
        <artwork><![CDATA[
struct {
   uint8_t blind_sig[Nk];
} TokenResponse;
]]></artwork>
        <t>The rsabssa_blind_sign function is defined in <xref section="5.1.2." sectionFormat="comma" target="BLINDRSA"/>.
The Issuer generates an HTTP response with status code 200 whose body consists
of TokenResponse, with the content type set as "message/token-response".</t>
        <artwork><![CDATA[
:status = 200
content-type = message/token-response
content-length = <Length of TokenResponse>

<Bytes containing the TokenResponse>
]]></artwork>
      </section>
      <section anchor="finalization-1">
        <name>Finalization</name>
        <t>Upon receipt, the Client handles the response and, if successful, processes the
body as follows:</t>
        <artwork><![CDATA[
authenticator = rsabssa_finalize(pkI, nonce, blind_sig, blind_inv)
]]></artwork>
        <t>The rsabssa_finalize function is defined in <xref section="5.1.3." sectionFormat="comma" target="BLINDRSA"/>.
If this succeeds, the Client then constructs a Token as described in
<xref target="HTTP-Authentication"/> as follows:</t>
        <artwork><![CDATA[
struct {
    uint16_t token_type = 0x0002
    uint8_t nonce[32];
    uint8_t challenge_digest[32];
    uint8_t token_key_id[32];
    uint8_t authenticator[Nk];
} Token;
]]></artwork>
        <t>Otherwise, the Client aborts the protocol.</t>
      </section>
      <section anchor="token-verification-1">
        <name>Token Verification</name>
        <t>To verify a token, a verifier checks that Token.authenticator is a valid
signature over the remainder of the token input as described below. The
function <tt>RSA-Verify(msg, pk, sig)</tt> is a procedure to verify a signature <tt>sig</tt>
over message <tt>msg</tt> using the public key <tt>pk</tt>. Its implementation is not
specified in this document.</t>
        <artwork><![CDATA[
token_authenticator_input =
  concat(Token.token_type,
         Token.nonce,
         Token.challenge_digest,
         Token.token_key_id)
valid = RSA-Verify(token_authenticator_input, pkI, Token.authenticator)
]]></artwork>
      </section>
      <section anchor="public-issuer-configuration">
        <name>Issuer Configuration</name>
        <t>Issuers are configured with Private and Public Key pairs, each denoted skI and
pkI, respectively, used to produce tokens. Each key pair SHALL be generated as
as specified in FIPS 186-4 <xref target="DSS"/>.</t>
        <t>The key identifier for a keypair (skI, pkI), denoted <tt>key_id</tt>, is computed as
SHA256(encoded_key), where encoded_key is a DER-encoded SubjectPublicKeyInfo
(SPKI) object carrying pkI. The SPKI object MUST use the RSASSA-PSS OID <xref target="RFC5756"/>,
which specifies the hash algorithm and salt size. The salt size MUST match the
output size of the hash function associated with the public key and token type.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security considerations</name>
      <t>This document outlines how to instantiate the Issuance protocol
based on the VOPRF defined in <xref target="OPRF"/> and blind RSA protocol defnied in
<xref target="BLINDRSA"/>. All security considerations described in the VOPRF document also
apply in the Privacy Pass use-case. Considerations related to broader privacy
and security concerns in a multi-Client and multi-Issuer setting are deferred
to the Architecture document <xref target="I-D.ietf-privacypass-architecture"/>.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA considerations</name>
      <section anchor="token-type">
        <name>Token Type</name>
        <t>This document updates the "Token Type" Registry with the following values.</t>
        <table anchor="aeadid-values">
          <name>Token Types</name>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Name</th>
              <th align="left">Publicly Verifiable</th>
              <th align="left">Public Metadata</th>
              <th align="left">Private Metadata</th>
              <th align="left">Nk</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0001</td>
              <td align="left">VOPRF (P-384, SHA-384)</td>
              <td align="left">N</td>
              <td align="left">N</td>
              <td align="left">N</td>
              <td align="left">48</td>
              <td align="left">
                <xref target="private-flow"/></td>
            </tr>
            <tr>
              <td align="left">0x0002</td>
              <td align="left">Blind RSA (SHA-384, 2048-bit)</td>
              <td align="left">Y</td>
              <td align="left">N</td>
              <td align="left">N</td>
              <td align="left">256</td>
              <td align="left">
                <xref target="public-flow"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="media-types">
        <name>Media Types</name>
        <t>This specification defines the following protocol messages, along with their
corresponding media types:</t>
        <ul spacing="normal">
          <li>TokenRequest: "message/token-request"</li>
          <li>TokenResponse: "message/token-response"</li>
        </ul>
        <t>The definition for each media type is in the following subsections.</t>
        <section anchor="messagetoken-request-media-type">
          <name>"message/token-request" media type</name>
          <dl>
            <dt>Type name:</dt>
            <dd>
              <t>message</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>token-request</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>None</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>only "8bit" or "binary" is permitted</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t>see <xref target="security-considerations"/></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>N/A</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Additional information:</dt>
            <dd>
              <dl>
                <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>IESG</t>
            </dd>
          </dl>
        </section>
        <section anchor="messagetoken-response-media-type">
          <name>"message/token-response" media type</name>
          <dl>
            <dt>Type name:</dt>
            <dd>
              <t>message</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>access-token-response</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>None</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>only "8bit" or "binary" is permitted</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t>see <xref target="security-considerations"/></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>N/A</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Additional information:</dt>
            <dd>
              <dl>
                <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>IESG</t>
            </dd>
          </dl>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="HTTP-Authentication" target="https://datatracker.ietf.org/doc/html/draft-pauly-privacypass-auth-scheme-00">
          <front>
            <title>The Privacy Pass HTTP Authentication Scheme</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="I-D.ietf-privacypass-architecture">
          <front>
            <title>Privacy Pass Architectural Framework</title>
            <author fullname="Alex Davidson">
              <organization>LIP</organization>
            </author>
            <author fullname="Jana Iyengar">
              <organization>Fastly</organization>
            </author>
            <author fullname="Christopher A. Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="1" month="July" year="2022"/>
            <abstract>
              <t>   This document specifies the architectural framework for constructing
   secure and anonymity-preserving instantiations of the Privacy Pass
   protocol.  It provides recommendations on how the protocol ecosystem
   should be constructed to ensure the privacy of clients, and the
   security of all participating entities.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-architecture-04"/>
        </reference>
        <reference anchor="OPRF">
          <front>
            <title>Oblivious Pseudorandom Functions (OPRFs) using Prime-Order Groups</title>
            <author fullname="Alex Davidson">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Armando Faz-Hernandez">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Nick Sullivan">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Christopher A. Wood">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <date day="6" month="July" year="2022"/>
            <abstract>
              <t>   An Oblivious Pseudorandom Function (OPRF) is a two-party protocol
   between client and server for computing the output of a Pseudorandom
   Function (PRF).  The server provides the PRF secret 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
   secret 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.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-voprf-11"/>
        </reference>
        <reference anchor="BLINDRSA">
          <front>
            <title>RSA Blind Signatures</title>
            <author fullname="Frank Denis">
              <organization>Fastly Inc.</organization>
            </author>
            <author fullname="Frederic Jacobs">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Christopher A. Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="2" month="February" year="2022"/>
            <abstract>
              <t>   This document specifies the RSA-based blind signature protocol with
   appendix (RSA-BSSA).  RSA blind signatures were first introduced by
   Chaum for untraceable payments [Chaum83].  It extends RSA-PSS
   encoding specified in [RFC8017] to enable blind signature support.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/chris-wood/draft-wood-cfrg-blind-signatures.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-rsa-blind-signatures-03"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="AUTHSCHEME">
          <front>
            <title>The Privacy Pass HTTP Authentication Scheme</title>
            <author fullname="Tommy Pauly">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Steven Valdez">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Christopher A. Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="31" month="January" year="2022"/>
            <abstract>
              <t>   This document defines an HTTP authentication scheme that 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 an acceptable
   Privacy Pass token.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/tfpauly/privacy-proxy.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-pauly-privacypass-auth-scheme-00"/>
        </reference>
        <reference anchor="RFC5756">
          <front>
            <title>Updates for RSAES-OAEP and RSASSA-PSS Algorithm Parameters</title>
            <author fullname="S. Turner" initials="S." surname="Turner">
              <organization/>
            </author>
            <author fullname="D. Brown" initials="D." surname="Brown">
              <organization/>
            </author>
            <author fullname="K. Yiu" initials="K." surname="Yiu">
              <organization/>
            </author>
            <author fullname="R. Housley" initials="R." surname="Housley">
              <organization/>
            </author>
            <author fullname="T. Polk" initials="T." surname="Polk">
              <organization/>
            </author>
            <date month="January" year="2010"/>
            <abstract>
              <t>This document updates RFC 4055.  It updates the conventions for using the RSA Encryption Scheme - Optimal Asymmetric Encryption Padding (RSAES-OAEP) key transport algorithm in the Internet X.509 Public Key Infrastructure (PKI).  Specifically, it updates the conventions for algorithm parameters in an X.509 certificate's subjectPublicKeyInfo field.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5756"/>
          <seriesInfo name="DOI" value="10.17487/RFC5756"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="DSS">
          <front>
            <title>Digital Signature Standard (DSS)</title>
            <author>
              <organization/>
            </author>
            <date month="July" year="2013"/>
          </front>
          <seriesInfo name="National Institute of Standards and Technology" value="report"/>
          <seriesInfo name="DOI" value="10.6028/nist.fips.186-4"/>
        </reference>
      </references>
    </references>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors of this document would like to acknowledge the helpful
feedback and discussions from Benjamin Schwartz, Joseph Salowey, Sofia
Celi, and Tara Whalen.</t>
    </section>
    <section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>This section includes test vectors for the two basic issuance protocols
specified in this document. <xref target="test-vectors-poprf"/> contains test vectors
for token issuance protocol 1 (0x0001), and <xref target="test-vectors-rsa"/> contains
test vectors for token issuance protocol 2 (0x0002).</t>
      <section anchor="test-vectors-poprf">
        <name>Issuance Protocol 1 - VOPRF(P-384, SHA-384)</name>
        <t>The test vector below lists the following values:</t>
        <ul spacing="normal">
          <li>skS: The encoded OPRF private key, serialized using SerializeScalar from <xref section="2.1" sectionFormat="of" target="OPRF"/> and
represented as a hexadecimal string.</li>
          <li>pkS: The encoded OPRF public key, serialized using SerializeElement from <xref section="2.1" sectionFormat="of" target="OPRF"/> and
represented as a hexadecimal string.</li>
          <li>challenge: A random challenge digest, represented as a hexadecimal string.</li>
          <li>nonce: The 32-byte client nonce generated according to <xref target="private-request"/>, represented as a
hexadecimal string.</li>
          <li>blind: The blind used when computing the OPRF blinded message, serialized using SerializeScalar
from <xref section="2.1" sectionFormat="of" target="OPRF"/> and represented as a hexadecimal string.</li>
          <li>token_request: The TokenRequest message constructed according to <xref target="private-request"/>, represented
as a hexadecimal string.</li>
          <li>token_request: The TokenResponse message constructed according to <xref target="private-response"/>, represented
as a hexadecimal string.</li>
          <li>token: The output Token from the protocol, represented as a hexadecimal string.</li>
        </ul>
        <artwork><![CDATA[
skS: 0177781aeced893dccdf80713d318a801e2a0498240fdcf650304bbbfd0f8d3b5c0
cf6cfee457aaa983ec02ff283b7a9
pkS: 022c63f79ac59c0ba3d204245f676a2133bd6120c90d67afa05cd6f8614294b7366
c252c6458300551b79a4911c2590a36
challenge:
a5d46383359ef34e3c4a7b8d1b3165778bffc9b70c9e6a60dd14143e4c9c9fbd
nonce: 5d4799f8338ddc50a6685f83b8ecd264b2f157015229d12b3384c0f199efe7b8
blind: 0322fec505230992256296063d989b59cc03e83184eb6187076d264137622d202
48e4e525bdc007b80d1560e0a6f49d9
token_request: 00011a02861fd50d14be873611cff0131d2c872c79d0260c6763498a2
a3f14ca926009c0f247653406e1d52b68d61b7ed2bac9ea
token_response: 038e3625b6a769668a99680e46cf9479f5dc1e86d57164ab3b4a569d
dfc486bf1485d4916a5194fdc0518d3e8444968421ba36e8144aa7902705ff0f3cf40586
3d69451a2a7ba210cc45760c2f1a6045134d877b39e8bcbbf920e5de4a3372557debf211
765cd969976860bc039f9082d6a3e03f8e891246240173d2cf3d69a4613b0f8415979029
22e74c7a1f2e4639e4
token: 00015d4799f8338ddc50a6685f83b8ecd264b2f157015229d12b3384c0f199efe
7b8742cdfb0ed756ea680868ef109a280a393e001d2fa56b1be46ecb31fa25e76731a5b1
d698ea7ab843b8e8a71ed9b2fffa70457a43a8fc687939424b29a7554b40fde130ab7a82
2715909cb73f99a45b640ca1c85180ba9ca1a40bab8b664406a34bcbc63b5e2e5c455cea
00001a968f7
]]></artwork>
      </section>
      <section anchor="test-vectors-rsa">
        <name>Issuance Protocol 2 - Blind RSA, 4096</name>
        <t>The test vector below lists the following values:</t>
        <ul spacing="normal">
          <li>skS: The PEM-encoded PKCS#8 RSA private key used for signing tokens, represented
as a hexadecimal string.</li>
          <li>pkS: The DER-encoded SubjectPublicKeyInfo object carrying the public key corresponding
to skS, as described in <xref target="public-issuer-configuration"/>, represented as a hexadecimal string.</li>
          <li>challenge: A random challenge digest, represented as a hexadecimal string.</li>
          <li>nonce: The 32-byte client nonce generated according to <xref target="public-request"/>, represented as a
hexadecimal string.</li>
          <li>blind: The blind used when computing the blind RSA blinded message, represented as a hexadecimal string.</li>
          <li>salt: The randomly generated 48-byte salt used when encoding the blinded token request message,
represented as a hexadecimal string.</li>
          <li>token_request: The TokenRequest message constructed according to <xref target="public-request"/>, represented
as a hexadecimal string.</li>
          <li>token_request: The TokenResponse message constructed according to <xref target="public-response"/>, represented
as a hexadecimal string.</li>
          <li>token: The output Token from the protocol, represented as a hexadecimal string.</li>
        </ul>
        <artwork><![CDATA[
skS: 2d2d2d2d2d424547494e2050524956415445204b45592d2d2d2d2d0a4d494945765
149424144414e42676b71686b6947397730424151454641415343424b63776767536a416
74541416f49424151444c4775317261705831736334420a4f6b7a38717957355379356b6
f6a41303543554b66717444774e38366a424b5a4f76457245526b49314c527876734d645
3327961326333616b4745714c756b440a556a35743561496b3172417643655844644e445
03442325055707851436e6969396e6b492b6d67725769744444494871386139793137586
e6c5079596f784f530a646f6558563835464f314a752b62397336356d586d34516a75513
94559614971383371724450567a50335758712b524e4d636379323269686763624c766d4
2390a6a41355334475666325a6c74785954736f4c364872377a58696a4e3946374862716
5676f753967654b524d584645352f2b4a3956595a634a734a624c756570480a544f72535
a4d4948502b5358514d4166414f454a4547426d6d4430683566672f43473475676a79486
e4e51383733414e4b6a55716d3676574574413872514c620a4530742b496c706641674d4
241414543676745414c7a4362647a69316a506435384d6b562b434c6679665351322b726
6486e7266724665502f566344787275690a3270316153584a596962653645532b4d622f4
d4655646c485067414c773178513457657266366336444373686c6c784c5753563847734
2737663386f364750320a6359366f777042447763626168474b556b5030456b623953305
84c4a57634753473561556e484a585237696e7834635a6c666f4c6e72455165366855787
34d710a6230644878644844424d644766565777674b6f6a4f6a70532f39386d455579375
6422f3661326c7265676c766a632f326e4b434b7459373744376454716c47460a787a414
261577538364d435a342f5131334c762b426566627174493973715a5a776a72645568514
83856437872793251564d515751696e57684174364d7154340a53425354726f6c5a7a777
2716a65384d504a393175614e4d6458474c63484c49323673587a76374b53514b4267514
4766377735055557641395a325a583958350a6d49784d54424e6445467a56625550754b4
b413179576e31554d444e63556a71682b7a652f376b337946786b6830514633316271363
0654c393047495369414f0a354b4f574d39454b6f2b7841513262614b314d664f5931472
b386a7a42585570427339346b353353383879586d4b366e796467763730424a385a68356
66b55710a5732306f5362686b686a5264537a48326b52476972672b5553774b426751445
a4a4d6e7279324578612f3345713750626f737841504d69596e6b354a415053470a79327
a305a375455622b7548514f2f2b78504d376e433075794c494d44396c61544d48776e367
3372f4c62476f455031575267706f59482f4231346b2f526e360a667577524e3632496f3
97463392b41434c745542377674476179332b675277597453433262356564386c4969656
774546b6561306830754453527841745673330a6e356b796132513976514b4267464a754
67a4f5a742b7467596e576e51554567573850304f494a45484d45345554644f637743784
b7248527239334a6a7546320a453377644b6f546969375072774f59496f614a5468706a5
0634a62626462664b792b6e735170315947763977644a724d6156774a637649707756367
6315570660a56744c61646d316c6b6c7670717336474e4d386a6e4d30587833616a6d6d6
e66655739794758453570684d727a4c4a6c394630396349324c416f4742414e58760a756
75658727032627354316f6b6436755361427367704a6a5065774e526433635a4b397a306
153503144544131504e6b7065517748672f2b36665361564f487a0a79417844733968355
272627852614e6673542b7241554837783153594456565159564d68555262546f5a65364
72f6a716e544333664e6648563178745a666f740a306c6f4d4867776570362b53494d436
f6565325a6374755a5633326c63496166397262484f633764416f47416551386b3853494
c4e4736444f413331544535500a6d3031414a49597737416c5233756f2f524e61432b785
96450553354736b75414c78786944522f57734c455142436a6b46576d6d4a41576e51554
474626e594e0a536377523847324a36466e72454374627479733733574156476f6f465a6
e636d504c50386c784c79626c534244454c79615a762f624173506c4d4f39624435630a4
a2b4e534261612b6f694c6c31776d4361354d43666c633d0a2d2d2d2d2d454e442050524
956415445204b45592d2d2d2d2d0a
pkS: 30820152303d06092a864886f70d01010a3030a00d300b060960864801650304020
2a11a301806092a864886f70d010108300b0609608648016503040202a20302013003820
10f003082010a0282010100cb1aed6b6a95f5b1ce013a4cfcab25b94b2e64a23034e4250
a7eab43c0df3a8c12993af12b111908d4b471bec31d4b6c9ad9cdda90612a2ee903523e6
de5a224d6b02f09e5c374d0cfe01d8f529c500a78a2f67908fa682b5a2b430c81eaf1af7
2d7b5e794fc98a3139276879757ce453b526ef9bf6ceb99979b8423b90f4461a22af37aa
b0cf5733f7597abe44d31c732db68a181c6cbbe607d8c0e52e0655fd9996dc584eca0be8
7afbcd78a337d17b1dba9e828bbd81e291317144e7ff89f55619709b096cbb9ea474cead
264c2073fe49740c01f00e109106066983d21e5f83f086e2e823c879cd43cef700d2a352
a9babd612d03cad02db134b7e225a5f0203010001
challenge:
3f5a1c30d13f860622458ce836d8af325378054370fe8a3d771eebd67d4d810d
nonce: c0fcbbb243d8f5d4f661dbdefca95879b39aeccb77b7db731b59c09688773125
blind: 04d00c700128b4b201b4bec4f05d942bc903d49c26568b5956e0827590d2e4b43
570105ae492f655d41a3d68f1cc6a9a2895c36fd45c88239257f2e6cee5bd88e7d870f35
67069d78f8b85947c7ab123b16c9f3b76d856112802dd0fefa800a9c3807fbb5d949481b
4f7a21da0269f17611b93dfa7197e87ef9c1ef9c2fd0f86119917cdf01284038435f2df3
f8ae2935ae0ef5440b3b4ac12fed83a03bc494abaa87241d624d2dcb0c6a64422eb63dbf
ba0193161648e5b2afbdf3140901840c7d08a0e2953320fffa09641500122ba81c5907e7
ebd4d2384221ddb99439c2465138b98348b58a5f89b4e05b70856a270e1f5308512e368c
fe6dfe4cf3759ed
salt: 4daf07bc96a829736ce6386a4d3ed988192ea4f0acb3ed715dca2ae688c16ad346
ee5e2b3dd26eb2868639a778e3bc5d
token_request: 0002ca832fffabdd44e2cd54e5e24d74519d297608aec9ab88e26b732
adcb382781e7e2657c8b94751b9fa6b2ed02cec383f8cd04e9627d5b62a7f1b7ea16b81e
46f35637cca49f8990d5359f8a7dcac1ba58fb685d4b32a67621d368cc112197d4f84ee5
241c359299cb5fc41182bd65bba112f35a4073d1231290447fb884888ba84eb5b4602534
787aa1e167bc1ddcceb7fb5ad43e2b242fd4b4939349897cfb911cf0f3785847edaeaca6
350c16cb05b7882ec076a3adde7c361f54d6eb67ec239aeafe8a4816b29e4c6aa8bf2873
ba36ec6e2b9596aa508b5e34543a469286be2404f1f481f6a274a2afb429d62377f7ab6d
e56379d2c42f7205e3bf1c74d3159
token_response: 6e7d5334765bea44ea43b81ae8f41334fdac47b3dfaaeb2c3b99f42a
67d8239592ac4fa129a938e139bf052d85804bdaa90f7f54fdfa34d6efeaea0ccc15a500
fb2987b534d0558e8d32df68b3533f6cbc953dabcfff2ef6b6af336c1128f607f0796190
6a2fed919691340e751a8e2173e674569f7e4beb7ad0ee5c65ce82ad477d3e44b3755bcd
0f168ab85ce662d3f87c5634be036382d6ad4ab870ab975e8bffd0b95bcf457dc83337ff
ea85b7c77d44e5cb4bddc5aecfc958cc822cc53ded3da699af86bfad3054fe49da8eeb55
162e444a3b4d438f9e3cbadd50cba56b4f3f0718a65e7d8dfc40762cdb9962edc731f6a7
ec8641cbf98a0ec9cdf8b7f6
token: 0002c0fcbbb243d8f5d4f661dbdefca95879b39aeccb77b7db731b59c09688773
125ad76ab53adc2ca44e4eaae3d71b9bf3fc9332122faeef07cb70d9e04da68c6a7ca572
f8982a9ca248a3056186322d93ca147266121ddeb5632c07f1f71cd27080d1f816364e5d
4d516d2f3e80366e56edc1de4ba0d7aed2675c15156d774b311778091bf5f2aea9926156
2289459a41c5739dec6dc42447744fe07c53c9d090f053263d019255cdfc27739132bd68
21ad49f1a98db6873319d04c04703d74a8fe1d0806b2a25b46246c5bb2ff927463b03152
589068389df89494c6d82f3b92be773a9fe6bc1fed9cbf26bdfbae1ff369f20d0267cdd2
0f3bcba30f8b0c0e9d9a1a39a40156b0614030d5099aa36f085347681aef502f3d081b36
cd79f7ea14df1ca9694320fc44ccbc7c5d90aeedc915af3ac11a3baf562d38c8213e39f6
731fa5e701697d0bfbfcfc83b447945b351115a20770370226b52a19df939f3080e
]]></artwork>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
5j3jnqL7PC57KKPCN8N/uVIXDiC3Xiw6LMqDzQaufDTRfcCtl+RzM/8t9PNz
s/7tN+oCoPMv+9/p7p59fo+DnxvzW8bgZzNc98heU7h66jWfQb3EyN2mNerk
fNfNX85AVfsDJbZsxL5vmm+Ulm+sCIeQe5w7CUt65z33ZCnBc7yl3xFyn7GT
3euV/8iJL9RhSSJqe7NyfepdhYgDPHAN1u4fwgf+Xjs+V+Dt7zpHN+Lp7hb5
/tCzp+LUsg3mQyh0r9ENV3gr9B+U/IhJHrqtqrBvws6tv+vJ4/PfvyMy++D/
RaHpPwJzstMH+TVEfw3RX0P0l4Uo1CtslH4ljPeBlo8/zK25GL7mIPnZb+H0
Df0p3X3jv9wxe+X6IGpzsy+p7Py6vZkHrbVGJnA6NLNO37jnWvoHkL6wi7+o
q5n7nOYbtVr/eBz+07Kz15fhOdzkjTyy4T9bG8hna/1Lti+I4/APl2puF/0n
3bo1RFi+UNHtPFrl3/YVJiTXvPbXjB9bkU13/wWJ/W9HvK/tIt+fka+R9OOd
XPuvBk6+0zOZLRg/e3HggZY47B85u+uXtjPwqlOTYYP9Rbxj2KQfNrm72ebY
fl4tDk88y94j2T99dmBt3hMm8/u+mfvWyy7N7D95JXyxe3Xuv3o2NA0crx+e
33KPQk2e+/fdsd23rd/3Bo7rz4RUlu47m4v+RQCF7/1AfalnV0BU/7gH0lwf
lmbyXNa7hfmY94E+TZqxsyZfp+sfq9g8ONF32z52MNe884tLkxO3yd1v1PjH
KiYdKK3do2Zu02pTBQ0Ph7zdn5IlHZ7UNRz8pL734Npib3xjfNi+cs+giZ53
Xh79sOWZ90Pa/lj1+B7kaihc9vZShy7t2M//VEXJ5wl/yfT9nsknzd9vR36y
AGfTpzd9TTl5BnT4stVHadRvWEg4RXFZllWsrLamqlOjtWmrqIxTk8aVqqLY
JirK6irJotbotsijNMqapmlN1FYmbXIdBRzWZIksL5VSdZVaHSVtm1RpU6o6
cFEbJYku0raslc5rHTUqNdTjSZa3RVmoJE7TxhRxEuk6MkWpWhXl2hRtVcRZ
UmdNmRZFoJOcQbK8SqMoz+OGwbI6jjlcRyrl/BiQgcpNVqRVmua1bdPMpjpT
ZVOZuEnjImfBTdvquimZzxaqiIyJszhLbaZrXbeNCfp4ZJiyrlsGqozReaSK
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

-->

</rfc>
