<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.3.6 -->
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-irtf-cfrg-opaque-03" category="info" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 2.39.0 -->
  <front>
    <title abbrev="OPAQUE">The OPAQUE Asymmetric PAKE Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-opaque-03"/>
    <author initials="H." surname="Krawczyk" fullname="Hugo Krawczyk">
      <organization>Algorand Foundation</organization>
      <address>
        <email>hugokraw@gmail.com</email>
      </address>
    </author>
    <author initials="K." surname="Lewi" fullname="Kevin Lewi">
      <organization>Novi Research</organization>
      <address>
        <email>lewi.kevin.k@gmail.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>
    <date year="2021" month="February" day="21"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document describes the OPAQUE protocol, a secure asymmetric
password-authenticated key exchange (aPAKE) that supports mutual
authentication in a client-server setting without reliance on PKI and
with security against pre-computation attacks upon server compromise.
In addition, the protocol provides forward secrecy and the ability to
hide the password from the server, even during password registration.
This document specifies the core OPAQUE protocol, along with several
instantiations in different authenticated key exchange protocols.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://github.com/cfrg/draft-irtf-cfrg-opaque"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="intro" numbered="true" toc="default">
      <name>Introduction</name>
      <t>Password authentication is the prevalent form of authentication on
the web and in many other applications. In the most common
implementation, a client authenticates to a server by sending its client
ID and password to the server over a TLS connection. This makes
the password vulnerable to server mishandling, including accidentally
logging the password or storing it in cleartext in a database. Server
compromise resulting in access to these plaintext passwords is not an
uncommon security incident, even among security-conscious companies.
Moreover, plaintext password authentication over TLS is also vulnerable
to TLS failures, including many forms of PKI attacks, certificate
mishandling, termination outside the security perimeter, visibility
to middleboxes, and more.</t>
      <t>Asymmetric (or Augmented) Password Authenticated Key Exchange (aPAKE)
protocols are designed to provide password authentication and
mutually authenticated key exchange in a client-server setting without relying on PKI (except
during client/password registration) and without disclosing passwords
to servers or other entities other than the client machine. A secure
aPAKE should provide the best possible security for a password
protocol. Namely, it should only be open to inevitable attacks, such as
online impersonation attempts with guessed client passwords and offline
dictionary attacks upon the compromise of a server and leakage of its
password file. In the latter case, the attacker learns a mapping of
a client's password under a one-way function and uses such a mapping to
validate potential guesses for the password. Crucially important is
for the password protocol to use an unpredictable one-way mapping.
Otherwise, the attacker can pre-compute a deterministic list of mapped
passwords leading to almost instantaneous leakage of passwords upon
server compromise.</t>
      <t>Despite the existence of multiple designs for
(PKI-free) aPAKE protocols, none of these protocols are secure against
pre-computation attacks. In particular, none of these protocols can
use the standard technique against pre-computation that combines
<em>secret</em> random values ("salt") into the one-way password mappings.
Either these protocols do not use a salt at all or, if they do, they
transmit the salt from server to client in the clear, hence losing the
secrecy of the salt and its defense against pre-computation. Furthermore,
transmitting the salt may require additional protocol messages.</t>
      <t>This document describes OPAQUE, a PKI-free secure aPAKE that is secure
against pre-computation attacks and capable of using a secret salt.
OPAQUE provides forward secrecy (essential for
protecting past communications in case of password leakage) and the
ability to hide the password from the server - even during password
registration. Furthermore, OPAQUE enjoys good performance and an array of additional
features including the ability to increase
the difficulty of offline dictionary attacks via iterated hashing
or other hardening schemes, and offloading these operations to the
client (that also helps against online guessing attacks); extensibility of
the protocol to support storage and
retrieval of client's secrets solely based on a password; being
amenable to a multi-server distributed implementation where offline
dictionary attacks are not possible without breaking into a threshold
of servers (such a distributed solution requires no change or awareness
on the client side relative to a single-server implementation).</t>
      <t>OPAQUE is defined and proven as the composition of two functionalities:
an oblivious pseudorandom function (OPRF) and an authenticated key exchange (AKE) protocol. It can be seen
as a "compiler" for transforming any suitable AKE protocol into a secure
aPAKE protocol. (See <xref target="security-considerations" format="default"/> for requirements of the
OPRF and AKE protocols.) This document specifies one OPAQUE instantiation
based on 3DH <xref target="SIGNAL" format="default"/>. Other instantiations are possible, as discussed in
<xref target="alternate-akes" format="default"/>, but their details are out of scope for this document.
In general, the modularity of OPAQUE's design makes it easy to integrate with
additional AKE protocols, e.g., IKEv2, and with future ones such as those
based on post-quantum techniques.</t>
      <t>OPAQUE consists of two stages: registration and authenticated key exchange.
In the first stage, a client registers its password with the server and stores
its encrypted credentials on the server. In the second stage, a client obtains
those credentials, recovers them using the client's password, and subsequently uses
them as input to an AKE protocol.</t>
      <t>Currently, the most widely deployed PKI-free aPAKE is SRP <xref target="RFC2945" format="default"/>, which is
vulnerable to pre-computation attacks, lacks proof of security and is less efficient
relative to OPAQUE. Moreover, SRP requires a ring as it mixes addition and
multiplication operations, and thus does not work over plain elliptic curves. OPAQUE
is therefore a suitable replacement for applications that use SRP.</t>
      <t>This draft complies with the requirements for PAKE protocols set forth in
<xref target="RFC8125" format="default"/>.</t>
      <section anchor="requirements-notation" numbered="true" toc="default">
        <name>Requirements Notation</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP&nbsp;14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/> when, and only when, they
appear in all capitals, as shown here.</t>
      </section>
      <section anchor="notation" numbered="true" toc="default">
        <name>Notation</name>
        <t>The following terms are used throughout this document to describe the
operations, roles, and behaviors of OPAQUE:</t>
        <ul spacing="normal">
          <li>Client (C): Entity that has knowledge of a password and wishes to authenticate.</li>
          <li>Server (S): Entity that authenticates clients using passwords.</li>
          <li>password: An opaque byte string containing the client's password.</li>
          <li>I2OSP and OS2IP: Convert a byte string to and from a non-negative integer as described in Section 4 of <xref target="RFC8017" format="default"/>. Note that these functions operate on byte strings in big-endian byte order.</li>
          <li>concat(x0, ..., xN): Concatenate byte strings. For example,
<tt>concat(0x01, 0x0203, 0x040506) = 0x010203040506</tt>.</li>
          <li>random(n): Generate a cryptographically secure pseudorandom byte string of length <tt>n</tt> bytes.</li>
          <li>xor(a,b): Apply XOR to byte strings. For example, <tt>xor(0xF0F0, 0x1234) = 0xE2C4</tt>.
It is an error to call this function with two arguments of unequal
length.</li>
          <li>ct_equal(a, b): Return <tt>true</tt> if <tt>a</tt> is equal to <tt>b</tt>, and false otherwise.
This function is constant-time in the length of <tt>a</tt> and <tt>b</tt>, which are assumed to be of equal length, irrespective of the values <tt>a</tt> or <tt>b</tt>.</li>
        </ul>
        <t>Except if said otherwise, random choices in this specification refer to
drawing with uniform distribution from a given set (i.e., "random" is short
for "uniformly random"). Random choices can be replaced with fresh outputs from
a cryptographically strong pseudorandom generator, according to the requirements
in <xref target="RFC4086" format="default"/>, or pseudorandom function.</t>
        <t>The name OPAQUE is a homonym of O-PAKE where O is for Oblivious. The name
OPAKE was taken.</t>
      </section>
    </section>
    <section anchor="dependencies" numbered="true" toc="default">
      <name>Cryptographic Protocol and Algorithm Dependencies</name>
      <t>OPAQUE relies on the following protocols and primitives:</t>
      <ul spacing="normal">
        <li>
          <t>Oblivious Pseudorandom Function (OPRF, <xref target="I-D.irtf-cfrg-voprf" format="default"/>, version -06):
          </t>
          <ul spacing="normal">
            <li>Blind(x): Convert input <tt>x</tt> into an element of the OPRF group, randomize it
by some scalar <tt>r</tt>, producing <tt>M</tt>, and output (<tt>r</tt>, <tt>M</tt>).</li>
            <li>GenerateKeyPair(): Generate an OPRF private and public key. OPAQUE only requires
an OPRF private key. We write <tt>(oprf_key, _) = GenerateKeyPair()</tt> to denote use
of this function for generating secret key <tt>oprf_key</tt> (and discarding the
corresponding public key).</li>
            <li>Evaluate(k, M): Evaluate input element <tt>M</tt> using private key <tt>k</tt>, yielding
output element <tt>Z</tt>.</li>
            <li>Finalize(x, r, Z): Finalize the OPRF evaluation using input <tt>x</tt>,
random scalar <tt>r</tt>, and evaluation output <tt>Z</tt>, yielding output <tt>y</tt>.</li>
            <li>SerializeScalar(s): Map a scalar <tt>s</tt> to a unique byte array <tt>buf</tt> of fixed
length.</li>
            <li>DeserializeScalar(buf): Map a byte array <tt>buf</tt> to a scalar <tt>s</tt>, or fail if
the input is not a valid byte representation of a scalar.</li>
            <li>SerializedElement: A serialized OPRF group element, a byte array of fixed
length.</li>
            <li>SerializedScalar: A serialized OPRF scalar, a byte array of fixed length.</li>
          </ul>
        </li>
      </ul>
      <t>Note that we only need the base mode variant (as opposed to the verifiable mode
variant) of the OPRF described in <xref target="I-D.irtf-cfrg-voprf" format="default"/>.</t>
      <ul spacing="normal">
        <li>
          <t>Cryptographic hash function:
          </t>
          <ul spacing="normal">
            <li>Hash(m): Compute the cryptographic hash of input message <tt>m</tt>. The type of the
hash is determined by the chosen OPRF group.</li>
            <li>Nh: The output size of the Hash function.</li>
          </ul>
        </li>
        <li>
          <t>Authenticated Key Exchange (AKE, <xref target="instantiations" format="default"/>):
          </t>
          <ul spacing="normal">
            <li>Npk: The size of the public keys used for the key exchange protocol.</li>
            <li>Nsk: The size of the private keys used for the key exchange protocol.</li>
          </ul>
        </li>
        <li>
          <t>Memory Hard Function (MHF):
          </t>
          <ul spacing="normal">
            <li>Harden(msg, params): Repeatedly apply a memory-hard function with parameters
<tt>params</tt> to strengthen the input <tt>msg</tt> against offline dictionary attacks.
This function also needs to satisfy collision resistance.</li>
          </ul>
        </li>
      </ul>
    </section>
    <section anchor="offline-phase" numbered="true" toc="default">
      <name>Offline Registration</name>
      <t>Registration is executed between a client C and a
server S. It is assumed S can identify C and the client can
authenticate S during this registration phase. This is the only part
in OPAQUE that requires an authenticated channel, either physical, out-of-band,
PKI-based, etc. This section describes the registration flow, message encoding,
and helper functions. Moreover, C has a key pair (client_private_key, client_public_key) for an AKE protocol
which is suitable for use with OPAQUE; See <xref target="online-phase" format="default"/>. The private-public keys (client_private_key, client_public_key) may be randomly generated (using a cryptographically secure pseudorandom number generator) for the account or provided by the calling client.
Clients MUST NOT use the same key pair (client_private_key, client_public_key) for two different accounts.</t>
      <t>To begin, C chooses its password, and S chooses its own pair of private-public
AKE keys (server_private_key, server_public_key) for use with the AKE. S can use
the same pair of keys with multiple clients. These steps can happen offline, i.e.,
before the registration phase. Once complete, the registration process proceeds as follows:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
 Client (password, creds)            Server (server_private_key, server_public_key)
 --------------------------------------------------------------------
 (request, blind) = CreateRegistrationRequest(password)

                               request
                      ------------------------->

            (response, oprf_key) = CreateRegistrationResponse(request, server_public_key)

                               response
                      <-------------------------

 (record, export_key) = FinalizeRequest(password, creds, blind, response)

                                record
                      ------------------------->
]]></artwork>
      <t><xref target="registration-functions" format="default"/> describes details of the functions referenced above.</t>
      <t>Both client and server MUST validate the other party's public key before use.
See <xref target="validation" format="default"/> for more details.</t>
      <t>Upon completion, S stores C's credentials for later use. See <xref target="credential-file" format="default"/>
for a recommended storage format.</t>
      <section anchor="credential-storage" numbered="true" toc="default">
        <name>Credential Storage</name>
        <t>OPAQUE makes use of a structure <tt>Envelope</tt> to store client credentials.
The <tt>Envelope</tt> structure embeds the following types of credentials:</t>
        <ul spacing="normal">
          <li>client_private_key: The encoded client private key for the AKE protocol.</li>
          <li>server_public_key: The encoded server public key for the AKE protocol.</li>
          <li>client_identity: The client identity. This is an application-specific value, e.g., an e-mail
address or normal account name.</li>
          <li>server_identity: The server identity. This is typically a domain name, e.g., example.com.
See <xref target="identities" format="default"/> for information about this identity.</li>
        </ul>
        <t>Each public and private key value is an opaque byte string, specific to the AKE
protocol in which OPAQUE is instantiated. For example, if used as raw public keys
for TLS 1.3 <xref target="RFC8446" format="default"/>, they may be RSA or ECDSA keys as per <xref target="RFC7250" format="default"/>.</t>
        <t>These credentials are incorporated in the <tt>SecretCredentials</tt> and <tt>CleartextCredentials</tt> structs,
depending on the mode set by the value of <tt>EnvelopeMode</tt>:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
enum {
  base(1),
  custom_identifier(2),
  (255)
} EnvelopeMode;
]]></artwork>
        <t>The <tt>base</tt> mode defines <tt>SecretCredentials</tt> and <tt>CleartextCredentials</tt> as follows:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
struct {
  opaque client_private_key[Nsk];
} SecretCredentials;

struct {
  opaque server_public_key[Npk];
} CleartextCredentials;
]]></artwork>
        <t>The <tt>custom_identifier</tt> mode defines <tt>SecretCredentials</tt> and <tt>CleartextCredentials</tt> as follows:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
struct {
  opaque client_private_key[Nsk];
} SecretCredentials;

struct {
  opaque server_public_key[Npk];
  opaque client_identity<0..2^16-1>;
  opaque server_identity<0..2^16-1>;
} CleartextCredentials;
]]></artwork>
        <t>These credentials are embedded into the following <tt>Envelope</tt> structure with
encryption and authentication.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
struct {
  EnvelopeMode mode;
  opaque nonce[32];
  opaque encrypted_creds[Nsk];
} InnerEnvelope;

struct {
  InnerEnvelope inner_env;
  opaque auth_tag[Nh];
} Envelope;
]]></artwork>
        <dl newline="false" spacing="normal">
          <dt>mode</dt>
          <dd>
  The <tt>EnvelopeMode</tt> value. This MUST be one of <tt>base</tt> or <tt>custom_identifier</tt>.</dd>
          <dt>nonce</dt>
          <dd>
  A unique 32-byte nonce used to protect this Envelope.</dd>
          <dt>encrypted_creds</dt>
          <dd>
  Encoding of encrypted and authenticated <tt>SecretCredentials</tt>.</dd>
          <dt>auth_tag</dt>
          <dd>
  Authentication tag protecting the contents of the envelope,
covering <tt>InnerEnvelope</tt> and <tt>CleartextCredentials</tt>.</dd>
        </dl>
        <t>The full procedure for constructing <tt>Envelope</tt> and <tt>InnerEnvelope</tt> from
<tt>SecretCredentials</tt> and <tt>CleartextCredentials</tt> is described in <xref target="finalize-request" format="default"/>.
Note that only <tt>SecretCredentials</tt> are stored in the <tt>Envelope</tt> (in encrypted form).</t>
        <t>The <tt>EnvelopeMode</tt> value is specified as part of the configuration (see <xref target="configurations" format="default"/>).</t>
        <t>Credential information corresponding to the configuration-specific mode,
along with the client public key <tt>client_public_key</tt> and private key <tt>client_private_key</tt>,
are recommended to be stored in a <tt>Credentials</tt> object with the following named fields:</t>
        <ul spacing="normal">
          <li>
            <tt>client_private_key</tt>, the client's private key</li>
          <li>
            <tt>client_public_key</tt>, the client's public key corresponding to <tt>client_private_key</tt></li>
          <li>
            <tt>client_identity</tt>, an optional client identity (present only in the <tt>custom_identifier</tt> mode)</li>
          <li>
            <tt>server_identity</tt>, an optional server identity (present only in the <tt>custom_identifier</tt> mode)</li>
        </ul>
      </section>
      <section anchor="registration-messages" numbered="true" toc="default">
        <name>Registration Messages</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
struct {
    SerializedElement data;
} RegistrationRequest;
]]></artwork>
        <dl newline="false" spacing="normal">
          <dt>data</dt>
          <dd>
  A serialized OPRF group element.</dd>
        </dl>
        <artwork name="" type="" align="left" alt=""><![CDATA[
struct {
    SerializedElement data;
    opaque server_public_key[Npk];
} RegistrationResponse;
]]></artwork>
        <dl newline="false" spacing="normal">
          <dt>data</dt>
          <dd>
  A serialized OPRF group element.</dd>
          <dt>server_public_key</dt>
          <dd>
  The server's encoded public key that will be used for the online authenticated key exchange stage.</dd>
        </dl>
        <artwork name="" type="" align="left" alt=""><![CDATA[
struct {
    opaque client_public_key[Npk];
    Envelope envelope;
} RegistrationUpload;
]]></artwork>
        <dl newline="false" spacing="normal">
          <dt>client_public_key</dt>
          <dd>
  The client's encoded public key, corresponding to the private key <tt>client_private_key</tt>.</dd>
          <dt>envelope</dt>
          <dd>
  The client's <tt>Envelope</tt> structure.</dd>
        </dl>
      </section>
      <section anchor="registration-functions" numbered="true" toc="default">
        <name>Registration Functions</name>
        <section anchor="createregistrationrequest" numbered="true" toc="default">
          <name>CreateRegistrationRequest</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
CreateRegistrationRequest(password)

Input:
- password, an opaque byte string containing the client's password

Output:
- request, a RegistrationRequest structure
- blind, an OPRF scalar value

Steps:
1. (blind, M) = Blind(password)
2. Create RegistrationRequest request with M
3. Output (request, blind)
]]></artwork>
        </section>
        <section anchor="create-reg-response" numbered="true" toc="default">
          <name>CreateRegistrationResponse</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
CreateRegistrationResponse(request, server_public_key)

Input:
- request, a RegistrationRequest structure
- server_public_key, the server's public key

Output:
- response, a RegistrationResponse structure
- oprf_key, the per-client OPRF key known only to the server

Steps:
1. (oprf_key, _) = GenerateKeyPair()
2. Z = Evaluate(oprf_key, request.data)
3. Create RegistrationResponse response with (Z, server_public_key)
4. Output (response, oprf_key)
]]></artwork>
        </section>
        <section anchor="finalize-request" numbered="true" toc="default">
          <name>FinalizeRequest</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
FinalizeRequest(password, creds, blind, response)

Parameters:
- params, the MHF parameters established out of band
- mode, the InnerEnvelope mode
- Nh, the output size of the Hash function

Input:
- password, an opaque byte string containing the client's password
- creds, a Credentials structure
- blind, an OPRF scalar value
- response, a RegistrationResponse structure

Output:
- record, a RegistrationUpload structure
- export_key, an additional key

Steps:
1. y = Finalize(password, blind, response.data)
2. envelope_nonce = random(32)
3. prk = HKDF-Extract(envelope_nonce, Harden(y, params))
4. Create SecretCredentials secret_creds with creds.client_private_key
5. Create CleartextCredentials cleartext_creds with response.server_public_key
   and custom identifiers creds.client_identity and creds.server_identity if
   mode is custom_identifier
6. pseudorandom_pad =
     HKDF-Expand(prk, "Pad", len(secret_creds))
7. auth_key = HKDF-Expand(prk, "AuthKey", Nh)
8. export_key = HKDF-Expand(prk, "ExportKey", Nh)
9. encrypted_creds = xor(secret_creds, pseudorandom_pad)
10. Create InnerEnvelope inner_env
      with (mode, envelope_nonce, encrypted_creds)
11. auth_tag = HMAC(auth_key, concat(inner_env, cleartext_creds))
12. Create Envelope envelope with (inner_env, auth_tag)
13. Create RegistrationUpload record with (envelope, creds.client_public_key)
14. Output (record, export_key)
]]></artwork>
          <t>The inputs to HKDF-Extract and HKDF-Expand are as specified in <xref target="RFC5869" format="default"/>. The underlying hash function
is that which is associated with the OPAQUE configuration (see <xref target="configurations" format="default"/>).</t>
          <t>See <xref target="online-phase" format="default"/> for details about the output export_key usage.</t>
          <t>Upon completion of this function, the client MUST send <tt>record</tt> to the server.</t>
        </section>
        <section anchor="credential-file" numbered="true" toc="default">
          <name>Credential File</name>
          <t>The server then constructs and stores the <tt>credential_file</tt> object, where <tt>envelope</tt> and <tt>client_public_key</tt>
are obtained from <tt>record</tt>, and <tt>oprf_key</tt> is retained from the output of <tt>CreateRegistrationResponse</tt>.
<tt>oprf_key</tt> is serialized using <tt>SerializeScalar</tt>. The below structure represents an example of how
these values might be conveniently stored together.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
struct {
    SerializedScalar oprf_key;
    opaque client_public_key[Npk];
    Envelope envelope;
} credential_file;
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="online-phase" numbered="true" toc="default">
      <name>Online Authenticated Key Exchange</name>
      <t>After registration, the client and server run the authenticated
key exchange stage of the OPAQUE protocol. This stage is composed of a concurrent
OPRF and key exchange flow. The key exchange protocol is authenticated using the
client and server credentials established during registration; see <xref target="offline-phase" format="default"/>.
The type of keys MUST be suitable for the key exchange protocol. For example, if
the key exchange protocol is 3DH, as described in <xref target="opaque-3dh" format="default"/>, then the private and
public keys must be Diffie-Hellman keys. In the end, the client proves its
knowledge of the password, and both client and server agree on a mutually authenticated
shared secret key.</t>
      <t>OPAQUE produces two outputs: a session secret and an export key. The export key may be used
for additional application-specific purposes, as outlined in <xref target="export-key-usage" format="default"/>.
The output <tt>export_key</tt> MUST NOT be used in any way before the HMAC value in the
envelope is validated. See <xref target="envelope-encryption" format="default"/> for more details about this requirement.</t>
      <section anchor="credential-retrieval" numbered="true" toc="default">
        <name>Credential Retrieval</name>
        <t>The online AKE stage of the protocol requires clients to obtain and decrypt their
credentials from the server-stored envelope. This process is similar to the offline
registration stage, as shown below.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
 Client (password)             Server (server_private_key, server_public_key, credential_file)
 --------------------------------------------------------------------
 (request, blind) = CreateCredentialRequest(password)

                               request
                      ------------------------->

    response = CreateCredentialResponse(request, server_public_key, credential_file)

                               response
                      <-------------------------

 (client_private_key, server_public_key, export_key) =
     RecoverCredentials(password, blind, response)
]]></artwork>
        <t>The rest of this section describes these credential retrieval functions in
more detail.</t>
        <section anchor="credential-retrieval-messages" numbered="true" toc="default">
          <name>Credential Retrieval Messages</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
struct {
    SerializedElement data;
} CredentialRequest;
]]></artwork>
          <dl newline="false" spacing="normal">
            <dt>data</dt>
            <dd>
  A serialized OPRF group element.</dd>
          </dl>
          <artwork name="" type="" align="left" alt=""><![CDATA[
struct {
    SerializedElement data;
    opaque server_public_key[Npk];
    Envelope envelope;
} CredentialResponse;
]]></artwork>
          <dl newline="false" spacing="normal">
            <dt>data</dt>
            <dd>
  A serialized OPRF group element.</dd>
            <dt>server_public_key</dt>
            <dd>
  The server's encoded public key that will be used for the online authenticated
key exchange stage.</dd>
            <dt>envelope</dt>
            <dd>
  The client's <tt>Envelope</tt> structure.</dd>
          </dl>
        </section>
        <section anchor="credential-retrieval-functions" numbered="true" toc="default">
          <name>Credential Retrieval Functions</name>
          <section anchor="create-credential-request" numbered="true" toc="default">
            <name>CreateCredentialRequest</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
CreateCredentialRequest(password)

Input:
- password, an opaque byte string containing the client's password

Output:
- request, a CredentialRequest structure
- blind, an OPRF scalar value

Steps:
1. (blind, M) = Blind(password)
2. Create CredentialRequest request with M
3. Output (request, blind)
]]></artwork>
          </section>
          <section anchor="create-credential-response" numbered="true" toc="default">
            <name>CreateCredentialResponse</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
CreateCredentialResponse(request, server_public_key, credential_file)

Input:
- request, a CredentialRequest structure
- server_public_key, the public key of the server
- credential_file, the server's output from registration
  (see {{credential-file}})

Output:
- response, a CredentialResponse structure

Steps:
1. Z = Evaluate(DeserializeScalar(credential_file.oprf_key), request.data)
2. Create CredentialResponse response
    with (Z, server_public_key, credential_file.envelope)
3. Output response
]]></artwork>
          </section>
          <section anchor="recover-credentials" numbered="true" toc="default">
            <name>RecoverCredentials</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
RecoverCredentials(password, blind, response)

Parameters:
- params, the MHF parameters established out of band
- Nh, the output size of the Hash function

Input:
- password, an opaque byte string containing the client's password
- blind, an OPRF scalar value
- response, a CredentialResponse structure

Output:
- client_private_key, the client's private key for the AKE protocol
- server_public_key, the public key of the server
- export_key, an additional key

Steps:
1. y = Finalize(password, blind, response.data)
2. contents = response.envelope.contents
3. envelope_nonce = contents.nonce
4. prk = HKDF-Extract(envelope_nonce, Harden(y, params))
5. pseudorandom_pad =
    HKDF-Expand(prk, "Pad", len(contents.encrypted_creds))
6. auth_key = HKDF-Expand(prk, "AuthKey", Nh)
7. export_key = HKDF-Expand(prk, "ExportKey", Nh)
8. Create CleartextCredentials cleartext_creds with response.server_public_key
   and custom identifiers creds.client_identity and creds.server_identity if mode is
   custom_identifier
9. expected_tag = HMAC(auth_key, concat(contents, cleartext_creds))
10. If !ct_equal(response.envelope.auth_tag, expected_tag),
    raise DecryptionError
11. secret_creds = xor(contents.encrypted_creds, pseudorandom_pad)
12. Output (secret_creds.client_private_key, response.server_public_key, export_key)
]]></artwork>
          </section>
        </section>
      </section>
      <section anchor="instantiations" numbered="true" toc="default">
        <name>AKE Instantiations</name>
        <t>This section describes instantiations of OPAQUE using 3-message AKEs which
satisfies the forward secrecy and KCI properties discussed in <xref target="security-considerations" format="default"/>.
As shown in <xref target="OPAQUE" format="default"/>, OPAQUE cannot use less than three messages so the 3-message
instantiations presented here are optimal in terms of number of messages. On the other
hand, there is no impediment to using OPAQUE with protocols with more than 3 messages
as in the case of IKEv2 (or the underlying SIGMA-R protocol <xref target="SIGMA" format="default"/>).</t>
        <t>The generic outline of OPAQUE with a 3-message AKE protocol includes three messages
KE1, KE2, and KE3, where KE1 and KE2 include key exchange shares, e.g., DH values, sent
by client and server, respectively, and KE3 provides explicit client authentication and
full forward security (without it, forward secrecy is only achieved against eavesdroppers
which is insufficient for OPAQUE security).</t>
        <t>The output of the authentication phase is a session secret <tt>session_key</tt> and export
key <tt>export_key</tt>. Applications can use <tt>session_key</tt> to derive additional keying material
as needed. Key derivation and other details of the protocol are specified by the AKE scheme.
We note that by the results in <xref target="OPAQUE" format="default"/>, KE2 and KE3 must authenticate credential_request
and credential_response, respectively, for binding between the underlying OPRF protocol
messages and the KE session.</t>
        <t>We use the parameters Npk and Nsk to denote the size of the public and private keys used
in the AKE instantiation. Npk and Nsk must adhere to the output size limitations of the
HKDF Expand function from <xref target="RFC5869" format="default"/>, which means that Npk, Nsk &lt;= 255 * Nh.</t>
        <t>The rest of this section includes key schedule utility functions used by OPAQUE-3DH,
and then provides a detailed specification for OPAQUE-3DH, including its wire format
messages.</t>
        <section anchor="key-schedule-utility-functions" numbered="true" toc="default">
          <name>Key Schedule Utility Functions</name>
          <t>The key derivation procedures for OPAQUE-3DH makes use of the functions below, re-purposed
from TLS 1.3 <xref target="RFC8446" format="default"/>.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
HKDF-Expand-Label(Secret, Label, Context, Length) =
  HKDF-Expand(Secret, HkdfLabel, Length)
]]></artwork>
          <t>Where HkdfLabel is specified as:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
struct {
   uint16 length = Length;
   opaque label<8..255> = "OPAQUE " + Label;
   opaque context<0..255> = Context;
} HkdfLabel;

Derive-Secret(Secret, Label, Transcript-Hash) =
    HKDF-Expand-Label(Secret, Label, Transcript-Hash, Nh)
]]></artwork>
          <t>HKDF uses Hash as its underlying hash function, which is the same as that
which is indicated by the OPAQUE instantiation. Note that the Label parameter
is not a NULL-terminated string.</t>
        </section>
        <section anchor="opaque-3dh" numbered="true" toc="default">
          <name>OPAQUE-3DH Instantiation</name>
          <t>OPAQUE-3DH is implemented using a suitable prime order group. All operations in
the key derivation steps in <xref target="derive-3dh" format="default"/> are performed in this group and
represented here using multiplicative notation. The output of OPAQUE-3DH is a
session secret <tt>session_key</tt> and export key <tt>export_key</tt>.</t>
          <t>The parameters Npk and Nsk are set to be equal to the size of an element and
scalar, respectively, in the associated prime order group.</t>
          <section anchor="opaque-3dh-messages" numbered="true" toc="default">
            <name>OPAQUE-3DH Messages</name>
            <t>The three messages for OPAQUE-3DH are described below.</t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
struct {
  CredentialRequest request;
  uint8 client_nonce[32];
  opaque client_info<0..2^16-1>;
  uint8 client_keyshare[Npk];
} KE1;
]]></artwork>
            <dl newline="false" spacing="normal">
              <dt>request</dt>
              <dd>
  A <tt>CredentialRequest</tt> generated according to <xref target="create-credential-request" format="default"/>.</dd>
              <dt>client_nonce</dt>
              <dd>
  A fresh 32-byte randomly generated nonce.</dd>
              <dt>client_info</dt>
              <dd>
  Optional application-specific information to exchange during the protocol.</dd>
              <dt>client_keyshare</dt>
              <dd>
  Client ephemeral key share of fixed size Npk, where Npk depends on the corresponding
prime order group.</dd>
            </dl>
            <artwork name="" type="" align="left" alt=""><![CDATA[
struct {
  struct {
    CredentialResponse response;
    uint8 server_nonce[32];
    uint8 server_keyshare[Npk];
  } inner_ke2;
  opaque enc_server_info<0..2^16-1>;
  uint8 mac[Nh];
} KE2;
]]></artwork>
            <dl newline="false" spacing="normal">
              <dt>response</dt>
              <dd>
  A <tt>CredentialResponse</tt> generated according to <xref target="create-credential-response" format="default"/>.</dd>
              <dt>server_nonce</dt>
              <dd>
  A fresh 32-byte randomly generated nonce.</dd>
              <dt>server_keyshare</dt>
              <dd>
  Server ephemeral key share of fixed size Npk, where Npk depends on the corresponding
prime order group.</dd>
              <dt>enc_server_info</dt>
              <dd>
  Optional application-specific information to exchange during the protocol encrypted
under key Ke2, defined below.</dd>
              <dt>mac</dt>
              <dd>
  An authentication tag computed over the handshake transcript computed using Km2,
defined below.</dd>
            </dl>
            <artwork name="" type="" align="left" alt=""><![CDATA[
struct {
  uint8 mac[Nh];
} KE3;
]]></artwork>
            <dl newline="false" spacing="normal">
              <dt>mac</dt>
              <dd>
  An authentication tag computed over the handshake transcript computed using
Km3, defined below.</dd>
            </dl>
          </section>
          <section anchor="derive-3dh" numbered="true" toc="default">
            <name>OPAQUE-3DH Key Schedule</name>
            <t>OPAQUE-3DH requires MAC keys <tt>server_mac_key</tt> and <tt>client_mac_key</tt> and
encryption key <tt>handshake_encrypt_key</tt>. Additionally, OPAQUE-3DH also
outputs <tt>session_key</tt>. The schedule for computing this key material is below.</t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
HKDF-Extract(salt=0, IKM)
    |
    +-> Derive-Secret(., "handshake secret", Hash(preamble)) = handshake_secret
    |
    +-> Derive-Secret(., "session secret", Hash(preamble)) = session_key
]]></artwork>
            <t>From <tt>handshake_secret</tt>, Km2, Km3, and Ke2 are computed as follows:</t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
server_mac_key =
  HKDF-Expand-Label(handshake_secret, "server mac", "", Nh)
client_mac_key =
  HKDF-Expand-Label(handshake_secret, "client mac", "", Nh)
handshake_encrypt_key =
  HKDF-Expand-Label(handshake_secret, "handshake enc", "", Nh)
]]></artwork>
            <t>Nh is the output length of the underlying hash function.</t>
            <t>The Derive-Secret parameter <tt>preamble</tt> is computed as:</t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
preamble = concat("3DH",
                  I2OSP(len(client_identity), 2), client_identity,
                  KE1,
                  I2OSP(len(server_identity), 2), server_identity,
                  KE2.inner_ke2)
]]></artwork>
            <t>See <xref target="identities" format="default"/> for more information about identities client_identity and
server_identity.</t>
            <t>Let <tt>epkS</tt> and <tt>eskS</tt> be <tt>server_keyshare</tt> and the corresponding secret key,
and <tt>epkU</tt> and <tt>eskU</tt> be <tt>client_keyshare</tt> and the corresponding secret key.
The input parameter <tt>IKM</tt> the concatenation of three DH values computed by
the client as follows:</t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
IKM = concat(epkS^eskU, pkS^eskU, epkS^skU)
]]></artwork>
            <t>Likewise, <tt>IKM</tt> is computed by the server as follows:</t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
IKM = concat(epkU^eskS, epkU^skS, pkU^eskS)
]]></artwork>
          </section>
          <section anchor="opaque-3dh-encryption-and-key-confirmation-3dh-core" numbered="true" toc="default">
            <name>OPAQUE-3DH Encryption and Key Confirmation {#3dh-core}</name>
            <t>Clients and servers use keys Km2 and Km3 in computing KE2.mac and KE3.mac,
respectively. These values are computed as follows:</t>
            <ul spacing="normal">
              <li>KE2.mac = HMAC(Km2, Hash(concat(preamble, KE2.enc_server_info)), where
preamble is as defined in <xref target="derive-3dh" format="default"/>.</li>
              <li>KE3.mac = HMAC(Km3, Hash(concat(preamble, KE2.enc_server_info, KE2.mac)),
where preamble is as defined in <xref target="derive-3dh" format="default"/>.</li>
            </ul>
            <t>The server application info, an opaque byte string <tt>server_info</tt>, is encrypted
using a technique similar to that used for secret credential encryption.
Specifically, a one-time-pad is derived from Ke2 and then used as input to XOR
with the plaintext. In pseudocode, this is done as follows:</t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
info_pad = HKDF-Expand(Ke2, "encryption pad", len(server_info))
enc_server_info = xor(info_pad, server_info)
]]></artwork>
          </section>
        </section>
      </section>
    </section>
    <section anchor="configurations" numbered="true" toc="default">
      <name>Configurations</name>
      <t>An OPAQUE configuration is a tuple (OPRF, Hash, MHF, EnvelopeMode, Group). The OPAQUE
OPRF protocol is drawn from the "base mode" variant of <xref target="I-D.irtf-cfrg-voprf" format="default"/>. The
following OPRF ciphersuites are supported:</t>
      <ul spacing="normal">
        <li>OPRF(ristretto255, SHA-512)</li>
        <li>OPRF(decaf448, SHA-512)</li>
        <li>OPRF(P-256, SHA-256)</li>
        <li>OPRF(P-384, SHA-512)</li>
        <li>OPRF(P-521, SHA-512)</li>
      </ul>
      <t>Future configurations may specify different OPRF constructions.</t>
      <t>The OPAQUE hash function is that which is associated with the OPRF ciphersuite.
For the ciphersuites specified here, only SHA-512 and SHA-256 are supported.</t>
      <t>The OPAQUE MHFs include Argon2 <xref target="I-D.irtf-cfrg-argon2" format="default"/>, scrypt <xref target="RFC7914" format="default"/>,
and PBKDF2 <xref target="RFC2898" format="default"/> with fixed parameter choices.</t>
      <t>The EnvelopeMode value is defined in <xref target="credential-storage" format="default"/>. It MUST be one
of <tt>base</tt> or <tt>custom_identifier</tt>. Future specifications may specify alternate
EnvelopeMode values and their corresponding Envelope structure.</t>
      <t>The Group mode identifies the group used in the OPAQUE-3DH AKE. This SHOULD
match that of the OPRF.</t>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>OPAQUE is defined and proven as the composition of two
functionalities: an OPRF and an AKE protocol.
It can be seen as a "compiler" for transforming any AKE
protocol (with KCI security and forward secrecy - see below)
into a secure aPAKE protocol. In OPAQUE, the client stores a secret private key at the
server during password registration and retrieves this key each time
it needs to authenticate to the server. The OPRF security properties
ensure that only the correct password can unlock the private key
while at the same time avoiding potential offline guessing attacks.
This general composability property provides great flexibility and
enables a variety of OPAQUE instantiations, from optimized
performance to integration with TLS. The latter aspect is of prime
importance as the use of OPAQUE with TLS constitutes a major security
improvement relative to the standard password-over-TLS practice.
At the same time, the combination with TLS builds OPAQUE as a fully functional
secure communications protocol and can help provide privacy to
account information sent by the client to the server prior to authentication.</t>
      <t>The KCI property required from AKE protocols for use with OPAQUE
states that knowledge of a party's private key does not allow an attacker
to impersonate others to that party. This is an important security
property achieved by most public-key based AKE protocols, including
protocols that use signatures or public key encryption for
authentication. It is also a property of many implicitly
authenticated protocols, e.g., HMQV, but not all of them. We also note that
key exchange protocols based on shared keys do not satisfy the KCI
requirement, hence they are not considered in the OPAQUE setting.
We note that KCI is needed to ensure a crucial property of OPAQUE: even upon
compromise of the server, the attacker cannot impersonate the client to the
server without first running an exhaustive dictionary attack.
Another essential requirement from AKE protocols for use in OPAQUE is to
provide forward secrecy (against active attackers).</t>
      <section anchor="related-analysis" numbered="true" toc="default">
        <name>Related Analysis</name>
        <t>Jarecki et al. <xref target="OPAQUE" format="default"/> proved the security of OPAQUE
in a strong aPAKE model that ensures security against pre-computation attacks
and is formulated in the Universal Composability (UC) framework <xref target="Canetti01" format="default"/>
under the random oracle model. This assumes security of the OPRF
function and of the underlying key exchange protocol. In turn, the
security of the OPRF protocol from <xref target="I-D.irtf-cfrg-voprf" format="default"/> is proven
in the random oracle model under the One-More Diffie-Hellman assumption <xref target="JKKX16" format="default"/>.</t>
        <t>Very few aPAKE protocols have been proven formally, and those proven were analyzed
in a weak security model that allows for pre-computation attacks (e.g.,
<xref target="GMR06" format="default"/>). This is not just a formal issue: these protocols are
actually vulnerable to such attacks. This includes protocols that have recent
analyses in the UC model such as AuCPace <xref target="AuCPace" format="default"/> and SPAKE2+ <xref target="SPAKE2plus" format="default"/>.
We note that as shown in <xref target="OPAQUE" format="default"/>, these protocols, and any aPAKE
in the model from <xref target="GMR06" format="default"/>, can be converted into an aPAKE secure against
pre-computation attacks at the expense of an additional OPRF execution.</t>
        <t>OPAQUE's design builds on a line of work initiated in the seminal
paper of Ford and Kaliski <xref target="FK00" format="default"/> and is based on the HPAKE protocol
of Xavier Boyen <xref target="Boyen09" format="default"/> and the (1,1)-PPSS protocol from Jarecki
et al. <xref target="JKKX16" format="default"/>. None of these papers considered security against
pre-computation attacks or presented a proof of aPAKE security
(not even in a weak model).</t>
      </section>
      <section anchor="identities" numbered="true" toc="default">
        <name>Identities</name>
        <t>AKE protocols generate keys that need to be uniquely and verifiably bound to a pair
of identities. In the case of OPAQUE, those identities correspond to client_identity and server_identity.
Thus, it is essential for the parties to agree on such identities, including an
agreed bit representation of these identities as needed.</t>
        <t>Applications may have different policies about how and when identities are
determined. A natural approach is to tie client_identity to the identity the server uses
to fetch envelope (hence determined during password registration) and to tie server_identity
to the server identity used by the client to initiate an offline password
registration or online authenticated key exchange session. server_identity and client_identity can also
be part of the envelope or be tied to the parties' public keys. In principle, identities may change across different sessions as long as there is a policy that
can establish if the identity is acceptable or not to the peer. However, we note
that the public keys of both the server and the client must always be those defined
at the time of password registration.</t>
        <t>The client identity (client_identity) and server identity (server_identity) are
optional parameters that are left to the application to designate as monikers for the client
and server. If the application layer does not supply values for these
parameters, then they will be omitted from the creation of the envelope
during the registration stage. Furthermore, they will be substituted with
client_identity = client_public_key and server_identity = server_public_key during
the authenticated key exchange stage.</t>
        <t>The advantage to supplying a custom client_identity and server_identity (instead of simply relying
on a fallback to client_public_key and server_public_key) is that the client can then ensure that any
mappings between client_identity and client_public_key (and server_identity and server_public_key)
are protected by the authentication from the envelope. Then, the client can verify that the
client_identity and server_identity contained in its envelope matches the client_identity
and server_identity supplied by the server.</t>
        <t>However, if this extra layer of verification is unnecessary for the application, then simply
leaving client_identity and server_identity unspecified (and using client_public_key and
server_public_key instead) is acceptable.</t>
      </section>
      <section anchor="envelope-encryption" numbered="true" toc="default">
        <name>Envelope Encryption</name>
        <t>The analysis of OPAQUE from <xref target="OPAQUE" format="default"/> requires the authenticated encryption scheme
used to produce envelope to have a special property called random key-robustness
(or key-committing). This specification enforces this property by utilizing
encrypt-then-HMAC in the construction of the envelope. There is no option to use another
authenticated-encryption scheme with this specification. (Deviating from the
key-robustness requirement may open the protocol to attacks, e.g., <xref target="LGR20" format="default"/>.)
We remark that export_key for authentication or encryption requires no special
properties from the authentication or encryption schemes as long as export_key
is used only after the envelope is validated, i.e., after the HMAC in RecoverCredentials
passes verification.</t>
      </section>
      <section anchor="export-key-usage" numbered="true" toc="default">
        <name>Export Key Usage</name>
        <t>The export key can be used (separately from the OPAQUE protocol) to provide
confidentiality and integrity to other data which only the client should be
able to process. For instance, if the server is expected to maintain any
client-side secrets which require a password to access, then this export key
can be used to encrypt these secrets so that they remain hidden from the
server.</t>
      </section>
      <section anchor="static-diffie-hellman-oracles" numbered="true" toc="default">
        <name>Static Diffie-Hellman Oracles</name>
        <t>While one can expect the practical security of the OPRF function (namely,
the hardness of computing the function without knowing the key) to be in the
order of computing discrete logarithms or solving Diffie-Hellman, Brown and
Gallant <xref target="BG04" format="default"/> and Cheon <xref target="Cheon06" format="default"/> show an attack that slightly improves
on generic attacks. For typical curves, the attack requires an infeasible
number of calls to the OPRF or results in insignificant security loss;
see <xref target="I-D.irtf-cfrg-voprf" format="default"/> for more information. For OPAQUE, these attacks
are particularly impractical as they translate into an infeasible number of
failed authentication attempts directed at individual users.</t>
      </section>
      <section anchor="validation" numbered="true" toc="default">
        <name>Input Validation</name>
        <t>Both client and server MUST validate the other party's public key(s) used
for the execution of OPAQUE. This includes the keys shared during the
offline registration phase, as well as any keys shared during the online
key agreement phase. The validation procedure varies depending on the
type of key. For example, for OPAQUE instantiations
using 3DH with P-256, P-384, or P-521 as the underlying group, validation
is as specified in Section 5.6.2.3.4 of <xref target="keyagreement" format="default"/>. This includes
checking that the coordinates are in the correct range, that the point
is on the curve, and that the point is not the point at infinity.
Additionally, validation MUST ensure the Diffie-Hellman shared secret is
not the point at infinity.</t>
      </section>
      <section anchor="oprf-hardening" numbered="true" toc="default">
        <name>OPRF Hardening</name>
        <t>Hardening the output of the OPRF greatly increases the cost of an offline
attack upon the compromise of the password file at the server. Applications
SHOULD select parameters that balance cost and complexity.</t>
        <!-- TODO(caw): bring this back after updating later -->

<!-- ## Envelope considerations

It is possible to dispense with encryption in the construction of an envelope to
obtain a shorter envelope (resulting in less storage at the server and less
communication from server to client). The idea is to derive client_private_key from prk.
However, for cases where client_private_key is not a random string of a given length, we
define a more general procedure. Namely, what is derived from prk is a random
seed used as an input to a key generation procedure that generates the pair
(client_private_key, client_public_key). In this case, secret_credentials is empty and cleartext_credentials
contains server_public_key. The random key generation seed is defined as
HKDF-Expand(KdKey; info="KG seed", L)
where L is the required seed length. We note that in this encryption-less
scheme, the authentication still needs to be random-key robust which HMAC
satisfies. -->

<!--
Mention advantage of avoidable equivocable encryption? Still needs equivocable
authentication, but that one gets by modeling HMAC as programmable RO - check.
-->

<!-- To further minimize storage space, the server can derive per-client OPRF keys
oprf_key from a single global secret key, and it can use the same pair
(server_private_key,server_public_key) for all clients. In this case, the per-client OPAQUE storage
consists of client_public_key and HMAC(Khmac; server_public_key), a total of 64-byte overhead with a
256-bit curve and hash. envelope communicated to the client is of the same length,
consisting of server_public_key and HMAC(Khmac; server_public_key). -->

<!-- Can provide AuCPace paper (sec 7.7) as reference to importance of small
envelope (for settings where storage and/or communication is expensive) -->

</section>
      <section anchor="SecEnumeration" numbered="true" toc="default">
        <name>Client Enumeration</name>
        <t>Client enumeration refers to attacks where the attacker tries to learn
whether a given client identity is registered with a server. Preventing
such attacks requires the server to act with unknown client identities
in a way that is indistinguishable from its behavior with existing
clients. Here we suggest a way to implement such defense, namely, a way for
simulating a CredentialResponse for non-existing clients.
Note that if the same CredentialRequest is received
twice by the server, the response needs to be the same in both cases (since
this would be the case for real clients).
For protection against this attack, one would apply the encryption function in
the construction of the envelope to all the key material in it.
The server S will have two keys MK, MK' for a pseudorandom function f.
f refers to a regular pseudorandom function such as HMAC or CMAC.
Upon receiving a CredentialRequest for a non-existing
client client_identity, S computes oprf_key=f(MK; client_identity) and oprf_key'=f(MK'; client_identity) and responds with
CredentialResponse carrying Z=M^oprf_key and envelope, where the latter is computed as follows.
prk is set to oprf_key' and secret_creds is set to the all-zero string (of the
length of a regular envelope plaintext). Care needs to be taken to avoid side-channel leakage (e.g., timing) from helping differentiate these
operations from a regular server response.
The above requires changes to the server-side implementation but not to the
protocol itself or the client-side.</t>
        <t>There is one form of leakage that the above allows and whose prevention would
require a change in OPAQUE.
An attacker that attempts authentication with the same CredentialRequest twice and receives
different responses can conclude that either the client registered with the
service between these two activations or that the client was registered before
but changed its password in between the activations (assuming the server
changes oprf_key at the time of a password change). In any case, this
indicates that client_identity is a registered client at the time of the second activation.
To conceal this information, S can implement the derivation of oprf_key
as oprf_key=f(MK; client_identity) also for registered clients. Hiding changes in the envelope, however,
requires a change in the protocol. Instead of sending envelope as is,
S would send an encryption of envelope under a key that the client derives from the
OPRF result (similarly to prk) and that S stores during password
registration. During the authenticated key exchange stage, the client will derive
this key from the OPRF result, will use it to decrypt the envelope, and continue with the
regular protocol. If S uses a randomized encryption, the encrypted envelope will look
each time as a fresh random string, hence S can simulate the encrypted envelope also
for non-existing clients.</t>
        <t>Note that the first case above does not change the protocol so its
implementation is a server's decision (the client side is not changed).
The second case, requires changes on the client side so it changes OPAQUE
itself.</t>
        <t>[[https://github.com/cfrg/draft-irtf-cfrg-opaque/issues/22: Should this variant be documented/standardized?]]</t>
      </section>
      <section anchor="password-salt-and-storage-implications" numbered="true" toc="default">
        <name>Password Salt and Storage Implications</name>
        <t>In OPAQUE, the OPRF key acts as the secret salt value that ensures the infeasibility
of pre-computation attacks. No extra salt value is needed. Also, clients never
disclose their passwords to the server, even during registration. Note that a corrupted
server can run an exhaustive offline dictionary attack to validate guesses for the client's
password; this is inevitable in any aPAKE protocol. (OPAQUE enables defense against such
offline dictionary attacks by distributing the server so that an offline attack is only
possible if all - or a minimal number of - servers are compromised <xref target="OPAQUE" format="default"/>.)</t>
        <t>Some applications may require learning the client's password for enforcing password
rules. Doing so invalidates this important security property of OPAQUE and is
NOT RECOMMENDED. Applications should move such checks to the client. Note that
limited checks at the server are possible to implement, e.g., detecting repeated
passwords.</t>
      </section>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>This document makes no IANA requests.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <seriesInfo name="DOI" value="10.17487/RFC2119"/>
            <seriesInfo name="RFC" value="2119"/>
            <seriesInfo name="BCP" value="14"/>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization/>
            </author>
            <date year="1997" month="March"/>
            <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>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <seriesInfo name="DOI" value="10.17487/RFC8174"/>
            <seriesInfo name="RFC" value="8174"/>
            <seriesInfo name="BCP" value="14"/>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization/>
            </author>
            <date year="2017" month="May"/>
            <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>
        </reference>
        <reference anchor="RFC4086" target="https://www.rfc-editor.org/info/rfc4086">
          <front>
            <title>Randomness Requirements for Security</title>
            <seriesInfo name="DOI" value="10.17487/RFC4086"/>
            <seriesInfo name="RFC" value="4086"/>
            <seriesInfo name="BCP" value="106"/>
            <author initials="D." surname="Eastlake 3rd" fullname="D. Eastlake 3rd">
              <organization/>
            </author>
            <author initials="J." surname="Schiller" fullname="J. Schiller">
              <organization/>
            </author>
            <author initials="S." surname="Crocker" fullname="S. Crocker">
              <organization/>
            </author>
            <date year="2005" month="June"/>
            <abstract>
              <t>Security systems are built on strong cryptographic algorithms that foil pattern analysis attempts.  However, the security of these systems is dependent on generating secret quantities for passwords, cryptographic keys, and similar quantities.  The use of pseudo-random processes to generate secret quantities can result in pseudo-security. A sophisticated attacker may find it easier to reproduce the environment that produced the secret quantities and to search the resulting small set of possibilities than to locate the quantities in the whole of the potential number space.</t>
              <t>Choosing random quantities to foil a resourceful and motivated adversary is surprisingly difficult.  This document points out many pitfalls in using poor entropy sources or traditional pseudo-random number generation techniques for generating such quantities.  It recommends the use of truly random hardware techniques and shows that the existing hardware on many systems can be used for this purpose. It provides suggestions to ameliorate the problem when a hardware solution is not available, and it gives examples of how large such quantities need to be for some applications.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="Boyen09">
          <front>
            <title>HPAKE: Password Authentication Secure against Cross-Site User Impersonation</title>
            <seriesInfo name="Cryptology and Network Security (CANS)" value=""/>
            <author initials="X." surname="Boyen" fullname="Xavier Boyen">
              <organization/>
            </author>
            <date year="2009"/>
          </front>
        </reference>
        <reference anchor="BG04">
          <front>
            <title>The static Diffie-Hellman problem</title>
            <seriesInfo name="http://eprint.iacr.org/2004/306" value=""/>
            <author initials="D." surname="Brown" fullname="Daniel R. L. Brown">
              <organization/>
            </author>
            <author initials="R." surname="Galant" fullname="Robert P. Galant">
              <organization/>
            </author>
            <date year="2004"/>
          </front>
        </reference>
        <reference anchor="Canetti01">
          <front>
            <title>Universally composable security: A new paradigm for cryptographic protocols</title>
            <seriesInfo name="IEEE Symposium on Foundations of Computer Science (FOCS)" value=""/>
            <author initials="R." surname="Canetti" fullname="Ran Canetti">
              <organization/>
            </author>
            <date year="2001"/>
          </front>
        </reference>
        <reference anchor="Cheon06">
          <front>
            <title>Security analysis of the strong Diffie-Hellman problem</title>
            <seriesInfo name="Euroctypt 2006" value=""/>
            <author initials="J.H." surname="Cheon" fullname="Jung Hee Cheon">
              <organization/>
            </author>
            <date year="2006"/>
          </front>
        </reference>
        <reference anchor="FK00">
          <front>
            <title>Server-assisted generation of a strong secret from a password</title>
            <seriesInfo name="WETICE" value=""/>
            <author initials="W." surname="Ford" fullname="Warwick Ford">
              <organization/>
            </author>
            <author initials="B.S." surname="Kaliski, Jr" fullname="Burton S. Kaliski, Jr">
              <organization/>
            </author>
            <date year="2000"/>
          </front>
        </reference>
        <reference anchor="GMR06">
          <front>
            <title>A method for making password-based key exchange resilient to server compromise</title>
            <seriesInfo name="CRYPTO" value=""/>
            <author initials="C." surname="Gentry" fullname="Craig Gentry">
              <organization/>
            </author>
            <author initials="P." surname="MacKenzie" fullname="Phil MacKenzie">
              <organization/>
            </author>
            <author initials="." surname="Z, Ramzan" fullname="Zulfikar Ramzan">
              <organization/>
            </author>
            <date year="2006"/>
          </front>
        </reference>
        <reference anchor="AuCPace">
          <front>
            <title>AuCPace: Efficient verifier-based PAKE protocol tailored for the IIoT</title>
            <seriesInfo name="http://eprint.iacr.org/2018/286" value=""/>
            <author initials="B." surname="Haase" fullname="Bjorn Haase">
              <organization/>
            </author>
            <author initials="B." surname="Labrique" fullname="Benoit Labrique">
              <organization/>
            </author>
            <date year="2018"/>
          </front>
        </reference>
        <reference anchor="I-D.irtf-cfrg-hash-to-curve" target="http://www.ietf.org/internet-drafts/draft-irtf-cfrg-hash-to-curve-10.txt">
          <front>
            <title>Hashing to Elliptic Curves</title>
            <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-hash-to-curve-10"/>
            <author initials="A" surname="Faz-Hernandez" fullname="Armando Faz-Hernandez">
              <organization/>
            </author>
            <author initials="S" surname="Scott" fullname="Sam Scott">
              <organization/>
            </author>
            <author initials="N" surname="Sullivan" fullname="Nick Sullivan">
              <organization/>
            </author>
            <author initials="R" surname="Wahby" fullname="Riad Wahby">
              <organization/>
            </author>
            <author initials="C" surname="Wood" fullname="Christopher Wood">
              <organization/>
            </author>
            <date month="October" day="11" year="2020"/>
            <abstract>
              <t>This document specifies a number of algorithms for encoding or hashing an arbitrary string to a point on an elliptic curve.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.irtf-cfrg-voprf" target="http://www.ietf.org/internet-drafts/draft-irtf-cfrg-voprf-05.txt">
          <front>
            <title>Oblivious Pseudorandom Functions (OPRFs) using Prime-Order Groups</title>
            <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-voprf-05"/>
            <author initials="A" surname="Davidson" fullname="Alex Davidson">
              <organization/>
            </author>
            <author initials="A" surname="Faz-Hernandez" fullname="Armando Faz-Hernandez">
              <organization/>
            </author>
            <author initials="N" surname="Sullivan" fullname="Nick Sullivan">
              <organization/>
            </author>
            <author initials="C" surname="Wood" fullname="Christopher Wood">
              <organization/>
            </author>
            <date month="November" day="2" year="2020"/>
            <abstract>
              <t>An Oblivious Pseudorandom Function (OPRF) is a two-party protocol for computing the output of a PRF.  One party (the server) holds the PRF secret key, and the other (the client) holds the PRF input.  The 'obliviousness' property ensures that the server does not learn anything about the client's input during the evaluation.  The client should also not learn anything about the server's secret PRF key. Optionally, OPRFs can also satisfy a notion 'verifiability' (VOPRF). In this setting, the client can verify that the server's output is indeed the result of evaluating the underlying PRF with just a public key.  This document specifies OPRF and VOPRF constructions instantiated within prime-order groups, including elliptic curves.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.sullivan-tls-opaque" target="http://www.ietf.org/internet-drafts/draft-sullivan-tls-opaque-00.txt">
          <front>
            <title>Usage of OPAQUE with TLS 1.3</title>
            <seriesInfo name="Internet-Draft" value="draft-sullivan-tls-opaque-00"/>
            <author initials="N" surname="Sullivan" fullname="Nick Sullivan">
              <organization/>
            </author>
            <author initials="H" surname="Krawczyk" fullname="Hugo Krawczyk">
              <organization/>
            </author>
            <author initials="O" surname="Friel" fullname="Owen Friel">
              <organization/>
            </author>
            <author initials="R" surname="Barnes" fullname="Richard Barnes">
              <organization/>
            </author>
            <date month="March" day="11" year="2019"/>
            <abstract>
              <t>This document describes two mechanisms for enabling the use of the OPAQUE password-authenticated key exchange in TLS 1.3.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="keyagreement">
          <front>
            <title>Recommendation for pair-wise key-establishment schemes using discrete logarithm cryptography</title>
            <seriesInfo name="DOI" value="10.6028/nist.sp.800-56ar3"/>
            <seriesInfo name="National Institute of Standards and Technology" value="report"/>
            <author initials="E." surname="Barker" fullname="Elaine Barker">
              <organization/>
            </author>
            <author initials="L." surname="Chen" fullname="Lily Chen">
              <organization/>
            </author>
            <author initials="A." surname="Roginsky" fullname="Allen Roginsky">
              <organization/>
            </author>
            <author initials="A." surname="Vassilev" fullname="Apostol Vassilev">
              <organization/>
            </author>
            <author initials="R." surname="Davis" fullname="Richard Davis">
              <organization/>
            </author>
            <date year="2018" month="April"/>
          </front>
        </reference>
        <reference anchor="OPAQUE">
          <front>
            <title>OPAQUE: An Asymmetric PAKE Protocol Secure Against Pre-Computation Attacks</title>
            <seriesInfo name="Eurocrypt" value=""/>
            <author initials="S." surname="Jarecki" fullname="Stanislaw Jarecki">
              <organization/>
            </author>
            <author initials="H." surname="Krawczyk" fullname="Hugo Krawczyk">
              <organization/>
            </author>
            <author initials="J." surname="Xu" fullname="Jiayu Xu">
              <organization/>
            </author>
            <date year="2018"/>
          </front>
        </reference>
        <reference anchor="JKKX16">
          <front>
            <title>Highly-efficient and composable password-protected secret sharing (or: how to protect your bitcoin wallet online)</title>
            <seriesInfo name="IEEE European Symposium on Security and Privacy" value=""/>
            <author initials="S." surname="Jarecki" fullname="Stanislaw Jarecki">
              <organization/>
            </author>
            <author initials="A." surname="Kiayias" fullname="Aggelos Kiayias">
              <organization/>
            </author>
            <author initials="H." surname="Krawczyk" fullname="Hugo Krawczyk">
              <organization/>
            </author>
            <author initials="J." surname="Xu" fullname="Jiayu Xu">
              <organization/>
            </author>
            <date year="2016"/>
          </front>
        </reference>
        <reference anchor="LGR20" target="https://eprint.iacr.org/2020/1491.pdf">
          <front>
            <title>Partitioning Oracle Attacks</title>
            <author initials="J." surname="Len" fullname="Julia Len">
              <organization/>
            </author>
            <author initials="P." surname="Grubbs" fullname="Paul Grubbs">
              <organization/>
            </author>
            <author initials="T." surname="Ristenpart" fullname="Thomas Ristenpart">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="SIGMA">
          <front>
            <title>SIGMA: The SIGn-and-MAc approach to authenticated Diffie-Hellman and its use in the IKE protocols</title>
            <seriesInfo name="CRYPTO" value=""/>
            <author initials="H." surname="Krawczyk" fullname="Hugo Krawczyk">
              <organization/>
            </author>
            <date year="2003"/>
          </front>
        </reference>
        <reference anchor="HMQV">
          <front>
            <title>HMQV: A high-performance secure Diffie-Hellman protocol</title>
            <seriesInfo name="CRYPTO" value=""/>
            <author initials="H." surname="Krawczyk" fullname="Hugo Krawczyk">
              <organization/>
            </author>
            <date year="2005"/>
          </front>
        </reference>
        <reference anchor="SPAKE2plus">
          <front>
            <title>Security Analysis of SPAKE2+</title>
            <seriesInfo name="http://eprint.iacr.org/2020/313" value=""/>
            <author initials="V." surname="Shoup" fullname="Victor Shoup">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
        </reference>
        <reference anchor="SIGNAL">
          <front>
            <title>Signal recommended cryptographic algorithms</title>
            <seriesInfo name="https://signal.org/docs/specifications/doubleratchet/#recommended-cryptographic-algorithms" value=""/>
            <author>
              <organization/>
            </author>
            <date year="2016"/>
          </front>
        </reference>
        <reference anchor="RFC2945" target="https://www.rfc-editor.org/info/rfc2945">
          <front>
            <title>The SRP Authentication and Key Exchange System</title>
            <seriesInfo name="DOI" value="10.17487/RFC2945"/>
            <seriesInfo name="RFC" value="2945"/>
            <author initials="T." surname="Wu" fullname="T. Wu">
              <organization/>
            </author>
            <date year="2000" month="September"/>
            <abstract>
              <t>This document describes a cryptographically strong network authentication mechanism known as the Secure Remote Password (SRP) protocol.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC5869" target="https://www.rfc-editor.org/info/rfc5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <seriesInfo name="DOI" value="10.17487/RFC5869"/>
            <seriesInfo name="RFC" value="5869"/>
            <author initials="H." surname="Krawczyk" fullname="H. Krawczyk">
              <organization/>
            </author>
            <author initials="P." surname="Eronen" fullname="P. Eronen">
              <organization/>
            </author>
            <date year="2010" month="May"/>
            <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>
        </reference>
        <reference anchor="RFC8125" target="https://www.rfc-editor.org/info/rfc8125">
          <front>
            <title>Requirements for Password-Authenticated Key Agreement (PAKE) Schemes</title>
            <seriesInfo name="DOI" value="10.17487/RFC8125"/>
            <seriesInfo name="RFC" value="8125"/>
            <author initials="J." surname="Schmidt" fullname="J. Schmidt">
              <organization/>
            </author>
            <date year="2017" month="April"/>
            <abstract>
              <t>Password-Authenticated Key Agreement (PAKE) schemes are interactive protocols that allow the participants to authenticate each other and derive shared cryptographic keys using a (weaker) shared password. This document reviews different types of PAKE schemes.  Furthermore, it presents requirements and gives recommendations to designers of new schemes.  It is a product of the Crypto Forum Research Group (CFRG).</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <seriesInfo name="DOI" value="10.17487/RFC8446"/>
            <seriesInfo name="RFC" value="8446"/>
            <author initials="E." surname="Rescorla" fullname="E. Rescorla">
              <organization/>
            </author>
            <date year="2018" month="August"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC8017" target="https://www.rfc-editor.org/info/rfc8017">
          <front>
            <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
            <seriesInfo name="DOI" value="10.17487/RFC8017"/>
            <seriesInfo name="RFC" value="8017"/>
            <author initials="K." surname="Moriarty" fullname="K. Moriarty" role="editor">
              <organization/>
            </author>
            <author initials="B." surname="Kaliski" fullname="B. Kaliski">
              <organization/>
            </author>
            <author initials="J." surname="Jonsson" fullname="J. Jonsson">
              <organization/>
            </author>
            <author initials="A." surname="Rusch" fullname="A. Rusch">
              <organization/>
            </author>
            <date year="2016" month="November"/>
            <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>
        </reference>
        <reference anchor="RFC7250" target="https://www.rfc-editor.org/info/rfc7250">
          <front>
            <title>Using Raw Public Keys in Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)</title>
            <seriesInfo name="DOI" value="10.17487/RFC7250"/>
            <seriesInfo name="RFC" value="7250"/>
            <author initials="P." surname="Wouters" fullname="P. Wouters" role="editor">
              <organization/>
            </author>
            <author initials="H." surname="Tschofenig" fullname="H. Tschofenig" role="editor">
              <organization/>
            </author>
            <author initials="J." surname="Gilmore" fullname="J. Gilmore">
              <organization/>
            </author>
            <author initials="S." surname="Weiler" fullname="S. Weiler">
              <organization/>
            </author>
            <author initials="T." surname="Kivinen" fullname="T. Kivinen">
              <organization/>
            </author>
            <date year="2014" month="June"/>
            <abstract>
              <t>This document specifies a new certificate type and two TLS extensions for exchanging raw public keys in Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS).  The new certificate type allows raw public keys to be used for authentication.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.irtf-cfrg-argon2" target="http://www.ietf.org/internet-drafts/draft-irtf-cfrg-argon2-12.txt">
          <front>
            <title>The memory-hard Argon2 password hash and proof-of-work function</title>
            <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-argon2-12"/>
            <author initials="A" surname="Biryukov" fullname="Alex Biryukov">
              <organization/>
            </author>
            <author initials="D" surname="Dinu" fullname="Daniel Dinu">
              <organization/>
            </author>
            <author initials="D" surname="Khovratovich" fullname="Dmitry Khovratovich">
              <organization/>
            </author>
            <author initials="S" surname="Josefsson" fullname="Simon Josefsson">
              <organization/>
            </author>
            <date month="September" day="8" year="2020"/>
            <abstract>
              <t>This document describes the Argon2 memory-hard function for password hashing and proof-of-work applications.  We provide an implementer- oriented description with test vectors.  The purpose is to simplify adoption of Argon2 for Internet protocols.  This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC7914" target="https://www.rfc-editor.org/info/rfc7914">
          <front>
            <title>The scrypt Password-Based Key Derivation Function</title>
            <seriesInfo name="DOI" value="10.17487/RFC7914"/>
            <seriesInfo name="RFC" value="7914"/>
            <author initials="C." surname="Percival" fullname="C. Percival">
              <organization/>
            </author>
            <author initials="S." surname="Josefsson" fullname="S. Josefsson">
              <organization/>
            </author>
            <date year="2016" month="August"/>
            <abstract>
              <t>This document specifies the password-based key derivation function scrypt.  The function derives one or more secret keys from a secret string.  It is based on memory-hard functions, which offer added protection against attacks using custom hardware.  The document also provides an ASN.1 schema.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC2898" target="https://www.rfc-editor.org/info/rfc2898">
          <front>
            <title>PKCS #5: Password-Based Cryptography Specification Version 2.0</title>
            <seriesInfo name="DOI" value="10.17487/RFC2898"/>
            <seriesInfo name="RFC" value="2898"/>
            <author initials="B." surname="Kaliski" fullname="B. Kaliski">
              <organization/>
            </author>
            <date year="2000" month="September"/>
            <abstract>
              <t>This document provides recommendations for the implementation of password-based cryptography, covering key derivation functions, encryption schemes, message-authentication schemes, and ASN.1 syntax identifying the techniques.  This memo provides information for the Internet community.</t>
            </abstract>
          </front>
        </reference>
      </references>
    </references>
    <section anchor="acknowledgments" numbered="true" toc="default">
      <name>Acknowledgments</name>
      <t>The OPAQUE protocol and its analysis is joint work of the author with Stas
Jarecki and Jiayu Xu. We are indebted to the OPAQUE reviewers during CFRG's
aPAKE selection process, particularly Julia Hesse and Bjorn Tackmann.
This draft has benefited from comments by multiple people. Special thanks
to Richard Barnes, Dan Brown, Eric Crockett, Paul Grubbs, Fredrik Kuivinen,
Payman Mohassel, Jason Resch, Greg Rubin, and Nick Sullivan.</t>
    </section>
    <section anchor="alternate-akes" numbered="true" toc="default">
      <name>Alternate AKE Instantiations</name>
      <t>It is possible to instantiate OPAQUE with other AKEs, such as HMQV <xref target="HMQV" format="default"/> and SIGMA-I.
HMQV is similar to 3DH but varies in its key schedule. SIGMA-I uses digital signatures
rather than static DH keys for authentication. Specification of these instantiations is
left to future documents. A sketch of how these instantiations might change is included
in the next subsection for posterity.</t>
      <t>The AKE private key size (Nsk) is limited to the output size of the HKDF Expand function
from <xref target="RFC5869" format="default"/>.  Future specifications which have keys exceeding this size should
specify a mechanism by which private keys and their corresponding public keys can be
deterministically derived from a fixed-length seed.</t>
      <t>OPAQUE may also be instantiated with any post-quantum (PQ) AKE protocol that has the message
flow above and security properties (KCI resistance and forward secrecy) outlined
in <xref target="security-considerations" format="default"/>. Note that such an instantiation is not quantum-safe unless
the OPRF is quantum-safe. However, an OPAQUE instantiation where the AKE is quantum-safe,
but the OPRF is not, would still ensure the confidentiality of application data encrypted
under session_key (or a key derived from it) with a quantum-safe encryption function.</t>
      <section anchor="hmqv-instantiation-sketch" numbered="true" toc="default">
        <name>HMQV Instantiation Sketch</name>
        <t>An HMQV instantiation would work similar to OPAQUE-3DH, differing primarily in the key
schedule <xref target="HMQV" format="default"/>. First, the key schedule <tt>preamble</tt> value would use a different constant prefix
- "HMQV" instead of "3DH" - as shown below.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
preamble = concat("HMQV",
                  I2OSP(len(client_identity), 2), client_identity,
                  KE1,
                  I2OSP(len(server_identity), 2), server_identity,
                  KE2.inner_ke2)
]]></artwork>
        <t>Second, the IKM derivation would change. Assuming HMQV is instantiated with a cyclic
group of prime order p with bit length L, clients would compute <tt>IKM</tt> as follows:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
u' = (eskU + u \* skU) mod p
IKM = (epkS \* pkS^s)^u'
]]></artwork>
        <t>Likewise, servers would compute <tt>IKM</tt> as follows:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
s' = (eskS + s \* skS) mod p
IKM = (epkU \* pkU^u)^s'
]]></artwork>
        <t>In both cases, <tt>u</tt> would be computed as follows:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
hashInput = concat(I2OSP(len(epkU), 2), epkU,
                   I2OSP(len(info), 2), info,
                   I2OSP(len("client"), 2), "client")
u = Hash(hashInput) mod L
]]></artwork>
        <t>Likewise, <tt>s</tt> would be computed as follows:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
hashInput = concat(I2OSP(len(epkS), 2), epkS,
                   I2OSP(len(info), 2), info,
                   I2OSP(len("server"), 2), "server")
s = Hash(hashInput) mod L
]]></artwork>
        <t>Hash is the same hash function used in the main OPAQUE protocol for key derivation.
Its output length (in bits) must be at least L.</t>
      </section>
      <section anchor="sigma-i-instantiation-sketch" numbered="true" toc="default">
        <name>SIGMA-I Instantiation Sketch</name>
        <t>A SIGMA-I instantiation differs more drastically from OPAQUE-3DH, since authentication
uses digital signatures in lieu of Diffie Hellman. In particular, both KE2 and KE3
would carry a digital signature, computed using the server and client private keys
established during registration, respectively, as well as a MAC, where the MAC is
computed as in OPAQUE-3DH.</t>
        <t>The key schedule would also change. Specifically, the key schedule <tt>preamble</tt> value would
use a different constant prefix - "SIGMA-I" instead of "3DH" - and the <tt>IKM</tt> computation
would use only the ephemeral key shares exchanged between client and server.</t>
      </section>
    </section>
    <section anchor="test-vectors" numbered="true" toc="default">
      <name>Test Vectors</name>
      <t>This section contains test vectors for the OPAQUE-3DH specification. Each test
vector specifies the configuration information, protocol inputs, intermediate
values computed during registration and authentication, and protocol outputs.
All values are encoded in hexadecimal strings. The configuration information
includes the (OPRF, Hash, MHF, EnvelopeMode, Group) tuple, where the Group
matches that which is used in the OPRF. These test vectors were generated using
draft-06 of <xref target="I-D.irtf-cfrg-voprf" format="default"/>.</t>
      <section anchor="opaque-3dh-test-vector-1" numbered="true" toc="default">
        <name>OPAQUE-3DH Test Vector 1</name>
        <section anchor="configuration" numbered="true" toc="default">
          <name>Configuration</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
OPRF: 0001
Hash: SHA512
SlowHash: Identity
EnvelopeMode: 01
Group: ristretto255
Nh: 64
Npk: 32
Nsk: 32
]]></artwork>
        </section>
        <section anchor="input-values" numbered="true" toc="default">
          <name>Input Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
password: 436f7272656374486f72736542617474657279537461706c65
envelope_nonce: cc7abb200199d5071c94efa49fb62435d3e70d03cf9573a95da54
20d3eebcd2b
client_private_key: 8bcb0b70dac18de24eef12e737d6b28724d3e37774e0b092f
9f70b255defaf04
client_public_key: 360e716c676cfe4d9968d1a352ed3faf17603863e0a7aa1905
df6ea129343b09
server_private_key: f3a0829898a89239dce29ccc98ec8b449a34b255ba1e6f944
829d18e0d589b0f
server_public_key: 66e130c6eb5b41f851b235b03a0eafeaa883f64147bc62cb74
9c22c762389c3c
client_info: 68656c6c6f20626f62
server_info: 6772656574696e677320616c696365
server_nonce: 98b8081059f60ffed9336f026fd8e124737205ac73f5348ae5bebdb
49456c70f
client_nonce: 58dc21475ff730342f807bf031c7ae47a11f0d4dfaa63a7feb15d7e
36427ca44
server_keyshare: 5214e3ddc73db786480b79fa2da787f2080b82cbe922c2a9592b
44597d9a702e
client_keyshare: a4084c7296b1a3d5a5e4a24358750489575acfd8fcfa6e787492
b98265a5e651
server_private_keyshare: c4d002aa4cfcf281657cf36fe562bc60d9133e0e72a7
4432f685b2b6a4b42a0c
client_private_keyshare: de2e98f422bf7b99be19f7da7cac62f1599d35a225ec
6340149a0aaff3102003
blind_registration: 7e5bcbf82a46109ee0d24e9bcab41fc830a6ce8b82fc1e921
3a043b743b95800
blind_login: c4d5a15f0d5ffc354e340454ec779f575e4573a3886ab5e57e4da298
4bdd5306
oprf_key: 080d0a4d352de92672ab709b1ae1888cb48dfabc2d6ca5b914b335512fe
70508
]]></artwork>
        </section>
        <section anchor="intermediate-values" numbered="true" toc="default">
          <name>Intermediate Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
auth_key: 7bb7f2b831ee30d3e5cc4012c8f721a4d8f9dd494932d53776e043df9bd
2aa284025b8b006fd8449536446ff50698f46c73fccb53f20d80898f185307d1d39e5
prk: b0aefddbb21d1b97bc40c07b172e0bf172ec740de4f6274f69d46350a447e9b1
b3fb1e4cefc7d8e393ff58a5c45c74d0615ee0eecde116f3d4e744142eb2ee89
pseudorandom_pad: 36a828b3b57bf242c4c47ccd9cb84e5b3cefaffe09629c6b94d
eba0ccec5fa39
envelope: 01cc7abb200199d5071c94efa49fb62435d3e70d03cf9573a95da5420d3
eebcd2bbd6323c36fba7fa08a2b6e2aab6efcdc183c4c897d822cf96d29b129932a55
3d469ffa9999fcbd37a1e8b6c1e579bcf83fed355c9ff413e6158d72d16f3ccd8699e
906027842694b6293b6303bbb7f324e0fccb4ae0f01edb60ee1d32992696e
handshake_secret: 2b041dcf12ac9b75dded88f891c25d76746ce9e2c1a43118ac4
aa5721cdc1bc2f0691e6c012a1ea9eb95ab4899b3e7058d37fe9546c46b0511877e40
f55aac6c
handshake_encrypt_key: ceef10f15d869a4cea8174fa98d0d96c7aaf8602d006fe
0c5274a40173db76cac820138c5890bb63fb974d1e3e925850cc2464e2c10f0a9a776
9a45e80889b1e
server_mac_key: f8fd7fdc349b5ae1339515e05912c89a795f561a117cdc84d8d8b
5f05b05751abfb87fa01c799c5d367244d1e32eab67ff926833c6025c556acffa4af1
f3871a
client_mac_key: 92a30cc82c374c06895aa07e81f0cf5f25309a24b595faefcd225
1f9219b47e47d17da4fe8b572dedefa350ed365f87b217973e90d0b647a2ccf1d796a
8970f6
]]></artwork>
        </section>
        <section anchor="output-values" numbered="true" toc="default">
          <name>Output Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
registration_request: ec9027daa5e9a901d641286a7ded51364142936ac7636e1
42e3f4368b4bd8124
registration_response: 8867d7c8c2c576a6322d49d46078ea32f479aed917c70a
636d3ada4397ea1c0e66e130c6eb5b41f851b235b03a0eafeaa883f64147bc62cb749
c22c762389c3c
registration_upload: 360e716c676cfe4d9968d1a352ed3faf17603863e0a7aa19
05df6ea129343b0901cc7abb200199d5071c94efa49fb62435d3e70d03cf9573a95da
5420d3eebcd2bbd6323c36fba7fa08a2b6e2aab6efcdc183c4c897d822cf96d29b129
932a553d469ffa9999fcbd37a1e8b6c1e579bcf83fed355c9ff413e6158d72d16f3cc
d8699e906027842694b6293b6303bbb7f324e0fccb4ae0f01edb60ee1d32992696e
KE1: e06a32011e1b1704eb686b263e5d132fff4e9f6429cd93b98db107485006792c
58dc21475ff730342f807bf031c7ae47a11f0d4dfaa63a7feb15d7e36427ca4400096
8656c6c6f20626f62a4084c7296b1a3d5a5e4a24358750489575acfd8fcfa6e787492
b98265a5e651
KE2: 66f6b5fa1a4eb6bd7a0c93ed2639a31cba0d02e2df744003641d5a30a4a12364
66e130c6eb5b41f851b235b03a0eafeaa883f64147bc62cb749c22c762389c3c01cc7
abb200199d5071c94efa49fb62435d3e70d03cf9573a95da5420d3eebcd2bbd6323c3
6fba7fa08a2b6e2aab6efcdc183c4c897d822cf96d29b129932a553d469ffa9999fcb
d37a1e8b6c1e579bcf83fed355c9ff413e6158d72d16f3ccd8699e906027842694b62
93b6303bbb7f324e0fccb4ae0f01edb60ee1d32992696e98b8081059f60ffed9336f0
26fd8e124737205ac73f5348ae5bebdb49456c70f5214e3ddc73db786480b79fa2da7
87f2080b82cbe922c2a9592b44597d9a702e000f72f38a0945819089c44c86820c51d
89cc35f77df03d330101bbed3b2f69066112f32529bdda0998657350fc9f8da4cde73
408ad931f4c2ea6237ccae4696483388b174f50cf96d439139b0f8680c3b
KE3: 9f0e4f73455ca9fe06bb52ad02670b09be5a03db11a73be4422f19963be082b0
eb55871022e8d1d87adc3ab50de7c738058eb659866d091648f2fed12e23fd53
export_key: 66c0b72aa829f13a166fb1a1168f1e26023921f0eed1126def4f81ba0
4924ad6012e42b63656ec199ba27670d1e7f23dc0a927714edc140134dde5a5d2063d
fc
session_key: 951c2bb1b876725fa7d3829db791dddd406a688507b47e24101bd0cc
5d071760b6fba59e8758a6ea6d7e5f51a715b49a47c50fee9a7c8a0451243c3ee837f
d30
]]></artwork>
        </section>
      </section>
      <section anchor="opaque-3dh-test-vector-2" numbered="true" toc="default">
        <name>OPAQUE-3DH Test Vector 2</name>
        <section anchor="configuration-1" numbered="true" toc="default">
          <name>Configuration</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
OPRF: 0002
Hash: SHA512
SlowHash: Identity
EnvelopeMode: 01
Group: decaf448
Nh: 64
Npk: 56
Nsk: 56
]]></artwork>
        </section>
        <section anchor="input-values-1" numbered="true" toc="default">
          <name>Input Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
password: 436f7272656374486f72736542617474657279537461706c65
envelope_nonce: a3810457d65c1f14524f6a9fc0ad0d43c17732ae2f159e64aeeaf
c56dd63a49c
client_private_key: 614bb578f29cc677ea9e7aea3e4839413997e020f9377b63c
13584156a09a46dd2a425c41eac0e313a47e99d05df72c6e1d58e6592577a0d
client_public_key: a8f6d7dad9ec587964d6dffb1b63f951dc30a934137eb42057
f390d593dfafb6a687ec5c3ad3c35bb6a71338dc8106bd53b3a4fcec6110a1
server_private_key: 4c115060bca87db7d73e00cbb8559f84cb7a221b235b0950a
0ab553f03f10e1386abe954011b7da62bb6599418ef90b5d4ea98cc28aff517
server_public_key: bc66494bf44cdfed66f6b4c482a18e00a3d16a09d11775064f
963cc7bae3b6592a6b03fb982f5b5676972005a29d1dcfd46b6986088ca9d4
client_info: 68656c6c6f20626f62
server_info: 6772656574696e677320616c696365
server_nonce: f1b33f774f5166cde92f150e2bebf58bbd5f194a7e48ceb6078b235
e185af474
client_nonce: b7b96900d3092b9547505710da9762561ed69da9dd1a5444c6215de
6fa2a40f8
server_keyshare: 5472ca0fc98d652ded1ba4edc7d876a791b2c2a61c1201ffe354
8e0f3a1d479e1629a35a7f910ef27f46c93ade70ee4cbdf9a2183f6d0754
client_keyshare: 46770873fdab1e43177a9f1b2d127a44e0b4c2becf3ac4545248
ef410d143cce32f76df27f47cf19347b42e3cd1f9432cda204701e188c32
server_private_keyshare: 0676f161ab555182908dbd7947b1c988956fa73b17b3
73b72fd4e3c0264a26aa4cab20fd864de6ceab345e8d755997956ddd1f265e8be105
client_private_keyshare: d0f08ac99ef2ab5b26fa7b2a6d920c76cf03fb57bdea
cc2ec39330fd6e7f9e5dbdfcb571168f337dd52851d4bc07947c858dc735bab8ca2b
blind_registration: a614f1894bcf6a1c7cef33909b794fe6e69a642b20f4c9118
febffaf6b6a31471fe7794aa77ced123f07e56cc27de60b0ab106c0b8eab127
blind_login: 668b3aab5207735beb86c5379228da260159dc24f7c5c2483a81aff8
d9ff676ebd81db28eb1e147561c478a3f84cbf77037f01025c7fd42a
oprf_key: 93dd2d051e90efe4e2e093bc1e82b80e8cce6afa798ac214abffabac2a2
58015d93e9faf0f2009d16c797646097d761e2b84e0df971d7b39
]]></artwork>
        </section>
        <section anchor="intermediate-values-1" numbered="true" toc="default">
          <name>Intermediate Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
auth_key: 79ba15aa7db6b18f4d737be4dee7d5f186c235e4f8ec865513af292c056
b86e93bb8ebe2915fe0f43187e7cbd4bb94661ceb6496cbc877d598d001296defd7a3
prk: 67292e51a7da30331f94411e51ad6c03cdd2e0c5fce4c6a125cdf8cff688b9f5
100a5def2c0ef959db505ea09e81c43afc1450ed767de9d2cbc9f93fb7a306a9
pseudorandom_pad: 4b1221753544450748eda40790e4712480e36c451db367025d6
6843df9d916bf2c94696c60b951bf984f71d2b8d70d5980aacb9602a12af7
envelope: 01a3810457d65c1f14524f6a9fc0ad0d43c17732ae2f159e64aeeafc56d
d63a49c2a59940dc7d88370a273deedaeac4865b9748c65e4841c619c53002893d0b2
d2fe304ca87e155f8ea208984fbd087f9f617f45f390f650fac6b3a40c7e6b1d4b8c5
5b0575eac0f323c99337c232fad2dc07538eacebd947516a97ac420aa1f1851a20552
4e5dda112d0d949f3003777c47ff0724e8b0aed6
handshake_secret: 830f54c125468f05d8403f455ab1440885602e3dacab1e0a69b
0c6664eac71991e65049e215a5abda52d8960d4c68c58b5003afda0cd59e2487bfa60
5e42f209
handshake_encrypt_key: e29949872e78acfc53c7eda5d0bb30364c128ef5f69d02
efa3d18d08f7b1ca79fda1da3ed12ee796585845d804a961e29451755a8e7cb43c28f
bcc028903be05
server_mac_key: b12f274b224ff2bc1413ac87d52d4059da2af57375514cc43eeb4
e9ef602eddc149f7c8ca8afbe403e0997b859034bd304efd3d51750b1c38eccacfe78
5b17f0
client_mac_key: 9216883df807ee47d405443aaf990d2712b30ed400079ae54375a
51d1ced956c4153853e50bda1f1cf8e5323df3d9418b9d91e9be9cd4eb0b5efdc76e5
ad1c01
]]></artwork>
        </section>
        <section anchor="output-values-1" numbered="true" toc="default">
          <name>Output Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
registration_request: d21b318acf1b255d0f009bf3cb24b7b2f88cb58880775b8
dff43a81ab49fe73f0356b70ff3e5c251bc9810767c98491d8187d2cf11dff618
registration_response: c023432da8f17d6e5e740d9d1a0fb55dbc8e1830bd72ec
2e1f59da065858170b05c1f711ca085d8cf5a52ae1ea5198196bd9907dca045c6fbc6
6494bf44cdfed66f6b4c482a18e00a3d16a09d11775064f963cc7bae3b6592a6b03fb
982f5b5676972005a29d1dcfd46b6986088ca9d4
registration_upload: a8f6d7dad9ec587964d6dffb1b63f951dc30a934137eb420
57f390d593dfafb6a687ec5c3ad3c35bb6a71338dc8106bd53b3a4fcec6110a101a38
10457d65c1f14524f6a9fc0ad0d43c17732ae2f159e64aeeafc56dd63a49c2a59940d
c7d88370a273deedaeac4865b9748c65e4841c619c53002893d0b2d2fe304ca87e155
f8ea208984fbd087f9f617f45f390f650fac6b3a40c7e6b1d4b8c55b0575eac0f323c
99337c232fad2dc07538eacebd947516a97ac420aa1f1851a205524e5dda112d0d949
f3003777c47ff0724e8b0aed6
KE1: 30a31f471b8adc9e3fcb796a6ee1ee97edabf6a77468c58621a0cfaecee3c1ac
1a1dbe16a0fbf6fc4d2f882d8431303bded7a16d207f840cb7b96900d3092b9547505
710da9762561ed69da9dd1a5444c6215de6fa2a40f8000968656c6c6f20626f624677
0873fdab1e43177a9f1b2d127a44e0b4c2becf3ac4545248ef410d143cce32f76df27
f47cf19347b42e3cd1f9432cda204701e188c32
KE2: 2453710eb7a3226bfedb501efe06772d9450aa9ba9eed8adddd931964364e3d3
d5d2a22822f0d85569fa396b8e9c6657ff5115dbd4c0a218bc66494bf44cdfed66f6b
4c482a18e00a3d16a09d11775064f963cc7bae3b6592a6b03fb982f5b5676972005a2
9d1dcfd46b6986088ca9d401a3810457d65c1f14524f6a9fc0ad0d43c17732ae2f159
e64aeeafc56dd63a49c2a59940dc7d88370a273deedaeac4865b9748c65e4841c619c
53002893d0b2d2fe304ca87e155f8ea208984fbd087f9f617f45f390f650fac6b3a40
c7e6b1d4b8c55b0575eac0f323c99337c232fad2dc07538eacebd947516a97ac420aa
1f1851a205524e5dda112d0d949f3003777c47ff0724e8b0aed6f1b33f774f5166cde
92f150e2bebf58bbd5f194a7e48ceb6078b235e185af4745472ca0fc98d652ded1ba4
edc7d876a791b2c2a61c1201ffe3548e0f3a1d479e1629a35a7f910ef27f46c93ade7
0ee4cbdf9a2183f6d0754000f33baf0c6e2bcaa8a7155309d0b41d29d94469ac63cb5
9f2d54c81f8c445303d666eabe6a505aa7f5cab2d133c0bd40a951a56c9f2cb4f04e3
3ebae80858691b3799ecd1caf1be781f6f6e4c212661f
KE3: ae29171538fb3a9b3e643ec4812218f6e17038314b9a62e87ef2c72e82ed69a8
86c6f89ee2646dbb742905d88ed481894dd52f6acc3b31c0dbd46ba58bf0841d
export_key: 095d3246344474969774de1d7e21ea4835975c7dde152e446cf989a10
d9c8444e432fb65504dd80c2d4c2fa31203764c0fa4a15128541a8474f7c45119673e
16
session_key: 354a951281611e3b2ec14bf9b19325be441dc3395f4cc99838330071
5fdbacd282be642cb97f1e88f640c80b85452680aac8938970c1db61e398e87d9f0e9
2c5
]]></artwork>
        </section>
      </section>
      <section anchor="opaque-3dh-test-vector-3" numbered="true" toc="default">
        <name>OPAQUE-3DH Test Vector 3</name>
        <section anchor="configuration-2" numbered="true" toc="default">
          <name>Configuration</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
OPRF: 0003
Hash: SHA256
SlowHash: Identity
EnvelopeMode: 01
Group: P256_XMD:SHA-256_SSWU_RO_
Nh: 32
Npk: 33
Nsk: 32
]]></artwork>
        </section>
        <section anchor="input-values-2" numbered="true" toc="default">
          <name>Input Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
password: 436f7272656374486f72736542617474657279537461706c65
envelope_nonce: d07d294b6e901c4d5b76c7097a56dd893c47a236c7e0a275b5819
48f77f28abb
client_private_key: 67b5bcebad6393e2d0b7db3d2b4597a670a5204b2b606f5a2
8328916e1e5ea5b
client_public_key: 030e2b9005157dfd740a13c9525a2132512a463927174d9728
0f80f962d1a650e3
server_private_key: fc2e715b2db1e7a3ad4ff8af1b24daa1922d13757ac9df4ad
c7e4e0b6b399433
server_public_key: 03ca5ebe2c9b87ff1e76e2e72f8a59273fe5c9688fee7dd2f2
8964187a0940c397
client_info: 68656c6c6f20626f62
server_info: 6772656574696e677320616c696365
server_nonce: dc70522e4b7fb4c433ca014299328213a829cbf89e12fb3bfa08bc6
53fa3cbc9
client_nonce: 06eaf939cc8064e7d2c454faf5342f43c59b0974b55a965cf5b8ce3
52551d137
server_keyshare: 03a716d72106b7ad668ae097e553a46f4dd96961816fbe8e2243
43a7f0ab95a05a
client_keyshare: 037086638b1beb10b9a6a44ea0ee5b369081004df36cba0c16c8
d485482de57ff6
server_private_keyshare: a6532c99c1ea3f03d05f6e78dc1edabd3b9631be9f8b
274d9aaf671bfb6a7753
client_private_keyshare: 29bf435021b89c683259773bc686956af0c7822ba317
fb5e86028c44b92bd3af
blind_registration: 3e7c5057e09e220065ea8c257c0dd6055c4b401063eff0bf2
42b4cd534a79bad
blind_login: dcf6744d388ca013ef33edd369304ed96fc56c7c6c0bd369f8e926ff
e4854a59
oprf_key: f6b3e908bdb38e3c626a939e19daca653b9217801b5d51cef66d9fdbd94
a5354
]]></artwork>
        </section>
        <section anchor="intermediate-values-2" numbered="true" toc="default">
          <name>Intermediate Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
auth_key: 226ffbc20f19c9d956d1f172bd5c9b1bb475716b6438aedfdcc559756ee
236f7
prk: 4d00010592e76a29c3173d883e94b55af3802c85983bb1374407a226a374cff4
pseudorandom_pad: 0123cec727a51fecb61d447f04fac3591299cd50bf55cf55334
2f1f7fc0b1e07
envelope: 01d07d294b6e901c4d5b76c7097a56dd893c47a236c7e0a275b581948f7
7f28abb6696722c8ac68c0e66aa9f422fbf54ff623ced1b9435a00f1b7078e11deef4
5cd47baf68df4d4eb20b76f04f8dbaba219bf0f4e5c6d47bf2b4bf5fe23e724bff
handshake_secret: 4d80ee40c7a11a9c4b27ca9ee6e38797322a9e3c904b3e35c8a
00bbad403029d
handshake_encrypt_key: 244d132b27991dafff260364681ff473472249ea2ae625
c223144b97ca754c44
server_mac_key: 99f2a9e5af84a221b3efeda5a5bb5372a587462a5585f33ea0c85
67aedcf03ea
client_mac_key: f86379af46726649af600c69dacaa96ed967eac0f91225ae00c68
1d86884408a
]]></artwork>
        </section>
        <section anchor="output-values-2" numbered="true" toc="default">
          <name>Output Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
registration_request: 0295067c743d15a0a9d4c6c15511b67e3858e9e22f8c44a
0c1de6e33cda494024b
registration_response: 02465cd175b404fc1426b3b9518a79ee219007679909f4
59f92cfc89929c89458e03ca5ebe2c9b87ff1e76e2e72f8a59273fe5c9688fee7dd2f
28964187a0940c397
registration_upload: 030e2b9005157dfd740a13c9525a2132512a463927174d97
280f80f962d1a650e301d07d294b6e901c4d5b76c7097a56dd893c47a236c7e0a275b
581948f77f28abb6696722c8ac68c0e66aa9f422fbf54ff623ced1b9435a00f1b7078
e11deef45cd47baf68df4d4eb20b76f04f8dbaba219bf0f4e5c6d47bf2b4bf5fe23e7
24bff
KE1: 0230e8f9b3689b65b952bf044702673c4d5278119b25d3833a3de655b9289f89
e106eaf939cc8064e7d2c454faf5342f43c59b0974b55a965cf5b8ce352551d137000
968656c6c6f20626f62037086638b1beb10b9a6a44ea0ee5b369081004df36cba0c16
c8d485482de57ff6
KE2: 025c6387cee347fa24a57c7021890ee13f435ea5e92b20fb488c3984e060ad4d
6f03ca5ebe2c9b87ff1e76e2e72f8a59273fe5c9688fee7dd2f28964187a0940c3970
1d07d294b6e901c4d5b76c7097a56dd893c47a236c7e0a275b581948f77f28abb6696
722c8ac68c0e66aa9f422fbf54ff623ced1b9435a00f1b7078e11deef45cd47baf68d
f4d4eb20b76f04f8dbaba219bf0f4e5c6d47bf2b4bf5fe23e724bffdc70522e4b7fb4
c433ca014299328213a829cbf89e12fb3bfa08bc653fa3cbc903a716d72106b7ad668
ae097e553a46f4dd96961816fbe8e224343a7f0ab95a05a000f2519167d418dc3c7ea
cd8cae6a55c483bef6d2f7a67d48ce30701d858da6caec7cdf7cac7990777eb410591
612736e
KE3: 5ef3c7290d3af42afdfc6b87af044c00ec8177e34d9a9464b8eb4c033424ad82
export_key: a5d8bb0d880b6b5bdfda31d2f01b695435bccbb57a5f8efd5dae1e46b
2a959c4
session_key: b6bece8471d280561dc969b22607b29c2836d1ca9a49e81a15ddb85c
467662e7
]]></artwork>
        </section>
      </section>
      <section anchor="opaque-3dh-test-vector-4" numbered="true" toc="default">
        <name>OPAQUE-3DH Test Vector 4</name>
        <section anchor="configuration-3" numbered="true" toc="default">
          <name>Configuration</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
OPRF: 0004
Hash: SHA512
SlowHash: Identity
EnvelopeMode: 01
Group: P384_XMD:SHA-512_SSWU_RO_
Nh: 64
Npk: 49
Nsk: 48
]]></artwork>
        </section>
        <section anchor="input-values-3" numbered="true" toc="default">
          <name>Input Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
password: 436f7272656374486f72736542617474657279537461706c65
envelope_nonce: 22bc649eec25874f87e625008d252fceffbb8b434327914db6c09
d07b7f3bf19
client_private_key: f3cfa0420080cbff2e3431bcc25f80b409c533dd21924d77b
cbd10873989b7e58306b863276ae74049615162a416d508
client_public_key: 02c86369d6eae0978bdd4030b43e0619ce46ea9d91fa6e0e75
75bb12aa4857db98b952d8af9d92f75899c49d0d18793c1e
server_private_key: 2902c13bdc9993d3717bda68fc080b9802ae4effd5dc972d9
f9fb3bbbf106add174393effaf0a175fa8e85f898568620
server_public_key: 0251f78cbd5c7a3fbf4cdaeb755eb8cc4159edb0ef38baebb5
03dbefed5c89c14f7c2b99ed242b3d1de890f7515bad94bd
client_info: 68656c6c6f20626f62
server_info: 6772656574696e677320616c696365
server_nonce: 7e4c5d3a4f779d5966cc8ca367e47e0716ad0f33aa100fe68507920
a1a6e3578
client_nonce: af0eb9b48c985e2ba859ce089fc342c648ddadfca4735f5b2e631ee
a7fdf967b
server_keyshare: 035684e8cdae6ce360c2d3f41e4b059f34f986e92dd50c8255f7
d7dc0c16252ef9b8c9fb9e0c2846053355e7fcfa46781f
client_keyshare: 027044d31354b5b98587d7d144526f6c8528317cc3e9675c90a1
952f4bc2725a6a154f59aed10e4ff7ec68d4917d74122b
server_private_keyshare: 3e3869237f74106241777f230582e849076f08753056
c186437ded8ee22f96e44bd5b6ec07cb131d51cf1324c1238699
client_private_keyshare: 59b596174a682828f3934d510217ce7890f67cafc0ff
aa7a1e1d1ced3c477fea691e696032c8709c86cbcda2b184ad01
blind_registration: 3382c7ec9bdd6e75898e4877d8e2bc16359073c015b92d154
50f7fb395bf52c6ea98384c491fe4e4d423b59de7b0df39
blind_login: 29d29abeabede9788d11782429bff296102f6338df84c9602bfa9e7d
690b1f7a173d07e6d54a419db4a6308f8b09589f
oprf_key: 4283efb9cd1ee4061c6bf884e60a877321ece4f9b6ffd01ce8208254541
3bd9bb5e8f3c63b86ae88d9ce0530b01cb1c3
]]></artwork>
        </section>
        <section anchor="intermediate-values-3" numbered="true" toc="default">
          <name>Intermediate Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
auth_key: 8683467532811d66f0425a128b09444e65039a9117b1a6576f92dadf808
c2f4452bbf8d6a06ab2402252aa373417d428c1be2be215f92ea540c17374f23de7f0
prk: 44d67b8c3f03ca205a51628bcbf41998a9fe4b4f97a3d29d5bd8bcbda03dbe5a
303d536583d7d6c960d57f9d7c311b61a948916f85d8f69a4068755418608c79
pseudorandom_pad: 9f64c761fc6a52010cab3598d1a0427300942c600646ef48214
bb0742003dd9ac788b5bf931edcf813ee2706fcc9d97b
envelope: 0122bc649eec25874f87e625008d252fceffbb8b434327914db6c09d07b
7f3bf196cab6723fcea99fe229f042413ffc2c709511fbd27d4a23f9df6a0f3198a6a
7f448e0ddcb4743bb85a8f766458df0c73f415cbb11c8336491fa796488c4df057449
b8b2ce1f05a32ec00168d5a0c9eaa049e2b70fac847a2f4b48006c98f662bf97e5900
edee521388deea91dc57a877
handshake_secret: 1c668baa9ed83178a0cef4c16dcc7e0e86932607f0c913af336
2c639c2532ffadcda40c94f94efa66fdac4cfb59185c17557dae088d344b616834c89
c5d700bb
handshake_encrypt_key: 3df8e9afb60fd6915bf2ef9cf909e7164acb9113d327fd
d024392a1ca45a0b8e7d25ec4255b8e870caaa5673b60905feceadd897519934772b6
577bfc415359a
server_mac_key: 1fee1495e257b9f4369874cd6a58c9f6eb902dbef8469b82b398a
b3c0f0b5d70101704a71a1087e4ac3e8d19b92d111db2fdde95b20ee46971d8b91d8a
b042c2
client_mac_key: 22cc03b0a2f2cda7112afb5714af9e3b84924237855a23cc64bc2
2c00e401bb29e507d7824ed0640c6c05b295c93172284a266aec2aeb01a1c05941f28
e28daf
]]></artwork>
        </section>
        <section anchor="output-values-3" numbered="true" toc="default">
          <name>Output Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
registration_request: 02fc4b3addc3978fba0bdfacc4fc662bc8af59e00392b0b
6b5fad9a5d6a60a015b4a0e2d1c8e2f95e229fdbdf50ab93a7f
registration_response: 02ba75a6a537e88c57e67208566dfa0193387002d3028c
a8cb0a2c08c2880f1ed91335a6c289d1620feea05b6243b181280251f78cbd5c7a3fb
f4cdaeb755eb8cc4159edb0ef38baebb503dbefed5c89c14f7c2b99ed242b3d1de890
f7515bad94bd
registration_upload: 02c86369d6eae0978bdd4030b43e0619ce46ea9d91fa6e0e
7575bb12aa4857db98b952d8af9d92f75899c49d0d18793c1e0122bc649eec25874f8
7e625008d252fceffbb8b434327914db6c09d07b7f3bf196cab6723fcea99fe229f04
2413ffc2c709511fbd27d4a23f9df6a0f3198a6a7f448e0ddcb4743bb85a8f766458d
f0c73f415cbb11c8336491fa796488c4df057449b8b2ce1f05a32ec00168d5a0c9eaa
049e2b70fac847a2f4b48006c98f662bf97e5900edee521388deea91dc57a877
KE1: 02778d77bae1e5e05311469840b632fc724f55070922598457dcb06b22f8fa87
d6ba7886fe34283d8727a1e1d30251a5c9af0eb9b48c985e2ba859ce089fc342c648d
dadfca4735f5b2e631eea7fdf967b000968656c6c6f20626f62027044d31354b5b985
87d7d144526f6c8528317cc3e9675c90a1952f4bc2725a6a154f59aed10e4ff7ec68d
4917d74122b
KE2: 03ad08056e57dc6424c6210d7e12801ec7de62e2de9decc6f034d000dca821ab
aca9d733e8807d072bb8c211c477d27fc20251f78cbd5c7a3fbf4cdaeb755eb8cc415
9edb0ef38baebb503dbefed5c89c14f7c2b99ed242b3d1de890f7515bad94bd0122bc
649eec25874f87e625008d252fceffbb8b434327914db6c09d07b7f3bf196cab6723f
cea99fe229f042413ffc2c709511fbd27d4a23f9df6a0f3198a6a7f448e0ddcb4743b
b85a8f766458df0c73f415cbb11c8336491fa796488c4df057449b8b2ce1f05a32ec0
0168d5a0c9eaa049e2b70fac847a2f4b48006c98f662bf97e5900edee521388deea91
dc57a8777e4c5d3a4f779d5966cc8ca367e47e0716ad0f33aa100fe68507920a1a6e3
578035684e8cdae6ce360c2d3f41e4b059f34f986e92dd50c8255f7d7dc0c16252ef9
b8c9fb9e0c2846053355e7fcfa46781f000f51b16b11ae1a74e076f8ceaac5a7ec5bf
578645dbf57581437cd48dfe01f36e169053188d159bd9e23ec7af8d31be741472b40
6d7618c9012d37d8a33fe02b91aacbbab0b19d5b78955e5d3c76e5ae
KE3: a33a58dc32f246eb495e5645688b51662bd2615a254089f535a3262b6a4073f5
3c79c7e08de7e551f8d5555e15e2aa72472b07fe6f1899712e34c60ecc36141b
export_key: 1a9cd58039b5c8dd9c17c9477c6bfa45ce5a92a097edf99cc760ee71b
6766c01b7f96e53d95fd13f0374e066c4fb5b3b08cc49e3db408ae5926cbe43c391fe
0c
session_key: 868df74aa4b3e5d4bcb6a5ef85ebfb1070a5644b0fb3b6450cfcb425
d759df9d210071d5b2cc407379935fee1e4a014b555fe4fdf92e553d415354188df8d
6ff
]]></artwork>
        </section>
      </section>
      <section anchor="opaque-3dh-test-vector-5" numbered="true" toc="default">
        <name>OPAQUE-3DH Test Vector 5</name>
        <section anchor="configuration-4" numbered="true" toc="default">
          <name>Configuration</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
OPRF: 0005
Hash: SHA512
SlowHash: Identity
EnvelopeMode: 01
Group: P521_XMD:SHA-512_SSWU_RO_
Nh: 64
Npk: 67
Nsk: 66
]]></artwork>
        </section>
        <section anchor="input-values-4" numbered="true" toc="default">
          <name>Input Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
password: 436f7272656374486f72736542617474657279537461706c65
envelope_nonce: ccb5f7f7e31e8295587ef5f9f90fa475de567165cf6482e1f5579
583d0d7c54f
client_private_key: 004274252f29a6e19915f81b0c7dcea93ce6580e089ede31c
1b6b5b33494581b48678aec1d0c3d16afd032da7ba961449a56cec6fb918e932b06d5
778ac7f67becfc
client_public_key: 02000202cbe2dcdfe616ffe600cbe24768cdba3066d53d2b58
feffa43e199c833f85963a612b79a2fbfb065f34e2edf51e39ba3db9cbdec0fffcce0
113a5c05b2c28b1
server_private_key: 000739878b22e5c4833d34c486a8510e7cca4c1b81ece04f4
7e8d2554a5ebd83679b4c1e67ed82f2891751aa7094602be672c324929abb1876a7f7
165ac7ec79bfd6
server_public_key: 0300159aed22eed3a1ca9e7a8b063b1b62c3a48b00b7b83edf
6047defdb1b05e14b14faa77afb5f08ffaa04cc8c5df59983e42677f7b6c8d63c0348
15367374543ed1c
client_info: 68656c6c6f20626f62
server_info: 6772656574696e677320616c696365
server_nonce: b18ed353e7c876de386bfab5f549f6c8e8dc8ba0f63cb32fe4d67a6
eb3556b8e
client_nonce: 6303dc1f00a19ea8ce857f9c2156702c56303a53d5ecbaa35f5a3d5
47e85b924
server_keyshare: 02003fe52f2e417b5c448309d4a54363aa84725feff99da4639f
caa9d60e5b1bea54a7f5661b05bd4d3a662d6688a76f177c63d1f1a548ff00d5d6c6f
b331b56e1b890
client_keyshare: 0201a487b80b1f7927e7e44eb0cea2498ce462ab21fcb4b8e987
27aac9e91dd8f8e22338953560a0e088934084f2a27b85b31a3ba55b73ff9a0d17333
4667996078929
server_private_keyshare: 0134471b1e6eb4b043b9644c8539857abe3a2022e9c9
fd6a1695bbabe8add48bcd149ff3b840dc8a5d2483705fcc9a39607288b935b0797ac
6b3c4b2e848823ac9af
client_private_keyshare: 002d816be03432370deb7c3c17d9fc7cb4e0ce646e04
e42d638e0fa7a434ed340772a8b5d6253d35895f4cff282d86b2358d89a82ee6523ef
f8db014d9b8b53ad7b1
blind_registration: 003f281099ef2625644aee0b6c5f5e6e01a2b052b3bd4caf5
39a41fabd4722d92472d858051ce9ad1a533176a862c697b2c392aff2aeb77eb20c2a
e6ba52fe31e13f
blind_login: 01c28b45f65717a40c38f671d326e196e8a21bf6cfd40327a95f1ccf
c82a9f83a75dae86286729214a1ba9a359ab01833477b8cb91932d0c81667a0e3244b
896ac15
oprf_key: 00363749be19e92df82df1acd3f606cc9faa9dc7ab251997738a3a232f3
52c2059c25684e6ccea420f8d0c793f9f51171628f1d28bb7402ca4aea6465e267b7f
977b
]]></artwork>
        </section>
        <section anchor="intermediate-values-4" numbered="true" toc="default">
          <name>Intermediate Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
auth_key: 5beea85089b8a18c21ac2e4be507a181faf3dbf07624b1e4180c67b1639
932d477388c9a6254c1f8eea4e6594aa0719a824add4d474472d5c9a2931f95b7d647
prk: 935f5cbf45cd48d365b20a1ab637fe31b9fc771b70af288bbe890e0b015b2225
7380360eaf8a5a126f055fa0f68246877f18bcf5269e41746cf671b3c2a254ca
pseudorandom_pad: fd878bcecd07a5b599b07502d12c1386728e81576c5351b96f0
36919b8edb84f7c7f3251575735b329af90a72d2ddc3c544e5b9cf1812cef6040a9fb
7bbcf9e70e2a
envelope: 01ccb5f7f7e31e8295587ef5f9f90fa475de567165cf6482e1f5579583d
0d7c54ffdc5ffebe22e035400a58d19dd51dd2f4e68d95964cd8f88aeb5dcaa8c79e0
543418b8bd4a5b08a5867fa27d5684bd78ce18955a0a10a27c4b467c8cf17b0f9ce2d
6d11f62e0de7801c4adbd6963b5a2bf64c9d157139f97c7556f68e1942a98ddc92adf
b5a1b26607504d1614b0c864ec61c3b80d7659c91a7cb68eae3516294053
handshake_secret: ba997ccbf434ae93cee1dcde4df3a8302db1e650ba4375acbb7
6715e63e91acca5d9c215425946e90004194832ba1078b50873f73b23af779d4ede26
9ecb491b
handshake_encrypt_key: c4324223326aa611bd0eb147f16e47ea8dccb2f4360a53
d332a5e3bd95a6812b0fa8e6e15997447b08b094a22856e44e23d0c1536b1a5824a70
f0bcc1ff4e752
server_mac_key: b782fc84b81fd9434f4e5339b33bddbf23ad0220d6dd42f2980f4
7ce31f59b5127a023591741e8074eda2175fbc298f1f5138d9e06789e7d179190178a
04f901
client_mac_key: 786e739a91fd527e24d2fabaebf862c7d8d4ca067bc365526b152
cf5de9a7aafea44e5f223c0e5a73cf9c551e19e05356f606fa2d10acd46a2a1239d73
9ebd49
]]></artwork>
        </section>
        <section anchor="output-values-4" numbered="true" toc="default">
          <name>Output Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
registration_request: 03016af598df5549c18c7f904ff395006449477bd594663
b2948142db6d2aac90d204900d669b5e73cfefdc91d7bee857d9522eb996601d2c3f8
25221ed46f51c89ec7
registration_response: 0201b7e055f71ebc3020873cd002596dfce243891fc7f2
278ab1c5bf768886067e779ce4d922dfaa87e3dae9ed4d1ba2bd19ee24c2f33f3f19f
89d5b0eb6865880659c0300159aed22eed3a1ca9e7a8b063b1b62c3a48b00b7b83edf
6047defdb1b05e14b14faa77afb5f08ffaa04cc8c5df59983e42677f7b6c8d63c0348
15367374543ed1c
registration_upload: 02000202cbe2dcdfe616ffe600cbe24768cdba3066d53d2b
58feffa43e199c833f85963a612b79a2fbfb065f34e2edf51e39ba3db9cbdec0fffcc
e0113a5c05b2c28b101ccb5f7f7e31e8295587ef5f9f90fa475de567165cf6482e1f5
579583d0d7c54ffdc5ffebe22e035400a58d19dd51dd2f4e68d95964cd8f88aeb5dca
a8c79e0543418b8bd4a5b08a5867fa27d5684bd78ce18955a0a10a27c4b467c8cf17b
0f9ce2d6d11f62e0de7801c4adbd6963b5a2bf64c9d157139f97c7556f68e1942a98d
dc92adfb5a1b26607504d1614b0c864ec61c3b80d7659c91a7cb68eae3516294053
KE1: 020142931e5e870e35226b46f8a9692babfabede9ca86ffded305ba079274920
aa78f9a45341b6693765e601237d6a6bce8ddf194f6161144e9a2a1bcaa5860e6637c
d6303dc1f00a19ea8ce857f9c2156702c56303a53d5ecbaa35f5a3d547e85b9240009
68656c6c6f20626f620201a487b80b1f7927e7e44eb0cea2498ce462ab21fcb4b8e98
727aac9e91dd8f8e22338953560a0e088934084f2a27b85b31a3ba55b73ff9a0d1733
34667996078929
KE2: 02000c9ca900d4b470d043136562cd7d9debe13d6595a274e46a1bd9a7a2e3d6
19f6a7cc0324f30fc8fa10f8eefcb7e968c6f2e50cf0e2ee3487d9a80cbe24255600e
b0300159aed22eed3a1ca9e7a8b063b1b62c3a48b00b7b83edf6047defdb1b05e14b1
4faa77afb5f08ffaa04cc8c5df59983e42677f7b6c8d63c034815367374543ed1c01c
cb5f7f7e31e8295587ef5f9f90fa475de567165cf6482e1f5579583d0d7c54ffdc5ff
ebe22e035400a58d19dd51dd2f4e68d95964cd8f88aeb5dcaa8c79e0543418b8bd4a5
b08a5867fa27d5684bd78ce18955a0a10a27c4b467c8cf17b0f9ce2d6d11f62e0de78
01c4adbd6963b5a2bf64c9d157139f97c7556f68e1942a98ddc92adfb5a1b26607504
d1614b0c864ec61c3b80d7659c91a7cb68eae3516294053b18ed353e7c876de386bfa
b5f549f6c8e8dc8ba0f63cb32fe4d67a6eb3556b8e02003fe52f2e417b5c448309d4a
54363aa84725feff99da4639fcaa9d60e5b1bea54a7f5661b05bd4d3a662d6688a76f
177c63d1f1a548ff00d5d6c6fb331b56e1b890000fb9963a4ef0da2bd75360ae592d5
f4bc54b8cf32d0748333345ed7f75ca2045eb413c7a9b844ca9f5ecb23c0385108623
211a8b89c613912a54d48854c0b4832829bd718a890cc72334ddaf2f18e87e
KE3: a1765707136891b2d76da4c47e8c883729fcba6786b91b3a11d682c98a9cc50b
b7ea8fbd8304c030d414506818b315ad8a990f0363ce7c1f5e8af5aaa66571c9
export_key: e80808e17d470f24478de9471e06fc0c7a1aa1e98af711d2f8424fba9
fcd8ed30dc2a5894813e4c2f9a650ab07bedb9516b4c87a995afe3387bcb8a6a7499c
76
session_key: 61933b6a3227a5fc10ac30b2186d91fa6095e42768426b74663b75f9
21b19556e24ce7253510a204a7f86aa0ba3e37c0b4dea2fd422bcb4a6b385416ff364
15e
]]></artwork>
        </section>
      </section>
      <section anchor="opaque-3dh-test-vector-6" numbered="true" toc="default">
        <name>OPAQUE-3DH Test Vector 6</name>
        <section anchor="configuration-5" numbered="true" toc="default">
          <name>Configuration</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
OPRF: 0001
Hash: SHA512
SlowHash: Identity
EnvelopeMode: 02
Group: ristretto255
Nh: 64
Npk: 32
Nsk: 32
]]></artwork>
        </section>
        <section anchor="input-values-5" numbered="true" toc="default">
          <name>Input Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
client_identity: 20fa92f2e4b7ea5b5e677ac4930ff3b93b0043481ab70bc613b2
e16a6dde6b05
server_identity: eae9dfa6b8348d34418c32d385e1eac99efbce1af320901f7c8e
de8d6d272c65
password: 436f7272656374486f72736542617474657279537461706c65
envelope_nonce: f41e8b3c5a999aa946f9b562a150e5c5e36748a31a79feb241809
0438877888c
client_private_key: dc70a99bbabf1ebe98b192e93cedceb9c0164e95b891bd8bc
81721b83d66b00b
client_public_key: 20fa92f2e4b7ea5b5e677ac4930ff3b93b0043481ab70bc613
b2e16a6dde6b05
server_private_key: 709687a36c94592ab76579f42ce1be6961f0700496e71df80
6ebd5320554720d
server_public_key: eae9dfa6b8348d34418c32d385e1eac99efbce1af320901f7c
8ede8d6d272c65
client_info: 68656c6c6f20626f62
server_info: 6772656574696e677320616c696365
server_nonce: ef49d83cef5f1411ea30abb82b08bd85423aadb86e2c19df5930b3c
8498b9f97
client_nonce: 4ab1227db632bc079f79c0f5279df2dfa75cfbd4434ab40dcf844d6
77165cd3b
server_keyshare: 96a9587e233e67f2397f10fec6355b68102534f1f1b115b4ddf7
485840efcd7c
client_keyshare: 54f35db3a52fb0cf2a97918a6987993231d227e28711eaef19a3
e5033632611a
server_private_keyshare: 6650d64df70618a878504ce73dcca27b1af125c67e48
1e7bd49d0b24709b200f
client_private_keyshare: ebb01c59f99bc955df622548e247f7ef180732909ff3
c5f87ff8c7867b8be704
blind_registration: 308f1d3fa1fea402f3c90b04601274050a3c6f467387c2f48
878823949b0e109
blind_login: 141e21373228a44b09d4c00da9a6bbaf9a5e54a1687c07f327833643
4245510b
oprf_key: b7126967aa0cb69c311b71343843ea041bae30e2bde41b548b8fbd8bced
97604
]]></artwork>
        </section>
        <section anchor="intermediate-values-5" numbered="true" toc="default">
          <name>Intermediate Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
auth_key: 9f761a5a56a74269b382403aeba47c1d24b9e200e1839efcb616fb280da
1b6ba7bd71d6455dd3cd979c545608cfbfc1c4e9ba677e1d40848054a00696c4b2589
prk: 30bc3f37a757890ac17ce46043f3c5ed30c96fb8743205e77e84dc167d98e114
6093150ff7b4d002f793bfe717e88d174ed2669abdd9e96af473a7ac82973b0a
pseudorandom_pad: b909f990c94b9c5949a2b8d0874d602f846b7981b331fd79978
b530cc46c8670
envelope: 02f41e8b3c5a999aa946f9b562a150e5c5e36748a31a79feb2418090438
877888c6579500b73f482e7d1132a39bba0ae96447d37140ba040f25f9c72b4f90a36
7bdb425fa1dd4c49e17780f33b821e1e019668fe7f45520e26996ac8cb08e3d2566cc
439c83030464effecb8350e7b1ca31087d87f6a45ed3910c185a24a89d282
handshake_secret: ff89f264f8c3974238f4c8d736af7b0a55f2e4edc487cbf3e5c
7b4bbf21acd7c1d28354c2c8555fba57c4d4b1fbb4b772bfdf909881f67dd517cc9f4
f6ebaeac
handshake_encrypt_key: 3071b181f639062cf70b74d0ffe5ec8fa695da13cd2f00
e74b8b7ef348ae7a5df9c3a32c9f7aeaad5a28379712cf849b9707e221dce124abfad
d0225a8e8e045
server_mac_key: 7c37b344d189cbbeff80bbb4b78e2703d1a80dc28239923094287
62f7ce2a93b11f6e85dd45c02809afe8583d4aad6377e72788773af92eef33c690692
20ae76
client_mac_key: 2c4aff12ba7aa911a51f9e5b7a7c01439d854c97e4b8ec842a9db
d78345760328fd5a72424e49e25ec8fe1b6d9d42f774516f400948bd5a105d995d000
2fc83b
]]></artwork>
        </section>
        <section anchor="output-values-5" numbered="true" toc="default">
          <name>Output Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
registration_request: 3c8b89966e261a5aaf7aeb6dcdd94c87ce311bf197221b8
7ef44632d58f18a05
registration_response: caf9243d7ef3e267815632bf79c85a27a23f218a438815
2a523f6a310949807beae9dfa6b8348d34418c32d385e1eac99efbce1af320901f7c8
ede8d6d272c65
registration_upload: 20fa92f2e4b7ea5b5e677ac4930ff3b93b0043481ab70bc6
13b2e16a6dde6b0502f41e8b3c5a999aa946f9b562a150e5c5e36748a31a79feb2418
090438877888c6579500b73f482e7d1132a39bba0ae96447d37140ba040f25f9c72b4
f90a367bdb425fa1dd4c49e17780f33b821e1e019668fe7f45520e26996ac8cb08e3d
2566cc439c83030464effecb8350e7b1ca31087d87f6a45ed3910c185a24a89d282
KE1: 8261a1efd78bea73faf256a23c200d729259886530fa43b875c1ca124b09bc7e
4ab1227db632bc079f79c0f5279df2dfa75cfbd4434ab40dcf844d677165cd3b00096
8656c6c6f20626f6254f35db3a52fb0cf2a97918a6987993231d227e28711eaef19a3
e5033632611a
KE2: fa1f33a43a03123ebe35345ef93aa23b57ea8bfbee7022b05a179d60768ba02e
eae9dfa6b8348d34418c32d385e1eac99efbce1af320901f7c8ede8d6d272c6502f41
e8b3c5a999aa946f9b562a150e5c5e36748a31a79feb2418090438877888c6579500b
73f482e7d1132a39bba0ae96447d37140ba040f25f9c72b4f90a367bdb425fa1dd4c4
9e17780f33b821e1e019668fe7f45520e26996ac8cb08e3d2566cc439c83030464eff
ecb8350e7b1ca31087d87f6a45ed3910c185a24a89d282ef49d83cef5f1411ea30abb
82b08bd85423aadb86e2c19df5930b3c8498b9f9796a9587e233e67f2397f10fec635
5b68102534f1f1b115b4ddf7485840efcd7c000f7ebe71d4ab326006a3aeca802435d
c995a38ac6662221f974cb920992d82b8ef8d147c77e29b628a82b5ccb01ea2f7bb60
af94cd1860e1bd974a11a1c9bd827789f663c4758eb71058c244138de0c2
KE3: d81f93397cdba85a43993d4d9afbdc67f147adfa2b223213b19692cb820eef48
5073eda4c8236b2f47702404ad60d9a875d189626fc7b7cc861825385470ae54
export_key: 03192555940b5b42e64e6200bf55cc701f1bace3d402a2f8d83977843
51a1e3fa1f07a471b783b208acb1d92be47903b6fa3a0df9f4d4b7956ee4f431e2950
f6
session_key: 58a7fa98bf3b7b52da21406abfb11d98734354edd47d7b32462c0513
f0617c89824ea6031d4147a86fc9f6c6837ce640c12fb937d764f296d1a9421ad1b2a
5d5
]]></artwork>
        </section>
      </section>
      <section anchor="opaque-3dh-test-vector-7" numbered="true" toc="default">
        <name>OPAQUE-3DH Test Vector 7</name>
        <section anchor="configuration-6" numbered="true" toc="default">
          <name>Configuration</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
OPRF: 0002
Hash: SHA512
SlowHash: Identity
EnvelopeMode: 02
Group: decaf448
Nh: 64
Npk: 56
Nsk: 56
]]></artwork>
        </section>
        <section anchor="input-values-6" numbered="true" toc="default">
          <name>Input Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
client_identity: e0f6146168d32f4b68e042ed5d5608d1108e84a08b6688798ead
0810b4f10d7a91f0767e197e946ebfc487bf62a5ed5684e7ab9137ee1862
server_identity: d49500848e7c06c8a5dd5bda74930ffd20fbef9a2de24a0068e5
bf3dc356852b10327be9803983271450bc6a8c683abcdd73883ee63543e9
password: 436f7272656374486f72736542617474657279537461706c65
envelope_nonce: 4c0ccd88c12f90364570c5ce356f457a762bbe590e27d6208ebc1
9332d37605d
client_private_key: 0a45c82e38a6ab6fb99ec1df7423e25a7851f9558e7a05166
03c9d0201b409c3fd0f0fe78bd37bf60927fafeca73ed8093538a9992c62235
client_public_key: e0f6146168d32f4b68e042ed5d5608d1108e84a08b6688798e
ad0810b4f10d7a91f0767e197e946ebfc487bf62a5ed5684e7ab9137ee1862
server_private_key: 64666faa068e5ff9e00d588446b7d6cdc09ae8df069b30987
a2cdd39286e0481a2eb899f4e0db672264527a8115f176c53709a4f6534f328
server_public_key: d49500848e7c06c8a5dd5bda74930ffd20fbef9a2de24a0068
e5bf3dc356852b10327be9803983271450bc6a8c683abcdd73883ee63543e9
client_info: 68656c6c6f20626f62
server_info: 6772656574696e677320616c696365
server_nonce: 975a2b5d6318131b85d7f2f47ea0b7edef8f33a1be69f09307604c1
3b7afdabd
client_nonce: df3b22899746ff552d61851fe5c2b5ff1e004fd95dfbcba1906ade5
fd38a70be
server_keyshare: 720df48b9e395c40448cf06a80bc9c1d90ae1a3080e4ba3368ca
056ba92921f79d67073fb91b7c94c3f3d33cc01613d7221f54fecd80bcbb
client_keyshare: e6f2ab22efb569a19f48355c7d5d4f728faf3a9142d45c20c098
bcbcb6c12fd92480bfb4e532923e64b9620b6bc84ac5f2d8f84ad466fd18
server_private_keyshare: e5d7202d6ed8cc45c4502850974076d720343b566089
1b5ab5655c3defb4b39b35b27ea20eb0bff035e9b9cbae6cfca36aa4827c32abd905
client_private_keyshare: a54c0d7bf4ee396a0e4a3f023b35698aaa93a2be8bb6
32747671b3edeaedff07116afbb5e73cbc273e2e0d0876780343578338425ed81d3b
blind_registration: 9d557ee103479baef585ba8017f7659cdd0b804c093852519
9d88853b52ccfc7802d09cf38ba35e36db24404602da8a616e7ad8f1c05cb36
blind_login: eaadba538bf67207633a956ea71fbd02ea2dbfe7e195dbd26ea562c6
f2406fe1df1367f98f6707dee9b2e3ebd9842b0442e25d086e099231
oprf_key: 98a5689edb98ed3424fa5c8584423c6b047121fc36fcec934c8ad24a98c
86d00e1e1d6d3d923a46519065977331abaa1e3c0d86591458b25
]]></artwork>
        </section>
        <section anchor="intermediate-values-6" numbered="true" toc="default">
          <name>Intermediate Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
auth_key: 7115d4b507621a9885dea1c09034a0bf258d9a04bb57e11d450a5d9956c
9810ef8f243225ad387c8c6d2511be920ee5cd66c79079509e6d132fc6fc8f4238f6c
prk: 296432fda62b3ca77c10e38952b4c18e9e12164f883e9fcc4f2723c37fa3b8f3
6c4f4a4ca009aefd1391e3a0a36fc05580c98c55a17623dc593b9d18e3babc25
pseudorandom_pad: d59012fd3a30fe215ede1b55ba2106c28f4a5f87dfc29b6525a
b3f41b4ffe552051bca9553b9b3149b06e3723d4d862ce4d6ede1e4b77ecb
envelope: 024c0ccd88c12f90364570c5ce356f457a762bbe590e27d6208ebc19332
d37605ddfd5dad30296554ee740da8ace02e498f71ba6d251b89e734597a243b54bec
91f814c572d86ac8e29221198cf73e6bac7785677876715cfe105031ce6b536b86424
6d9b2a03acbdbe1a013b0c153e3e5ab18d601c10475f6d137d950f50b1a716bd41d16
81932e6ae211451b7759b22d46487c707508ce7c
handshake_secret: cf4fc0c1cb9fc5b4f97ae047dfc5269d3b9013146f5a5e5ee93
1826a1e94465bb5079c4d65da5187c6b89be8bc276d54dc0968ef2bd9c33d4e06e485
5a571529
handshake_encrypt_key: fdafb8a372b21fbcc478a3986dca5f1eb24060b6e63cec
96d48edda13e54b9cdf7730f49fd16c67bfe90ccb89621414c030049b22214dfdf093
69c7b96f6757a
server_mac_key: f54ed72de90635c20994822097039b2a4e7349c806738b716105a
80abdba51a4d8d36ea015713b461402e1ff6f7fc26f8bb0a4b889111ba08da2b7cbc9
55effd
client_mac_key: 841b179f9f3bad87574cc8181008f61905d5f1924f40468aac081
5f7592216c0450a657ddb160f5d3484d77c186b9e9948fbe9e98bd0634b432a39b733
d19461
]]></artwork>
        </section>
        <section anchor="output-values-6" numbered="true" toc="default">
          <name>Output Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
registration_request: 90cca9013769f28f3992f77a043084edbfe6c89b7e2305e
4a6765e50df565fa8e18aba470238c6ed7992af20e962a641bc6bd678ceba640a
registration_response: e45f47bc6f41bb6de778775aa3f746b31cd17969183beb
e8b3757ba8dd546534996ccc686709c1a0fd6ecb4313936940a470333d1ae3c70ed49
500848e7c06c8a5dd5bda74930ffd20fbef9a2de24a0068e5bf3dc356852b10327be9
803983271450bc6a8c683abcdd73883ee63543e9
registration_upload: e0f6146168d32f4b68e042ed5d5608d1108e84a08b668879
8ead0810b4f10d7a91f0767e197e946ebfc487bf62a5ed5684e7ab9137ee1862024c0
ccd88c12f90364570c5ce356f457a762bbe590e27d6208ebc19332d37605ddfd5dad3
0296554ee740da8ace02e498f71ba6d251b89e734597a243b54bec91f814c572d86ac
8e29221198cf73e6bac7785677876715cfe105031ce6b536b864246d9b2a03acbdbe1
a013b0c153e3e5ab18d601c10475f6d137d950f50b1a716bd41d1681932e6ae211451
b7759b22d46487c707508ce7c
KE1: a8f3c6290c4a31a2f696ac5c4f933c85dc3a8fde4247e8733fae3502b9f895ed
40a43c53547891e0a6305a12f7bbbed8696a774f2f352b1fdf3b22899746ff552d618
51fe5c2b5ff1e004fd95dfbcba1906ade5fd38a70be000968656c6c6f20626f62e6f2
ab22efb569a19f48355c7d5d4f728faf3a9142d45c20c098bcbcb6c12fd92480bfb4e
532923e64b9620b6bc84ac5f2d8f84ad466fd18
KE2: 3c86de1f2ef35f9044b08421334c2ea2020300a3c5259bab2fd525dd4e68e03a
90d3460479849e12847a3600cf2428a4c424741b96f76aa9d49500848e7c06c8a5dd5
bda74930ffd20fbef9a2de24a0068e5bf3dc356852b10327be9803983271450bc6a8c
683abcdd73883ee63543e9024c0ccd88c12f90364570c5ce356f457a762bbe590e27d
6208ebc19332d37605ddfd5dad30296554ee740da8ace02e498f71ba6d251b89e7345
97a243b54bec91f814c572d86ac8e29221198cf73e6bac7785677876715cfe105031c
e6b536b864246d9b2a03acbdbe1a013b0c153e3e5ab18d601c10475f6d137d950f50b
1a716bd41d1681932e6ae211451b7759b22d46487c707508ce7c975a2b5d6318131b8
5d7f2f47ea0b7edef8f33a1be69f09307604c13b7afdabd720df48b9e395c40448cf0
6a80bc9c1d90ae1a3080e4ba3368ca056ba92921f79d67073fb91b7c94c3f3d33cc01
613d7221f54fecd80bcbb000fd48223a7b4d19871dfe19b5c5be686edbce5cec2fdb2
c4aa9bbace6eebedbdee52e0ebee8f1053dc59dd66c11b34fbcfd7e681afe5f27ebdf
683b6af777105fa8e57936da294f2d9e1ce090418608a
KE3: 964f3993d57498ceb543937735462b830a559d4efdaa47e26411acb71a173428
0f15cbbdbd4da4b6567086aaa7c3983dfc0eb711b7d8b7a877fd3f18d2d28a37
export_key: 6bbf975f133ea322e181c98ecdbf1837bfa9c7d69d226675e0af8bae8
96eb911beab703858bdd790c9e1b423bddbd35fa9eebe6aed8418223737060bac0985
5b
session_key: 5bfe0bb35b1c430f294cf847f34f0c9f9e777f2888b667ed3711d9cc
db0bd5505d715d8371fda04598f1cb06c00ae5aeed5ed1145a86df58513c9fd104460
c09
]]></artwork>
        </section>
      </section>
      <section anchor="opaque-3dh-test-vector-8" numbered="true" toc="default">
        <name>OPAQUE-3DH Test Vector 8</name>
        <section anchor="configuration-7" numbered="true" toc="default">
          <name>Configuration</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
OPRF: 0003
Hash: SHA256
SlowHash: Identity
EnvelopeMode: 02
Group: P256_XMD:SHA-256_SSWU_RO_
Nh: 32
Npk: 33
Nsk: 32
]]></artwork>
        </section>
        <section anchor="input-values-7" numbered="true" toc="default">
          <name>Input Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
client_identity: 0227aa37ade0cd6231bd385333cc8ccdf3872e75d9f6506192ed
7bcc6e5819f5d7
server_identity: 039178fd762b694fc67cc2df224079dd59ccd00d22621929a0a7
e5ecac96814260
password: 436f7272656374486f72736542617474657279537461706c65
envelope_nonce: 96bd3e8e5a8110e4c57508b0d47d20509639b30b3726264a0f957
937f33f5fa4
client_private_key: dc970d63acb5ab74318e54223c759e9747f59c0d4ecbc0873
02667fabefa647c
client_public_key: 0227aa37ade0cd6231bd385333cc8ccdf3872e75d9f6506192
ed7bcc6e5819f5d7
server_private_key: fcd9a655f77ff0b2ebcfe21e1a1ca4a84361e9f1b18e24c9a
40ed5eec262bf52
server_public_key: 039178fd762b694fc67cc2df224079dd59ccd00d22621929a0
a7e5ecac96814260
client_info: 68656c6c6f20626f62
server_info: 6772656574696e677320616c696365
server_nonce: 3575160dbf02cbaddb376c3512c35e83e46b224d7d289fcd67d401e
730b3ec58
client_nonce: 24f0d0e0b3e2f8c0d5d561ffba8c87c88a085623fb61e9581b45069
b4ec032c6
server_keyshare: 0233c66a7b8735e362aa803f2e5677f48f4cab048edd74381667
82858e46381fd8
client_keyshare: 021ed435f437b88157c9af824de01811f5afc20de9dfdb49f0b4
454ec1df60af60
server_private_keyshare: 4fb9234e93a8bd048ad9f44b428026396a810328c405
a354e666f086fa0ea476
client_private_keyshare: 4fb56527be010296ea880e1c6a4dbbc9ede543a2ad0f
83fd60fdacb59801a9d9
blind_registration: a54f137dbe5f5eb4a34dcb73609c6693f28cd3d57ed77bf66
e0ab7d86c6990f1
blind_login: 3b5d1c0fc0812c10e18f146b14d7eb94755a918bac1ef8d69d21a7c1
3f95c9b2
oprf_key: 334d8af16ae1e69f5adc24e5aa89ebb63637c835fd39b17a1a4453eb5d9
63d23
]]></artwork>
        </section>
        <section anchor="intermediate-values-7" numbered="true" toc="default">
          <name>Intermediate Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
auth_key: 598c8679dfc4693f8777d9ea209dffdbc3e8a6fd55fb11e42f197b2b606
3752c
prk: a60920b28eb24d0f12d996c42de3e94f6c79ab2532b1a633da85065037e57e5c
pseudorandom_pad: 9e2987091f68f908bc9e7eb0030b01d1e5498d47cde3f0ece37
88a673e6f9927
envelope: 0296bd3e8e5a8110e4c57508b0d47d20509639b30b3726264a0f957937f
33f5fa442be8a6ab3dd527c8d102a923f7e9f46a2bc114a8328306bd35eed9d8095fd
5b2499abde5be91da24191482677267a9833c0adf6731f04c589d3b305b2530bea
handshake_secret: c14fb3f53f5a518bd37a3bf670cc38455e26b7bd1e44d7567b5
747ef10f1a5b5
handshake_encrypt_key: 1912daa7086e5e0dd610058d30877d907b6f4888664bf4
74d84e561afaadb127
server_mac_key: baf03e219ba8cee27b26a5a0f12cc15ec809f8e23e8ccef0862b1
1d515bcc4be
client_mac_key: 08acb367302b3c2b5aa405954a8985f84f1a5b491daa77f58c20b
81e97e73bac
]]></artwork>
        </section>
        <section anchor="output-values-7" numbered="true" toc="default">
          <name>Output Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
registration_request: 02327e93445af116df70f57d18ab2a0ef9f492aa3d76c94
6d98260fa1edfa5b832
registration_response: 03480ac383e647d1f78b19bd902c7126024ccc76da605d
cc416581a32e4202d62a039178fd762b694fc67cc2df224079dd59ccd00d22621929a
0a7e5ecac96814260
registration_upload: 0227aa37ade0cd6231bd385333cc8ccdf3872e75d9f65061
92ed7bcc6e5819f5d70296bd3e8e5a8110e4c57508b0d47d20509639b30b3726264a0
f957937f33f5fa442be8a6ab3dd527c8d102a923f7e9f46a2bc114a8328306bd35eed
9d8095fd5b2499abde5be91da24191482677267a9833c0adf6731f04c589d3b305b25
30bea
KE1: 02dad65138d90eb5fffdd93d1ad84b7e86e5b3f1964756d092e154d6a135c6e4
ce24f0d0e0b3e2f8c0d5d561ffba8c87c88a085623fb61e9581b45069b4ec032c6000
968656c6c6f20626f62021ed435f437b88157c9af824de01811f5afc20de9dfdb49f0
b4454ec1df60af60
KE2: 038782ee7c0ca885bd49d7105f9f43f89d34b2ad39b98e02a1a4ceed9e7de3f6
6a039178fd762b694fc67cc2df224079dd59ccd00d22621929a0a7e5ecac968142600
296bd3e8e5a8110e4c57508b0d47d20509639b30b3726264a0f957937f33f5fa442be
8a6ab3dd527c8d102a923f7e9f46a2bc114a8328306bd35eed9d8095fd5b2499abde5
be91da24191482677267a9833c0adf6731f04c589d3b305b2530bea3575160dbf02cb
addb376c3512c35e83e46b224d7d289fcd67d401e730b3ec580233c66a7b8735e362a
a803f2e5677f48f4cab048edd7438166782858e46381fd8000f7dee7c8d4df469aec8
69d6443711489cd6de819ad1ed162f6813c220f9171c66a0b3695b2c43e20c0fee072
1fbad32
KE3: 731075af5acd0195c6f0faa7608845a51aeb1d7da7f1feca8cf2b6665d17f8ad
export_key: 0b157ff3684cb28f35eda2b0495c0bf945d41977d25380ec662b38034
c3a8ddf
session_key: 3d2e068949a1d940528f3e46f435bb1950347c3e924b6332fc4a729b
34eac1ca
]]></artwork>
        </section>
      </section>
      <section anchor="opaque-3dh-test-vector-9" numbered="true" toc="default">
        <name>OPAQUE-3DH Test Vector 9</name>
        <section anchor="configuration-8" numbered="true" toc="default">
          <name>Configuration</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
OPRF: 0004
Hash: SHA512
SlowHash: Identity
EnvelopeMode: 02
Group: P384_XMD:SHA-512_SSWU_RO_
Nh: 64
Npk: 49
Nsk: 48
]]></artwork>
        </section>
        <section anchor="input-values-8" numbered="true" toc="default">
          <name>Input Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
client_identity: 0368f5bbaaa438e2e87de012dec549a4a89a6d4deb262b133834
d1d90ed3eeceb12a2c5cfd5702077bfb47b0e36e48904d
server_identity: 024ecf37a198ab5431962c820df129c60356bc801d3584da5ce1
19c15554d0183a3b9a6b833cd2a019a882c620020c8a3a
password: 436f7272656374486f72736542617474657279537461706c65
envelope_nonce: 54fdac1c3677cbf0c388eed24e5a425c1b616f035bb29aa445cda
d356151e700
client_private_key: 26fec54d4567adabd7951ad51ea3741feab175ac5cf7fa02f
3ad744eb5baf418275e45ab31ade30669dbae98fb087953
client_public_key: 0368f5bbaaa438e2e87de012dec549a4a89a6d4deb262b1338
34d1d90ed3eeceb12a2c5cfd5702077bfb47b0e36e48904d
server_private_key: 8588213957ea3a5dfd0f1fe3cda63dff3137c959747ec1d27
852fce42d79fc710159f349e7da18455479e27473269d2a
server_public_key: 024ecf37a198ab5431962c820df129c60356bc801d3584da5c
e119c15554d0183a3b9a6b833cd2a019a882c620020c8a3a
client_info: 68656c6c6f20626f62
server_info: 6772656574696e677320616c696365
server_nonce: b109f9b77755f74bbea8cda67e8e2d4829a8f684272a10758525705
190d06a72
client_nonce: 33bf1ddb42dd00682e5cce6c558b387c5f11d8ba41c819d1152612c
33184838a
server_keyshare: 036b981c4a2265b4376e2edc3186a45c2e2f820b1092784f6448
354779578b442b0369640e2f10a856cf8dfd60b28c68c9
client_keyshare: 03526fe798e9ab52137d8c3408b131430eadae49f6e93a4fa228
c0338081e6090f75c2b3d55da4b2abfa4f2e2a52bd3330
server_private_keyshare: eb81ae8c1af769a56d4fc42aef54a703503046d8272e
aea47cfa963b696f07af04cbc6545ca16de56540574e2bc92535
client_private_keyshare: ac475d6a3649f3e9cdf20a7e882066be571714f5db07
3555bc1bfebe1d50a04fd6656a439cf465109653bf8e484c01c6
blind_registration: c044df390ab5683964fc7aabf9e066cf04a050c4fd762bff1
0c1b9bd5d37afc6f3644f8545b9a09a6d7a3073b3c9b3d8
blind_login: f8516f98f3159b3fed13a409f5685928c72d9dab8ddfe45de734ce0d
4ff5823d2e40c4fcf880e9a8272b46eea593b10a
oprf_key: 5e7d38ba6ff37c42b3c4859761247a74d0c62c98ddff1365bb9b82b279e
775b7220c673c782e351691bea8206a6b6857
]]></artwork>
        </section>
        <section anchor="intermediate-values-8" numbered="true" toc="default">
          <name>Intermediate Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
auth_key: f8070223ed2f8742430d213ffbefc4f314d2d919e7833e7894ac37bf3db
3fbebb66a88c0d188822e532f2db6db9002979659e14076a019613cd19af38f24607a
prk: 1a7fbae01371f1c2d60dde37b8c337075c60b9fe7ea56a529a8db3e6926aa83c
e729ffd7ad288a2a3d0a3798b5b349370a185e79a11f86145051ceac83f6af71
pseudorandom_pad: f8d7518c0f3dc7f4d0564a3de14e91b945bef48abd1bea93cab
cfc1345f9461c6bea2ea07cedc27ec8717044b66b90da
envelope: 0254fdac1c3677cbf0c388eed24e5a425c1b616f035bb29aa445cdad356
151e700de2994c14a5a6a5f07c350e8ffede5a6af0f8126e1ec10913911885df043b2
044cb46b0b4d402178a1aadedc4d63e989d239d0900f507a8964186f827ea18d23f0d
859974e62913c95780c548a262c125fe8841fdd11453abbd79407dfa3a6ec4aa4da4e
40c4dae1ab44569cfafe7331
handshake_secret: b137c7cfd5e865c88803d041fa45250837242b6548e9cc31751
dcd1f8fecee25708dad91348f106176deee35937681c8bf42bb86403baebdfb4d936e
e0d96219
handshake_encrypt_key: 8efd3f58bd9fe13172dda8ab106d427dc58dae0bf9da04
51f4aef08d051cfa0cbbc42332d4ef506a0442d26c13eb1316969b6c81ba0c764efde
659c099d15262
server_mac_key: 8e6773f21a7bf460c2e4dadfd47fc10357f9fdbfb6a13413167b6
4876489464a157ea128c7c9d8c4fcb81ec50113030a69b88d49698a473584e23423e3
4ed296
client_mac_key: fa75a3be1ae907f18a96d11aa2c96bd5dc2c2332f7f9a7ce086ba
c0983952a96866596a7860ca65b5371bd80eabedaf34b7b54e8977a9c2fb46ffbe1b8
ade1b2
]]></artwork>
        </section>
        <section anchor="output-values-8" numbered="true" toc="default">
          <name>Output Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
registration_request: 029674b50d9bec795e53084cb5d6e0f4813804ea378a672
e5e0514f79e98055b79eafa67deed65b040dc1368a7216c8071
registration_response: 02da545d424e985f21cfcac7dd74ceca2177e513ebf484
3659160649ab4a0e5a9caeeba5e79c1fe86ebb5776e8bd4873db024ecf37a198ab543
1962c820df129c60356bc801d3584da5ce119c15554d0183a3b9a6b833cd2a019a882
c620020c8a3a
registration_upload: 0368f5bbaaa438e2e87de012dec549a4a89a6d4deb262b13
3834d1d90ed3eeceb12a2c5cfd5702077bfb47b0e36e48904d0254fdac1c3677cbf0c
388eed24e5a425c1b616f035bb29aa445cdad356151e700de2994c14a5a6a5f07c350
e8ffede5a6af0f8126e1ec10913911885df043b2044cb46b0b4d402178a1aadedc4d6
3e989d239d0900f507a8964186f827ea18d23f0d859974e62913c95780c548a262c12
5fe8841fdd11453abbd79407dfa3a6ec4aa4da4e40c4dae1ab44569cfafe7331
KE1: 02ab0cdb1bf7038717c03d583e311f14c6004c73f78383d4cc6248751aa68ca9
29d717dc6f003de949a17732875bd1aa6733bf1ddb42dd00682e5cce6c558b387c5f1
1d8ba41c819d1152612c33184838a000968656c6c6f20626f6203526fe798e9ab5213
7d8c3408b131430eadae49f6e93a4fa228c0338081e6090f75c2b3d55da4b2abfa4f2
e2a52bd3330
KE2: 03ed6cdbc3a3b78a9504aeaa0df8a3ff996ab5b8dbd2d74cfeec3c976c434a85
860d6367df02c62989c8ee9b88a354ea30024ecf37a198ab5431962c820df129c6035
6bc801d3584da5ce119c15554d0183a3b9a6b833cd2a019a882c620020c8a3a0254fd
ac1c3677cbf0c388eed24e5a425c1b616f035bb29aa445cdad356151e700de2994c14
a5a6a5f07c350e8ffede5a6af0f8126e1ec10913911885df043b2044cb46b0b4d4021
78a1aadedc4d63e989d239d0900f507a8964186f827ea18d23f0d859974e62913c957
80c548a262c125fe8841fdd11453abbd79407dfa3a6ec4aa4da4e40c4dae1ab44569c
fafe7331b109f9b77755f74bbea8cda67e8e2d4829a8f684272a10758525705190d06
a72036b981c4a2265b4376e2edc3186a45c2e2f820b1092784f6448354779578b442b
0369640e2f10a856cf8dfd60b28c68c9000facff8adb93d0189b9de280f03ca36d3a4
cafbf277c5773052ab51810ee6ff734f9e7ca0132d9194fc481035ee9df57636e17cb
38c2fdac3d1f7cae42cf1de1c14b72b5fd1b494432b0dcac9ca2327b
KE3: c01e2d5935d02e71c7b6832990dca8f596bee17ff07e85fc2215739f74ca6d01
9f07ed514da397708e2b23fba02a72b673587f5e38917dfa442c9d7d52d40109
export_key: dee3533f00de02168ad7cf6e419352005eecfe78c43d272d942f43d6f
37bc97ac79f9cdb0c3310e75ab81248681ac73fff280d879c978435bb1f67a3abaad0
c4
session_key: 4a7535981fc126050dcf41a182fecf5773be561f0dd321a5f86ae008
3a5fb4c603efa3f0b4dbc9c87af2a07e5c9093f9ace2d18ee2cdddb884cfd94f64197
b12
]]></artwork>
        </section>
      </section>
      <section anchor="opaque-3dh-test-vector-10" numbered="true" toc="default">
        <name>OPAQUE-3DH Test Vector 10</name>
        <section anchor="configuration-9" numbered="true" toc="default">
          <name>Configuration</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
OPRF: 0005
Hash: SHA512
SlowHash: Identity
EnvelopeMode: 02
Group: P521_XMD:SHA-512_SSWU_RO_
Nh: 64
Npk: 67
Nsk: 66
]]></artwork>
        </section>
        <section anchor="input-values-9" numbered="true" toc="default">
          <name>Input Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
client_identity: 0300ec0addd1ade650f8c2be98b2d7b5b5eb7e1eab56823f9413
327e056e1413055ede83bd893a26f61094a87d108431dc4f95366741da7ec6465208b
9080d17ed304a
server_identity: 0300d1df68b2171f58ffc6a2cdf6cd47f4a672e0c06660ad5ec9
cccbd8fafd4593dc847b3a3a7aedd1baf2d03dad24f1da95e884f3554c0d4915b0d47
172f33eab7f0e
password: 436f7272656374486f72736542617474657279537461706c65
envelope_nonce: 9ac2de6c1f7b8a32dfb4e365b2610797cc5b76e9d5a1e0d016c08
c33285785a9
client_private_key: 0077881aa5fd937ec7932e725ac43a07cb3ea0e90b40e0501
e6bdc3c97510cdd9475ad6d9e630235ff21b634bc650bf837aaa273530dc66aa53bb9
adb4f0ed499872
client_public_key: 0300ec0addd1ade650f8c2be98b2d7b5b5eb7e1eab56823f94
13327e056e1413055ede83bd893a26f61094a87d108431dc4f95366741da7ec646520
8b9080d17ed304a
server_private_key: 002e485cccf5018abbf875b8e81c5ade0def4fe6fa8dfc153
88367a60f23616cd1468dae601875f7dd570624d0ae9d7be2e6196708f773cf65852b
da777210337d8c
server_public_key: 0300d1df68b2171f58ffc6a2cdf6cd47f4a672e0c06660ad5e
c9cccbd8fafd4593dc847b3a3a7aedd1baf2d03dad24f1da95e884f3554c0d4915b0d
47172f33eab7f0e
client_info: 68656c6c6f20626f62
server_info: 6772656574696e677320616c696365
server_nonce: 5f07f6b2c9a546f77d2e58ae23af2960f3f723fa00bc8c6c9c53768
3dc372091
client_nonce: aff297d07060f891faa127a937e7e7995d76ec727abf796dc80c315
95bf8e201
server_keyshare: 03009af99de97de5c0b5bb5299c406e53294dc48a78ba4933df0
e01bf8e1c5e46fe1de6e82060a08a9110c435fd784b9ae31ecb639eabd464a1681912
6be3b865b05e9
client_keyshare: 030035c078a34aacc22e0e759115b9c7c45192d97e4970f40376
76039e7bc2d270c3964e81a9009a788b022eac506ac16c9704efe50ff6041bd3c9422
9673d2073d8bc
server_private_keyshare: 00708286c5fb629de5cfea56c0532dd8254a5a6e7fcc
9e51e20a1cf4f254335ca57ce603ae7cf03fc00b7a2d495298d84c8c83b686b67e825
69cb56d97e9c20e5932
client_private_keyshare: 0037735d573abb787b251879b77de4df554c91e25e11
7919a9db2af19b32ce0d501c9572d3a8a106f875023c9722b2de94efaa02c8e46a9e4
8f3e2ee00241f9a75f4
blind_registration: 0071a04b0f2180dda3c36e3d43c3a8f127158d010944b0d53
a6f8da29c3cf4f8695135d645424c747bec642bc91375ff142da4687426b0b4f35c14
eb2477c52e1fff
blind_login: 01eea8a605644334de4987fb60d9aaec15b54fc65ef1e10520556b43
938fbf81d4fbc8c36d787161fa4f1e6cf4f842989634f76f3320fdd24777894218769
fc19651
oprf_key: 0066b06b578fe36ef23a5b9872ade82b9261cc447670debcf78318add68
2f6055089b0a2484abc37f110b36f4c2a140b7a3c53dd8efb6171d3bb4d73591be848
3a1b
]]></artwork>
        </section>
        <section anchor="intermediate-values-9" numbered="true" toc="default">
          <name>Intermediate Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
auth_key: 23a8d4aaf7686ae00f4a84defb8ebcf4a3d3ab1c1d7f00dcc8230a274e8
f4119b3bdeae33a94b20638345f22bd5cf93364b9608eead0986996b22be509e393b5
prk: 58200faa8a67d9c9a1ee140ae033e85709352b695d3763e2762212b682f28643
c959615781e6609c945a24bd472de4e2a1f22eae10a243a79a6a0012b28285b0
pseudorandom_pad: be47ed58f882053a44e0e21fd150a183873c4b9e9eb322ff42c
0fd0540e6581eba71b4e573f4b17426a7e30bb284bf92f27a26c84efb47736acbf69d
41094b4a1e9f
envelope: 029ac2de6c1f7b8a32dfb4e365b2610797cc5b76e9d5a1e0d016c08c332
85785a9be3065425d7f96448373cc6d8b949b844c02eb7795f3c2af5cab2139d7b754
c32e041988ed97b341d986553f0ee1b46ac5d084bb1df68119cff04f30f5f9a60386e
dd50851bfa6ebc2ac5bb71b2fdff06030d4b0c94c48edbf14d8027a21c4bfc85f2d85
796ecfdadeb002b0016188916fbdb56a428f9832fd79dc25d2e8e9b32c83
handshake_secret: 06ea9f5f3f553146bafeab9bb6bc590a2419ebbceae34266cb3
3717649c3f65dc8f993ebbe0e0c59068e58ecc4b5353fbd461588b5d9e8767b778d6c
099fdb83
handshake_encrypt_key: a3df7662b4d47d0b6133723e79a81ff74fc3413a0f2c09
cca44cbd4bba92d13335483ef31ef5cce3722df00bb8ac14dcb3b547a83415a5e4d0e
47a41f37864ef
server_mac_key: 9d355b34e8a737eb8306345fb9a58e613fb04d67f6035d47ff5df
6dbebb9d5875ed8fa0ec09d99f97efca1ba448781659de9092976b9ccdbb5f4c78a71
d739e3
client_mac_key: a90767cfd8eebccfd4b7edee797a0a6416d75014524b11f0fc7c0
508395cb03bcc2489358a44d6451ae52952b61bf9891f4599aaaf2b7f7ac0a563aad0
c9bee9
]]></artwork>
        </section>
        <section anchor="output-values-9" numbered="true" toc="default">
          <name>Output Values</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
registration_request: 020197d8111818258667ffbc0d377602f74350b7a54e684
1fb15ba96ac07095bcfc961a2c21e2e0061ba28cd4ea0ed93fa0404f1383b777483c3
31537c8e6e69af85b0
registration_response: 020013e275bf8d4c305cd3793a5be014f9b338b12c6f97
7aef5d523cff2c753b5e6d0f2602fa8359918eaf2fb4ccfb0ae79c383f698ee0fff3a
05d6ce9e5b28e762b0b0300d1df68b2171f58ffc6a2cdf6cd47f4a672e0c06660ad5e
c9cccbd8fafd4593dc847b3a3a7aedd1baf2d03dad24f1da95e884f3554c0d4915b0d
47172f33eab7f0e
registration_upload: 0300ec0addd1ade650f8c2be98b2d7b5b5eb7e1eab56823f
9413327e056e1413055ede83bd893a26f61094a87d108431dc4f95366741da7ec6465
208b9080d17ed304a029ac2de6c1f7b8a32dfb4e365b2610797cc5b76e9d5a1e0d016
c08c33285785a9be3065425d7f96448373cc6d8b949b844c02eb7795f3c2af5cab213
9d7b754c32e041988ed97b341d986553f0ee1b46ac5d084bb1df68119cff04f30f5f9
a60386edd50851bfa6ebc2ac5bb71b2fdff06030d4b0c94c48edbf14d8027a21c4bfc
85f2d85796ecfdadeb002b0016188916fbdb56a428f9832fd79dc25d2e8e9b32c83
KE1: 02013ffd159c4d44f7fe2441c05614ef421e7fc7285432d5dd3b67ada061f3e3
a230d1ab200864a9a716cd001d2a6abea298d58fded61f7d9ce02fc1bb037a1bbf9c7
caff297d07060f891faa127a937e7e7995d76ec727abf796dc80c31595bf8e2010009
68656c6c6f20626f62030035c078a34aacc22e0e759115b9c7c45192d97e4970f4037
676039e7bc2d270c3964e81a9009a788b022eac506ac16c9704efe50ff6041bd3c942
29673d2073d8bc
KE2: 0200e302a5573d3625a0f9d0f63398f4c5053d4f816c743ab77bb365a36c3cdd
00fe21ae2a7e56c01f0857ecdb4d129480c189cbe61f78a2aaaa4687126b76a6cf0ce
20300d1df68b2171f58ffc6a2cdf6cd47f4a672e0c06660ad5ec9cccbd8fafd4593dc
847b3a3a7aedd1baf2d03dad24f1da95e884f3554c0d4915b0d47172f33eab7f0e029
ac2de6c1f7b8a32dfb4e365b2610797cc5b76e9d5a1e0d016c08c33285785a9be3065
425d7f96448373cc6d8b949b844c02eb7795f3c2af5cab2139d7b754c32e041988ed9
7b341d986553f0ee1b46ac5d084bb1df68119cff04f30f5f9a60386edd50851bfa6eb
c2ac5bb71b2fdff06030d4b0c94c48edbf14d8027a21c4bfc85f2d85796ecfdadeb00
2b0016188916fbdb56a428f9832fd79dc25d2e8e9b32c835f07f6b2c9a546f77d2e58
ae23af2960f3f723fa00bc8c6c9c537683dc37209103009af99de97de5c0b5bb5299c
406e53294dc48a78ba4933df0e01bf8e1c5e46fe1de6e82060a08a9110c435fd784b9
ae31ecb639eabd464a16819126be3b865b05e9000fe366a1b3fae5ebfbe29ace6edfd
cca85428f071a2a410205f3792aa810a0b69107ee1c97c3588e4a798072e69b2555e3
3928a38b81b90daf4cb0d80b2a3fee7d81bd3a67de7620c11927684533f2c7
KE3: b825f4735127be2e5870088690ceb1d107122f9febe6ff95cf5d2c2ccee473a9
1db656b5d47824a7dd2e1d4180cdf01482461eb341627d70b18ee61c63b6c534
export_key: a1e47a5e5d13c00290f0207542cf3db49c76c57dddc1eb6f8e35e17fd
f04e32ef769ee58605783e4e6c86c5823596d5fab79f42c1f992137554ca4281c3038
d2
session_key: 11396799cfb47fe2379020b8f706c520115858f0c59c4fdb1db2a5c4
49e6c08f53f75e77b2712d2ba977c5ba85e07d98cbdf8dc7a98700eb61b50d2cda4b8
a08
]]></artwork>
        </section>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAJLvMmAAA9y96YLbyJEu+j+fAqP+4aozJBv7Uj09c9UlqSWrtVjVbfvY
d9yVABJVsFhkmSClLutonuU+y32y+0VkJpAASW1e5pyrGXdVkUAukbF8ERkZ
OZ/PxbbdLtWZ9+O18l68vP+bnx5697u7mxu13bSV9/L+04fey816u67WSyHL
cqPenJnnRL2uVvIG79Yb2Wzn7WbbzKtmczVf38q/7NTcj0Qtt+pMVPjv1Xpz
d+a1q2YtRHu7OfO2m123DX2/8EPxWt29XW/qM+/Jaqs2K7WdP6Amhei2clX/
LJfrFbq5U524bc+8P2I0M69bb7Yb1XT47e6GfvlPIeRue73enAlvLjz8a1fd
mfd44T3dyLfVX+9e84d6yI93V+vx5+vNlVy1f5Xbdr068+4vMWD07T1a71Y1
f8hPqRvZLs+8a7z+Gm//X1f096Ja34z6fLrwflBvW6e/p+pNuxo+HHf2fP2m
9V6pTslNde12s8Tzi9f06uL1ka7OF979hfe79bp2eju/3rTddn17rTajb8fd
ni/Xu7pZyo1y+6wwq2slb9vVVdluuwVWAyuGddvc4L03WE48/d36Tq384oxf
NBx07zFxy5n3UnYdraZ3H6uhVtu24v68C1XtNsqTVxID33rnm3XXzS/arfJ+
6jDOJze3atOtV/zwPW64X07+Nzc/zcR/v9Cj6D/VU/+9fNOiNf0Vf4fGW9XR
DDDlzd3tdr1cX915tLjP1RYjfa2H1m7vvJPz+88vTvk1Zl2PGJQn/L0fj2ZL
8gLuxOy8B23TtGr+WC2XN3Ll3W7W5VLdfHwGDzCDzfrtdAYPsERq6b0CD40f
mLyOB76XS7naTt5/tS7VZuu97L/eo8L1dnt79vXX6nbTrraLVlabBTjja8w1
/jry0/H0Y3r/XIINtq0fjFf8pxUYYtPJ5fLOA2PerjuJqaMvTU6IkbdSb71b
uZF1e3XjgYm8ipfgaiNvr9tK3Brd0n3CimPCZhzTGYPq9pu9yT55+PChd3FH
g2t3Nx4YcRDpzls33jkGvoPa8S6qVq0q5Z08enE+ZYKAqXCt1is/HdGgZx25
ksu7ruUmt8wcm/Xq6ouZ49cL0lzc42S2v96h2cdKmS/3Jvxwt1lXWxCZxj1Z
zJQef/TU9ydz2GAZ55BbaA1Ve1dqpTZaaDEZaaeCZd2ordds1jf48NaI+cen
8rsFSG4eHKbxO7l521av3a8m73238C6gvOWy7V63M+/Xm0kL3+02W9Ir42f2
6PG7hz8+OX84poNPj33/7NVkMe/d92D4rtc1c+qNfA0l2E90XspO1WSrPPVL
dS1XV8rboJMluGbrbdfUKcjIggAStZ26Jz5OHOjv7/H+5m4yufONbK/GX03e
hIA/k9VTtfprqyYvv7xul3tfTl7/wwxyc/NXOWWvP+yWTftabuy3+zr01f98
+eOLA3x1f3f+UlZqQlHzofcQclAxqUCkFjKx0QTVGMPqAW8LI7TeKL0CJEdP
nqx//ATlAGZ5LNHelEf+vN6sRt/sv/eDLDctAMv0VbVat9vh209Xo0H+dZiP
JS/I6f0n8weLASZdy+56vl3PoUDeMNXGX79Z324a+3G3Wy7bN3I13y47g6/Y
EIMb5dVGqRsQFqbjxZNF4C9SP8y/fv7k4sfFxctF7vvzJL2/iehxjdzGK2Q+
8+6vjiI/a7vvG9v9cqPmWm0OyOj+diur10aPfwVCKV6+v+zWW9V5sly/Uf8B
g6tqrG2pKrnrlFWV6qZUNX2OrtarxccXGyL/a8CW6vXUElwAL7bdUr6dfD95
f4oJhwb2ceEhzfz73VQnt/JuZz/eU8Zk8Q5ww6+fPv19MFFAj9ur6+XdXPXC
QjBlMK2iV0YkMKoibW3UcnctN6SuTkA173r9ljSSeci7W+82HtBctQYIfQtz
DUy3Xi3blTr9P2K9gGGfgsKt7Cbv37+6Ust1N/n2v221GWvQkt8q2PoR6HBw
AlTeBrJc3Y15gnXoD9+/CsfG+aXc4DdIGS3ui42sALCMrOnH5OZKbbU26g6q
o9D/OoiLYHFbN5+EO37YA9W/3i1b6Xy+b4m+3+zKcro6L+VuOf5m8uKPC+8V
QY4VEOIUxv54vb6Rnfs9Hrh48v2z+2OJ0R8xHsevqznoO392v/LkLbhfVtck
B3LwRMC1E0hGCwJHxyMGh3iwzXEs0qcg00/lsE+ypayoHz/7zW8nmoE+AaC+
hoaYw1Vih4zgaqd18z7Q5OH/s0ef8DKR9Qhvl7tuslZWCO47YFk//K+fMNDf
AhBer3e3k1H+tq22AAv6q0+30hCLKIhGow99w2TP7/8wGXl7hSED70EXw9ay
8nMdGU9SwKDdXt8YfpkOgUSz40a4+3pddV93t6oCEtL+cYfPdlDxAN7Vtdp+
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
jlyMcmg/rXSdrnPnsix/LoazTG7JtXHlrVePbHHI0dJwKYOhZLaupqzjpn76
oVJ3JjuzX1CHKbzAXBTqzl1bABrHmef7fsC69YxqtyVBKC5gJfQHT+whLJcA
eCUQPNczz62VJ57jjTQWz29fn3lRKODp8U9boHNImt7Ze2dt3OfMi6O0ycIs
TJM0yuI457+iNInDNMjiLE4T/F0k+A5/+2mVJmJ8I92ZV1WZLMsQ0ymKOvGz
oCpi1ci4aMo0jKOkjlTm135UNUWSRbJIapnEIvTxuSqrOiztITYn7enMy8uq
9Eu8KKsgr1UYK9UEocqirE7LMM/CGO9HWZbFyi/9ImxE0WR+CXrU6Lzx477V
PgMIVEl9lQWYRZZWjYrrokjzOpBREqo6wltBlvpRnkbKl5mUQeEnom5SJYOw
iOII3Yj9DK0zr4mkn4dFXuQyL8KoqCsVFlVVFbmq8jKOCxnFNLBSBiptijgW
eLoOcuXXSV6UfrN/EA0Lmqog8qtUlUkZB02eBGUYJaWPvhScFinzPGrSOIiz
skrDqsxiUVRhWGVpGOVFFVXuBQFoLscKV/i/JvTTMG3SsK+1q7/PmAcSrHOR
KvwV4TmiVJGCG0Z158+8Ii9zPw/8pGhSH7q6LiKwkY9m61wFYYxFCv1EVlnU
JFGcS5WUqqxLERcxBpFhwu61B2dektdViJkkTZNFfhSHTe5nZeNHAVhLxZkM
gsav47qRMo1k1qgySOpMiSiNw6ySIOikFjCaRHsqqmuMoS6zPI1zMFPRyLCW
WZ6BCPg7B9lUAZqFYMoCfBjHSZHVhcz8UE1vQTjzZOzncZWFRVqCZepEJiqW
xOB5lvhxDubGlEGBpmpkqtBLXISiLHLQFY+mSXCAeUzTVVz7fihlXOHlMA+w
DlUDkqokDbG8fl0EEZhSZaHMMMoobNI8KcMylXEZh9KvDoiQaRqio4q8icOw
bLKyKEoVQFBAhUqCb5oggdBGiQzDRFUijWI/AL/6UjZNFPgQ6kjwzZc/u9bi
zMuwpFXZ5KGEXvALBVaGhBZlJYlZqzzyZVopsEnYVAFoHAjwLSQow/+KJPd9
0+pyfdWueP6JDBIsMligihIsXezH+FFlWDQQVsWkOqI8T2WZqCSD7EpInIjL
uk4iP+0zMKEkcygbCe2QhDV6TkEzqJECa6aCPM+rMs7BSGUV1mklk7II4jKK
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

-->

</rfc>
