<?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-10" 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-10"/>
    <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="2023" month="March" day="06"/>
    <keyword>Internet-Draft</keyword>
    <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 issuance private key, and another that produces tokens
that are publicly verifiable using the issuance public key.</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="ARCHITECTURE"/>.</t>
      <t>This document describes the issuance protocol for Privacy Pass built on
<xref target="HTTP"/>. It specifies two variants: one that is privately verifiable
using the issuance private key based on the oblivious pseudorandom function from
<xref target="OPRF"/>, and one that is publicly verifiable using the
issuance public key based on the blind RSA signature scheme
<xref target="BLINDRSA"/>.</t>
      <t>This document does not cover the Privacy Pass architecture, including
choices that are necessary for deployment and application specific choices
for protecting client privacy. This information is covered in <xref target="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 runs the Issuance protocol with an Issuer to produce
Tokens that can be later used for redemption (see
<xref section="2.2" sectionFormat="of" target="AUTHSCHEME"/>).</li>
        <li>Issuer: A service that provides Tokens to Clients.</li>
        <li>Issuer Public Key: The public key (from a private-public key pair) used by
the Issuer for issuing and verifying Tokens.</li>
        <li>Issuer Private Key: The private key (from a private-public key pair) used by
the Issuer for issuing and verifying Tokens.</li>
      </ul>
      <t>This document additionally uses the terms "Origin" and "Token" as defined in
<xref target="ARCHITECTURE"/>.</t>
      <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>
    </section>
    <section anchor="protocol-overview">
      <name>Protocol Overview</name>
      <t>The issuance protocols defined in this document embody the core of Privacy Pass.
Clients receive TokenChallenge inputs from the redemption protocol
(<xref section="2.1" sectionFormat="comma" target="AUTHSCHEME"/>) and use the issuance protocols to produce
corresponding Token values (<xref section="2.2" sectionFormat="comma" target="AUTHSCHEME"/>). The issuance protocol
describes how Clients and Issuers interact to compute a token using a one-round
protocol consisting of a TokenRequest from the Client and TokenResponse from
the Issuer. This interaction is shown below.</t>
      <figure anchor="fig-issuance">
        <name>Issuance Overview</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="224" width="520" viewBox="0 0 520 224" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
              <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
              <path d="M 40,64 L 40,208" fill="none" stroke="black"/>
              <path d="M 80,32 L 80,64" fill="none" stroke="black"/>
              <path d="M 184,32 L 184,64" fill="none" stroke="black"/>
              <path d="M 216,64 L 216,208" fill="none" stroke="black"/>
              <path d="M 256,32 L 256,64" fill="none" stroke="black"/>
              <path d="M 336,32 L 336,64" fill="none" stroke="black"/>
              <path d="M 376,64 L 376,144" fill="none" stroke="black"/>
              <path d="M 376,192 L 376,208" fill="none" stroke="black"/>
              <path d="M 424,32 L 424,64" fill="none" stroke="black"/>
              <path d="M 440,32 L 440,64" fill="none" stroke="black"/>
              <path d="M 472,64 L 472,208" fill="none" stroke="black"/>
              <path d="M 512,32 L 512,64" fill="none" stroke="black"/>
              <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
              <path d="M 184,32 L 256,32" fill="none" stroke="black"/>
              <path d="M 336,32 L 424,32" fill="none" stroke="black"/>
              <path d="M 440,32 L 512,32" fill="none" stroke="black"/>
              <path d="M 8,64 L 80,64" fill="none" stroke="black"/>
              <path d="M 184,64 L 256,64" fill="none" stroke="black"/>
              <path d="M 336,64 L 424,64" fill="none" stroke="black"/>
              <path d="M 440,64 L 512,64" fill="none" stroke="black"/>
              <path d="M 48,96 L 88,96" fill="none" stroke="black"/>
              <path d="M 168,96 L 216,96" fill="none" stroke="black"/>
              <path d="M 40,112 L 56,112" fill="none" stroke="black"/>
              <path d="M 192,112 L 208,112" fill="none" stroke="black"/>
              <path d="M 224,126 L 240,126" fill="none" stroke="black"/>
              <path d="M 224,130 L 240,130" fill="none" stroke="black"/>
              <path d="M 352,126 L 368,126" fill="none" stroke="black"/>
              <path d="M 352,130 L 368,130" fill="none" stroke="black"/>
              <path d="M 216,160 L 288,160" fill="none" stroke="black"/>
              <path d="M 408,160 L 464,160" fill="none" stroke="black"/>
              <path d="M 224,176 L 288,176" fill="none" stroke="black"/>
              <path d="M 416,176 L 472,176" fill="none" stroke="black"/>
              <path d="M 48,192 L 64,192" fill="none" stroke="black"/>
              <path d="M 192,192 L 216,192" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="472,160 460,154.4 460,165.6" fill="black" transform="rotate(0,464,160)"/>
              <polygon class="arrowhead" points="376,128 364,122.4 364,133.6" fill="black" transform="rotate(0,368,128)"/>
              <polygon class="arrowhead" points="232,176 220,170.4 220,181.6" fill="black" transform="rotate(180,224,176)"/>
              <polygon class="arrowhead" points="232,128 220,122.4 220,133.6" fill="black" transform="rotate(180,224,128)"/>
              <polygon class="arrowhead" points="216,112 204,106.4 204,117.6" fill="black" transform="rotate(0,208,112)"/>
              <polygon class="arrowhead" points="56,192 44,186.4 44,197.6" fill="black" transform="rotate(180,48,192)"/>
              <polygon class="arrowhead" points="56,96 44,90.4 44,101.6" fill="black" transform="rotate(180,48,96)"/>
              <g class="text">
                <text x="44" y="52">Origin</text>
                <text x="220" y="52">Client</text>
                <text x="380" y="52">Attester</text>
                <text x="476" y="52">Issuer</text>
                <text x="128" y="100">Request</text>
                <text x="124" y="116">TokenChallenge</text>
                <text x="296" y="132">Attestation</text>
                <text x="348" y="164">TokenRequest</text>
                <text x="352" y="180">TokenResponse</text>
                <text x="128" y="196">Request+Token</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+--------+            +--------+         +----------+ +--------+
| Origin |            | Client |         | Attester | | Issuer |
+---+----+            +---+----+         +----+-----+ +---+----+
    |                     |                   |           |
    |<----- Request ------+                   |           |
    +-- TokenChallenge -->|                   |           |
    |                     |<== Attestation ==>|           |
    |                     |                   |           |
    |                     +--------- TokenRequest ------->|
    |                     |<-------- TokenResponse -------+
    |<-- Request+Token ---+                   |           |
    |                     |                   |           |
]]></artwork>
        </artset>
      </figure>
      <t>The TokenChallenge inputs to the issuance protocols described in this
document can be interactive or non-interactive, and per-origin or cross-origin.</t>
      <t>The issuance protocols defined in this document are compatible with any
deployment model defined in <xref section="4" sectionFormat="of" target="ARCHITECTURE"/>. 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>This document describes two variants of the issuance protocol: one that is
privately verifiable (<xref target="private-flow"/>) using the issuance private key based on
the oblivious pseudorandom function from <xref target="OPRF"/>, and one
that is publicly verifiable (<xref target="public-flow"/>) using the issuance public key
based on the blind RSA signature scheme
<xref target="BLINDRSA"/>.</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 URL: A token request URL for generating access tokens.
For example, an Issuer URL might be
https://issuer.example.net/request.</li>
        <li>Issuer Public Key values: A list of Issuer Public Keys for the issuance
protocol.</li>
      </ol>
      <t>The Issuer parameters can be obtained from an Issuer via a directory object,
which is a JSON object (<xref section="4" sectionFormat="comma" target="RFC8259"/>) whose values are other JSON
values (<xref section="3" sectionFormat="comma" target="RFC8259"/>) for the parameters. The contents of this JSON
object are defined in <xref target="directory-values"/>.</t>
      <table anchor="directory-values">
        <name>Issuer directory object description</name>
        <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 URL value (as an absolute or relative URL) as a percent-encoded URL string, represented as a JSON string (<xref section="7" sectionFormat="comma" target="RFC8259"/>)</td>
          </tr>
          <tr>
            <td align="left">token-keys</td>
            <td align="left">List of Issuer Public Key values, each represented as JSON objects (<xref section="4" sectionFormat="comma" target="RFC8259"/>)</td>
          </tr>
        </tbody>
      </table>
      <t>Each "token-keys" JSON object contains the fields and corresponding raw values
defined in <xref target="tokenkeys-values"/>.</t>
      <table anchor="tokenkeys-values">
        <name>Issuer 'token-keys' object description'</name>
        <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"/>, represented as a JSON number (<xref section="6" sectionFormat="comma" target="RFC8259"/>)</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, represented as a JSON string (<xref section="7" sectionFormat="comma" target="RFC8259"/>)</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 directory could look like:</t>
      <artwork><![CDATA[
 {
    "issuer-request-uri": "https://issuer.example.net/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/token-issuer-directory" and are located at the well-known location
/.well-known/token-issuer-directory; see <xref target="wkuri-reg"/> for the registration
information for this well-known URI.</t>
      <t>Issuers SHOULD use HTTP caching to permit caching of this resource
<xref target="RFC5861"/>. The cache lifetime depends on the Issuer's key rotation schedule.
Regular rotation of token keys is recommended to minimize the risk of key
compromise.</t>
      <t>Issuers can control cache lifetime with the Cache-Control header, as follows:</t>
      <artwork><![CDATA[
  Cache-Control: max-age=86400
]]></artwork>
      <t>Consumers of the Issuer directory resource SHOULD follow the usual HTTP caching
<xref target="RFC9111"/> semantics when processing this resource. Long cache lifetimes may
result in use of stale Issuer configuration information, whereas short
lifetimes may result in decreased performance. When use of an Issuer
configuration results in token issuance failures, e.g., because the
configuration information is too stale, the directory SHOULD be fetched and
revalidated.</t>
    </section>
    <section anchor="private-flow">
      <name>Issuance Protocol for Privately Verifiable Tokens</name>
      <t>The privately verifiable issuance protocol allows Clients to produce Token
values that verify using the Issuer Private Key. This protocol is based
on the oblivious pseudorandom function from <xref target="OPRF"/>.</t>
      <t>Issuers provide a 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="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 Request URI: A URI to which token request messages 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 URI might be correspond to the Client's configured Attester, and the
Attester is configured to relay requests to the Issuer.</li>
        <li>Issuer name: An identifier for the Issuer. This is typically a host name that
can be used to construct HTTP requests to the Issuer.</li>
        <li>Issuer Public Key: <tt>pkI</tt>, with a key identifier <tt>token_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="AUTHSCHEME"/>.</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>
      <t>The constants <tt>Ne</tt> and <tt>Ns</tt> are as defined in <xref section="4" sectionFormat="comma" target="OPRF"/> for
OPRF(P-384, SHA-384). The constant <tt>Nk</tt> is defined by <xref target="private-token-type"/>.</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>
with the input challenge and Issuer key identifier as described below:</t>
        <artwork><![CDATA[
nonce = random(32)
challenge_digest = SHA256(challenge)
token_input = concat(0x0001, // Token type field is 2 bytes long
                     nonce,
                     challenge_digest,
                     token_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.
The Client stores the <tt>nonce</tt> and <tt>challenge_digest</tt> values locally
for use when finalizing the issuance protocol to produce a token
(as described in <xref target="private-finalize"/>).</t>
        <t>The Client then creates a TokenRequest structured as follows:</t>
        <artwork><![CDATA[
struct {
  uint16_t token_type = 0x0001; /* Type VOPRF(P-384, SHA-384) */
  uint8_t truncated_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>"truncated_token_key_id" is the least significant byte of the <tt>token_key_id</tt>
(<xref target="issuer-configuration"/>) in network byte order (in other words, the last 8
bits of <tt>token_key_id</tt>).</li>
          <li>"blinded_msg" is the Ne-octet blinded message defined above, computed as
<tt>SerializeElement(blinded_element)</tt>.</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="private-finalize"/>. The Client then generates an HTTP
POST request to send to the Issuer Request URI, with the TokenRequest as the
content. The media type for this request is
"application/private-token-request". An example request is shown below.</t>
        <artwork><![CDATA[
:method = POST
:scheme = https
:authority = issuer.example.net
:path = /request
accept = application/private-token-response
cache-control = no-cache, no-store
content-type = application/private-token-request
content-length = <Length of TokenRequest>

<Bytes containing the TokenRequest>
]]></artwork>
      </section>
      <section anchor="private-response">
        <name>Issuer-to-Client Response</name>
        <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.truncated_token_key_id corresponds to the truncated 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. The Issuer then 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 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[Ne];
   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 message, 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>.</li>
        </ul>
        <t>The Issuer generates an HTTP response with status code 200 whose content
consists of TokenResponse, with the content type set as
"application/private-token-response".</t>
        <artwork><![CDATA[
:status = 200
content-type = application/private-token-response
content-length = <Length of TokenResponse>

<Bytes containing the TokenResponse>
]]></artwork>
      </section>
      <section anchor="private-finalize">
        <name>Finalization</name>
        <t>Upon receipt, the Client handles the response and, if successful, deserializes
the content values TokenResponse.evaluate_msg 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; /* Type VOPRF(P-384, SHA-384) */
  uint8_t nonce[32];
  uint8_t challenge_digest[32];
  uint8_t token_key_id[32];
  uint8_t authenticator[Nk];
} Token;
]]></artwork>
        <t>The Token.nonce value is that which was sampled in <xref target="private-request"/>.
If the Finalize function fails, the Client aborts the protocol.</t>
      </section>
      <section anchor="token-verification">
        <name>Token Verification</name>
        <t>Verifying a Token requires creating a VOPRF context using the Issuer Private
Key and Public Key, evaluating the token contents, and comparing the result
against the token authenticator value:</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 <tt>skI</tt>
and <tt>pkI</tt>, respectively, used to produce tokens. These keys MUST NOT be reused
in other protocols. A RECOMMENDED method for generating key pairs is as
follows:</t>
        <artwork><![CDATA[
seed = random(Ns)
(skI, pkI) = DeriveKeyPair(seed, "PrivacyPass")
]]></artwork>
        <t>The key identifier for a public key <tt>pkI</tt>, denoted <tt>token_key_id</tt>, is computed
as follows:</t>
        <artwork><![CDATA[
token_key_id = SHA256(SerializeElement(pkI))
]]></artwork>
        <t>Since Clients truncate <tt>token_key_id</tt> in each <tt>TokenRequest</tt>, Issuers should
ensure that the truncated form of new key IDs do not collide with other
truncated key IDs in rotation.</t>
      </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 using the protocol in <xref target="BLINDRSA"/>.
In particular, this variant of the issuance protocol works for the
RSABSSA-SHA384-PSS-Deterministic and RSABSSA-SHA384-PSSZERO-Deterministic
blind RSA protocol variants described in <xref section="5" sectionFormat="of" target="BLINDRSA"/>.</t>
      <t>The publicly verifiable issuance protocol differs from the protocol in
<xref target="private-flow"/> in that the output tokens are publicly verifiable by anyone
with the Issuer Public Key. This means 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 this difference, 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 Request URI: A URI to which token request messages 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 'Split Origin, Attester, Issuer' deployment model, the
Issuer Request URI might be correspond to the Client's configured Attester,
and the Attester is configured to relay requests to the Issuer.</li>
        <li>Issuer name: An identifier for the Issuer. This is typically a host name that
can be used to construct HTTP requests to the Issuer.</li>
        <li>Issuer Public Key: <tt>pkI</tt>, with a key identifier <tt>token_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="AUTHSCHEME"/>.</li>
      </ul>
      <t>Given this configuration and these inputs, the two messages exchanged in
this protocol are described below. The constant <tt>Nk</tt> is defined by
<xref target="public-token-type"/>.</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)
challenge_digest = SHA256(challenge)
token_input = concat(0x0002, // Token type field is 2 bytes long
                     nonce,
                     challenge_digest,
                     token_key_id)
blinded_msg, blind_inv =
  Blind(pkI, PrepareIdentity(token_input))
]]></artwork>
        <t>The PrepareIdentity and Blind functions are defined in
<xref section="4.1" sectionFormat="of" target="BLINDRSA"/> and <xref section="4.2" sectionFormat="of" target="BLINDRSA"/>, respectively.
The Client stores the nonce and challenge_digest values locally for use
when finalizing the issuance protocol to produce a token (as described
in <xref target="public-finalize"/>).</t>
        <t>The Client then creates a TokenRequest structured as follows:</t>
        <artwork><![CDATA[
struct {
  uint16_t token_type = 0x0002; /* Type Blind RSA (2048-bit) */
  uint8_t truncated_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>"truncated_token_key_id" is the least significant byte of the <tt>token_key_id</tt>
(<xref target="public-issuer-configuration"/>) in network byte order (in other words, the
last 8 bits of <tt>token_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 Request
URI, with the TokenRequest as the content. The media type for this request
is "application/private-token-request". An example request is shown below:</t>
        <artwork><![CDATA[
:method = POST
:scheme = https
:authority = issuer.example.net
:path = /request
accept = application/private-token-response
cache-control = no-cache, no-store
content-type = application/private-token-request
content-length = <Length of TokenRequest>

<Bytes containing the TokenRequest>
]]></artwork>
      </section>
      <section anchor="public-response">
        <name>Issuer-to-Client Response</name>
        <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.truncated_token_key_id corresponds to the truncated key
ID of an Issuer Public Key.</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. 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[
blind_sig = BlindSign(skI, TokenRequest.blinded_msg)
]]></artwork>
        <t>The BlindSign function is defined in <xref section="4.3" sectionFormat="of" target="BLINDRSA"/>.
The result 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 Issuer generates an HTTP response with status code 200 whose content
consists of TokenResponse, with the content type set as
"application/private-token-response".</t>
        <artwork><![CDATA[
:status = 200
content-type = application/private-token-response
content-length = <Length of TokenResponse>

<Bytes containing the TokenResponse>
]]></artwork>
      </section>
      <section anchor="public-finalize">
        <name>Finalization</name>
        <t>Upon receipt, the Client handles the response and, if successful, processes the
content as follows:</t>
        <artwork><![CDATA[
authenticator =
  Finalize(pkI, nonce, blind_sig, blind_inv)
]]></artwork>
        <t>The Finalize function is defined in <xref section="4.4" sectionFormat="of" target="BLINDRSA"/>. If this
succeeds, the Client then constructs a Token as described in <xref target="AUTHSCHEME"/> as
follows:</t>
        <artwork><![CDATA[
struct {
  uint16_t token_type = 0x0002; /* Type Blind RSA (2048-bit) */
  uint8_t nonce[32];
  uint8_t challenge_digest[32];
  uint8_t token_key_id[32];
  uint8_t authenticator[Nk];
} Token;
]]></artwork>
        <t>The Token.nonce value is that which was sampled in <xref target="private-request"/>.
If the Finalize function fails, the Client aborts the protocol.</t>
      </section>
      <section anchor="token-verification-1">
        <name>Token Verification</name>
        <t>Verifying a Token requires checking that Token.authenticator is a valid
signature over the remainder of the token input using the Issuer Public Key.
The function <tt>RSASSA-PSS-VERIFY</tt> is defined in <xref section="8.1.2" sectionFormat="of" target="RFC8017"/>,
using SHA-384 as the Hash function, MGF1 with SHA-384 as the PSS mask
generation function (MGF), and a 48-byte salt length (sLen).</t>
        <artwork><![CDATA[
token_authenticator_input =
  concat(Token.token_type,
         Token.nonce,
         Token.challenge_digest,
         Token.token_key_id)
valid = RSASSA-PSS-VERIFY(pkI,
                          token_authenticator_input,
                          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"/>. These key
pairs MUST NOT be reused in other protocols.</t>
        <t>The key identifier for a keypair (skI, pkI), denoted <tt>token_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. The parameters field for the digest used in the
mask generation function and the digest being signed MUST be omitted.</t>
        <t>An example sequence of the SPKI object (in ASN.1 format) for a 2048-bit key is below:</t>
        <artwork><![CDATA[
$ cat spki.bin | xxd -r -p | openssl asn1parse -dump -inform DER
    0:d=0  hl=4 l= 338 cons: SEQUENCE
    4:d=1  hl=2 l=  61 cons: SEQUENCE
    6:d=2  hl=2 l=   9 prim: OBJECT            :rsassaPss
   17:d=2  hl=2 l=  48 cons: SEQUENCE
   19:d=3  hl=2 l=  13 cons: cont [ 0 ]
   21:d=4  hl=2 l=  11 cons: SEQUENCE
   23:d=5  hl=2 l=   9 prim: OBJECT            :sha384
   34:d=3  hl=2 l=  26 cons: cont [ 1 ]
   36:d=4  hl=2 l=  24 cons: SEQUENCE
   38:d=5  hl=2 l=   9 prim: OBJECT            :mgf1
   49:d=5  hl=2 l=  11 cons: SEQUENCE
   51:d=6  hl=2 l=   9 prim: OBJECT            :sha384
   62:d=3  hl=2 l=   3 cons: cont [ 2 ]
   64:d=4  hl=2 l=   1 prim: INTEGER           :30
   67:d=1  hl=4 l= 271 prim: BIT STRING
]]></artwork>
        <t>Since Clients truncate <tt>token_key_id</tt> in each <tt>TokenRequest</tt>, Issuers should
ensure that the truncated form of new key IDs do not collide with other
truncated key IDs in rotation.</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 defined in
<xref target="BLINDRSA"/>. All security considerations described in the VOPRF and blind RSA
documents 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="ARCHITECTURE"/>. In
particular, the privacy considerations in
Section <xref target="ARCHITECTURE" section="4" sectionFormat="bare"/> and Section <xref target="ARCHITECTURE" section="5" sectionFormat="bare"/> of <xref target="ARCHITECTURE"/>, particularly those pertaining to
Issuer Public Key rotation and consistency (where consistency is as described
in <xref target="CONSISTENCY"/>) and Issuer selection, are
relevant for implementations of the protocols in this document.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA considerations</name>
      <t>This section contains considerations for IANA.</t>
      <section anchor="wkuri-reg">
        <name>Well-Known 'token-issuer-directory' URI</name>
        <t>This document updates the "Well-Known URIs" Registry <xref target="WellKnownURIs"/> with the
following values.</t>
        <table anchor="wellknownuri-values">
          <name>'token-issuer-directory' Well-Known URI</name>
          <thead>
            <tr>
              <th align="left">URI Suffix</th>
              <th align="left">Change Controller</th>
              <th align="left">Reference</th>
              <th align="left">Status</th>
              <th align="left">Related information</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">token-issuer-directory</td>
              <td align="left">IETF</td>
              <td align="left">[this document]</td>
              <td align="left">permanent</td>
              <td align="left">None</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="token-type">
        <name>Token Type Registry Updates</name>
        <t>This document updates the "Token Type" Registry from
<xref section="5.2" sectionFormat="comma" target="AUTHSCHEME"/> with the following entries.</t>
        <section anchor="private-token-type">
          <name>Token Type VOPRF (P-384, SHA-384)</name>
          <ul spacing="normal">
            <li>Value: 0x0001</li>
            <li>Name: VOPRF (P-384, SHA-384)</li>
            <li>Token Structure: As defined in <xref section="2.2" sectionFormat="of" target="AUTHSCHEME"/></li>
            <li>TokenChallenge Structure: As defined in <xref section="2.1" sectionFormat="of" target="AUTHSCHEME"/></li>
            <li>Publicly Verifiable: N</li>
            <li>Public Metadata: N</li>
            <li>Private Metadata: N</li>
            <li>Nk: 48</li>
            <li>Nid: 32</li>
            <li>Reference: <xref target="private-flow"/></li>
            <li>Notes: None</li>
          </ul>
        </section>
        <section anchor="public-token-type">
          <name>Token Type Blind RSA (2048-bit)</name>
          <ul spacing="normal">
            <li>Value: 0x0002</li>
            <li>Name: Blind RSA (2048-bit)</li>
            <li>Token Structure: As defined in <xref section="2.2" sectionFormat="of" target="AUTHSCHEME"/></li>
            <li>TokenChallenge Structure: As defined in <xref section="2.1" sectionFormat="of" target="AUTHSCHEME"/></li>
            <li>Publicly Verifiable: Y</li>
            <li>Public Metadata: N</li>
            <li>Private Metadata: N</li>
            <li>Nk: 256</li>
            <li>Nid: 32</li>
            <li>Reference: <xref target="public-flow"/></li>
            <li>Notes: The RSABSSA-SHA384-PSS-Deterministic and
RSABSSA-SHA384-PSSZERO-Deterministic variants are supported</li>
          </ul>
        </section>
      </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>Token issuer directory: "application/token-issuer-directory"</li>
          <li>TokenRequest: "application/private-token-request"</li>
          <li>TokenResponse: "application/private-token-response"</li>
        </ul>
        <t>The definition for each media type is in the following subsections.</t>
        <section anchor="applicationtoken-issuer-directory-media-type">
          <name>"application/token-issuer-directory" media type</name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>token-issuer-directory</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>"binary"</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t>see <xref target="setup"/></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 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>IESG</t>
            </dd>
          </dl>
        </section>
        <section anchor="applicationprivate-token-request-media-type">
          <name>"application/private-token-request" media type</name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>private-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>"binary"</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 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>IESG</t>
            </dd>
          </dl>
        </section>
        <section anchor="applicationprivate-token-response-media-type">
          <name>"application/private-token-response" media type</name>
          <dl spacing="compact">
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>private-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>"binary"</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 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>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="WellKnownURIs" target="https://www.iana.org/assignments/well-known-uris/well-known-uris.xhtml">
          <front>
            <title>Well-Known URIs</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="OPRF">
          <front>
            <title>Oblivious Pseudorandom Functions (OPRFs) using Prime-Order Groups</title>
            <author fullname="Alex Davidson" initials="A." surname="Davidson">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Armando Faz-Hernandez" initials="A." surname="Faz-Hernandez">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <date day="21" month="February" year="2023"/>
            <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 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="Internet-Draft" value="draft-irtf-cfrg-voprf-21"/>
        </reference>
        <reference anchor="BLINDRSA">
          <front>
            <title>RSA Blind Signatures</title>
            <author fullname="Frank Denis" initials="F." surname="Denis">
              <organization>Fastly Inc.</organization>
            </author>
            <author fullname="Frederic Jacobs" initials="F." surname="Jacobs">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="16" month="February" 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.

   This document is a product of the Crypto Forum Research Group (CFRG)
   in the IRTF.

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-11"/>
        </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" 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="30" month="January" year="2023"/>
            <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.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-auth-scheme-08"/>
        </reference>
        <reference anchor="TLS13">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray">
              <organization/>
            </author>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format.  It was derived from the ECMAScript Programming Language Standard.  JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC5861">
          <front>
            <title>HTTP Cache-Control Extensions for Stale Content</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document defines two independent HTTP Cache-Control extensions that allow control over the use of stale responses by caches.  This  document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5861"/>
          <seriesInfo name="DOI" value="10.17487/RFC5861"/>
        </reference>
        <reference anchor="RFC9111">
          <front>
            <title>HTTP Caching</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages. </t>
              <t>This document obsoletes RFC 7234.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="98"/>
          <seriesInfo name="RFC" value="9111"/>
          <seriesInfo name="DOI" value="10.17487/RFC9111"/>
        </reference>
        <reference anchor="RFC8017">
          <front>
            <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty">
              <organization/>
            </author>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski">
              <organization/>
            </author>
            <author fullname="J. Jonsson" initials="J." surname="Jonsson">
              <organization/>
            </author>
            <author fullname="A. Rusch" initials="A." surname="Rusch">
              <organization/>
            </author>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
              <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series.  By publishing this RFC, change control is transferred to the IETF.</t>
              <t>This document also obsoletes RFC 3447.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8017"/>
          <seriesInfo name="DOI" value="10.17487/RFC8017"/>
        </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="ARCHITECTURE">
          <front>
            <title>The Privacy Pass Architecture</title>
            <author fullname="Alex Davidson" initials="A." surname="Davidson">
              <organization>LIP</organization>
            </author>
            <author fullname="Jana Iyengar" initials="J." surname="Iyengar">
              <organization>Fastly</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="30" month="January" year="2023"/>
            <abstract>
              <t>   This document specifies the Privacy Pass architecture and
   requirements for its constituent protocols used for constructing
   privacy-preserving authentication mechanisms.  It provides
   recommendations on how the architecture should be deployed 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-10"/>
        </reference>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes. </t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="DSS" target="http://dx.doi.org/10.6028/nist.fips.186-4">
          <front>
            <title>Digital Signature Standard (DSS)</title>
            <author fullname="Information Technology Laboratory"/>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date month="July" year="2013"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.186-4"/>
        </reference>
        <reference anchor="CONSISTENCY">
          <front>
            <title>*** BROKEN REFERENCE ***</title>
            <author>
              <organization/>
            </author>
            <date/>
          </front>
        </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 Issuer private Key, serialized using SerializeScalar from
<xref section="2.1" sectionFormat="of" target="OPRF"/> and represented as a hexadecimal string.</li>
          <li>pkS: The Issuer Public Key, serialized using SerializeElement from
<xref section="2.1" sectionFormat="of" target="OPRF"/> and represented as a hexadecimal string.</li>
          <li>token_challenge: A randomly generated TokenChallenge structure, 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_response: 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[
// Test vector 1
skS: 39b0d04d3732459288fc5edb89bb02c2aa42e06709f201d6c518871d5181
14910bee3c919bed1bbffe3fc1b87d53240a
pkS: 02d45bf522425cdd2227d3f27d245d9d563008829252172d34e48469290c
21da1a46d42ca38f7beabdf05c074aee1455bf
token_challenge: 0001000e6973737565722e6578616d706c65205de58a52fc
daef25ca3f65448d04e040fb1924e8264acfccfc6c5ad451d582b3000e6f72696
7696e2e6578616d706c65
nonce:
6aa422c41b59d3e44a136dd439df2454e3587ee5f3697798cdc05fafe73073b8
blind: 8e7fd80970b8a00b0931b801a2e22d9903d83bd5597c6a4dc1496ed2b1
7ef820445ef3bd223f3ab2c4f54c5d1c956909
token_request: 0001f4030ab3e23181d1e213f24315f5775983c678ce22eff9
427610832ab3900f2cd12d6829a07ec8a6813cf0b5b886f4cc4979
token_response: 036bb3c5c397d88c3527cf9f08f1fe63687b867e85c930c49
ee2c222408d4903722a19ff272ac97e3725b947c972784ebfe86eb9ea54336e43
34ea9660212c0c85fbadfbf491a1ce2446fc3379337fccd45c1059b2bc760110e
e1ec227d8e01c9f482c00c47ffa0dbe2fb58c32dde2b1dbe69fff920a528e68dd
9b3c2483848e57c30542b8984fa6bfecd6d71d54d53eda
token: 00016aa422c41b59d3e44a136dd439df2454e3587ee5f3697798cdc05f
afe73073b8501370b494089dc462802af545e63809581ee6ef57890a12105c283
68169514bf260d0792bf7f46c9866a6d37c3032d8714415f87f5f6903d7fb071e
253be2f4e0a835d76528b8444f73789ee7dc90715b01c17902fd87375c00a7a9d
3d92540437f470773be20f71e721da3af40edeb

// Test vector 2
skS: 39efed331527cc4ddff9722ab5cd35aeafe7c27520b0cfa2eedbdc298dc3
b12bc8298afcc46558af1e2eeacc5307d865
pkS: 038017e005904c6146b37109d6c2a72b95a183aaa9ed951b8d8fb1ed9033
f68033284d175e7df89849475cd67a86bfbf4e
token_challenge: 0001000e6973737565722e6578616d706c6500000e6f7269
67696e2e6578616d706c65
nonce:
7617bc802cfdb5d74722ef7418bdbb4f2c88403820e55fe7ec07d3190c29d665
blind: 6492ee50072fa18d035d69c4246362dffe2621afb95a10c033bb0109e0
f705b0437c425553272e0aa5266ec379e7015e
token_request: 000133033a5fe04a39da1bbfb68ccdeecd1917474dd525462e
5a90a6ba53b42aaa1486fe443a2e1c7f3fd5ff028a1c7cf1aeac5d
token_response: 023bf8cd624880d669c5cc6c88b056355c6e8e1bcbf3746cf
b9ab9248a4c056f23a4876ef998a8b6b281d50f852c6fa868fc4fa135c79ccb5f
bdf8bf3c926e10c7c12f934a887d86da4a4e5be70f5a169aa75720887bb690536
92a8f11f9cda7a72f281e4e3568e848225367946c70db09e718e3cba16193987b
c10bede3ef54c4d036c17cd4015bb113be60d7aa927e0d
token: 00017617bc802cfdb5d74722ef7418bdbb4f2c88403820e55fe7ec07d3
190c29d665c994f7d5cdc2fb970b13d4e8eb6e6d8f9dcdaa65851fb091025dfe1
34bd5a62a116477bc9e1a205cca95d0c92335ca7a3e71063b2ac020bdd231c660
97f12333ef438d00801bca5ace0fab8eb483dc04cd62578b95b5652921cd2698c
45ea74f6c8827b4e19f01140fa5bd039866f562

// Test vector 3
skS: 2b7709595b62b784f14946ae828f65e6caeba6eefe732c86e9ae50e818c0
55b3d7ca3a5f2beecaa859a62ff7199d35cc
pkS: 03a0de1bf3fd0a73384283b648884ba9fa5dee190f9d7ad4292c2fd49d8b
4d64db674059df67f5bd7e626475c78934ae8d
token_challenge: 0001000e6973737565722e6578616d706c65000017666f6f
2e6578616d706c652c6261722e6578616d706c65
nonce:
87499b5930918d2d83ecebf92d25ca0722aa11b80dbbfd950537c28aa7d3a9df
blind: 1f659584626ba15f44f3d887b2e5fe4c27315b185dfbfaea4253ebba30
610c4d9b73c78714c142360e85a00942c0fcff
token_request: 0001c8024610a9f3aac21090f3079d6809437a2b94b4403c7e
645f849bc6c505dade154c258c8ecd4d2bdcf574daca65db671908
token_response: 03c2ab925d03e7793b4a4df6eb505210139f620359e142449
1b8143c06a3e5298b25b662c33256411be7277233e1a34570f7a4d142d931e4b5
ff8829e27aaf7eb2cc7f9ab655477d71c01d5da5aef44dd076b5820b4710ef025
a9e6c6b50a95af6105c5987c1b834d615008cf6370556ed00c6671e69776c09a9
2b5ac84804750dd867c78817bdf69f1443002b18ae7a52
token: 000187499b5930918d2d83ecebf92d25ca0722aa11b80dbbfd950537c2
8aa7d3a9df1949fd455872478ba87e2e6c513c3261cddbe57220581245e4c9c91
1dd1c0bb865785bff8f3cfe08cccbb3a7b8e41d23a172871be4828cc54582d87b
c7cfc5c8bcedc1868ebc845b000c317ed75312274a42b10be6db23bd8a168fd2f
021c23925d72c4d14cd7588c03845da0d41a326

// Test vector 4
skS: 22e237b7b983d77474e4495aff2fc1e10422b1d955192e0fbf2b7b618fba
625fcb94b599da9113da49c495a48fbf7f7f
pkS: 028cd68715caa20d19b2b20d017d6a0a42b9f2b0a47db65e5e763e23744f
e14d74e374bbc93a2ec3970eb53c8aa765ee21
token_challenge: 0001000e6973737565722e6578616d706c65000000
nonce:
02f0a206752d555a24924f2da5942a1bb4cb2d83ff473aa8b2bc3a89e820cd43
blind: af91d1dbcf6b46baecde70eb305b8fe75629199cca19c7f9344b8607b9
0def27bc53e0345ade32c9fd0a1efda056d1c0
token_request: 0001a503632ebb003ed15b6de4557c047c7f81a58688143331
2ad3ad7f9416f2dfc940d3f439ad1e8cd677d94ae7c05bc958d134
token_response: 032018bc3f180d9650e27f72de76a90b47e336ae9cb058548
d851c7046fa0875d96346c15cb39d8083cc6fb57216544c6a815c37d792769e12
9c0513ce2034c3286cb212548f4aed1b0f71b28e219a71874a93e53ab2f473282
71d1e9cbefc197a4f599a6825051fa1c6e55450042f04182b86c9cf12477a9f16
849396c051fa27012e81a86e6c4a9204a063f1e1722dd7
token: 000102f0a206752d555a24924f2da5942a1bb4cb2d83ff473aa8b2bc3a
89e820cd43085cb06952044c7655b412ab7d484c97b97c48c79c568140b8d49a0
2ca47a9cfb0a5cfb861290c4dbd8fd9b60ee9b1a1a54cf47c98531fe253f1ed6d
875de5a58f42db12b540b0d11bc5d6b42e6d17c2b73e98631e54d40fd2901ebec
4268668535b03cbf76f7f15a29d623a64cab0c4

// Test vector 5
skS: 46f3d4f562002b85ffcfdb4d06835fb9b2e24372861ecaa11357fd1f29f9
ed26e44715549ccedeb39257f095110f0159
pkS: 02fbe9da0b7cabe3ec51c36c8487b10909142b59af030c728a5e87bb3b30
f54c06415d22e03d9212bd3d9a17d5520d4d0f
token_challenge: 0001000e6973737565722e6578616d706c65205de58a52fc
daef25ca3f65448d04e040fb1924e8264acfccfc6c5ad451d582b30000
nonce:
9ee54942d8a1604452a76856b1bfaf1cd608e1e3fa38acfd9f13e84483c90e89
blind: 76e0938e824b6cda6c163ff55d0298d539e222ed3984f4e31bbb654a8c
59671d4e0a7e264ca758cd0f4b533e0f60c5aa
token_request: 0001e10202bc92ac516c867f39399d71976018db52fcab5403
f8534a65677ba9e1e7d9b1d01767d137884c86cf5fe698c2f5d8e9
token_response: 0322ea3856a71533796393229b33d33c02cd714e40d5aa4e0
71f056276f32f89c09947eca8ff119d940d9d57c2fcbd83d2da494ddeb37dc1f6
78e5661a8e7bcc96b3477eb89d708b0ce10e0ea1b5ce0001f9332f743c0cc3d47
48233fea6d3152fae7844821268eb96ba491f60b1a3a848849310a39e9ef59121
669aa5d5dbb4b4deb532d2f907a01c5b39efaf23985080
token: 00019ee54942d8a1604452a76856b1bfaf1cd608e1e3fa38acfd9f13e8
4483c90e89d4380df12a1727f4e2ca1ee0d7abea0d0fb1e9506507a4dd618f9b8
7e79f9f3521a7c9134d6722925bf622a994041cdb1b082cdf1309af32f0ce00ca
1dab63e1b603747a8a5c3b46c7c2853de5ec7af8cac7cf3e089cecdc9ed3ff05c
d24504fe4f6c52d24ac901471267d8b63b61e6b
]]></artwork>
      </section>
      <section anchor="test-vectors-rsa">
        <name>Issuance Protocol 2 - Blind RSA, 2048</name>
        <t>The test vector below lists the following values:</t>
        <ul spacing="normal">
          <li>skS: The PEM-encoded PKCS#8 RSA Issuer Private Key used for signing tokens,
represented as a hexadecimal string.</li>
          <li>pkS: The DER-encoded SubjectPublicKeyInfo object carrying the Issuer Public
Key, as described in <xref target="public-issuer-configuration"/>, represented as a
hexadecimal string.</li>
          <li>token_challenge: A randomly generated TokenChallenge structure, 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[
// Test vector 1
skS: 2d2d2d2d2d424547494e2050524956415445204b45592d2d2d2d2d0a4d49
4945765149424144414e42676b71686b6947397730424151454641415343424b6
3776767536a41674541416f49424151444c4775317261705831736334420a4f6b
7a38717957355379356b6f6a41303543554b66717444774e38366a424b5a4f764
57245526b49314c527876734d6453327961326333616b4745714c756b440a556a
35743561496b3172417643655844644e44503442325055707851436e6969396e6
b492b6d67725769744444494871386139793137586e6c5079596f784f530a646f
6558563835464f314a752b62397336356d586d34516a755139455961497138337
1724450567a50335758712b524e4d636379323269686763624c766d42390a6a41
355334475666325a6c74785954736f4c364872377a58696a4e394637486271656
76f753967654b524d584645352f2b4a3956595a634a734a624c756570480a544f
72535a4d4948502b5358514d4166414f454a4547426d6d4430683566672f43473
475676a79486e4e51383733414e4b6a55716d3676574574413872514c620a4530
742b496c706641674d4241414543676745414c7a4362647a69316a506435384d6
b562b434c6679665351322b7266486e7266724665502f566344787275690a3270
316153584a596962653645532b4d622f4d4655646c485067414c7731785134576
57266366336444373686c6c784c57535638477342737663386f364750320a6359
366f777042447763626168474b556b5030456b62395330584c4a5763475347356
1556e484a585237696e7834635a6c666f4c6e7245516536685578734d710a6230
644878644844424d644766565777674b6f6a4f6a70532f39386d4555793756422
f3661326c7265676c766a632f326e4b434b7459373744376454716c47460a787a
414261577538364d435a342f5131334c762b426566627174493973715a5a776a7
264556851483856437872793251564d515751696e57684174364d7154340a5342
5354726f6c5a7a7772716a65384d504a393175614e4d6458474c63484c4932367
3587a76374b53514b42675144766377735055557641395a325a583958350a6d49
784d54424e6445467a56625550754b4b413179576e31554d444e63556a71682b7
a652f376b337946786b68305146333162713630654c393047495369414f0a354b
4f574d39454b6f2b7841513262614b314d664f5931472b386a7a4258557042733
9346b353353383879586d4b366e796467763730424a385a6835666b55710a5732
306f5362686b686a5264537a48326b52476972672b5553774b426751445a4a4d6
e7279324578612f3345713750626f737841504d69596e6b354a415053470a7932
7a305a375455622b7548514f2f2b78504d376e433075794c494d44396c61544d4
8776e3673372f4c62476f455031575267706f59482f4231346b2f526e360a6675
77524e3632496f397463392b41434c745542377674476179332b6752775974534
33262356564386c4969656774546b6561306830754453527841745673330a6e35
6b796132513976514b4267464a75467a4f5a742b7467596e576e5155456757385
0304f494a45484d45345554644f637743784b7248527239334a6a7546320a4533
77644b6f546969375072774f59496f614a5468706a50634a62626462664b792b6
e735170315947763977644a724d6156774a6376497077563676315570660a5674
4c61646d316c6b6c7670717336474e4d386a6e4d30587833616a6d6d6e6665573
9794758453570684d727a4c4a6c394630396349324c416f4742414e58760a7567
5658727032627354316f6b6436755361427367704a6a5065774e526433635a4b3
97a306153503144544131504e6b7065517748672f2b36665361564f487a0a7941
7844733968355272627852614e6673542b7241554837783153594456565159564
d68555262546f5a6536472f6a716e544333664e6648563178745a666f740a306c
6f4d4867776570362b53494d436f6565325a6374755a5633326c6349616639726
2484f633764416f47416551386b3853494c4e4736444f413331544535500a6d30
31414a49597737416c5233756f2f524e61432b78596450553354736b75414c787
86944522f57734c455142436a6b46576d6d4a41576e51554474626e594e0a5363
77523847324a36466e72454374627479733733574156476f6f465a6e636d504c5
0386c784c79626c534244454c79615a762f624173506c4d4f39624435630a4a2b
4e534261612b6f694c6c31776d4361354d43666c633d0a2d2d2d2d2d454e44205
0524956415445204b45592d2d2d2d2d0a
pkS: 30820152303d06092a864886f70d01010a3030a00d300b06096086480165
03040202a11a301806092a864886f70d010108300b0609608648016503040202a
2030201300382010f003082010a0282010100cb1aed6b6a95f5b1ce013a4cfcab
25b94b2e64a23034e4250a7eab43c0df3a8c12993af12b111908d4b471bec31d4
b6c9ad9cdda90612a2ee903523e6de5a224d6b02f09e5c374d0cfe01d8f529c50
0a78a2f67908fa682b5a2b430c81eaf1af72d7b5e794fc98a3139276879757ce4
53b526ef9bf6ceb99979b8423b90f4461a22af37aab0cf5733f7597abe44d31c7
32db68a181c6cbbe607d8c0e52e0655fd9996dc584eca0be87afbcd78a337d17b
1dba9e828bbd81e291317144e7ff89f55619709b096cbb9ea474cead264c2073f
e49740c01f00e109106066983d21e5f83f086e2e823c879cd43cef700d2a352a9
babd612d03cad02db134b7e225a5f0203010001
token_challenge: 0002000e6973737565722e6578616d706c65208e7acc900e
393381e8810b7c9e4a68b5163f1f880ab6688a6ffe780923609e88000e6f72696
7696e2e6578616d706c65
nonce:
aa72019d1f951df197021ce63876fe8b0a02dc1c31a12b0a2dd1508d07827f05
blind: 425421de54c7381864ce36473abfb988c454fe6c27de863de702a6a2ad
ca153fa2de47bd8fcd62734caa8ce1f920b77d980ab58c32d16dde54873f28ca9
68e8c125b8363514be68972f553655bcc7f80a284cc327e47e804a47333c5b3cd
f773312cc7ad9fda748aed0baa7e19c5a2d1dafda718f086d7fc0a4bc02d488e0
f20812daee335af7177b7a8369bd617066aed7a58f659f295c36b418827f67972
5b81ca14ea16fb82df21ad76da1ac38dcf24bf6252f8510e2308608ac9197f6cb
54fdcb19db17837302a2b87d659c5605f35f3709a130f0c3d50e172f0cae36cbc
9467f9914895a215a9e32443bcafff795273ccf8965a7eaa8c0b2184763e3e5c
salt: 3d980852fa570c064204feb8d107098db976ef8c2137e8641d234bbd88a
986fdb306a7af220cfadede08f51e1ef61766
token_request: 0002086a95be84b63cfed0993bb579194a72a95057e1548ac4
63a9a5b33b011f2b2011d59487f01862f1d8e4d5ea42e73a660fbc3d010b944a5
4da3a4e0942f8894c0884589b438cb902e9a34278970f33c16f351f7dae58d273
c3ab66ef368da36f785e89e24d1d983d5c34311cd21f290f9e89e8646ab0d0a48
988fcd46230de5e7603cd12cc95c7ec5002e5e26737aa7eb69c626476e6c8d465
10ee404a3d7daf3a23b7c66735d363ca13676925c6ed0117f60d165ce1f8ba616
d041b6384baf6da3e2f757cb18e879a4f8595c2dc895ddf1f4279c75768d108b5
c47f95f94e81e2d8b9c8b74476924ab3b7c45243fc99ac5466e8a3680ad37fa15
c96010b274094
token_response: 675d84b751d9e593330ec4b6d7ab69c9a61517e98971f4b73
6150508174b4335761464f237be2d72bbae4b94dffc6143413f6351f1aa4efde6
c32d4d6d9392a008290d56d1222f9b77a1336213e01934f7d972f3bf9ea5a5786
c321352f103b3667e605379a55f0fb925fbb09b8a9f85e7dd4b388a3b49d06fd7
0ba28f6a780e3bc8f6421554fd6c38b63ef19f84ccfcf14709dd0b4d72213c1f0
60893854eba0ea1a147e275da320db5e9849882d5f9179efa8a2d8d3b803f9d14
45ef5c1f660be08883ce9b29a0a992fc035d2938cbb61c440044438dbb8b3ce71
58a8f9827d230482f622d291406ab236b32b122627ae0fd36bd0d6b7607b8044a
ce404d44
token: 0002aa72019d1f951df197021ce63876fe8b0a02dc1c31a12b0a2dd150
8d07827f055969f643b4cfda5196d4aa86aeb5368834f4f06de46950ed435b3b8
1bd036d44ca572f8982a9ca248a3056186322d93ca147266121ddeb5632c07f1f
71cd2708bc6a21b533d07294b5e900faf5537dd3eb33cee4e08c9670d1e5358fd
184b0e00c637174f5206b14c7bb0e724ebf6b56271e5aa2ed94c051c4a433d302
b23bc52460810d489fb050f9de5c868c6c1b06e3849fd087629f704cc724bc0d0
984d5c339686fcdd75f9a9cdd25f37f855f6f4c584d84f716864f546b696d620c
5bd41a811498de84ff9740ba3003ba2422d26b91eb745c084758974642a420782
01543246ddb58030ea8e722376aa82484dca9610a8fb7e018e396165462e17a03
e40ea7e128c090a911ecc708066cb201833010c1ebd4e910fc8e27a1be467f786
71836a508257123a45e4e0ae2180a434bd1037713466347a8ebe46439d3da1970

// Test vector 2
skS: 2d2d2d2d2d424547494e2050524956415445204b45592d2d2d2d2d0a4d49
4945765149424144414e42676b71686b6947397730424151454641415343424b6
3776767536a41674541416f49424151444c4775317261705831736334420a4f6b
7a38717957355379356b6f6a41303543554b66717444774e38366a424b5a4f764
57245526b49314c527876734d6453327961326333616b4745714c756b440a556a
35743561496b3172417643655844644e44503442325055707851436e6969396e6
b492b6d67725769744444494871386139793137586e6c5079596f784f530a646f
6558563835464f314a752b62397336356d586d34516a755139455961497138337
1724450567a50335758712b524e4d636379323269686763624c766d42390a6a41
355334475666325a6c74785954736f4c364872377a58696a4e394637486271656
76f753967654b524d584645352f2b4a3956595a634a734a624c756570480a544f
72535a4d4948502b5358514d4166414f454a4547426d6d4430683566672f43473
475676a79486e4e51383733414e4b6a55716d3676574574413872514c620a4530
742b496c706641674d4241414543676745414c7a4362647a69316a506435384d6
b562b434c6679665351322b7266486e7266724665502f566344787275690a3270
316153584a596962653645532b4d622f4d4655646c485067414c7731785134576
57266366336444373686c6c784c57535638477342737663386f364750320a6359
366f777042447763626168474b556b5030456b62395330584c4a5763475347356
1556e484a585237696e7834635a6c666f4c6e7245516536685578734d710a6230
644878644844424d644766565777674b6f6a4f6a70532f39386d4555793756422
f3661326c7265676c766a632f326e4b434b7459373744376454716c47460a787a
414261577538364d435a342f5131334c762b426566627174493973715a5a776a7
264556851483856437872793251564d515751696e57684174364d7154340a5342
5354726f6c5a7a7772716a65384d504a393175614e4d6458474c63484c4932367
3587a76374b53514b42675144766377735055557641395a325a583958350a6d49
784d54424e6445467a56625550754b4b413179576e31554d444e63556a71682b7
a652f376b337946786b68305146333162713630654c393047495369414f0a354b
4f574d39454b6f2b7841513262614b314d664f5931472b386a7a4258557042733
9346b353353383879586d4b366e796467763730424a385a6835666b55710a5732
306f5362686b686a5264537a48326b52476972672b5553774b426751445a4a4d6
e7279324578612f3345713750626f737841504d69596e6b354a415053470a7932
7a305a375455622b7548514f2f2b78504d376e433075794c494d44396c61544d4
8776e3673372f4c62476f455031575267706f59482f4231346b2f526e360a6675
77524e3632496f397463392b41434c745542377674476179332b6752775974534
33262356564386c4969656774546b6561306830754453527841745673330a6e35
6b796132513976514b4267464a75467a4f5a742b7467596e576e5155456757385
0304f494a45484d45345554644f637743784b7248527239334a6a7546320a4533
77644b6f546969375072774f59496f614a5468706a50634a62626462664b792b6
e735170315947763977644a724d6156774a6376497077563676315570660a5674
4c61646d316c6b6c7670717336474e4d386a6e4d30587833616a6d6d6e6665573
9794758453570684d727a4c4a6c394630396349324c416f4742414e58760a7567
5658727032627354316f6b6436755361427367704a6a5065774e526433635a4b3
97a306153503144544131504e6b7065517748672f2b36665361564f487a0a7941
7844733968355272627852614e6673542b7241554837783153594456565159564
d68555262546f5a6536472f6a716e544333664e6648563178745a666f740a306c
6f4d4867776570362b53494d436f6565325a6374755a5633326c6349616639726
2484f633764416f47416551386b3853494c4e4736444f413331544535500a6d30
31414a49597737416c5233756f2f524e61432b78596450553354736b75414c787
86944522f57734c455142436a6b46576d6d4a41576e51554474626e594e0a5363
77523847324a36466e72454374627479733733574156476f6f465a6e636d504c5
0386c784c79626c534244454c79615a762f624173506c4d4f39624435630a4a2b
4e534261612b6f694c6c31776d4361354d43666c633d0a2d2d2d2d2d454e44205
0524956415445204b45592d2d2d2d2d0a
pkS: 30820152303d06092a864886f70d01010a3030a00d300b06096086480165
03040202a11a301806092a864886f70d010108300b0609608648016503040202a
2030201300382010f003082010a0282010100cb1aed6b6a95f5b1ce013a4cfcab
25b94b2e64a23034e4250a7eab43c0df3a8c12993af12b111908d4b471bec31d4
b6c9ad9cdda90612a2ee903523e6de5a224d6b02f09e5c374d0cfe01d8f529c50
0a78a2f67908fa682b5a2b430c81eaf1af72d7b5e794fc98a3139276879757ce4
53b526ef9bf6ceb99979b8423b90f4461a22af37aab0cf5733f7597abe44d31c7
32db68a181c6cbbe607d8c0e52e0655fd9996dc584eca0be87afbcd78a337d17b
1dba9e828bbd81e291317144e7ff89f55619709b096cbb9ea474cead264c2073f
e49740c01f00e109106066983d21e5f83f086e2e823c879cd43cef700d2a352a9
babd612d03cad02db134b7e225a5f0203010001
token_challenge: 0002000e6973737565722e6578616d706c6500000e6f7269
67696e2e6578616d706c65
nonce:
98c1345ff38a554b429b428b0f206cfe4f3892f8041995f2c24873d90e84488d
blind: 7bb85f89c9b83a0e2b02938b3396f06f8f3df0018a91f1a2cc5416aaa5
52994d063f634d50bea13bffe8d5e01431e646e2e384549cefd695ac3affff665
a1ebf0113df2520006bd66e468d37a58266daa8a3a75692535e1fc46d0c1d6fb6
f37c949808172e20c0b77a48570a1fcb474325bdd23cdbce52b5d6a9e39f7aec7
3b09004eae8c8bfff2b4b533ea63bcf467a4cd95ccfb0cb4e43bc4992c1fd0be7
a77a4475dbf8094cf25125ece901abbcea607a9050ad9f8ec3d0d66341f6eab40
ee9c9c22c0b560b8377f8543d8878c7458885fd285c7556cc88fc6021617075b4
2c83a86005169a6f13352e789b28fdbbe3d0288e1dd7c801497573893146aea3
salt: b6b4378421ab0ea677ce3f4036fd0489dee458ad81ea519c3e8bde3fcd5
ec1505d28e110d7b44dcac5e04ecedd54d11a
token_request: 00020892d26a271c0104657ba10c0b5cb2827bb209d86e8002
7f96bfb861e0f40cb897f0fc426498433141ce9bc8b4a95914fefe4e40bdd3802
a121cb0b59a4ae7e03255275c4abf071d991c82ead402606c0ef912178b0a0f68
d303e06a966079230592827b84979dbcb5f21ab8904e9908638ddf705c4f8af8a
053c19a66090726b60c6b4063976e4c66eab33522dd3f9d64828441db4aa82d55
adcc3d3920592884cd1e5a3f490d5c81f1306705dcc5c61d82373f1dbd7d2ae4b
2fea0f7339f5d868415f59312766e3074ee4a7305f5f053da82673ee6747a727a
26d8d10ea1b1a3491d26b0c38b962c02a774ac78932153aae9dcc98a9b1db1f53
89644682f7727
token_response: 113a5124c1aef6fc230d9fc42b789226f45ca941aad4da3f4
8cf37c7744a8d7fd1dcfd71cd39d09e9324760180ea0bade3360efaf7322a1fa1
5f41247be3857fde8c5c92ec6d67a7ee33be8fdadf8b27bb0db706117448e55bc
e9927cb6bfb1f87f9edb054181a4558af0c0d3973d7033b9599e674c20cf08a7b
bcf0da815a2edaab7c4fb80dee4ea2cc53576a9691e857da931c6c592d2c69dd2
1afda8ea653dd90157adfe80e2375c08e75beb497df8b7b73192fbbd4e80359d9
bbaecea14e0acebdda92596f71ec1d57e26b6497b3152976bc07a4409148cb843
89eb207fb8e841106012408c6e19b4f964008b6a909aaab767a661a061c97da16
43040455
token: 000298c1345ff38a554b429b428b0f206cfe4f3892f8041995f2c24873
d90e84488d11e15c91a7c2ad02abd66645802373db1d823bea80f08d452541fb2
b62b5898bca572f8982a9ca248a3056186322d93ca147266121ddeb5632c07f1f
71cd27083350a206c5e9b7c0898f97611ce0bb8d74d310bb194ab67e094e32ff6
da90886924b1b9e7b569402c1101d896d2fc3a7371ef77f02310db1dc9f81c853
5828c2d0e9d9051720d182cd54e1c2c3bf417da2fc7aa72bb70ccc834ef274a2e
809c9821b3d395d6535423f7428b3f29175d6eb840b4b7685336e57e2b6afeaab
c0c17ea4f557e8a9cc2f624e245c6ccd7cbdd6c32c97c5c6974e802f688e2d25f
0aba4215f609f692244517d5d3407e0172273982c001c158f5fcbe1b5d2447c26
a87e89f5a9e72b498b0c59ce749823d2cf253d3cf6cd4e64fa0e434d95e488789
247a9ceed756ff4ff33a8d2402c0db381236d331092838b608a42002552092897

// Test vector 3
skS: 2d2d2d2d2d424547494e2050524956415445204b45592d2d2d2d2d0a4d49
4945765149424144414e42676b71686b6947397730424151454641415343424b6
3776767536a41674541416f49424151444c4775317261705831736334420a4f6b
7a38717957355379356b6f6a41303543554b66717444774e38366a424b5a4f764
57245526b49314c527876734d6453327961326333616b4745714c756b440a556a
35743561496b3172417643655844644e44503442325055707851436e6969396e6
b492b6d67725769744444494871386139793137586e6c5079596f784f530a646f
6558563835464f314a752b62397336356d586d34516a755139455961497138337
1724450567a50335758712b524e4d636379323269686763624c766d42390a6a41
355334475666325a6c74785954736f4c364872377a58696a4e394637486271656
76f753967654b524d584645352f2b4a3956595a634a734a624c756570480a544f
72535a4d4948502b5358514d4166414f454a4547426d6d4430683566672f43473
475676a79486e4e51383733414e4b6a55716d3676574574413872514c620a4530
742b496c706641674d4241414543676745414c7a4362647a69316a506435384d6
b562b434c6679665351322b7266486e7266724665502f566344787275690a3270
316153584a596962653645532b4d622f4d4655646c485067414c7731785134576
57266366336444373686c6c784c57535638477342737663386f364750320a6359
366f777042447763626168474b556b5030456b62395330584c4a5763475347356
1556e484a585237696e7834635a6c666f4c6e7245516536685578734d710a6230
644878644844424d644766565777674b6f6a4f6a70532f39386d4555793756422
f3661326c7265676c766a632f326e4b434b7459373744376454716c47460a787a
414261577538364d435a342f5131334c762b426566627174493973715a5a776a7
264556851483856437872793251564d515751696e57684174364d7154340a5342
5354726f6c5a7a7772716a65384d504a393175614e4d6458474c63484c4932367
3587a76374b53514b42675144766377735055557641395a325a583958350a6d49
784d54424e6445467a56625550754b4b413179576e31554d444e63556a71682b7
a652f376b337946786b68305146333162713630654c393047495369414f0a354b
4f574d39454b6f2b7841513262614b314d664f5931472b386a7a4258557042733
9346b353353383879586d4b366e796467763730424a385a6835666b55710a5732
306f5362686b686a5264537a48326b52476972672b5553774b426751445a4a4d6
e7279324578612f3345713750626f737841504d69596e6b354a415053470a7932
7a305a375455622b7548514f2f2b78504d376e433075794c494d44396c61544d4
8776e3673372f4c62476f455031575267706f59482f4231346b2f526e360a6675
77524e3632496f397463392b41434c745542377674476179332b6752775974534
33262356564386c4969656774546b6561306830754453527841745673330a6e35
6b796132513976514b4267464a75467a4f5a742b7467596e576e5155456757385
0304f494a45484d45345554644f637743784b7248527239334a6a7546320a4533
77644b6f546969375072774f59496f614a5468706a50634a62626462664b792b6
e735170315947763977644a724d6156774a6376497077563676315570660a5674
4c61646d316c6b6c7670717336474e4d386a6e4d30587833616a6d6d6e6665573
9794758453570684d727a4c4a6c394630396349324c416f4742414e58760a7567
5658727032627354316f6b6436755361427367704a6a5065774e526433635a4b3
97a306153503144544131504e6b7065517748672f2b36665361564f487a0a7941
7844733968355272627852614e6673542b7241554837783153594456565159564
d68555262546f5a6536472f6a716e544333664e6648563178745a666f740a306c
6f4d4867776570362b53494d436f6565325a6374755a5633326c6349616639726
2484f633764416f47416551386b3853494c4e4736444f413331544535500a6d30
31414a49597737416c5233756f2f524e61432b78596450553354736b75414c787
86944522f57734c455142436a6b46576d6d4a41576e51554474626e594e0a5363
77523847324a36466e72454374627479733733574156476f6f465a6e636d504c5
0386c784c79626c534244454c79615a762f624173506c4d4f39624435630a4a2b
4e534261612b6f694c6c31776d4361354d43666c633d0a2d2d2d2d2d454e44205
0524956415445204b45592d2d2d2d2d0a
pkS: 30820152303d06092a864886f70d01010a3030a00d300b06096086480165
03040202a11a301806092a864886f70d010108300b0609608648016503040202a
2030201300382010f003082010a0282010100cb1aed6b6a95f5b1ce013a4cfcab
25b94b2e64a23034e4250a7eab43c0df3a8c12993af12b111908d4b471bec31d4
b6c9ad9cdda90612a2ee903523e6de5a224d6b02f09e5c374d0cfe01d8f529c50
0a78a2f67908fa682b5a2b430c81eaf1af72d7b5e794fc98a3139276879757ce4
53b526ef9bf6ceb99979b8423b90f4461a22af37aab0cf5733f7597abe44d31c7
32db68a181c6cbbe607d8c0e52e0655fd9996dc584eca0be87afbcd78a337d17b
1dba9e828bbd81e291317144e7ff89f55619709b096cbb9ea474cead264c2073f
e49740c01f00e109106066983d21e5f83f086e2e823c879cd43cef700d2a352a9
babd612d03cad02db134b7e225a5f0203010001
token_challenge: 0002000e6973737565722e6578616d706c65000017666f6f
2e6578616d706c652c6261722e6578616d706c65
nonce:
9e7a22bdc5d715682434cebc07eb5fa53f622f776a17a6d91757af1592df0e71
blind: c52cabc5e4e131e0f5860cc4c486c5ee8a5fa8ae59484446121f87b0d8
ccd037f161a99ebcc57f79d05a2ffc852656ad2d0894fab8d1b0f998e6e678254
ed5778da98b137371320314d06c24276e35435bccffa49d257687f270f9ce1792
6a074737546d5415a4bb9e624a6302562b395856632efb6992f6593a4f95fb342
002efebc3046ca96bbc26edb2f1a1454a24ce7b9a7ec8e44fb9e99c8144d409d8
cd8a5903c0a3c0acbd9f82573ed1fc4a296e3eaf4867ade30110794678f422d36
bd103ea4617d2472cf58da3381e52e5be60f4acbf685e280648cef21211a796ec
d005ecbdaa1046c40950afca4c4e7dd4b8c19e504088489a15667b45895b6e92
salt: c847b5d0fa9101a1e09954ac9f3eed6600af58936295ad2e54274e13e64
0d59f732d07530c94c19c20668f03470c77ac
token_request: 0002080f6bd84fba1822c577c8cd670f1136cca107f84ddd9d
405d5ed22ad15da975538f031433bad4a2688999732927efe2928d4c132389a12
2f40b639b083d6fcbbed7a55fb18db536d2dcbaefe6dc0a70730e6565b08a7dfd
783913a59f37d798de0cfc262c9e90a7ee884a3ec355eacbd44e5f6779fea6a78
5b05ac352fdd51a116cf2be1d8e38b0bfacd6a3d53a88c99f747cce908f86b335
62691f540e3e88562092cd17cc2f78ce0fb53312a5f2dc918bdb1dc90d9d65091
c7ba9080ccc1755cb5437989364dc92f0e8fea18f66d631451feb02a3d68af41d
e1a3f9be925dda5c4ca0706fc4ca28b3317e939f6573442c6d03be17cd141fa82
60d382d134c6b
token_response: 2dd08ce89cf4f62bc236ab7b75266e13c57c750345e328e0b
ea107537c4cbeea5bfc990716950440628ea2e37dbc5c9c6d84f9a965cbf0cbff
fb89516b1fd19a90d69cc52a28890bbdcf782f56aefadad85b6e861a74170ce91
0891c89e4293f37978dbd41cc8b5c68802de3d86d9f0326b9c22b809512245896
6a6ddd1aeb3828d239c3b359efc9b375390eb19050d5656c2b084304d9bd8a816
14f631bf82a7e4588413b44a0cb6d94e942fa134790b396cb71e3ed33b557b5bd
0734e726fa79abdca8694703b81d0e289b749801d4383e0d4f825dcde0dd98c43
d3ba81c028dd8833a4fc24961f60e118d4421dce5b611d53e9ca96156a52509bf
a9afeb7e
token: 00029e7a22bdc5d715682434cebc07eb5fa53f622f776a17a6d91757af
1592df0e710042eee45ac4dd5acb8f6e65c4d8dd47504f73f7463507ef96a4d72
27d2774f3ca572f8982a9ca248a3056186322d93ca147266121ddeb5632c07f1f
71cd270815b010bbc0d5f55e9c856d2e9ffaefba007d33c2d5452fbeb0b15919b
973e0dc9180aaeb18242043758d9fb0ac9ac5e04da9ff74ec93644ae6cdb7068e
a76ce2295b9b95e383ed3a9856e9f618dafdf4cec5d2b53ea4297c2f3990babca
71e3ccd6c07a437daae7ed27b6b81178fb7ce5fa5dd63781cc64ac1e410f441c0
34b0a5cc873a2ce875e8b38c92bab563635c4f8f4fa35d1f582ef19edf7da75aa
11a503a82e32a12bd4da41e0ca7ec7f451caf586f5b910003fcbbb9ff5ffa2408
c28d6807737d03da651ea9bfafcc2747a6830e19a1d160fcd5c25d2f79dad86a8
b3de8e926e08ca1addced72977f7b56398ef59c26e725df0a976a08f2a936ca42

// Test vector 4
skS: 2d2d2d2d2d424547494e2050524956415445204b45592d2d2d2d2d0a4d49
4945765149424144414e42676b71686b6947397730424151454641415343424b6
3776767536a41674541416f49424151444c4775317261705831736334420a4f6b
7a38717957355379356b6f6a41303543554b66717444774e38366a424b5a4f764
57245526b49314c527876734d6453327961326333616b4745714c756b440a556a
35743561496b3172417643655844644e44503442325055707851436e6969396e6
b492b6d67725769744444494871386139793137586e6c5079596f784f530a646f
6558563835464f314a752b62397336356d586d34516a755139455961497138337
1724450567a50335758712b524e4d636379323269686763624c766d42390a6a41
355334475666325a6c74785954736f4c364872377a58696a4e394637486271656
76f753967654b524d584645352f2b4a3956595a634a734a624c756570480a544f
72535a4d4948502b5358514d4166414f454a4547426d6d4430683566672f43473
475676a79486e4e51383733414e4b6a55716d3676574574413872514c620a4530
742b496c706641674d4241414543676745414c7a4362647a69316a506435384d6
b562b434c6679665351322b7266486e7266724665502f566344787275690a3270
316153584a596962653645532b4d622f4d4655646c485067414c7731785134576
57266366336444373686c6c784c57535638477342737663386f364750320a6359
366f777042447763626168474b556b5030456b62395330584c4a5763475347356
1556e484a585237696e7834635a6c666f4c6e7245516536685578734d710a6230
644878644844424d644766565777674b6f6a4f6a70532f39386d4555793756422
f3661326c7265676c766a632f326e4b434b7459373744376454716c47460a787a
414261577538364d435a342f5131334c762b426566627174493973715a5a776a7
264556851483856437872793251564d515751696e57684174364d7154340a5342
5354726f6c5a7a7772716a65384d504a393175614e4d6458474c63484c4932367
3587a76374b53514b42675144766377735055557641395a325a583958350a6d49
784d54424e6445467a56625550754b4b413179576e31554d444e63556a71682b7
a652f376b337946786b68305146333162713630654c393047495369414f0a354b
4f574d39454b6f2b7841513262614b314d664f5931472b386a7a4258557042733
9346b353353383879586d4b366e796467763730424a385a6835666b55710a5732
306f5362686b686a5264537a48326b52476972672b5553774b426751445a4a4d6
e7279324578612f3345713750626f737841504d69596e6b354a415053470a7932
7a305a375455622b7548514f2f2b78504d376e433075794c494d44396c61544d4
8776e3673372f4c62476f455031575267706f59482f4231346b2f526e360a6675
77524e3632496f397463392b41434c745542377674476179332b6752775974534
33262356564386c4969656774546b6561306830754453527841745673330a6e35
6b796132513976514b4267464a75467a4f5a742b7467596e576e5155456757385
0304f494a45484d45345554644f637743784b7248527239334a6a7546320a4533
77644b6f546969375072774f59496f614a5468706a50634a62626462664b792b6
e735170315947763977644a724d6156774a6376497077563676315570660a5674
4c61646d316c6b6c7670717336474e4d386a6e4d30587833616a6d6d6e6665573
9794758453570684d727a4c4a6c394630396349324c416f4742414e58760a7567
5658727032627354316f6b6436755361427367704a6a5065774e526433635a4b3
97a306153503144544131504e6b7065517748672f2b36665361564f487a0a7941
7844733968355272627852614e6673542b7241554837783153594456565159564
d68555262546f5a6536472f6a716e544333664e6648563178745a666f740a306c
6f4d4867776570362b53494d436f6565325a6374755a5633326c6349616639726
2484f633764416f47416551386b3853494c4e4736444f413331544535500a6d30
31414a49597737416c5233756f2f524e61432b78596450553354736b75414c787
86944522f57734c455142436a6b46576d6d4a41576e51554474626e594e0a5363
77523847324a36466e72454374627479733733574156476f6f465a6e636d504c5
0386c784c79626c534244454c79615a762f624173506c4d4f39624435630a4a2b
4e534261612b6f694c6c31776d4361354d43666c633d0a2d2d2d2d2d454e44205
0524956415445204b45592d2d2d2d2d0a
pkS: 30820152303d06092a864886f70d01010a3030a00d300b06096086480165
03040202a11a301806092a864886f70d010108300b0609608648016503040202a
2030201300382010f003082010a0282010100cb1aed6b6a95f5b1ce013a4cfcab
25b94b2e64a23034e4250a7eab43c0df3a8c12993af12b111908d4b471bec31d4
b6c9ad9cdda90612a2ee903523e6de5a224d6b02f09e5c374d0cfe01d8f529c50
0a78a2f67908fa682b5a2b430c81eaf1af72d7b5e794fc98a3139276879757ce4
53b526ef9bf6ceb99979b8423b90f4461a22af37aab0cf5733f7597abe44d31c7
32db68a181c6cbbe607d8c0e52e0655fd9996dc584eca0be87afbcd78a337d17b
1dba9e828bbd81e291317144e7ff89f55619709b096cbb9ea474cead264c2073f
e49740c01f00e109106066983d21e5f83f086e2e823c879cd43cef700d2a352a9
babd612d03cad02db134b7e225a5f0203010001
token_challenge: 0002000e6973737565722e6578616d706c65000000
nonce:
494dae41fc7e300c2d09990afcd5d5e1fc95305337dc12f78942c45340bfe8e6
blind: 097cb17bcedecfe058dff5c4e517d1e36d7ab8f46252b1ac1933ba378c
32625c0dbc69f5655c2003bf39e75810796cd63675b223cf3162c57108d56e058
4cfce6cad829e74369ada38a095eb3012c912b31ccde7425f93464e353fb17552
be3a8df2913daca61543a33ae45058f218c471dfbc12fb304158e29b6ed35bc07
9e23f1e6173c5dec4545840bbe58e5ad37cbea0a10dca5d9df2781589d27c3410
8477b52c0d32a1370c17f703941fbb1a007a6794e7de2758709c9bbf80f21eec7
922b9bb491eb6aac8c1a14764e648e6be4fff0ae913797067aa0826f366c3103e
103b05653c73b52d7f825a185dccfb806da700db9f53abb848554b7d4f7c28f3
salt: 49912979f1bf528e5b8228ab1328df74319dce7bdaf45821ceb1100dcf0
42a2dfe852fc9db59b64a5f6493c282504240
token_request: 000208244840027ca8c620f8b14caded9a198ba388ccd8541e
962f68a0071535d958d18494afd0bc11da4da8c8b33864f5a8f623b697cd56348
594e11a75479048a72c0ed179b070506c09a7eb6ed3582f572df38cf60fcde11a
52c5ce6d7b23435b60200ad9f66d21f40f323c9aa54307d0b966d4457c37542b6
6bb183ddeafca914fc74831698b5d52f498ee3d165685f49a8d86e39fe6c4b7ec
678f5250908d25e5b873c69b422368121aa4210cadd6fc640907d3cb9a7a3e827
a0e742470f00c2f49dc6c0e8cc9470dbfd73df0ccbb96c10b02af0dd7dee719ec
a11ff8e1b4929e59f3cf319de9bda29a6d968b43083b5d4242f3448d76ada08b8
014f70b97e719
token_response: c2746ff644cffb28a2c19395fa19dfb61fd135daa837844fb
f9fbe06c253e64e69f53aefddc0fb4833b1b5e58f571134a34f245499c3e73419
549c2c9111cf94f2f68fea3996d47f71e8d8d6fc5b1c074bf74fa59de4cbf32f5
f08d45ea45492f0279c3b1a8d852698edbe1651eb8e09eb223a27386c0feb2f6a
8260235edb36cf433da518100829b63166284b325d87fc941ea3bafe7b6761b70
82e09397837f74b4f0fc838bce8af7242089dd5561f57735926bcbad219fc9fee
85ae49a8e8951f63ca194b7ff018c06ee02267e7267bb996432dc76973819da80
e3e86947b0a4b36d3a972dafaaa3db0e1044b325f02c679996d9bcd3ce51390d5
4bc10b8c
token: 0002494dae41fc7e300c2d09990afcd5d5e1fc95305337dc12f78942c4
5340bfe8e6b741ec1b6fd05f1e95f8982906aec1612896d9ca97d53eef94ad3c9
fe023f7a4ca572f8982a9ca248a3056186322d93ca147266121ddeb5632c07f1f
71cd2708a55c83dc04292b5d92add1a87b37e54f22f61c58840586f390c50b231
824423378ddcf50e69dc817d45bfad06c7f2a0ac35d2acd7f26b0bc9954c192b0
a0ef28a2a5650e390098dd3cb1166a7cb1716d3dd2d19dc5ca3b1ea6206359de0
002d82bc4fa7e69fb07214b06addcbd2203d1e17f57fc580bcc5a13e0ac15cf94
2182cc2b5d6eaa737a712704114e357e2ec2f10047463ded02a1a0766dc346dd7
212b9711e03ac95eb258ac1164104dc9a0d3e738ae742ab5ed8c5139fc07145a7
88b9f891741ee68f0a66782b7b84a9bb4cb4b3d1b26b67106f397b35b641d882d
7b0185168946de898ef72349a44a47dbdd6d46e9ba9ba543d5701b65c63d645c2

// Test vector 5
skS: 2d2d2d2d2d424547494e2050524956415445204b45592d2d2d2d2d0a4d49
4945765149424144414e42676b71686b6947397730424151454641415343424b6
3776767536a41674541416f49424151444c4775317261705831736334420a4f6b
7a38717957355379356b6f6a41303543554b66717444774e38366a424b5a4f764
57245526b49314c527876734d6453327961326333616b4745714c756b440a556a
35743561496b3172417643655844644e44503442325055707851436e6969396e6
b492b6d67725769744444494871386139793137586e6c5079596f784f530a646f
6558563835464f314a752b62397336356d586d34516a755139455961497138337
1724450567a50335758712b524e4d636379323269686763624c766d42390a6a41
355334475666325a6c74785954736f4c364872377a58696a4e394637486271656
76f753967654b524d584645352f2b4a3956595a634a734a624c756570480a544f
72535a4d4948502b5358514d4166414f454a4547426d6d4430683566672f43473
475676a79486e4e51383733414e4b6a55716d3676574574413872514c620a4530
742b496c706641674d4241414543676745414c7a4362647a69316a506435384d6
b562b434c6679665351322b7266486e7266724665502f566344787275690a3270
316153584a596962653645532b4d622f4d4655646c485067414c7731785134576
57266366336444373686c6c784c57535638477342737663386f364750320a6359
366f777042447763626168474b556b5030456b62395330584c4a5763475347356
1556e484a585237696e7834635a6c666f4c6e7245516536685578734d710a6230
644878644844424d644766565777674b6f6a4f6a70532f39386d4555793756422
f3661326c7265676c766a632f326e4b434b7459373744376454716c47460a787a
414261577538364d435a342f5131334c762b426566627174493973715a5a776a7
264556851483856437872793251564d515751696e57684174364d7154340a5342
5354726f6c5a7a7772716a65384d504a393175614e4d6458474c63484c4932367
3587a76374b53514b42675144766377735055557641395a325a583958350a6d49
784d54424e6445467a56625550754b4b413179576e31554d444e63556a71682b7
a652f376b337946786b68305146333162713630654c393047495369414f0a354b
4f574d39454b6f2b7841513262614b314d664f5931472b386a7a4258557042733
9346b353353383879586d4b366e796467763730424a385a6835666b55710a5732
306f5362686b686a5264537a48326b52476972672b5553774b426751445a4a4d6
e7279324578612f3345713750626f737841504d69596e6b354a415053470a7932
7a305a375455622b7548514f2f2b78504d376e433075794c494d44396c61544d4
8776e3673372f4c62476f455031575267706f59482f4231346b2f526e360a6675
77524e3632496f397463392b41434c745542377674476179332b6752775974534
33262356564386c4969656774546b6561306830754453527841745673330a6e35
6b796132513976514b4267464a75467a4f5a742b7467596e576e5155456757385
0304f494a45484d45345554644f637743784b7248527239334a6a7546320a4533
77644b6f546969375072774f59496f614a5468706a50634a62626462664b792b6
e735170315947763977644a724d6156774a6376497077563676315570660a5674
4c61646d316c6b6c7670717336474e4d386a6e4d30587833616a6d6d6e6665573
9794758453570684d727a4c4a6c394630396349324c416f4742414e58760a7567
5658727032627354316f6b6436755361427367704a6a5065774e526433635a4b3
97a306153503144544131504e6b7065517748672f2b36665361564f487a0a7941
7844733968355272627852614e6673542b7241554837783153594456565159564
d68555262546f5a6536472f6a716e544333664e6648563178745a666f740a306c
6f4d4867776570362b53494d436f6565325a6374755a5633326c6349616639726
2484f633764416f47416551386b3853494c4e4736444f413331544535500a6d30
31414a49597737416c5233756f2f524e61432b78596450553354736b75414c787
86944522f57734c455142436a6b46576d6d4a41576e51554474626e594e0a5363
77523847324a36466e72454374627479733733574156476f6f465a6e636d504c5
0386c784c79626c534244454c79615a762f624173506c4d4f39624435630a4a2b
4e534261612b6f694c6c31776d4361354d43666c633d0a2d2d2d2d2d454e44205
0524956415445204b45592d2d2d2d2d0a
pkS: 30820152303d06092a864886f70d01010a3030a00d300b06096086480165
03040202a11a301806092a864886f70d010108300b0609608648016503040202a
2030201300382010f003082010a0282010100cb1aed6b6a95f5b1ce013a4cfcab
25b94b2e64a23034e4250a7eab43c0df3a8c12993af12b111908d4b471bec31d4
b6c9ad9cdda90612a2ee903523e6de5a224d6b02f09e5c374d0cfe01d8f529c50
0a78a2f67908fa682b5a2b430c81eaf1af72d7b5e794fc98a3139276879757ce4
53b526ef9bf6ceb99979b8423b90f4461a22af37aab0cf5733f7597abe44d31c7
32db68a181c6cbbe607d8c0e52e0655fd9996dc584eca0be87afbcd78a337d17b
1dba9e828bbd81e291317144e7ff89f55619709b096cbb9ea474cead264c2073f
e49740c01f00e109106066983d21e5f83f086e2e823c879cd43cef700d2a352a9
babd612d03cad02db134b7e225a5f0203010001
token_challenge: 0002000e6973737565722e6578616d706c65208e7acc900e
393381e8810b7c9e4a68b5163f1f880ab6688a6ffe780923609e880000
nonce:
a1aa8b371c37c9a8ddbd7342ab4f9dd5227d5b1600dca6517b60f63143cd43a3
blind: ad7a32e1ac31b91daefd7042cc23d5621ab3e870d87297bbfe1ee8a518
ffc5b84770d3b77775c485b2d219954834868842d2f11877ac4bceb5da88944cc
a043a9afa52f9c9998a5dea7ab7c1f82662d0d327e29705a269ad221ae74a7c11
72ff89c48997a9fda08886d3998bb538868396c0ace71d260cc71f768001939b2
4d80d88979f0244a3dbc004eadfac81e138d430b9fa51c1aad21b957ff96b3123
c91c2fff362a386f0f99a3f9fc906ca626fd9107648f87532b44c4fe3856ecae1
f46d8ebf5d2f46e52034478e5e883015666574dd80bd5c036c4b55ebcc8b66068
8d23944cc1932d075b559dcdc269fae3511761f71c113634e60d67accc8875fb
salt: 35c04710ce866d879447b6230ce098a49e81be5c067881cce7bd5f92c1e
5bd9b3c7d4d795cfad134fdfe916d735a624a
token_request: 0002083d6495c72529bbc4f5c0b49e94e4561baec1ca638a93
b2940ea9e37b838db7b1a91ec1f257d49b45c4f75119c2ab9eb5578541ad2b9ba
c1bd627abc709097f503f83d98fed6dbeb615c3be9bf09cbf8ea25ea8026c1b8b
a1c704ff516ed87c3d7d85342fd00111d8a80492d4b8fdbb092a282f74f13901e
5edc1b3b02cfe24c950affe6130fbb57c1482d674db3c6944812ba081c2235a16
d01eeec0932a8619d85732fc3e36179f0b50377bf9cb7a50ce3abeb3f31ed5f0f
3deec7aae7290f5397cec61318357d652b029a0fda0f100a78e36c4ef56ba3779
963e8745fdf4e347763c63d825836878e249833a0f4bd315392cc06ccca2c955e
921efbc4f941d
token_response: 8db727000018a98a2fe9fda8bbde5b8e9cedc31efbcaed695
0eb1e0f8d9af9db632def52f74f07cdab304bbde40519080dd0388fb2b8900528
b4791d2bca40aa2c2a6d1b92f010c1849bfb781cc813cc204855dd05e8a2dd31e
a5220981b8ab6b008e153083dc8f594206440d66286fea9c21b56807be8655506
ab7818bb9c8c69489dda56fe6390a5397268c8b5711f9d2df6f2584740cccf034
5fd67f93f345426f33c078a0aceb90845df9eef74f6248d06c36d19e191da325b
721ddc12ea78ed37b0c3b6170590536e3aee7eb0efc7d11a2c9d072a394f12ffa
67ecf316c49efd8f31723b11fe46740636bd89ad4f7ef96bc38b2cb4916d9dc04
ba1b2fc6
token: 0002a1aa8b371c37c9a8ddbd7342ab4f9dd5227d5b1600dca6517b60f6
3143cd43a3bb8a8cf1c59e7a251358ed76fe0ccff61044bc79dd261f16020324d
22f2d434cca572f8982a9ca248a3056186322d93ca147266121ddeb5632c07f1f
71cd27082899f4bc385b4147a650a3e7efc7d23a743cb944bb53e2ed8b88ee03a
9c0b1cf1f73fd7f15c1bd1f850a5a96a34d4ee9f295543f30ac920825e9a0ce26
e924f2c145583019dd14408c565b660e8b702fbea559908b1a8c8f9d21ef22f7c
c6a4641c57c146e6c5497d2890ca230a6749f5f83a8fdd79eba0722f10dff9e81
a2fb2d05fa4d989acc2e93f595ae69c98c3daa3b169efcdd6e59596b2f049f16b
a49528761f661032da65a3ee0fe8a22409766e90daf8c60323c16522818c49273
c795f26bbab306dc63cfc16fe1702af2464028cf819cc647d6f9b8a8f54d7d658
5a268fdb8c75f76618c64aba266836a3b2db7cdd739815a021d7ff2b36ef91f23
]]></artwork>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+29+5Ycx5Hm+X88RQ6454gcoYpxDw+0qGmIlxa6SZBDkOrT
q6Mj+hXIYaEKk1lFEqLYz7IvsC+x+2L7+zwir5UAQVK9o5kpSASqMiM83M3N
PvvMzN3j7OysuF5eX8QHi3ufrZbfWP9y8ZldrxeP1usbe+nj4rPV1fWVv7q4
V1jnVvGbB4uT1xXhyl/a57QTVjZdny3jdTp7MV35ggv5eWrnrCqLYK/jg8Lz
99Or1csHi+VluiqK5YvVg8X16mZ9XZflWNbF1/Hlt1er8GDx6PI6ri7j9dkH
arso1tf2MvzZXlxd8ryXcV28WD5Y/JHm7y/WV6vrVUxrfnr5XD/8qSjszfWz
q9WDYnFWLPizvFw/WDw5X7wfL5b5g6nfT67S//t/292nV6unDxa/W9lvor66
/tauYv7cL6/p8sfLtbu6nD64urm81jA+49k3T+1F/jQ+t8uLBwv/LK7i5ddX
3/zjarmONy/OGcZBRx6eLz6w3yzDem5t6szDi/jd4ed/m+5Y2j0Pc7tj/Y9P
9fG5v3p+3KeP7F/Ofo/QEXT8y37HVs/56OrE97mD719c3YR0sencmrmI1w8W
VVktvrj69nIdL8PiyfVex5/Yy8VHKzRoufZXh/3/8nJ5HXU5erJeXKXFw+dx
tfT2YDyr58n+5dk/+u1zbw2Gmf6DvTgcxZPr+E283P889/6frq6eXsTFxx+/
v/+M9Tf5sn/0z1ZXz5c3z8+59uAJ759LYv96dRX2HvH+Myb8+uoF83/w7f8Q
MXn77T8+i/bF8vKpW16vsxIWl1fM5fXyG0xxsfj8o/frqhr147/Gi4t/uaQb
X37+aP0gNzNDhL45y18t9N30lV09Vd+fXV+/WD94991vv/32fGkvraT0Loa/
fHr5PF5er9/9Vjd/rZvPbhDN8e/n3z27fn5RFGdnZwvrkIj19PGLZ8v1Ami5
URuL9Yvol2nJMK+/vVp8Y1c86DqP+fpZ1Gdnz+N6bZ/GxXIDXxvYKdLV6hC5
rq++jpo9QITb7bUuDTc+br6ZPmSKFhnGruPFy+IbJJuW1qEkN2uEmZ+796x8
3QLcur/AMPjv6lrzf6r5Ytf8jbtY+ouXix9pPV+mxs8nKT1fhnARi+It4WNu
/HoJBiCzeDjSjQz0A5ZPF+xihmZgOa7j6hs9bYLJ5V9sbuZ59M/s5XL9/Jzm
F4g10on7uUvb9uzFxdW364W/WGqGGdjmCQu/evni+urpyr54tvTFvkB1RVxI
MHrmVj6X07f8+nLxTCDnIgbqV9FKud1LuvwUVb0s1FtuWV5OXbHr68X33/+X
h5+///tHX3z4/hdffv7he4/OPji/5X/syj/DUPz1zSr+8MP5sWohFb9aOk3P
sxPqs7ilPu5meXGN8hQ8/fdffPHZe1jQWFUlbS8evUpV97Rtud7p1d7MF6/X
q4Wza+RxNY3+Co34Znl1Q1P4lnC1EjQ/X6Sby6wKiwRg0b//9Olnn380SWWF
VHxaPT375urFKv3ww6SnB516nTYWJ7TxsEt8SoOfP3m4kOVbSXuxxgk+j+rI
7z5+9PgDvjzqzGptz/KNZ9ub1qfm6Apxojlg3zdZa470fH+K76Mh/uIm0PHC
P7taZsPbWNxl9MKJ1cs8rSG+uLh6mZ+QjfbFC0aWjWAzi34xN5FRRDrBQySS
SfM3xnS+yP0Vm8nISgP8mjuLgNDY77/f19M8wrcWX8TV8+Xl1cXV05eT7Uqm
4j3rxb1Pvnzyxb3707+Lx5/mnz//8L9++ejzDz/Qz09+//Djj7c/FPMVT37/
6Zcff7D7aXfn+59+8smHjz+YbubTxcFHxb1PHv7bvUkl7n362RePPn388ON7
k6ntz4NEiK07VFTEDAiRjdp1sTGiPNjfvf/Z//N/VS2D/k+zc/nhh/kXUw0t
v3z7LF5uFBCFm34VAhTMQbTZyIEYvNeL5bW9gNPZ9WL9TO5HrArpZXmlK8FQ
1lBEuc7du5FKXuOwb54+u7q5PhyA8BMXrKmD0ABul/i3l5N6rG4uJwh4dAsC
vl1eP6O3+Rup39UG0vGDX+whnOcaZHOBya6mjkhrUIH4/EVWirfXUfd8//2T
ONlpfV7Lif2nh19+8fsn7//+w09ehWEg9NlkTT/88M45o5j6wigWGcX9zpVN
QL/p19U83vXupsVnkwn/S4RESI57Jv22kGPjJa7j2d5XL+xy9c40LPeSUWxk
RYMapgAiOxNmNSPIS/02dWP/2TOk7R6+h3H/UU8/ghMbwlLiR8Veqslp3icd
uvfpavl0eXlvsoXcwD1pX4hpeZn1uzhhzF9eXoArk1P7Frq/9QLh/pEJ4Uyv
ND9b5ZqJi9Bj8cXHTyBn13aL4Xuq0mRF4YqqkccxbdvL43xytYrCmfuTwVxd
KkS6nmyBvsL3QJSvkRkiBlriKkPPJrZbfPqNtCd+OxnULe+3P+7jgTx3V+Fl
lpynD+rdPiafF7Peof8+4sCnyXj/Gd2MlyJqly9u+DaPUo3smcmWur2NqLeW
cX+xs5oKK8gzxOyd9tvrfTOlgziWF1eXYasVeOaLG6T+ykfUMrTFSakUO84A
Jm0MLPdnUsn1hI8QWfWCuIShRvQ606HZqVo53zNw6jIUW2XQ/BE8ZIKUuCR3
9fP43+np9U5U0wPz8+YLNDYkkd3+zjK2bmnqy+yWJhx1EehEF/793/99Ye36
m6fFr8/mP79e7P058en2I324+77462KyncVf9xv466a7f9376OE1IYtQ8q/8
bzbjv+Ye/PpkD359oge/3uvB9EExNX7qz6lP9z/763Tvb3Kbi43ET8jjlffS
hWMVPzv77Rs+93Sff/Pee7OkJkR4773fvvG9v+C5u/k91L/5w9++vs/H986q
udWSzVUbIf96Msc3lvPPHS+KXnz/YPFWWj4921p0Dm/fu7d1+Rs4vPfDBIin
MQubfgXmHPAg4WWxxcuZHGyN8RvhMaT28mzvo4kUvYirs6vJlLjEr65gANPv
5z8dp+UIhECokBj9zGVeFnvk9zke6WK/hZ3XaXNe4dDdZVAM8douLxSCF3ZP
RfU0aNdaoaBktPZXL+ImTr/V7X9YiBC99mmTd98j1taJ1gl395+LdAtJ9/mL
i6gxTeOI1j/bPHwVL+I3Ngd8hwO/zQ/2QsIT2YZboziI7YpTsZ28zIbTJHBX
3usNw73iTcO9xZuFe8Xrwj11M3/82l5uSVnxHxgAvrV4/+oSW71ZTRP8/Vvr
eH3zArvcuNgcGm3SDpqoF3ZlnxOR8J2Uxu/f/6AoqvONp9kA2peffywCPXnl
1e7DfPvTeBl1r1y1V9Q4p2/OhUIfcUH8zkrb7u9FBrr3+fLps2ssXZdtUmPL
yR3PdygJ9+78uPOiPr9Ny2dyos5dQAekebeumQa5PzN64kYnZ6CY79qTzAxD
Vw7zlbVPjHs7gm+WFtoRlpC26yvC5Cv33/jpfvHtsyWmtFQC6Z+ffPp4/lwK
k8O6uht33KmV4nz77ArUn0lWRoWc8NHNxY563bq30b2bge26PWEOM3odt5ZI
Z3Jrc1f0jAMI2w7ibHpeVqu/Lj5axouweEzDB67iD7rmpGt57Z+/Fn99cHbq
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
kaQthdnKYcthTn2ZZfPHx+tfP17vs5zpmT+X5uw/+rZ733y7dfA/7tKP5zT7
9P0H5WFsH/V2Hs878/O2RhcmTdiQrEzAcjbxKvHUORjfVN+PujTHMUeh+9uT
+Mo/vXN/cfqr6k/vbAnIPMu3SMBiawDZu2vJ1o08SoiLGjiaVorMLqmYV8Cu
91zRdPMeN5ivnZz/OoofvN7fTy3c23jzuQfv6fE/xXluPPKPe8/pyh9zn5ur
Nv7zo4labRY83WJchy7zIJh6hmlezKC0wxtFgMDe+iYvYEo3F/cnOJ8mcl3s
C3OmjwddO9/X9Nvrjc8P9XMf0LdGsEc6cz5dF07wvuvJtqIWl5luTwndN4sY
9xF+79K56jRJ5DUILOamXAEzjvO4FR3PMxL3A+QZSV8RhZ/4c0sWb37rEWa/
+Y1Zznuh/GYgPzWa3/jhIutQDIcTMgH6Jue7xfT/f6LcnBP4Y1P/aT+wPU4O
HH+/z+qOvzvQhT8+/nrnMPYcRf79fEoezUWNud41oe63Kj9m6n8UN23yg7sM
ye05ecMkibBiEvRU3ZsL9cUfthtfNhOhhy6VRcled/omi3abiXxVea4QgT0u
kM2avLlj4kqbVXn35wVSz1/Y1eaKqV5a2Kfi4dd7Nx3a3ZSN//mcaJrVgzY3
GTrVKCbfNs3cTuv2jGlvUm99+prs236Lm7zbia68lpq9suvvFDnuQQCnrlm8
9978+IOP3zmKxQ4X0e5qodOi8G3hKHvW01XRzCA2q/UOCqTFtkB6/7BCujhd
Ic1UcB2nBRObfY2qoaxiTjxssy3bRe0E6Pv7FBdzFH60OndTNM1xkNVOzUOK
HcMuywtrKt7e6g2fHxQgtD0Pj7k5D0PbmO7tYehRZnnKU+9tUZtlsRXSQWLo
/lSrm0jXbYZ7EG1u0863iKJ6vSHuS0HQthI/R6PHhbLNIviv9mO3r3brwtbP
tNSqYHrEfTc7sfeCW61VkGu+jN/Oga4Wys+bcYmfwszq8tQVx0FxjiW2a9Ne
s15hsxj95HKFvSXp81L9TTVrt1Lfbtbpv3KZ/lEaKy9w32zrRU3z8sATa+Ln
8v4OJw/b26xrz7h+qdozpniTC1w5fv3RXinruF3mV9DS7548eXiGAuDxzj57
8uTsA5WytZxoTcvZOm9f9H9++PmnhxcWu+X420dtdzIcpfY2Tr9TL/cHNC0N
OSGU28MIy5TyyvvNMoA9MRXHYp/yvbOuXd1cT4sXpmUUrzgXQQcBXL7UBoZt
GHCrhjyXOp9Hq4YuX24K9SpSr6FQWiU+HSaw28pbHIJUXlClMs2cc9w08cyu
95+5s/opLGEMRfxOkYNWLlxdrWDBM6tdTWvV1uvtgpVTRfa95UKbVQPbTe8X
0a4u9zsz7VeebDnvdt541XCzemWhg9n8XXyZFxvkzS55vvaOdnijWd5oM4Tw
Uqs7N4BISLhb9/JGK4nmlrRetdg3mp++Wgc4n3ZNAevFmzii1y/VKbZ7YE5X
CxZ3K3b+Z1qx8wSj3KzYub+3mOa1C3do7Lbwf/bCHVqbV3XcLdx57cKd19rd
/87rd167cGUHWD9t3cp0z5ssW/lJizWKTbF+b+vgT1mtcciL//arNOq/u1Ua
UxFlTivR529ywDgtzJBTwwNGEDI+CtN5JQerNfbik6PLspgPV2Gsj3bJ7W+9
nUozO/aXb9//vj78/jDoe9XKjWn+cmLgeNoOV21sNvIUP3fVxuJg1UaxDyj/
gxZt1Lt01u+2ZPztumzNmVte/7I1G1//b7Nm47VO4acs3aC5afHGz1i68fUs
kw38HSzZOKFTt2sgb74QovjRhRCblNuPLoTQKr2/zUKIB3cLIf5WCyE2fvd/
xXUQIs4fHGyg2Q/P/97WPmzK+3PmfnmRk1Hf2tVE1t9sQcFme96PLSiY/j54
7l6w/9OXFSxeXdSaiAQgi0Jnz/MEvJ3Snq+S/fGqT93x6lrRjhQ0xymjL7ZZ
f9212WqeWTEcbv18eT1p355QN55kq9GbhSbHKwNOe9+tb9SIjzzjrTr/XY36
b1yjPmJYf4sS9WHtdiPIHyvdKgGwqdZm1jyR9Z1q7BHsn1QY3Sl7e6TsP7s4
ehT37seWJyoYf3uyeVc6/Sml02fRfz1ZBV09UXSbaHP2zsXu6JvtSaUrHcV8
OW+h3+Vqp9j0dvl1z11KaNsBfsWEKumvksAfPvz80Uf/9tUrVdWcV/PBkjrH
oKwGrbabHjXX0jdM8vd2/Wz7jPuLT/7po2rCsKPreCoRwPrrYlN4u9pzD29z
2zvzwccLKVxOv9gLpa4z6Ly9Bn3eOd8vdf1dFGs3FdZbos0I8prFFq8cw+tu
+sn12h2+nox+/mbl3DmDXmTYfLNSbj49ZZv8zofQKp22TYELxmTOm2MwpZ8f
PfrsyaIy/ZmOhv0vHzx58t4Hnz46r8rzvqzNu48fPfniXJec50vmpYNTvbiY
6ru3i8aLE0Xj1xRr+TD3d1cCfl25tthLVm5STDOh0WXvzPvNF3ufTVDwwYef
bw7ZKZ7c5BNAphlgAh5dpqvF208++5dH72zPmrGrVYYeOjSFdPp6820e9GYn
+U5RF59CtOdTDoauVz5mQtG986dp6Zns2148VVD27HlWhmyYE7HOyYLNr9OT
cpi/X5fLX83I9WwfLZDK+sov82xL44pdGSlLP3O+bZptGtj+EV057bbJXc85
oc2caqyCm8UpuNkk0+d7XJTsBLzcm8eg860moqnjRnah7Vp+RN5nHs6+mJUx
ePjk8Xm1mHbnvzOrzMaDLubZ3Y+G/w+mTgd+f708d/nYy+++C4uz1eLsBT9f
vcBQ1hdI6bJi2DoCMdw8f7E4m/b/S0kyVpQPwnvlYvHs4r12cfHeomlMJg0P
Fk8+/K9ffvj4/Q/zVS1XVfmqWlct+urUVT1X1XtXLUaV454/WHz6u3/+8P0v
9sHowWrN/NnP1vkw/2o4urM91Ytq5Kpm76qqma8SSVv8cVHq1JLFoq64rt2/
7lRv64arujfs7fqZxRvptqY96kTdH3aimjrR9EedqNsTnWjMT+jE86ep0k3t
eHTTyfF1kkL/k8fX10fjWxwJuZ7G17dH42PgU/OPHn/x4T99+Pl+802Zbxm2
WpR1rR42t/zu0ReLJ198/ujxP/1PvbgE/nOTs085QgszcqyPz3cE2aDI8+m9
OLflVFsRlG2p2OGBvwfnIU0L6G4tnpxT5ifWXRwk3Pfjh4cXF1rKcqrPx0eJ
bh578Ijt6aJ4nYv1VQ4MX26uPzghH2A904lQ52IY+4/J58RlH1+41ZXOlNkc
aj85i73e+bi6zDK300lVm+SWrps+mJMZhLtTrmJKO8fVahfyP9w7qn83I7eO
1D5eFrBdWeBvCeqwjJF7c7Cg5bDl+3tLdC5U81Ng/yKutqHvVXGLie9O/ZlW
OOboH0fycvH2xAD2P8qL0I4LEf/l/U8fP4HggA3/lg8q2T/cHW0+22thc7T1
3I1p4Upm53przPYY03wu6ua401kUs1/bnQp7fBrstATr4eOHpy1ks6xqmzE8
ErWeqbunOGrvpTDzmWfH50L9KtfNv39rdy7UsSnevNhlNO8dvWXm3uLz6ewo
7c0/eDeNXiEwJ1qKXR50Kijlk/b02Cc3KS2/ywdQ53LrYj4R6QKh8uHn23PQ
/ppfoXOzzh9O1rB/Rs/xeXsnj9vb/3D78+mD+Xan3R2LS+fvffjFR/zzx4NZ
+xOfaBGRvYz5HO3HOm92OotOZ2flo7Mk4MPj6F45J4di1nF026A45w+2Uv9y
npzv39qrLL92Bnet7E3e/DKSU8esd3lb0TZptptLWtYGtKxoB52bUPDWyvDd
bomDrv7n6ZDFB/P6cn5/nBdQnG6Fr6cnPdlmHBcPXxFiz29u2E/dbG7frVJ4
o3aqE+2cWA/5YPF4+8Xik3htEbudP5xDvcNPH3/9ABqnH5bhwaKp+Wmr8w9u
r4TkOuIgaIa065bYT+aUtuHpa2Reb2V+qom/c4n/20+XOEHia0S+f7jyTuKK
jN5k4acOEnqDpZ+7dZ55Hdim5JPN/JNcLNSUbjF/ftPN5kCYlJnRoTXeelmF
3jahRZIby12ujt6xsCtKzkWpKed1dMzcg8WbHFZYHJ5D/+BNSprF0fnzP3LT
nHyfUgdZBsvtGYWZ4u4VWZfrWwULhOxm37mBrDc6hXHv1MYim1le3lUUD/ZT
/IVyCNcH355uryg+n3KWYS/Oztc/fvdhUXyalzXZi1tfZnv/cHPE6qHLz1fc
I7q1mojiFQQ7XzUdATmd0q3clE61JwheWbe8eMUtuV/ZwNY63+5AFaeB3tJQ
AvqdaOb08ZQdySt/N/LcNf/Ryj7NjurgQJzTXXm4fTHMPgPI3/8mQNVfWC0T
f+9e3uTir+/9Fov8Tbj+7Sf2KWY3HXP79vqdB795lw9/E8JvaZWfw+a6D3Tq
7Hzg5sUSmqgZXe/K9rnnr7r5o+VFXMTv4IhaSvy6x3yibl5fKVeje7LuKBv1
ynveDRe/ZSLQiJnj5rcH6j05q+ng84kR+ol1pptVTrkdi0gK8DAvAFj/avFw
ujduSeWkEblyeSMMybdob8enj6W4Wq03r1HKp1RtrpjmZX6P5xs8ZOZ6fsv1
8l2PPnzyT+JLt2bwhxPWehpRfraxnl558Pdhq9MVZ4dX3FnvnfX+r2O9s2v/
m5nvXGC/s987+72z319uv2dnZwtn/ddKTD30SmVcxPA0J7XWEx2f1hTuXvqx
zTx8O50Sv/w6v5TS7m6ealXx4kW6uShSjEEPmLaNLNf+Jm/Fmneq/S5e/jdL
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
JAEA

-->

</rfc>
