<?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.25 (Ruby 3.1.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-amjad-cfrg-partially-blind-rsa-00" category="info" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title abbrev="Partially Blind RSA Signatures">Partially Blind RSA Signatures</title>
    <seriesInfo name="Internet-Draft" value="draft-amjad-cfrg-partially-blind-rsa-00"/>
    <author initials="G. A." surname="Amjad" fullname="Ghous A. Amjad">
      <organization>Google</organization>
      <address>
        <email>ghous_amjad@alumni.brown.edu</email>
      </address>
    </author>
    <author initials="S." surname="Hendrickson" fullname="Scott Hendrickson">
      <organization>Google</organization>
      <address>
        <email>scott@shendrickson.com</email>
      </address>
    </author>
    <author initials="C. A." surname="Wood" fullname="Christopher A. Wood">
      <organization>Cloudflare</organization>
      <address>
        <email>caw@heapingbits.net</email>
      </address>
    </author>
    <author initials="K. W. L." surname="Yeo" fullname="Kevin W. L. Yeo">
      <organization>Google</organization>
      <address>
        <email>kwlyeo@cs.columbia.edu</email>
      </address>
    </author>
    <date year="2023" month="March" day="13"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document specifies a blind RSA signature protocol that supports public metadata.
It is an extension to the RSABSSA protocol recently specified by the CFRG.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Crypto Forum Research Group mailing list (cfrg@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/search/?email_list=cfrg"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/chris-wood/draft-amjad-cfrg-partially-blind-rsa"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t><xref target="RSABSSA"/> specifies the RSA blind
signature protocol, denoted RSABSSA. This is a two-party protocol between
client and server (or signer) where they interact to compute
<tt>sig = Sign(skS, input_msg)</tt>, where <tt>input_msg = Prepare(msg)</tt> is a prepared
version of the private message <tt>msg</tt> provided by the client, and <tt>skS</tt> is
the signing key provided by the server. Upon completion of this protocol,
the server learns nothing, whereas the client learns <tt>sig</tt>. In particular,
this means the server learns nothing of <tt>msg</tt> or <tt>input_msg</tt> and the client
learns nothing of <tt>skS</tt>.</t>
      <t>RSABSSA has a variety of applications, with <xref target="PRIVACY-PASS"/>
being a canonical example. While useful, this protocol is limited in that
it does not easily accommodate public metadata to be associated with
a (message, signature) pair. In this context, public metadata is information
that's publicly known to both client and server at the time of computation.
This has useful applications in practice. For example, metadata might be used
to encode expiration information for a (message, signature) pair. In practice,
metadata can be encoded using signing key pairs, e.g., by associating one
metadata value with one key pair, but this does not scale well for applications
that have large or arbitrary amounts of metadata.</t>
      <t>This document specifies a variant of RSABSSA that supports public metadata, denoted
RSAPBSSA (RSA Partially Blind Signature with Appendix). Similar to RSABSSA in
<xref target="RSABSSA"/>, RSAPBSSSA is defined in such a way that the resulting (unblinded)
signature can be verified with a standard RSA-PSS library.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
    </section>
    <section anchor="notation">
      <name>Notation</name>
      <t>The following terms are used throughout this document to describe the protocol operations
in this document:</t>
      <ul spacing="normal">
        <li>bytes_to_int and int_to_bytes: Convert a byte string to and from a non-negative integer.
bytes_to_int and int_to_bytes are implemented as OS2IP and I2OSP as described in
<xref target="RFC8017"/>, respectively. Note that these functions operate on byte strings
in big-endian byte order.</li>
        <li>random_integer_uniform(M, N): Generate a random, uniformly distributed integer R
between M inclusive and N exclusive, i.e., M &lt;= R &lt; N.</li>
        <li>bit_len(n): Compute the minimum number of bits needed to represent the positive integer n.</li>
        <li>inverse_mod(x, n): Compute the multiplicative inverse of x mod n or fail if x and n are not co-prime.</li>
        <li>is_coprime(x, n): Return true if x and n are co-prime, and false otherwise.</li>
        <li>len(s): The length of a byte string, in bytes.</li>
        <li>random(n): Generate n random bytes using a cryptographically-secure random number generator.</li>
        <li>concat(x0, ..., xN): Concatenation of byte strings. For example,
concat(0x01, 0x0203, 0x040506) = 0x010203040506.</li>
        <li>slice(x, i, j): Return bytes in the byte string <tt>x</tt> starting from offset <tt>i</tt> and ending at
offset <tt>j</tt>, inclusive. For example, slice(0x010203040506, 1, 5) = 0x0203040506.</li>
        <li>random_prime(b): Return a random prime number of length b bits.</li>
        <li>is_prime(p): Return true if the input integer p is prime, and false otherwise.</li>
      </ul>
    </section>
    <section anchor="core-protocol">
      <name>RSAPBSSA Protocol</name>
      <t>The RSAPBSSA protocol consists of two helper functions -- AugmentPrivateKey and AugmentPublicKey -- and
four core functions -- Prepare, Blind, BlindSign, and Finalize -- and requires one
round of interaction between client and server. Let <tt>msg</tt> be the client's private input
message, <tt>info</tt> be the public metadata shared between client and server, and <tt>(skS, pkS)</tt>
be the server's private and public key pair. The <bcp14>REQUIRED</bcp14> key generation procedure for RSAPBSSA
is specified in <xref target="key-generation"/>.</t>
      <t>The protocol begins by the client preparing the message to be signed by computing:</t>
      <artwork><![CDATA[
input_msg = Prepare(msg)
]]></artwork>
      <t>The client then initiates the blind signature protocol by computing:</t>
      <artwork><![CDATA[
blinded_msg, inv = Blind(pkS, input_msg, info)
]]></artwork>
      <t>The client then sends <tt>blinded_msg</tt> to the server, which then processes the message
by computing:</t>
      <artwork><![CDATA[
blind_sig = BlindSign(skS, blinded_msg, info)
]]></artwork>
      <t>The server then sends <tt>blind_sig</tt> to the client, which then finalizes the protocol by computing:</t>
      <artwork><![CDATA[
sig = Finalize(pkS, input_msg, info, blind_sig, inv)
]]></artwork>
      <t>The output of the protocol is <tt>input_msg</tt> and <tt>sig</tt>. Upon completion, correctness requires that
clients can verify signature <tt>sig</tt> over the prepared message <tt>input_msg</tt> and metadata <tt>metadata</tt>
using the server public key <tt>pkS</tt> by invoking the RSASSA-PSS-VERIFY routine defined in
<xref section="8.1.2" sectionFormat="of" target="RFC8017"/>. The Finalize function performs this check before returning the signature.
See <xref target="verification"/> for more details about verifying signatures produced through this protocol.</t>
      <t>In pictures, the protocol runs as follows:</t>
      <artwork><![CDATA[
   Client(pkS, msg, metadata)          Server(skS, pkS, metadata)
  -------------------------------------------------------
  input_msg = Prepare(msg)
  blinded_msg, inv = Blind(pkS, input_msg, metadata)

                        blinded_msg
                        ---------->

            blind_sig = BlindSign(skS, blinded_msg, metadata)

                         blind_sig
                        <----------

  sig = Finalize(pkS, input_msg, metadata, blind_sig, inv)
]]></artwork>
      <t>In the remainder of this section, we specify the Blind, BlindSign, and Finalize
functions that are used in this protocol. The Prepare function is as specified in
<xref section="4.1" sectionFormat="of" target="RSABSSA"/>.</t>
      <section anchor="key-generation">
        <name>Key Generation</name>
        <t>The protocol in this document requires signing key pairs to be generated such that
they satisfy a particular criteria. In particular, each RSA modulus for a key pair
<bcp14>MUST</bcp14> be the product of two safe primes p and q. A safe prime p is a prime number
such that p = 2q + 1, where q is also a prime number.</t>
        <t>A signing key pair is a tuple (skS, pkS), where each element is as follows:</t>
        <ul spacing="normal">
          <li>skS = (p, q, phi, d), where phi = (p - 1)(q - 1)</li>
          <li>pkS = (n, e), where n = p * q and d * e == 1 mod phi.</li>
        </ul>
        <t>The procedure for generating a key pair satisfying this requirement is below.</t>
        <artwork><![CDATA[
KeyGen(bits)

Inputs:
- bits, length in bits of the RSA modulus, a multiple of 2

Outputs:
- (skS, pkS), a signing key pair

Steps:
1. p = SafePrime(bits / 2)
2. q = SafePrime(bits / 2)
3. while p == q, go to step 2.
4. phi = (p - 1) * (q - 1)
5. e = 65537
6. d = inverse_mod(e, phi)
7. skS = (p, q, phi, d)
8. pkS = (p * q, e)
9. output (skS, pkS)
]]></artwork>
        <t>The procedure for generating a safe prime, denoted SafePrime, is below.</t>
        <artwork><![CDATA[
SafePrime(bits)

Inputs:
- bits, length in bits of the safe prime

Outputs:
- p, a safe prime integer

Steps:
1. q = random_prime(bits - 1)
2. p = (2 * q) + 1
3. if is_prime(p) is True, output p, else go to step 1.
]]></artwork>
      </section>
      <section anchor="blind">
        <name>Blind</name>
        <t>The Blind function encodes an input message with the corresponding metadata value and
blinds it with the server's public key. It outputs the blinded message to be sent to
the server, encoded as a byte string, and the corresponding inverse, an integer.
RSAVP1 and EMSA-PSS-ENCODE are as defined in Sections <xref target="RFC8017" section="5.2.2" sectionFormat="bare"/> and <xref target="RFC8017" section="9.1.1" sectionFormat="bare"/> of <xref target="RFC8017"/>,
respectively.</t>
        <t>If this function fails with an "blinding error" error, implementations <bcp14>SHOULD</bcp14> retry
the function again. The probability of one or more such errors in sequence is negligible.
This function can also fail with an "invalid input" error, which indicates that one of
the inputs (likely the public key) was invalid. Implementations <bcp14>SHOULD</bcp14> update the public
key before calling this function again. See <xref target="errors"/> for more information about
dealing with such errors.</t>
        <t>Note that this function invokes RSAVP1, which is defined to throw an optional error
for invalid inputs. However, this error cannot occur based on how RSAVP1 is invoked,
so this error is not included in the list of errors for Blind.</t>
        <artwork><![CDATA[
Blind(pkS, msg, metadata)

Parameters:
- kLen, the length in bytes of the RSA modulus n
- Hash, the hash function used to hash the message
- MGF, the mask generation function
- sLen, the length in bytes of the salt

Inputs:
- pkS, server public key (n, e)
- msg, message to be signed, a byte string
- metadata, public metadata, a byte string

Outputs:
- blinded_msg, a byte string of length kLen
- inv, an integer

Errors:
- "message too long": Raised when the input message is too long (raised by EMSA-PSS-ENCODE).
- "encoding error": Raised when the input message fails encoding (raised by EMSA-PSS-ENCODE).
- "blinding error": Raised when the inverse of r cannot be found.
- "invalid input": Raised when the message is not co-prime with n.

Steps:
1. msg_prime = concat("msg", int_to_bytes(len(metadata), 4), metadata, msg)
2. encoded_msg = EMSA-PSS-ENCODE(msg_prime, bit_len(n))
   with Hash, MGF, and sLen as defined in the parameters
3. If EMSA-PSS-ENCODE raises an error, raise the error and stop
4. m = bytes_to_int(encoded_msg)
5. c = is_coprime(m, n)
6. If c is false, raise an "invalid input" error
   and stop
7. r = random_integer_uniform(1, n)
8. inv = inverse_mod(r, n)
9. If inverse_mod fails, raise an "blinding error" error
   and stop
10. pkM = AugmentPublicKey(pkS, metadata)
11. x = RSAVP1(pkM, r)
12. z = m * x mod n
13. blinded_msg = int_to_bytes(z, kLen)
14. output blinded_msg, inv
]]></artwork>
        <t>The blinding factor r <bcp14>MUST</bcp14> be randomly chosen from a uniform distribution.
This is typically done via rejection sampling. The function AugmentPublicKey
is defined in <xref target="augment-public-key"/>.</t>
      </section>
      <section anchor="blindsign">
        <name>BlindSign</name>
        <t>BlindSign performs the RSA private key operation on the client's
blinded message input and returns the output encoded as a byte string.
RSASP1 is as defined in <xref section="5.2.1" sectionFormat="of" target="RFC8017"/>.</t>
        <artwork><![CDATA[
BlindSign(skS, blinded_msg, metadata)

Parameters:
- kLen, the length in bytes of the RSA modulus n

Inputs:
- skS, server private key
- blinded_msg, encoded and blinded message to be signed, a
  byte string
- metadata, public metadata, a byte string

Outputs:
- blind_sig, a byte string of length kLen

Errors:
- "signing failure": Raised when the signing operation fails
- "message representative out of range": Raised when the message representative
  to sign is not an integer between 0 and n - 1 (raised by RSASP1)

Steps:
1. m = bytes_to_int(blinded_msg)
2. skM = AugmentPrivateKey(skS, pkS, metadata)
3. pkM = AugmentPublicKey(pkS, metadata)
4. s = RSASP1(skM, m)
5. m' = RSAVP1(pkM, s)
6. If m != m', raise "signing failure" and stop
7. blind_sig = int_to_bytes(s, kLen)
8. output blind_sig
]]></artwork>
      </section>
      <section anchor="finalize">
        <name>Finalize</name>
        <t>Finalize validates the server's response, unblinds the message
to produce a signature, verifies it for correctness, and outputs the signature
upon success. Note that this function will internally hash the input message
as is done in Blind.</t>
        <artwork><![CDATA[
Finalize(pkS, msg, metadata, blind_sig, inv)

Parameters:
- kLen, the length in bytes of the RSA modulus n
- Hash, the hash function used to hash the message
- MGF, the mask generation function
- sLen, the length in bytes of the salt

Inputs:
- pkS, server public key (n, e)
- msg, message to be signed, a byte string
- metadata, public metadata, a byte string
- blind_sig, signed and blinded element, a byte string of
  length kLen
- inv, inverse of the blind, an integer

Outputs:
- sig, a byte string of length kLen

Errors:
- "invalid signature": Raised when the signature is invalid
- "unexpected input size": Raised when a byte string input doesn't
  have the expected length.

Steps:
1. If len(blind_sig) != kLen, raise "unexpected input size" and stop
2. z = bytes_to_int(blind_sig)
3. s = z * inv mod n
4. sig = int_to_bytes(s, kLen)
5. msg_prime = concat("msg", int_to_bytes(len(metadata), 4), metadata, msg)
6. pkM = AugmentPublicKey(pkS, metadata)
7. result = RSASSA-PSS-VERIFY(pkM, msg_prime, sig) with
   Hash, MGF, and sLen as defined in the parameters
8. If result = "valid signature", output sig, else
   raise "invalid signature" and stop
]]></artwork>
        <t>Note that <tt>pkM</tt> can be computed once during <tt>Blind</tt> and then passed to
<tt>Finalize</tt> directly, rather than being recomputed again.</t>
      </section>
      <section anchor="verification">
        <name>Verification</name>
        <t>As described in <xref target="core-protocol"/>, the output of the protocol is the prepared
message <tt>input_msg</tt> and the signature <tt>sig</tt>. The message that applications
consume is <tt>msg</tt>, from which <tt>input_msg</tt> is derived, along with metadata <tt>metadata</tt>.
Clients verify the signature over <tt>msg</tt> and <tt>info</tt> using the server's public
key <tt>pkS</tt> as follows:</t>
        <ol spacing="normal" type="1"><li>Compute <tt>pkM = AugmentPublicKey(pkS, info)</tt>.</li>
          <li>Compute <tt>msg_prime = concat("msg", int_to_bytes(len(metadata), 4), metadata, msg)</tt>.</li>
          <li>Invoke and output the result of RSASSA-PSS-VERIFY (<xref section="8.1.2" sectionFormat="of" target="RFC8017"/>)
with <tt>(n, e)</tt> as <tt>pkM</tt>, M as <tt>msg_prime</tt>, and <tt>S</tt> as <tt>sig</tt>.</li>
        </ol>
        <t>Verification and the message that applications consume therefore depends on
which preparation function is used. In particular, if the PrepareIdentity
function is used, then the application message is <tt>input_msg</tt>.
In contrast, if the PrepareRandomize function is used, then the application
message is <tt>slice(input_msg, 32, len(input_msg))</tt>, i.e., the prepared message
with the random prefix removed.</t>
      </section>
      <section anchor="augment-public-key">
        <name>Public Key Augmentation</name>
        <t>The public key augmentation function (AugmentPublicKey) derives a per-metadata public
key that is used in the core protocol. The hash function used for HKDF is that which
is associated with the RSAPBSSA instance and denoted by the <tt>Hash</tt> parameter. Note that
the input to HKDF is expanded to account for bias in the output distribution.</t>
        <artwork><![CDATA[
AugmentPublicKey(pkS, metadata)

Parameters:
- kLen, the length in bytes of the RSA modulus n
- Hash, the hash function used to hash the message

Inputs:
- pkS, server public key (n, e)
- metadata, public metadata, a byte string

Outputs:
- pkM, augmented server public key (n, e')

Steps:
1. hkdf_input = concat("key", metadata, 0x00)
2. hkdf_salt = int_to_bytes(n, kLen)
3. lambda_len = kLen / 2
4. hkdf_len = lambda_len + 16
5. expanded_bytes = HKDF(IKM=hkdf_input, salt=hkdf_salt, info="PBRSA", L=hkdf_len)
6. expanded_bytes[0] &= 0x3F // Clear two-most top bits
7. expanded_bytes[lambda_len-1] |= 0x01 // Set bottom-most bit
8. e' = bytes_to_int(slice(expanded_bytes, lambda_len))
9. output pkM = (n, e * e')
]]></artwork>
      </section>
      <section anchor="augment-private-key">
        <name>Private Key Augmentation</name>
        <t>The public key augmentation function (AugmentPrivateKey) derives a per-metadata private
signing key that is used by the server in the core protocol.</t>
        <artwork><![CDATA[
AugmentPrivateKey(skS, pkS, metadata)

Parameters:
- kLen, the length in bytes of the RSA modulus n
- Hash, the hash function used to hash the message

Inputs:
- skS, server private key (p, q, phi, d)
- pkS, server public key (n, e)
- metadata, public metadata, a byte string

Outputs:
- skM, augmented server private key (p, q, phi, d')

Steps:
1. (n, e') = AugmentPublicKey(pkS, metadata)
2. d' = inverse_mod(e', phi)
3. output pkM = (p, q, phi, d')
]]></artwork>
      </section>
    </section>
    <section anchor="implementation-and-usage-considerations">
      <name>Implementation and Usage Considerations</name>
      <t>This section documents considerations for interfaces to implementations of the protocol
in this document. This includes error handling and API considerations.</t>
      <section anchor="errors">
        <name>Errors</name>
        <t>The high-level functions specified in <xref target="core-protocol"/> are all fallible. The explicit errors
generated throughout this specification, along with the conditions that lead to each error,
are listed in the definitions for Blind, BlindSign, and Finalize.
These errors are meant as a guide for implementors. They are not an exhaustive list of all
the errors an implementation might emit. For example, implementations might run out of memory.</t>
        <t>Moreover, implementations can handle errors as needed or desired. Where applicable, this document
provides guidance for how to deal with explicit errors that are generated in the protocol. For
example, "blinding error" is generated in Blind when the client produces a prime factor of
the server's public key. <xref target="blind"/> indicates that implementations <bcp14>SHOULD</bcp14>
retry the Blind function when this error occurs, but an implementation could also handle this
exceptional event differently, e.g., by informing the server that the key has been factored.</t>
      </section>
      <section anchor="cert-oid">
        <name>Signing Key Generation and Usage</name>
        <t>The <bcp14>RECOMMENDED</bcp14> method for generating the server signing key pair is as specified in FIPS 186-4
<xref target="DSS"/>.</t>
        <t>A server signing key <bcp14>MUST NOT</bcp14> be reused for any other protocol beyond RSAPBSSA. Moreover, a
server signing key <bcp14>MUST NOT</bcp14> be reused for different RSAPBSSA encoding options. That is,
if a server supports two different encoding options, then it <bcp14>MUST</bcp14> have a distinct key
pair for each option.</t>
        <t>If the server public key is carried in an X.509 certificate, it <bcp14>MUST</bcp14> use the RSASSA-PSS
OID <xref target="RFC5756"/>. It <bcp14>MUST NOT</bcp14> use the rsaEncryption OID <xref target="RFC5280"/>.</t>
      </section>
    </section>
    <section anchor="rsapbssa">
      <name>RSAPBSSA Variants</name>
      <t>In this section, we define named variants of RSAPBSSA. These variants consider
different sets of RSASSA-PSS parameters as defined in <xref section="9.1.1" sectionFormat="of" target="RFC8017"/> and explicitly
specified in <xref section="5" sectionFormat="of" target="RSABSSA"/>. For algorithms unique
to RSAPBSSA, the choice of hash function specifies the instantation of HKDF in AugmentPublicKey in
<xref target="augment-public-key"/>. The different types of Prepare functions are specified in
<xref section="4.1" sectionFormat="of" target="RSABSSA"/>.</t>
      <ol spacing="normal" type="1"><li>RSAPBSSA-SHA384-PSS-Randomized: This named variant uses SHA-384 as the hash function,
MGF1 with SHA-384 as the PSS mask generation function, a 48-byte salt length, and uses
the randomized preparation function (PrepareRandomize).</li>
        <li>RSAPBSSA-SHA384-PSSZERO-Randomized: This named variant uses SHA-384 as the hash
function, MGF1 with SHA-384 as the PSS mask generation function, an empty PSS salt, and
uses the randomized preparation function (PrepareRandomize).</li>
        <li>RSAPBSSA-SHA384-PSS-Deterministic: This named variant uses SHA-384 as the hash function,
MGF1 with SHA-384 as the PSS mask generation function, 48-byte salt length, and uses the
identity preparation function (PrepareIdentity).</li>
        <li>RSAPBSSA-SHA384-PSSZERO-Deterministic: This named variant uses SHA-384 as the hash
function, MGF1 with SHA-384 as the PSS mask generation function, an empty PSS salt, and
uses the identity preparation function (PrepareIdentity). This is the only variant that
produces deterministic signatures over the client's input message msg.</li>
      </ol>
      <t>The <bcp14>RECOMMENDED</bcp14> variants are RSAPBSSA-SHA384-PSS-Randomized or
RSAPBSSA-SHA384-PSSZERO-Randomized.</t>
      <t>See <xref section="5" sectionFormat="of" target="RSABSSA"/> for discussion about
interoperability considerations and deterministic signatures.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Amjad et al. proved the following properties of RSAPBSSA:</t>
      <ul spacing="normal">
        <li>One-more-unforgeability: For any adversary interacting with the server (i.e., the signer) as a client
that interacts with the server at most <tt>n</tt> times is unable to output <tt>n+1</tt> valid message and signature
tuples (i.e., the signature verifies for the corresponding message). This holds for any <tt>n</tt> that is polynomial
in the security parameter of the scheme.</li>
        <li>Concurrent one-more-unforgeability: The above holds even in the setting when an adversarial client is interacting
with multiple servers (signers) simultaneously.</li>
        <li>Unlinkability: Consider any adversary acting as the server (signer) interacting with <tt>n</tt> clients using the same
public metadata. Afterwards, the adversary randomly receives one of the <tt>n</tt> resulting signatures as a challenge.
Then, the adversary cannot guess which of the <tt>n</tt> interactions created the challenge signature better than
a random guess.</li>
      </ul>
      <t>The first two unforgeability properties rely on the Strong RSA Known Target Inversion Problem. This is
slightly stronger assumption that the RSA Known Target Inversion Problem used in RSABSSA. In the RSA Known
Target Inversion Problem, the challenger is given a fixed public exponent <tt>e</tt> with the goal of computing
the e-th root of <tt>n+1</tt> random elements while using an e-th oracle at most <tt>n</tt> times. In comparison, the
Strong RSA Known Target Inversion Problem enables the challenger to choose any public exponents
<tt>e_1,...,e_n+1 &gt; 1</tt> such that it can be the <tt>e_i</tt>-th root for the <tt>i</tt>-th random element. One can view the
difference between the Strong RSA Known Target Inversion and RSA Known Target Inversion problems identical
to the differences between the Strong RSA and RSA problems.</t>
      <t>The final property of unlinkability relies only on the fact that the underlying hash functions are modelled
as random oracles.</t>
      <t>All the security considerations of RSABSSA in <xref section="8" sectionFormat="of" target="RSABSSA"/>
also apply to RSAPBSSA here. We present additional security considerations specific to RSAPBSSA below.</t>
      <section anchor="strong-rsa-modulus-key-generation">
        <name>Strong RSA Modulus Key Generation</name>
        <t>An essential component of RSAPBSSA is that the KeyGen algorithm in <xref target="key-generation"/> generates a RSA
modulus that is the product of two strong primes. This is essential to ensure that the resulting outputs
of AugmentPublicKey in <xref target="augment-public-key"/> does cause errors in AugmentPrivateKey in <xref target="augment-private-key"/>.
We note that an error in AugmentPrivateKey would incur if the output of AugmentPublicKey does not have an
inverse modulo phi. By choosing the RSA modulus as the product of two strong primes, we guarantee the output of
AugmentPublicKey will never incur errors in AugmentPrivateKey.</t>
        <t>It is integral that one uses the KeyGen algorithm for RSAPBSSA instead of the standard RSA key generation algorithms
(such as those used in <xref target="RSABSSA"/>). If one uses standard RSA key generation, there are no guarantees provided
for the success of the AugmentPrivateKey function and, thus, being able to correctly sign messages for certain choices
of public metadata.</t>
      </section>
      <section anchor="domain-separation-for-public-key-augmentation">
        <name>Domain Separation for Public Key Augmentation</name>
        <t>The purpose of domain separation is to guarantee that the security analysis of any cryptographic protocol remain true
even if multiple instances of the protocol or multiple hash functions in a single instance of the protocol
are instantiated based on one underlying hash function.</t>
        <t>The AugmentPublicKey in <xref target="augment-public-key"/> of this document already provide domain separation by using the RSA modulus
as input to the underlying HKDF as the info argument. As each instance of RSAPBSSA will have a different RSA modulus, this
effectively ensures that the outputs of the underlying hash functions for multiple instances will be different
even for the same input.</t>
        <t>Additionally, the hash function invocation used for computing the message digest is domain separated from the hash function
invocation used for augmenting the public key in AugmentPublicKey. This domain separation is done by prepending the inputs
to each hash function with a unique domain separation tag.</t>
      </section>
      <section anchor="choosing-public-metadata">
        <name>Choosing Public Metadata</name>
        <t>The unlinkability property of RSAPBSSA guarantees anonymity for any signature amongst the set of all interactions with the
server (signer) with the same choice of public metadata. In other words, the server is unable to identify the interaction
that created the signature. The unlinkability guarantee of RSAPBSSA is only useful when there are a significant number of
server (signer) interactions for any value of public metadata. In the extreme case where each server interaction is performed
with a different value of public metadata, then the server can uniquely identify the server interaction that created the
given signature.</t>
        <t>Applications that use RSAPBSSA <bcp14>MUST</bcp14> guarantee that the choice of public metadata is limited such that there is a significant
number of server (signer) interactions across many clients for any individual value of public metadata that is signed. This
should be contextualized to an application's user population size.</t>
      </section>
      <section anchor="denial-of-service">
        <name>Denial of Service</name>
        <t>RSAPBSSA is suspectible to Denial of Service (DoS) attacks due to the flexibility of choosing public metadata used in
AugmentPublicKey in <xref target="augment-public-key"/>. In particular, an attacker can pick public metadata such that
the output of AugmentPublicKey is very large, leading to more computational cost when verifying signatures.
Thus, if attackers can force verification with metadata of their choosing, DoS attacks are possible.</t>
        <t>For applications where the values of potential public metadata choices are fixed ahead of time, it is possible
to try and mitigate DoS attacks. If the set of possible metadata choices is small, then applications
<bcp14>SHOULD</bcp14> use one of the protocol variants in <xref target="RSABSSA"/> with distinct keys for each metadata value.
However, if the set of possible metadata choices is large, rendering this approach infeasible for key
management and distribution reasons, other mitigations are possible. As one possible mitigation, first recall that there are only two requirements for the choice of <tt>e'</tt> in AugmentPublicKey in
<xref target="augment-public-key"/>. First, <tt>e'</tt> must be smaller than both prime factors of phi. Secondly, the possible values
of <tt>e'</tt> must be large enough to avoid collisions such that two public metadata choices will result in the same <tt>e'</tt>
and, thus, the same augmented public key. During KeyGen in <xref target="key-generation"/>, the server (signer) can pick the
smallest length output for the HKDF in AugmentPublicKey such that the output will be different for all relevant
public metadata choices while ensuring augmented public keys are smaller.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </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="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="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="RSABSSA">
          <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="PRIVACY-PASS">
          <front>
            <title>Privacy Pass Issuance Protocol</title>
            <author fullname="Sofia Celi" initials="S." surname="Celi">
              <organization>Brave Software</organization>
            </author>
            <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</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="6" month="March" year="2023"/>
            <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>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-protocol-10"/>
        </reference>
        <reference anchor="DSS">
          <front>
            <title>Digital Signature Standard (DSS)</title>
            <author>
              <organization/>
            </author>
            <date month="July" year="2013"/>
          </front>
          <seriesInfo name="National Institute of Standards and Technology" value="report"/>
          <seriesInfo name="DOI" value="10.6028/nist.fips.186-4"/>
        </reference>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper">
              <organization/>
            </author>
            <author fullname="S. Santesson" initials="S." surname="Santesson">
              <organization/>
            </author>
            <author fullname="S. Farrell" initials="S." surname="Farrell">
              <organization/>
            </author>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen">
              <organization/>
            </author>
            <author fullname="R. Housley" initials="R." surname="Housley">
              <organization/>
            </author>
            <author fullname="W. Polk" initials="W." surname="Polk">
              <organization/>
            </author>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet.  An overview of this approach and model is provided as an introduction.  The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms.  Standard certificate extensions are described and two Internet-specific extensions are defined.  A set of required certificate extensions is specified.  The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions.  An algorithm for X.509 certification path validation is described.  An ASN.1 module and examples are provided in the appendices.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
      </references>
    </references>
    <section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>This section includes test vectors for the RSAPBSSA-SHA384-PSS-Randomized variant defined in <xref target="core-protocol"/>.
The following parameters are specified for each test vector:</t>
      <ul spacing="normal">
        <li>p, q, n, e, d: RSA private and public key parameters, each encoded as a hexadecimal string.</li>
        <li>msg: Input messsage being signed, encoded as a hexadecimal string. The hash is computed using SHA-384.</li>
        <li>metadata: Public metadata bound to the signature, encoded as a hexadecimal string.</li>
        <li>eprime: The augmented public key exponent corresponding to e and metadata, encoded as a hexadecimal string.</li>
        <li>rand: Message randomizer prefix, encoded as a hexadecimal string.</li>
        <li>blind: The message blinding value, encoded as a hexadecimal string.</li>
        <li>salt: Randomly-generated salt used when computing the signature. The length is 48 bytes.</li>
        <li>blinded_msg, blinded_sig: The protocol values exchanged during the computation,
encoded as hexadecimal strings.</li>
        <li>sig: The output message signature.</li>
      </ul>
      <artwork><![CDATA[
// Test vector 1
p: dcd90af1be463632c0d5ea555256a20605af3db667475e190e3af12a34a332
4c46a3094062c59fb4b249e0ee6afba8bee14e0276d126c99f4784b23009bf616
8ff628ac1486e5ae8e23ce4d362889de4df63109cbd90ef93db5ae64372bfe1c5
5f832766f21e94ea3322eb2182f10a891546536ba907ad74b8d72469bea396f3
q: f8ba5c89bd068f57234a3cf54a1c89d5b4cd0194f2633ca7c60b91a795a56f
a8c8686c0e37b1c4498b851e3420d08bea29f71d195cfbd3671c6ddc49cf4c1db
5b478231ea9d91377ffa98fe95685fca20ba4623212b2f2def4da5b281ed0100b
651f6db32112e4017d831c0da668768afa7141d45bbc279f1e0f8735d74395b3
d: 4e21356983722aa1adedb084a483401c1127b781aac89eab103e1cfc522154
94981d18dd8028566d9d499469c25476358de23821c78a6ae43005e26b394e305
1b5ca206aa9968d68cae23b5affd9cbb4cb16d64ac7754b3cdba241b72ad6ddfc
000facdb0f0dd03abd4efcfee1730748fcc47b7621182ef8af2eeb7c985349f62
ce96ab373d2689baeaea0e28ea7d45f2d605451920ca4ea1f0c08b0f1f6711eaa
4b7cca66d58a6b916f9985480f90aca97210685ac7b12d2ec3e30a1c7b97b65a1
8d38a93189258aa346bf2bc572cd7e7359605c20221b8909d599ed9d38164c9c4
abf396f897b9993c1e805e574d704649985b600fa0ced8e5427071d7049d
e: 010001
N: d6930820f71fe517bf3259d14d40209b02a5c0d3d61991c731dd7da39f8d69
821552e2318d6c9ad897e603887a476ea3162c1205da9ac96f02edf31df049bd5
5f142134c17d4382a0e78e275345f165fbe8e49cdca6cf5c726c599dd39e09e75
e0f330a33121e73976e4facba9cfa001c28b7c96f8134f9981db6750b43a41710
f51da4240fe03106c12acb1e7bb53d75ec7256da3fddd0718b89c365410fce61b
c7c99b115fb4c3c318081fa7e1b65a37774e8e50c96e8ce2b2cc6b3b367982366
a2bf9924c4bafdb3ff5e722258ab705c76d43e5f1f121b984814e98ea2b2b8725
cd9bc905c0bc3d75c2a8db70a7153213c39ae371b2b5dc1dafcb19d6fae9
msg: 68656c6c6f20776f726c64
metadata: 6d65746164617461
eprime: 30584b72f5cb557085106232f051d039e23358feee9204cf30ea56762
0e90d79e4a7a81388b1f390e18ea5240a1d8cc296ce1325128b445c48aa5a3b34
fa07c324bf17bc7f1b3efebaff81d7e032948f1477493bc183d2f8d94c947c984
c6f0757527615bf2a2f0ef0db5ad80ce99905beed0440b47fa5cb9a2334fea40a
d88e6ef1
rand:
64b5c5d2b2ca672690df59bab774a389606d85d56f92a18a57c42eb4cb164d43
blind: d0261d61ce06309219fbac512db680b381a9fbf2cf08a11a0a1af9424d
cc639777872408c58821c4fc2aa8b607e519b37d79a2beb71ddf48ed9323c2fd0
c87fc0343d0d00e35f4601bb6f3462950437c7f9a42e7c1ae1a9d72e5090b9739
0f94b8764e11173aabcad5a8254e15d4f0e9b047ba0640a8ed4e340b5bcd4b005
12c1474ffae384934a72c7af9010ae147602238502469c6860ddbc43f35a73348
521501a32e7a40fdde6180718755a25de849b82f7dacaea05871a8122057d8726
1172ba8871f2bb8a2c16cd668ae0cfb1fc03b20d4fdf5046a15c59366f0ce631a
887a64c621a1fb1090584cdd6cc958b6af024c3bb8476f12d093d0df352f126e
salt: 59bfc4f4b56aaee9389ba95517a932900971c3417fa5fe4a309477d9c08
87f9b601be62557c67bc4e6f6eb0325eac46d
blinded_msg: 1b9e1057dd2d05a17ad2feba5f87a4083cc825fe06fc70f0b782
062ea0043fa65ec8096ce5d403cfa2aa3b11195b2a655d694386058f626645071
5a936b5764f42977c0a0933ff3054d456624734fd2c019def792f00d30b3ac2f2
7859ea56d835f80564a3ba59f3c876dc926b2a785378ca83f177f7b378513b36a
074e7db59448fd4007b54c64791a33b61721ab3b5476165193af30f25164d4806
84d045a8d0782a53dd73774563e8d29e48b175534f696763abaab49fa03a055ec
9246c5e398a5563cc88d02eb57d725d3fc9231ae5139aa7fcb9941060b0bf0192
b8c81944fa0c54568b0ab4ea9c4c4c9829d6dbcbf8b48006b322ee51d784ac93e
4bf13
blinded_sig: 7ef75d9887f29f2232602acab43263afaea70313a0c90374388d
f5a7a7440d2584c4b4e5b886accc065bf4824b4b22370ddde7fea99d4cd67f8ed
2e4a6a2b7b5869e8d4d0c52318320c5bf7b9f02bb132af7365c471e799edd111c
a9441934c7db76c164b0515afc5607b8ceb584f5b1d2177d5180e57218265c07a
ec9ebde982f3961e7ddaa432e47297884da8f4512fe3dc9ab820121262e6a7385
0920299999c293b017cd800c6ec994f76b6ace35ff4232f9502e6a52262e19c03
de7cc27d95ccbf4c381d698fcfe1f200209814e04ae2d6279883015bbf36cabf3
e2350be1e175020ee9f4bb861ba409b467e23d08027a699ac36b2e5ab988390f3
c0ee9
sig: abd6813bb4bbe3bc8dc9f8978655b22305e5481b35c5bdc4869b60e2d5cc
74b84356416abaaca0ca8602cd061248587f0d492fee3534b19a3fe089de18e4d
f9f3a6ad289afb5323d7934487b8fafd25943766072bab873fa9cd69ce7328a57
344c2c529fe96983ca701483ca353a98a1a9610391b7d32b13e14e8ef87d04c0f
56a724800655636cfff280d35d6b468f68f09f56e1b3acdb46bc6634b7a1eab5c
25766cec3b5d97c37bbca302286c17ff557bcf1a4a0e342ea9b2713ab7f935c81
74377bace2e5926b39834079761d9121f5df1fad47a51b03eab3d84d050c99cf1
f68718101735267cca3213c0a46c0537887ffe92ca05371e26d587313cc3f4

// Test vector 2
p: dcd90af1be463632c0d5ea555256a20605af3db667475e190e3af12a34a332
4c46a3094062c59fb4b249e0ee6afba8bee14e0276d126c99f4784b23009bf616
8ff628ac1486e5ae8e23ce4d362889de4df63109cbd90ef93db5ae64372bfe1c5
5f832766f21e94ea3322eb2182f10a891546536ba907ad74b8d72469bea396f3
q: f8ba5c89bd068f57234a3cf54a1c89d5b4cd0194f2633ca7c60b91a795a56f
a8c8686c0e37b1c4498b851e3420d08bea29f71d195cfbd3671c6ddc49cf4c1db
5b478231ea9d91377ffa98fe95685fca20ba4623212b2f2def4da5b281ed0100b
651f6db32112e4017d831c0da668768afa7141d45bbc279f1e0f8735d74395b3
d: 4e21356983722aa1adedb084a483401c1127b781aac89eab103e1cfc522154
94981d18dd8028566d9d499469c25476358de23821c78a6ae43005e26b394e305
1b5ca206aa9968d68cae23b5affd9cbb4cb16d64ac7754b3cdba241b72ad6ddfc
000facdb0f0dd03abd4efcfee1730748fcc47b7621182ef8af2eeb7c985349f62
ce96ab373d2689baeaea0e28ea7d45f2d605451920ca4ea1f0c08b0f1f6711eaa
4b7cca66d58a6b916f9985480f90aca97210685ac7b12d2ec3e30a1c7b97b65a1
8d38a93189258aa346bf2bc572cd7e7359605c20221b8909d599ed9d38164c9c4
abf396f897b9993c1e805e574d704649985b600fa0ced8e5427071d7049d
e: 010001
N: d6930820f71fe517bf3259d14d40209b02a5c0d3d61991c731dd7da39f8d69
821552e2318d6c9ad897e603887a476ea3162c1205da9ac96f02edf31df049bd5
5f142134c17d4382a0e78e275345f165fbe8e49cdca6cf5c726c599dd39e09e75
e0f330a33121e73976e4facba9cfa001c28b7c96f8134f9981db6750b43a41710
f51da4240fe03106c12acb1e7bb53d75ec7256da3fddd0718b89c365410fce61b
c7c99b115fb4c3c318081fa7e1b65a37774e8e50c96e8ce2b2cc6b3b367982366
a2bf9924c4bafdb3ff5e722258ab705c76d43e5f1f121b984814e98ea2b2b8725
cd9bc905c0bc3d75c2a8db70a7153213c39ae371b2b5dc1dafcb19d6fae9
msg: 68656c6c6f20776f726c64
metadata:
eprime: 2ed5a8d2592a11bbeef728bb39018ef5c3cf343507dd77dd156d5eec7
f06f04732e4be944c5d2443d244c59e52c9fa5e8de40f55ffd0e70fbe9093d3f7
be2aafd77c14b263b71c1c6b3ca2b9629842a902128fee4878392a950906fae35
d6194e0d2548e58bbc20f841188ca2fceb20b2b1b45448da5c7d1c73fb6e83fa5
8867397b
rand:
ebb56541b9a1758028033cfb085a4ffe048f072c6c82a71ce21d40842b5c0a89
blind: b8b99b94b48725b059cf26279a79e6cc00d6b98024621f69a6a80e7b74
5050da88ecd81eac3326c96b9ce3695fb7730c17f334d6e4d42088879a42fcb23
bacbc3e0329eab4e9cd3637de07fe64ff2d79fcb44fed2e978a2efb693e87fc9e
971a3a79f746d980d56a6701dcbb6b11a83c8b80d1321e7a4c8ccf541dfd0ceb7
cf71bb0c91be635c979c7a395849ce5c51dd5ab5e7910af1036ffd63da61a56e7
cce6863062ab168dab78ee561e5cc09f303d5aad1c4f6219a9fef85328a2eecb0
6c79272d18c6badfac24c83dac9928d96a2b53e08a60399a8daf656582d6eb7a6
c9fd7d87f5fc3b3752c755c76acb96c103d260690d3ca86383c0dba28c54bb50
salt: a4840382f7404877d0825bb254dd6038a0f3c9e90fb36120bd05fd126ab
c1327c9e00eb82ffb2cac58fa51c7f3a6f3e1
blinded_msg: d1fc97f30efbf116fadd9895130cdd55f939211f7db19ce9a852
87227a02b33fb698b52399f81be0e1f598482000202ec89968085753eae1810f1
4676b514e08238c8aa79d8b999af54e9f4282c6220d4d760716e48e5413f3228c
c59ce10b8252916640de7b9b5c7dc9c2bff9f53b4fb5eb4a5f8bab49af3fd1b95
5d34312073d15030e7fdb44bdb23460d1c5662597f9947092def7fff955a5f3e6
3419ae9858c6405f9609b63c4331e0cf90d24c196bee554f2b78e0d8f6da3d430
8c8d4ae9fbe18a8bb7fa4fc3b9cacd4263e5bd6e12ed891cfdfba8b50d0f37d7a
9abe065238367907c685ed2c224924caf5d8fe41f5db898b09a0501d318d9f65d
88cb8
blinded_sig: 400c1bcdfa56624f15d04f6954908b5605dbeff4cd56f384d753
1669970290d706529d44cde4c972a1399635525a2859ef1d914b4130068ed407c
fda3bd9d1259790a30f6d8c07d190aa98bf21ae9581e5d61801565d96e9eec134
335958b3d0b905739e2fd9f39074da08f869089fe34de2d218062afa16170c150
5c67b65af4dcc2f1aeccd48275c3dacf96116557b7f8c7044d84e296a0501c511
ba1e6201703e1dd834bf47a96e1ac4ec9b935233ed751239bd4b514b031522cd5
1615c1555e520312ed1fa43f55d4abeb222ee48b4746c79006966590004714039
bac7fd18cdd54761924d91a4648e871458937061ef6549dd12d76e37ed417634d
88914
sig: 4062960edb71cc071e7d101db4f595aae4a98e0bfe6843aca3e5f48c9dfb
46d505e8c19806ffa07f040313d44d0996ef9f69a86fa5946cb818a32627fe2df
2a0e80350288ae4fedfbee4193554cc1433d9d27639db8b4635265504d87dca70
54c85e0c882d32887534405e6cc4e7eb4b174383e5ce4eebbfffb217f353102f6
d1a0461ef89238de31b0a0c134dfac0d2a8c533c807ccdd557c6510637596a490
d5258b77410421be4076ecdf2d7e9044327e36e349751f3239681bba10fe633f1
b246f5a9f694706316898c900af2294f47267f2e9ad1e61c7f56bf64328025887
5d29f3745dfdb74b9bbcd5fe3dea62d9be85e2c6f5aed68bc79f8b4a27b3de

// Test vector 3
p: dcd90af1be463632c0d5ea555256a20605af3db667475e190e3af12a34a332
4c46a3094062c59fb4b249e0ee6afba8bee14e0276d126c99f4784b23009bf616
8ff628ac1486e5ae8e23ce4d362889de4df63109cbd90ef93db5ae64372bfe1c5
5f832766f21e94ea3322eb2182f10a891546536ba907ad74b8d72469bea396f3
q: f8ba5c89bd068f57234a3cf54a1c89d5b4cd0194f2633ca7c60b91a795a56f
a8c8686c0e37b1c4498b851e3420d08bea29f71d195cfbd3671c6ddc49cf4c1db
5b478231ea9d91377ffa98fe95685fca20ba4623212b2f2def4da5b281ed0100b
651f6db32112e4017d831c0da668768afa7141d45bbc279f1e0f8735d74395b3
d: 4e21356983722aa1adedb084a483401c1127b781aac89eab103e1cfc522154
94981d18dd8028566d9d499469c25476358de23821c78a6ae43005e26b394e305
1b5ca206aa9968d68cae23b5affd9cbb4cb16d64ac7754b3cdba241b72ad6ddfc
000facdb0f0dd03abd4efcfee1730748fcc47b7621182ef8af2eeb7c985349f62
ce96ab373d2689baeaea0e28ea7d45f2d605451920ca4ea1f0c08b0f1f6711eaa
4b7cca66d58a6b916f9985480f90aca97210685ac7b12d2ec3e30a1c7b97b65a1
8d38a93189258aa346bf2bc572cd7e7359605c20221b8909d599ed9d38164c9c4
abf396f897b9993c1e805e574d704649985b600fa0ced8e5427071d7049d
e: 010001
N: d6930820f71fe517bf3259d14d40209b02a5c0d3d61991c731dd7da39f8d69
821552e2318d6c9ad897e603887a476ea3162c1205da9ac96f02edf31df049bd5
5f142134c17d4382a0e78e275345f165fbe8e49cdca6cf5c726c599dd39e09e75
e0f330a33121e73976e4facba9cfa001c28b7c96f8134f9981db6750b43a41710
f51da4240fe03106c12acb1e7bb53d75ec7256da3fddd0718b89c365410fce61b
c7c99b115fb4c3c318081fa7e1b65a37774e8e50c96e8ce2b2cc6b3b367982366
a2bf9924c4bafdb3ff5e722258ab705c76d43e5f1f121b984814e98ea2b2b8725
cd9bc905c0bc3d75c2a8db70a7153213c39ae371b2b5dc1dafcb19d6fae9
msg:
metadata: 6d65746164617461
eprime: 30584b72f5cb557085106232f051d039e23358feee9204cf30ea56762
0e90d79e4a7a81388b1f390e18ea5240a1d8cc296ce1325128b445c48aa5a3b34
fa07c324bf17bc7f1b3efebaff81d7e032948f1477493bc183d2f8d94c947c984
c6f0757527615bf2a2f0ef0db5ad80ce99905beed0440b47fa5cb9a2334fea40a
d88e6ef1
rand:
f2a4ed7c5aa338430c7026d7d92017f994ca1c8b123b236dae8666b1899059d0
blind: 5b9a334afde50dd24399d1ba9fc1e60be09c7e0cc9e8b8808dfcbc67fe
adeceb34effc9164903149e9de9fb545789fa9885064c58257397500bcaef4e1f
179b88af951636f5c45c1504e4989f9d5af4fb0b171804e2278d1ca85668cabec
6ed9c0f057d5b4f897522b623e5aa3674a4b5dac6174b871ff92f86c1cc81c8f1
d4446210f59219647dbe75bf3e42a17ebba99291e7c45acfa820badae10420c09
3b62e2805932da4e56b1a57a8e31f3a57e2bc59bc72e6ae3563386a7753afeaae
ba1e36a4ab8abe9d0609de4244ae3669157f78f5acd82007f187dc93498bfe3d1
d09ac62b2cb6e5bcd4a202995031690cde0c318ecc13ff5680119ed2773bc751
salt: 5bab5bfebba9eeaa5249e043fcaac352721937e1c3643f35bf815bfc362
73bf17933a0ebc0d0ae90f46077d0e5aadcd6
blinded_msg: 7756a1f89fa33cfc083567e02fd865d07d6e5cd4943f030a2f94
b5c23f3fe79c83c49c594247d02885e2cd161638cff60803184c9e802a659d76a
1c53340972e62e728cc70cf684ef03ce2d05cefc729e6eee2ae46afa17b6b27a6
4f91e4c46cc12adc58d9cb61a4306dac732c9789199cfe8bd28359d1911678e97
09bc159dae34ac7aa59fd0c95962c9f4904bf04aaba8a7e774735bd03be4a02fb
0864a53354a2e2f3502506318a5b03961366005c7b120f0e6b87b44bc15658c3e
8985d69f6adea38c24fe5e7b4bafa1ad6dc7d729281c26dffc88bd34fcc5a5f9d
f9b9781f99ea47472ba8bd679aaada59525b978ebc8a3ea2161de84b7398e4878
b751b
blinded_sig: 2a13f73e4e255a9d5bc6f76cf48dfbf189581c2b170600fd3ab1
a3def148846213239b9d0a981537541cb4f481a602aeebca9ef28c9fcdc63d15d
4296f85d864f799edf08e9045180571ce1f1d3beff293b18aae9d8845068cc0d9
a05b822295042dc56a1a2b604c51aa65fd89e6d163fe1eac63cf603774797b793
6a8b7494d43fa37039d3777b8e57cf0d95227ab29d0bd9c01b3eae9dde5fca714
1919bd83a17f9b1a3b401507f3e3a8e8a2c8eb6c5c1921a781000fee65b6dd851
d53c89cba2c3375f0900001c04855949b7fa499f2a78089a6f0c9b4d36fdfcac2
d846076736c5eaedaf0ae70860633e51b0de21d96c8b43c600afa2e4cc64cd66d
77a8f
sig: 67985949f4e7c91edd5647223170d2a9b6611a191ca48ceadb6c568828b4
c415b6270b037cd8a68b5bca1992eb769aaef04549422889c8b156b9378c50e8a
31c07dc1fe0a80d25b870fadbcc1435197f0a31723740f3084ecb4e762c623546
f6bd7d072aa565bc2105b954244a2b03946c7d4093ba1216ec6bb65b8ca8d2f3f
3c43468e80b257c54a2c2ea15f640a08183a00488c7772b10df87232ee7879bee
93d17e194d6b703aeceb348c1b02ec7ce202086b6494f96a0f2d800f12e855f9c
33dcd3abf6bd8044efd69d4594a974d6297365479fe6c11f6ecc5ea333031c57d
eb6e14509777963a25cdf8db62d6c8c68aa038555e4e3ae4411b28e43c8f57

// Test vector 4
p: dcd90af1be463632c0d5ea555256a20605af3db667475e190e3af12a34a332
4c46a3094062c59fb4b249e0ee6afba8bee14e0276d126c99f4784b23009bf616
8ff628ac1486e5ae8e23ce4d362889de4df63109cbd90ef93db5ae64372bfe1c5
5f832766f21e94ea3322eb2182f10a891546536ba907ad74b8d72469bea396f3
q: f8ba5c89bd068f57234a3cf54a1c89d5b4cd0194f2633ca7c60b91a795a56f
a8c8686c0e37b1c4498b851e3420d08bea29f71d195cfbd3671c6ddc49cf4c1db
5b478231ea9d91377ffa98fe95685fca20ba4623212b2f2def4da5b281ed0100b
651f6db32112e4017d831c0da668768afa7141d45bbc279f1e0f8735d74395b3
d: 4e21356983722aa1adedb084a483401c1127b781aac89eab103e1cfc522154
94981d18dd8028566d9d499469c25476358de23821c78a6ae43005e26b394e305
1b5ca206aa9968d68cae23b5affd9cbb4cb16d64ac7754b3cdba241b72ad6ddfc
000facdb0f0dd03abd4efcfee1730748fcc47b7621182ef8af2eeb7c985349f62
ce96ab373d2689baeaea0e28ea7d45f2d605451920ca4ea1f0c08b0f1f6711eaa
4b7cca66d58a6b916f9985480f90aca97210685ac7b12d2ec3e30a1c7b97b65a1
8d38a93189258aa346bf2bc572cd7e7359605c20221b8909d599ed9d38164c9c4
abf396f897b9993c1e805e574d704649985b600fa0ced8e5427071d7049d
e: 010001
N: d6930820f71fe517bf3259d14d40209b02a5c0d3d61991c731dd7da39f8d69
821552e2318d6c9ad897e603887a476ea3162c1205da9ac96f02edf31df049bd5
5f142134c17d4382a0e78e275345f165fbe8e49cdca6cf5c726c599dd39e09e75
e0f330a33121e73976e4facba9cfa001c28b7c96f8134f9981db6750b43a41710
f51da4240fe03106c12acb1e7bb53d75ec7256da3fddd0718b89c365410fce61b
c7c99b115fb4c3c318081fa7e1b65a37774e8e50c96e8ce2b2cc6b3b367982366
a2bf9924c4bafdb3ff5e722258ab705c76d43e5f1f121b984814e98ea2b2b8725
cd9bc905c0bc3d75c2a8db70a7153213c39ae371b2b5dc1dafcb19d6fae9
msg:
metadata:
eprime: 2ed5a8d2592a11bbeef728bb39018ef5c3cf343507dd77dd156d5eec7
f06f04732e4be944c5d2443d244c59e52c9fa5e8de40f55ffd0e70fbe9093d3f7
be2aafd77c14b263b71c1c6b3ca2b9629842a902128fee4878392a950906fae35
d6194e0d2548e58bbc20f841188ca2fceb20b2b1b45448da5c7d1c73fb6e83fa5
8867397b
rand:
ba3ea4b1e475eebe11d4bfe3a48521d3ba8cd62f3baed9ec29fbbf7ff0478bc0
blind: 910f6bcd2329245a244e7f1d81c4827d85c2687fd458fcf0bb4b7af6ae
81a79e00ab4f2c150a5215dd251cc3a5ed9c5bb2b0dde67dee87477d2786e55fe
f21ee74c8c6cd14208a81579ddf811f30b21595c6ef8e94f63599981da5f01638
a5d6345fab6c95acee5ba0e4e2d43ad77a3b9e4294a30df1db3294e5ca0c092e7
012bbc6cea7a83e73c0ea1a33c3fbf5015d2e4dc7bcbfd051c302eb6a7753d01c
2264f779020989e38206c4600365273323a763357b7819b8ff9e585610828c0ec
542caa68bf2f73f8fb981377699d750512cb66bd693d5e6784f95f86c43f72e9f
9be6b9201a85f1639311dd7e44a7565a3b7fe4b375c5a35cf3444059b05b3863
salt: 4b4ac879a22b5394d4259c817a2cc78713b0438a8de91ffb065f0d66829
e4048367be0278631d8178c3c0d48ad61b665
blinded_msg: 99d725c5613ff87d16464b0375b0976bf4d47319d6946e85f0d0
c2ca79eb02a4c0c282642e090a910b80fee288f0b3b6777e517b757fc6c96ea44
ac570216c8fcd868e15da4b389b0c70898c5a2ed25c1d13451e4d407fe1301c23
1b4dc76826b1d4cc5e64b0e28fb9c71f928ba48c87e308d851dd07fb5a7e0aa5d
0dce61d1348afb4233355374e5898f63adbd5ba215332d3329786fb7c30ef04c1
81b267562828d8cf1295f2ef4a05ef1e03ed8fee65efb7725d8c8ae476f61a359
87e40efc481bcb4b89cb363addfb2adacf690aff5425107d29b2a75b4665d49f2
55c5caa856cdc0c5667de93dbf3f500db8fcce246a70a159526729d82c34df69c
926a8
blinded_sig: a9678acee80b528a836e4784f0690fdddce147e5d4ac506e9ec5
1c11b16ee2fd5a32e382a3c3d276a681bb638b63040388d53894afab79249e159
835cd6bd65849e5d1397666f03d1351aaec3eae8d3e7cba3135e7ec4e7b478ef8
4d79d81039693adc6b130b0771e3d6f0879723a20b7f72b476fe6fef6f21e00b9
e3763a364ed918180f939c3510bb5f46b35c06a00e51f049ade9e47a8e1c3d568
9bd5a43df20b73d70dcacfeed9fa23cabfbe750779997da6bc7269d08b2620aca
a3daa0d9e9d4b87ef841ebcc06a4c0af13f1d13f0808f512c50898586b4fc76d2
b32858a7ddf715a095b7989d8df50654e3e05120a83cec275709cf79571d8f46a
f2b8e
sig: ba57951810dbea7652209eb73e3b8edafc56ca7061475a048751cbfb995a
eb4ccda2e9eb309698b7c61012accc4c0414adeeb4b89cd29ba2b49b1cc661d5e
7f30caee7a12ab36d6b52b5e4d487dbff98eb2d27d552ecd09ca022352c9480ae
27e10c3a49a1fd4912699cc01fba9dbbfd18d1adcec76ca4bc44100ea67b9f1e0
0748d80255a03371a7b8f2c160cf632499cea48f99a6c2322978bd29107d0dffd
d2e4934bb7dc81c90dd63ae744fd8e57bff5e83f98014ca502b6ace876b455d1e
3673525ba01687dce998406e89100f55316147ad510e854a064d99835554de894
9d3662708d5f1e43bca473c14a8b1729846c6092f18fc0e08520e9309a32de
]]></artwork>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+2d63Ycx5Wl/8dTZNNrjchuAM77hcvqbpqSbC6LEkeQ3ePp
8RIiIyOBMgtVUGUVSVijfpZ5lnmy+U5EXgsARWncM38oWyJQlRkZceKcffY+
EZE8PT1V+9V+bZ8Gj17p3X6l1+vb4Lfr1aYJvjl/FpyvLjd6f9jZ7pHSdb2z
bz7gQqP39nK7u30arDbtVqnVze5psN8dun0chlUYq9f29u121zwNXmz2drex
+9PPdrrdq26vN813er3d0J9b26mb1dPg3/dbcxJ0291+Z9uOn26v5Ye/KNVs
zUZfc2kjd5/q67/q5tS0u8vTm6GHp7X08HTX6dMwVN2hvl513Wq72d/ecN+L
b779Qil92F9td09VcBrQ4e5p8Luz4Bn/l+ZUwD/+Ib+72h665Rfb3aXerP6m
97TIBdvt5dq6L+y1Xq2x1KXc853r2L/q9eF6szqrd9u3mzPbHB5NDzw/C35v
N81uZV53283smedmu9/f+e6nHtvJXf/aXU23nZnt9fS45258/7bdzof3/Gq3
6vbbmyu7W3y7fNjz9fbQtGu9W47T6Lf/emX1zWpzWa/23RlTOhveH2juLPjy
LPiz3c6e+Af7ZrU5+uYnLfr67frWbv/VdAwJg9Yr7W2pNtvdNbe9sU9xONxu
+k2dnp4Guu72O232Sn17teoCXOdwbTf7oLuxZtWubBfooB69uRu8ObjZbfG/
7TrYX2muPtzc4IhdcHPgYhNc271u9F6fqRf7gGb1JrDv9nYjLhbst9xkpb3f
ntPm2NLOGp5M9AzPboL61l36/Itvfnfm+3u9ahqGrn4lMbLbNgcjJlHqhx/+
pW/w0xenn52tdvvWu7y4uHf2sfPdjz/Oxtf3xY9S3R3hSdDYzXZvm6HHZ4Ez
lQwr2L/duqC6nYZR2/1bazfKrFdiSCI36OzuDe7zeLtzFrS7J8Fb/MnKs2/x
BYKdKRDD4I83h71VF1wXfOrQ43H3+vyEi/j8u+vu8snFSX/zxfgZV77aWfph
H7srfN9u/EeN4tnO8NvWDfZmt3oDEjFJXacvaYd7LqT/b1bNZHPf/RPX/wu6
II0q+UJGgD8HgNWdm/xAz4I/3vA4Gcva7scn06nRpmq6Olhbvdt0ATa+ot1+
dLqb9WK4RKxyccbMBw7IzIGAk6Zo+drqTRc82Kr0wI+TOZgMd+GGNz1I3XOX
jB3nG9z1Sott3+jdyjLrXKBvbnB5F5mg8NvV/irAGV998+JPz57/+fTVs/Nz
75EWj3SmN7c3uutOB1v8+KOqrTxMB0ZvthvaWhMtWowHQFyt1jY4dLY94IkL
I8osr1fXK3FNAEMCUa32hLB1Awiw4Ypo0oaJuN42MuVH4SkeV9uA3mzNSks7
0n2lg8e9b5xMEf8Em692zviuF4ZkQUyf3GlTQmPAGSJTuvXJAAx05/UGnHcP
xsbB3SABTWQ+9qtrK9b1AeGaOvMQJRPg7bEwvZjgRsJoZTDbF0xzb8OTqWvX
q8urvYyY+xtFH+zGbBvLlTernWtm3vWAn4KfssXwyBM1PoVZlGf4thueJZO7
iBpuxlXs2eXZiUTOYH/ncRs7tfSG3Gi9S/H5eC83HfZ+FsbJ7vAaLrXrte/2
zDJuCjDbGxsQLwS8fL8jH+30jodfbw8bkBtbT6j9nmQgnq/5jOuHkHhvChjh
UyLolbv+scDtMVkaiZIf77ObG9L06t2TM765XtFx8ZnhiasNgN//8uOPJ0Hf
tHxDt2272viY6A7mij6/1be+k+JZ4P9h7Wz9+LBxoG+bJzPc76cPX/Q5yHVH
B46D6Z3LAqevzs8JvVoMeCa56Pl28wZDOT8UX/5MurDy1seWfuqE2nXBo5d/
PP/20Yn/M/jqa/fzN5//1z+++Obzz+Tn898/+/LL8QfVX3H++6//+OVn00/T
nc+/fvny868+8zfzabD4SD16+ezPjzyMP/r61bcvvv7q2ZePPF7Mp1hLNnJo
4NIRuUPgQHeqsZ3ZrWpvz98+f/W//1eUAnD/8M0Xz+Moqkil/pcyKlJ+Abw3
/mnbDXPrf5U0p3BJwFVaYdax8s1qr9eEAeHcXQkmCOxjzX/8d7HMX54Gv6nN
TZT+c/+BDHjx4WCzxYfOZnc/uXOzN+I9H93zmNGai8+PLL3s77M/L34f7D77
ULzmq60HNu8i7Xa93r4Vv8T+152bEcEprLfbHoQx74/mjPkaZqdP7H1i2N7Y
XR/7xxMN7zsFc/a2+26//W7VYy9/yq/u86fem3d7YX58gOfvXK+27tJ2t73m
GxLV6cZeOi7pXOaSvA8jfW/TbkwrAWXpivOv4Ovz+MUrd+WL+OvzV/LR3OVo
svevMCok1Alf0Egeu749ExPaMbQ7jHjYGB+G3gaA3WY+ik4J9w7q1eWpwIvu
vyQypfunwY6ObK+/6wf03WGzknTw+OVJ8NUTeLfd+EZ1f+FJ0F+BqzcreQTI
7Prt7g++EYt4Phi85FOzJhtgMBnuV6Sd/nfo3ZklF7wMfvNp8E3wm+Ar6QsI
/d3abh5vnsiUOF7opvkaaLk+XAcbaD7PAIhFWwQbayXdME3wPqzkPES8Ytut
5rMUbKTxlUxxZ7+DGDx+dxLceYZAZJ9C3K3uannWu4Bbgo0kkRbpEazkIxnP
xs2u5CKzFaJzbd1zuu/M1v02POYbC8xuRPfa45uHGz2AtMADj6Q7u7erzrUm
5uhoQ+KFny8lMbZLPz1x8yveNs2nM+E4eZv+U39Vn59J27vbm/32cqdvroSC
oZE7ayQh9Ff35r70zWydu0CCsNDjd+FJcHbGBL77ytlRPrQbPVDfuf8tqQnu
0TcRvgujk4D/xmHi/kzDLMyfwOzlG/nUfyJP7ZgXZ87VSfDXyaJ+OC7g7SJy
L95dSPrauaTn4nfbtp3dQ4Q9AZZQEBvs6c/w1V8vTiaHPSJUvgPLjp0E9D/r
O7zobh9T3gnqqb9DEAXum5k79zNbO7/uncjffXPXf2Swjs+P/n0TOJL8sB8B
vSMXeTVg5g+/MtudnVi5B+XxuhFbma+OSHeECfVH1lqDNDPgQaQ+O1wKwL3y
QusP5H7px/Cp40fyochvJGe7PewCefiykV7RnXh+1P8hLMmP6ovVRq9Xf7N9
KwT994cVYe8YJAlDMnA7akvxxAGI7nDus+BLmXGnh/pU4q/5pBvFojOxGqnw
hfDk8epjCdBdie58+IG9qvTK9ub1+ZML1bfkv589Vy7smx/o75kL/yH9u4/7
oJRRMlHGNhK3woOH+VO4xFRWIEZ++IH7Tqf7fvzxzM/4TMdfrpiJhRzuNbVL
h1eTgvbEyUl7J4W9aOEqsu1//Md/qIeEuvvSPbVvnkZFgoDXet+XJnzx5Z7C
yz3P6dmsPEmC9w2Pc17z+GZRQjhxKueBp5M3YKkXs6YuhorNMHlvAcgrf7Wz
dtf1fe3toR7q2ne+qjF6sneAo14vetaLwjs9k5bGfg2lilm/2j46uiUxuqdj
vktDNN1rqb6L8kxn1ln/IGUCPWNlZVLmx0WGvnZxVBk5kcDfwWc2mG6KYafl
/bA6J0icGrmduYFrLtj2xhlrPVNR5+jxY2xeDD9dKJ/5ZjWTWaBd3EjJp5bq
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
9klhyqvj0kzYr76iw+ZJzPvOk0XWOAbO2dS4VNAt4GVc+rq3ypl8KBqBHJ0H
I/pDU4DRtYPp60+OMKobUPo6+Adg6pMBH+9MyAKY5+XIBXh1A3iVS+xy5cZB
ZY6lPDUWtF0uGBdvRjXoNZokjn7P0XLBhInqa9F9ecMVqE+GTUhOYgpxnS0W
9JtsZrJyvE8dZJEBTi9LM8s9EnM6/3a1XvsFwo0DypGPLqiO0g5PHYrKDqAZ
dV4WUn+ihPqRTf9yNr1Aon6ZcQ6CfUnxLkqBAffw6xnZHMsRS9Y9w8Cfh34D
GRp98QH884tYq1EKy72HjX0nFQXbcyku/Nvx/cuO+MtkD+TmE9m74PY4Ot43
NOT7uaC/L1zvH48WfSJ44d2xR4z7OzLhRk+F7qKha07ATTDrbzAl4XSeKwmQ
vQdlsr8jLc8/FFyFmLrNkD3CLlb2PKrOGLwzldsfDLH82dS9dIYfH/fo2E3G
up7zN6nsyWP6CbnrVdNkOCyeIO6Cbl8Mezj73fRSQgBZm4PfDeMgbNz5LSsP
nccQdTEg2gWsUoB2fStOITtHpHVpU1rgm6FhX3ZxyeBPs3VIpZ4tt7HBupbb
S348mbO4e9aP56u66qFV3WU49UvM3853JriVpflmYNm/crh2sed2fJx4Pu1r
OfP2HfkljTvkchraibZ7FpLP1PN+qbpfpl52yy1SX0wL4X7ryPHi81gyVdPy
82J9hNAddqhdvM+/3Q4C+hTPrv97xRbNigZ19adZ/p3tK+5X3Y5WyR+/d018
UsQXPo24kTtPlj2BupsN4KLfO+Ot42dcqbnvjY7xoA8Egw+IY/uiYmNv3O4K
XNd7gne9ZboUl5B0e2e9rt+G1S9RvmhkK/T+Vh3fd+LjTS6ddWdeupj535ms
t8ohg53u9seP+MZJwsUGgvc+Q82f4XevzdZ9k9gtd0wfPZFDNn5L5n2bK9RY
7R83sIF772RlGF9vPBx4r3RLrr2fDouu96jIfnFnohN6fss4xsfHHv+kD1G3
oGl3p2NwzkLJTX9vnQGY3W6z5fryPaxKGOfv//DZFx6OaMW5hnKKcnFiZCBs
r/rN+bJX3vgAGVai+m1UF5I4LqbEMGOnU/FcaNPwXDKx3vT7WuUky2HjmXC9
0uNexz4Il4UAlxh+KgP+PyelP4dI/hLF6pJ27zy2eaj5TxbK7up1037nDT+h
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
g4HQEF2tAAA=

-->

</rfc>
