<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.26 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-irtf-cfrg-partially-blind-rsa-01" category="info" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title abbrev="Partially Blind RSA Signatures">Partially Blind RSA Signatures</title>
    <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-partially-blind-rsa-01"/>
    <author initials="G. A." surname="Amjad" fullname="Ghous A. Amjad">
      <organization>Google</organization>
      <address>
        <email>gamjad@google.com</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="2025" month="April" day="02"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 37?>

<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>
    <?line 42?>

<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(sk, 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>sk</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>sk</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 is 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 that does not impose a
range limit on the public exponent.</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>
      <?line -18?>

</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>
          <t>"string" can be interpreted as a byte string with ASCII encoding of its individual character. "hello" is [ '0x68', '0x65', '0x6C', '0x6C', '0x6F' ].</t>
        </li>
        <li>
          <t>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.</t>
        </li>
        <li>
          <t>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.</t>
        </li>
        <li>
          <t>bit_len(n): Compute the minimum number of bits needed to represent the positive integer n.</t>
        </li>
        <li>
          <t>inverse_mod(x, n): Compute the multiplicative inverse of x mod n or fail if x and n are not co-prime.</t>
        </li>
        <li>
          <t>is_coprime(x, n): Return true if x and n are co-prime, and false otherwise.</t>
        </li>
        <li>
          <t>len(s): The length of a byte string, in bytes.</t>
        </li>
        <li>
          <t>random(n): Generate n random bytes using a cryptographically-secure random number generator.</t>
        </li>
        <li>
          <t>concat(x0, ..., xN): Concatenation of byte strings. For example,
concat(0x01, 0x0203, 0x040506) = 0x010203040506.</t>
        </li>
        <li>
          <t>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.</t>
        </li>
        <li>
          <t>random_prime(b): Return a random prime number of length b bits.</t>
        </li>
        <li>
          <t>is_prime(p): Return true if the input integer p is prime, and false otherwise.</t>
        </li>
      </ul>
    </section>
    <section anchor="core-protocol">
      <name>RSAPBSSA Protocol</name>
      <t>The RSAPBSSA protocol consists of two helper functions -- DeriveKeyPair and DerivePublicKey -- 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>(sk, pk)</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[
blind_msg, inv = Blind(pk, input_msg, info)
]]></artwork>
      <t>The client then sends <tt>blind_msg</tt> to the server, which then processes the message
by computing:</t>
      <artwork><![CDATA[
blind_sig = BlindSign(sk, blind_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(pk, 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>info</tt>
using the server public key <tt>pk</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(pk, msg, info)          Server(sk, pk, info)
  -------------------------------------------------------
  input_msg = Prepare(msg)
  blind_msg, inv = Blind(pk, input_msg, info)

                        blind_msg
                        ---------->

            blind_sig = BlindSign(sk, blind_msg, info)

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

  sig = Finalize(pk, input_msg, info, 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 = 2p' + 1, where p' is also a prime number.</t>
        <t>A signing key pair is a tuple (sk, pk), where each element is as follows:</t>
        <ul spacing="normal">
          <li>
            <t>sk = (n, p, q, phi, d), where phi = (p - 1)(q - 1), n = p * q, and d is the private exponent</t>
          </li>
          <li>
            <t>pk = (n, e), where n = p * q, and e is the public exponent such that d * e == 1 mod phi</t>
          </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:
- sk, metadata-specific private key (n, p, q, phi, d)
- pk, metadata-specific public key (n, e)

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. n = p * q
7. sk = (n, p, q, phi, d)
8. pk = (n, e)
9. output (sk, pk)
]]></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. p' = random_prime(bits - 1)
2. p = (2 * p') + 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 a "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(pk, msg, info)

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

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

Outputs:
- blind_msg, a byte string of length modulus_len
- 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(info), 4), info, msg)
2. encoded_msg = EMSA-PSS-ENCODE(msg_prime, bit_len(n) - 1)
   with Hash, MGF, and salt_len 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. pk_derived = DerivePublicKey(pk, info)
11. x = RSAVP1(pk_derived, r)
12. z = m * x mod n
13. blind_msg = int_to_bytes(z, modulus_len)
14. output blind_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 DerivePublicKey
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(sk, blind_msg, info)

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

Inputs:
- sk, private key (n, p, q, phi, d)
- blind_msg, encoded and blinded message to be signed, a
  byte string
- info, public metadata, a byte string

Outputs:
- blind_sig, a byte string of length modulus_len

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(blind_msg)
2. sk_derived, pk_derived = DeriveKeyPair(sk, info)
3. s = RSASP1(sk_derived, m)
4. m' = RSAVP1(pk_derived, s)
5. If m != m', raise "signing failure" and stop
6. blind_sig = int_to_bytes(s, modulus_len)
7. 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(pk, msg, info, blind_sig, inv)

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

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

Outputs:
- sig, a byte string of length modulus_len

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) != modulus_len, 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, modulus_len)
5. msg_prime = concat("msg", int_to_bytes(len(info), 4), info, msg)
6. pk_derived = DerivePublicKey(pk, info)
7. result = RSASSA-PSS-VERIFY(pk_derived, msg_prime, sig) with
   Hash, MGF, and salt_len as defined in the parameters
8. If result = "valid signature", output sig, else
   raise "invalid signature" and stop
]]></artwork>
        <t>Note that <tt>pk_derived</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>info</tt>.
Clients verify the signature over <tt>msg</tt> and <tt>info</tt> using the server's public
key <tt>pk</tt> as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>Compute <tt>pk_derived = DerivePublicKey(pk, info)</tt>.</t>
          </li>
          <li>
            <t>Compute <tt>msg_prime = concat("msg", int_to_bytes(len(info), 4), info, msg)</tt>.</t>
          </li>
          <li>
            <t>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>pk_derived</tt>, M as <tt>msg_prime</tt>, and <tt>S</tt> as <tt>sig</tt>.</t>
          </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 Derivation</name>
        <t>The public key derivation function (DerivePublicKey) derives a per-metadata public
key that is used in the core protocol. The hash function used for HKDF as defined in <xref target="RFC5869"/> 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[
DerivePublicKey(pk, info)

Parameters:
- modulus_len, the length in bytes of the RSA modulus n. This MUST be a power of 2.
- Hash, the hash function used to hash the message

Inputs:
- pk, public key (n)
- info, public metadata, a byte string

Outputs:
- pk_derived, metadata-specific public key (n, e')

Steps:
1. hkdf_input = concat("key", info, 0x00)
2. hkdf_salt = int_to_bytes(n, modulus_len)
3. lambda_len = modulus_len / 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, 0, lambda_len))
9. output pk_derived = (n, e')
]]></artwork>
      </section>
      <section anchor="augment-private-key">
        <name>Key Pair Derivation</name>
        <t>The key pair derivation function (DeriveKeyPair) derives a pair of private
and public keys specific to a metadata value that are used by the server
in the core protocol.</t>
        <artwork><![CDATA[
DeriveKeyPair(sk, info)

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

Inputs:
- sk, private key (n, p, q, phi, d)
- info, public metadata, a byte string

Outputs:
- sk_derived, metadata-specific private key (n, p, q, phi, d')
- pk_derived, metadata-specific public key (n, e')

Steps:
1. (n, e') = DerivePublicKey(n, info)
2. d' = inverse_mod(e', phi)
3. sk_derived = (n, p, q, phi, d')
4. pk_derived = (n, e')
5. Output (sk_derived, pk_derived)
]]></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 implementers. 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 Usage</name>
        <t>A server signing key <bcp14>MUST NOT</bcp14> be reused for any other protocol beyond RSAPBSSA. In particular,
the same signing key <bcp14>MUST NOT</bcp14> be used for both the RSAPBSSA and RSABSSA protocols. 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 instantiation of HKDF in DerivePublicKey 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>
          <t>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).</t>
        </li>
        <li>
          <t>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).</t>
        </li>
        <li>
          <t>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).</t>
        </li>
        <li>
          <t>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.</t>
        </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>
          <t>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.</t>
        </li>
        <li>
          <t>Concurrent one-more-unforgeability: The above holds even in the setting when an adversarial client is interacting
with multiple servers (signers) simultaneously.</t>
        </li>
        <li>
          <t>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.</t>
        </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="7" 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 DerivePublicKey in <xref target="augment-public-key"/> do cause errors in DeriveKeyPair in <xref target="augment-private-key"/>.
We note that an error in DeriveKeyPair would incur if the output of DerivePublicKey does not have an
inverse modulo phi. By choosing the RSA modulus as the product of two strong primes, we guarantee the output of
DerivePublicKey will never incur errors in DeriveKeyPair.</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 DeriveKeyPair 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 remains 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 DerivePublicKey function 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 DerivePublicKey. 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 susceptible to Denial of Service (DoS) attacks due to the flexibility of choosing public metadata used in
DerivePublicKey in <xref target="augment-public-key"/>. In particular, an attacker can pick public metadata such that
the output of DerivePublicKey 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.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative 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="10" month="July" 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.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-rsa-blind-signatures-14"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8017">
          <front>
            <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="J. Jonsson" initials="J." surname="Jonsson"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <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="RFC5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="RFC5756">
          <front>
            <title>Updates for RSAES-OAEP and RSASSA-PSS Algorithm Parameters</title>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <author fullname="D. Brown" initials="D." surname="Brown"/>
            <author fullname="K. Yiu" initials="K." surname="Yiu"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="T. Polk" initials="T." surname="Polk"/>
            <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 anchor="sec-informative-references">
        <name>Informative References</name>
        <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="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="3" month="October" 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-16"/>
        </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"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <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>
    <?line 616?>

<section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to thank Nikita Borisov for pointing out an issue with a prior attempt at mitigating DoS attacks.</t>
    </section>
    <section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>This section includes test vectors for the RSAPBSSA-SHA384-PSS-Deterministic variant defined in <xref target="core-protocol"/>.
The following parameters are specified for each test vector, where each hexidecimal value uses an unsigned big-endian convention:</t>
      <ul spacing="normal">
        <li>
          <t>p, q, d, e, n: RSA private and public key parameters, each encoded as a hexadecimal string.</t>
        </li>
        <li>
          <t>msg: Input message being signed, encoded as a hexadecimal string. The hash is computed using SHA-384.</t>
        </li>
        <li>
          <t>info: Public metadata bound to the signature, encoded as a hexadecimal string.</t>
        </li>
        <li>
          <t>eprime: The augmented public key exponent corresponding to e and metadata, encoded as a hexadecimal string.</t>
        </li>
        <li>
          <t>r: The message blinding value, encoded as a hexadecimal string.</t>
        </li>
        <li>
          <t>salt: Randomly-generated salt used when computing the signature. The length is 48 bytes.</t>
        </li>
        <li>
          <t>blind_msg, blind_sig: The protocol values exchanged during the computation,
encoded as hexadecimal strings.</t>
        </li>
        <li>
          <t>sig: The output message signature.</t>
        </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
info: 6d65746164617461
eprime: 30581b1adab07ac00a5057e2986f37caaa68ae963ffbc4d36c16ea5f3
689d6f00db79a5bee56053adc53c8d0414d4b754b58c7cc4abef99d4f0d0b2e29
cbddf746c7d0f4ae2690d82a2757b088820c0d086a40d180b2524687060d768ad
5e431732102f4bc3572d97e01dcd6301368f255faae4606399f91fa913a6d699d
6ef1
r: d55491221c9a9ce5687b84669880abbc4db57c8f82864a450a5bf7c3f0
902884fa418c74bf663f3bfcff74a4792356f3ce052f128b084f8b028cf432533
27514f4b38430c69f19f155634429803badd1f6849d8603882eb9b648b697cb2f
2c4069b504562e19bb9f1cf99da47c198c2ae04f4bd3add78025e80f146edce48
dc3e9dc0ba3ee14bc97489050e26dc8935f3ecfcaea07c9c1a3d8e41be1e49dc8
aa171ac4cec9d1cddd8066b13767901dcb339e2cce40d11f5cff6c870012bca49
109ce6e81e165d3831531cbf8503f3cfde68340789979cba96602e70613a13869
aff57f2170e31ebe85564e3f026d8cd1835e59144fb8c008391c55d2fb1a5488
salt: 648ea74482fbab69876817ee3c2055a6921a458648c802c09a23f8825b2
59724e41c960ef29febe16a04e120c8b1cc1a
blind_msg: cfd613e27b8eb15ee0b1df0e1bdda7809a61a29e9b6e9f3ec7c3
45353437638e85593a7309467e36396b0515686fe87330b312b6f89df26dc1cc8
8dd222186ca0bfd4ffa0fd16a9749175f3255425eb299e1807b76235befa57b28
f50db02f5df76cf2f8bcb55c3e2d39d8c4b9a0439e71c5362f35f3db768a5865b
864fdf979bc48d4a29ae9e7c2ea259dc557503e2938b9c3080974bd86ad8b0daa
f1d103c31549dcf767798079f88833b579424ed5b3d700162136459dc29733256
f18ceb74ccf0bc542db8829ca5e0346ad3fe36654715a3686ceb69f73540efd20
530a59062c13880827607c68d00993b47ad6ba017b95dfc52e567c4bf65135072
b12a4
blind_sig: ca7d4fd21085de92b514fbe423c5745680cace6ddfa864a9bd97
d29f3454d5d475c6c1c7d45f5da2b7b6c3b3bc68978bb83929317da25f491fee8
6ef7e051e7195f3558679b18d6cd3788ac989a3960429ad0b7086945e8c4d38a1
b3b52a3903381d9b1bf9f3d48f75d9bb7a808d37c7ecebfd2fea5e89df59d4014
a1a149d5faecfe287a3e9557ef153299d49a4918a6dbdef3e086eeb264c0c3621
bcd73367195ae9b14e67597eaa9e3796616e30e264dc8c86897ae8a6336ed2cd9
3416c589a058211688cf35edbd22d16e31c28ff4a5c20f1627d09a71c71af372e
dc18d2d7a6e39df9365fe58a34605fa1d9dc53efd5a262de849fb083429e20586
e210e
sig: cdc6243cd9092a8db6175b346912f3cc55e0cf3e842b4582802358dddf6f
61decc37b7a9ded0a108e0c857c12a8541985a6efad3d17f7f6cce3b5ee20016e
5c36c7d552c8e8ff6b5f3f7b4ed60d62eaec7fc11e4077d7e67fc6618ee092e20
05964b8cf394e3e409f331dca20683f5a631b91cae0e5e2aa89eeef4504d24b45
127abdb3a79f9c71d2f95e4d16c9db0e7571a7f524d2f64438dfb32001c00965f
f7a7429ce7d26136a36ebe14644559d3cefc477859dcd6908053907b325a34aaf
654b376fade40df4016ecb3f5e1c89fe3ec500a04dfe5c8a56cad5b086047d2f9
63ca73848e74cf24bb8bf1720cc9de4c78c64449e8af3e7cddb0dab1821998

// 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
info:
eprime: 2ed579fcdf2d328ebc686c52ccaec247018832acd530a2ac72c0ec2b9
2db5d6bd578e91b6341c1021142b45b9e6e5bf031f3dd62226ec4a0f9ef99e45d
d9ccd60aa60a0c59aac271a8caf9ee68a9d9ff281367dae09d588d3c7bca7f18d
e48b6981bbc729c4925c65e4b2a7f054facbb7e5fc6e4c6c10110c62ef0b94eec
397b
r: 532103acf62670e3176eb1cfee7c2c46c7986704b869387924c33e8358
8c7cac67882570aede836b51b44a565c872a91bbf4f0f8396019113ef382963d3
a51b91429993e821217d3e85b2253e0daa0e9cfc440c37a37707f7aed383d98b3
150f21e1146c58c28d4a49046b8e97f834e4cb95e5483dfc42eaa17bdce947631
7f710b7488cc06cf61a1c449faa1d34119f2c3cd6ead79f9de14358b1c750bf2c
312fcbba3c511341fd4952ba2fcd486a9e81fd829e47cd8a0ac0273d7594c69eb
4aebfaec3c59aa1a016582410d9f4be14dac4b1a66f61eeb3e108af3868e410f7
7436765ba1df7c9a5cf37d8ec3dced6f5689da9703618a5cc7bf6d60f7b4209c
salt: 134520fb9ae6076594b4488fa31cae4e8e3efaca5ae4377bd586aac58e9
0f8925826b4b4fff2e21fdb933c4fbb6467a2
blind_msg: 5e6568cd0bf7ea71ad91e0a9708abb5e97661c41812eb994b672
f10aa8983151113aeaabcf1306fa5a493e3dbdd58fc8bdb61aac934fae832676b
cab7abacdcc1b9c1f2af3586ae009042293b6945fee0aeffb2d2b8a24f82614b8
be39bab71a535f6d65f1631e927dbd471b0753e7a63a201c7ecd26e7fbbb5e21e
02f865b64e20731004c395b0e059a92fffa4c636ac4c00db9aa086b5dd1a3dd10
1bb04970b12ca3f4936f246e32d394f328cea2510554060e8d291acdbee04b8bc
91e967241ba45f3509d63ded5f9b358f4216f37a885e563b7baa93a717ca7cdbe
10e398d14bb2d5a1376b4a5f83226ce2c575087bc28d743caeff9c1b11cc8bd02
f5f14
blind_sig: 72c4e0f4f677aa1dbb686e23b5944b3afdc7f824711a1f7486d1
ed6fa20aad255a1412885aee04c64359964e694a713da2a1684325c1c31401cac
1ea39a9e454675b55f743ff144ac605d0ed254b12d9bdd43b0e8a17c0d4711239
732e45e4166261d0b16d2f29403c5f2584a29b225daa7530ba15fc9af15ed2ce8
fcb126ad0b0758fd522fbf99a83e4cfe0539aa264d06a1633deee0053f45fc8a9
44f1468a0c0c449155139779a3230c8fa41a81858418151fa195f57ea645699f5
50d3cb37c549542d436071d1af74e629f938fa4717ca9def382fc35089e4caec9
e5d740c38ecb2aa88c90176d2f322866acfd50e2b92313161e81327f889aca0c9
4bcb8
sig: a7ace477c1f416a40e93ddf8a454f9c626b33c5a20067d81bdfef7b88bc1
5de2b04624478b2134b4b23d91285d72ca4eb9c6c911cd7be2437f4e3b24426bc
e1a1cb52e2c8a4d13f7fd5c9b0f943b92b8bbcba805b847a0ea549dbc249f2e81
2bf03dd6b2588c8af22bf8b6bba56ffd8d2872b2f0ebd42ac8bd8339e5e638061
99deec3cf392c078f66e72d9be817787d4832c45c1f192465d87f6f6c333ce1e8
c5641c7069280443d2227f6f28ff2045acdc368f2f94c38a3c909591a27c93e17
78630aeeeb623805f37c575213091f096be14ffa739ee55b3f264450210a4b2e6
1a9b12141ca36dd45e3b81116fc286e469b707864b017634b8a409ae99c9f1

// 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:
info: 6d65746164617461
eprime: 30581b1adab07ac00a5057e2986f37caaa68ae963ffbc4d36c16ea5f3
689d6f00db79a5bee56053adc53c8d0414d4b754b58c7cc4abef99d4f0d0b2e29
cbddf746c7d0f4ae2690d82a2757b088820c0d086a40d180b2524687060d768ad
5e431732102f4bc3572d97e01dcd6301368f255faae4606399f91fa913a6d699d
6ef1
r: 6e1de89fc58417836aa76fefe4876b8b311af2eb94a8226d5796273171
48551d90b6f9db614b590e7f66f34644a2f6a3568ec78852b7f45876f576a7ee6
0c19bb0fbbdf1c85d7b36cf7bdf80fb925830c07285efae69e0c019d8d99fd5c6
20f83361c9411541fddf4bfe27e73f756bf594742a8253119d134e1ad67f02228
59c4ab243868bb23a6468c01ead9a617657056685f19fcd423b9e916c5e3e3b21
f92d0e12667d695084a42ae97a548d5982a51b67dd09c188c051d20236e24b231
e80a96449390e9032bad350645f5d4a162ddf3d61506ef6737b4f9fe6064a1d2f
afc7849e5039a98ebf14a800dc2423fccc1293f28a2c66ec22983cab922c1cc6
salt: 1ade5e965d1946a69dc495e78c8524910094f08405471664d4898fa3612
bf03fd03b3ae8140a737cb13e223e35219b58
blind_msg: 92d5456738e0cfe0fa770b51e6a72d633d7cec3a945459f1db96
dbc500a5d1bca34a839059579759301c098231b102fb1e114bf9f892f42f902a3
36f4a3585b23efa906dfcb94213f4d3b39951551cedecbf51efa213ad030cf821
ee3fa46a57d67429f838ff728f47111f7f1b22000a979c0f56cc581396935780d
76173410d2a8a5688cd59622903008fe50af1fcc5e7cf96affad7e60fbed67996
c7a377effa0f08d9273cd33536b2625c9575d10636cc964636a1500f4fcb22aab
bef77fe415cbc7245c1032d34bd480ee338f55be0a79c0076d9cf9c94c0db3003
a33b23c62dbd1a85f2b15db5d153b318cca53c6d68e1e63bafa39c9a43be72f36
d2569
blind_sig: a76a1c53566a9781de04d87e8c3a0bc902b47819e7b900580654
215b0a710cb563b085b5e9fff150791f759da03a139dfc9159c21410f1e3d345b
8c5dcca35211772900f85c5eec065987cbdbf303e9651196223263a713e4135d6
b20bfa8fb8212341665647a9a7e07a831ccbf9e62d9366ec9ac0bbe96228e6fbb
848f8f6f474cce68e3556dc882847e9e61b5b5e02bbfd6152aeca74e8782a54ff
e6552d63fb837738a05044b38f7e908c4989b202bd858695c61e12cf9d47ef276
a17917e39f942871defd9747541957b1e2f8950da43c9a05ba4835bded23c24cf
64edfee10dd0c70b071427cfcbb8b5eb225daf149a6b4d42bebcc536380a9d753
a8b1e
sig: 02bc0f2728e2b8cd1c1b9873d4b7f5a62017430398165a6f8964842eaa19
c1de292207b74dc25ee0aa90493216d3fbf8e1b2947fd64335277b34767f987c4
82c69262967c8a8aaf180a4006f456c804cdc7b92d956a351ad89703cc76f69ed
45f24d68e1ae0361479e0f6faf10c3b1582de2dcd2af432d57c0c89c8efb1cf3a
c5f991fe9c4f0ad24473939b053674a2582518b4bd57da109f4f37bc91a2f806e
82bb2b80d486d0694e663992c9517c946607b978f557bbb769d4cd836d693c77d
a480cd89b916e5e4190f317711d9c7e64528a314a14bf0b9256f4c60e9ddb5505
83c21755ab882bdfdf22dc840249389b1e0a2189f58e19b41c5f313cddce29

// 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:
info:
eprime: 2ed579fcdf2d328ebc686c52ccaec247018832acd530a2ac72c0ec2b9
2db5d6bd578e91b6341c1021142b45b9e6e5bf031f3dd62226ec4a0f9ef99e45d
d9ccd60aa60a0c59aac271a8caf9ee68a9d9ff281367dae09d588d3c7bca7f18d
e48b6981bbc729c4925c65e4b2a7f054facbb7e5fc6e4c6c10110c62ef0b94eec
397b
r: 35deeb769ae3dce60033cbaeceeec511cd980307f53810c1b33934eeee
c194283834419fb190881213cfc0d91ff6307862ce143586ad9580057e3af6bb4
a405075ed9abf1f3b5a5cfb0c7fc59b952401cb28c04f9f85a9a3708fd51c74af
a1a1028a821beb2f8165678657f0d2effb7a1add5421216f3c50253a6f8d0d8ed
492f947d58b42527a2249b08e5ab05c25362ad8112bdea931544711b2a3d30e61
e2c8a130ea7f90fe915b5c3adaa24a6c300c23d8f670d330b592a7c05f7588324
688ae10e06290ab160096ce132a5ed220d2fbe6b4722cc30e05316b30f500b2ac
15038555289ea405025740a1d2a3098d34d094b566d0b973e661d855fb90be3c
salt: df4fbdf415184c20fad0418f27c35974db8c321e84c54b21e1e2619dbfa
0ad70db62c01783ffe796e8474596d7eb3fd8
blind_msg: ba562cba0e69070dc50384456391defa410d36fa853fd235902f
f5d015d688a44def6b6a7e71a69bff8ee510f5a9aa44e9afddd3e766f2423b3fc
783fd1a9ab618586110987c1b3ddce62d25cae500aa92a6b886cb609829d06e67
fbf28fbbf3ee7d5cc125481dd002b908097732e0df06f288cc6eb54565f8153d4
80085b56ab6cb5801b482d12f50558eb3cb0eb7a4ff8fcc54d4d7fcc2f8913a40
1ae1d1303ead7964f2746e4804e2848bba87f53cf1412afedc82d9c383dd095e0
eb6f90cc74bc4bb5ea7529ded9cde2d489575d549b884379abe6d7b71969e6a9c
09f1963d2719eefccd5f2a407845961ccc1fa580a93c72902b2499d96f89e6c53
fc888
blind_sig: 280c5934022fd17f7f810d4f7adf1d29ced47d098834411d6721
63cc793bcaad239d07c4c45048a682995950ce84703064cd8c16d6f2579f7a65b
66c274faccc6c73c9d299dcf35c96338c9b81af2f93554a78528551e04be931c8
502ee6a21ef65d1fa3cd049a993e261f85c841b75857d6bf02dd4532e14702f8f
5e1261f7543535cdf9379243b5b8ca5cd69d2576276a6c25b78ab7c69d2b0c568
eb57cf1731983016dece5b59e75301ca1a148154f2592c8406fee83a434f7b319
2649c5be06000866ff40bf09b558c7af4bbb9a79d5d13151e7b6e602e30c4ab70
bbbce9c098c386e51b98aefab67b8efc03f048210a785fd538ee6b75ecd484c13
40d91
sig: b7d45ec4db11f9b74a6b33806e486f7ee5f87c4fa7c57d08caf0ca6d3ba5
5e66bf0769c84b9187b9a86e49ba0cb58348f01156ac5bc2e9570fe0a8c33d0ad
049a965aeb2a8d8a3cbb30f89a3da6732a9bb3d9415141be4e9052f49d422301a
9cfce49947db7d52a1c620b7106ae43afbcb7cb29b9c215e0c2b4cf8d62db6722
4dd3de9f448f7b6607977c608595d29380b591a2bff2dff57ea2c77e9cdf69c18
21ff183a7626d45bbe1197767ac577715473d18571790b1cf59ee35e64362c826
246ae83923d749117b7ec1b4478ee15f990dc200745a45f175d23c8a13d2dbe58
b1f9d10db71917708b19eeeab230fe6026c249342216ee785d9422c3a8dc89
]]></artwork>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+2d+3Yct7Xm/8dT1FHWGlHnkEzdL1pxEkW2E63EtsZyciaT
yTJRKBTZEdnd7uqWxHh8nmWeZZ5sfhuoa5OUFZ/MzD9SLiK7q1DAxt7f/r4N
oHR2dqb2q/21fRo8eql3+5W+vr4NfnO9WjfB16+eBa9Wl2u9P+xs90jput7Z
Nx9wodF7e7nZ3T4NVut2o9Rqu3sa7HeHbh+HYRXG6rW9fbvZNU+DF+u93a3t
/uzTnW73qtvrdfOtvt6s6c+t7dR29TT4y35jToNus9vvbNvx0+2N/PBXpZqN
WesbLm3k7rPVbt+emXZ3ebYdOnhWSwfPdp0+CyPVHeqbVdetNuv97ZbbXnz9
zedK6cP+arN7qoKzgP52T4PfngfP+O/N33SjAv74Z/z2anPoll9sdpd6vfq7
3tMiF2w2l9fWfWFv9OoaQ11qufbXl+6bc7O5eTQ95dV58Du7bnYr87rbrGcP
emU2+/2d737sWZ3c9evuarpNnjc97rkb1L9vNvMxPb/arbr9Zntld4tvlw97
fr05NO213i0HZ/TbX19ZvV2tL+vVvjtnGmfD+z3NnQd/OA/+bDezJ/7evlmt
j775UTO+fnt9aze/Nh1Duj7c1Ct9bpvDI6XWm90Nt72xT3EyXG36TZ2dnQW6
7vY7bfZKfXO16gLc5XBj1/ug21qzale2C3RQjx7cDR4cbHcbfG5zHeyvNFcf
tlucrwu2By42wY3d60bv9bl6sQ9oVq8D+25v1+JXwX7DTVba+80r2hxb2lnD
k4mY4dlNUN+6S59//vVvz31/b1ZNw9DVzyQudpvmYMQkSn3//b/0DX7y4uzT
88nPxa+9h4+d7374YTa+vi9+lOruCE+Dxq43e9sMPT4PnKlkWMH+7cZF0u00
jNru31q7VuZ6JYYkWoPO7t7gPiebnbOg3T0J3uJPVp59iy8Q4EyBGAZ/3B72
Vl1wXfCJQ4yT7vUp1/Dxtzfd5ZOL0/7ei/EzLny5s3TDnrgrfNe2/qNG8Whn
903rxrrdrd4APsxR1+lL2uGeC+n+m1Uzmdz3/tR1/6J7LW0q+Vz6jzcHwNOd
e/wwz4M/bnmajOTa7scH06fRomq6Ori2erfuAix8Rbv94HQ368Rwidjk4px5
Dxx2mQPhJk3R8o3V6y54sFXpgR8mMzDZ7cKNbnqQuucuho7nDb56pcWyb/Ru
ZZlyvtfbLf7uwhLYfbvaXwXff/+rl1+/+NOz538+e/ns1SvvjhZ3dIY3t1vd
dWeDKX74QdVWnqUDo9ebNW1dEypabAc6XK2ubXDobHvADRc2lDm+Xt2sxC9B
C4lCtdoTv9b1P8CEK0JJG+bhZtPIhB/FprhbbQN6szErLe1I95UOTnrPOJ3C
/QkmX+2c7V0vDOmBgD6906bExQAyhKUDh9UAC/Tn9Xrz1iFAjY2DuyHC5TIf
+9WNFfP6cHBtnXuAkhnwBlnYXmywlSBaGez2OdPcG/F06tvN6vJqL0Pm/kbR
B7s2m8Zy5Xa1c83M+x7wU/BjxhgeearGpzCN8gzfdsOzZHYXUcPN+Io9vzw/
lcgZJsB53NpOLb3R1wfrfYrPx3u56bD30zDOdofbcKm9vvbdnlnGz8GVfmMD
4oV4l+93ZKOd3vHwm81hDW5j6wmz35MKxPU1n3H9EBPvTQAjeEoIvXTXnwjY
HtOjkRr58T7bbknSq3dPzvnmZkXHxWeGJ67WwH3/yw8/nAZ90/IN3bbtau2D
ojuYK/r8Vt/6Topngf6Ha2frk8PaQb5tnsxQv58+fNFnINcdHTjWpXcuB5y9
fPWK2KudAV3D4zysbrabjphSO73G1C5AA0l5V2P44W3M5np/Ljns+Wb9hp+d
B0sUfCqdX/l5Yxb8pAsN7IJHX/zx1TePTv3fwZdfuZ+//uy//vHF1599Kj+/
+t2zP/xh/EH1V7z63Vd//MOn00/Tnc+/+uKLz7781N/Mp8HiI/Xoi2d/fuTx
/9FXL7958dWXz/7wyEPN3Dm0ZDEHJC6NkXQESXSnGtuZ3ar2M/Gb5y//9/+K
0kCy9OfP4yiqSMH+lzIqUn4B9tf+aZs1XuF/lfSocGZgWVrBX5if7Wqvrwkg
gKC7EjSRhIE1//UvYpm/Pg1+UZttlP6y/0AGvPhwsNniQ2ezu5/cudkb8Z6P
7nnMaM3F50eWXvb32Z8Xvw92n334i1/hszY4i8pf/VKJC3258fjo/aXdXF9v
3op7Mxk3nZsegTtMudscLuHn+6MJZPKGqerpQZ9gNlu76yHkeNYhj2fBI4gj
D3o0hMxy/oU23pJ0/EV9VL96/uKFR8Y+vcKJua9ZQSMOJD5zpQVQhUM8ugLM
No8kov8SPA7f5eXjU/d31v/9/Ojvzx8Hfz2nW/LU7tv95ttVn1n4W351nz/1
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
2r3HxvXtjNTOwtZtOx62dRwlqWHjia+2tWSO3WW/iPas83XZuUnGeHKRO9Z0
Z6Xk6Ty7L+fzVX+0tYfXGdoPO657Wz+cO9v57E1z7DpRz8p73iHGMNI3/X4W
ya5jupNlhLvLy3IWst8kNdbIR9Y3X2/maQTT3m/knk+B7V8aeKdtdV/b/aQP
jc+r3HfKm326ujeq3Gby2ldG+vebjdt4OjUsDi7H2h8l9rXZe5rd60uPAs+H
RNAH/hc9RnivXlKjOWka3WSGcvJK49sbuXIQspNY0TckkG4AhGG5cCl4Bk6u
jlXepN9lvqfC8h1FB8v2qzXuLaqnc8m4UPieT/bbK2d98IWDufCa3twT3DXI
BHZHbMexx/7FxcMCXp8Y/IkFt5hBOI2virsz5oVlBnv6XR0PjNzplnd7eXcF
rASYnr3fYzDC7E1qUlvwh63IS72/THH+0JNmOwL7NkUJeD9jzAvD3vPQY/sq
r9Rm70dSz+Z7K931QrBG67rVnHuyzINeMX939iR//IS416LM5kNNr+5773xo
s9uQvW9cFuurDcMczd5w+pARRxbrzyj44FfdlWN6bqO1e+H2wS3X+2156/kG
zMduE+Iu2G62h2sf0J1b2Hd53a5XXtLKa5uwiVJz1+wOnVt+7SPhztXByaeb
V0+QsHttXgM+BzvklPbavltNrxIYKeTx4HoOdYcKPnwc8HgHrIzWPb93r+3K
vL77fr75y3zeQ4lXbi/1rX8f9qnbUdG/BNYd95+9dNzpl27vI/a+d29JSUfy
nqyV9v3z+w6YezOU/Po0sNzd7fMf3G6w2in869VoZQEGmFXn37igPj96q/f0
7wd4l3L5dIt28Lrm2DI983Ot+gqIvhqYsX/DSV9Z9A90mloqbfKyNTLopWx2
mvXO8d8Zbg/33X2guNcNsN6DxGKj/PC+BqGP6zvkayqsL8m3N+N8SbmblpOX
m91c0frFsy+f3b8raWRZsmkAdu6u7OO5/9cmakYrjTwz8uJ6RLxz1X6vkP9H
UbpejskbK3xc6PXr4MvV6xXd+M1GqjtvXAe3m9V60JVua0TXDa93dxs3ZIb3
e1kScdUib3a5fm546cw3wkT+ZGV/w/EGq3H7016ueeOvGbnRj651jSsmizXl
o/1O50cvmp6vRi9WU8dZmXVm8YqpK9Cj4eqbERgP/WH0w3p47+T0MmMzvivd
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
zDAqqS7B7Mg190qB/wMinFgnpaoAAA==

-->

</rfc>
