<?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.3 -->
<!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-hash-to-curve-08" category="info" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 2.42.0 -->
  <front>
    <title abbrev="hash-to-curve">Hashing to Elliptic Curves</title>
    <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-hash-to-curve-08"/>
    <author initials="A." surname="Faz-Hernandez" fullname="Armando Faz-Hernandez">
      <organization>Cloudflare</organization>
      <address>
        <postal>
          <street>101 Townsend St</street>
          <city>San Francisco</city>
          <country>United States of America</country>
        </postal>
        <email>armfazh@cloudflare.com</email>
      </address>
    </author>
    <author initials="S." surname="Scott" fullname="Sam Scott">
      <organization>Cornell Tech</organization>
      <address>
        <postal>
          <street>2 West Loop Rd</street>
          <city>New York, New York 10044</city>
          <country>United States of America</country>
        </postal>
        <email>sam.scott@cornell.edu</email>
      </address>
    </author>
    <author initials="N." surname="Sullivan" fullname="Nick Sullivan">
      <organization>Cloudflare</organization>
      <address>
        <postal>
          <street>101 Townsend St</street>
          <city>San Francisco</city>
          <country>United States of America</country>
        </postal>
        <email>nick@cloudflare.com</email>
      </address>
    </author>
    <author initials="R.S." surname="Wahby" fullname="Riad S. Wahby">
      <organization>Stanford University</organization>
      <address>
        <email>rsw@cs.stanford.edu</email>
      </address>
    </author>
    <author initials="C.A." surname="Wood" fullname="Christopher A. Wood">
      <organization>Cloudflare</organization>
      <address>
        <postal>
          <street>101 Townsend St</street>
          <city>San Francisco</city>
          <country>United States of America</country>
        </postal>
        <email>caw@heapingbits.net</email>
      </address>
    </author>
    <date year="2020" month="June" day="01"/>
    <workgroup>CFRG</workgroup>
    <keyword>Internet-Draft</keyword>
    <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>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>Many cryptographic protocols require a procedure that encodes an arbitrary input,
e.g., a password, to a point on an elliptic curve. This procedure is known
as hashing to an elliptic curve. Prominent examples of cryptosystems that
hash to elliptic curves include password-authenticated
key exchanges <xref target="BM92" format="default"/> <xref target="J96" format="default"/> <xref target="BMP00" format="default"/> <xref target="p1363.2" format="default"/>, Identity-Based
Encryption <xref target="BF01" format="default"/>, Boneh-Lynn-Shacham signatures <xref target="BLS01" format="default"/> <xref target="I-D.irtf-cfrg-bls-signature" format="default"/>,
Verifiable Random Functions <xref target="MRV99" format="default"/> <xref target="I-D.irtf-cfrg-vrf" format="default"/>, and Oblivious Pseudorandom
Functions <xref target="NR97" format="default"/> <xref target="I-D.irtf-cfrg-voprf" format="default"/>.</t>
      <t>Unfortunately for implementors, the precise hash function that is suitable
for a given protocol implemented using a given elliptic curve is often unclear
from the protocol's description. Meanwhile, an incorrect choice of hash
function can have disastrous consequences for security.</t>
      <t>This document aims to bridge this gap by providing a comprehensive set of
recommended algorithms for a range of curve types.
Each algorithm conforms to a common interface: it takes as input an arbitrary-length
byte string and produces as output a point on an elliptic curve.
We provide implementation details for each algorithm, describe
the security rationale behind each recommendation, and give guidance for
elliptic curves that are not explicitly covered. We also present optimized
implementations for internal functions used by these algorithms.</t>
      <t>Readers wishing to quickly specify or implement a conforming hash function
should consult <xref target="suites" format="default"/>, which lists recommended hash-to-curve suites
and describes both how to implement an existing suite and how to specify
a new one.</t>
      <t>This document does not cover rejection sampling methods, sometimes referred to
as "try-and-increment" or "hunt-and-peck," because the goal is to describe
algorithms that can plausibly be computed in constant time. Use of these rejection
methods is NOT RECOMMENDED, because they have been a perennial cause of
side-channel vulnerabilities. See Dragonblood <xref target="VR20" format="default"/> as one example of this
problem in practice.</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>
    <section anchor="background" numbered="true" toc="default">
      <name>Background</name>
      <section anchor="bg-curves" numbered="true" toc="default">
        <name>Elliptic curves</name>
        <t>The following is a brief definition of elliptic curves, with an emphasis on
important parameters and their relation to hashing to curves.
For further reference on elliptic curves, consult <xref target="CFADLNV05" format="default"/> or <xref target="W08" format="default"/>.</t>
        <t>Let F be the finite field GF(q) of prime characteristic p &gt; 3.
(This document does not consider elliptic curves over fields of characteristic 2 or 3.)
In most cases F is a prime field, so q = p.
Otherwise, F is an extension field, so q = p^m for an integer m &gt; 1.
This document writes elements of extension fields
in a primitive element or polynomial basis, i.e., as a vector
of m elements of GF(p) written in ascending order by degree.
The entries of this vector are indexed in ascending order starting from 1,
i.e., x = (x_1, x_2, ..., x_m).
For example, if q = p^2 and the primitive element basis is (1, I),
then x = (a, b) corresponds to the element a + b * I, where
x_1 = a and x_2 = b.</t>
        <t>An elliptic curve E is specified by an equation in two variables and a
finite field F. An elliptic curve equation takes one of several standard forms,
including (but not limited to) Weierstrass, Montgomery, and Edwards.</t>
        <t>The curve E induces an algebraic group whose elements are those points
with coordinates (x, y) satisfying the curve equation, and where x and y
are elements of F.
This group has order n, meaning that there are n distinct points.
This document uses additive notation for the elliptic curve group operation.</t>
        <t>For security reasons, cryptographic uses of elliptic curves generally require
using a (sub)group of prime order.
Let G be such a subgroup of the curve of prime order r, where n = h * r.
In this equation, h is an integer called the cofactor.
An algorithm that takes as input an arbitrary point on the curve E and
produces as output a point in the subgroup G of E is said to "clear
the cofactor." Such algorithms are discussed in <xref target="cofactor-clearing" format="default"/>.</t>
        <t>Certain hash-to-curve algorithms restrict the form of the curve equation, the
characteristic of the field, or the parameters of the curve. For each
algorithm presented, this document lists the relevant restrictions.</t>
        <t>The table below summarizes quantities relevant to hashing to curves:</t>
        <table align="center">
          <thead>
            <tr>
              <th align="center">Symbol</th>
              <th align="left">Meaning</th>
              <th align="left">Relevance</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="center">F,q,p</td>
              <td align="left">Finite field F of characteristic p and #F = q = p^m.</td>
              <td align="left">For prime fields, q = p; otherwise, q = p^m and m&gt;1.</td>
            </tr>
            <tr>
              <td align="center">E</td>
              <td align="left">Elliptic curve.</td>
              <td align="left">E is specified by an equation and a field F.</td>
            </tr>
            <tr>
              <td align="center">n</td>
              <td align="left">Number of points on the elliptic curve E.</td>
              <td align="left">n = h * r, for h and r defined below.</td>
            </tr>
            <tr>
              <td align="center">G</td>
              <td align="left">A prime-order subgroup of the points on E.</td>
              <td align="left">Destination group to which byte strings are encoded.</td>
            </tr>
            <tr>
              <td align="center">r</td>
              <td align="left">Order of G.</td>
              <td align="left">r is a prime factor of n (usually, the largest such factor).</td>
            </tr>
            <tr>
              <td align="center">h</td>
              <td align="left">Cofactor, h &gt;= 1.</td>
              <td align="left">An integer satisfying n = h * r.</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="terminology" numbered="true" toc="default">
        <name>Terminology</name>
        <t>In this section, we define important terms used throughout the document.</t>
        <section anchor="term-mapping" numbered="true" toc="default">
          <name>Mappings</name>
          <t>A mapping is a deterministic function from an element of the field F to a point
on an elliptic curve E defined over F.</t>
          <t>In general, the set of all points that a mapping can produce over all
possible inputs may be only a subset of the points on an elliptic curve
(i.e., the mapping may not be surjective).
In addition, a mapping may output the same point for two or more distinct inputs
(i.e., the mapping may not be injective).
For example, consider a mapping from F to an elliptic curve having n points:
if the number of elements of F is not equal to n,
then this mapping cannot be bijective (i.e., both injective and surjective)
since the mapping is defined to be deterministic.</t>
          <t>Mappings may also be invertible, meaning that there is an efficient algorithm
that, for any point P output by the mapping, outputs an x in F such that
applying the mapping to x outputs P.
Some of the mappings given in <xref target="mappings" format="default"/> are invertible, but this
document does not discuss inversion algorithms.</t>
        </section>
        <section anchor="term-encoding" numbered="true" toc="default">
          <name>Encodings</name>
          <t>Encodings are closely related to mappings.
Like a mapping, an encoding is a function that outputs a point on an elliptic curve.
In contrast to a mapping, however, the input to an encoding is an arbitrary-length
byte string.</t>
          <t>This document constructs deterministic encodings by composing a hash function Hf
with a deterministic mapping.
In particular, Hf takes as input an arbitrary string and outputs an element of F.
The deterministic mapping takes that element as input and outputs a point on an
elliptic curve E defined over F.
Since Hf takes arbitrary-length byte strings as inputs, it cannot be injective:
the set of inputs is larger than the set of outputs, so there must
be distinct inputs that give the same output (i.e., there must be collisions).
Thus, any encoding built from Hf is also not injective.</t>
          <t>Like mappings, encodings may be invertible, meaning that there is an efficient
algorithm that, for any point P output by the encoding, outputs a string s
such that applying the encoding to s outputs P.
The instantiation of Hf used by all encodings specified in this document (<xref target="hashtofield" format="default"/>)
is not invertible. Thus, the encodings are also not invertible.</t>
          <t>In some applications of hashing to elliptic curves, it is important that
encodings do not leak information through side channels.
<xref target="VR20" format="default"/> is one example of this type of leakage leading to a security vulnerability.
<xref target="security-considerations" format="default"/> discusses further.</t>
        </section>
        <section anchor="term-rom" numbered="true" toc="default">
          <name>Random oracle encodings</name>
          <t>Two different types of encodings are possible, nonuniform encodings and random oracle encodings.
Nonuniform encodings induce a distribution of points that is not uniformly random.
Random oracle encodings, in contrast, induce a distribution of points that
is statistically close to uniformly random.
They also satisfy a stronger property: a random oracle encoding can be proved
indifferentiable from a random oracle <xref target="MRH04" format="default"/> under a suitable assumption,
meaning it is appropriate for use in many cryptographic protocols proven secure
in the random oracle model.
(Note, however, that indifferentiability is not always sufficient for security;
see <xref target="security-considerations" format="default"/> for further discussion.)</t>
          <t>The construction described in <xref target="roadmap" format="default"/> <xref target="BCIMRT10" format="default"/> is indifferentiable from a random
oracle <xref target="MRH04" format="default"/> when instantiated following the guidelines in this document.
<xref target="security-considerations" format="default"/> and <xref target="related" format="default"/> discuss this construction further.</t>
        </section>
        <section anchor="term-serialization" numbered="true" toc="default">
          <name>Serialization</name>
          <t>A procedure related to encoding is the conversion of an elliptic curve point to a bit string.
This is called serialization, and is typically used for compactly storing or transmitting points.
The inverse operation, deserialization, converts a bit string to an elliptic curve point.
For example, <xref target="SEC1" format="default"/> and <xref target="p1363a" format="default"/> give standard methods for serialization and deserialization.</t>
          <t>Deserialization is different from encoding in that only certain strings
(namely, those output by the serialization procedure) can be deserialized.
In contrast, this document is concerned with encodings from arbitrary strings
to elliptic curve points.
This document does not cover serialization or deserialization.</t>
        </section>
        <section anchor="term-domain-separation" numbered="true" toc="default">
          <name>Domain separation</name>
          <t>Cryptographic protocols proven secure in the random oracle model are often analyzed
under the assumption that the random oracle only answers queries generated
by the protocol.
In practice, this assumption does not hold if two protocols use the
same function to instantiate the random oracle.
Concretely, consider protocols P1 and P2 that query a random oracle RO:
if P1 and P2 both query RO on the same value x, the security analysis of
one or both protocols may be invalidated.</t>
          <t>A common way of addressing this issue is called domain separation,
which allows a single random oracle to simulate multiple, independent oracles.
This is effected by ensuring that each simulated oracle sees queries that are
distinct from those seen by all other simulated oracles.
For example, to simulate two oracles RO1 and RO2 given a single oracle RO,
one might define</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
RO1(x) := RO("RO1" || x)
RO2(x) := RO("RO2" || x)
]]></artwork>
          <t>where || is the concatenation operator.
In this example, "RO1" and "RO2" are called domain separation tags;
they ensure that queries to RO1 and RO2 cannot result in identical
queries to RO. Thus, it is safe to treat RO1 and RO2 as independent oracles.</t>
        </section>
      </section>
    </section>
    <section anchor="roadmap" numbered="true" toc="default">
      <name>Encoding byte strings to elliptic curves</name>
      <t>This section presents a general framework and interface for encoding byte strings
to points on an elliptic curve. To construct these encodings, we rely on three basic
functions:</t>
      <ul spacing="normal">
        <li>The function hash_to_field, {0, 1}^* x {1, 2, ...} -&gt; (F, F, ...), hashes arbitrary-length byte strings
to a list of one or more elements of a finite field F; its implementation is defined in
<xref target="hashtofield" format="default"/>.</li>
        <li>The function map_to_curve, F -&gt; E, calculates a point on the elliptic curve E
from an element of the finite field F over which E is defined.
<xref target="mappings" format="default"/> describes mappings for a range of curve families.</li>
        <li>The function clear_cofactor, E -&gt; G, sends any point on the curve E to
the subgroup G of E. <xref target="cofactor-clearing" format="default"/> describes methods to perform
this operation.</li>
      </ul>
      <t>We describe two high-level encoding functions (<xref target="term-encoding" format="default"/>), a nonuniform encoding
and a random oracle encoding. Although these functions have the same interface, the
distributions of their outputs are different.</t>
      <ul spacing="normal">
        <li>Nonuniform encoding (encode_to_curve). This function encodes byte strings to points in G.
The distribution of the output is not uniformly random in G.</li>
      </ul>
      <artwork name="" type="" align="left" alt=""><![CDATA[
encode_to_curve(msg)

Input: msg, an arbitrary-length byte string.
Output: P, a point in G.

Steps:
1. u = hash_to_field(msg, 1)
2. Q = map_to_curve(u[0])
3. P = clear_cofactor(Q)
4. return P
]]></artwork>
      <ul spacing="normal">
        <li>Random oracle encoding (hash_to_curve). This function encodes byte strings to points in G.
This function is suitable for applications requiring a random oracle returning points in G
when instantiated with any of the map_to_curve functions described in <xref target="mappings" format="default"/>.</li>
      </ul>
      <artwork name="" type="" align="left" alt=""><![CDATA[
hash_to_curve(msg)

Input: msg, an arbitrary-length byte string.
Output: P, a point in G.

Steps:
1. u = hash_to_field(msg, 2)
2. Q0 = map_to_curve(u[0])
3. Q1 = map_to_curve(u[1])
4. R = Q0 + Q1              # Point addition
5. P = clear_cofactor(R)
6. return P
]]></artwork>
      <t>Each hash-to-curve suite in <xref target="suites" format="default"/> instantiates one of these encoding
functions for a specifc elliptic curve.</t>
      <section anchor="domain-separation" numbered="true" toc="default">
        <name>Domain separation requirements</name>
        <t>All uses of the encoding functions defined in this document MUST include
domain separation (<xref target="term-domain-separation" format="default"/>) to avoid interfering with
other uses of similar functionality.</t>
        <t>Applications that instantiate multiple, independent instances of either
hash_to_curve or encode_to_curve MUST enforce domain separation
between those instances.
This requirement applies both in the case of multiple instances targeting
the same curve and in the case of multiple instances targeting different curves.
(This is because the internal hash_to_field primitive (<xref target="hashtofield" format="default"/>)
requires domain separation to guarantee independent outputs.)</t>
        <t>Domain separation is enforced with a domain separation tag (DST),
which is a byte string constructed according to the following requirements:</t>
        <ol spacing="normal" type="1">
          <li>Tags MUST be supplied as the DST parameter to hash_to_field, as
described in <xref target="hashtofield" format="default"/>.</li>
          <li>Tags MUST have nonzero length. A minimum length of 16 bytes
is RECOMMENDED to reduce the chance of collisions with other
applications.</li>
          <li>Tags SHOULD begin with a fixed identification string
that is unique to the application.</li>
          <li>Tags SHOULD include a version number.</li>
          <li>For applications that define multiple ciphersuites, each ciphersuite's
tag MUST be different. For this purpose, it is RECOMMENDED to
include a ciphersuite identifier in each tag.</li>
          <li>For applications that use multiple encodings, either to the same curve
or to different curves, each encoding MUST use a different tag.
For this purpose, it is RECOMMENDED to include the encoding's
Suite ID (<xref target="suites" format="default"/>) in the domain separation tag.
For independent encodings based on the same suite, each tag should
also include a distinct identifier, e.g., "ENC1" and "ENC2".</li>
        </ol>
        <t>As an example, consider a fictional application named Quux
that defines several different ciphersuites.
A reasonable choice of tag is "QUUX-V&lt;xx&gt;-CS&lt;yy&gt;-&lt;suiteID&gt;", where
&lt;xx&gt; and &lt;yy&gt; are two-digit numbers indicating the version and
ciphersuite, respectively, and &lt;suiteID&gt; is the Suite ID of the
encoding used in ciphersuite &lt;yy&gt;.</t>
        <t>As another example, consider a fictional application named Baz that requires
two independent random oracles to the same curve.
Reasonable choices of tags for these oracles are
"BAZ-V&lt;xx&gt;-CS&lt;yy&gt;-&lt;suiteID&gt;-ENC1" and "BAZ-V&lt;xx&gt;-CS&lt;yy&gt;-&lt;suiteID&gt;-ENC2",
respectively, where &lt;xx&gt;, &lt;yy&gt;, and &lt;suiteID&gt; are as described above.</t>
      </section>
    </section>
    <section anchor="utility" numbered="true" toc="default">
      <name>Utility functions</name>
      <t>Algorithms in this document use the utility functions described below,
plus standard arithmetic operations (addition, multiplication, modular
reduction, etc.) and elliptic curve point operations (point addition and
scalar multiplication).</t>
      <t>For security, implementations of these functions SHOULD be constant time,
i.e., execution time SHOULD NOT depend on the values of the inputs.
For such constant-time implementations, all arithmetic, comparisons, and
assignments MUST be implemented in constant time.
<xref target="security-considerations" format="default"/> briefly discusses constant-time security issues.</t>
      <t>Guidance on implementing low-level operations (in constant time or otherwise)
is beyond the scope of this document; readers should consult standard reference
material <xref target="MOV96" format="default"/> <xref target="CFADLNV05" format="default"/>.</t>
      <ul spacing="normal">
        <li>CMOV(a, b, c): If c is False, CMOV returns a, otherwise it returns b.
For constant-time implementations, this operation must run in
time independent of the value of c.</li>
        <li>AND, OR, NOT, and XOR are standard bitwise logical operators.
For constant-time implementations, short-circuit operators MUST be avoided.</li>
        <li>
          <t>is_square(x): This function returns True whenever the value x is a
square in the field F. By Euler's criterion, this function can be
calculated in constant time as  </t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
is_square(x) := { True,  if x^((q - 1) / 2) is 0 or 1 in F;
                { False, otherwise.
]]></artwork>
          <t>
In certain extension fields, is_square can be computed in constant
time more quickly than by the above exponentiation.
<xref target="AR13" format="default"/> and <xref target="S85" format="default"/> describe optimized methods for extension fields.
<xref target="appx-sqrt-issq" format="default"/> gives an optimized straight-line method for GF(p^2).</t>
        </li>
        <li>
          <t>sqrt(x): The sqrt operation is a multi-valued function, i.e., there exist
two roots of x in the field F whenever x is square.
To maintain compatibility across implementations while allowing implementors
leeway for optimizations, this document does not require sqrt() to return a
particular value. Instead, as explained in <xref target="point-sign" format="default"/>, any function that
calls sqrt also specifies how to determine the correct root.  </t>
          <t>
The preferred way of computing square roots is to fix a deterministic
algorithm particular to F. We give several algorithms in <xref target="appx-sqrt" format="default"/>.</t>
        </li>
        <li>sgn0(x): This function returns either 0 or 1 indicating the "sign" of x,
where sgn0(x) == 1 just when x is "negative".
(In other words, this function always considers 0 to be positive.)
<xref target="sgn0-function" format="default"/> defines this function and discusses its implementation.</li>
        <li>inv0(x): This function returns the multiplicative inverse of x in F,
extended to all of F by fixing inv0(0) == 0.
To implement inv0 in constant time, compute inv0(x) := x^(q - 2).
Notice on input 0, the output is 0 as required.</li>
        <li>I2OSP and OS2IP: These functions are used to convert a byte string to
and from a non-negative integer as described in <xref target="RFC8017" format="default"/>.</li>
        <li>a || b: denotes the concatenation of byte strings a and b. For example,
"ABC" || "DEF" == "ABCDEF".</li>
        <li>substr(str, sbegin, slen): for a byte string str, this function returns
the slen-byte substring starting at position sbegin; positions are zero
indexed.
For example, substr("ABCDEFG", 2, 3) == "CDE".</li>
        <li>len(str): for a byte string str, this function returns the length of str
in bytes. For example, len("ABC") == 3.</li>
        <li>strxor(str1, str2): for byte strings str1 and str2, strxor(str1, str2)
returns the bitwise XOR of the two strings.
For example, strxor("abc", "XYZ") == "9;9" (the strings in this example
are ASCII literals, but strxor is defined for arbitrary byte strings).
In this document, strxor is only applied to inputs of equal length.</li>
      </ul>
      <section anchor="sgn0-function" numbered="true" toc="default">
        <name>The sgn0 function</name>
        <t>This section defines a generic sgn0 implementation that applies to any field F = GF(p^m).
It also gives simplified implementations for the cases F = GF(p) and F = GF(p^2).</t>
        <t>See <xref target="bg-curves" format="default"/> for a discussion of representing elements of extension fields as vectors.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
sgn0(x)

Parameters:
- F, a finite field of characteristic p and order q = p^m.
- p, the characteristic of F (see immediately above).
- m, the extension degree of F, m >= 1 (see immediately above).

Input: x, an element of F.
Output: 0 or 1.

Steps:
1. sign = 0
2. zero = 1
3. for i in (1, 2, ..., m):
4.   sign_i = x_i mod 2
5.   zero_i = x_i == 0
6.   sign = sign OR (zero AND sign_i)    # Avoid short-circuit logic ops
7.   zero = zero AND zero_i
8. return sign
]]></artwork>
        <t>Note that any valid sgn0 function for extension fields must iterate over
the entire vector representation of the input element.
To see why, imagine a function sgn0* that ignores the final entry in its
input vector, and consider a field element x = (0, x_2).
Since sgn0* ignores x_2, sgn0*(x) == sgn0*(-x), which is incorrect
when x_2 != 0.
A similar argument applies to any entry of the vector representation of x.</t>
        <t>When m == 1, sgn0 can be significantly simplified:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
sgn0_m_eq_1(x)

Input: x, an element of GF(p).
Output: 0 or 1.

Steps:
1. return x mod 2
]]></artwork>
        <t>The case m == 2 is only slightly more complicated:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
sgn0_m_eq_2(x)

Input: x, an element of GF(p^2).
Output: 0 or 1.

Steps:
1. sign_0 = x_0 mod 2
2. zero_0 = x_0 == 0
3. sign_1 = x_1 mod 2
4. return sign_0 OR (zero_0 AND sign_1)  # Avoid short-circuit logic ops
]]></artwork>
      </section>
    </section>
    <section anchor="hashtofield" numbered="true" toc="default">
      <name>Hashing to a finite field</name>
      <t>The hash_to_field function hashes a byte string msg of arbitrary length into
one or more elements of a field F.
This function works in two steps: it first hashes the input byte string
to produce a uniformly random byte string, and then interprets this byte string
as one or more elements of F.</t>
      <t>For the first step, hash_to_field calls an auxiliary function expand_message.
This document defines two variants of expand_message: one appropriate
for hash functions like SHA-2 <xref target="FIPS180-4" format="default"/> or SHA-3 <xref target="FIPS202" format="default"/>, and another
appropriate for extensible-output functions such as SHAKE-128 <xref target="FIPS202" format="default"/>.
Security considerations for each expand_message variant are discussed
below (<xref target="hashtofield-expand-xmd" format="default"/>, <xref target="hashtofield-expand-xof" format="default"/>).</t>
      <t>Implementors MUST NOT use rejection sampling to generate a uniformly random element of F.
The reason is that rejection sampling procedures are difficult to implement
in constant time, and later well-meaning "optimizations" may silently render
an implementation non-constant-time.</t>
      <section anchor="hashtofield-sec" numbered="true" toc="default">
        <name>Security considerations</name>
        <t>The hash_to_field function is designed to be indifferentiable from a
random oracle <xref target="MRH04" format="default"/> when expand_message (<xref target="hashtofield-expand" format="default"/>)
is modeled as a random oracle (see <xref target="security-considerations-hash-to-field" format="default"/>).
Ensuring indifferentiability requires care; to see why, consider a prime
p that is close to 3/4 * 2^256.
Reducing a random 256-bit integer modulo this p yields a value that is in
the range [0, p / 3] with probability roughly 1/2, meaning that this value
is statistically far from uniform in [0, p - 1].</t>
        <t>To control bias, hash_to_field instead uses random integers whose
length is at least ceil(log2(p)) + k bits, where k is the target security
level for the suite in bits.
Reducing such integers mod p gives bias at most 2^-k for any p; this bias
is appropriate when targeting k-bit security.
For each such integer, hash_to_field uses expand_message to obtain
L uniform bytes, where</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
L = ceil((ceil(log2(p)) + k) / 8)
]]></artwork>
        <t>These uniform bytes are then interpreted as an integer via OS2IP <xref target="RFC8017" format="default"/>.
For example, for a 255-bit prime p, and k = 128-bit security,
L = ceil((255 + 128) / 8) = 48 bytes.</t>
        <t>Note that k is an upper bound on the security level for the
corresponding curve.
See <xref target="security-considerations-targets" format="default"/> for more details, and
<xref target="new-suite" format="default"/> for guidelines on choosing k for a given curve.</t>
      </section>
      <section anchor="hashtofield-impl" numbered="true" toc="default">
        <name>hash_to_field implementation</name>
        <t>The following procedure implements hash_to_field.</t>
        <t>The expand_message parameter to this function MUST conform to the requirements
given in <xref target="hashtofield-expand" format="default"/>. <xref target="domain-separation" format="default"/> discusses the REQUIRED
method for constructing DST, the domain separation tag.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
hash_to_field(msg, count)

Parameters:
- DST, a domain separation tag (see discussion above).
- F, a finite field of characteristic p and order q = p^m.
- p, the characteristic of F (see immediately above).
- m, the extension degree of F, m >= 1 (see immediately above).
- L = ceil((ceil(log2(p)) + k) / 8), where k is the security
  parameter of the suite (e.g., k = 128).
- expand_message, a function that expands a byte string and
  domain separation tag into a uniformly random byte string
  (see discussion above).

Inputs:
- msg, a byte string containing the message to hash.
- count, the number of elements of F to output.

Outputs:
- (u_0, ..., u_(count - 1)), a list of field elements.

Steps:
1. len_in_bytes = count * m * L
2. uniform_bytes = expand_message(msg, DST, len_in_bytes)
3. for i in (0, ..., count - 1):
4.   for j in (0, ..., m - 1):
5.     elm_offset = L * (j + i * m)
6.     tv = substr(uniform_bytes, elm_offset, L)
7.     e_j = OS2IP(tv) mod p
8.   u_i = (e_0, ..., e_(m - 1))
9. return (u_0, ..., u_(count - 1))
]]></artwork>
      </section>
      <section anchor="hashtofield-expand" numbered="true" toc="default">
        <name>expand_message</name>
        <t>expand_message is a function that generates a uniformly random byte string.
It takes three arguments:</t>
        <ol spacing="normal" type="1">
          <li>msg, a byte string containing the message to hash,</li>
          <li>DST, a byte string that acts as a domain separation tag, and</li>
          <li>len_in_bytes, the number of bytes to be generated.</li>
        </ol>
        <t>This document defines the following two variants of expand_message:</t>
        <ul spacing="normal">
          <li>expand_message_xmd (<xref target="hashtofield-expand-xmd" format="default"/>) is appropriate for use
with a wide range of hash functions, including SHA-2 <xref target="FIPS180-4" format="default"/>, SHA-3
<xref target="FIPS202" format="default"/>, BLAKE2 <xref target="RFC7693" format="default"/>, and others.</li>
          <li>expand_message_xof (<xref target="hashtofield-expand-xof" format="default"/>) is appropriate for use
with extensible-output functions (XOFs) including functions in the SHAKE
<xref target="FIPS202" format="default"/> or BLAKE2X <xref target="BLAKE2X" format="default"/> families.</li>
        </ul>
        <t>These variants should suffice for the vast majority of use cases, but other
variants are possible; <xref target="hashtofield-expand-other" format="default"/> discusses requirements.</t>
        <section anchor="hashtofield-expand-xmd" numbered="true" toc="default">
          <name>expand_message_xmd</name>
          <t>The expand_message_xmd function produces a uniformly random byte string using
a cryptographic hash function H that outputs b bits. For security, H must meet
the following requirements:</t>
          <ul spacing="normal">
            <li>The number of bits output by H MUST be b &gt;= 2 * k, for k the target
security level in bits. This ensures k-bit collision resistance.</li>
            <li>H MAY be a Merkle-Damgaard hash function like SHA-2.
In this case, security holds when the underlying compression function is
modeled as a random oracle <xref target="CDMP05" format="default"/>.
(See <xref target="security-considerations-expand-xmd" format="default"/> for discussion.)</li>
            <li>H MAY be a sponge-based hash function like SHA-3 or BLAKE2.
In this case, security holds when the inner function is modeled as a
random transformation or as a random permutation <xref target="BDPV08" format="default"/>.</li>
            <li>Otherwise, H MUST be a hash function that has been proved indifferentiable
from a random oracle <xref target="MRH04" format="default"/> under a reasonable cryptographic assumption.</li>
          </ul>
          <t>SHA-2 <xref target="FIPS180-4" format="default"/> and SHA-3 <xref target="FIPS202" format="default"/> are typical and RECOMMENDED choices.
As an example, for the 128-bit security level, b &gt;= 256 bits and either SHA-256 or
SHA3-256 would be an appropriate choice.</t>
          <t>The following procedure implements expand_message_xmd.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
expand_message_xmd(msg, DST, len_in_bytes)

Parameters:
- H, a hash function (see requirements above).
- b_in_bytes, ceil(b / 8) for b the output size of H in bits.
  For example, for b = 256, b_in_bytes = 32.
- r_in_bytes, the input block size of H, measured in bytes.
  For example, for SHA-256, r_in_bytes = 64.

Input:
- msg, a byte string.
- DST, a byte string of at most 255 bytes.
  See below for information on using longer DSTs.
- len_in_bytes, the length of the requested output in bytes.

Output:
- uniform_bytes, a byte string.

Steps:
1.  ell = ceil(len_in_bytes / b_in_bytes)
2.  ABORT if ell > 255
3.  DST_prime = DST || I2OSP(len(DST), 1)
4.  Z_pad = I2OSP(0, r_in_bytes)
5.  l_i_b_str = I2OSP(len_in_bytes, 2)
6.  msg_prime = Z_pad || msg || l_i_b_str || I2OSP(0, 1) || DST_prime
7.  b_0 = H(msg_prime)
8.  b_1 = H(b_0 || I2OSP(1, 1) || DST_prime)
9.  for i in (2, ..., ell):
10.    b_i = H(strxor(b_0, b_(i - 1)) || I2OSP(i, 1) || DST_prime)
11. uniform_bytes = b_1 || ... || b_ell
12. return substr(uniform_bytes, 0, len_in_bytes)
]]></artwork>
          <t>Note that the string Z_pad is prepended to msg when computing b_0 (step 7).
This is necessary for security when H is a Merkle-Damgaard hash, e.g., SHA-2
(see <xref target="security-considerations-expand-xmd" format="default"/>).
Hashing this additional data means that the cost of computing b_0 is higher
than the cost of simply computing H(msg).
In most settings this overhead is negligible, because the cost of evaluating
H is much less than the other costs involved in hashing to a curve.</t>
          <t>It is possible, however, to entirely avoid this overhead by taking advantage
of the fact that Z_pad depends only on H, and not on the arguments to
expand_message_xmd.
To do so, first precompute and save the internal state of H after ingesting
Z_pad. Then, when computing b_0, initialize H using the saved state.
Further details are implementation dependent, and beyond the scope of this document.</t>
        </section>
        <section anchor="hashtofield-expand-xof" numbered="true" toc="default">
          <name>expand_message_xof</name>
          <t>The expand_message_xof function produces a uniformly random byte string
using an extensible-output function (XOF) H.
For security, H must meet the following criteria:</t>
          <ul spacing="normal">
            <li>The collision resistance of H MUST be at least k bits.</li>
            <li>H MUST be an XOF that has been proved indifferentiable from a random oracle
under a reasonable cryptographic assumption.</li>
          </ul>
          <t>The SHAKE <xref target="FIPS202" format="default"/> XOF family is a typical and RECOMMENDED choice.
As an example, for 128-bit security, SHAKE-128 would be an appropriate choice.</t>
          <t>The following procedure implements expand_message_xof.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
expand_message_xof(msg, DST, len_in_bytes)

Parameters:
- H, an extensible-output function.
  H(m, d) hashes message m and returns d bytes.

Input:
- msg, a byte string.
- DST, a byte string of at most 255 bytes.
  See below for information on using longer DSTs.
- len_in_bytes, the length of the requested output in bytes.

Output:
- uniform_bytes, a byte string.

Steps:
1. DST_prime = DST || I2OSP(len(DST), 1)
2. msg_prime = msg || I2OSP(len_in_bytes, 2) || DST_prime
3. uniform_bytes = H(msg_prime, len_in_bytes)
4. return uniform_bytes
]]></artwork>
        </section>
        <section anchor="hashtofield-expand-dst" numbered="true" toc="default">
          <name>Using DSTs longer than 255 bytes</name>
          <t>The expand_message variants defined in this section accept domain separation
tags of at most 255 bytes.
If applications require a domain separation tag longer than 255 bytes, e.g., because
of requirements imposed by an invoking protocol, implementors MUST compute a short
domain separation tag by hashing, as follows:</t>
          <ul spacing="normal">
            <li>For expand_message_xmd using hash function H, DST is computed as</li>
          </ul>
          <artwork name="" type="" align="left" alt=""><![CDATA[
DST = H("H2C-OVERSIZE-DST-" || a_very_long_DST)
]]></artwork>
          <ul spacing="normal">
            <li>For expand_message_xof using extensible-output function H, DST is computed as</li>
          </ul>
          <artwork name="" type="" align="left" alt=""><![CDATA[
DST = H("H2C-OVERSIZE-DST-" || a_very_long_DST, ceil(2 * k / 8))
]]></artwork>
          <t>Here, a_very_long_DST is the DST whose length is greater than 255 bytes,
"H2C-OVERSIZE-DST-" is a 17-byte ASCII string literal, and
k is the target security level in bits.</t>
        </section>
        <section anchor="hashtofield-expand-other" numbered="true" toc="default">
          <name>Defining other expand_message variants</name>
          <t>When defining a new expand_message variant, the most important consideration
is that hash_to_field models expand_message as a random oracle.
Thus, implementors SHOULD prove indifferentiability from a random oracle
under an appropriate assumption about the underlying cryptographic primitives;
see <xref target="security-considerations-hash-to-field" format="default"/> for more information.</t>
          <t>In addition, expand_message variants:</t>
          <ul spacing="normal">
            <li>MUST give collision resistance commensurate with the security level of
the target elliptic curve.</li>
            <li>MUST be built on primitives designed for use in applications requiring
cryptographic randomness. As examples, a secure stream cipher is an appropriate
primitive, whereas a Mersenne twister pseudorandom number generator <xref target="MT98" format="default"/> is not.</li>
            <li>MUST NOT use rejection sampling.</li>
            <li>MUST give independent values for distinct (msg, DST, length) inputs.
Meeting this requirement is subtle.
As a simplified example, hashing msg || DST does not work,
because in this case distinct (msg, DST) pairs whose concatenations are equal
will return the same output (e.g., ("AB", "CDEF") and ("ABC", "DEF")).
The variants defined in this document use a suffix-free encoding of DST
to avoid this issue.</li>
            <li>MUST use the domain separation tag DST to ensure that invocations of
cryptographic primitives inside of expand_message are domain separated
from invocations outside of expand_message.
For example, if the expand_message variant uses a hash function H, an encoding
of DST MUST be either prepended or appended to the input to each invocation
of H (appending is the RECOMMENDED approach).</li>
            <li>SHOULD read msg exactly once, for efficiency when msg is long.</li>
          </ul>
          <t>In addition, each expand_message variant MUST specify a unique EXP_TAG
that identifies that variant in a Suite ID. See <xref target="suiteIDformat" format="default"/> for more information.</t>
        </section>
      </section>
    </section>
    <section anchor="mappings" numbered="true" toc="default">
      <name>Deterministic mappings</name>
      <t>The mappings in this section are suitable for implementing either nonuniform
or random oracle encodings using the constructions in <xref target="roadmap" format="default"/>.
Certain mappings restrict the form of the curve or its parameters.
For each mapping presented, this document lists the relevant restrictions.</t>
      <t>Note that mappings in this section are not interchangeable: different mappings
will almost certainly output different points when evaluated on the same input.</t>
      <section anchor="choosing-mapping" numbered="true" toc="default">
        <name>Choosing a mapping function</name>
        <t>This section gives brief guidelines on choosing a mapping function
for a given elliptic curve.
Note that the suites given in <xref target="suites" format="default"/> are recommended mappings
for the respective curves.</t>
        <t>If the target elliptic curve is a Montgomery curve (<xref target="montgomery" format="default"/>),
the Elligator 2 method (<xref target="elligator2" format="default"/>) is recommended.
Similarly, if the target elliptic curve is a twisted Edwards curve (<xref target="twisted-edwards" format="default"/>),
the twisted Edwards Elligator 2 method (<xref target="ell2edwards" format="default"/>) is recommended.</t>
        <t>The remaining cases are Weierstrass curves.
For curves supported by the Simplified SWU method (<xref target="simple-swu" format="default"/>),
that mapping is the recommended one.
Otherwise, the Simplified SWU method for AB == 0 (<xref target="simple-swu-AB0" format="default"/>)
is recommended if the goal is best performance, while
the Shallue-van de Woestijne method (<xref target="svdw" format="default"/>) is recommended
if the goal is simplicity of implementation.
(The reason for this distinction is that the Simplified SWU method for AB == 0
requires implementing an isogeny map in addition to the mapping function, while
the Shallue-van de Woestijne method does not.)</t>
        <t>The Shallue-van de Woestijne method (<xref target="svdw" format="default"/>) works with any curve,
and may be used in cases where a generic mapping is required.
Note, however, that this mapping is almost always more computationally
expensive than the curve-specific recommendations above.</t>
      </section>
      <section anchor="interface" numbered="true" toc="default">
        <name>Interface</name>
        <t>The generic interface shared by all mappings in this section is as follows:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
    (x, y) = map_to_curve(u)
]]></artwork>
        <t>The input u and outputs x and y are elements of the field F.
The affine coordinates (x, y) specify a point on an elliptic curve defined
over F. Note that the point (x, y) is not a uniformly random point. If uniformity
is required for security, the random oracle construction of <xref target="roadmap" format="default"/> MUST be
used instead.</t>
      </section>
      <section anchor="notation" numbered="true" toc="default">
        <name>Notation</name>
        <t>As a rough guide, the following conventions are used in pseudocode:</t>
        <ul spacing="normal">
          <li>All arithmetic operations are performed over a field F, unless
explicitly stated otherwise.</li>
          <li>u: the input to the mapping function.
This is an element of F produced by the hash_to_field function.</li>
          <li>(x, y), (s, t), (v, w): the affine coordinates of the point output by the mapping.
Indexed variables (e.g., x1, y2, ...) are used for candidate values.</li>
          <li>tv1, tv2, ...: reusable temporary variables.</li>
          <li>c1, c2, ...: constant values, which can be computed in advance.</li>
        </ul>
      </section>
      <section anchor="point-sign" numbered="true" toc="default">
        <name>Sign of the resulting point</name>
        <t>In general, elliptic curves have equations of the form y^2 = g(x).
The mappings in this section first identify an x such that
g(x) is square, then take a square root to find y. Since there
are two square roots when g(x) != 0, this may result in an ambiguity
regarding the sign of y.</t>
        <t>When necessary, the mappings in this section resolve this ambiguity by
specifying the sign of the y-coordinate in terms of the input to the mapping
function.
Two main reasons support this approach: first, this covers elliptic curves
over any field in a uniform way, and second, it gives implementors leeway
in optimizing square-root implementations.</t>
      </section>
      <section anchor="map-exceptions" numbered="true" toc="default">
        <name>Exceptional cases</name>
        <t>Mappings may have have exceptional cases, i.e., inputs u
on which the mapping is undefined. These cases must be handled
carefully, especially for constant-time implementations.</t>
        <t>For each mapping in this section, we discuss the exceptional cases and show
how to handle them in constant time. Note that all implementations SHOULD use
inv0 (<xref target="utility" format="default"/>) to compute multiplicative inverses, to avoid exceptional
cases that result from attempting to compute the inverse of 0.</t>
      </section>
      <section anchor="weierstrass" numbered="true" toc="default">
        <name>Mappings for Weierstrass curves</name>
        <t>The mappings in this section apply to a target curve E defined by the equation</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
    y^2 = g(x) = x^3 + A * x + B
]]></artwork>
        <t>where 4 * A^3 + 27 * B^2 != 0.</t>
        <section anchor="svdw" numbered="true" toc="default">
          <name>Shallue-van de Woestijne method</name>
          <t>Shallue and van de Woestijne <xref target="SW06" format="default"/> describe a mapping that applies to
essentially any elliptic curve.
(Note, however, that this mapping is more expensive to evaluate than
the other mappings in this document.)</t>
          <t>The parameterization given below is for Weierstrass curves;
its derivation is detailed in <xref target="W19" format="default"/>.
This parameterization also works for Montgomery (<xref target="montgomery" format="default"/>) and
twisted Edwards (<xref target="twisted-edwards" format="default"/>) curves via the rational maps
given in <xref target="appx-rational-map" format="default"/>:
first evaluate the Shallue-van de Woestijne mapping to an equivalent Weierstrass
curve, then map that point to the target Montgomery or twisted Edwards curve
using the corresponding rational map.</t>
          <t>Preconditions: A Weierstrass curve y^2 = x^3 + A * x + B.</t>
          <t>Constants:</t>
          <ul spacing="normal">
            <li>A and B, the parameter of the Weierstrass curve.</li>
            <li>
              <t>Z, a non-zero element of F meeting the below criteria.
<xref target="svdw-z-code" format="default"/> gives a Sage <xref target="SAGE" format="default"/> script that outputs the RECOMMENDED Z.  </t>
              <ol spacing="normal" type="1">
                <li>g(Z) != 0 in F.</li>
                <li>-(3 * Z^2 + 4 * A) / (4 * g(Z)) != 0 in F.</li>
                <li>-(3 * Z^2 + 4 * A) / (4 * g(Z)) is square in F.</li>
                <li>At least one of g(Z) and g(-Z / 2) is square in F.</li>
              </ol>
            </li>
          </ul>
          <t>Sign of y: Inputs u and -u give the same x-coordinate for many values of u.
Thus, we set sgn0(y) == sgn0(u).</t>
          <t>Exceptions: The exceptional cases for u occur when
(1 + u^2 * g(Z)) * (1 - u^2 * g(Z)) == 0.
The restrictions on Z given above ensure that implementations that use inv0
to invert this product are exception free.</t>
          <t>Operations:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
1. tv1 = u^2 * g(Z)
2. tv2 = 1 + tv1
3. tv1 = 1 - tv1
4. tv3 = inv0(tv1 * tv2)
5. tv4 = sqrt(-g(Z) * (3 * Z^2 + 4 * A))
6. If sgn0(tv4) == 1, set tv4 = -tv4        # sgn0(tv4) MUST equal 0
7. tv5 = u * tv1 * tv3 * tv4
8.  x1 = -Z / 2 - tv5
9.  x2 = -Z / 2 + tv5
10. x3 = Z - 4 * g(Z) * (tv2^2 * tv3)^2 / (3 * Z^2 + 4 * A)
11. If is_square(g(x1)), set x = x1 and y = sqrt(g(x1))
12. Else If is_square(g(x2)), set x = x2 and y = sqrt(g(x2))
13. Else set x = x3 and y = sqrt(g(x3))
14. If sgn0(u) != sgn0(y), set y = -y
15. return (x, y)
]]></artwork>
          <t><xref target="straightline-svdw" format="default"/> gives an example straight-line implementation of this
mapping.</t>
        </section>
        <section anchor="simple-swu" numbered="true" toc="default">
          <name>Simplified Shallue-van de Woestijne-Ulas method</name>
          <t>The function map_to_curve_simple_swu(u) implements a simplification
of the Shallue-van de Woestijne-Ulas mapping <xref target="U07" format="default"/> described by Brier et
al. <xref target="BCIMRT10" format="default"/>, which they call the "simplified SWU" map. Wahby and Boneh
<xref target="WB19" format="default"/> generalize and optimize this mapping.</t>
          <t>Preconditions: A Weierstrass curve y^2 = x^3 + A * x + B where A != 0 and B != 0.</t>
          <t>Constants:</t>
          <ul spacing="normal">
            <li>A and B, the parameters of the Weierstrass curve.</li>
            <li>
              <t>Z, an element of F meeting the below criteria.
<xref target="sswu-z-code" format="default"/> gives a Sage <xref target="SAGE" format="default"/> script that outputs the RECOMMENDED Z.
The criteria are:  </t>
              <ol spacing="normal" type="1">
                <li>Z is non-square in F,</li>
                <li>Z != -1 in F,</li>
                <li>the polynomial g(x) - Z is irreducible over F, and</li>
                <li>g(B / (Z * A)) is square in F.</li>
              </ol>
            </li>
          </ul>
          <t>Sign of y: Inputs u and -u give the same x-coordinate.
Thus, we set sgn0(y) == sgn0(u).</t>
          <t>Exceptions: The exceptional cases are values of u such that
Z^2 * u^4 + Z * u^2 == 0. This includes u == 0, and may include
other values depending on Z. Implementations must detect
this case and set x1 = B / (Z * A), which guarantees that g(x1)
is square by the condition on Z given above.</t>
          <t>Operations:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
1. tv1 = inv0(Z^2 * u^4 + Z * u^2)
2.  x1 = (-B / A) * (1 + tv1)
3.  If tv1 == 0, set x1 = B / (Z * A)
4. gx1 = x1^3 + A * x1 + B
5.  x2 = Z * u^2 * x1
6. gx2 = x2^3 + A * x2 + B
7.  If is_square(gx1), set x = x1 and y = sqrt(gx1)
8.  Else set x = x2 and y = sqrt(gx2)
9.  If sgn0(u) != sgn0(y), set y = -y
10. return (x, y)
]]></artwork>
          <t><xref target="straightline-sswu" format="default"/> gives an example straight-line implementation of this
mapping.
<xref target="sswu-opt" format="default"/> gives optimized straight-line procedures that apply to specific
classes of curves and base fields.
For more information on optimizing this mapping, see
<xref target="WB19" format="default"/> Section 4 or the example code found at <xref target="hash2curve-repo" format="default"/>.</t>
        </section>
        <section anchor="simple-swu-AB0" numbered="true" toc="default">
          <name>Simplified SWU for AB == 0</name>
          <t>Wahby and Boneh <xref target="WB19" format="default"/> show how to adapt the simplified SWU mapping to
Weierstrass curves having A == 0 or B == 0, which the mapping of
<xref target="simple-swu" format="default"/> does not support.
(The case A == B == 0 is excluded because y^2 = x^3 is not an elliptic curve.)</t>
          <t>This method applies to curves like secp256k1 <xref target="SEC2" format="default"/> and to pairing-friendly
curves in the Barreto-Lynn-Scott <xref target="BLS03" format="default"/>, Barreto-Naehrig <xref target="BN05" format="default"/>, and other families.</t>
          <t>This method requires finding another elliptic curve E' given by the equation</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
    y'^2 = g'(x') = x'^3 + A' * x' + B'
]]></artwork>
          <t>that is isogenous to E and has A' != 0 and B' != 0.
(See <xref target="WB19" format="default"/>, Appendix A, for one way of finding E' using <xref target="SAGE" format="default"/>.)
This isogeny defines a map iso_map(x', y') given by a pair of rational functions.
iso_map takes as input a point on E' and produces as output a point on E.</t>
          <t>Once E' and iso_map are identified, this mapping works as follows: on input
u, first apply the simplified SWU mapping to get a point on E', then apply
the isogeny map to that point to get a point on E.</t>
          <t>Note that iso_map is a group homomorphism, meaning that point addition
commutes with iso_map.
Thus, when using this mapping in the hash_to_curve construction of <xref target="roadmap" format="default"/>,
one can effect a small optimization by first mapping u0 and u1 to E', adding
the resulting points on E', and then applying iso_map to the sum.
This gives the same result while requiring only one evaluation of iso_map.</t>
          <t>Preconditions: An elliptic curve E' with A' != 0 and B' != 0 that is
isogenous to the target curve E with isogeny map iso_map from
E' to E.</t>
          <t>Helper functions:</t>
          <ul spacing="normal">
            <li>map_to_curve_simple_swu is the mapping of <xref target="simple-swu" format="default"/> to E'</li>
            <li>iso_map is the isogeny map from E' to E</li>
          </ul>
          <t>Sign of y: for this map, the sign is determined by map_to_curve_simple_swu.
No further sign adjustments are necessary.</t>
          <t>Exceptions: map_to_curve_simple_swu handles its exceptional cases.
Exceptional cases of iso_map are inputs that cause the denominator of
either rational function to evaluate to zero; such cases MUST return the
identity point on E.</t>
          <t>Operations:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
1. (x', y') = map_to_curve_simple_swu(u)    # (x', y') is on E'
2.   (x, y) = iso_map(x', y')               # (x, y) is on E
3. return (x, y)
]]></artwork>
          <t>See <xref target="hash2curve-repo" format="default"/> or <xref target="WB19" format="default"/> Section 4.3 for details on implementing the isogeny map.</t>
        </section>
      </section>
      <section anchor="montgomery" numbered="true" toc="default">
        <name>Mappings for Montgomery curves</name>
        <t>The mapping defined in this section applies to a target curve M defined by the equation</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
    K * t^2 = s^3 + J * s^2 + s
]]></artwork>
        <section anchor="elligator2" numbered="true" toc="default">
          <name>Elligator 2 method</name>
          <t>Bernstein, Hamburg, Krasnova, and Lange give a mapping that applies to any
curve with a point of order 2 <xref target="BHKL13" format="default"/>, which they call Elligator 2.</t>
          <t>Preconditions: A Montgomery curve K * t^2 = s^3 + J * s^2 + s where
J != 0, K != 0, and (J^2 - 4) / K^2 is non-zero and non-square in F.</t>
          <t>Constants:</t>
          <ul spacing="normal">
            <li>J and K, the parameters of the elliptic curve.</li>
            <li>Z, a non-square element of F.
<xref target="elligator-z-code" format="default"/> gives a Sage <xref target="SAGE" format="default"/> script that outputs the RECOMMENDED Z.</li>
          </ul>
          <t>Sign of t: this mapping fixes the sign of t as specified in <xref target="BHKL13" format="default"/>.
No additional adjustment is required.</t>
          <t>Exceptions: The exceptional case is Z * u^2 == -1, i.e., 1 + Z * u^2 == 0.
Implementations must detect this case and set x1 = -(J / K).
Note that this can only happen when q = 3 (mod 4).</t>
          <t>Operations:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
1.  x1 = -(J / K) * inv0(1 + Z * u^2)
2.  If x1 == 0, set x1 = -(J / K)
3. gx1 = x1^3 + (J / K) * x1^2 + x1 / K^2
4.  x2 = -x1 - (J / K)
5. gx2 = x2^3 + (J / K) * x2^2 + x2 / K^2
6.  If is_square(gx1), set x = x1, y = sqrt(gx1), and sgn0(y) == 1.
7.  Else set x = x2, y = sqrt(gx2), and sgn0(y) == 0.
8.   s = x * K
9.   t = y * K
10. return (s, t)
]]></artwork>
          <t><xref target="straightline-ell2" format="default"/> gives an example straight-line implementation of this
mapping.
<xref target="ell2-opt" format="default"/> gives optimized straight-line procedures that apply to specific
classes of curves and base fields.</t>
        </section>
      </section>
      <section anchor="twisted-edwards" numbered="true" toc="default">
        <name>Mappings for twisted Edwards curves</name>
        <t>Twisted Edwards curves (a class of curves that includes Edwards curves)
are given by the equation</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
    a * v^2 + w^2 = 1 + d * v^2 * w^2
]]></artwork>
        <t>with a != 0, d != 0, and a != d <xref target="BBJLP08" format="default"/>.</t>
        <t>These curves are closely related to Montgomery
curves (<xref target="montgomery" format="default"/>): every twisted Edwards curve is birationally equivalent
to a Montgomery curve (<xref target="BBJLP08" format="default"/>, Theorem 3.2).
This equivalence yields an efficient way of hashing to a twisted Edwards curve:
first, hash to an equivalent Montgomery curve, then transform the
result into a point on the twisted Edwards curve via a rational map.
This method of hashing to a twisted Edwards curve thus requires identifying a
corresponding Montgomery curve and rational map.
We describe how to identify such a curve and map immediately below.</t>
        <section anchor="rational-map" numbered="true" toc="default">
          <name>Rational maps from Montgomery to twisted Edwards curves</name>
          <t>There are two ways to select a Montgomery curve and rational map
for use when hashing to a given twisted Edwards curve.
The selected Montgomery curve and rational map MUST be specified as part of
the hash-to-curve suite for a given twisted Edwards curve; see <xref target="suites" format="default"/>.</t>
          <ol spacing="normal" type="1">
            <li>
              <t>When hashing to a standardized twisted Edwards curve for which a corresponding
Montgomery form and rational map are also standardized, the standard
Montgomery form and rational map SHOULD be used to ensure compatibility
with existing software.  </t>
              <t>
In certain cases, e.g., edwards25519 <xref target="RFC7748" format="default"/>, the sign of the rational
 map from the twisted Edwards curve to its corresponding Montgomery curve
 is not given explicitly.
 In this case, the sign MUST be fixed such that applying the rational map
 to the twisted Edwards curve's base point yields the Montgomery curve's
 base point with correct sign.
 (For edwards25519, see <xref target="RFC7748" format="default"/> and <xref target="EID4730" format="default"/>.)  </t>
              <t>
When defining new twisted Edwards curves, a Montgomery equivalent and rational
 map SHOULD also be specified, and the sign of the rational map SHOULD be stated
 explicitly.</t>
            </li>
            <li>When hashing to a twisted Edwards curve that does not have a standardized
Montgomery form or rational map, the map given in <xref target="appx-rational-map" format="default"/>
SHOULD be used.</li>
          </ol>
        </section>
        <section anchor="ell2edwards" numbered="true" toc="default">
          <name>Elligator 2 method</name>
          <t>Preconditions: A twisted Edwards curve E and an equivalent Montgomery
curve M meeting the requirements in <xref target="rational-map" format="default"/>.</t>
          <t>Helper functions:</t>
          <ul spacing="normal">
            <li>map_to_curve_elligator2 is the mapping of <xref target="elligator2" format="default"/> to the curve M.</li>
            <li>rational_map is a function that takes a point (s, t) on M and
returns a point (v, w) on E, as defined in <xref target="rational-map" format="default"/>.</li>
          </ul>
          <t>Sign of t (and v): for this map, the sign is determined by map_to_curve_elligator2.
No further sign adjustments are required.</t>
          <t>Exceptions: The exceptions for the Elligator 2 mapping are as given in
<xref target="elligator2" format="default"/>.
The exceptions for the rational map are as given in <xref target="rational-map" format="default"/>.
No other exceptions are possible.</t>
          <t>The following procedure implements the Elligator 2 mapping for a twisted
Edwards curve.
(Note that the output point is denoted (v, w) because it is a point on
the target twisted Edwards curve.)</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
map_to_curve_elligator2_edwards(u)

Input: u, an element of F.
Output: (v, w), a point on E.

1. (s, t) = map_to_curve_elligator2(u)      # (s, t) is on M
2. (v, w) = rational_map(s, t)              # (v, w) is on E
3. return (v, w)
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="cofactor-clearing" numbered="true" toc="default">
      <name>Clearing the cofactor</name>
      <t>The mappings of <xref target="mappings" format="default"/> always output a point on the elliptic curve,
i.e., a point in a group of order h * r (<xref target="bg-curves" format="default"/>). Obtaining a point in G
may require a final operation commonly called "clearing the cofactor," which
takes as input any point on the curve and produces as output a point in the
prime-order (sub)group G (<xref target="bg-curves" format="default"/>).</t>
      <t>The cofactor can always be cleared via scalar multiplication by h.
For elliptic curves where h = 1, i.e., the curves with a prime number of points,
no operation is required. This applies, for example, to the NIST curves P-256,
P-384, and P-521 <xref target="FIPS186-4" format="default"/>.</t>
      <t>In some cases, it is possible to clear the cofactor via a faster method than
scalar multiplication by h.
These methods are equivalent to (but usually faster than) multiplication by
some scalar h_eff whose value is determined by the method and the curve.
Examples of fast cofactor clearing methods include the following:</t>
      <ul spacing="normal">
        <li>For certain pairing-friendly curves having subgroup G2 over an extension
field, Scott et al. <xref target="SBCDK09" format="default"/> describe a method for fast cofactor clearing
that exploits an efficiently-computable endomorphism. Fuentes-Castaneda
et al. <xref target="FKR11" format="default"/> propose an alternative method that is sometimes more efficient.
Budroni and Pintore <xref target="BP17" format="default"/> give concrete instantiations of these methods
for Barreto-Lynn-Scott pairing-friendly curves <xref target="BLS03" format="default"/>.
This method is described for the specific case of BLS12-381 in
<xref target="clear-cofactor-bls12381-g2" format="default"/>.</li>
        <li>Wahby and Boneh (<xref target="WB19" format="default"/>, Section 5) describe a trick due to Scott for
fast cofactor clearing on any elliptic curve for which the prime
factorization of h and the structure of the elliptic curve group meet
certain conditions.</li>
      </ul>
      <t>The clear_cofactor function is parameterized by a scalar h_eff.
Specifically,</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
    clear_cofactor(P) := h_eff * P
]]></artwork>
      <t>where * represents scalar multiplication.
When a curve does not support a fast cofactor clearing method, h_eff = h
and the cofactor MUST be cleared via scalar multiplication.</t>
      <t>When a curve admits a fast cofactor clearing method, clear_cofactor
MAY be evaluated either via that method or via scalar multiplication
by the equivalent h_eff; these two methods give the same result.
Note that in this case scalar multiplication by the cofactor h does not
generally give the same result as the fast method, and SHOULD NOT be used.</t>
    </section>
    <section anchor="suites" numbered="true" toc="default">
      <name>Suites for hashing</name>
      <t>This section lists recommended suites for hashing to standard elliptic curves.</t>
      <t>A hash-to-curve suite fully specifies the procedure for hashing byte strings
to points on a specific elliptic curve group.
<xref target="suites-howto" format="default"/> describes how to implement a suite.
Applications that require hashing to an elliptic curve should use either
an existing suite or a new suite specified as described in <xref target="new-suite" format="default"/>.</t>
      <t>All applications using a hash-to-curve suite MUST choose a domain
separation tag (DST) in accordance with the guidelines in <xref target="domain-separation" format="default"/>.
In addition, applications whose security requires a random oracle
that returns points on the target curve MUST use a suite whose encoding type
is hash_to_curve; see <xref target="roadmap" format="default"/> and immediately below for more information.</t>
      <t>A hash-to-curve suite comprises the following parameters:</t>
      <ul spacing="normal">
        <li>Suite ID, a short name used to refer to a given suite.
<xref target="suiteIDformat" format="default"/> discusses the naming conventions for suite IDs.</li>
        <li>encoding type, either random oracle (hash_to_curve) or nonuniform (encode_to_curve).
See <xref target="roadmap" format="default"/> for definitions of these encoding types.</li>
        <li>E, the target elliptic curve over a field F.</li>
        <li>p, the characteristic of the field F.</li>
        <li>m, the extension degree of the field F.</li>
        <li>k, the target security level of the suite in bits.
(See <xref target="security-considerations-targets" format="default"/> for discussion.)</li>
        <li>L, the length parameter for hash_to_field (<xref target="hashtofield-sec" format="default"/>).</li>
        <li>expand_message, one of the variants specified in <xref target="hashtofield-expand" format="default"/>
plus any parameters required for the specified variant (for example, H,
the underlying hash function).</li>
        <li>f, a mapping function from <xref target="mappings" format="default"/>.</li>
        <li>h_eff, the scalar parameter for clear_cofactor (<xref target="cofactor-clearing" format="default"/>).</li>
      </ul>
      <t>In addition to the above parameters, the mapping f may require
additional parameters Z, M, rational_map, E', or iso_map.
When applicable, these MUST be specified.</t>
      <t>The below table lists suites RECOMMENDED for some elliptic curves.
The corresponding parameters are given in the following subsections.
Applications instantiating cryptographic protocols whose security analysis
relies on a random oracle MUST NOT use a nonuniform encoding.
Moreover, applications that use a nonuniform encoding SHOULD carefully
analyze the security implications of nonuniformity.
When the required encoding is not clear, applications SHOULD use a
random oracle for security.</t>
      <table align="center">
        <thead>
          <tr>
            <th align="left">E</th>
            <th align="left">Suites</th>
            <th align="left">Section</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">NIST P-256</td>
            <td align="left">P256_XMD:SHA-256_SSWU_RO_ P256_XMD:SHA-256_SSWU_NU_</td>
            <td align="left">
              <xref target="suites-p256" format="default"/></td>
          </tr>
          <tr>
            <td align="left">NIST P-384</td>
            <td align="left">P384_XMD:SHA-512_SSWU_RO_ P384_XMD:SHA-512_SSWU_NU_</td>
            <td align="left">
              <xref target="suites-p384" format="default"/></td>
          </tr>
          <tr>
            <td align="left">NIST P-521</td>
            <td align="left">P521_XMD:SHA-512_SSWU_RO_ P521_XMD:SHA-512_SSWU_NU_</td>
            <td align="left">
              <xref target="suites-p521" format="default"/></td>
          </tr>
          <tr>
            <td align="left">curve25519</td>
            <td align="left">curve25519_XMD:SHA-512_ELL2_RO_ curve25519_XMD:SHA-512_ELL2_NU_</td>
            <td align="left">
              <xref target="suites-25519" format="default"/></td>
          </tr>
          <tr>
            <td align="left">edwards25519</td>
            <td align="left">edwards25519_XMD:SHA-512_ELL2_RO_ edwards25519_XMD:SHA-512_ELL2_NU_</td>
            <td align="left">
              <xref target="suites-25519" format="default"/></td>
          </tr>
          <tr>
            <td align="left">curve448</td>
            <td align="left">curve448_XMD:SHA-512_ELL2_RO_ curve448_XMD:SHA-512_ELL2_NU_</td>
            <td align="left">
              <xref target="suites-448" format="default"/></td>
          </tr>
          <tr>
            <td align="left">edwards448</td>
            <td align="left">edwards448_XMD:SHA-512_ELL2_RO_ edwards448_XMD:SHA-512_ELL2_NU_</td>
            <td align="left">
              <xref target="suites-448" format="default"/></td>
          </tr>
          <tr>
            <td align="left">secp256k1</td>
            <td align="left">secp256k1_XMD:SHA-256_SSWU_RO_ secp256k1_XMD:SHA-256_SSWU_NU_</td>
            <td align="left">
              <xref target="suites-secp256k1" format="default"/></td>
          </tr>
          <tr>
            <td align="left">BLS12-381 G1</td>
            <td align="left">BLS12381G1_XMD:SHA-256_SSWU_RO_ BLS12381G1_XMD:SHA-256_SSWU_NU_</td>
            <td align="left">
              <xref target="suites-bls12381" format="default"/></td>
          </tr>
          <tr>
            <td align="left">BLS12-381 G2</td>
            <td align="left">BLS12381G2_XMD:SHA-256_SSWU_RO_ BLS12381G2_XMD:SHA-256_SSWU_NU_</td>
            <td align="left">
              <xref target="suites-bls12381" format="default"/></td>
          </tr>
        </tbody>
      </table>
      <section anchor="suites-howto" numbered="true" toc="default">
        <name>Implementing a hash-to-curve suite</name>
        <t>A hash-to-curve suite requires the following functions.
Note that some of these require utility functions from <xref target="utility" format="default"/>.</t>
        <ol spacing="normal" type="1">
          <li>Base field arithmetic operations for the target elliptic curve, e.g.,
addition, multiplication, and square root.</li>
          <li>Elliptic curve point operations for the target curve, e.g.,
point addition and scalar multiplication.</li>
          <li>The hash-to-field function; see <xref target="hashtofield" format="default"/>. This includes the expand_message
variant (<xref target="hashtofield-expand" format="default"/>) and any constituent hash function or XOF.</li>
          <li>The suite-specified mapping function; see the corresponding subsection of <xref target="mappings" format="default"/>.</li>
          <li>A cofactor clearing function; see <xref target="cofactor-clearing" format="default"/>. This may be implemented as
scalar multiplication by h_eff or as a faster equivalent method.</li>
          <li>The desired encoding function; see <xref target="roadmap" format="default"/>. This is either hash_to_curve or
encode_to_curve.</li>
        </ol>
      </section>
      <section anchor="suites-p256" numbered="true" toc="default">
        <name>Suites for NIST P-256</name>
        <t>This section defines ciphersuites for the NIST P-256 elliptic curve <xref target="FIPS186-4" format="default"/>.</t>
        <t>P256_XMD:SHA-256_SSWU_RO_ is defined as follows:</t>
        <ul spacing="normal">
          <li>encoding type: hash_to_curve (<xref target="roadmap" format="default"/>)</li>
          <li>
            <t>E: y^2 = x^3 + A * x + B, where
            </t>
            <ul spacing="normal">
              <li>A = -3</li>
              <li>B = 0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b</li>
            </ul>
          </li>
          <li>p: 2^256 - 2^224 + 2^192 + 2^96 - 1</li>
          <li>m: 1</li>
          <li>k: 128</li>
          <li>expand_message: expand_message_xmd (<xref target="hashtofield-expand-xmd" format="default"/>)</li>
          <li>H: SHA-256</li>
          <li>L: 48</li>
          <li>f: Simplified SWU method, <xref target="simple-swu" format="default"/></li>
          <li>Z: -10</li>
          <li>h_eff: 1</li>
        </ul>
        <t>P256_XMD:SHA-256_SSWU_NU_ is identical to P256_XMD:SHA-256_SSWU_RO_,
except that the encoding type is encode_to_curve (<xref target="roadmap" format="default"/>).</t>
        <t>An optimized example implementation of the Simplified SWU mapping
to P-256 is given in <xref target="sswu-map-to-3mod4" format="default"/>.</t>
      </section>
      <section anchor="suites-p384" numbered="true" toc="default">
        <name>Suites for NIST P-384</name>
        <t>This section defines ciphersuites for the NIST P-384 elliptic curve <xref target="FIPS186-4" format="default"/>.</t>
        <t>P384_XMD:SHA-512_SSWU_RO_ is defined as follows:</t>
        <ul spacing="normal">
          <li>encoding type: hash_to_curve (<xref target="roadmap" format="default"/>)</li>
          <li>
            <t>E: y^2 = x^3 + A * x + B, where
            </t>
            <ul spacing="normal">
              <li>A = -3</li>
              <li>B = 0xb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef</li>
            </ul>
          </li>
          <li>p: 2^384 - 2^128 - 2^96 + 2^32 - 1</li>
          <li>m: 1</li>
          <li>k: 192</li>
          <li>expand_message: expand_message_xmd (<xref target="hashtofield-expand-xmd" format="default"/>)</li>
          <li>H: SHA-512</li>
          <li>L: 72</li>
          <li>f: Simplified SWU method, <xref target="simple-swu" format="default"/></li>
          <li>Z: -12</li>
          <li>h_eff: 1</li>
        </ul>
        <t>P384_XMD:SHA-512_SSWU_NU_ is identical to P384_XMD:SHA-512_SSWU_RO_,
except that the encoding type is encode_to_curve (<xref target="roadmap" format="default"/>).</t>
        <t>An optimized example implementation of the Simplified SWU mapping
to P-384 is given in <xref target="sswu-map-to-3mod4" format="default"/>.</t>
      </section>
      <section anchor="suites-p521" numbered="true" toc="default">
        <name>Suites for NIST P-521</name>
        <t>This section defines ciphersuites for the NIST P-521 elliptic curve <xref target="FIPS186-4" format="default"/>.</t>
        <t>P521_XMD:SHA-512_SSWU_RO_ is defined as follows:</t>
        <ul spacing="normal">
          <li>encoding type: hash_to_curve (<xref target="roadmap" format="default"/>)</li>
          <li>
            <t>E: y^2 = x^3 + A * x + B, where
            </t>
            <ul spacing="normal">
              <li>A = -3</li>
              <li>B = 0x51953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f00</li>
            </ul>
          </li>
          <li>p: 2^521 - 1</li>
          <li>m: 1</li>
          <li>k: 256</li>
          <li>expand_message: expand_message_xmd (<xref target="hashtofield-expand-xmd" format="default"/>)</li>
          <li>H: SHA-512</li>
          <li>L: 98</li>
          <li>f: Simplified SWU method, <xref target="simple-swu" format="default"/></li>
          <li>Z: -4</li>
          <li>h_eff: 1</li>
        </ul>
        <t>P521_XMD:SHA-512_SSWU_NU_ is identical to P521_XMD:SHA-512_SSWU_RO_,
except that the encoding type is encode_to_curve (<xref target="roadmap" format="default"/>).</t>
        <t>An optimized example implementation of the Simplified SWU mapping
to P-521 is given in <xref target="sswu-map-to-3mod4" format="default"/>.</t>
      </section>
      <section anchor="suites-25519" numbered="true" toc="default">
        <name>Suites for curve25519 and edwards25519</name>
        <t>This section defines ciphersuites for curve25519 and edwards25519 <xref target="RFC7748" format="default"/>.</t>
        <t>curve25519_XMD:SHA-512_ELL2_RO_ is defined as follows:</t>
        <ul spacing="normal">
          <li>encoding type: hash_to_curve (<xref target="roadmap" format="default"/>)</li>
          <li>
            <t>E: K * t^2 = s^3 + J * s^2 + s, where
            </t>
            <ul spacing="normal">
              <li>J = 486662</li>
              <li>K = 1</li>
            </ul>
          </li>
          <li>p: 2^255 - 19</li>
          <li>m: 1</li>
          <li>k: 128</li>
          <li>expand_message: expand_message_xmd (<xref target="hashtofield-expand-xmd" format="default"/>)</li>
          <li>H: SHA-512</li>
          <li>L: 48</li>
          <li>f: Elligator 2 method, <xref target="elligator2" format="default"/></li>
          <li>Z: 2</li>
          <li>h_eff: 8</li>
        </ul>
        <t>edwards25519_XMD:SHA-512_ELL2_RO_ is identical to curve25519_XMD:SHA-512_ELL2_RO_,
except for the following parameters:</t>
        <ul spacing="normal">
          <li>
            <t>E: a * v^2 + w^2 = 1 + d * v^2 * w^2, where
            </t>
            <ul spacing="normal">
              <li>a = -1</li>
              <li>d = 0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3</li>
            </ul>
          </li>
          <li>f: Twisted Edwards Elligator 2 method, <xref target="ell2edwards" format="default"/></li>
          <li>M: curve25519 defined in <xref target="RFC7748" format="default"/>, Section 4.1</li>
          <li>rational_map: the birational map defined in <xref target="RFC7748" format="default"/>, Section 4.1</li>
        </ul>
        <t>curve25519_XMD:SHA-512_ELL2_NU_ is identical to curve25519_XMD:SHA-512_ELL2_RO_,
except that the encoding type is encode_to_curve (<xref target="roadmap" format="default"/>).</t>
        <t>edwards25519_XMD:SHA-512_ELL2_NU_ is identical to edwards25519_XMD:SHA-512_ELL2_RO_,
except that the encoding type is encode_to_curve (<xref target="roadmap" format="default"/>).</t>
        <t>Optimized example implementations of the above mappings are given in
<xref target="map-to-curve25519" format="default"/> and <xref target="map-to-edwards25519" format="default"/>.</t>
      </section>
      <section anchor="suites-448" numbered="true" toc="default">
        <name>Suites for curve448 and edwards448</name>
        <t>This section defines ciphersuites for curve448 and edwards448 <xref target="RFC7748" format="default"/>.</t>
        <t>curve448_XMD:SHA-512_ELL2_RO_ is defined as follows:</t>
        <ul spacing="normal">
          <li>encoding type: hash_to_curve (<xref target="roadmap" format="default"/>)</li>
          <li>
            <t>E: K * t^2 = s^3 + J * s^2 + s, where
            </t>
            <ul spacing="normal">
              <li>J = 156326</li>
              <li>K = 1</li>
            </ul>
          </li>
          <li>p: 2^448 - 2^224 - 1</li>
          <li>m: 1</li>
          <li>k: 224</li>
          <li>expand_message: expand_message_xmd (<xref target="hashtofield-expand-xmd" format="default"/>)</li>
          <li>H: SHA-512</li>
          <li>L: 84</li>
          <li>f: Elligator 2 method, <xref target="elligator2" format="default"/></li>
          <li>Z: -1</li>
          <li>h_eff: 4</li>
        </ul>
        <t>edwards448_XMD:SHA-512_ELL2_RO_ is identical to curve448_XMD:SHA-512_ELL2_RO_,
except for the following parameters:</t>
        <ul spacing="normal">
          <li>
            <t>E: a * v^2 + w^2 = 1 + d * v^2 * w^2, where
            </t>
            <ul spacing="normal">
              <li>a = 1</li>
              <li>d = -39081</li>
            </ul>
          </li>
          <li>f: Twisted Edwards Elligator 2 method, <xref target="ell2edwards" format="default"/></li>
          <li>M: curve448, defined in <xref target="RFC7748" format="default"/>, Section 4.2</li>
          <li>rational_map: the 4-isogeny map defined in <xref target="RFC7748" format="default"/>, Section 4.2</li>
        </ul>
        <t>curve448_XMD:SHA-512_ELL2_NU_ is identical to curve448_XMD:SHA-512_ELL2_RO_,
except that the encoding type is encode_to_curve (<xref target="roadmap" format="default"/>).</t>
        <t>edwards448_XMD:SHA-512_ELL2_NU_ is identical to edwards448_XMD:SHA-512_ELL2_RO_,
except that the encoding type is encode_to_curve (<xref target="roadmap" format="default"/>).</t>
        <t>Optimized example implementations of the above mappings are given in
<xref target="map-to-curve448" format="default"/> and <xref target="map-to-edwards448" format="default"/>.</t>
      </section>
      <section anchor="suites-secp256k1" numbered="true" toc="default">
        <name>Suites for secp256k1</name>
        <t>This section defines ciphersuites for the secp256k1 elliptic curve <xref target="SEC2" format="default"/>.</t>
        <t>secp256k1_XMD:SHA-256_SSWU_RO_ is defined as follows:</t>
        <ul spacing="normal">
          <li>encoding type: hash_to_curve (<xref target="roadmap" format="default"/>)</li>
          <li>E: y^2 = x^3 + 7</li>
          <li>p: 2^256 - 2^32 - 2^9 - 2^8 - 2^7 - 2^6 - 2^4 - 1</li>
          <li>m: 1</li>
          <li>k: 128</li>
          <li>expand_message: expand_message_xmd (<xref target="hashtofield-expand-xmd" format="default"/>)</li>
          <li>H: SHA-256</li>
          <li>L: 48</li>
          <li>f: Simplified SWU for AB == 0, <xref target="simple-swu-AB0" format="default"/></li>
          <li>Z: -11</li>
          <li>
            <t>E': y'^2 = x'^3 + A' * x' + B', where
            </t>
            <ul spacing="normal">
              <li>A': 0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533</li>
              <li>B': 1771</li>
            </ul>
          </li>
          <li>iso_map: the 3-isogeny map from E' to E given in <xref target="appx-iso-secp256k1" format="default"/></li>
          <li>h_eff: 1</li>
        </ul>
        <t>secp256k1_XMD:SHA-256_SSWU_NU_ is identical to secp256k1_XMD:SHA-256_SSWU_RO_,
except that the encoding type is encode_to_curve (<xref target="roadmap" format="default"/>).</t>
        <t>An optimized example implementation of the Simplified SWU mapping
to the curve E' isogenous to secp256k1 is given in <xref target="sswu-map-to-3mod4" format="default"/>.</t>
      </section>
      <section anchor="suites-bls12381" numbered="true" toc="default">
        <name>Suites for BLS12-381</name>
        <t>This section defines ciphersuites for groups G1 and G2 of
the BLS12-381 elliptic curve <xref target="BLS12-381" format="default"/>.
The curve parameters in this section match the ones listed in
<xref target="I-D.irtf-cfrg-pairing-friendly-curves" format="default"/>, Appendix C.</t>
        <section anchor="suites-bls12381-g1" numbered="true" toc="default">
          <name>BLS12-381 G1</name>
          <t>BLS12381G1_XMD:SHA-256_SSWU_RO_ is defined as follows:</t>
          <ul spacing="normal">
            <li>encoding type: hash_to_curve (<xref target="roadmap" format="default"/>)</li>
            <li>E: y^2 = x^3 + 4</li>
            <li>p: 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab</li>
            <li>m: 1</li>
            <li>k: 128</li>
            <li>expand_message: expand_message_xmd (<xref target="hashtofield-expand-xmd" format="default"/>)</li>
            <li>H: SHA-256</li>
            <li>L: 64</li>
            <li>f: Simplified SWU for AB == 0, <xref target="simple-swu-AB0" format="default"/></li>
            <li>Z: 11</li>
            <li>
              <t>E': y'^2 = x'^3 + A' * x' + B', where
              </t>
              <ul spacing="normal">
                <li>A' = 0x144698a3b8e9433d693a02c96d4982b0ea985383ee66a8d8e8981aefd881ac98936f8da0e0f97f5cf428082d584c1d</li>
                <li>B' = 0x12e2908d11688030018b12e8753eee3b2016c1f0f24f4070a0b9c14fcef35ef55a23215a316ceaa5d1cc48e98e172be0</li>
              </ul>
            </li>
            <li>iso_map: the 11-isogeny map from E' to E given in <xref target="appx-iso-bls12381-g1" format="default"/></li>
            <li>h_eff: 0xd201000000010001</li>
          </ul>
          <t>BLS12381G1_XMD:SHA-256_SSWU_NU_ is identical to BLS12381G1_XMD:SHA-256_SSWU_RO_,
except that the encoding type is encode_to_curve (<xref target="roadmap" format="default"/>).</t>
          <t>Note that the h_eff values for these suites are chosen for compatibility
with the fast cofactor clearing method described by Scott (<xref target="WB19" format="default"/> Section 5).</t>
          <t>An optimized example implementation of the Simplified SWU mapping
to the curve E' isogenous to BLS12-381 G1 is given in <xref target="sswu-map-to-3mod4" format="default"/>.</t>
        </section>
        <section anchor="suites-bls12381-g2" numbered="true" toc="default">
          <name>BLS12-381 G2</name>
          <t>BLS12381G2_XMD:SHA-256_SSWU_RO_ is defined as follows:</t>
          <ul spacing="normal">
            <li>encoding type: hash_to_curve (<xref target="roadmap" format="default"/>)</li>
            <li>E: y^2 = x^3 + 4 * (1 + I)</li>
            <li>
              <t>base field F is GF(p^m), where
              </t>
              <ul spacing="normal">
                <li>p: 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab</li>
                <li>m: 2</li>
                <li>(1, I) is the basis for F, where I^2 + 1 == 0 in F</li>
              </ul>
            </li>
            <li>k: 128</li>
            <li>expand_message: expand_message_xmd (<xref target="hashtofield-expand-xmd" format="default"/>)</li>
            <li>H: SHA-256</li>
            <li>L: 64</li>
            <li>f: Simplified SWU for AB == 0, <xref target="simple-swu-AB0" format="default"/></li>
            <li>Z: -(2 + I)</li>
            <li>
              <t>E': y'^2 = x'^3 + A' * x' + B', where
              </t>
              <ul spacing="normal">
                <li>A' = 240 * I</li>
                <li>B' = 1012 * (1 + I)</li>
              </ul>
            </li>
            <li>iso_map: the isogeny map from E' to E given in <xref target="appx-iso-bls12381-g2" format="default"/></li>
            <li>h_eff: 0xbc69f08f2ee75b3584c6a0ea91b352888e2a8e9145ad7689986ff031508ffe1329c2f178731db956d82bf015d1212b02ec0ec69d7477c1ae954cbc06689f6a359894c0adebbf6b4e8020005aaa95551</li>
          </ul>
          <t>BLS12381G2_XMD:SHA-256_SSWU_NU_ is identical to BLS12381G2_XMD:SHA-256_SSWU_RO_,
except that the encoding type is encode_to_curve (<xref target="roadmap" format="default"/>).</t>
          <t>Note that the h_eff values for these suites are chosen for compatibility
with the fast cofactor clearing method described by
Budroni and Pintore (<xref target="BP17" format="default"/>, Section 4.1), and summarized in <xref target="clear-cofactor-bls12381-g2" format="default"/>.</t>
          <t>An optimized example implementation of the Simplified SWU mapping
to the curve E' isogenous to BLS12-381 G2 is given in <xref target="sswu-map-to-9mod16" format="default"/>.</t>
        </section>
      </section>
      <section anchor="new-suite" numbered="true" toc="default">
        <name>Defining a new hash-to-curve suite</name>
        <t>The RECOMMENDED way to define a new hash-to-curve suite is:</t>
        <ol spacing="normal" type="1">
          <li>E, F, p, and m are determined by the elliptic curve and its base field.</li>
          <li>k is an upper bound on the target security level of the suite
(<xref target="security-considerations-targets" format="default"/>).
A reasonable choice of k is ceil(log2(r) / 2), where r is
the order of the subgroup G of the curve E (<xref target="bg-curves" format="default"/>).</li>
          <li>Choose encoding type, either hash_to_curve or encode_to_curve (<xref target="roadmap" format="default"/>).</li>
          <li>Compute L as described in <xref target="hashtofield-sec" format="default"/>.</li>
          <li>Choose an expand_message variant from <xref target="hashtofield-expand" format="default"/> plus any
underlying cryptographic primitives (e.g., a hash function H).</li>
          <li>Choose a mapping following the guidelines in <xref target="choosing-mapping" format="default"/>,
and select any required parameters for that mapping.</li>
          <li>Choose h_eff to be either the cofactor of E or, if a fast cofactor
clearing method is to be used, a value appropriate to that method
as discussed in <xref target="cofactor-clearing" format="default"/>.</li>
          <li>Construct a Suite ID following the guidelines in <xref target="suiteIDformat" format="default"/>.</li>
        </ol>
        <t>When hashing to an elliptic curve not listed in this section, corresponding
hash-to-curve suites SHOULD be fully specified as described above.</t>
      </section>
      <section anchor="suiteIDformat" numbered="true" toc="default">
        <name>Suite ID naming conventions</name>
        <t>Suite IDs MUST be constructed as follows:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
CURVE_ID || "_" || HASH_ID || "_" || MAP_ID || "_" || ENC_VAR || "_"
]]></artwork>
        <t>The fields CURVE_ID, HASH_ID, MAP_ID, and ENC_VAR are
ASCII-encoded strings of at most 64 characters each.
Fields MUST contain only ASCII characters between 0x21 and 0x7E (inclusive)
except that underscore (i.e., 0x5f) is not allowed.</t>
        <t>As indicated above, each field (including the last) is followed by an underscore
("_", ASCII 0x5f).
This helps to ensure that Suite IDs are prefix free.
Suite IDs MUST include the final underscore and MUST NOT include any characters
after the final underscore.</t>
        <t>Suite ID fields MUST be chosen as follows:</t>
        <ul spacing="normal">
          <li>CURVE_ID: a human-readable representation of the target elliptic curve.</li>
          <li>
            <t>HASH_ID: a human-readable representation of the expand_message function
and any underlying hash primitives used in hash_to_field (<xref target="hashtofield" format="default"/>).
This field MUST be constructed as follows:  </t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
  EXP_TAG || ":" || HASH_NAME
]]></artwork>
            <t>
EXP_TAG indicates the expand_message variant:  </t>
            <ul spacing="normal">
              <li>"XMD" for expand_message_xmd (<xref target="hashtofield-expand-xmd" format="default"/>).</li>
              <li>"XOF" for expand_message_xof (<xref target="hashtofield-expand-xof" format="default"/>).</li>
            </ul>
            <t>
HASH_NAME is a human-readable name for the underlying hash primitive.
As examples:  </t>
            <ol spacing="normal" type="1">
              <li>For expand_message_xof (<xref target="hashtofield-expand-xof" format="default"/>) with SHAKE-128,
HASH_ID is "XOF:SHAKE-128".</li>
              <li>For expand_message_xmd (<xref target="hashtofield-expand-xmd" format="default"/>) with SHA3-256,
HASH_ID is "XMD:SHA3-256".</li>
            </ol>
          </li>
          <li>
            <t>MAP_ID: a human-readable representation of the map_to_curve function
as defined in <xref target="mappings" format="default"/>. These are defined as follows:  </t>
            <ul spacing="normal">
              <li>"SVDW" for or Shallue and van de Woestijne (<xref target="svdw" format="default"/>).</li>
              <li>"SSWU" for Simplified SWU (<xref target="simple-swu" format="default"/>, <xref target="simple-swu-AB0" format="default"/>).</li>
              <li>"ELL2" for Elligator 2 (<xref target="elligator2" format="default"/>, <xref target="ell2edwards" format="default"/>).</li>
            </ul>
          </li>
          <li>
            <t>ENC_VAR: a string indicating the encoding type and other information.
The first two characters of this string indicate whether the suite
represents a hash_to_curve or an encode_to_curve operation
(<xref target="roadmap" format="default"/>), as follows:  </t>
            <ul spacing="normal">
              <li>If ENC_VAR begins with "RO", the suite uses hash_to_curve.</li>
              <li>If ENC_VAR begins with "NU", the suite uses encode_to_curve.</li>
              <li>ENC_VAR MUST NOT begin with any other string.</li>
            </ul>
            <t>
ENC_VAR MAY also be used to encode other information used to identify
  variants, for example, a version number.
  The RECOMMENDED way to do so is to add one or more subfields separated
  by colons.
  For example, "RO:V02" is an appropriate ENC_VAR value for the second
  version of a random-oracle suite, while "RO:V02:FOO01:BAR17" might be
  used to indicate a variant of that suite.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security considerations</name>
      <t><xref target="domain-separation" format="default"/> describes considerations related to domain separation.
See <xref target="security-considerations-domain-separation" format="default"/> for further discussion.</t>
      <t><xref target="hashtofield" format="default"/> describes considerations for uniformly hashing to field elements;
see <xref target="security-considerations-hash-to-field" format="default"/> and <xref target="security-considerations-expand-xmd" format="default"/>
for further discussion.</t>
      <t>Each encoding type (<xref target="roadmap" format="default"/>) accepts an arbitrary byte string and maps
it to a point on the curve sampled from a distribution that depends on the
encoding type.
It is important to note that using a nonuniform encoding or directly
evaluating one of the mappings of <xref target="mappings" format="default"/> produces an output that is
easily distinguished from a uniformly random point.
Applications that use a nonuniform encoding SHOULD carefully analyze the security
implications of nonuniformity.
When the required encoding is not clear, applications SHOULD use a random
oracle encoding.</t>
      <t>When the hash_to_curve function (<xref target="roadmap" format="default"/>) is instantiated with a
hash_to_field function that is indifferentiable from a random oracle
(<xref target="hashtofield" format="default"/>), the resulting function is indifferentiable from a random
oracle (<xref target="MRH04" format="default"/>, <xref target="BCIMRT10" format="default"/>, <xref target="FFSTV13" format="default"/>, <xref target="LBB19" format="default"/>).
In many cases such a function can be safely used in cryptographic protocols
whose security analysis assumes a random oracle that outputs points on an
elliptic curve.
As Ristenpart et al. discuss in <xref target="RSS11" format="default"/>, however, not all security proofs
that rely on random oracles continue to hold when those oracles are replaced
by indifferentiable functionalities.
This limitation should be considered when analyzing the security of protocols
relying on the hash_to_curve function.</t>
      <t>When hashing passwords using any function described in this document, an adversary
who learns the output of the hash function (or potentially any intermediate value,
e.g., the output of hash_to_field) may be able to carry out a dictionary attack.
To mitigate such attacks, it is recommended to first execute a more costly key
derivation function (e.g., PBKDF2 <xref target="RFC2898" format="default"/> or scrypt <xref target="RFC7914" format="default"/>) on the password,
then hash the output of that function to the target elliptic curve.
For collision resistance, the hash underlying the key derivation function
should be chosen according to the guidelines listed in <xref target="hashtofield-expand-xmd" format="default"/>.</t>
      <t>Constant-time implementations of all functions in this document are STRONGLY
RECOMMENDED for all uses, to avoid leaking information via side channels.
It is especially important to use a constant-time implementation when inputs to
an encoding are secret values; in such cases, constant-time implementations
are REQUIRED for security against timing attacks (e.g., <xref target="VR20" format="default"/>).
When constant-time implementations are required, all basic operations and
utility functions must be implemented in constant time, as discussed in
<xref target="utility" format="default"/>.
In some applications (e.g., embedded systems), leakage through other side
channels (e.g., power or electromagnetic side channels) may be pertinent.
Defending against such leakage is outside the scope of this document, because
the nature of the leakage and the appropriate defense depends on the application.</t>
      <section anchor="security-considerations-hash-to-field" numbered="true" toc="default">
        <name>hash_to_field security</name>
        <t>The hash_to_field function defined in <xref target="hashtofield" format="default"/> is indifferentiable
from a random oracle <xref target="MRH04" format="default"/> when expand_message (<xref target="hashtofield-expand" format="default"/>)
is modeled as a random oracle.
By composability of indifferentiability proofs, this also holds when
expand_message is proved indifferentiable from a random oracle relative
to an underlying primitive that is modeled as a random oracle.
When following the guidelines in <xref target="hashtofield-expand" format="default"/>, both variants
of expand_message defined in that section meet this requirement
(see also <xref target="security-considerations-expand-xmd" format="default"/>).</t>
        <t>We very briefly sketch the indifferentiability argument for hash_to_field.
Notice that each integer mod p that hash_to_field returns (i.e., each element
of the vector representation of F) is a member of an equivalence class of roughly
2^k integers of length log2(p) + k bits, all of which are equal modulo p.
For each integer mod p that hash_to_field returns, the simulator samples
one member of this equivalence class at random and outputs the byte string
returned by I2OSP.
(Notice that this is essentially the inverse of the hash_to_field procedure.)</t>
      </section>
      <section anchor="security-considerations-expand-xmd" numbered="true" toc="default">
        <name>expand_message_xmd security</name>
        <t>The expand_message_xmd function defined in <xref target="hashtofield-expand-xmd" format="default"/> is
indifferentiable from a random oracle <xref target="MRH04" format="default"/> when one of the following holds:</t>
        <ol spacing="normal" type="1">
          <li>H is indifferentiable from a random oracle,</li>
          <li>H is a sponge-based hash function whose inner function
is modeled as a random transformation or random permutation <xref target="BDPV08" format="default"/>, or</li>
          <li>H is a Merkle-Damgaard hash function whose compression function is
modeled as a random oracle <xref target="CDMP05" format="default"/>.</li>
        </ol>
        <t>For cases (1) and (2), the indifferentiability of expand_message_xmd follows
directly from the indifferentiability of H.</t>
        <t>For case (3), i.e., for H a Merkle-Damgaard hash function, indifferentiability
follows from <xref target="CDMP05" format="default"/>, Theorem 3.5.
In particular, expand_message_xmd computes b_0 by prepending one block of
0-bytes to the message and auxiliary information (length, counter, and DST).
Then, each of the output blocks b_i, i &gt;= 1 in expand_message_xmd is the
result of invoking H on a unique, prefix-free encoding of b_0.
This is true, first, because the length of the input to all such invocations
is equal and fixed by the choice of H and DST, and
second, because each such input has a unique suffix (because of the inclusion
of the counter byte I2OSP(i, 1)).</t>
        <t>The essential difference between the construction of <xref target="CDMP05" format="default"/> and
expand_message_xmd is that the latter hashes a counter appended to
strxor(b_0, b_(i - 1)) (step 10) rather than to b_0.
This approach increases the Hamming distance between inputs to different
invocations of H, which reduces the likelihood that nonidealities in H
affect the distribution of the b_i values.</t>
        <t>We note that expand_message_xmd can be used to instantiate a general-purpose
indifferentiable functionality with variable-length output based on any hash
function meeting one of the above criteria.
Applications that use expand_message_xmd outside of hash_to_field should
ensure domain separation by picking a distinct value for DST.</t>
      </section>
      <section anchor="security-considerations-domain-separation" numbered="true" toc="default">
        <name>Domain separation recommendations</name>
        <t>As discussed in <xref target="term-domain-separation" format="default"/>, the purpose of domain separation
is to ensure that security analyses of cryptographic protocols that query
multiple independent random oracles remain valid even if all of these random
oracles are instantiated based on one underlying function H.
The expand_message variants in this document (<xref target="hashtofield-expand" format="default"/>) ensure
domain separation by appending a suffix-free-encoded domain separation tag
DST_prime to all strings hashed by H, an underlying hash or extensible
output function.
(Other expand_message variants that follow the guidelines in
<xref target="hashtofield-expand-other" format="default"/> are expected to behave similarly,
but these should be analyzed on a case-by-case basis.)
For security, applications that use the same function H outside of expand_message
should enforce domain separation between those uses of H and expand_message,
and should separate all of these from uses of H in other applications.</t>
        <t>This section suggests four methods for enforcing domain separation
from expand_message variants, explains how each method achieves domain
separation, and lists the situations in which each is appropriate.
These methods share a high-level structure: the application designer fixes a tag
DST_ext distinct from DST_prime and augments calls to H with DST_ext.
Each method augments calls to H differently, and each may impose
additional requirements on DST_ext.</t>
        <t>These methods can be used to instantiate multiple domain separated functions
(e.g., H1 and H2) by selecting distinct DST_ext values for each
(e.g., DST_ext1, DST_ext2).</t>
        <ol spacing="normal" type="1">
          <li>
            <t>(Suffix-only domain separation.)
This method is useful when domain separating invocations of H
from expand_message_xmd or expand_message_xof.
It is not appropriate for domain separating expand_message from HMAC-H
<xref target="RFC2104" format="default"/>; for that purpose, see method 4.  </t>
            <t>
To instantiate a suffix-only domain separated function Hso, compute  </t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
Hso(msg) = H(msg || DST_ext)
]]></artwork>
            <t>
DST_ext should be suffix-free encoded (e.g., by appending one byte
encoding the length of DST_ext) to make it infeasible to find distinct
(msg, DST_ext) pairs that hash to the same value.  </t>
            <t>
This method ensures domain separation because all distinct invocations of
H have distinct suffixes, since DST_ext is distinct from DST_prime.</t>
          </li>
          <li>
            <t>(Prefix-suffix domain separation.)
This method can be used in the same cases as the suffix-only method.  </t>
            <t>
To instantiate a prefix-suffix domain separated function Hps, compute  </t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
Hps(msg) = H(DST_ext || msg || I2OSP(0, 1))
]]></artwork>
            <t>
DST_ext should be prefix-free encoded (e.g., by prepending one byte
encoding the length of DST_ext) to make it infeasible to find distinct
(msg, DST_ext) pairs that hash to the same value.  </t>
            <t>
This method ensures domain separation because
appending the byte I2OSP(0, 1) ensures that inputs to H inside Hps
are distinct from those inside expand_message.
Specifically, the final byte of DST_prime encodes the length of DST, which
is required to be nonzero (<xref target="domain-separation" format="default"/>, requirement 2), and
DST_prime is always appended to invocations of H inside expand_message.</t>
          </li>
          <li>
            <t>(Prefix-only domain separation.)
This method is only useful for domain separating invocations of H
from expand_message_xmd.
It does not give domain separation for expand_message_xof or HMAC-H.  </t>
            <t>
To instantiate a prefix-only domain separated function Hpo, compute  </t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
Hpo(msg) = H(DST_ext || msg)
]]></artwork>
            <t>
In order for this method to give domain separation, DST_ext should
be at least b bits long, where b is the number of bits output by the
hash function H.
In addition, at least one of the first b bits must be nonzero.
Finally, DST_ext should be prefix-free encoded (e.g., by prepending
one byte encoding the length of DST_ext) to make it infeasible to
find distinct (msg, DST_ext) pairs that hash to the same value.  </t>
            <t>
This method ensures domain separation as follows.
First, since DST_ext contains at least one nonzero bit among its first b bits,
it is guaranteed to be distinct from the value Z_pad
(<xref target="hashtofield-expand-xmd" format="default"/>, step 4), which ensures that all inputs to H
are distinct from the input used to generate b_0 in expand_message_xmd.
Second, since DST_ext is at least b bits long, it is almost certainly
distinct from the values b_0 and strxor(b_0, b_(i - 1)), and therefore
all inputs to H are distinct from the inputs used to generate b_i, i &gt;= 1,
with high probability.</t>
          </li>
          <li>
            <t>(XMD-HMAC domain separation.)
This method is useful for domain separating invocations of H inside
HMAC-H (i.e., HMAC <xref target="RFC2104" format="default"/> instantiated with hash function H) from
expand_message_xmd.
It also applies to HKDF-H <xref target="RFC5869" format="default"/>, as discussed below.  </t>
            <t>
Specifically, this method applies when HMAC-H is used with a non-secret
key to instantiate a random oracle based on a hash function H
(note that expand_message_xmd can also be used for this purpose; see
<xref target="security-considerations-expand-xmd" format="default"/>).
When using HMAC-H with a high-entropy secret key, domain separation is not
necessary; see discussion below.  </t>
            <t>
To choose a non-secret HMAC key DST_key that ensures domain separation
from expand_message_xmd, compute  </t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
DST_key_preimage = "DERIVE-HMAC-KEY-" || DST_ext || I2OSP(0, 1)
DST_key = H(DST_key_preimage)
]]></artwork>
            <t>
Then, to instantiate the random oracle Hro using HMAC-H, compute  </t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
Hro(msg) = HMAC-H(DST_key, msg)
]]></artwork>
            <t>
The trailing zero byte in DST_key_preimage ensures that this value
is distinct from inputs to H inside expand_message_xmd (because all
such inputs have suffix DST_prime, which cannot end with a zero byte
as discussed above).
This ensures domain separation because, with overwhelming probability,
all inputs to H inside of HMAC-H using key DST_key have prefixes that
are distinct from the values Z_pad, b_0, and strxor(b_0, b_(i - 1))
inside of expand_message_xmd.  </t>
            <t>
For uses of HMAC-H that instantiate a private random oracle by fixing
a high-entropy secret key, domain separation from expand_message_xmd
is not necessary.
This is because, similarly to the case above, all inputs to H inside
HMAC-H using this secret key almost certainly have distinct prefixes
from all inputs to H inside expand_message_xmd.  </t>
            <t>
Finally, this method can be used with HKDF-H <xref target="RFC5869" format="default"/> by fixing
the salt input to HKDF-Extract to DST_key, computed as above.
This ensures domain separation for HKDF-Extract by the same argument
as for HMAC-H using DST_key.
Moreover, assuming that the IKM input to HKDF-Extract has sufficiently
high entropy (say, commensurate with the security parameter), the
HKDF-Expand step is domain separated by the same argument as for
HMAC-H with a high-entropy secret key (since PRK is exactly that).</t>
          </li>
        </ol>
      </section>
      <section anchor="security-considerations-targets" numbered="true" toc="default">
        <name>Target security levels</name>
        <t>Each ciphersuite specifies a target security level (in bits) for the underlying
curve. This parameter ensures the corresponding hash_to_field instantiation is
conservative and correct. We stress that this parameter is only an upper bound on
the security level of the curve, and is neither a guarantee nor endorsement of its
suitability for a given application. Mathematical and cryptographic advancements
may reduce the effective security level for any curve.</t>
      </section>
    </section>
    <section anchor="acknowledgements" numbered="true" toc="default">
      <name>Acknowledgements</name>
      <t>The authors would like to thank Adam Langley for his detailed writeup of Elligator 2 with
Curve25519 <xref target="L13" format="default"/>;
Dan Boneh, Christopher Patton, Benjamin Lipp, and Leonid Reyzin for educational discussions;
and David Benjamin, Frank Denis, Sean Devlin, Justin Drake, Bjoern Haase, Mike Hamburg,
Dan Harkins, Thomas Icart, Andy Polyakov, Mamy Ratsimbazafy, Michael Scott,
and Mathy Vanhoef for helpful feedback.</t>
    </section>
    <section anchor="contributors" numbered="true" toc="default">
      <name>Contributors</name>
      <ul spacing="normal">
        <li>
          <t>Sharon Goldberg </t>
          <t>
Boston University </t>
          <t>
goldbe@cs.bu.edu</t>
        </li>
        <li>
          <t>Ela Lee </t>
          <t>
Royal Holloway, University of London </t>
          <t>
Ela.Lee.2010@live.rhul.ac.uk</t>
        </li>
        <li>
          <t>Michele Orru </t>
          <t>
michele.orru@ens.fr</t>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="EID4730" target="https://www.rfc-editor.org/errata/eid4730">
          <front>
            <title>RFC 7748, Errata ID 4730</title>
            <author initials="A." surname="Langley" fullname="Adam Langley">
              <organization/>
            </author>
            <date year="2016" month="July"/>
          </front>
        </reference>
        <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="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="RFC7748" target="https://www.rfc-editor.org/info/rfc7748">
          <front>
            <title>Elliptic Curves for Security</title>
            <seriesInfo name="DOI" value="10.17487/RFC7748"/>
            <seriesInfo name="RFC" value="7748"/>
            <author initials="A." surname="Langley" fullname="A. Langley">
              <organization/>
            </author>
            <author initials="M." surname="Hamburg" fullname="M. Hamburg">
              <organization/>
            </author>
            <author initials="S." surname="Turner" fullname="S. Turner">
              <organization/>
            </author>
            <date year="2016" month="January"/>
            <abstract>
              <t>This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS).  These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.irtf-cfrg-pairing-friendly-curves" target="http://www.ietf.org/internet-drafts/draft-irtf-cfrg-pairing-friendly-curves-04.txt">
          <front>
            <title>Pairing-Friendly Curves</title>
            <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-pairing-friendly-curves-04"/>
            <author initials="Y" surname="Sakemi" fullname="Yumi Sakemi">
              <organization/>
            </author>
            <author initials="T" surname="Kobayashi" fullname="Tetsutaro Kobayashi">
              <organization/>
            </author>
            <author initials="T" surname="Saito" fullname="Tsunekazu Saito">
              <organization/>
            </author>
            <date month="April" day="28" year="2020"/>
            <abstract>
              <t>Pairing-based cryptography, a variant of elliptic curve cryptography, has received attention for its flexible and applicable functionality. Pairing is a special map defined over elliptic curves and it can be applied to construct several cryptographic protocols such as identity-based encryption, attribute-based encryption, and so on.  At CRYPTO 2016, Kim and Barbulescu proposed an efficient number field sieve algorithm named exTNFS for the discrete logarithm problem in a finite field.  Several types of pairing-friendly curves such as Barreto-Naehrig curves are affected by the attack.  In particular, a Barreto-Naehrig curve with a 254-bit characteristic was adopted by a lot of cryptographic libraries as a parameter of 128-bit security, however, it ensures no more than a 100-bit security level due to the effect of the attack.  In this memo, we summarize the adoption status of pairing-friendly curves in standards, libraries and applications, and classify them in 128-bit, 192-bit, and 256-bit security levels. Then, from the viewpoints of "security" and "widely use", we select the recommended pairing-friendly curves considering exTNFS.</t>
            </abstract>
          </front>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="BLS12-381" target="https://electriccoin.co/blog/new-snark-curve/">
          <front>
            <title>BLS12-381: New zk-SNARK Elliptic Curve Construction</title>
            <author initials="S." surname="Bowe" fullname="Sean Bowe">
              <organization>Electric Coin Company</organization>
            </author>
            <date year="2017" month="March"/>
          </front>
        </reference>
        <reference anchor="SEC1" target="http://www.secg.org/sec1-v2.pdf">
          <front>
            <title>SEC 1: Elliptic Curve Cryptography</title>
            <author>
              <organization>Standards for Efficient Cryptography Group (SECG)</organization>
            </author>
            <date year="2009" month="May"/>
          </front>
        </reference>
        <reference anchor="SEC2" target="http://www.secg.org/sec2-v2.pdf">
          <front>
            <title>SEC 2: Recommended Elliptic Curve Domain Parameters</title>
            <author>
              <organization>Standards for Efficient Cryptography Group (SECG)</organization>
            </author>
            <date year="2010" month="January"/>
          </front>
        </reference>
        <reference anchor="FIPS180-4" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf">
          <front>
            <title>Secure Hash Standard (SHS)</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2015" month="August"/>
          </front>
        </reference>
        <reference anchor="FIPS186-4" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf">
          <front>
            <title>FIPS Publication 186-4: Digital Signature Standard</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2013" month="July"/>
          </front>
        </reference>
        <reference anchor="FIPS202" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf">
          <front>
            <title>SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2015" month="August"/>
          </front>
        </reference>
        <reference anchor="BDPV08" target="https://doi.org/10.1007/978-3-540-78967-3_11">
          <front>
            <title>On the Indifferentiability of the Sponge Construction</title>
            <seriesInfo name="DOI" value="10.1007/978-3-540-78967-3_11"/>
            <seriesInfo name="pages" value="181-197"/>
            <seriesInfo name="In" value="Advances in Cryptology - EUROCRYPT 2008"/>
            <author initials="G." surname="Bertoni," fullname="Guido Bertoni">
              <organization>STMicroelectronics</organization>
            </author>
            <author initials="J." surname="Daemen" fullname="Joan Daemen">
              <organization>STMicroelectronics</organization>
            </author>
            <author initials="M." surname="Peeters" fullname="Michael Peeters">
              <organization>NXP Semiconductors</organization>
            </author>
            <author initials="G." surname="Van Assche" fullname="Gilles Van Assche">
              <organization>STMicroelectronics</organization>
            </author>
            <date year="2008"/>
          </front>
        </reference>
        <reference anchor="CDMP05" target="https://doi.org/10.1007/11535218_26">
          <front>
            <title>Merkle-Damgaard Revisited: How to Construct a Hash Function</title>
            <seriesInfo name="DOI" value="10.1007/11535218_26"/>
            <seriesInfo name="pages" value="430-448"/>
            <seriesInfo name="In" value="Advances in Cryptology - CRYPTO 2005"/>
            <author initials="J-S." surname="Coron" fullname="Jean-Sebastien Coron">
              <organization>University of Luxembourg</organization>
            </author>
            <author initials="Y." surname="Dodis" fullname="Yevgeniy Dodis">
              <organization>New York University</organization>
            </author>
            <author initials="C." surname="Malinaud" fullname="Cecile Malinaud">
              <organization>University of Luxembourg</organization>
            </author>
            <author initials="P." surname="Puniya" fullname="Prashant Puniya">
              <organization>New York University</organization>
            </author>
            <date year="2005"/>
          </front>
        </reference>
        <reference anchor="BLAKE2X" target="https://blake2.net/blake2x.pdf">
          <front>
            <title>BLAKE2X</title>
            <author initials="J-P." surname="Aumasson" fullname="Jean-Philippe Aumasson">
              <organization/>
            </author>
            <author initials="S." surname="Neves" fullname="Samuel Neves">
              <organization/>
            </author>
            <author initials="Z." surname="Wilcox-O'Hearn" fullname="Zooko Wilcox-O'Hearn">
              <organization/>
            </author>
            <author initials="C." surname="Winnerlein" fullname="Christian Winnerlein">
              <organization/>
            </author>
            <date year="2016" month="December"/>
          </front>
        </reference>
        <reference anchor="Icart09" target="https://doi.org/10.1007/978-3-642-03356-8_18">
          <front>
            <title>How to Hash into Elliptic Curves</title>
            <seriesInfo name="DOI" value="10.1007/978-3-642-03356-8_18"/>
            <seriesInfo name="pages" value="303-316"/>
            <seriesInfo name="In" value="Advances in Cryptology - CRYPTO 2009"/>
            <author initials="T." surname="Icart" fullname="Thomas Icart">
              <organization>Sagem Securite and Universite du Luxembourg</organization>
            </author>
            <date year="2009"/>
          </front>
        </reference>
        <reference anchor="BBJLP08" target="https://doi.org/10.1007/978-3-540-68164-9_26">
          <front>
            <title>Twisted Edwards curves</title>
            <seriesInfo name="DOI" value="10.1007/978-3-540-68164-9_26"/>
            <seriesInfo name="pages" value="389-405"/>
            <seriesInfo name="In" value="AFRICACRYPT 2008"/>
            <author initials="D.J." surname="Bernstein" fullname="Daniel J. Bernstein">
              <organization>Department of Computer Science, University of Illinois at Chicago, USA</organization>
            </author>
            <author initials="P." surname="Birkner" fullname="Peter Birkner">
              <organization>Department of Mathematics and Computer Science, Technische Universiteit Eindhoven, The Netherlands</organization>
            </author>
            <author initials="M." surname="Joye" fullname="Marc Joye">
              <organization>Thomson R&amp;D France</organization>
            </author>
            <author initials="T." surname="Lange" fullname="Tanja Lange">
              <organization>Department of Mathematics and Computer Science, Technische Universiteit Eindhoven, The Netherlands</organization>
            </author>
            <author initials="C." surname="Peters" fullname="Christiane Peters">
              <organization>Department of Mathematics and Computer Science, Technische Universiteit Eindhoven, The Netherlands</organization>
            </author>
            <date year="2008"/>
          </front>
        </reference>
        <reference anchor="CK11" target="https://doi.org/10.1016/j.jsc.2011.11.003">
          <front>
            <title>The geometry of flex tangents to a cubic curve and its parameterizations</title>
            <seriesInfo name="DOI" value="10.1016/j.jsc.2011.11.003"/>
            <seriesInfo name="pages" value="266-281"/>
            <seriesInfo name="In" value="Journal of Symbolic Computation, vol 47 issue 3"/>
            <author initials="J." surname="Couveignes" fullname="Jean-Marc Couveignes">
              <organization>Universite Bordeaux</organization>
            </author>
            <author initials="J." surname="Kammerer" fullname="Jean-Gabriel Kammerer">
              <organization>Universite de Rennes</organization>
            </author>
            <date year="2012"/>
          </front>
        </reference>
        <reference anchor="VR20" target="https://eprint.iacr.org/2019/383">
          <front>
            <title>Dragonblood: Analyzing the Dragonfly Handshake of WPA3 and EAP-pwd</title>
            <seriesInfo name="In" value="IEEE Symposium on Security &amp; Privacy (SP)"/>
            <author initials="M." surname="Vanhoef" fullname="Mathy Vanhoef">
              <organization>New York University Abu Dhabi</organization>
            </author>
            <author initials="E." surname="Ronen" fullname="Eyal Ronen">
              <organization>Tel Aviv University and KU Leuven</organization>
            </author>
            <date year="2020"/>
          </front>
        </reference>
        <reference anchor="F11" target="https://doi.org/10.1007/978-3-642-21969-6_17">
          <front>
            <title>Hashing into Hessian curves</title>
            <seriesInfo name="DOI" value="10.1007/978-3-642-21969-6_17"/>
            <seriesInfo name="pages" value="278-289"/>
            <seriesInfo name="In" value="AFRICACRYPT 2011"/>
            <author initials="R.R." surname="Farashahi" fullname="Reza R. Farashahi">
              <organization>Macquarie Universit</organization>
            </author>
            <date year="2011"/>
          </front>
        </reference>
        <reference anchor="FSV09" target="https://doi.org/10.1515/JMC.2009.022">
          <front>
            <title>On hashing into elliptic curves</title>
            <seriesInfo name="DOI" value="10.1515/JMC.2009.022"/>
            <seriesInfo name="pages" value="353-360"/>
            <seriesInfo name="In" value="Journal of Mathematical Cryptology, vol 3 no 4"/>
            <author initials="R.R." surname="Farashahi" fullname="Reza R. Farashahi">
              <organization>Macquarie Universit</organization>
            </author>
            <author initials="I.E." surname="Shparlinski" fullname="Igor E. Shparlinski">
              <organization>Macquarie Universit</organization>
            </author>
            <author initials="J.F." surname="Voloch" fullname="J. Felipe Voloch">
              <organization>University of Texas</organization>
            </author>
            <date year="2009"/>
          </front>
        </reference>
        <reference anchor="FT10" target="https://doi.org/10.1007/978-3-642-14712-8_5">
          <front>
            <title>Estimating the size of the image of deterministic hash functions to elliptic curves.</title>
            <seriesInfo name="DOI" value="10.1007/978-3-642-14712-8_5"/>
            <seriesInfo name="pages" value="81-91"/>
            <seriesInfo name="In" value="Progress in Cryptology - LATINCRYPT 2010"/>
            <author initials="P-A." surname="Fouque" fullname="Pierre-Alain Fouque">
              <organization>Ecole Normale Superieure and INRIA Rennes</organization>
            </author>
            <author initials="M." surname="Tibouchi" fullname="Mehdi Tibouchi">
              <organization>NTT Secure Platform Laboratories</organization>
            </author>
            <date year="2010"/>
          </front>
        </reference>
        <reference anchor="FT12" target="https://doi.org/10.1007/978-3-642-33481-8_1">
          <front>
            <title>Indifferentiable Hashing to Barreto-Naehrig Curves</title>
            <seriesInfo name="DOI" value="10.1007/978-3-642-33481-8_1"/>
            <seriesInfo name="pages" value="1-7"/>
            <seriesInfo name="In" value="Progress in Cryptology - LATINCRYPT 2012"/>
            <author initials="P-A." surname="Fouque" fullname="Pierre-Alain Fouque">
              <organization>Ecole Normale Superieure and INRIA Rennes</organization>
            </author>
            <author initials="M." surname="Tibouchi" fullname="Mehdi Tibouchi">
              <organization>NTT Secure Platform Laboratories</organization>
            </author>
            <date year="2012"/>
          </front>
        </reference>
        <reference anchor="FJT13" target="https://doi.org/10.1007/978-3-642-39059-3_14">
          <front>
            <title>Injective encodings to elliptic curves</title>
            <seriesInfo name="DOI" value="10.1007/978-3-642-39059-3_14"/>
            <seriesInfo name="pages" value="203-218"/>
            <seriesInfo name="In" value="ACISP 2013"/>
            <author initials="P-A." surname="Fouque" fullname="Pierre-Alain Fouque">
              <organization>Ecole Normale Superieure and INRIA Rennes</organization>
            </author>
            <author initials="A." surname="Joux" fullname="Antoine Joux">
              <organization>Sorbonne Universite</organization>
            </author>
            <author initials="M." surname="Tibouchi" fullname="Mehdi Tibouchi">
              <organization>NTT Secure Platform Laboratories</organization>
            </author>
            <date year="2013"/>
          </front>
        </reference>
        <reference anchor="KLR10" target="https://doi.org/10.1007/978-3-642-17455-1_18">
          <front>
            <title>Encoding points on hyperelliptic curves over finite fields in deterministic polynomial time</title>
            <seriesInfo name="DOI" value="10.1007/978-3-642-17455-1_18"/>
            <seriesInfo name="pages" value="278-297"/>
            <seriesInfo name="In" value="PAIRING 2010"/>
            <author initials="J." surname="Kammerer" fullname="Jean-Gabriel Kammerer">
              <organization>Universite de Rennes</organization>
            </author>
            <author initials="R." surname="Lercier" fullname="Reynald Lercier">
              <organization>Universite de Rennes</organization>
            </author>
            <author initials="G." surname="Renault" fullname="Guenael Renault">
              <organization>Universite Pierre et Marie Curie</organization>
            </author>
            <date year="2010"/>
          </front>
        </reference>
        <reference anchor="AR13" target="https://doi.org/10.1109/TC.2013.145">
          <front>
            <title>Square Root Computation over Even Extension Fields</title>
            <seriesInfo name="DOI" value="10.1109/TC.2013.145"/>
            <seriesInfo name="pages" value="2829-2841"/>
            <seriesInfo name="In" value="IEEE Transactions on Computers. vol 63 issue 11"/>
            <author initials="G." surname="Adj" fullname="Gora Adj">
              <organization>ISFA, Universite Claude Bernard Lyon 1, Villeurbanne, France</organization>
            </author>
            <author initials="F." surname="Rodriguez-Henriquez" fullname="Francisco Rodriguez-Henriquez">
              <organization>CINVESTAV-IPN, San Pedro Zacatenco, Mexico City, Mexico.</organization>
            </author>
            <date year="2014" month="November"/>
          </front>
        </reference>
        <reference anchor="BN05" target="https://doi.org/10.1007/11693383_22">
          <front>
            <title>Pairing-Friendly Elliptic Curves of Prime Order</title>
            <seriesInfo name="DOI" value="10.1007/11693383_22"/>
            <seriesInfo name="pages" value="319-331"/>
            <seriesInfo name="In" value="Selected Areas in Cryptography 2005"/>
            <author initials="P." surname="Barreto" fullname="Paulo S. L. M. Barreto">
              <organization>Escola Politecnica, Universidade de Sao Paulo, Sao Paulo, Brazil</organization>
            </author>
            <author initials="M." surname="Naehrig" fullname="Michael Naehrig">
              <organization>Lehrstuhl fur Theoretische Informationstechnik, Rheinisch-Westfalische Technische Hochschule Aachen, Aachen, Germany</organization>
            </author>
            <date year="2006"/>
          </front>
        </reference>
        <reference anchor="AFQTZ14" target="https://doi.org/10.1007/978-3-319-13051-4_2">
          <front>
            <title>Binary Elligator squared</title>
            <seriesInfo name="DOI" value="10.1007/978-3-319-13051-4_2"/>
            <seriesInfo name="pages" value="20-37"/>
            <seriesInfo name="In" value="Selected Areas in Cryptography - SAC 2014"/>
            <author initials="D.F." surname="Aranha" fullname="Diego F. Aranha">
              <organization>Institute of Computing, University of Campinas</organization>
            </author>
            <author initials="P.A." surname="Fouque" fullname="Pierre-Alain Fouque">
              <organization>Universite de Rennes 1 and Institut Universitaire de France</organization>
            </author>
            <author initials="C." surname="Qian" fullname="Chen Qian">
              <organization>ENS Rennes</organization>
            </author>
            <author initials="M." surname="Tibouchi" fullname="Mehdi Tibouchi">
              <organization>NTT Secure Platform Laboratories</organization>
            </author>
            <author initials="J.C." surname="Zapalowicz" fullname="Jean-Christophe Zapalowicz">
              <organization>INRIA</organization>
            </author>
            <date year="2014"/>
          </front>
        </reference>
        <reference anchor="T14" target="https://doi.org/10.1007/978-3-662-45472-5_10">
          <front>
            <title>Elligator squared: Uniform points on elliptic curves of prime order as uniform random strings</title>
            <seriesInfo name="DOI" value="10.1007/978-3-662-45472-5_10"/>
            <seriesInfo name="pages" value="139-156"/>
            <seriesInfo name="In" value="Financial Cryptography and Data Security - FC 2014"/>
            <author initials="M." surname="Tibouchi" fullname="Mehdi Tibouchi">
              <organization>NTT Secure Platform Laboratories</organization>
            </author>
            <date year="2014"/>
          </front>
        </reference>
        <reference anchor="TK17" target="https://doi.org/10.1007/s10623-016-0288-2">
          <front>
            <title>Improved elliptic curve hashing and point representation</title>
            <seriesInfo name="DOI" value="10.1007/s10623-016-0288-2"/>
            <seriesInfo name="pages" value="161-177"/>
            <seriesInfo name="In" value="Designs, Codes, and Cryptography, vol 82"/>
            <author initials="M." surname="Tibouchi" fullname="Mehdi Tibouchi">
              <organization>NTT Secure Platform Laboratories</organization>
            </author>
            <author initials="T." surname="Kim" fullname="Taechan Kim">
              <organization>NTT Secure Platform Laboratories</organization>
            </author>
            <date year="2017"/>
          </front>
        </reference>
        <reference anchor="BF01" target="https://doi.org/10.1007/3-540-44647-8_13">
          <front>
            <title>Identity-based encryption from the Weil pairing</title>
            <seriesInfo name="DOI" value="10.1007/3-540-44647-8_13"/>
            <seriesInfo name="pages" value="213-229"/>
            <seriesInfo name="In" value="Advances in Cryptology - CRYPTO 2001"/>
            <author initials="D." surname="Boneh" fullname="Dan Boneh">
              <organization>Stanford University</organization>
            </author>
            <author initials="M." surname="Franklin" fullname="Matthew Franklin">
              <organization>UC Davis</organization>
            </author>
            <date year="2001" month="August"/>
          </front>
        </reference>
        <reference anchor="BLS01" target="https://doi.org/10.1007/s00145-004-0314-9">
          <front>
            <title>Short signatures from the Weil pairing</title>
            <seriesInfo name="DOI" value="10.1007/s00145-004-0314-9"/>
            <seriesInfo name="pages" value="297-319"/>
            <seriesInfo name="In" value="Journal of Cryptology, vol 17"/>
            <author initials="D." surname="Boneh" fullname="Dan Boneh">
              <organization>Stanford University</organization>
            </author>
            <author initials="B." surname="Lynn" fullname="Ben Lynn">
              <organization>Stanford University</organization>
            </author>
            <author initials="H." surname="Shacham" fullname="Hovav Shacham">
              <organization>Stanford University</organization>
            </author>
            <date year="2004" month="July"/>
          </front>
        </reference>
        <reference anchor="BLS03" target="https://doi.org/10.1007/3-540-36413-7_19">
          <front>
            <title>Constructing Elliptic Curves with Prescribed Embedding Degrees</title>
            <seriesInfo name="DOI" value="10.1007/3-540-36413-7_19"/>
            <seriesInfo name="pages" value="257-267"/>
            <seriesInfo name="In" value="Security in Communication Networks"/>
            <author initials="P." surname="Barreto" fullname="Paulo S. L. M. Barreto">
              <organization>Universidade de Sao Paulo, Brazil</organization>
            </author>
            <author initials="B." surname="Lynn" fullname="Ben Lynn">
              <organization>Stanford University</organization>
            </author>
            <author initials="M." surname="Scott" fullname="Michael Scott">
              <organization>Dublin City University, Ireland</organization>
            </author>
            <date year="2003"/>
          </front>
        </reference>
        <reference anchor="BM92" target="https://doi.org/10.1109/RISP.1992.213269">
          <front>
            <title>Encrypted key exchange: Password-based protocols secure against dictionary attacks</title>
            <seriesInfo name="DOI" value="10.1109/RISP.1992.213269"/>
            <seriesInfo name="pages" value="72-84"/>
            <seriesInfo name="In" value="IEEE Symposium on Security and Privacy - Oakland 1992"/>
            <author initials="S.M." surname="Bellovin" fullname="Steven M. Bellovin">
              <organization>AT&amp;T Bell Laboratories</organization>
            </author>
            <author initials="M." surname="Merritt" fullname="Michael Merritt">
              <organization>AT&amp;T Bell Laboratories</organization>
            </author>
            <date year="1992"/>
          </front>
        </reference>
        <reference anchor="BMP00" target="https://doi.org/10.1007/3-540-45539-6_12">
          <front>
            <title>Provably secure password-authenticated key exchange using Diffie-Hellman</title>
            <seriesInfo name="DOI" value="10.1007/3-540-45539-6_12"/>
            <seriesInfo name="pages" value="156-171"/>
            <seriesInfo name="In" value="Advances in Cryptology - EUROCRYPT 2000"/>
            <author initials="V." surname="Boyko" fullname="Victor Boyko">
              <organization>MIT Laboratory for Computer Science</organization>
            </author>
            <author initials="P.D." surname="MacKenzie" fullname="Philip D. MacKenzie">
              <organization>Bell Laboratories, Lucent Technologies</organization>
            </author>
            <author initials="S." surname="Patel" fullname="Sarvar Patel">
              <organization>Bell Laboratories, Lucent Technologies</organization>
            </author>
            <date year="2000" month="May"/>
          </front>
        </reference>
        <reference anchor="J96" target="https://doi.org/10.1145/242896.242897">
          <front>
            <title>Strong password-only authenticated key exchange</title>
            <seriesInfo name="DOI" value="10.1145/242896.242897"/>
            <seriesInfo name="pages" value="5-26"/>
            <seriesInfo name="In" value="SIGCOMM Computer Communication Review, vol 26 issue 5"/>
            <author initials="D.P." surname="Jablon" fullname="David P. Jablon">
              <organization>Integrity Sciences, Inc. Westboro, MA.</organization>
            </author>
            <date year="1996"/>
          </front>
        </reference>
        <reference anchor="hash2curve-repo" target="https://github.com/cfrg/draft-irtf-cfrg-hash-to-curve">
          <front>
            <title>Hashing to Elliptic Curves - GitHub repository</title>
            <author>
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="jubjub-fq" target="https://github.com/zkcrypto/jubjub/blob/master/src/fq.rs">
          <front>
            <title>zkcrypto/jubjub - fq.rs</title>
            <author>
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="L13" target="https://www.imperialviolet.org/2013/12/25/elligator.html">
          <front>
            <title>Implementing Elligator for Curve25519</title>
            <author initials="A." surname="Langley" fullname="Adam Langley">
              <organization/>
            </author>
            <date year="2013"/>
          </front>
        </reference>
        <reference anchor="SBCDK09" target="https://doi.org/10.1007/978-3-642-03298-1_8">
          <front>
            <title>Fast Hashing to G2 on Pairing-Friendly Curves</title>
            <seriesInfo name="DOI" value="10.1007/978-3-642-03298-1_8"/>
            <seriesInfo name="pages" value="102-113"/>
            <seriesInfo name="In" value="Pairing-Based Cryptography - Pairing 2009"/>
            <author initials="M." surname="Scott" fullname="Michael Scott">
              <organization>School of Computing Dublin City University, Ballymun. Dublin, Ireland.</organization>
            </author>
            <author initials="N." surname="Benger" fullname="Naomi Benger">
              <organization>School of Computing Dublin City University, Ballymun. Dublin, Ireland.</organization>
            </author>
            <author initials="M." surname="Charlemagne" fullname="Manuel Charlemagne">
              <organization>School of Computing Dublin City University, Ballymun. Dublin, Ireland.</organization>
            </author>
            <author initials="L.J." surname="Dominguez Perez" fullname="Luis J. Dominguez Perez">
              <organization>School of Computing Dublin City University, Ballymun. Dublin, Ireland.</organization>
            </author>
            <author initials="E.J." surname="Kachisa" fullname="Ezekiel J. Kachisa">
              <organization>School of Computing Dublin City University, Ballymun. Dublin, Ireland.</organization>
            </author>
            <date year="2009"/>
          </front>
        </reference>
        <reference anchor="FKR11" target="https://doi.org/10.1007/978-3-642-28496-0_25">
          <front>
            <title>Fast Hashing to G2 on Pairing-Friendly Curves</title>
            <seriesInfo name="DOI" value="10.1007/978-3-642-28496-0_25"/>
            <seriesInfo name="pages" value="412-430"/>
            <seriesInfo name="In" value="Selected Areas in Cryptography"/>
            <author initials="L." surname="Fuentes-Castaneda" fullname="Laura Fuentes-Castaneda">
              <organization>Computer Science Department, CINVESTAV-IPN. Mexico</organization>
            </author>
            <author initials="E." surname="Knapp" fullname="Edward Knapp">
              <organization>Dept. Combinatorics &amp; Optimization, University of Waterloo, Canada</organization>
            </author>
            <author initials="F." surname="Rodriguez-Henriquez" fullname="Francisco Rodriguez-Henriquez">
              <organization>Computer Science Department, CINVESTAV-IPN. Mexico</organization>
            </author>
            <date year="2011"/>
          </front>
        </reference>
        <reference anchor="BP17" target="https://eprint.iacr.org/2017/419">
          <front>
            <title>Efficient hash maps to G2 on BLS curves</title>
            <seriesInfo name="ePrint" value="2017/419"/>
            <author initials="A." surname="Budroni" fullname="Alessandro Budroni">
              <organization>University of Bergen, Norway and MIRACL Labs, London, England</organization>
            </author>
            <author initials="F." surname="Pintore" fullname="Federico Pintore">
              <organization>University of Trento, Italy</organization>
            </author>
            <date year="2017" month="May"/>
          </front>
        </reference>
        <reference anchor="BHKL13" target="https://doi.org/10.1145/2508859.2516734">
          <front>
            <title>Elligator: elliptic-curve points indistinguishable from uniform random strings</title>
            <seriesInfo name="DOI" value="10.1145/2508859.2516734"/>
            <seriesInfo name="pages" value="967-980"/>
            <seriesInfo name="In" value="Proceedings of the 2013 ACM SIGSAC conference on computer and communications security."/>
            <author initials="D.J." surname="Bernstein" fullname="Daniel J. Bernstein">
              <organization>Department of Computer Science, University of Illinois at Chicago, USA</organization>
            </author>
            <author initials="M." surname="Hamburg" fullname="Mike Hamburg">
              <organization>Cryptography Research, a division of Rambus, USA</organization>
            </author>
            <author initials="A." surname="Krasnova" fullname="Anna Krasnova">
              <organization>Privacy &amp; Identity lab, Institute for Computing and Information Sciences, Radboud University Nijmegen, The Netherlands</organization>
            </author>
            <author initials="T." surname="Lange" fullname="Tanja Lange">
              <organization>Department of Mathematics and Computer Science, Technische Universiteit Eindhoven, The Netherlands</organization>
            </author>
            <date year="2013" month="November"/>
          </front>
        </reference>
        <reference anchor="BLMP19" target="https://doi.org/10.1007/978-3-030-17656-3">
          <front>
            <title>Quantum circuits for the CSIDH: optimizing quantum evaluation of isogenies</title>
            <seriesInfo name="DOI" value="10.1007/978-3-030-17656-3"/>
            <seriesInfo name="In" value="Advances in Cryptology - EUROCRYPT 2019"/>
            <author initials="D.J." surname="Bernstein" fullname="Daniel J. Bernstein">
              <organization>Department of Computer Science, University of Illinois at Chicago, USA</organization>
            </author>
            <author initials="T." surname="Lange" fullname="Tanja Lange">
              <organization>Department of Mathematics and Computer Science, Technische Universiteit Eindhoven, The Netherlands</organization>
            </author>
            <author initials="C." surname="Martindale" fullname="Chloe Martindale">
              <organization>Department of Mathematics and Computer Science, Technische Universiteit Eindhoven, The Netherlands</organization>
            </author>
            <author initials="L." surname="Panny" fullname="Lorenz Panny">
              <organization>Department of Mathematics and Computer Science, Technische Universiteit Eindhoven, The Netherlands</organization>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="SS04" target="https://doi.org/10.4064/ba52-3-1">
          <front>
            <title>On equations y^2 = x^n + k in a finite field.</title>
            <seriesInfo name="DOI" value="10.4064/ba52-3-1"/>
            <seriesInfo name="pages" value="223-226"/>
            <seriesInfo name="In" value="Bulletin Polish Acad. Sci. Math. vol 52, no 3"/>
            <author initials="A." surname="Schinzel" fullname="Andrzej Schinzel">
              <organization>Department of Mathemetics, University of Warsaw</organization>
            </author>
            <author initials="M." surname="Skalba" fullname="Mariusz Skalba">
              <organization>Department of Mathematics, University of Warsaw</organization>
            </author>
            <date year="2004"/>
          </front>
        </reference>
        <reference anchor="S05" target="https://doi.org/10.4064/aa117-3-7">
          <front>
            <title>Points on elliptic curves over finite fields</title>
            <seriesInfo name="DOI" value="10.4064/aa117-3-7"/>
            <seriesInfo name="pages" value="293-301"/>
            <seriesInfo name="In" value="Acta Arithmetica, vol 117 no 3"/>
            <author initials="M." surname="Skalba" fullname="Mariusz Skalba">
              <organization>Department of Mathematics, University of Warsaw</organization>
            </author>
            <date year="2005"/>
          </front>
        </reference>
        <reference anchor="SW06" target="https://doi.org/10.1007/11792086_36">
          <front>
            <title>Construction of rational points on elliptic curves over finite fields</title>
            <seriesInfo name="DOI" value="10.1007/11792086_36"/>
            <seriesInfo name="pages" value="510-524"/>
            <seriesInfo name="In" value="Algorithmic Number Theory. ANTS 2006."/>
            <author initials="A." surname="Shallue" fullname="Andrew Shallue">
              <organization>Mathematics Department, University of Wisconsin-Madison. Madison, USA.</organization>
            </author>
            <author initials="C." surname="van de Woestijne" fullname="Christiaan van de Woestijne">
              <organization>Mathematisch Instituut, Universiteit Leiden. Leiden, The Netherlands.</organization>
            </author>
            <date year="2006"/>
          </front>
        </reference>
        <reference anchor="U07" target="https://doi.org/10.4064/ba55-2-1">
          <front>
            <title>Rational points on certain hyperelliptic curves over finite fields</title>
            <seriesInfo name="DOI" value="10.4064/ba55-2-1"/>
            <seriesInfo name="pages" value="97-104"/>
            <seriesInfo name="In" value="Bulletin Polish Acad. Sci. Math. vol 55, no 2"/>
            <author initials="M." surname="Ulas" fullname="Maciej Ulas">
              <organization>Institute of Mathematics, Jagiellonian University. Poland</organization>
            </author>
            <date year="2007"/>
          </front>
        </reference>
        <reference anchor="BCIMRT10" target="https://doi.org/10.1007/978-3-642-14623-7_13">
          <front>
            <title>Efficient Indifferentiable Hashing into Ordinary Elliptic Curves</title>
            <seriesInfo name="DOI" value="10.1007/978-3-642-14623-7_13"/>
            <seriesInfo name="pages" value="237-254"/>
            <seriesInfo name="In" value="Advances in Cryptology - CRYPTO 2010"/>
            <author initials="E." surname="Brier" fullname="Eric Brier">
              <organization>Ingenico</organization>
            </author>
            <author initials="J-S." surname="Coron" fullname="Jean-Sebastien Coron">
              <organization>Universite du Luxembourg</organization>
            </author>
            <author initials="T." surname="Icart" fullname="Thomas Icart">
              <organization>Universite du Luxembourg</organization>
            </author>
            <author initials="D." surname="Madore" fullname="David Madore">
              <organization>TELECOM-ParisTech</organization>
            </author>
            <author initials="H." surname="Randriam" fullname="Hugues Randriam">
              <organization>TELECOM-ParisTech</organization>
            </author>
            <author initials="M." surname="Tibouchi" fullname="Mehdi Tibouchi">
              <organization>Universite du Luxembourg, Ecole normale superieure</organization>
            </author>
            <date year="2010"/>
          </front>
        </reference>
        <reference anchor="W08" target="https://www.crcpress.com/9781420071467">
          <front>
            <title>Elliptic curves: Number theory and cryptography</title>
            <seriesInfo name="ISBN" value="9781420071467"/>
            <seriesInfo name="publisher" value="Chapman and Hall / CRC"/>
            <seriesInfo name="edition" value="2nd"/>
            <author initials="L.C." surname="Washington" fullname="Lawrence C. Washington">
              <organization/>
            </author>
            <date year="2008"/>
          </front>
        </reference>
        <reference anchor="C93" target="https://doi.org/10.1007/978-3-662-02945-9">
          <front>
            <title>A Course in Computational Algebraic Number Theory</title>
            <seriesInfo name="ISBN" value="9783642081422"/>
            <seriesInfo name="publisher" value="Springer-Verlag"/>
            <author initials="H." surname="Cohen" fullname="Henri Cohen">
              <organization/>
            </author>
            <date year="1993"/>
          </front>
        </reference>
        <reference anchor="CFADLNV05" target="https://www.crcpress.com/9781584885184">
          <front>
            <title>Handbook of Elliptic and Hyperelliptic Curve Cryptography</title>
            <seriesInfo name="ISBN" value="9781584885184"/>
            <seriesInfo name="publisher" value="Chapman and Hall / CRC"/>
            <author initials="H." surname="Cohen" fullname="Henri Cohen">
              <organization/>
            </author>
            <author initials="G." surname="Frey" fullname="Gerhard Frey">
              <organization/>
            </author>
            <author initials="R." surname="Avanzi" fullname="Roberto Avanzi">
              <organization/>
            </author>
            <author initials="C." surname="Doche" fullname="Christophe Doche">
              <organization/>
            </author>
            <author initials="T." surname="Lange" fullname="Tanja Lange">
              <organization/>
            </author>
            <author initials="K." surname="Nguyen" fullname="Kim Nguyen">
              <organization/>
            </author>
            <author initials="F." surname="Vercauteren" fullname="Frederik Vercauteren">
              <organization/>
            </author>
            <date year="2005"/>
          </front>
        </reference>
        <reference anchor="MOV96" target="http://cacr.uwaterloo.ca/hac/">
          <front>
            <title>Handbook of Applied Cryptography</title>
            <seriesInfo name="ISBN" value="9780849385230"/>
            <seriesInfo name="publisher" value="CRC Press"/>
            <author initials="A.J." surname="Menezes" fullname="Alfred J. Menezes">
              <organization/>
            </author>
            <author initials="P.C." surname="van Oorschot" fullname="Paul C. van Oorschot">
              <organization/>
            </author>
            <author initials="S.A." surname="Vanstone" fullname="Scott A. Vanstone">
              <organization/>
            </author>
            <date year="1996"/>
          </front>
        </reference>
        <reference anchor="WB19" target="https://eprint.iacr.org/2019/403">
          <front>
            <title>Fast and simple constant-time hashing to the BLS12-381 elliptic curve</title>
            <seriesInfo name="ePrint" value="2019/403"/>
            <seriesInfo name="DOI" value="10.13154/tches.v2019.i4.154-179"/>
            <seriesInfo name="issue" value="4"/>
            <seriesInfo name="volume" value="2019"/>
            <seriesInfo name="In" value="IACR Trans. CHES"/>
            <author initials="R.S." surname="Wahby" fullname="Riad S. Wahby">
              <organization>Stanford University</organization>
            </author>
            <author initials="D." surname="Boneh" fullname="Dan Boneh">
              <organization>Stanford University</organization>
            </author>
            <date year="2019" month="August"/>
          </front>
        </reference>
        <reference anchor="FFSTV13" target="https://doi.org/10.1090/S0025-5718-2012-02606-8">
          <front>
            <title>Indifferentiable deterministic hashing to elliptic and hyperelliptic curves</title>
            <seriesInfo name="DOI" value="10.1090/S0025-5718-2012-02606-8"/>
            <seriesInfo name="pages" value="491-512"/>
            <seriesInfo name="In" value="Math. Comp. vol 82"/>
            <author initials="R.R." surname="Farashahi" fullname="Reza R. Farashahi">
              <organization>Macquarie Universit</organization>
            </author>
            <author initials="P.A." surname="Fouque" fullname="Pierre-Alain Fouque">
              <organization>Ecole normale superieure</organization>
            </author>
            <author initials="I.E." surname="Shparlinski" fullname="Igor E. Shparlinski">
              <organization>Macquarie Universit</organization>
            </author>
            <author initials="M." surname="Tibouchi" fullname="Mehdi Tibouchi">
              <organization>Ecole normale superieure</organization>
            </author>
            <author initials="J.F." surname="Voloch" fullname="J. Felipe Voloch">
              <organization>University of Texas</organization>
            </author>
            <date year="2013"/>
          </front>
        </reference>
        <reference anchor="MRH04" target="https://doi.org/10.1007/978-3-540-24638-1_2">
          <front>
            <title>Indifferentiability, impossibility results on reductions, and applications to the random oracle methodology</title>
            <seriesInfo name="DOI" value="10.1007/978-3-540-24638-1_2"/>
            <seriesInfo name="pages" value="21-39"/>
            <seriesInfo name="In" value="TCC 2004: Theory of Cryptography"/>
            <author initials="U." surname="Maurer" fullname="Ueli Maurer">
              <organization>ETH Zurich</organization>
            </author>
            <author initials="R." surname="Renner" fullname="Renato Renner">
              <organization>ETH Zurich</organization>
            </author>
            <author initials="C." surname="Holenstein" fullname="Clemens Holenstein">
              <organization>ETH Zurich</organization>
            </author>
            <date year="2004" month="February"/>
          </front>
        </reference>
        <reference anchor="MRV99" target="https://doi.org/10.1109/SFFCS.1999.814584">
          <front>
            <title>Verifiable Random Functions</title>
            <seriesInfo name="DOI" value="10.1109/SFFCS.1999.814584"/>
            <seriesInfo name="In" value="Symposium on the Foundations of Computer Science"/>
            <author initials="S." surname="Micali" fullname="Silvio Micali">
              <organization>MIT Laboratory for Computer Science</organization>
            </author>
            <author initials="M." surname="Rabin" fullname="Michael Rabin">
              <organization>Harvard University Department of Applied Science</organization>
            </author>
            <author initials="S." surname="Vadhan" fullname="Salil Vadhan">
              <organization>MIT Laboratory for Computer Science</organization>
            </author>
            <date year="1999" month="October"/>
          </front>
        </reference>
        <reference anchor="NR97" target="https://doi.org/10.1109/SFCS.1997.646134">
          <front>
            <title>Number-theoretic constructions of efficient pseudo-random functions</title>
            <seriesInfo name="DOI" value="10.1109/SFCS.1997.646134"/>
            <seriesInfo name="In" value="Symposium on the Foundations of Computer Science"/>
            <author initials="M." surname="Naor" fullname="Moni Naor">
              <organization>Weizmann Institute</organization>
            </author>
            <author initials="O." surname="Reingold" fullname="Omer Reingold">
              <organization>Weizmann Institute</organization>
            </author>
            <date year="1997" month="October"/>
          </front>
        </reference>
        <reference anchor="S85" target="https://doi.org/10.1090/S0025-5718-1985-0777280-6">
          <front>
            <title>Elliptic Curves Over Finite Fields and the Computation of Square Roots mod p</title>
            <seriesInfo name="DOI" value="10.1090/S0025-5718-1985-0777280-6"/>
            <seriesInfo name="pages" value="483-494"/>
            <seriesInfo name="In" value="Mathematics of Computation vol 44 issue 170"/>
            <author initials="R." surname="Schoof" fullname="Rene Schoof">
              <organization/>
            </author>
            <date year="1985" month="April"/>
          </front>
        </reference>
        <reference anchor="SAGE" target="https://www.sagemath.org">
          <front>
            <title>SageMath, the Sage Mathematics Software System</title>
            <author>
              <organization>The Sage Developers</organization>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="LBB19" target="https://hal.inria.fr/hal-02100345/">
          <front>
            <title>A Mechanised Proof of the WireGuard Virtual Private Network Protocol</title>
            <seriesInfo name="In" value="INRIA Research Report No. 9269"/>
            <author initials="B." surname="Lipp" fullname="Benjamin Lipp">
              <organization>INRIA Paris</organization>
            </author>
            <author initials="B." surname="Blanchet" fullname="Bruno Blanchet">
              <organization>INRIA Paris</organization>
            </author>
            <author initials="K." surname="Bhargavan" fullname="Karthikeyan Bhargavan">
              <organization>INRIA Paris</organization>
            </author>
            <date year="2019" month="April"/>
          </front>
        </reference>
        <reference anchor="RSS11" target="https://doi.org/10.1007/978-3-642-20465-4_27">
          <front>
            <title>Careful with Composition: Limitations of the Indifferentiability Framework</title>
            <seriesInfo name="DOI" value="10.1007/978-3-642-20465-4_27"/>
            <seriesInfo name="pages" value="487-506"/>
            <seriesInfo name="In" value="Advances in Cryptology - EUROCRYPT 2011"/>
            <author initials="T." surname="Ristenpart" fullname="Thomas Ristenpart">
              <organization>University of Wisconsin-Madison</organization>
            </author>
            <author initials="H." surname="Shacham" fullname="Hovav Shacham">
              <organization>UC San Diego</organization>
            </author>
            <author initials="T." surname="Shrimpton" fullname="Thomas Shrimpton">
              <organization>Portland State University</organization>
            </author>
            <date year="2011" month="May"/>
          </front>
        </reference>
        <reference anchor="W19" target="https://github.com/cfrg/draft-irtf-cfrg-hash-to-curve/raw/master/doc/svdw_params.pdf">
          <front>
            <title>An explicit, generic parameterization for the Shallue--van de Woestijne map</title>
            <author initials="R.S." surname="Wahby" fullname="Riad S. Wahby">
              <organization>Stanford University</organization>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="p1363.2" target="https://standards.ieee.org/standard/1363_2-2008.html">
          <front>
            <title>IEEE Standard Specification for Password-Based Public-Key Cryptography Techniques</title>
            <author>
              <organization>IEEE Computer Society</organization>
            </author>
            <date year="2008" month="September"/>
          </front>
        </reference>
        <reference anchor="p1363a" target="https://standards.ieee.org/standard/1363a-2004.html">
          <front>
            <title>IEEE Standard Specifications for Public-Key Cryptography---Amendment 1: Additional Techniques</title>
            <author>
              <organization>IEEE Computer Society</organization>
            </author>
            <date year="2004" month="March"/>
          </front>
        </reference>
        <reference anchor="MT98" target="https://doi.org/10.1145/272991.272995">
          <front>
            <title>Mersenne twister: A 623-dimensionally equidistributed uniform pseudo-random number generator</title>
            <seriesInfo name="DOI" value="10.1145/272991.272995"/>
            <seriesInfo name="pages" value="3-30"/>
            <seriesInfo name="In" value="ACM Transactions on Modeling and Computer Simulation (TOMACS), Volume 8, Issue 1"/>
            <author initials="M." surname="Matsumoto">
              <organization/>
            </author>
            <author initials="T." surname="Nishimura">
              <organization/>
            </author>
            <date year="1998" month="January"/>
          </front>
        </reference>
        <reference anchor="I-D.irtf-cfrg-bls-signature" target="http://www.ietf.org/internet-drafts/draft-irtf-cfrg-bls-signature-02.txt">
          <front>
            <title>draft-irtf-cfrg-bls-signature-02</title>
            <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-bls-signature-02"/>
            <author initials="D" surname="Boneh" fullname="Dan Boneh">
              <organization/>
            </author>
            <author initials="S" surname="Gorbunov" fullname="Sergey Gorbunov">
              <organization/>
            </author>
            <author initials="R" surname="Wahby" fullname="Riad Wahby">
              <organization/>
            </author>
            <author initials="H" surname="Wee" fullname="Hoeteck Wee">
              <organization/>
            </author>
            <author initials="Z" surname="Zhang" fullname="Zhenfei Zhang">
              <organization/>
            </author>
            <date month="March" day="9" year="2020"/>
            <abstract>
              <t>BLS is a digital signature scheme with aggregation properties.  Given set of signatures (signature_1, ..., signature_n) anyone can produce an aggregated signature.  Aggregation can also be done on secret keys and public keys.  Furthermore, the BLS signature scheme is deterministic, non-malleable, and efficient.  Its simplicity and cryptographic properties allows it to be useful in a variety of use- cases, specifically when minimal storage space or bandwidth are required.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.irtf-cfrg-vrf" target="http://www.ietf.org/internet-drafts/draft-irtf-cfrg-vrf-06.txt">
          <front>
            <title>Verifiable Random Functions (VRFs)</title>
            <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-vrf-06"/>
            <author initials="S" surname="Goldberg" fullname="Sharon Goldberg">
              <organization/>
            </author>
            <author initials="L" surname="Reyzin" fullname="Leonid Reyzin">
              <organization/>
            </author>
            <author initials="D" surname="Papadopoulos" fullname="Dimitrios Papadopoulos">
              <organization/>
            </author>
            <author initials="J" surname="Vcelak" fullname="Jan Vcelak">
              <organization/>
            </author>
            <date month="February" day="11" year="2020"/>
            <abstract>
              <t>A Verifiable Random Function (VRF) is the public-key version of a keyed cryptographic hash.  Only the holder of the private key can compute the hash, but anyone with public key can verify the correctness of the hash.  VRFs are useful for preventing enumeration of hash-based data structures.  This document specifies several VRF constructions that are secure in the cryptographic random oracle model.  One VRF uses RSA and the other VRF uses Eliptic Curves (EC).</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.irtf-cfrg-voprf" target="http://www.ietf.org/internet-drafts/draft-irtf-cfrg-voprf-03.txt">
          <front>
            <title>Oblivious Pseudorandom Functions (OPRFs) using Prime-Order Groups</title>
            <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-voprf-03"/>
            <author initials="A" surname="Davidson" fullname="Alex Davidson">
              <organization/>
            </author>
            <author initials="N" surname="Sullivan" fullname="Nick Sullivan">
              <organization/>
            </author>
            <author initials="C" surname="Wood" fullname="Christopher Wood">
              <organization/>
            </author>
            <date month="March" day="9" 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="RFC7693" target="https://www.rfc-editor.org/info/rfc7693">
          <front>
            <title>The BLAKE2 Cryptographic Hash and Message Authentication Code (MAC)</title>
            <seriesInfo name="DOI" value="10.17487/RFC7693"/>
            <seriesInfo name="RFC" value="7693"/>
            <author initials="M-J." surname="Saarinen" fullname="M-J. Saarinen" role="editor">
              <organization/>
            </author>
            <author initials="J-P." surname="Aumasson" fullname="J-P. Aumasson">
              <organization/>
            </author>
            <date year="2015" month="November"/>
            <abstract>
              <t>This document describes the cryptographic hash function BLAKE2 and makes the algorithm specification and C source code conveniently available to the Internet community.  BLAKE2 comes in two main flavors: BLAKE2b is optimized for 64-bit platforms and BLAKE2s for smaller architectures.  BLAKE2 can be directly keyed, making it functionally equivalent to a Message Authentication Code (MAC).</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>
        <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="RFC2104" target="https://www.rfc-editor.org/info/rfc2104">
          <front>
            <title>HMAC: Keyed-Hashing for Message Authentication</title>
            <seriesInfo name="DOI" value="10.17487/RFC2104"/>
            <seriesInfo name="RFC" value="2104"/>
            <author initials="H." surname="Krawczyk" fullname="H. Krawczyk">
              <organization/>
            </author>
            <author initials="M." surname="Bellare" fullname="M. Bellare">
              <organization/>
            </author>
            <author initials="R." surname="Canetti" fullname="R. Canetti">
              <organization/>
            </author>
            <date year="1997" month="February"/>
            <abstract>
              <t>This document describes HMAC, a mechanism for message authentication using cryptographic hash functions. HMAC can be used with any iterative cryptographic hash function, e.g., MD5, SHA-1, in combination with a secret shared key.  The cryptographic strength of HMAC depends on the properties of the underlying hash function.  This memo provides information for the Internet community.  This memo does not specify an Internet standard of any kind</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>
      </references>
    </references>
    <section anchor="related" numbered="true" toc="default">
      <name>Related work</name>
      <t>The problem of mapping arbitrary bit strings to elliptic curve points
has been the subject of both practical and theoretical research.
This section briefly describes the background and research results
that underly the recommendations in this document.
This section is provided for informational purposes only.</t>
      <t>A naive but generally insecure method of mapping a string msg to
a point on an elliptic curve E having n points is to first fix a point P that
generates the elliptic curve group, and a hash function Hn from bit strings
to integers less than n; then compute Hn(msg) * P, where the * operator
represents scalar multiplication. The reason this approach is insecure is
that the resulting point has a known discrete log relationship to P.
Thus, except in cases where this method is specified by the protocol,
it must not be used; doing so risks catastrophic security failures.</t>
      <t>Boneh et al. <xref target="BLS01" format="default"/> describe an encoding method they call MapToGroup,
which works roughly as follows: first, use the input string to initialize a
pseudorandom number generator, then use the generator to produce a
value x in F.
If x is the x-coordinate of a point on the elliptic curve, output that
point. Otherwise, generate a new value x in F and try again.
Since a random value x in F has probability about 1/2 of corresponding to
a point on the curve, the expected number of tries is just two.
However, the running time of this method depends on the input string,
which means that it is not safe to use in protocols sensitive to timing
side channels.</t>
      <t>Schinzel and Skalba <xref target="SS04" format="default"/> introduce a method of constructing
elliptic curve points deterministically, for a restricted class of curves
and a very small number of points.
Skalba <xref target="S05" format="default"/> generalizes this construction to more curves and more points
on those curves.
Shallue and van de Woestijne <xref target="SW06" format="default"/> further generalize and simplify
Skalba's construction, yielding concretely efficient maps to a constant
fraction of the points on almost any curve.
Fouque and Tibouchi <xref target="FT12" format="default"/> give a parameterization of this mapping
for Barreto-Naehrig pairing-friendly curves <xref target="BN05" format="default"/>.</t>
      <t>Ulas <xref target="U07" format="default"/> describes a simpler version of the Shallue-van de Woestijne map,
and Brier et al. <xref target="BCIMRT10" format="default"/> give a further simplification, which the authors
call the "simplified SWU" map.
That simplified map applies only to fields of characteristic p = 3 (mod 4);
Wahby and Boneh <xref target="WB19" format="default"/> generalize to fields of any characteristic, and
give further optimizations.</t>
      <t>Boneh and Franklin give a deterministic algorithm mapping to certain
supersingular curves over fields of characteristic p = 2 (mod 3) <xref target="BF01" format="default"/>.
Icart gives another deterministic algorithm which maps to any curve
over a field of characteristic p = 2 (mod 3) <xref target="Icart09" format="default"/>.
Several extensions and generalizations follow this work, including
<xref target="FSV09" format="default"/>, <xref target="FT10" format="default"/>, <xref target="KLR10" format="default"/>, <xref target="F11" format="default"/>, and <xref target="CK11" format="default"/>.</t>
      <t>Following the work of Farashahi <xref target="F11" format="default"/>, Fouque et al. <xref target="FJT13" format="default"/> describe a
mapping to curves over fields of characteristic p = 3 (mod 4) having a number of points
divisible by 4.  Bernstein et al. <xref target="BHKL13" format="default"/> optimize this mapping and
describe a related mapping that they call "Elligator 2," which applies to
any curve over a field of odd characteristic having a point of order 2.
This includes Curve25519 and Curve448, both of which are CFRG-recommended
curves <xref target="RFC7748" format="default"/>. Bernstein et al. <xref target="BLMP19" format="default"/> extend the Elligator 2 map
to a class of supersingular curves over fields of characteristic p = 3 (mod 4).</t>
      <t>An important caveat regarding all of the above deterministic mapping
functions is that none of them map to the entire curve, but rather to some
fraction of the points. This means that they cannot be used directly to
construct a random oracle that outputs points on the curve.</t>
      <t>Brier et al. <xref target="BCIMRT10" format="default"/> give two solutions to this problem.
The first, which Brier et al. prove applies to Icart's method,
computes f(H0(msg)) + f(H1(msg)) for two distinct hash functions
H0 and H1 from bit strings to F and a mapping f from F to the elliptic curve E.
The second, which applies to essentially all deterministic mappings but
is more costly, computes f(H0(msg)) + H2(msg) * P, for P a generator of the
elliptic curve group and H2 a hash from bit strings to integers modulo r,
the order of the elliptic curve group.
Farashahi et al. <xref target="FFSTV13" format="default"/> improve the analysis of the first method,
showing that it applies to essentially all deterministic mappings.
Tibouchi and Kim <xref target="TK17" format="default"/> further refine the analysis and describe additional
optimizations.</t>
      <t>Complementary to the problem of mapping from bit strings to elliptic curve
points, Bernstein et al. <xref target="BHKL13" format="default"/> study the problem of mapping from elliptic
curve points to uniformly random bit strings, giving solutions for a class of
curves including Montgomery and twisted Edwards curves.
Tibouchi <xref target="T14" format="default"/> and Aranha et al. <xref target="AFQTZ14" format="default"/> generalize these results.
This document does not deal with this complementary problem.</t>
    </section>
    <section anchor="appx-rational-map" numbered="true" toc="default">
      <name>Rational maps</name>
      <t>This section gives rational maps that can be used when hashing to
twisted Edwards or Montgomery curves.</t>
      <t>Given a twisted Edwards curve, <xref target="appx-rational-map-edw" format="default"/>
shows how to derive a corresponding Montgomery
curve and how to map from that curve to the twisted Edwards curve.
This mapping may be used when hashing to twisted Edwards curves
as described in <xref target="twisted-edwards" format="default"/>.</t>
      <t>Given a Montgomery curve, <xref target="appx-rational-map-mont" format="default"/> shows
how to derive a corresponding Weierstrass curve and how to map from that
curve to the Montgomery curve.
This mapping can be used to hash to Montgomery or twisted Edwards curves
via the Shallue-van de Woestijne (<xref target="svdw" format="default"/>) or Simplified SWU (<xref target="simple-swu" format="default"/>)
method, as follows:</t>
      <ul spacing="normal">
        <li>For Montgomery curves, first map to the Weierstrass curve, then convert
to Montgomery coordinates via the mapping.</li>
        <li>For twisted Edwards curves, compose the Weierstrass to Montgomery mapping
with the Montgomery to twisted Edwards mapping
(<xref target="appx-rational-map-edw" format="default"/>) to obtain a Weierstrass curve and a mapping
to the target twisted Edwards curve.
Map to this Weierstrass curve, then convert to Edwards coordinates
via the mapping.</li>
      </ul>
      <section anchor="appx-rational-map-edw" numbered="true" toc="default">
        <name>Generic Montgomery to twisted Edwards map</name>
        <t>This section gives a generic birational map between twisted Edwards
and Montgomery curves.</t>
        <t>The map in this section is a simplified version of the map given in
<xref target="BBJLP08" format="default"/>, Theorem 3.2.
Specifically, this section's map handles exceptional cases in a
simplified way that is geared towards hashing to a twisted Edwards
curve's prime-order subgroup.</t>
        <t>The twisted Edwards curve</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
    a * v^2 + w^2 = 1 + d * v^2 * w^2
]]></artwork>
        <t>is birationally equivalent to the Montgomery curve</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
    K * t^2 = s^3 + J * s^2 + s
]]></artwork>
        <t>which has the form required by the Elligator 2 mapping of <xref target="elligator2" format="default"/>.
The coefficients of the Montgomery curve are</t>
        <ul spacing="normal">
          <li>J = 2 * (a + d) / (a - d)</li>
          <li>K = 4 / (a - d)</li>
        </ul>
        <t>The rational map from the point (s, t) on the above Montgomery curve
to the point (v, w) on the twisted Edwards curve is given by</t>
        <ul spacing="normal">
          <li>v = s / t</li>
          <li>w = (s - 1) / (s + 1)</li>
        </ul>
        <t>This mapping is undefined when t == 0 or s == -1, i.e., when
the denominator of either of the above rational functions is zero.
Implementations MUST detect exceptional cases and return the value
(v, w) = (0, 1), which is the identity point on all twisted Edwards curves.</t>
        <t>The following straight-line implementation of the above rational map
handles the exceptional cases.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
edw_to_monty_generic(s, t)

Input: (s, t), a point on the curve K * t^2 = s^3 + J * s^2 + s.
Output: (v, w), a point on an equivalent twisted Edwards curve.

1. tv1 = s + 1
2. tv2 = tv1 * t        # (s + 1) * t
3. tv2 = inv0(tv2)      # 1 / ((s + 1) * t)
4.   v = tv2 * tv1      # 1 / t
5.   v = v * s          # s / t
6.   w = tv2 * t        # 1 / (s + 1)
7. tv1 = s - 1
8.   w = w * tv1        # (s - 1) / (s + 1)
9.   e = tv2 == 0
10.  w = CMOV(w, 1, e)  # handle exceptional case
11. return (v, w)
]]></artwork>
        <t>For completeness, we also give the inverse relations.
(Note that this map is not required when hashing to twisted Edwards curves.)
The coefficients of the twisted Edwards curve corresponding to
the above Montgomery curve are</t>
        <ul spacing="normal">
          <li>a = (J + 2) / K</li>
          <li>d = (J - 2) / K</li>
        </ul>
        <t>The rational map from the point (v, w) on the twisted Edwards
curve to the point (s, t) on the Montgomery curve is given by</t>
        <ul spacing="normal">
          <li>s = (1 + w) / (1 - w)</li>
          <li>t = (1 + w) / (v * (1 - w))</li>
        </ul>
        <t>The mapping is undefined when v == 0 or w == 1.
When the goal is to map into the prime-order subgroup of the Montgomery
curve, it suffices to return the identity point on the Montgomery curve
in the exceptional cases.</t>
      </section>
      <section anchor="appx-rational-map-mont" numbered="true" toc="default">
        <name>Weierstrass to Montgomery map</name>
        <t>The rational map from the point (s, t) on the Montgomery curve</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
    K * t^2 = s^3 + J * s^2 + s
]]></artwork>
        <t>to the point (x, y) on the equivalent Weierstrass curve</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
    y^2 = x^3 + A * x + B
]]></artwork>
        <t>is given by:</t>
        <ul spacing="normal">
          <li>A = (3 - J^2) / (3 * K^2)</li>
          <li>B = (2 * J^3 - 9 * J) / (27 * K^3)</li>
          <li>x = (3 * s + J) / (3 * K)</li>
          <li>y = t / K</li>
        </ul>
        <t>The inverse map, from the point (x, y) to the point (s, t), is given by</t>
        <ul spacing="normal">
          <li>s = (3 * K * x - J) / 3</li>
          <li>t = y * K</li>
        </ul>
        <t>This mapping can be used to apply the Shallue-van de Woestijne
(<xref target="svdw" format="default"/>) or Simplified SWU (<xref target="simple-swu" format="default"/>) method to
Montgomery curves.</t>
      </section>
    </section>
    <section anchor="appx-iso" numbered="true" toc="default">
      <name>Isogeny maps for suites</name>
      <t>This section specifies the isogeny maps for the secp256k1 and BLS12-381
suites listed in <xref target="suites" format="default"/>.</t>
      <t>These maps are given in terms of affine coordinates.
Wahby and Boneh (<xref target="WB19" format="default"/>, Section 4.3) show how to evaluate these maps
in a projective coordinate system (<xref target="projective-coords" format="default"/>), which avoids
modular inversions.</t>
      <t>Refer to the draft repository <xref target="hash2curve-repo" format="default"/> for a Sage <xref target="SAGE" format="default"/> script
that constructs these isogenies.</t>
      <section anchor="appx-iso-secp256k1" numbered="true" toc="default">
        <name>3-isogeny map for secp256k1</name>
        <t>This section specifies the isogeny map for the secp256k1 suite listed in <xref target="suites-secp256k1" format="default"/>.</t>
        <t>The 3-isogeny map from (x', y') on E' to (x, y) on E is given by the following rational functions:</t>
        <ul spacing="normal">
          <li>
            <t>x = x_num / x_den, where
            </t>
            <ul spacing="normal">
              <li>x_num = k_(1,3) * x'^3 + k_(1,2) * x'^2 + k_(1,1) * x' + k_(1,0)</li>
              <li>x_den = x'^2 + k_(2,1) * x' + k_(2,0)</li>
            </ul>
          </li>
          <li>
            <t>y = y' * y_num / y_den, where
            </t>
            <ul spacing="normal">
              <li>y_num = k_(3,3) * x'^3 + k_(3,2) * x'^2 + k_(3,1) * x' + k_(3,0)</li>
              <li>y_den = x'^3 + k_(4,2) * x'^2 + k_(4,1) * x' + k_(4,0)</li>
            </ul>
          </li>
        </ul>
        <t>The constants used to compute x_num are as follows:</t>
        <ul spacing="normal">
          <li>k_(1,0) = 0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7</li>
          <li>k_(1,1) = 0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581</li>
          <li>k_(1,2) = 0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262</li>
          <li>k_(1,3) = 0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c</li>
        </ul>
        <t>The constants used to compute x_den are as follows:</t>
        <ul spacing="normal">
          <li>k_(2,0) = 0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b</li>
          <li>k_(2,1) = 0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14</li>
        </ul>
        <t>The constants used to compute y_num are as follows:</t>
        <ul spacing="normal">
          <li>k_(3,0) = 0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c</li>
          <li>k_(3,1) = 0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3</li>
          <li>k_(3,2) = 0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931</li>
          <li>k_(3,3) = 0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84</li>
        </ul>
        <t>The constants used to compute y_den are as follows:</t>
        <ul spacing="normal">
          <li>k_(4,0) = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b</li>
          <li>k_(4,1) = 0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573</li>
          <li>k_(4,2) = 0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f</li>
        </ul>
      </section>
      <section anchor="appx-iso-bls12381-g1" numbered="true" toc="default">
        <name>11-isogeny map for BLS12-381 G1</name>
        <t>The 11-isogeny map from (x', y') on E' to (x, y) on E is given by the following rational functions:</t>
        <ul spacing="normal">
          <li>
            <t>x = x_num / x_den, where
            </t>
            <ul spacing="normal">
              <li>x_num = k_(1,11) * x'^11 + k_(1,10) * x'^10 + k_(1,9) * x'^9 + ... + k_(1,0)</li>
              <li>x_den = x'^10 + k_(2,9) * x'^9 + k_(2,8) * x'^8 + ... + k_(2,0)</li>
            </ul>
          </li>
          <li>
            <t>y = y' * y_num / y_den, where
            </t>
            <ul spacing="normal">
              <li>y_num = k_(3,15) * x'^15 + k_(3,14) * x'^14 + k_(3,13) * x'^13 + ... + k_(3,0)</li>
              <li>y_den = x'^15 + k_(4,14) * x'^14 + k_(4,13) * x'^13 + ... + k_(4,0)</li>
            </ul>
          </li>
        </ul>
        <t>The constants used to compute x_num are as follows:</t>
        <ul spacing="normal">
          <li>k_(1,0) = 0x11a05f2b1e833340b809101dd99815856b303e88a2d7005ff2627b56cdb4e2c85610c2d5f2e62d6eaeac1662734649b7</li>
          <li>k_(1,1) = 0x17294ed3e943ab2f0588bab22147a81c7c17e75b2f6a8417f565e33c70d1e86b4838f2a6f318c356e834eef1b3cb83bb</li>
          <li>k_(1,2) = 0xd54005db97678ec1d1048c5d10a9a1bce032473295983e56878e501ec68e25c958c3e3d2a09729fe0179f9dac9edcb0</li>
          <li>k_(1,3) = 0x1778e7166fcc6db74e0609d307e55412d7f5e4656a8dbf25f1b33289f1b330835336e25ce3107193c5b388641d9b6861</li>
          <li>k_(1,4) = 0xe99726a3199f4436642b4b3e4118e5499db995a1257fb3f086eeb65982fac18985a286f301e77c451154ce9ac8895d9</li>
          <li>k_(1,5) = 0x1630c3250d7313ff01d1201bf7a74ab5db3cb17dd952799b9ed3ab9097e68f90a0870d2dcae73d19cd13c1c66f652983</li>
          <li>k_(1,6) = 0xd6ed6553fe44d296a3726c38ae652bfb11586264f0f8ce19008e218f9c86b2a8da25128c1052ecaddd7f225a139ed84</li>
          <li>k_(1,7) = 0x17b81e7701abdbe2e8743884d1117e53356de5ab275b4db1a682c62ef0f2753339b7c8f8c8f475af9ccb5618e3f0c88e</li>
          <li>k_(1,8) = 0x80d3cf1f9a78fc47b90b33563be990dc43b756ce79f5574a2c596c928c5d1de4fa295f296b74e956d71986a8497e317</li>
          <li>k_(1,9) = 0x169b1f8e1bcfa7c42e0c37515d138f22dd2ecb803a0c5c99676314baf4bb1b7fa3190b2edc0327797f241067be390c9e</li>
          <li>k_(1,10) = 0x10321da079ce07e272d8ec09d2565b0dfa7dccdde6787f96d50af36003b14866f69b771f8c285decca67df3f1605fb7b</li>
          <li>k_(1,11) = 0x6e08c248e260e70bd1e962381edee3d31d79d7e22c837bc23c0bf1bc24c6b68c24b1b80b64d391fa9c8ba2e8ba2d229</li>
        </ul>
        <t>The constants used to compute x_den are as follows:</t>
        <ul spacing="normal">
          <li>k_(2,0) = 0x8ca8d548cff19ae18b2e62f4bd3fa6f01d5ef4ba35b48ba9c9588617fc8ac62b558d681be343df8993cf9fa40d21b1c</li>
          <li>k_(2,1) = 0x12561a5deb559c4348b4711298e536367041e8ca0cf0800c0126c2588c48bf5713daa8846cb026e9e5c8276ec82b3bff</li>
          <li>k_(2,2) = 0xb2962fe57a3225e8137e629bff2991f6f89416f5a718cd1fca64e00b11aceacd6a3d0967c94fedcfcc239ba5cb83e19</li>
          <li>k_(2,3) = 0x3425581a58ae2fec83aafef7c40eb545b08243f16b1655154cca8abc28d6fd04976d5243eecf5c4130de8938dc62cd8</li>
          <li>k_(2,4) = 0x13a8e162022914a80a6f1d5f43e7a07dffdfc759a12062bb8d6b44e833b306da9bd29ba81f35781d539d395b3532a21e</li>
          <li>k_(2,5) = 0xe7355f8e4e667b955390f7f0506c6e9395735e9ce9cad4d0a43bcef24b8982f7400d24bc4228f11c02df9a29f6304a5</li>
          <li>k_(2,6) = 0x772caacf16936190f3e0c63e0596721570f5799af53a1894e2e073062aede9cea73b3538f0de06cec2574496ee84a3a</li>
          <li>k_(2,7) = 0x14a7ac2a9d64a8b230b3f5b074cf01996e7f63c21bca68a81996e1cdf9822c580fa5b9489d11e2d311f7d99bbdcc5a5e</li>
          <li>k_(2,8) = 0xa10ecf6ada54f825e920b3dafc7a3cce07f8d1d7161366b74100da67f39883503826692abba43704776ec3a79a1d641</li>
          <li>k_(2,9) = 0x95fc13ab9e92ad4476d6e3eb3a56680f682b4ee96f7d03776df533978f31c1593174e4b4b7865002d6384d168ecdd0a</li>
        </ul>
        <t>The constants used to compute y_num are as follows:</t>
        <ul spacing="normal">
          <li>k_(3,0) = 0x90d97c81ba24ee0259d1f094980dcfa11ad138e48a869522b52af6c956543d3cd0c7aee9b3ba3c2be9845719707bb33</li>
          <li>k_(3,1) = 0x134996a104ee5811d51036d776fb46831223e96c254f383d0f906343eb67ad34d6c56711962fa8bfe097e75a2e41c696</li>
          <li>k_(3,2) = 0xcc786baa966e66f4a384c86a3b49942552e2d658a31ce2c344be4b91400da7d26d521628b00523b8dfe240c72de1f6</li>
          <li>k_(3,3) = 0x1f86376e8981c217898751ad8746757d42aa7b90eeb791c09e4a3ec03251cf9de405aba9ec61deca6355c77b0e5f4cb</li>
          <li>k_(3,4) = 0x8cc03fdefe0ff135caf4fe2a21529c4195536fbe3ce50b879833fd221351adc2ee7f8dc099040a841b6daecf2e8fedb</li>
          <li>k_(3,5) = 0x16603fca40634b6a2211e11db8f0a6a074a7d0d4afadb7bd76505c3d3ad5544e203f6326c95a807299b23ab13633a5f0</li>
          <li>k_(3,6) = 0x4ab0b9bcfac1bbcb2c977d027796b3ce75bb8ca2be184cb5231413c4d634f3747a87ac2460f415ec961f8855fe9d6f2</li>
          <li>k_(3,7) = 0x987c8d5333ab86fde9926bd2ca6c674170a05bfe3bdd81ffd038da6c26c842642f64550fedfe935a15e4ca31870fb29</li>
          <li>k_(3,8) = 0x9fc4018bd96684be88c9e221e4da1bb8f3abd16679dc26c1e8b6e6a1f20cabe69d65201c78607a360370e577bdba587</li>
          <li>k_(3,9) = 0xe1bba7a1186bdb5223abde7ada14a23c42a0ca7915af6fe06985e7ed1e4d43b9b3f7055dd4eba6f2bafaaebca731c30</li>
          <li>k_(3,10) = 0x19713e47937cd1be0dfd0b8f1d43fb93cd2fcbcb6caf493fd1183e416389e61031bf3a5cce3fbafce813711ad011c132</li>
          <li>k_(3,11) = 0x18b46a908f36f6deb918c143fed2edcc523559b8aaf0c2462e6bfe7f911f643249d9cdf41b44d606ce07c8a4d0074d8e</li>
          <li>k_(3,12) = 0xb182cac101b9399d155096004f53f447aa7b12a3426b08ec02710e807b4633f06c851c1919211f20d4c04f00b971ef8</li>
          <li>k_(3,13) = 0x245a394ad1eca9b72fc00ae7be315dc757b3b080d4c158013e6632d3c40659cc6cf90ad1c232a6442d9d3f5db980133</li>
          <li>k_(3,14) = 0x5c129645e44cf1102a159f748c4a3fc5e673d81d7e86568d9ab0f5d396a7ce46ba1049b6579afb7866b1e715475224b</li>
          <li>k_(3,15) = 0x15e6be4e990f03ce4ea50b3b42df2eb5cb181d8f84965a3957add4fa95af01b2b665027efec01c7704b456be69c8b604</li>
        </ul>
        <t>The constants used to compute y_den are as follows:</t>
        <ul spacing="normal">
          <li>k_(4,0) = 0x16112c4c3a9c98b252181140fad0eae9601a6de578980be6eec3232b5be72e7a07f3688ef60c206d01479253b03663c1</li>
          <li>k_(4,1) = 0x1962d75c2381201e1a0cbd6c43c348b885c84ff731c4d59ca4a10356f453e01f78a4260763529e3532f6102c2e49a03d</li>
          <li>k_(4,2) = 0x58df3306640da276faaae7d6e8eb15778c4855551ae7f310c35a5dd279cd2eca6757cd636f96f891e2538b53dbf67f2</li>
          <li>k_(4,3) = 0x16b7d288798e5395f20d23bf89edb4d1d115c5dbddbcd30e123da489e726af41727364f2c28297ada8d26d98445f5416</li>
          <li>k_(4,4) = 0xbe0e079545f43e4b00cc912f8228ddcc6d19c9f0f69bbb0542eda0fc9dec916a20b15dc0fd2ededda39142311a5001d</li>
          <li>k_(4,5) = 0x8d9e5297186db2d9fb266eaac783182b70152c65550d881c5ecd87b6f0f5a6449f38db9dfa9cce202c6477faaf9b7ac</li>
          <li>k_(4,6) = 0x166007c08a99db2fc3ba8734ace9824b5eecfdfa8d0cf8ef5dd365bc400a0051d5fa9c01a58b1fb93d1a1399126a775c</li>
          <li>k_(4,7) = 0x16a3ef08be3ea7ea03bcddfabba6ff6ee5a4375efa1f4fd7feb34fd206357132b920f5b00801dee460ee415a15812ed9</li>
          <li>k_(4,8) = 0x1866c8ed336c61231a1be54fd1d74cc4f9fb0ce4c6af5920abc5750c4bf39b4852cfe2f7bb9248836b233d9d55535d4a</li>
          <li>k_(4,9) = 0x167a55cda70a6e1cea820597d94a84903216f763e13d87bb5308592e7ea7d4fbc7385ea3d529b35e346ef48bb8913f55</li>
          <li>k_(4,10) = 0x4d2f259eea405bd48f010a01ad2911d9c6dd039bb61a6290e591b36e636a5c871a5c29f4f83060400f8b49cba8f6aa8</li>
          <li>k_(4,11) = 0xaccbb67481d033ff5852c1e48c50c477f94ff8aefce42d28c0f9a88cea7913516f968986f7ebbea9684b529e2561092</li>
          <li>k_(4,12) = 0xad6b9514c767fe3c3613144b45f1496543346d98adf02267d5ceef9a00d9b8693000763e3b90ac11e99b138573345cc</li>
          <li>k_(4,13) = 0x2660400eb2e4f3b628bdd0d53cd76f2bf565b94e72927c1cb748df27942480e420517bd8714cc80d1fadc1326ed06f7</li>
          <li>k_(4,14) = 0xe0fa1d816ddc03e6b24255e0d7819c171c40f65e273b853324efcd6356caa205ca2f570f13497804415473a1d634b8f</li>
        </ul>
      </section>
      <section anchor="appx-iso-bls12381-g2" numbered="true" toc="default">
        <name>3-isogeny map for BLS12-381 G2</name>
        <t>The 3-isogeny map from (x', y') on E' to (x, y) on E is given by the following rational functions:</t>
        <ul spacing="normal">
          <li>
            <t>x = x_num / x_den, where
            </t>
            <ul spacing="normal">
              <li>x_num = k_(1,3) * x'^3 + k_(1,2) * x'^2 + k_(1,1) * x' + k_(1,0)</li>
              <li>x_den = x'^2 + k_(2,1) * x' + k_(2,0)</li>
            </ul>
          </li>
          <li>
            <t>y = y' * y_num / y_den, where
            </t>
            <ul spacing="normal">
              <li>y_num = k_(3,3) * x'^3 + k_(3,2) * x'^2 + k_(3,1) * x' + k_(3,0)</li>
              <li>y_den = x'^3 + k_(4,2) * x'^2 + k_(4,1) * x' + k_(4,0)</li>
            </ul>
          </li>
        </ul>
        <t>The constants used to compute x_num are as follows:</t>
        <ul spacing="normal">
          <li>k_(1,0) = 0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97d6 + 0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97d6 * I</li>
          <li>k_(1,1) = 0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71a * I</li>
          <li>k_(1,2) = 0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71e + 0x8ab05f8bdd54cde190937e76bc3e447cc27c3d6fbd7063fcd104635a790520c0a395554e5c6aaaa9354ffffffffe38d * I</li>
          <li>k_(1,3) = 0x171d6541fa38ccfaed6dea691f5fb614cb14b4e7f4e810aa22d6108f142b85757098e38d0f671c7188e2aaaaaaaa5ed1</li>
        </ul>
        <t>The constants used to compute x_den are as follows:</t>
        <ul spacing="normal">
          <li>k_(2,0) = 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa63 * I</li>
          <li>k_(2,1) = 0xc + 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa9f * I</li>
        </ul>
        <t>The constants used to compute y_num are as follows:</t>
        <ul spacing="normal">
          <li>k_(3,0) = 0x1530477c7ab4113b59a4c18b076d11930f7da5d4a07f649bf54439d87d27e500fc8c25ebf8c92f6812cfc71c71c6d706 + 0x1530477c7ab4113b59a4c18b076d11930f7da5d4a07f649bf54439d87d27e500fc8c25ebf8c92f6812cfc71c71c6d706 * I</li>
          <li>k_(3,1) = 0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97be * I</li>
          <li>k_(3,2) = 0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71c + 0x8ab05f8bdd54cde190937e76bc3e447cc27c3d6fbd7063fcd104635a790520c0a395554e5c6aaaa9354ffffffffe38f * I</li>
          <li>k_(3,3) = 0x124c9ad43b6cf79bfbf7043de3811ad0761b0f37a1e26286b0e977c69aa274524e79097a56dc4bd9e1b371c71c718b10</li>
        </ul>
        <t>The constants used to compute y_den are as follows:</t>
        <ul spacing="normal">
          <li>k_(4,0) = 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa8fb + 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa8fb * I</li>
          <li>k_(4,1) = 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa9d3 * I</li>
          <li>k_(4,2) = 0x12 + 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa99 * I</li>
        </ul>
      </section>
    </section>
    <section anchor="straightline" numbered="true" toc="default">
      <name>Straight-line implementations of deterministic mappings</name>
      <t>This section gives straight-line implementations of the mappings of <xref target="mappings" format="default"/>.
These implementations are generic, i.e., they are defined for any curve and field.
<xref target="samplecode" format="default"/> gives example implementations that are optimized for specific
classes of curves and fields.</t>
      <section anchor="straightline-svdw" numbered="true" toc="default">
        <name>Shallue-van de Woestijne method</name>
        <t>This section gives a straight-line implementation of the Shallue and van
de Woestijne method for any Weierstrass curve of the form given in
<xref target="weierstrass" format="default"/>.
See <xref target="svdw" format="default"/> for information on the constants used in this mapping.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
map_to_curve_svdw(u)

Input: u, an element of F.
Output: (x, y), a point on E.

Constants:
1. c1 = g(Z)
2. c2 = -Z / 2
3. c3 = sqrt(-g(Z) * (3 * Z^2 + 4 * A))     # sgn0(c3) MUST equal 0
4. c4 = -4 * g(Z) / (3 * Z^2 + 4 * A)

Steps:
1.  tv1 = u^2
2.  tv1 = tv1 * c1
3.  tv2 = 1 + tv1
4.  tv1 = 1 - tv1
5.  tv3 = tv1 * tv2
6.  tv3 = inv0(tv3)
7.  tv4 = u * tv1
8.  tv4 = tv4 * tv3
9.  tv4 = tv4 * c3
10.  x1 = c2 - tv4
11. gx1 = x1^2
12. gx1 = gx1 + A
13. gx1 = gx1 * x1
14. gx1 = gx1 + B
15.  e1 = is_square(gx1)
16.  x2 = c2 + tv4
17. gx2 = x2^2
18. gx2 = gx2 + A
19. gx2 = gx2 * x2
20. gx2 = gx2 + B
21.  e2 = is_square(gx2) AND NOT e1     # Avoid short-circuit logic ops
22.  x3 = tv2^2
23.  x3 = x3 * tv3
24.  x3 = x3^2
25.  x3 = x3 * c4
26.  x3 = x3 + Z
27.   x = CMOV(x3, x1, e1)      # x = x1 if gx1 is square, else x = x3
28.   x = CMOV(x, x2, e2)       # x = x2 if gx2 is square and gx1 is not
29.  gx = x^2
30.  gx = gx + A
31.  gx = gx * x
32.  gx = gx + B
33.   y = sqrt(gx)
34.  e3 = sgn0(u) == sgn0(y)
35.   y = CMOV(-y, y, e3)       # Select correct sign of y
36. return (x, y)
]]></artwork>
      </section>
      <section anchor="straightline-sswu" numbered="true" toc="default">
        <name>Simplified SWU method</name>
        <t>This section gives a straight-line implementation of the simplified
SWU method for any Weierstrass curve of the form given in <xref target="weierstrass" format="default"/>.
See <xref target="simple-swu" format="default"/> for information on the constants used in this mapping.</t>
        <t><xref target="sswu-opt" format="default"/> gives optimized straight-line procedures that apply to specific
classes of curves and base fields.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
map_to_curve_simple_swu(u)

Input: u, an element of F.
Output: (x, y), a point on E.

Constants:
1.  c1 = -B / A
2.  c2 = -1 / Z

Steps:
1.  tv1 = Z * u^2
2.  tv2 = tv1^2
3.   x1 = tv1 + tv2
4.   x1 = inv0(x1)
5.   e1 = x1 == 0
6.   x1 = x1 + 1
7.   x1 = CMOV(x1, c2, e1)    # If (tv1 + tv2) == 0, set x1 = -1 / Z
8.   x1 = x1 * c1      # x1 = (-B / A) * (1 + (1 / (Z^2 * u^4 + Z * u^2)))
9.  gx1 = x1^2
10. gx1 = gx1 + A
11. gx1 = gx1 * x1
12. gx1 = gx1 + B             # gx1 = g(x1) = x1^3 + A * x1 + B
13.  x2 = tv1 * x1            # x2 = Z * u^2 * x1
14. tv2 = tv1 * tv2
15. gx2 = gx1 * tv2           # gx2 = (Z * u^2)^3 * gx1
16.  e2 = is_square(gx1)
17.   x = CMOV(x2, x1, e2)    # If is_square(gx1), x = x1, else x = x2
18.  y2 = CMOV(gx2, gx1, e2)  # If is_square(gx1), y2 = gx1, else y2 = gx2
19.   y = sqrt(y2)
20.  e3 = sgn0(u) == sgn0(y)  # Fix sign of y
21.   y = CMOV(-y, y, e3)
22. return (x, y)
]]></artwork>
      </section>
      <section anchor="straightline-ell2" numbered="true" toc="default">
        <name>Elligator 2 method</name>
        <t>This section gives a straight-line implementation of the Elligator 2
method for any Montgomery curve of the form given in <xref target="montgomery" format="default"/>.
See <xref target="elligator2" format="default"/> for information on the constants used in this mapping.</t>
        <t><xref target="ell2-opt" format="default"/> gives optimized straight-line procedures that apply to specific
classes of curves and base fields, including curve25519 and curve448 <xref target="RFC7748" format="default"/>.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
map_to_curve_elligator2(u)

Input: u, an element of F.
Output: (s, t), a point on M.

Constants:
1.   c1 = J / K
2.   c2 = 1 / K^2

Steps:
1.  tv1 = u^2
2.  tv1 = Z * tv1             # Z * u^2
3.   e1 = tv1 == -1           # exceptional case: Z * u^2 == -1
4.  tv1 = CMOV(tv1, 0, e1)    # if tv1 == -1, set tv1 = 0
5.   x1 = tv1 + 1
6.   x1 = inv0(x1)
7.   x1 = -c1 * x1             # x1 = -(J / K) / (1 + Z * u^2)
8.  gx1 = x1 + c1
9.  gx1 = gx1 * x1
10. gx1 = gx1 + c2
11. gx1 = gx1 * x1            # gx1 = x1^3 + (J / K) * x1^2 + x1 / K^2
12.  x2 = -x1 - c1
13. gx2 = tv1 * gx1
14.  e2 = is_square(gx1)
15.   x = CMOV(x2, x1, e2)    # If is_square(gx1), x = x1, else x = x2
16.  y2 = CMOV(gx2, gx1, e2)  # If is_square(gx1), y2 = gx1, else y2 = gx2
17.   y = sqrt(y2)
18.  e3 = sgn0(y) == 1
19.   y = CMOV(y, -y, e2 XOR e3)    # fix sign of y
20.   s = x * K
21.   t = y * K
22. return (s, t)
]]></artwork>
      </section>
    </section>
    <section anchor="samplecode" numbered="true" toc="default">
      <name>Optimized sample code</name>
      <t>This section gives sample implementations optimized for some of the
elliptic curves listed in <xref target="suites" format="default"/>.
Sample Sage <xref target="SAGE" format="default"/> code for each algorithm can also be found in the
draft repository <xref target="hash2curve-repo" format="default"/>.</t>
      <section anchor="projective-coords" numbered="true" toc="default">
        <name>Interface and projective coordinate systems</name>
        <t>The sample code in this section uses a different interface than
the mappings of <xref target="mappings" format="default"/>.
Specifically, each mapping function in this section has the following
signature:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
    (xn, xd, yn, yd) = map_to_curve(u)
]]></artwork>
        <t>The resulting affine point (x, y) is given by (xn / xd, yn / yd).</t>
        <t>The reason for this modified interface is that it enables further
optimizations when working with points in a projective coordinate
system.
This is desirable, for example, when the resulting point will be
immediately multiplied by a scalar, since most scalar multiplication
algorithms operate on projective points.</t>
        <t>The following are two commonly used projective coordinate systems
and the corresponding conversions:</t>
        <ul spacing="normal">
          <li>A point (X, Y, Z) in homogeneous projective coordinates corresponds
to the affine point (x, y) = (X / Z, Y / Z);
the inverse conversion is given by (X, Y, Z) = (x, y, 1).
To convert (xn, xd, yn, yd) to homogeneous projective coordinates,
compute (X, Y, Z) = (xn * yd, yn * xd, xd * yd).</li>
          <li>A point (X', Y', Z') in Jacobian projective coordinates corresponds
to the affine point (x, y) = (X' / Z'^2, Y' / Z'^3);
the inverse conversion is given by (X', Y', Z') = (x, y, 1).
To convert (xn, xd, yn, yd) to Jacobian projective coordinates,
compute (X', Y', Z') = (xn * xd * yd^2, yn * yd^2 * xd^3, xd * yd).</li>
        </ul>
      </section>
      <section anchor="sswu-opt" numbered="true" toc="default">
        <name>Simplified SWU</name>
        <section anchor="sswu-map-to-3mod4" numbered="true" toc="default">
          <name>q = 3 (mod 4)</name>
          <t>The following is a straight-line implementation of the Simplified SWU
mapping that applies to any curve over GF(q) where q = 3 (mod 4).
This includes the ciphersuites for NIST curves P-256, P-384, and P-521 <xref target="FIPS186-4" format="default"/> given in <xref target="suites" format="default"/>.
It also includes the curves isogenous to secp256k1 (<xref target="suites-secp256k1" format="default"/>) and BLS12-381 G1 (<xref target="suites-bls12381-g1" format="default"/>).</t>
          <t>The implementations for these curves differ only in the constants
and the base field.
The constant definitions below are given in terms of the parameters for the
Simplified SWU mapping; for parameter values for the curves listed above, see
<xref target="suites-p256" format="default"/> (P-256),
<xref target="suites-p384" format="default"/> (P-384),
<xref target="suites-p521" format="default"/> (P-521),
<xref target="suites-secp256k1" format="default"/> (E' isogenous to secp256k1), and
<xref target="suites-bls12381-g1" format="default"/> (E' isogenous to BLS12-381 G1).</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
map_to_curve_simple_swu_3mod4(u)

Input: u, an element of F.
Output: (xn, xd, yn, yd) such that (xn / xd, yn / yd) is a
        point on the target curve.

Constants:
1.  c1 = (q - 3) / 4           # Integer arithmetic
2.  c2 = sqrt(-Z^3)

Steps:
1.  tv1 = u^2
2.  tv3 = Z * tv1
3.  tv2 = tv3^2
4.   xd = tv2 + tv3
5.  x1n = xd + 1
6.  x1n = x1n * B
7.   xd = -A * xd
8.   e1 = xd == 0
9.   xd = CMOV(xd, Z * A, e1)  # If xd == 0, set xd = Z * A
10. tv2 = xd^2
11. gxd = tv2 * xd             # gxd == xd^3
12. tv2 = A * tv2
13. gx1 = x1n^2
14. gx1 = gx1 + tv2            # x1n^2 + A * xd^2
15. gx1 = gx1 * x1n            # x1n^3 + A * x1n * xd^2
16. tv2 = B * gxd
17. gx1 = gx1 + tv2            # x1n^3 + A * x1n * xd^2 + B * xd^3
18. tv4 = gxd^2
19. tv2 = gx1 * gxd
20. tv4 = tv4 * tv2            # gx1 * gxd^3
21.  y1 = tv4^c1               # (gx1 * gxd^3)^((q - 3) / 4)
22.  y1 = y1 * tv2             # gx1 * gxd * (gx1 * gxd^3)^((q - 3) / 4)
23. x2n = tv3 * x1n            # x2 = x2n / xd = Z * u^2 * x1n / xd
24.  y2 = y1 * c2              # y2 = y1 * sqrt(-Z^3)
25.  y2 = y2 * tv1
26.  y2 = y2 * u
27. tv2 = y1^2
28. tv2 = tv2 * gxd
29.  e2 = tv2 == gx1
30.  xn = CMOV(x2n, x1n, e2)   # If e2, x = x1, else x = x2
31.   y = CMOV(y2, y1, e2)     # If e2, y = y1, else y = y2
32.  e3 = sgn0(u) == sgn0(y)   # Fix sign of y
33.   y = CMOV(-y, y, e3)
34. return (xn, xd, y, 1)
]]></artwork>
        </section>
        <section anchor="sswu-map-to-5mod8" numbered="true" toc="default">
          <name>q = 5 (mod 8)</name>
          <t>The following is a straight-line implementation of the Simplified SWU
mapping that applied to any curve over GF(q) where q = 5 (mod 8).</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
map_to_curve_simple_sswu_5mod8(u)

Input: u, an element of F.
Output: (xn, xd, yn, yd) such that (xn / xd, yn / yd) is a
        point on the target curve.

Constants:
1. c1 = (q - 5) / 8             # Integer arithmetic
2. c2 = sqrt(-1)
3. c3 = sqrt(Z^3 / c2)

Steps:
1.  tv1 = u^2
2.  tv3 = Z * tv1
3.  tv5 = tv3^2
4.   xd = tv5 + tv3
5.  x1n = xd + 1
6.  x1n = x1n * B
7.   xd = -A * xd
8.   e1 = xd == 0
9.   xd = CMOV(xd, Z * A, e1)   # If xd == 0, set xd = Z * A
10. tv2 = xd^2
11. gxd = tv2 * xd              # gxd == xd^3
12. tv2 = A * tv2
13. gx1 = x1n^2
14. gx1 = gx1 + tv2             # x1n^2 + A * xd^2
15. gx1 = gx1 * x1n             # x1n^3 + A * x1n * xd^2
16. tv2 = B * gxd
17. gx1 = gx1 + tv2             # x1n^3 + A * x1n * xd^2 + B * xd^3
18. tv4 = gxd^2
19. tv2 = tv4 * gxd             # gxd^3
20. tv4 = tv4^2                 # gxd^4
21. tv2 = tv2 * gx1             # gx1 * gxd^3
22. tv4 = tv4 * tv2             # gx1 * gxd^7
23.   y = tv4^c1                # (gx1 * gxd^7)^((q - 5) / 8)
24.   y = y * tv2               # This is almost sqrt(gx1)
25. tv4 = y * c2                # check the two possible sqrts
26. tv2 = tv4^2
27. tv2 = tv2 * gxd
28.  e2 = tv2 == gx1
29.   y = CMOV(y, tv4, e2)
30. gx2 = gx1 * tv5
31. gx2 = gx2 * tv3             # gx2 = gx1 * Z^3 * u^6
32. tv1 = y * tv1
33. tv1 = tv1 * u               # This is almost sqrt(gx2)
34. tv1 = tv1 * c3              # check the two possible sqrts
35. tv4 = tv1 * c2
36. tv2 = tv4^2
37. tv2 = tv2 * gxd
38.  e3 = tv2 == gx2
39. tv1 = CMOV(tv1, tv4, e3)
40. tv2 = y^2
41. tv2 = tv2 * gxd
42.  e4 = tv2 == gx1
43.   y = CMOV(tv1, y, e4)      # choose correct y-coordinate
44. tv2 = tv3 * x1n             # x2n = x2n / xd = Z * u^2 * x1n / xd
45.  xn = CMOV(tv2, x1n, e4)    # choose correct x-coordinate
46.  e5 = sgn0(u) == sgn0(y)    # Fix sign of y
47.   y = CMOV(-y, y, e5)
48. return (xn, xd, y, 1)
]]></artwork>
        </section>
        <section anchor="sswu-map-to-9mod16" numbered="true" toc="default">
          <name>q = 9 (mod 16)</name>
          <t>The following is a straight-line implementation of the Simplified SWU
mapping that applies to any curve over GF(q) where q = 9 (mod 16).
This includes the curve isogenous to BLS12-381 G2 (<xref target="suites-bls12381-g2" format="default"/>).</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
map_to_curve_simple_swu_9mod16(u)

Input: u, an element of F.
Output: (xn, xd, yn, yd) such that (xn / xd, yn / yd) is a
        point on the target curve.

Constants:
1. c1 = (q - 9) / 16            # Integer arithmetic
2. c2 = sqrt(-1)
3. c3 = sqrt(c2)
4. c4 = sqrt(Z^3 / c3)
5. c5 = sqrt(Z^3 / (c2 * c3))

Steps:
1.  tv1 = u^2
2.  tv3 = Z * tv1
3.  tv5 = tv3^2
4.   xd = tv5 + tv3
5.  x1n = xd + 1
6.  x1n = x1n * B
7.   xd = -A * xd
8.   e1 = xd == 0
9.   xd = CMOV(xd, Z * A, e1)   # If xd == 0, set xd = Z * A
10. tv2 = xd^2
11. gxd = tv2 * xd              # gxd == xd^3
12. tv2 = A * tv2
13. gx1 = x1n^2
14. gx1 = gx1 + tv2             # x1n^2 + A * xd^2
15. gx1 = gx1 * x1n             # x1n^3 + A * x1n * xd^2
16. tv2 = B * gxd
17. gx1 = gx1 + tv2             # x1n^3 + A * x1n * xd^2 + B * xd^3
18. tv4 = gxd^2
19. tv2 = tv4 * gxd             # gxd^3
20. tv4 = tv4^2                 # gxd^4
21. tv2 = tv2 * tv4             # gxd^7
22. tv2 = tv2 * gx1             # gx1 * gxd^7
23. tv4 = tv4^2                 # gxd^8
24. tv4 = tv2 * tv4             # gx1 * gxd^15
25.   y = tv4^c1                # (gx1 * gxd^15)^((q - 9) / 16)
26.   y = y * tv2               # This is almost sqrt(gx1)
27. tv4 = y * c2                # check the four possible sqrts
28. tv2 = tv4^2
29. tv2 = tv2 * gxd
30.  e2 = tv2 == gx1
31.   y = CMOV(y, tv4, e2)
32. tv4 = y * c3
33. tv2 = tv4^2
34. tv2 = tv2 * gxd
35.  e3 = tv2 == gx1
36.   y = CMOV(y, tv4, e3)
37. tv4 = tv4 * c2
38. tv2 = tv4^2
39. tv2 = tv2 * gxd
40.  e4 = tv2 == gx1
41.   y = CMOV(y, tv4, e4)      # if x1 is square, this is its sqrt
42. gx2 = gx1 * tv5
43. gx2 = gx2 * tv3             # gx2 = gx1 * Z^3 * u^6
44. tv5 = y * tv1
45. tv5 = tv5 * u               # This is almost sqrt(gx2)
46. tv1 = tv5 * c4              # check the four possible sqrts
47. tv4 = tv1 * c2
48. tv2 = tv4^2
49. tv2 = tv2 * gxd
50.  e5 = tv2 == gx2
51. tv1 = CMOV(tv1, tv4, e5)
52. tv4 = tv5 * c5
53. tv2 = tv4^2
54. tv2 = tv2 * gxd
55.  e6 = tv2 == gx2
56. tv1 = CMOV(tv1, tv4, e6)
57. tv4 = tv4 * c2
58. tv2 = tv4^2
59. tv2 = tv2 * gxd
60.  e7 = tv2 == gx2
61. tv1 = CMOV(tv1, tv4, e7)
62. tv2 = y^2
63. tv2 = tv2 * gxd
64.  e8 = tv2 == gx1
65.   y = CMOV(tv1, y, e8)      # choose correct y-coordinate
66. tv2 = tv3 * x1n             # x2n = x2n / xd = Z * u^2 * x1n / xd
67.  xn = CMOV(tv2, x1n, e8)    # choose correct x-coordinate
68.  e9 = sgn0(u) == sgn0(y)    # Fix sign of y
69.   y = CMOV(-y, y, e9)
70. return (xn, xd, y, 1)
]]></artwork>
        </section>
      </section>
      <section anchor="ell2-opt" numbered="true" toc="default">
        <name>Elligator 2</name>
        <section anchor="map-to-curve25519" numbered="true" toc="default">
          <name>curve25519 (q = 5 (mod 8), K = 1)</name>
          <t>The following is a straight-line implementation of Elligator 2
for curve25519 <xref target="RFC7748" format="default"/> as specified in <xref target="suites-25519" format="default"/>.</t>
          <t>This implementation can also be used for any Montgomery curve
with K = 1 over GF(q) where q = 5 (mod 8).</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
map_to_curve_elligator2_curve25519(u)

Input: u, an element of F.
Output: (xn, xd, yn, yd) such that (xn / xd, yn / yd) is a
        point on curve25519.

Constants:
1. c1 = (q + 3) / 8           # Integer arithmetic
2. c2 = 2^c1
3. c3 = sqrt(-1)
4. c4 = (q - 5) / 8           # Integer arithmetic

Steps:
1.  tv1 = u^2
2.  tv1 = 2 * tv1
3.   xd = tv1 + 1             # Nonzero: -1 is square (mod p), tv1 is not
4.  x1n = -J                  # x1 = x1n / xd = -J / (1 + 2 * u^2)
5.  tv2 = xd^2
6.  gxd = tv2 * xd            # gxd = xd^3
7.  gx1 = J * tv1             # x1n + J * xd
8.  gx1 = gx1 * x1n           # x1n^2 + J * x1n * xd
9.  gx1 = gx1 + tv2           # x1n^2 + J * x1n * xd + xd^2
10. gx1 = gx1 * x1n           # x1n^3 + J * x1n^2 * xd + x1n * xd^2
11. tv3 = gxd^2
12. tv2 = tv3^2               # gxd^4
13. tv3 = tv3 * gxd           # gxd^3
14. tv3 = tv3 * gx1           # gx1 * gxd^3
15. tv2 = tv2 * tv3           # gx1 * gxd^7
16. y11 = tv2^c4              # (gx1 * gxd^7)^((p - 5) / 8)
17. y11 = y11 * tv3           # gx1 * gxd^3 * (gx1 * gxd^7)^((p - 5) / 8)
18. y12 = y11 * c3
19. tv2 = y11^2
20. tv2 = tv2 * gxd
21.  e1 = tv2 == gx1
22.  y1 = CMOV(y12, y11, e1)  # If g(x1) is square, this is its sqrt
23. x2n = x1n * tv1           # x2 = x2n / xd = 2 * u^2 * x1n / xd
24. y21 = y11 * u
25. y21 = y21 * c2
26. y22 = y21 * c3
27. gx2 = gx1 * tv1           # g(x2) = gx2 / gxd = 2 * u^2 * g(x1)
28. tv2 = y21^2
29. tv2 = tv2 * gxd
30.  e2 = tv2 == gx2
31.  y2 = CMOV(y22, y21, e2)  # If g(x2) is square, this is its sqrt
32. tv2 = y1^2
33. tv2 = tv2 * gxd
34.  e3 = tv2 == gx1
35.  xn = CMOV(x2n, x1n, e3)  # If e3, x = x1, else x = x2
36.   y = CMOV(y2, y1, e3)    # If e3, y = y1, else y = y2
37.  e4 = sgn0(y) == 1        # Fix sign of y
38.   y = CMOV(y, -y, e3 XOR e4)
39. return (xn, xd, y, 1)
]]></artwork>
        </section>
        <section anchor="map-to-edwards25519" numbered="true" toc="default">
          <name>edwards25519</name>
          <t>The following is a straight-line implementation of Elligator 2
for edwards25519 <xref target="RFC7748" format="default"/> as specified in <xref target="suites-25519" format="default"/>.
The subroutine map_to_curve_elligator2_curve25519
is defined in <xref target="map-to-curve25519" format="default"/>.</t>
          <t>Note that the sign of the constant c1 below is chosen as specified
in <xref target="rational-map" format="default"/>, i.e., applying the rational map to the edwards25519
base point yields the curve25519 base point (see erratum <xref target="EID4730" format="default"/>).</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
map_to_curve_elligator2_edwards25519(u)

Input: u, an element of F.
Output: (xn, xd, yn, yd) such that (xn / xd, yn / yd) is a
        point on edwards25519.

Constants:
1. c1 = sqrt(-486664)    # sgn0(c1) MUST equal 0

Steps:
1.  (xMn, xMd, yMn, yMd) = map_to_curve_elligator2_curve25519(u)
2.  xn = xMn * yMd
3.  xn = xn * c1
4.  xd = xMd * yMn       # xn / xd = c1 * xM / yM
5.  yn = xMn - xMd
6.  yd = xMn + xMd       # (n / d - 1) / (n / d + 1) = (n - d) / (n + d)
7. tv1 = xd * yd
8.   e = tv1 == 0
9.  xn = CMOV(xn, 0, e)
10. xd = CMOV(xd, 1, e)
11. yn = CMOV(yn, 1, e)
12. yd = CMOV(yd, 1, e)
13. return (xn, xd, yn, yd)
]]></artwork>
        </section>
        <section anchor="map-to-curve448" numbered="true" toc="default">
          <name>curve448 (q = 3 (mod 4), K = 1)</name>
          <t>The following is a straight-line implementation of Elligator 2
for curve448 <xref target="RFC7748" format="default"/> as specified in <xref target="suites-448" format="default"/>.</t>
          <t>This implementation can also be used for any Montgomery curve
with K = 1 over GF(q) where q = 3 (mod 4).</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
map_to_curve_elligator2_curve448(u)

Input: u, an element of F.
Output: (xn, xd, yn, yd) such that (xn / xd, yn / yd) is a
        point on curve448.

Constants:
1. c1 = (q - 3) / 4           # Integer arithmetic

Steps:
1.  tv1 = u^2
2.   e1 = tv1 == 1
3.  tv1 = CMOV(tv1, 0, e1)    # If Z * u^2 == -1, set tv1 = 0
4.   xd = 1 - tv1
5.  x1n = -J
6.  tv2 = xd^2
7.  gxd = tv2 * xd            # gxd = xd^3
8.  gx1 = -J * tv1            # x1n + J * xd
9.  gx1 = gx1 * x1n           # x1n^2 + J * x1n * xd
10. gx1 = gx1 + tv2           # x1n^2 + J * x1n * xd + xd^2
11. gx1 = gx1 * x1n           # x1n^3 + J * x1n^2 * xd + x1n * xd^2
12. tv3 = gxd^2
13. tv2 = gx1 * gxd           # gx1 * gxd
14. tv3 = tv3 * tv2           # gx1 * gxd^3
15.  y1 = tv3^c1              # (gx1 * gxd^3)^((p - 3) / 4)
16.  y1 = y1 * tv2            # gx1 * gxd * (gx1 * gxd^3)^((p - 3) / 4)
17. x2n = -tv1 * x1n          # x2 = x2n / xd = -1 * u^2 * x1n / xd
18.  y2 = y1 * u
19.  y2 = CMOV(y2, 0, e1)
20. tv2 = y1^2
21. tv2 = tv2 * gxd
22.  e2 = tv2 == gx1
23.  xn = CMOV(x2n, x1n, e2)  # If e2, x = x1, else x = x2
24.   y = CMOV(y2, y1, e2)    # If e2, y = y1, else y = y2
25.  e3 = sgn0(y) == 1        # Fix sign of y
26.   y = CMOV(y, -y, e2 XOR e3)
27. return (xn, xd, y, 1)
]]></artwork>
        </section>
        <section anchor="map-to-edwards448" numbered="true" toc="default">
          <name>edwards448</name>
          <t>The following is a straight-line implementation of Elligator 2
for edwards448 <xref target="RFC7748" format="default"/> as specified in <xref target="suites-448" format="default"/>.
The subroutine map_to_curve_elligator2_curve448
is defined in <xref target="map-to-curve448" format="default"/>.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
map_to_curve_elligator2_edwards448(u)

Input: u, an element of F.
Output: (xn, xd, yn, yd) such that (xn / xd, yn / yd) is a
        point on edwards448.

Steps:
1. (xn, xd, yn, yd) = map_to_curve_elligator2_curve448(u)
2.  xn2 = xn^2
3.  xd2 = xd^2
4.  xd4 = xd2^2
5.  yn2 = yn^2
6.  yd2 = yd^2
7.  xEn = xn2 - xd2
8.  tv2 = xEn - xd2
9.  xEn = xEn * xd2
10. xEn = xEn * yd
11. xEn = xEn * yn
12. xEn = xEn * 4
13. tv2 = tv2 * xn2
14. tv2 = tv2 * yd2
15. tv3 = 4 * yn2
16. tv1 = tv3 + yd2
17. tv1 = tv1 * xd4
18. xEd = tv1 + tv2
19. tv2 = tv2 * xn
20. tv4 = xn * xd4
21. yEn = tv3 - yd2
22. yEn = yEn * tv4
23. yEn = yEn - tv2
24. tv1 = xn2 + xd2
25. tv1 = tv1 * xd2
26. tv1 = tv1 * xd
27. tv1 = tv1 * yn2
28. tv1 = -2 * tv1
29. yEd = tv2 + tv1
30. tv4 = tv4 * yd2
31. yEd = yEd + tv4
32. tv1 = xEd * yEd
33.   e = tv1 == 0
34. xEn = CMOV(xEn, 0, e)
35. xEd = CMOV(xEd, 1, e)
36. yEn = CMOV(yEn, 1, e)
37. yEd = CMOV(yEd, 1, e)
38. return (xEn, xEd, yEn, yEd)
]]></artwork>
        </section>
        <section anchor="ell2-map-to-3mod4" numbered="true" toc="default">
          <name>q = 3 (mod 4)</name>
          <t>The following is a straight-line implementation of Elligator 2
that applies to any curve over GF(q) where q = 3 (mod 4).</t>
          <t>For curves where K = 1, the implementation given in <xref target="map-to-curve448" format="default"/>
gives identical results with slightly reduced cost.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
map_to_curve_elligator2_3mod4(u)

Input: u, an element of F.
Output: (xn, xd, yn, yd) such that (xn / xd, yn / yd) is a
        point on the target curve.

Constants:
1. c1 = (q - 3) / 4           # Integer arithmetic
2. c2 = K^2

Steps:
1.  tv1 = u^2
2.   e1 = tv1 == 1
3.  tv1 = CMOV(tv1, 0, e1)    # If Z * u^2 == -1, set tv1 = 0
4.   xd = 1 - tv1
5.   xd = xd * K
6.  x1n = -J                  # x1 = x1n / xd = -J / (K * (1 + 2 * u^2))
7.  tv2 = xd^2
8.  gxd = tv2 * xd
9.  gxd = gxd * c2            # gxd = xd^3 * K^2
10. gx1 = x1n * K
11. tv3 = xd * J
12. tv3 = gx1 + tv3           # x1n * K + xd * J
13. gx1 = gx1 * tv3           # K^2 * x1n^2 + J * K * x1n * xd
14. gx1 = gx1 + tv2           # K^2 * x1n^2 + J * K * x1n * xd + xd^2
15. gx1 = gx1 * x1n           # K^2 * x1n^3 + J * K * x1n^2 * xd + x1n * xd^2
16. tv3 = gxd^2
17. tv2 = gx1 * gxd           # gx1 * gxd
18. tv3 = tv3 * tv2           # gx1 * gxd^3
19.  y1 = tv3^c1              # (gx1 * gxd^3)^((q - 3) / 4)
20.  y1 = y1 * tv2            # gx1 * gxd * (gx1 * gxd^3)^((q - 3) / 4)
21. x2n = -tv1 * x1n          # x2 = x2n / xd = -1 * u^2 * x1n / xd
22.  y2 = y1 * u
23.  y2 = CMOV(y2, 0, e1)
24. tv2 = y1^2
25. tv2 = tv2 * gxd
26.  e2 = tv2 == gx1
27.  xn = CMOV(x2n, x1n, e2)  # If e2, x = x1, else x = x2
28.  xn = xn * K
29.   y = CMOV(y2, y1, e2)    # If e2, y = y1, else y = y2
30.  e3 = sgn0(y) == 1        # Fix sign of y
31.   y = CMOV(y, -y, e2 XOR e3)
32.   y = y * K
33. return (xn, xd, y, 1)
]]></artwork>
        </section>
        <section anchor="ell2-map-to-5mod8" numbered="true" toc="default">
          <name>q = 5 (mod 8)</name>
          <t>The following is a straight-line implementation of Elligator 2
that applies to any curve over GF(q) where q = 5 (mod 8).</t>
          <t>For curves where K = 1, the implementation given in <xref target="map-to-curve25519" format="default"/>
gives identical results with slightly reduced cost.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
map_to_curve_elligator2_5mod8(u)

Input: u, an element of F.
Output: (xn, xd, yn, yd) such that (xn / xd, yn / yd) is a
        point on the target curve.

Constants:
1. c1 = (q + 3) / 8           # Integer arithmetic
2. c2 = 2^c1
3. c3 = sqrt(-1)
4. c4 = (q - 5) / 8           # Integer arithmetic
5. c5 = K^2

Steps:
1.  tv1 = u^2
2.  tv1 = 2 * tv1
3.   xd = tv1 + 1             # Nonzero: -1 is square (mod p), tv1 is not
4.   xd = xd * K
5.  x1n = -J                  # x1 = x1n / xd = -J / (K * (1 + 2 * u^2))
6.  tv2 = xd^2
7.  gxd = tv2 * xd
8.  gxd = gxd * c5            # gxd = xd^3 * K^2
9.  gx1 = x1n * K
10. tv3 = xd * J
11. tv3 = gx1 + tv3           # x1n * K + xd * J
12. gx1 = gx1 * tv3           # K^2 * x1n^2 + J * K * x1n * xd
13. gx1 = gx1 + tv2           # K^2 * x1n^2 + J * K * x1n * xd + xd^2
14. gx1 = gx1 * x1n           # K^2 * x1n^3 + J * K * x1n^2 * xd + x1n * xd^2
15. tv3 = gxd^2
16. tv2 = tv3^2               # gxd^4
17. tv3 = tv3 * gxd           # gxd^3
18. tv3 = tv3 * gx1           # gx1 * gxd^3
19. tv2 = tv2 * tv3           # gx1 * gxd^7
20. y11 = tv2^c4              # (gx1 * gxd^7)^((q - 5) / 8)
21. y11 = y11 * tv3           # gx1 * gxd^3 * (gx1 * gxd^7)^((q - 5) / 8)
22. y12 = y11 * c3
23. tv2 = y11^2
24. tv2 = tv2 * gxd
25.  e1 = tv2 == gx1
26.  y1 = CMOV(y12, y11, e1)  # If g(x1) is square, this is its sqrt
27. x2n = x1n * tv1           # x2 = x2n / xd = 2 * u^2 * x1n / xd
28. y21 = y11 * u
29. y21 = y21 * c2
30. y22 = y21 * c3
31. gx2 = gx1 * tv1           # g(x2) = gx2 / gxd = 2 * u^2 * g(x1)
32. tv2 = y21^2
33. tv2 = tv2 * gxd
34.  e2 = tv2 == gx2
35.  y2 = CMOV(y22, y21, e2)  # If g(x2) is square, this is its sqrt
36. tv2 = y1^2
37. tv2 = tv2 * gxd
38.  e3 = tv2 == gx1
39.  xn = CMOV(x2n, x1n, e3)  # If e3, x = x1, else x = x2
40.  xn = xn * K
41.   y = CMOV(y2, y1, e3)    # If e3, y = y1, else y = y2
42.  e4 = sgn0(y) == 1        # Fix sign of y
43.   y = CMOV(y, -y, e3 XOR e4)
44.   y = y * K
45. return (xn, xd, y, 1)
]]></artwork>
        </section>
      </section>
      <section anchor="clear-cofactor-bls12381-g2" numbered="true" toc="default">
        <name>Cofactor clearing for BLS12-381 G2</name>
        <t>The curve BLS12-381, whose parameters are defined in <xref target="suites-bls12381-g2" format="default"/>,
admits an efficiently-computable endomorphism psi that can be used to
speed up cofactor clearing for G2 <xref target="SBCDK09" format="default"/> <xref target="FKR11" format="default"/> <xref target="BP17" format="default"/> (see also
<xref target="cofactor-clearing" format="default"/>).
This section implements the endomorphism psi and a fast cofactor clearing
method described by Budroni and Pintore <xref target="BP17" format="default"/>.</t>
        <t>The functions in this section operate on points whose coordinates are
represented as ratios, i.e., (xn, xd, yn, yd) corresponds to the point
(xn / xd, yn / yd); see <xref target="projective-coords" format="default"/> for further discussion of
projective coordinates.
When points are represented in affine coordinates, one can simply ignore
the denominators (xd == 1 and yd == 1).</t>
        <t>The following function computes the Frobenius endomorphism for an element
of F = GF(p^2) with basis (1, I), where I^2 + 1 == 0 in F.
(This is the base field of the elliptic curve E defined in <xref target="suites-bls12381-g2" format="default"/>.)</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
frobenius(x)

Input: x, an element of GF(p^2).
Output: a, an element of GF(p^2).

Notation: x = x0 + I * x1, where x0 and x1 are elements of GF(p).

Steps:
1. a = x0 - I * x1
2. return a
]]></artwork>
        <t>The following function computes the endomorphism psi for points on the
elliptic curve E defined in <xref target="suites-bls12381-g2" format="default"/>.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
psi(xn, xd, yn, yd)

Input: P, the point (xn / xd, yn / yd) on the curve E (see above).
Output: Q, a point on the same curve.

Constants:
1. c1 = 1 / (1 + I)^((p - 1) / 3)           # in GF(p^2)
2. c2 = 1 / (1 + I)^((p - 1) / 2)           # in GF(p^2)

Steps:
1. qxn = c1 * frobenius(xn)
2. qxd = frobenius(xd)
3. qyn = c2 * frobenius(yn)
4. qyd = frobenius(yd)
5. return (qxn, qxd, qyn, qyd)
]]></artwork>
        <t>The following function efficiently computes psi(psi(P)).</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
psi2(xn, xd, yn, yd)

Input: P, the point (xn / xd, yn / yd) on the curve E (see above).
Output: Q, a point on the same curve.

Constants:
1. c1 = 1 / 2^((p - 1) / 3)                 # in GF(p^2)

Steps:
1. qxn = c1 * xn
2. qyn = -yn
3. return (qxn, xd, qyn, yd)
]]></artwork>
        <t>The following function maps any point on the elliptic curve E (<xref target="suites-bls12381-g2" format="default"/>)
into the prime-order subgroup G2.
This function returns a point equal to h_eff * G2, where h_eff is the parameter
given in <xref target="suites-bls12381-g2" format="default"/>.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
clear_cofactor_bls12381_g2(P)

Input: P, the point (xn / xd, yn / yd) on the curve E (see above).
Output: Q, a point in the subgroup G2 of BLS12-381.

Constants:
1. c1 = -15132376222941642752       # the BLS parameter for BLS12-381
                                    # i.e., -0xd201000000010000

Notation: in this procedure, + and - represent elliptic curve point
addition and subtraction, respectively, and * represents scalar
multiplication.

Steps:
1.  t1 = c1 * P
2.  t2 = psi(P)
3.  t3 = 2 * P
4.  t3 = psi2(t3)
5.  t3 = t3 - t2
6.  t2 = t1 + t2
7.  t2 = c1 * t2
8.  t3 = t3 + t2
9.  t3 = t3 - t1
10.  Q = t3 - P
11. return Q
]]></artwork>
      </section>
    </section>
    <section anchor="paramgen" numbered="true" toc="default">
      <name>Scripts for parameter generation</name>
      <t>This section gives Sage <xref target="SAGE" format="default"/> scripts used to generate parameters for the mappings of <xref target="mappings" format="default"/>.</t>
      <section anchor="svdw-z-code" numbered="true" toc="default">
        <name>Finding Z for the Shallue-van de Woestijne map</name>
        <t>The below function outputs an appropriate Z for the Shallue and van de Woestijne map (<xref target="svdw" format="default"/>).</t>
        <artwork type="sage" name="" align="left" alt=""><![CDATA[
# Arguments:
# - F, a field object, e.g., F = GF(2^521 - 1)
# - A and B, the coefficients of the curve equation y^2 = x^3 + A * x + B
def find_z_svdw(F, A, B):
    g = lambda x: F(x)^3 + F(A) * F(x) + F(B)
    h = lambda Z: -(F(3) * Z^2 + F(4) * A) / (F(4) * g(Z))
    ctr = F.gen()
    while True:
        for Z_cand in (F(ctr), F(-ctr)):
            if g(Z_cand) == F(0):
                # Criterion 1: g(Z) != 0 in F.
                continue
            if h(Z_cand) == F(0):
                # Criterion 2: -(3 * Z^2 + 4 * A) / (4 * g(Z)) != 0 in F.
                continue
            if not h(Z_cand).is_square():
                # Criterion 3: -(3 * Z^2 + 4 * A) / (4 * g(Z)) is square in F.
                continue
            if g(Z_cand).is_square() or g(-Z_cand / F(2)).is_square():
                # Criterion 4: At least one of g(Z) and g(-Z / 2) is square in F.
                return Z_cand
        ctr += 1
]]></artwork>
      </section>
      <section anchor="sswu-z-code" numbered="true" toc="default">
        <name>Finding Z for Simplified SWU</name>
        <t>The below function outputs an appropriate Z for the Simplified SWU map (<xref target="simple-swu" format="default"/>).</t>
        <artwork type="sage" name="" align="left" alt=""><![CDATA[
# Arguments:
# - F, a field object, e.g., F = GF(2^521 - 1)
# - A and B, the coefficients of the curve equation y^2 = x^3 + A * x + B
def find_z_sswu(F, A, B):
    R.<xx> = F[]                        # Polynomial ring over F
    g = xx^3 + F(A) * xx + F(B)         # y^2 = g(x) = x^3 + A * x + B
    ctr = F.gen()
    while True:
        for Z_cand in (F(ctr), F(-ctr)):
            if Z_cand.is_square():
                # Criterion 1: Z is non-square in F.
                continue
            if Z_cand == F(-1):
                # Criterion 2: Z != -1 in F.
                continue
            if not (g - Z_cand).is_irreducible():
                # Criterion 3: g(x) - Z is irreducible over F.
                continue
            if g(B / (Z_cand * A)).is_square():
                # Criterion 4: g(B / (Z * A)) is square in F.
                return Z_cand
        ctr += 1
]]></artwork>
      </section>
      <section anchor="elligator-z-code" numbered="true" toc="default">
        <name>Finding Z for Elligator 2</name>
        <t>The below function outputs an appropriate Z for the Elligator 2 map (<xref target="elligator2" format="default"/>).</t>
        <artwork type="sage" name="" align="left" alt=""><![CDATA[
# Argument:
# - F, a field object, e.g., F = GF(2^255 - 19)
def find_z_ell2(F):
    ctr = F.gen()
    while True:
        for Z_cand in (F(ctr), F(-ctr)):
            if Z_cand.is_square():
                # Z must be a non-square in F.
                continue
            return Z_cand
        ctr += 1
]]></artwork>
      </section>
    </section>
    <section anchor="appx-sqrt" numbered="true" toc="default">
      <name>sqrt and is_square functions</name>
      <t>This section defines special-purpose sqrt functions for the three most common cases,
q = 3 (mod 4), q = 5 (mod 8), and q = 9 (mod 16),
plus a generic constant-time algorithm that works for any prime modulus.</t>
      <t>In addition, it gives an optimized is_square method for GF(p^2).</t>
      <section anchor="sqrt-3mod4" numbered="true" toc="default">
        <name>q = 3 (mod 4)</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
sqrt_3mod4(x)

Parameters:
- F, a finite field of characteristic p and order q = p^m.

Input: x, an element of F.
Output: z, an element of F such that (z^2) == x, if x is square in F.

Constants:
1. c1 = (q + 1) / 4     # Integer arithmetic

Procedure:
1. return x^c1
]]></artwork>
      </section>
      <section anchor="sqrt-5mod8" numbered="true" toc="default">
        <name>q = 5 (mod 8)</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
sqrt_5mod8(x)

Parameters:
- F, a finite field of characteristic p and order q = p^m.

Input: x, an element of F.
Output: z, an element of F such that (z^2) == x, if x is square in F.

Constants:
1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F
2. c2 = (q + 3) / 8     # Integer arithmetic

Procedure:
1. tv1 = x^c2
2. tv2 = tv1 * c1
3.   e = (tv1^2) == x
4.   z = CMOV(tv2, tv1, e)
5. return z
]]></artwork>
      </section>
      <section anchor="sqrt-9mod16" numbered="true" toc="default">
        <name>q = 9 (mod 16)</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
sqrt_9mod16(x)

Parameters:
- F, a finite field of characteristic p and order q = p^m.

Input: x, an element of F.
Output: z, an element of F such that (z^2) == x, if x is square in F.

Constants:
1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F
2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F
3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F
4. c4 = (q + 7) / 16         # Integer arithmetic

Procedure:
1. tv1 = x^c4
2. tv2 = c1 * tv1
3. tv3 = c2 * tv1
4. tv4 = c3 * tv1
5.  e1 = (tv2^2) == x
6.  e2 = (tv3^2) == x
7. tv1 = CMOV(tv1, tv2, e1)  # Select tv2 if (tv2^2) == x
8. tv2 = CMOV(tv4, tv3, e2)  # Select tv3 if (tv3^2) == x
9.  e3 = (tv2^2) == x
10.  z = CMOV(tv1, tv2, e3)  # Select the sqrt from tv1 and tv2
11. return z
]]></artwork>
      </section>
      <section anchor="sqrt-ts" numbered="true" toc="default">
        <name>Constant-time Tonelli-Shanks algorithm</name>
        <t>This algorithm is a constant-time version of the classic Tonelli-Shanks algorithm
(<xref target="C93" format="default"/>, Algorithm 1.5.1) due to Sean Bowe, Jack Grigg, and Eirik Ogilvie-Wigley <xref target="jubjub-fq" format="default"/>,
adapted and optimized by Michael Scott.</t>
        <t>This algorithm applies to GF(p) for any p.
Note, however, that the special-purpose algorithms given in the prior sections are
faster, when they apply.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
sqrt_ts_ct(x)

Parameters:
- F, a finite field of characteristic p and order q = p^m.

Input x, an element of F.
Output: z, an element of F such that z^2 == x, if x is square in F.

Constants:
1. c1, the largest integer such that 2^c1 divides q - 1.
2. c2 = (q - 1) / (2^c1)        # Integer arithmetic
3. c3 = (c2 - 1) / 2            # Integer arithmetic
4. c4, a non-square value in F
5. c5 = c4^c2 in F

Procedure:
1.  z = x^c3
2.  t = z * z * x
3.  z = z * x
4.  b = t
5.  c = c5
6.  for i in (c1, c1 - 1, ..., 2):
7.      for j in (1, 2, ..., i - 2):
8.           b = b * b
9.      z = CMOV(z, z * c, b != 1)
10.     c = c * c
11.     t = CMOV(t, t * c, b != 1)
12.     b = t
13. return z
]]></artwork>
      </section>
      <section anchor="appx-sqrt-issq" numbered="true" toc="default">
        <name>is_square for F = GF(p^2)</name>
        <t>The following is_square method applies to any field F = GF(p^2)
with basis (1, I) represented as described in <xref target="bg-curves" format="default"/>, i.e.,
an element x = (x_1, x_2) = x_1 + x_2 * I.</t>
        <t>Other optimizations of this type are possible in other even-order
extension fields; see <xref target="AR13" format="default"/>.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
is_square(x)

Parameters:
- F, an extension field of characteristic p and order q = p^2
  with basis (1, I).

Input: x, an element of F.
Output: True if x is square in F, and False otherwise.

Constants:
1. c1 = (p - 1) / 2         # Integer arithmetic

Procedure:
1. tv1 = x_1^2
2. tv2 = I * x_2
3. tv2 = tv2^2
4. tv1 = tv1 - tv2
5. tv1 = tv1^c1
6.  e1 = tv1 != -1          # Note: -1 in F
7. return e1
]]></artwork>
      </section>
    </section>
    <section anchor="testvectors" numbered="true" toc="default">
      <name>Suite test vectors</name>
      <t>This section gives test vectors for each suite defined in <xref target="suites" format="default"/>.
The test vectors in this section were generated using code that is
available from <xref target="hash2curve-repo" format="default"/>.</t>
      <t>Each test vector in this section lists values computed by the
appropriate encoding function, with variable names defined as
in <xref target="roadmap" format="default"/>.
For example, for a suite whose encoding type is random oracle,
the test vector gives the value for msg, u, Q0, Q1, and the
output point P.</t>
      <section anchor="nist-p-256" numbered="true" toc="default">
        <name>NIST P-256</name>
        <section anchor="p256xmdsha-256sswuro" numbered="true" toc="default">
          <name>P256_XMD:SHA-256_SSWU_RO_</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
suite   = P256_XMD:SHA-256_SSWU_RO_
dst     = QUUX-V01-CS02-with-P256_XMD:SHA-256_SSWU_RO_

msg     =
P.x     = 2c15230b26dbc6fc9a37051158c95b79656e17a1a920b11394ca91
          c44247d3e4
P.y     = 8a7a74985cc5c776cdfe4b1f19884970453912e9d31528c060be9a
          b5c43e8415
u[0]    = ad5342c66a6dd0ff080df1da0ea1c04b96e0330dd89406465eeba1
          1582515009
u[1]    = 8c0f1d43204bd6f6ea70ae8013070a1518b43873bcd850aafa0a9e
          220e2eea5a
Q0.x    = ab640a12220d3ff283510ff3f4b1953d09fad35795140b1c5d64f3
          13967934d5
Q0.y    = dccb558863804a881d4fff3455716c836cef230e5209594ddd33d8
          5c565b19b1
Q1.x    = 51cce63c50d972a6e51c61334f0f4875c9ac1cd2d3238412f84e31
          da7d980ef5
Q1.y    = b45d1a36d00ad90e5ec7840a60a4de411917fbe7c82c3949a6e699
          e5a1b66aac

msg     = abc
P.x     = 0bb8b87485551aa43ed54f009230450b492fead5f1cc91658775da
          c4a3388a0f
P.y     = 5c41b3d0731a27a7b14bc0bf0ccded2d8751f83493404c84a88e71
          ffd424212e
u[0]    = afe47f2ea2b10465cc26ac403194dfb68b7f5ee865cda61e9f3e07
          a537220af1
u[1]    = 379a27833b0bfe6f7bdca08e1e83c760bf9a338ab335542704edcd
          69ce9e46e0
Q0.x    = 5219ad0ddef3cc49b714145e91b2f7de6ce0a7a7dc7406c7726c7e
          373c58cb48
Q0.y    = 7950144e52d30acbec7b624c203b1996c99617d0b61c2442354301
          b191d93ecf
Q1.x    = 019b7cb4efcfeaf39f738fe638e31d375ad6837f58a852d032ff60
          c69ee3875f
Q1.y    = 589a62d2b22357fed5449bc38065b760095ebe6aeac84b01156ee4
          252715446e

msg     = abcdef0123456789
P.x     = 65038ac8f2b1def042a5df0b33b1f4eca6bff7cb0f9c6c15268118
          64e544ed80
P.y     = cad44d40a656e7aff4002a8de287abc8ae0482b5ae825822bb870d
          6df9b56ca3
u[0]    = 0fad9d125a9477d55cf9357105b0eb3a5c4259809bf87180aa01d6
          51f53d312c
u[1]    = b68597377392cd3419d8fcc7d7660948c8403b19ea78bbca4b133c
          9d2196c0fb
Q0.x    = a17bdf2965eb88074bc01157e644ed409dac97cfcf0c61c998ed0f
          a45e79e4a2
Q0.y    = 4f1bc80c70d411a3cc1d67aeae6e726f0f311639fee560c7f5a664
          554e3c9c2e
Q1.x    = 7da48bb67225c1a17d452c983798113f47e438e4202219dd0715f8
          419b274d66
Q1.y    = b765696b2913e36db3016c47edb99e24b1da30e761a8a3215dc0ec
          4d8f96e6f9

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
P.x     = 4be61ee205094282ba8a2042bcb48d88dfbb609301c49aa8b07853
          3dc65a0b5d
P.y     = 98f8df449a072c4721d241a3b1236d3caccba603f916ca680f4539
          d2bfb3c29e
u[0]    = 3bbc30446f39a7befad080f4d5f32ed116b9534626993d2cc5033f
          6f8d805919
u[1]    = 76bb02db019ca9d3c1e02f0c17f8baf617bbdae5c393a81d9ce11e
          3be1bf1d33
Q0.x    = c76aaa823aeadeb3f356909cb08f97eee46ecb157c1f56699b5efe
          bddf0e6398
Q0.y    = 776a6f45f528a0e8d289a4be12c4fab80762386ec644abf2bffb9b
          627e4352b1
Q1.x    = 418ac3d85a5ccc4ea8dec14f750a3a9ec8b85176c95a7022f39182
          6794eb5a75
Q1.y    = fd6604f69e9d9d2b74b072d14ea13050db72c932815523305cb9e8
          07cc900aff

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
P.x     = 457ae2981f70ca85d8e24c308b14db22f3e3862c5ea0f652ca38b5
          e49cd64bc5
P.y     = ecb9f0eadc9aeed232dabc53235368c1394c78de05dd96893eefa6
          2b0f4757dc
u[0]    = 4ebc95a6e839b1ae3c63b847798e85cb3c12d3817ec6ebc10af6ee
          51adb29fec
u[1]    = 4e21af88e22ea80156aff790750121035b3eefaa96b425a8716e0d
          20b4e269ee
Q0.x    = d88b989ee9d1295df413d4456c5c850b8b2fb0f5402cc5c4c7e815
          412e926db8
Q0.y    = bb4a1edeff506cf16def96afff41b16fc74f6dbd55c2210e5b8f01
          1ba32f4f40
Q1.x    = a281e34e628f3a4d2a53fa87ff973537d68ad4fbc28d3be5e8d9f6
          a2571c5a4b
Q1.y    = f6ed88a7aab56a488100e6f1174fa9810b47db13e86be999644922
          961206e184
]]></artwork>
        </section>
        <section anchor="p256xmdsha-256sswunu" numbered="true" toc="default">
          <name>P256_XMD:SHA-256_SSWU_NU_</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
suite   = P256_XMD:SHA-256_SSWU_NU_
dst     = QUUX-V01-CS02-with-P256_XMD:SHA-256_SSWU_NU_

msg     =
P.x     = f871caad25ea3b59c16cf87c1894902f7e7b2c822c3d3f73596c5a
          ce8ddd14d1
P.y     = 87b9ae23335bee057b99bac1e68588b18b5691af476234b8971bc4
          f011ddc99b
u[0]    = b22d487045f80e9edcb0ecc8d4bf77833e2bf1f3a54004d7df1d57
          f4802d311f
Q.x     = f871caad25ea3b59c16cf87c1894902f7e7b2c822c3d3f73596c5a
          ce8ddd14d1
Q.y     = 87b9ae23335bee057b99bac1e68588b18b5691af476234b8971bc4
          f011ddc99b

msg     = abc
P.x     = fc3f5d734e8dce41ddac49f47dd2b8a57257522a865c124ed02b92
          b5237befa4
P.y     = fe4d197ecf5a62645b9690599e1d80e82c500b22ac705a0b421fac
          7b47157866
u[0]    = c7f96eadac763e176629b09ed0c11992225b3a5ae99479760601cb
          d69c221e58
Q.x     = fc3f5d734e8dce41ddac49f47dd2b8a57257522a865c124ed02b92
          b5237befa4
Q.y     = fe4d197ecf5a62645b9690599e1d80e82c500b22ac705a0b421fac
          7b47157866

msg     = abcdef0123456789
P.x     = f164c6674a02207e414c257ce759d35eddc7f55be6d7f415e2cc17
          7e5d8faa84
P.y     = 3aa274881d30db70485368c0467e97da0e73c18c1d00f34775d012
          b6fcee7f97
u[0]    = 314e8585fa92068b3ea2c3bab452d4257b38be1c097d58a2189045
          6c2929614d
Q.x     = f164c6674a02207e414c257ce759d35eddc7f55be6d7f415e2cc17
          7e5d8faa84
Q.y     = 3aa274881d30db70485368c0467e97da0e73c18c1d00f34775d012
          b6fcee7f97

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
P.x     = 324532006312be4f162614076460315f7a54a6f85544da773dc659
          aca0311853
P.y     = 8d8197374bcd52de2acfefc8a54fe2c8d8bebd2a39f16be9b710e4
          b1af6ef883
u[0]    = 752d8eaa38cd785a799a31d63d99c2ae4261823b4a367b133b2c66
          27f48858ab
Q.x     = 324532006312be4f162614076460315f7a54a6f85544da773dc659
          aca0311853
Q.y     = 8d8197374bcd52de2acfefc8a54fe2c8d8bebd2a39f16be9b710e4
          b1af6ef883

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
P.x     = 5c4bad52f81f39c8e8de1260e9a06d72b8b00a0829a8ea004a610b
          0691bea5d9
P.y     = c801e7c0782af1f74f24fc385a8555da0582032a3ce038de637ccd
          cb16f7ef7b
u[0]    = 0e1527840b9df2dfbef966678ff167140f2b27c4dccd884c25014d
          ce0e41dfa3
Q.x     = 5c4bad52f81f39c8e8de1260e9a06d72b8b00a0829a8ea004a610b
          0691bea5d9
Q.y     = c801e7c0782af1f74f24fc385a8555da0582032a3ce038de637ccd
          cb16f7ef7b
]]></artwork>
        </section>
      </section>
      <section anchor="nist-p-384" numbered="true" toc="default">
        <name>NIST P-384</name>
        <section anchor="p384xmdsha-512sswuro" numbered="true" toc="default">
          <name>P384_XMD:SHA-512_SSWU_RO_</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
suite   = P384_XMD:SHA-512_SSWU_RO_
dst     = QUUX-V01-CS02-with-P384_XMD:SHA-512_SSWU_RO_

msg     =
P.x     = c3144d47428d071d4169420c91006a0bd48d7259d492af86e7f82d
          98e3497519d8550045557b7d55cc2a0f339df088b9
P.y     = aa5f165f0146101363d1b34fe65bcf638532e3b2eb1744cdbd60e9
          384c6c1838bbaea988963cc9f0f0902798e9f8058a
u[0]    = 425c1d0b099ffa6c15069b08299e6e21a204e08c2a0627f5afc242
          15d19e45bc47d70da5972ff77e33f176b5e18e8485
u[1]    = cbefdd543ed48b5a9bbbd460f559d23b388aa72157279ba0206923
          1881eb2a947d887a5b1e0a6173bc92a5700f679a14
Q0.x    = 4589af7986491d42b7ee23726c57abeade65c7b8eba12d07fbce48
          065a01a78c4b018c739034d9fabc2c4ef6176c7c40
Q0.y    = 5b2985027c29802bf2afdb8a3c95fa655ad3189a2118209bd285d4
          20268bf71e610c9533e3f4f438ba4b64f66f6fbed9
Q1.x    = cbd6c34a12a266b447b444b303d577cd5d61e3c0af19d4676ababb
          470bb795741ebf167caa9f0910a4fcc899134596d7
Q1.y    = 63df08d5d3aa8090cbb94222b34aad35e1b11414d3aef8f1a26205
          c81b4d15bbbe4faf25d77924705bf09afd8812d2f0

msg     = abc
P.x     = 7bce42d575e64bc7828478f1bba94000c3ddb02ac03052061a7b7f
          f81479823350e2a8e1da74e17be3016ab163094bcf
P.y     = 6634b2f0acb32b84b75ecfad96c676b3863cb3cec4f76c9bccef18
          94a650830e60cd1c0f20c9d05e9ee58d8a611db87d
u[0]    = 5f1149c405f484c16e09954f174ac12fb658a3fc38862b97f8e4fc
          04c184ddd0d311acc1645b9bc34f1fd422614ef660
u[1]    = ba4fd167774b14ec3242029b05905b55529b14d349f7645b5edeb1
          c49485066f404a949df7d16b65738cb0ef6d233fb5
Q0.x    = 89e5ab0cbd8a4b55a8a6cad0bce5352b63162d2dc7b93174efb1d8
          e0efe2045aa024f86f4209cf71112baad18f520dac
Q0.y    = ef156b7a53500b97c2a556c91d3b62229380dba699cfcbddec4dcb
          0c1321ca667ba0ee08e04d52ddb9fb1c8722ba0456
Q1.x    = 7ffc595738280f4af3eb33e547b104998620123244b23343b039e6
          b0c911bd100f1640cf0b5d121eeb21dd9390b7d4de
Q1.y    = 440d05c93be24f3ae979e9e224716123a7f43faae9b9961784331c
          297b24618a2235c055966c6c1c5fc8f8e8dd5e5027

msg     = abcdef0123456789
P.x     = af1a87bee29167676e41d8eb0518a9e44e570207519c11fa126c33
          f32d62bbf6d312fd5812b182d59389f26ea496e58d
P.y     = 76ab30527be12a53a3bd63457072840ea516aa945fbe2dc48a42cf
          bd031c3f93896e4a66093b2f56cc9da4694ec95f27
u[0]    = 0ba98fc5c84360aa67eabc374cb64df3bd21835adb57d8f83d5f34
          fb13d0b7d9af036d28804175cba83facb79fa1969d
u[1]    = a6f12666eca45f0d206eea969e91ae2ffe375669f43c917326b263
          1f5e57c578ca6e64ff5a3a290cdc377114f33d1924
Q0.x    = d2e7df676ceaf3db77ef48d823da1d05d00f424d2b8d0e785f8f59
          721fb3fa24f744fde77a896f692d8997d2dc52f72c
Q0.y    = 4cf7e647de29c60d852b0103f636bed22e67e83476be1e285dae54
          d03d5ea05212a0f23b1ca233d85055244572740c6b
Q1.x    = 675c9b73a8b3e3c873da720eddc23cbb19895990f049174ccabd30
          31c7167841858247864ddd717dea77b6d4d8c7836b
Q1.y    = 8b6a2d1de2a46354737393a7b69c21d97b7f9f7671e94cfadcea2d
          fea3f8b2793cfffea5addb10a491ad55f0e47b2494

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
P.x     = 5c24f67b2175279f4e94a0af9cf09213f0e7e2e3ccb6d4feae9403
          281c1962507ba0588ef895c9b7c6cff28ce1d15a1f
P.y     = 259ce2c65f35f5fb3a611e5bbf56d2979ce9de429afd6271fbda57
          c3d412c78292d0cb6f27e0ee96f91fba9f0af54327
u[0]    = c9e58d977e7cb5def41070f5c3b17aaf56602ace0ed8db0a2a3297
          976a5c0bb4bc10579179f6438ff0d8d80b5def127c
u[1]    = a9c2015bd301a3add705f1a2174ea4a536cbfa1600bd7de0cec8d6
          ce39fdd6bcaa377341093bf281e1f4dd767e0a0983
Q0.x    = 8285def22b86477eee1c2e38accd2ed2ad88c95932d6add09fbd53
          1f4359bee33d0ab804ee728efe56d0dd17f08bfd5b
Q0.y    = 6364bd0542c5709dbf0cada4b14b85a68c9eae4b4bc3ec45034b2d
          4abdc95f7cafe466deac1f6246f16d3c16f89c4d6a
Q1.x    = 4cf8c46511ade2c91caaaddd23a7a6fee04f76c8bc9467b39e3bdd
          acb3ce852c9783b7d2cefa872e42e520f59895d404
Q1.y    = c399b62266a0e827c7bd15774d2203b967e994d8323eb89bddda5d
          1c7a44270f62b1152d9f44cdc960ea4c7ea190ff4b

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
P.x     = ed18cea59aabd90a3c84b48eeb09b42409f42340aec2ec1b706872
          15fa4befc64fd4de4620d12e70b9890ad9a70e6ee8
P.y     = dbc9b0e5e718539c785b7b787829a1c01b92591aed954e08b853dc
          96fb303ba4bc8aad06712b8b3b4fae2047d6269d68
u[0]    = c4acd5ba90917a13ae55ee8d82443d40e65b6e77348d96cf6292f4
          de7da2eb5ffdbfcb9fe0887726462891c67956f177
u[1]    = 9da4e1ee3cc2e688e1ddf8cfa42317e122347d4c9db9fc298d2ab2
          a5b82c8ce1544712865a2c32d2851dfef51be99542
Q0.x    = bb5b5001c801fcf9d3e94cabef753cab38f1334b73846a38f9c3ea
          be8aa8935776daf4493d211164ac5b7f7a9237146b
Q0.y    = 46cd40a76fa001a70586b7e598d8c5eefcb54e53aa3df37cb46287
          99cffb73e722af2884a78d49721e821cc3a9ab0053
Q1.x    = d199c3954dd57dadb5c7dd37aa985d7f4dbda9adca980463874400
          39bf702b2f8f97747f46759a733ab2e3be9b6f488e
Q1.y    = b34a05bce9b77fdfde16568356f987a8d26438b6ad9a05bfe0d5bb
          2aea36173316df7191ba40acdf476f778f0ffdef7e
]]></artwork>
        </section>
        <section anchor="p384xmdsha-512sswunu" numbered="true" toc="default">
          <name>P384_XMD:SHA-512_SSWU_NU_</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
suite   = P384_XMD:SHA-512_SSWU_NU_
dst     = QUUX-V01-CS02-with-P384_XMD:SHA-512_SSWU_NU_

msg     =
P.x     = 5b87392cdbf306d62141cf266a1fcc8b6a8129469b1e4a56a16db6
          371b70279d3155514580300f77a23dbeaa70eeda32
P.y     = 9094b16177a04f5c5afac87efc78b6e65a2583a5adc91c04cd508f
          d602d528530eb54932dff8b7e156d470996606cd9c
u[0]    = fcbb8741d963930b5e6438a9724db6023c157d6091c113d80bd9fa
          05ea70d677a3cd81aa6efbeccc8f6ef3404cc87468
Q.x     = 5b87392cdbf306d62141cf266a1fcc8b6a8129469b1e4a56a16db6
          371b70279d3155514580300f77a23dbeaa70eeda32
Q.y     = 9094b16177a04f5c5afac87efc78b6e65a2583a5adc91c04cd508f
          d602d528530eb54932dff8b7e156d470996606cd9c

msg     = abc
P.x     = 496ed56a37cb85a82826a4234948dd3ceee17da6412c87242165b7
          f798b702f2292237bddac386cfcfa8f22e7b85ca2d
P.y     = 9524181274d1313c12872ea835c7ddc9444124d22aae6e474d55b1
          fe68e480250374e689e6c2745323da7222732d2cce
u[0]    = 7dadfed8a179c844a0a1a50f0754353693ccce9234244477c3749c
          1c9adc7fc6fa049829dd070952efb8931118068fe2
Q.x     = 496ed56a37cb85a82826a4234948dd3ceee17da6412c87242165b7
          f798b702f2292237bddac386cfcfa8f22e7b85ca2d
Q.y     = 9524181274d1313c12872ea835c7ddc9444124d22aae6e474d55b1
          fe68e480250374e689e6c2745323da7222732d2cce

msg     = abcdef0123456789
P.x     = a1289920ba2c52de5f384b1316788438ac5564a20c2e0f7ff0ff2f
          a34cb4488bd4683c0cc45ee6234b4a515ddda31f99
P.y     = b5e24b855275729db25cecc83ec5fc1dcf8f055ad981a0901448d8
          4c6278cd10a28f65316db5ae1f5738ed06ae9c2f55
u[0]    = ce74ea70fd691ab87dca4cb630484521030bc4065f4dcc7fef9618
          c84fdf8d55520cd1372d96546b56c5a29a996cc3f1
Q.x     = a1289920ba2c52de5f384b1316788438ac5564a20c2e0f7ff0ff2f
          a34cb4488bd4683c0cc45ee6234b4a515ddda31f99
Q.y     = b5e24b855275729db25cecc83ec5fc1dcf8f055ad981a0901448d8
          4c6278cd10a28f65316db5ae1f5738ed06ae9c2f55

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
P.x     = a0ed20ca2c7c69a6b7a3e5b9cf77d8f9bd979aa83a7f75e5f90d6b
          ecd107925e5dcbbd96978ab74a7b5e96b48135d04c
P.y     = 4c9ed613516ae3e818139b6c9aea2ac42063c06ff0303a38c101ab
          822c15d5fe6413e64adbac82a0da770cf110d7ace9
u[0]    = a5b9f4ed453690db8efdebf31bf33371519a4ba8756ac02060cbca
          44ef882d0fe9ce8439965a83f17b11e58a1f537b19
Q.x     = a0ed20ca2c7c69a6b7a3e5b9cf77d8f9bd979aa83a7f75e5f90d6b
          ecd107925e5dcbbd96978ab74a7b5e96b48135d04c
Q.y     = 4c9ed613516ae3e818139b6c9aea2ac42063c06ff0303a38c101ab
          822c15d5fe6413e64adbac82a0da770cf110d7ace9

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
P.x     = bc36cda196f8084052fc41a5c4ef5c9e1c724cc0bd83ef8eaef07b
          b2cbc3db99ff5cdb31ba3018a6afe59b0db040c980
P.y     = 5106450163d90d99d3191bc92f8a3d116f15b18b23eff8e9996481
          c6878bd16c8e202f44abc3d09325c2016b5dacc8f0
u[0]    = 99523632b22588d852f02eac546df4a69f966cba55c82937f13cc2
          6b316e561459c5d6ddadac7b782b5ab8d15efe23ee
Q.x     = bc36cda196f8084052fc41a5c4ef5c9e1c724cc0bd83ef8eaef07b
          b2cbc3db99ff5cdb31ba3018a6afe59b0db040c980
Q.y     = 5106450163d90d99d3191bc92f8a3d116f15b18b23eff8e9996481
          c6878bd16c8e202f44abc3d09325c2016b5dacc8f0
]]></artwork>
        </section>
      </section>
      <section anchor="nist-p-521" numbered="true" toc="default">
        <name>NIST P-521</name>
        <section anchor="p521xmdsha-512sswuro" numbered="true" toc="default">
          <name>P521_XMD:SHA-512_SSWU_RO_</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
suite   = P521_XMD:SHA-512_SSWU_RO_
dst     = QUUX-V01-CS02-with-P521_XMD:SHA-512_SSWU_RO_

msg     =
P.x     = 00fd767cebb2452030358d0e9cf907f525f50920c8f607889a6a35
          680727f64f4d66b161fafeb2654bea0d35086bec0a10b30b14adef
          3556ed9f7f1bc23cecc9c088
P.y     = 0169ba78d8d851e930680322596e39c78f4fe31b97e57629ef6460
          ddd68f8763fd7bd767a4e94a80d3d21a3c2ee98347e024fc73ee1c
          27166dc3fe5eeef782be411d
u[0]    = 01e5f09974e5724f25286763f00ce76238c7a6e03dc396600350ee
          2c4135fb17dc555be99a4a4bae0fd303d4f66d984ed7b6a3ba3860
          93752a855d26d559d69e7e9e
u[1]    = 00ae593b42ca2ef93ac488e9e09a5fe5a2f6fb330d18913734ff60
          2f2a761fcaaf5f596e790bcc572c9140ec03f6cccc38f767f1c197
          5a0b4d70b392d95a0c7278aa
Q0.x    = 00b70ae99b6339fffac19cb9bfde2098b84f75e50ac1e80d6acb95
          4e4534af5f0e9c4a5b8a9c10317b8e6421574bae2b133b4f2b8c6c
          e4b3063da1d91d34fa2b3a3c
Q0.y    = 007f368d98a4ddbf381fb354de40e44b19e43bb11a1278759f4ea7
          b485e1b6db33e750507c071250e3e443c1aaed61f2c28541bb54b1
          b456843eda1eb15ec2a9b36e
Q1.x    = 01143d0e9cddcdacd6a9aafe1bcf8d218c0afc45d4451239e821f5
          d2a56df92be942660b532b2aa59a9c635ae6b30e803c45a6ac8714
          32452e685d661cd41cf67214
Q1.y    = 00ff75515df265e996d702a5380defffab1a6d2bc232234c7bcffa
          433cd8aa791fbc8dcf667f08818bffa739ae25773b32073213cae9
          a0f2a917a0b1301a242dda0c

msg     = abc
P.x     = 002f89a1677b28054b50d15e1f81ed6669b5a2158211118ebdef8a
          6efc77f8ccaa528f698214e4340155abc1fa08f8f613ef14a04371
          7503d57e267d57155cf784a4
P.y     = 010e0be5dc8e753da8ce51091908b72396d3deed14ae166f66d8eb
          f0a4e7059ead169ea4bead0232e9b700dd380b316e9361cfdba55a
          08c73545563a80966ecbb86d
u[0]    = 003d00c37e95f19f358adeeaa47288ec39998039c3256e13c2a4c0
          0a7cb61a34c8969472960150a27276f2390eb5e53e47ab193351c2
          d2d9f164a85c6a5696d94fe8
u[1]    = 01f3cbd3df3893a45a2f1fecdac4d525eb16f345b03e2820d69bc5
          80f5cbe9cb89196fdf720ef933c4c0361fcfe29940fd0db0a5da6b
          afb0bee8876b589c41365f15
Q0.x    = 01b254e1c99c835836f0aceebba7d77750c48366ecb07fb658e4f5
          b76e229ae6ca5d271bb0006ffcc42324e15a6d3daae587f9049de2
          dbb0494378ffb60279406f56
Q0.y    = 01845f4af72fc2b1a5a2fe966f6a97298614288b456cfc385a425b
          686048b25c952fbb5674057e1eb055d04568c0679a8e2dda3158dc
          16ac598dbb1d006f5ad915b0
Q1.x    = 007f08e813c620e527c961b717ffc74aac7afccb9158cebc347d57
          15d5c2214f952c97e194f11d114d80d3481ed766ac0a3dba3eb73f
          6ff9ccb9304ad10bbd7b4a36
Q1.y    = 0022468f92041f9970a7cc025d71d5b647f822784d29ca7b3bc3b0
          829d6bb8581e745f8d0cc9dc6279d0450e779ac2275c4c3608064a
          d6779108a7828ebd9954caeb

msg     = abcdef0123456789
P.x     = 006e200e276a4a81760099677814d7f8794a4a5f3658442de63c18
          d2244dcc957c645e94cb0754f95fcf103b2aeaf94411847c24187b
          89fb7462ad3679066337cbc4
P.y     = 001dd8dfa9775b60b1614f6f169089d8140d4b3e4012949b52f98d
          b2deff3e1d97bf73a1fa4d437d1dcdf39b6360cc518d8ebcc0f899
          018206fded7617b654f6b168
u[0]    = 00183ee1a9bbdc37181b09ec336bcaa34095f91ef14b66b1485c16
          6720523dfb81d5c470d44afcb52a87b704dbc5c9bc9d0ef524dec2
          9884a4795f55c1359945baf3
u[1]    = 00504064fd137f06c81a7cf0f84aa7e92b6b3d56c2368f0a08f447
          76aa8930480da1582d01d7f52df31dca35ee0a7876500ece3d8fe0
          293cd285f790c9881c998d5e
Q0.x    = 0021482e8622aac14da60e656043f79a6a110cbae5012268a62dd6
          a152c41594549f373910ebed170ade892dd5a19f5d687fae7095a4
          61d583f8c4295f7aaf8cd7da
Q0.y    = 0177e2d8c6356b7de06e0b5712d8387d529b848748e54a8bc0ef5f
          1475aa569f8f492fa85c3ad1c5edc51faf7911f11359bfa2a12d2e
          f0bd73df9cb5abd1b101c8b1
Q1.x    = 00abeafb16fdbb5eb95095678d5a65c1f293291dfd20a3751dbe05
          d0a9bfe2d2eef19449fe59ec32cdd4a4adc3411177c0f2dffd0159
          438706159a1bbd0567d9b3d0
Q1.y    = 007cc657f847db9db651d91c801741060d63dab4056d0a1d3524e2
          eb0e819954d8f677aa353bd056244a88f00017e00c3ce8beeedb43
          82d83d74418bd48930c6c182

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
P.x     = 01b264a630bd6555be537b000b99a06761a9325c53322b65bdc41b
          f196711f9708d58d34b3b90faf12640c27b91c70a507998e559406
          48caa8e71098bf2bc8d24664
P.y     = 01ea9f445bee198b3ee4c812dcf7b0f91e0881f0251aab272a1220
          1fd89b1a95733fd2a699c162b639e9acdcc54fdc2f6536129b6beb
          0432be01aa8da02df5e59aaa
u[0]    = 0159871e222689aad7694dc4c3480a49807b1eedd9c8cb4ae1b219
          d5ba51655ea5b38e2e4f56b36bf3e3da44a7b139849d28f598c816
          fe1bc7ed15893b22f63363c3
u[1]    = 004ef0cffd475152f3858c0a8ccbdf7902d8261da92744e98df9b7
          fadb0a5502f29c5086e76e2cf498f47321434a40b1504911552ce4
          4ad7356a04e08729ad9411f5
Q0.x    = 0005eac7b0b81e38727efcab1e375f6779aea949c3e409b53a1d37
          aa2acbac87a7e6ad24aafbf3c52f82f7f0e21b872e88c55e17b7fa
          21ce08a94ea2121c42c2eb73
Q0.y    = 00a173b6a53a7420dbd61d4a21a7c0a52de7a5c6ce05f31403bef7
          47d16cc8604a039a73bdd6e114340e55dacd6bea8e217ffbadfb8c
          292afa3e1b2afc839a6ce7bb
Q1.x    = 01881e3c193a69e4d88d8180a6879b74782a0bc7e529233e9f84bf
          7f17d2f319c36920ffba26f9e57a1e045cc7822c834c239593b6e1
          42a694aa00c757b0db79e5e8
Q1.y    = 01558b16d396d866e476e001f2dd0758927655450b84e12f154032
          c7c2a6db837942cd9f44b814f79b4d729996ced61eec61d85c6751
          39cbffe3fbf071d2c21cfecb

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
P.x     = 00c12bc3e28db07b6b4d2a2b1167ab9e26fc2fa85c7b0498a17b03
          47edf52392856d7e28b8fa7a2dd004611159505835b687ecf1a764
          857e27e9745848c436ef3925
P.y     = 01cd287df9a50c22a9231beb452346720bb163344a41c5f5a24e83
          35b6ccc595fd436aea89737b1281aecb411eb835f0b939073fdd1d
          d4d5a2492e91ef4a3c55bcbd
u[0]    = 0033d06d17bc3b9a3efc081a05d65805a14a3050a0dd4dfb488461
          8eb5c73980a59c5a246b18f58ad022dd3630faa22889fbb8ba1593
          466515e6ab4aeb7381c26334
u[1]    = 0092290ab99c3fea1a5b8fb2ca49f859994a04faee3301cefab312
          d34227f6a2d0c3322cf76861c6a3683bdaa2dd2a6daa5d6906c663
          e065338b2344d20e313f1114
Q0.x    = 00041f6eb92af8777260718e4c22328a7d74203350c6c8f5794d99
          d5789766698f459b83d5068276716f01429934e40af3d1111a2278
          0b1e07e72238d2207e5386be
Q0.y    = 001c712f0182813942b87cab8e72337db017126f52ed797dd23458
          4ac9ae7e80dfe7abea11db02cf1855312eae1447dbaecc9d7e8c88
          0a5e76a39f6258074e1bc2e0
Q1.x    = 0125c0b69bcf55eab49280b14f707883405028e05c927cd7625d4e
          04115bd0e0e6323b12f5d43d0d6d2eff16dbcf244542f84ec05891
          1260dc3bb6512ab5db285fbd
Q1.y    = 008bddfb803b3f4c761458eb5f8a0aee3e1f7f68e9d7424405fa69
          172919899317fb6ac1d6903a432d967d14e0f80af63e7035aaae0c
          123e56862ce969456f99f102
]]></artwork>
        </section>
        <section anchor="p521xmdsha-512sswunu" numbered="true" toc="default">
          <name>P521_XMD:SHA-512_SSWU_NU_</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
suite   = P521_XMD:SHA-512_SSWU_NU_
dst     = QUUX-V01-CS02-with-P521_XMD:SHA-512_SSWU_NU_

msg     =
P.x     = 01ec604b4e1e3e4c7449b7a41e366e876655538acf51fd40d08b97
          be066f7d020634e906b1b6942f9174b417027c953d75fb6ec64b8c
          ee2a3672d4f1987d13974705
P.y     = 00944fc439b4aad2463e5c9cfa0b0707af3c9a42e37c5a57bb4ecd
          12fef9fb21508568aedcdd8d2490472df4bbafd79081c81e99f4da
          3286eddf19be47e9c4cf0e91
u[0]    = 01e4947fe62a4e47792cee2798912f672fff820b2556282d9843b4
          b465940d7683a986f93ccb0e9a191fbc09a6e770a564490d2a4ae5
          1b287ca39f69c3d910ba6a4f
Q.x     = 01ec604b4e1e3e4c7449b7a41e366e876655538acf51fd40d08b97
          be066f7d020634e906b1b6942f9174b417027c953d75fb6ec64b8c
          ee2a3672d4f1987d13974705
Q.y     = 00944fc439b4aad2463e5c9cfa0b0707af3c9a42e37c5a57bb4ecd
          12fef9fb21508568aedcdd8d2490472df4bbafd79081c81e99f4da
          3286eddf19be47e9c4cf0e91

msg     = abc
P.x     = 00c720ab56aa5a7a4c07a7732a0a4e1b909e32d063ae1b58db5f0e
          b5e09f08a9884bff55a2bef4668f715788e692c18c1915cd034a6b
          998311fcf46924ce66a2be9a
P.y     = 003570e87f91a4f3c7a56be2cb2a078ffc153862a53d5e03e5dad5
          bccc6c529b8bab0b7dbb157499e1949e4edab21cf5d10b782bc1e9
          45e13d7421ad8121dbc72b1d
u[0]    = 0019b85ef78596efc84783d42799e80d787591fe7432dee1d9fa2b
          7651891321be732ddf653fa8fefa34d86fb728db569d36b5b6ed39
          83945854b2fc2dc6a75aa25b
Q.x     = 00c720ab56aa5a7a4c07a7732a0a4e1b909e32d063ae1b58db5f0e
          b5e09f08a9884bff55a2bef4668f715788e692c18c1915cd034a6b
          998311fcf46924ce66a2be9a
Q.y     = 003570e87f91a4f3c7a56be2cb2a078ffc153862a53d5e03e5dad5
          bccc6c529b8bab0b7dbb157499e1949e4edab21cf5d10b782bc1e9
          45e13d7421ad8121dbc72b1d

msg     = abcdef0123456789
P.x     = 00bcaf32a968ff7971b3bbd9ce8edfbee1309e2019d7ff373c3838
          7a782b005dce6ceffccfeda5c6511c8f7f312f343f3a891029c585
          8f45ee0bf370aba25fc990cc
P.y     = 00923517e767532d82cb8a0b59705eec2b7779ce05f9181c7d5d5e
          25694ef8ebd4696343f0bc27006834d2517215ecf79482a84111f5
          0c1bae25044fe1dd77744bbd
u[0]    = 01dba0d7fa26a562ee8a9014ebc2cca4d66fd9de036176aca8fc11
          ef254cd1bc208847ab7701dbca7af328b3f601b11a1737a899575a
          5c14f4dca5aaca45e9935e07
Q.x     = 00bcaf32a968ff7971b3bbd9ce8edfbee1309e2019d7ff373c3838
          7a782b005dce6ceffccfeda5c6511c8f7f312f343f3a891029c585
          8f45ee0bf370aba25fc990cc
Q.y     = 00923517e767532d82cb8a0b59705eec2b7779ce05f9181c7d5d5e
          25694ef8ebd4696343f0bc27006834d2517215ecf79482a84111f5
          0c1bae25044fe1dd77744bbd

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
P.x     = 001ac69014869b6c4ad7aa8c443c255439d36b0e48a0f57b03d6fe
          9c40a66b4e2eaed2a93390679a5cc44b3a91862b34b673f0e92c83
          187da02bf3db967d867ce748
P.y     = 00d5603d530e4d62b30fccfa1d90c2206654d74291c1db1c25b86a
          051ee3fffc294e5d56f2e776853406bd09206c63d40f37ad882952
          4cf89ad70b5d6e0b4a3b7341
u[0]    = 00844da980675e1244cb209dcf3ea0aabec23bd54b2cda69fff86e
          b3acc318bf3d01bae96e9cd6f4c5ceb5539df9a7ad7fcc5e9d5469
          6081ba9782f3a0f6d14987e3
Q.x     = 001ac69014869b6c4ad7aa8c443c255439d36b0e48a0f57b03d6fe
          9c40a66b4e2eaed2a93390679a5cc44b3a91862b34b673f0e92c83
          187da02bf3db967d867ce748
Q.y     = 00d5603d530e4d62b30fccfa1d90c2206654d74291c1db1c25b86a
          051ee3fffc294e5d56f2e776853406bd09206c63d40f37ad882952
          4cf89ad70b5d6e0b4a3b7341

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
P.x     = 01801de044c517a80443d2bd4f503a9e6866750d2f94a22970f62d
          721f96e4310e4a828206d9cdeaa8f2d476705cc3bbc490a6165c68
          7668f15ec178a17e3d27349b
P.y     = 0068889ea2e1442245fe42bfda9e58266828c0263119f35a61631a
          3358330f3bb84443fcb54fcd53a1d097fccbe310489b74ee143fc2
          938959a83a1f7dd4a6fd395b
u[0]    = 01aab1fb7e5cd44ba4d9f32353a383cb1bb9eb763ed40b32bdd5f6
          66988970205998c0e44af6e2b5f6f8e48e969b3f649cae3c6ab463
          e1b274d968d91c02f00cce91
Q.x     = 01801de044c517a80443d2bd4f503a9e6866750d2f94a22970f62d
          721f96e4310e4a828206d9cdeaa8f2d476705cc3bbc490a6165c68
          7668f15ec178a17e3d27349b
Q.y     = 0068889ea2e1442245fe42bfda9e58266828c0263119f35a61631a
          3358330f3bb84443fcb54fcd53a1d097fccbe310489b74ee143fc2
          938959a83a1f7dd4a6fd395b
]]></artwork>
        </section>
      </section>
      <section anchor="curve25519" numbered="true" toc="default">
        <name>curve25519</name>
        <section anchor="curve25519xmdsha-512ell2ro" numbered="true" toc="default">
          <name>curve25519_XMD:SHA-512_ELL2_RO_</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
suite   = curve25519_XMD:SHA-512_ELL2_RO_
dst     = QUUX-V01-CS02-with-curve25519_XMD:SHA-512_ELL2_RO_

msg     =
P.x     = 2de3780abb67e861289f5749d16d3e217ffa722192d16bbd9d1bfb
          9d112b98c0
P.y     = 3b5dc2a498941a1033d176567d457845637554a2fe7a3507d21abd
          1c1bd6e878
u[0]    = 005fe8a7b8fef0a16c105e6cadf5a6740b3365e18692a9c05bfbb4
          d97f645a6a
u[1]    = 1347edbec6a2b5d8c02e058819819bee177077c9d10a4ce165aab0
          fd0252261a
Q0.x    = 36b4df0c864c64707cbf6cf36e9ee2c09a6cb93b28313c169be295
          61bb904f98
Q0.y    = 6cd59d664fb58c66c892883cd0eb792e52055284dac3907dd756b4
          5d15c3983d
Q1.x    = 3fa114783a505c0b2b2fbeef0102853c0b494e7757f2a089d0daae
          7ed9a0db2b
Q1.y    = 76c0fe7fec932aaafb8eefb42d9cbb32eb931158f469ff3050af15
          cfdbbeff94

msg     = abc
P.x     = 2b4419f1f2d48f5872de692b0aca72cc7b0a60915dd70bde432e82
          6b6abc526d
P.y     = 1b8235f255a268f0a6fa8763e97eb3d22d149343d495da1160eff9
          703f2d07dd
u[0]    = 49bed021c7a3748f09fa8cdfcac044089f7829d3531066ac9e74e0
          994e05bc7d
u[1]    = 5c36525b663e63389d886105cee7ed712325d5a97e60e140aba7e2
          ce5ae851b6
Q0.x    = 16b3d86e056b7970fa00165f6f48d90b619ad618791661b7b5e1ec
          78be10eac1
Q0.y    = 4ab256422d84c5120b278cbdfc4e1facc5baadffeccecf8ee9bf39
          46106d50ca
Q1.x    = 7ec29ddbf34539c40adfa98fcb39ec36368f47f30e8f888cc7e86f
          4d46e0c264
Q1.y    = 10d1abc1cae2d34c06e247f2141ba897657fb39f1080d54f09ce0a
          f128067c74

msg     = abcdef0123456789
P.x     = 68ca1ea5a6acf4e9956daa101709b1eee6c1bb0df1de3b90d46023
          82a104c036
P.y     = 2a375b656207123d10766e68b938b1812a4a6625ff83cb8d5e86f5
          8a4be08353
u[0]    = 6412b7485ba26d3d1b6c290a8e1435b2959f03721874939b21782d
          f17323d160
u[1]    = 24c7b46c1c6d9a21d32f5707be1380ab82db1054fde82865d5c9e3
          d968f287b2
Q0.x    = 71de3dadfe268872326c35ac512164850860567aea0e7325e6b91a
          98f86533ad
Q0.y    = 26a08b6e9a18084c56f2147bf515414b9b63f1522e1b6c5649f7d4
          b0324296ec
Q1.x    = 5704069021f61e41779e2ba6b932268316d6d2a6f064f997a22fef
          16d1eaeaca
Q1.y    = 50483c7540f64fb4497619c050f2c7fe55454ec0f0e79870bb4430
          2e34232210

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
P.x     = 096e9c8bae6c06b554c1ee69383bb0e82267e064236b3a30608d4e
          d20b73ac5a
P.y     = 1eb5a62612cafb32b16c3329794645b5b948d9f8ffe501d4e26b07
          3fef6de355
u[0]    = 5e123990f11bbb5586613ffabdb58d47f64bb5f2fa115f8ea8df01
          88e0c9e1b5
u[1]    = 5e8553eb00438a0bb1e7faa59dec6d8087f9c8011e5fb8ed9df31c
          b6c0d4ac19
Q0.x    = 7a94d45a198fb5daa381f45f2619ab279744efdd8bd8ed587fc5b6
          5d6cea1df0
Q0.y    = 67d44f85d376e64bb7d713585230cdbfafc8e2676f7568e0b6ee59
          361116a6e1
Q1.x    = 30506fb7a32136694abd61b6113770270debe593027a968a01f271
          e146e60c18
Q1.y    = 7eeee0e706b40c6b5174e551426a67f975ad5a977ee2f01e8e20a6
          d612458c3b

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
P.x     = 1bc61845a138e912f047b5e70ba9606ba2a447a4dade024c8ef3dd
          42b7bbc5fe
P.y     = 623d05e47b70e25f7f1d51dda6d7c23c9a18ce015fe3548df596ea
          9e38c69bf1
u[0]    = 20f481e85da7a3bf60ac0fb11ed1d0558fc6f941b3ac5469aa8b56
          ec883d6d7d
u[1]    = 017d57fd257e9a78913999a23b52ca988157a81b09c5442501d07f
          ed20869465
Q0.x    = 02d606e2699b918ee36f2818f2bc5013e437e673c9f9b9cdc15fd0
          c5ee913970
Q0.y    = 29e9dc92297231ef211245db9e31767996c5625dfbf92e1c8107ef
          887365de1e
Q1.x    = 38920e9b988d1ab7449c0fa9a6058192c0c797bb3d42ac34572434
          1a1aa98745
Q1.y    = 24dcc1be7c4d591d307e89049fd2ed30aae8911245a9d8554bf603
          2e5aa40d3d
]]></artwork>
        </section>
        <section anchor="curve25519xmdsha-512ell2nu" numbered="true" toc="default">
          <name>curve25519_XMD:SHA-512_ELL2_NU_</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
suite   = curve25519_XMD:SHA-512_ELL2_NU_
dst     = QUUX-V01-CS02-with-curve25519_XMD:SHA-512_ELL2_NU_

msg     =
P.x     = 1bb913f0c9daefa0b3375378ffa534bda5526c97391952a7789eb9
          76edfe4d08
P.y     = 4548368f4f983243e747b62a600840ae7c1dab5c723991f85d3a97
          68479f3ec4
u[0]    = 608d892b641f0328523802a6603427c26e55e6f27e71a91a478148
          d45b5093cd
Q.x     = 51125222da5e763d97f3c10fcc92ea6860b9ccbbd2eb1285728f56
          6721c1e65b
Q.y     = 343d2204f812d3dfc5304a5808c6c0d81a903a5d228b342442aa3c
          9ba5520a3d

msg     = abc
P.x     = 7c22950b7d900fa866334262fcaea47a441a578df43b894b4625c9
          b450f9a026
P.y     = 5547bc00e4c09685dcbc6cb6765288b386d8bdcb595fa5a6e3969e
          08097f0541
u[0]    = 46f5b22494bfeaa7f232cc8d054be68561af50230234d7d1d63d1d
          9abeca8da5
Q.x     = 7d56d1e08cb0ccb92baf069c18c49bb5a0dcd927eff8dcf75ca921
          ef7f3e6eeb
Q.y     = 404d9a7dc25c9c05c44ab9a94590e7c3fe2dcec74533a0b24b188a
          5d5dacf429

msg     = abcdef0123456789
P.x     = 31ad08a8b0deeb2a4d8b0206ca25f567ab4e042746f792f4b7973f
          3ae2096c52
P.y     = 405070c28e78b4fa269427c82827261991b9718bd6c6e95d627d70
          1a53c30db1
u[0]    = 235fe40c443766ce7e18111c33862d66c3b33267efa50d50f9e8e5
          d252a40aaa
Q.x     = 3fbe66b9c9883d79e8407150e7c2a1c8680bee496c62fabe4619a7
          2b3cabe90f
Q.y     = 08ec476147c9a0a3ff312d303dbbd076abb7551e5fce82b48ab14b
          433f8d0a7b

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
P.x     = 027877759d155b1997d0d84683a313eb78bdb493271d935b622900
          459d52ceaa
P.y     = 54d691731a53baa30707f4a87121d5169fb5d587d70fb0292b5830
          dedbec4c18
u[0]    = 001e92a544463bda9bd04ddbe3d6eed248f82de32f522669efc5dd
          ce95f46f5b
Q.x     = 227e0bb89de700385d19ec40e857db6e6a3e634b1c32962f370d26
          f84ff19683
Q.y     = 5f86ff3851d262727326a32c1bf7655a03665830fa7f1b8b1e5a09
          d85bc66e4a

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
P.x     = 5fd892c0958d1a75f54c3182a18d286efab784e774d1e017ba2fb2
          52998b5dc1
P.y     = 750af3c66101737423a4519ac792fb93337bd74ee751f19da4cf1e
          94f4d6d0b8
u[0]    = 1a68a1af9f663592291af987203393f707305c7bac9c8d63d6a729
          bdc553dc19
Q.x     = 3bcd651ee54d5f7b6013898aab251ee8ecc0688166fce6e9548d38
          472f6bd196
Q.y     = 1bb36ad9197299f111b4ef21271c41f4b7ecf5543db8bb5931307e
          bdb2eaa465
]]></artwork>
        </section>
      </section>
      <section anchor="edwards25519" numbered="true" toc="default">
        <name>edwards25519</name>
        <section anchor="edwards25519xmdsha-512ell2ro" numbered="true" toc="default">
          <name>edwards25519_XMD:SHA-512_ELL2_RO_</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
suite   = edwards25519_XMD:SHA-512_ELL2_RO_
dst     = QUUX-V01-CS02-with-edwards25519_XMD:SHA-512_ELL2_RO_

msg     =
P.x     = 3c3da6925a3c3c268448dcabb47ccde5439559d9599646a8260e47
          b1e4822fc6
P.y     = 09a6c8561a0b22bef63124c588ce4c62ea83a3c899763af26d7953
          02e115dc21
u[0]    = 03fef4813c8cb5f98c6eef88fae174e6e7d5380de2b007799ac7ee
          712d203f3a
u[1]    = 780bdddd137290c8f589dc687795aafae35f6b674668d92bf92ae7
          93e6a60c75
Q0.x    = 6549118f65bb617b9e8b438decedc73c496eaed496806d3b2eb9ee
          60b88e09a7
Q0.y    = 7315bcc8cf47ed68048d22bad602c6680b3382a08c7c5d3f439a97
          3fb4cf9feb
Q1.x    = 31dcfc5c58aa1bee6e760bf78cbe71c2bead8cebb2e397ece0f37a
          3da19c9ed2
Q1.y    = 7876d81474828d8a5928b50c82420b2bd0898d819e9550c5c82c39
          fc9bafa196

msg     = abc
P.x     = 608040b42285cc0d72cbb3985c6b04c935370c7361f4b7fbdb1ae7
          f8c1a8ecad
P.y     = 1a8395b88338f22e435bbd301183e7f20a5f9de643f11882fb237f
          88268a5531
u[0]    = 5081955c4141e4e7d02ec0e36becffaa1934df4d7a270f70679c78
          f9bd57c227
u[1]    = 005bdc17a9b378b6272573a31b04361f21c371b256252ae5463119
          aa0b925b76
Q0.x    = 5c1525bd5d4b4e034512949d187c39d48e8cd84242aa4758956e4a
          dc7d445573
Q0.y    = 2bf426cf7122d1a90abc7f2d108befc2ef415ce8c2d09695a74072
          40faa01f29
Q1.x    = 37b03bba828860c6b459ddad476c83e0f9285787a269df2156219b
          7e5c86210c
Q1.y    = 285ebf5412f84d0ad7bb4e136729a9ffd2195d5b8e73c0dc85110c
          e06958f432

msg     = abcdef0123456789
P.x     = 6d7fabf47a2dc03fe7d47f7dddd21082c5fb8f86743cd020f3fb14
          7d57161472
P.y     = 53060a3d140e7fbcda641ed3cf42c88a75411e648a1add71217f70
          ea8ec561a6
u[0]    = 285ebaa3be701b79871bcb6e225ecc9b0b32dff2d60424b4c50642
          636a78d5b3
u[1]    = 2e253e6a0ef658fedb8e4bd6a62d1544fd6547922acb3598ec6b36
          9760b81b31
Q0.x    = 3ac463dd7fddb773b069c5b2b01c0f6b340638f54ee3bd92d452fc
          ec3015b52d
Q0.y    = 7b03ba1e8db9ec0b390d5c90168a6a0b7107156c994c674b61fe69
          6cbeb46baf
Q1.x    = 0757e7e904f5e86d2d2f4acf7e01c63827fde2d363985aa7432106
          f1b3a444ec
Q1.y    = 50026c96930a24961e9d86aa91ea1465398ff8e42015e2ec1fa397
          d416f6a1c0

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
P.x     = 5fb0b92acedd16f3bcb0ef83f5c7b7a9466b5f1e0d8d217421878e
          a3686f8524
P.y     = 2eca15e355fcfa39d2982f67ddb0eea138e2994f5956ed37b7f72e
          ea5e89d2f7
u[0]    = 4fedd25431c41f2a606952e2945ef5e3ac905a42cf64b8b4d4a83c
          533bf321af
u[1]    = 02f20716a5801b843987097a8276b6d869295b2e11253751ca72c1
          09d37485a9
Q0.x    = 703e69787ea7524541933edf41f94010a201cc841c1cce60205ec3
          8513458872
Q0.y    = 32bb192c4f89106466f0874f5fd56a0d6b6f101cb714777983336c
          159a9bec75
Q1.x    = 0c9077c5c31720ed9413abe59bf49ce768506128d810cb882435aa
          90f713ef6b
Q1.y    = 7d5aec5210db638c53f050597964b74d6dda4be5b54fa73041bf90
          9ccb3826cb

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
P.x     = 0efcfde5898a839b00997fbe40d2ebe950bc81181afbd5cd6b9618
          aa336c1e8c
P.y     = 6dc2fc04f266c5c27f236a80b14f92ccd051ef1ff027f26a07f8c0
          f327d8f995
u[0]    = 6e34e04a5106e9bd59f64aba49601bf09d23b27f7b594e56d5de06
          df4a4ea33b
u[1]    = 1c1c2cb59fc053f44b86c5d5eb8c1954b64976d0302d3729ff66e8
          4068f5fd96
Q0.x    = 21091b2e3f9258c7dfa075e7ae513325a94a3d8a28e1b1cb3b5b6f
          5d65675592
Q0.y    = 41a33d324c89f570e0682cdf7bdb78852295daf8084c669f2cc969
          2896ab5026
Q1.x    = 4c07ec48c373e39a23bd7954f9e9b66eeab9e5ee1279b867b3d531
          5aa815454f
Q1.y    = 67ccac7c3cb8d1381242d8d6585c57eabaddbb5dca5243a68a8aeb
          5477d94b3a
]]></artwork>
        </section>
        <section anchor="edwards25519xmdsha-512ell2nu" numbered="true" toc="default">
          <name>edwards25519_XMD:SHA-512_ELL2_NU_</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
suite   = edwards25519_XMD:SHA-512_ELL2_NU_
dst     = QUUX-V01-CS02-with-edwards25519_XMD:SHA-512_ELL2_NU_

msg     =
P.x     = 1ff2b70ecf862799e11b7ae744e3489aa058ce805dd323a936375a
          84695e76da
P.y     = 222e314d04a4d5725e9f2aff9fb2a6b69ef375a1214eb19021ceab
          2d687f0f9b
u[0]    = 7f3e7fb9428103ad7f52db32f9df32505d7b427d894c5093f7a0f0
          374a30641d
Q.x     = 42836f691d05211ebc65ef8fcf01e0fb6328ec9c4737c26050471e
          50803022eb
Q.y     = 22cb4aaa555e23bd460262d2130d6a3c9207aa8bbb85060928beb2
          63d6d42a95

msg     = abc
P.x     = 5f13cc69c891d86927eb37bd4afc6672360007c63f68a33ab423a3
          aa040fd2a8
P.y     = 67732d50f9a26f73111dd1ed5dba225614e538599db58ba30aaea1
          f5c827fa42
u[0]    = 09cfa30ad79bd59456594a0f5d3a76f6b71c6787b04de98be5cd20
          1a556e253b
Q.x     = 333e41b61c6dd43af220c1ac34a3663e1cf537f996bab50ab66e33
          c4bd8e4e19
Q.y     = 51b6f178eb08c4a782c820e306b82c6e273ab22e258d972cd0c511
          787b2a3443

msg     = abcdef0123456789
P.x     = 1dd2fefce934ecfd7aae6ec998de088d7dd03316aa1847198aecf6
          99ba6613f1
P.y     = 2f8a6c24dd1adde73909cada6a4a137577b0f179d336685c4a955a
          0a8e1a86fb
u[0]    = 475ccff99225ef90d78cc9338e9f6a6bb7b17607c0c4428937de75
          d33edba941
Q.x     = 55186c242c78e7d0ec5b6c9553f04c6aeef64e69ec2e824472394d
          a32647cfc6
Q.y     = 5b9ea3c265ee42256a8f724f616307ef38496ef7eba391c08f99f3
          bea6fa88f0

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
P.x     = 35fbdc5143e8a97afd3096f2b843e07df72e15bfca2eaf6879bf97
          c5d3362f73
P.y     = 2af6ff6ef5ebba128b0774f4296cb4c2279a074658b083b8dcca91
          f57a603450
u[0]    = 049a1c8bd51bcb2aec339f387d1ff51428b88d0763a91bcdf69298
          14ac95d03d
Q.x     = 024b6e1621606dca8071aa97b43dce4040ca78284f2a527dcf5d0f
          bfac2b07e7
Q.y     = 5102353883d739bdc9f8a3af650342b171217167dcce34f8db5720
          8ec1dfdbf2

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
P.x     = 6e5e1f37e99345887fc12111575fc1c3e36df4b289b8759d23af14
          d774b66bff
P.y     = 2c90c3d39eb18ff291d33441b35f3262cdd307162cc97c31bfcc7a
          4245891a37
u[0]    = 3cb0178a8137cefa5b79a3a57c858d7eeeaa787b2781be4a362a2f
          0750d24fa0
Q.x     = 3e6368cff6e88a58e250c54bd27d2c989ae9b3acb6067f2651ad28
          2ab8c21cd9
Q.y     = 38fb39f1566ca118ae6c7af42810c0bb9767ae5960abb5a8ca7925
          30bfb9447d
]]></artwork>
        </section>
      </section>
      <section anchor="curve448" numbered="true" toc="default">
        <name>curve448</name>
        <section anchor="curve448xmdsha-512ell2ro" numbered="true" toc="default">
          <name>curve448_XMD:SHA-512_ELL2_RO_</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
suite   = curve448_XMD:SHA-512_ELL2_RO_
dst     = QUUX-V01-CS02-with-curve448_XMD:SHA-512_ELL2_RO_

msg     =
P.x     = da2332a516a063fef60267e6d89120bb999247ff7f52b313c8eee2
          777e03320f30996a53280b6d8c3847cfb9ea565f46310e582a3733
          4f69
P.y     = dc7be59148778dbf9fbeaeaf2ce578b9b82f8d72fe8e7073ad92f2
          77fb987b34711ba8571b30f89de8049d744ba3107399f2dc3c9d5c
          c8b2
u[0]    = e06d3a0f99597cd9fa6ccb2c3db31d163e50940d2c7504e1bfba16
          ac69c2a7cbb52df77f100c4e6908788b50ebfb7c47b2e96586ca59
          b47b
u[1]    = 88267fb8a9a813556844b3ac7861b380ad7597ed0ef030be490274
          54b83f441e34aee8682afabdae4f3deafaa894b15de9bd6af5059e
          f0ff
Q0.x    = 8219c3ff382cfe2f02a2a20f5ffd54564203edc7336022abc6b397
          3ec7e61fc2d458a81846385080febb458695746c0ffc04e080b2fd
          ecf2
Q0.y    = 9712f659ce8ddbd2bc581af3c6c359038d877174805b8772a647b3
          b0bc9d66a579f72bc9ada3b836aaf2642d909ed9b96dc686ae668a
          b5c1
Q1.x    = 2730fc1f5ea277c6ee5096eece84901d42fa3f78c018b1174c4685
          e0be780f769933d28d29b13b330352353b9e1c98bb5ea6dabdf7e5
          8e5a
Q1.y    = 5cb3a598ff66725b74c0e9f33e23b317a82a8bd6d1be02816688ef
          74a5d704c14d09440f123573666e81a01cb19d91e25a4e98bab1f2
          4668

msg     = abc
P.x     = 126bdbaa7d8690fbf97447adf5b0ead68a48e3c75fb49d4ee584d9
          7f08fadb3fd00d107455bd5a032c682d8a80b4f796960d61fc01e3
          9faf
P.y     = d973b5f9d4babfb95e1e28484068fdd3314b2e334f8bfcbccb9878
          a1b9d0247bb4294c035caf1558c7d5fe140fb440fc32f7c4637f56
          2db5
u[0]    = c0f1c170cea7276b72c0e744f4b1d6974da6a57b50bf3e0551f208
          c500a3797fd2279e9d19a3379fcb82ee31d22654645eb4e1440e0f
          012a
u[1]    = f264aea0654f5055d2fbe15a00635fd8a93c90bde40f22632da6c0
          cc2e62403261ebd0d21d08ef90704772b9f381f03d46a0a271fcde
          22ee
Q0.x    = 97f4538634980c078431983bc90dd20bffaa3c7e3d0343742738eb
          2f9a6a49357798a8900239e49b384e88acfeeaa4819de34b6be12b
          b583
Q0.y    = cd0a7ca6b2bc2f3483ece0ae77307301fe8de23d31077f792ac7a6
          bc6362178b22be3188ac29940e576d33f477be976aa1bd60272dde
          8fae
Q1.x    = 7c03c44df3e7d00f16eb363e25573f1cbe229303deb83c4744df1c
          d1f8542748d41d8eb004fa7633752c8ca82c71e30de3dda8cbe542
          3a9d
Q1.y    = eb29f9825c4f564a6b94bacf78e0eea3888597ee6a893cea9f5ebe
          7ada5edbb1a1601a98124e3c3355ed413f9661089b5a11947685c4
          371a

msg     = abcdef0123456789
P.x     = 474e477439d7a9592a13094b38c54e25828c681c7c8b81ba2d54c8
          0148a25be684ce2e8e25fc0149c10ed1f601bf0883ae16c364c6d3
          fa63
P.y     = 1989aff846273a5cc768b4624884c707f25d050b9dc9293cbe109c
          019ee084d28de004b83ebb0ba175081792c91b721215df14dabf0d
          6a70
u[0]    = 5f09c4906a56cd7b4a620fbed243b8c1bffa30e58ca6c709273e63
          e14e547f1fde8545e04b63e34d4bb2df6143ed0469172fee016040
          3e9d
u[1]    = 8816db97222c7cf1a728ae635542497683c6959f042e51c62ba270
          eb437d7e9cce9080e5c8e05b05e0b0a298823bd661d5272258c7f6
          d76e
Q0.x    = e6d0c0fd0e30e1a27d9bbee310398e2461e9199000476e57d819be
          2f343a32165bcc5e524c3feffca3b272bc801367b47032b6f5ae21
          b514
Q0.y    = 87ecc285bada245d203e67f6a5cf19876abdd4fb994b1d72f2bd21
          5b19048721359eed24d2de20d344a06cb859445a726c4c76156160
          13a7
Q1.x    = feebcf52ae07ffc9c6665912c8e6ab14adf880dba9679d1862af6a
          1eedc25b33c641af1cf8385771afec096701e247602e54c1e183ff
          d151
Q1.y    = 47a95cb1361c02caeaac9d036b99bb11e733fa2f140c9831694057
          eab0e7878b0b823891b02428ee2cb09627bb6cbf860bf72cad6b44
          61c4

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
P.x     = 9b12ca7cc0fbb013278d7ff476c64983baf7494ddec6c01e4df643
          a3ca5aff2842c5122986ed4bb0ca9f9439d497fa8615747e1dfa5d
          9788
P.y     = 80c9ba33dc4b549b1e4342c4f7ed5bcb53e5a2caf6b322bf2518c1
          3d27cfd7770200ace0af3f8f9c8fa5408b467661fd724cb770e5b1
          27dc
u[0]    = 9f3656bf8698d3da48fe5920145fa6b38e4ac91891ae6fcc36f1dd
          057a7e653d39eaade8f0009adbf3d47abfb3b4821d8331f50e8e85
          2859
u[1]    = 601f6005529f083544cd79bef793c8240fddb35ed35aa6a9d6bce0
          3a782f59a020ce4ae7a89a2a1cb3fbbcfbdc8fd5228afba13b1776
          3d22
Q0.x    = 4c961329e6aae24e793c9579fb9035d36f02e634e5dc7010eb4cfd
          fdf394adb56a6b09ea63127ea1c14b5ff0eaa5e7d1be81832a9e1e
          b4ff
Q0.y    = b9afd57b25c525e193a4305b77bef349368f7e9248851a84db2a3b
          0367098b30599fc5d396a93da7dfb1ad67cf2fdc8f9c988f95e422
          d1ba
Q1.x    = 0147be9e6313e84dba7e9b86218e5ed2e280cd84bd2b9ab65f26dd
          2010f8fc8ccb904884a8fc9c63ec6bb428c04bdc049cfae7ef920d
          4249
Q1.y    = 265038ec80101c9cec9fc10fc3c740ff9a0f27bd6969f6cbe1dbaa
          11e4fbd86cc2971728bf0672f01daed6c639454c6a5c1e56303aa6
          a6cf

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
P.x     = 63f7b02ccfdcc3dda4c2f3162b3a29cce131bfec05c937f47fbea6
          92da6c35611ea3b02056184530a7a16a266e24aa440201418650a9
          b1d6
P.y     = e7c55ef24be0109fd3a32e982809aa389e9583cc0861ff42e08b4d
          1d261f50ddaa4887642aa80a3a7658a107159d0f60c6809bf052f2
          feec
u[0]    = ec36b3337ec9b94b8a32a192617f278c72d89b0c31f19d184c29c2
          a26c7d53ce880de19d980be7ba2c43451966a3e5b9b7b3496834e7
          3868
u[1]    = 8b5ff5b833a4655293cc8f8feb940bc84e8f2e240370a002457346
          628a892cbb8abd96c1140ca044a1bca85181a0a4ffcaf8a42a95ef
          f4c9
Q0.x    = 3d94294cbb050707f5ad5a0dfc596445848c05a81d2a175a05b34e
          409748cbe98970d1a0fd4bcdc030969481d669f0ce8befe72e0e7a
          3506
Q0.y    = 11718321d9ed5ce14aaa7d1d06f6a91ca3875eb2bef70e96b54aa2
          51387629633860898faf3ec18ae47d5a6a0d605536435140d0f8e9
          802d
Q1.x    = b283ab36f5dff4d54dca265e74ca355d751983fb013f458f44dcb6
          b00302569788ed0a3567ca93be803e6a5aa883587e3a9da9368626
          6ecf
Q1.y    = 7bebe0e4520198e026127cf8bd4308db737358afaca143788637c6
          75812282336699de18e4b239e7c5e95797154b8cd00aa51b830993
          9abc
]]></artwork>
        </section>
        <section anchor="curve448xmdsha-512ell2nu" numbered="true" toc="default">
          <name>curve448_XMD:SHA-512_ELL2_NU_</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
suite   = curve448_XMD:SHA-512_ELL2_NU_
dst     = QUUX-V01-CS02-with-curve448_XMD:SHA-512_ELL2_NU_

msg     =
P.x     = ea84fb65c9404271a743b99e734888d7d5170dee33421936180745
          66b8c4faf0d751b46bcdcebbce41e44d101f93b098e150836eeb26
          3d90
P.y     = a8378c8c97c14c4127ebf6b36c9d4a6524be2b85ad76fd195315d3
          d6eecf5147c9d96edb7f574935d0e945f6664040dbe0270d4ae24d
          ab64
u[0]    = 89b0674b247b36697f028e39edb34bd9ee6ba968148447c80773ea
          54650f5f57e005f69898502ea754f3dd710562cf80f347296b15f2
          b040
Q.x     = e57024bb58651499c5e87dffb879b0bd3abfbfa9f5af2962c2597c
          61cc24e2ad7a2802d5f98bc6265ea54e7b83befb8c59afd0854f5e
          bc09
Q.y     = 0f2a66e25fba03deb43daf0dc694d6265e0f426f041a0bc5970206
          871f88a0a09b0463607ff6ac94cb3609ed74d7eb9e7842a7b5f652
          89c2

msg     = abc
P.x     = 2e7014413676426069da399013d0a825ea436f6036fc895099838d
          0c2e047b69a8c98b2b5e5a5e1d203bc58829141bbcc1bbf66d5d7c
          eb85
P.y     = 843b3542bd5c3175fa8a1160b0f5b3ce54f9650a18b0b8f02b83b6
          2f4adfda146b0ab04bf902fb098459d0cf2171c640f003df8d79ee
          e4db
u[0]    = 413957bbc65b091215af8af48ad7e24bf048e9f6d9a73aec17e998
          a2b51cfc4ccdb4c25693e764db7799619f163532ec1ce5692e1753
          0384
Q.x     = 8e4ff7f3bf4e42202441a441da4afaa6d4f32f95d0406742172e88
          af8ffa304022eb3d2fddc5cffbb0241466daf3f152fddc26184074
          12fb
Q.y     = 22e7d04d6dabbf15eee6529bf1f6a3a9efaa3a772956de1c08441d
          94ef63b163ecea2065aebb004e8cfc12cfd2f946de05277caabba1
          4a96

msg     = abcdef0123456789
P.x     = fec43c1455df411dcb549c6cd3c25915bc73b1bb1655b164b98298
          c557dc1bf6f33791a43d167375cd645a51a13e34e645d0f5a05def
          b6a5
P.y     = b9ede648411291433b4ecb333869315db05522a26c34ad87a73d52
          3fa34f77b6ae8299d992ad5dc5d0d08f708975d19124168dd7d840
          f7e4
u[0]    = fe602896e4a559685e0deb1c7c8ff4eec02cda9037bb6bd009d003
          31b0b51227b64704e2462fd9cad0ebc24cb8817c5758703f720125
          1c94
Q.x     = 1f1aefee6f36a913a0c63a69439400e00d6b900554489e3a25eaa6
          6d4b68cafd0dc63e5645701b37edd7535b1b38305efb0460d8f103
          616a
Q.y     = 2e8d502126f2ab8c125f8213c7a5fed8ca59857a8c9bd2955f938f
          4beb89b57f3edbb823bdc4fa94e15e9bbf9f644137bf865ec7659b
          deb9

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
P.x     = b1e9ec646a3d80bbb9fe4893ad6499835d926141892deae28a1099
          b7d3c8bf1b973babd5cdc59cbb1740ff3818369573e7005b5d8abe
          84af
P.y     = 73268f982e98e27091ac79d1c20f5cf0a678bf56f990788427306d
          ef1dd5a6cbf49605614429cb7948b09a19028d09c38fc6ecc28dd5
          43fb
u[0]    = 8fb83575d02983a80e69abf9592bb4fcb2f7d0a15c3899b569d276
          798d0dee60d81646dfef632f529770d162e045935e63f73a586157
          5366
Q.x     = 7c5cd86fe37dc942089a3e4983b71173ceb37353fe1e0f1b5d207b
          3183b595348a72860b3343ab20b3b9d6dd5ec5b8a36817e1f0ec1b
          6dba
Q.y     = 2bd01a61674d241f1e5c7dab88028b3055cf849ede4c6781c7c5fc
          f22ad7e65bbcf0cb2cbee89b1caeb6f616c81346564a00611f4731
          f9dc

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
P.x     = 1953f9cb8340b7968c1d820fad943cb58d132ec5db85a3bc22a408
          b834f4d14fae0826164d92f285a71977ee1ca21c48fb08ecccf71f
          b43f
P.y     = 2a5ebf1f4082bb8fa4ead0a54bb9b9d820018b06c2a9c81be048bc
          6cae60fb99099cbcb9daf82a88cb177be328283f96f6e623af362a
          6165
u[0]    = 264d09a96a80db8aac3b51d54f7f115dfe3a615e85713f2d4d4bf6
          2c47ce0e8ebe261fc3a281166e9c25ea689010639f8131ffb6d8c0
          d5c9
Q.x     = 62d81718b0b327cf3b0dd77885de6cf3202bc2c0a20bbd3af18127
          16104fb5a39878dbe92862f40c28e1ae078a0b8c25ba23c9bca5fa
          ed8a
Q.y     = 6505d475959b61e33f9e4c2c6d8033b5dbd09432993997c07ae2c2
          4a31d7a35c02e15f357aebf0178b7b8525074b2400ec3d1bb8eda1
          b9ee
]]></artwork>
        </section>
      </section>
      <section anchor="edwards448" numbered="true" toc="default">
        <name>edwards448</name>
        <section anchor="edwards448xmdsha-512ell2ro" numbered="true" toc="default">
          <name>edwards448_XMD:SHA-512_ELL2_RO_</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
suite   = edwards448_XMD:SHA-512_ELL2_RO_
dst     = QUUX-V01-CS02-with-edwards448_XMD:SHA-512_ELL2_RO_

msg     =
P.x     = 132e90a3f7110a41ad796ef3e83baff6839d5569854f5a11c16b2a
          7a26d86e32a6bcdc93e954aaea197768d04091aab18f5779ae4f85
          9d18
P.y     = 12165b672a52370f21268ce2c261c3ed32adac6a3404fbd50d31a5
          51a9111d109b0c691868aa6e9d92fd94dfa2a7397a2c111be9c432
          c0cd
u[0]    = 6369f90cf2806a86841398114dccf2ffd06d2d57c782a449df5297
          189de02384b22cf73a0b5f678fe486ad59280d15431f4a65fec93d
          0039
u[1]    = a6b424f6f6c995dec127ac862ebc93b82ab3604087d70a78189054
          b09be6c9e76ab85ee8351870bfd93dca7607fe864dac096e3f333a
          145b
Q0.x    = bb132e877b5fe35b189ee7041c53f03d943d36ea7265dce2c267cc
          5500f281a2f8981c393a05e94962f8d8017ec6ad3a6b34cbad3480
          6c12
Q0.y    = 15e1762b3c85a31ba3a9b7ba52eba6c7f02d5a802068afa8935e4d
          20ffa3e0356cf57398b8b9065554c3036a6f17e48b1f2ee0e5615c
          5d73
Q1.x    = cc44d47637c8fcbe1dc1020b87eb21205f055d6dec872efcc09b8c
          50935cdb38342340f389d6284a2b4bc5486f8c05a3fec6c7ef59c0
          2e2f
Q1.y    = c875e0cb547828c2707097c2cb6e3d7f03f92a715d6c66c370b08d
          09be11b69cc07c4798ff3ed30e64b5c1742bed375bb51b61963617
          9adb

msg     = abc
P.x     = bdb13f312a5d478f57bc852b743acd3ce51dd2de96f181ff88556f
          2b41d568ed64c2b210286be54b7c84d23cbc09a01902172a903b9c
          8c1e
P.y     = 6165182fc928064e375777e700f44e56b54b5980a42c72f747ba95
          829bd8ff80de5fd159e149a8169397029553bd89b5c28df416e10c
          b36b
u[0]    = 4c3b600dba4a986944840b32e154510af806aa095f856fdf8fe320
          1221314704aba830579f3da5e30f3300e89814324a0bef26a9cd3a
          b6a0
u[1]    = f0ae99c47274ed37fc582a7edc75aa0ddfdb7ed77e7eebbc293dca
          8312a6ff43e7c34c6796f9fe2a21c337deab5523d4825aebde5f14
          1869
Q0.x    = 46b89d09965812c09af0f484a1262246b14f25e8f68a34678302ca
          76e461968c61f6ae1d4d7f32d930bbe153f2a02085a12a15e3e11b
          5af8
Q0.y    = d1cfb0fb4572b51b0c4e27d574adb4fd5a3276e4c59709c732ef1b
          7ce9e59fd87df98a79c65fb709110a3922ffdf8b4593c3ed9caf96
          6e9e
Q1.x    = 94558aaac183cb8f263caa55eb79d1c4d44f681d2c9e2efc23927b
          6e272b7e3261f5d178dc166a6724aa2b2b5abfd4a97c6fc38ce423
          998f
Q1.y    = 1ee82f88f4e0b552b1a2bf048de95f8196d2f565de8edc1ae94d9f
          8fc8fd1a0d193f9bd58833b3bbab5ab97e85ae758b5fa01eadcb0b
          9ced

msg     = abcdef0123456789
P.x     = 01a04ed1b758a20245ea227827350eaedef92ef2860e58e5c5a982
          0a1fc6157082b3722d25c9754bc2642b126c4a9188a1fe9c8b2b39
          6b53
P.y     = 88ac7496b9ebc2b446695324e2f76ad54f4b8b21d0077ac15b69ad
          7a4abcd00e881cadbd829db2d2d0f28fc84eac4fc59264b2d14063
          e770
u[0]    = f3c7984b7cbaf248dacc25599c8ac774782c5a3ed7bd24343fb935
          602469b76541f8fd54dd78a7c54b6d991e17ec416742f92a18e8e6
          805b
u[1]    = 98fb498e5f6c40762899444a200e052ab25d336b84571f27670c7b
          cea54efc78f167a770275179dad42b6df0e3cc477abdf115f0b5f1
          cc49
Q0.x    = cc2286ee7e052ffccbc10607bfa8bb7ced94924dfc6fee6f34eedd
          fa559000f8d0d238c14cbe2e3509b39843e5711583982a80f652dd
          e738
Q0.y    = 774c9a9f0f4143ca2779b4bbb4ef397da643db7b74ac8bad1a54fb
          c86f728571fc401ca5b2a8432a018a5d545b526387f364701b232e
          3dbd
Q1.x    = e0fa0e6ff453760f52ea77ae9d605d00fc9930e9302a7779243fd6
          5e29970c3ebc26799a17ce7a24b7ea18f2c5b572fc29d6dbf73a89
          672a
Q1.y    = 6b5b06e9ab686c8377ac404f142444ded5adcd68daafde1bdfa7ef
          671708636da22adba4fda2b2472e37cddebec47fe30e38a11dcd06
          d10d

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
P.x     = 547a8928866ea7fdd556f9fe228eb414e3337338608bbf5746c1cf
          d39ad5ffa1a8f7c5c9dbd39043484a820453ee518801c38a7ec83f
          f69d
P.y     = d8b9295825b37781ba0503242951154c31fc9457f6b2a67ec5cde8
          ea577bd8214bc5525d1df3171202ef43782a7fc72982069c858357
          519b
u[0]    = 2d1aa960178c6b26f0c40648d9c8072640b449182b55b72446980b
          7cd78b81c6dd0a4195564546d0633934e74b9d73057954a77820af
          5ff7
u[1]    = 138d93e220a6c35b7afbc2329eb7e5d027f2e64551c41c0550a378
          143ae0a6b49855cf9ce5886cfb8dfc6bff6cb62139161e90868359
          b566
Q0.x    = 39ffc36783c6db4113f60c6754398c95fec611f4a8e05fe479e7f0
          df2f89556f8090bb713b57f51e3e68b02670390054656e7cbf06ea
          bd1e
Q0.y    = 1ef77f01c770dae258a5af1d08ed7f72311487e4aa273c8ce08f89
          808de5ced5ff83241199265bab4cea11a9d4ea0feed61858b4573f
          6916
Q1.x    = c7b100d6c0a39411a7d3fa37d0e1a1673d3c19af5cc721db2f1342
          607e5d860d96fab2313e0f4987f839baa3293c8a4d6fa2f30e51ba
          fa7d
Q1.y    = f6a2294965922a98247d066926b265cfc168c9a66861c07f4ac867
          5cab13a1486d1d614ac8a56095531ebc4f8233e9d5942436d6d61e
          5a1c

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
P.x     = c7c7899dab9813b5d10cadf43aa0cf5f26c21e98e5c0ffbe690059
          67dbfd066e5564bdc6c67adeb87f55951c4a077c8d4a6095a23559
          3201
P.y     = 547c2293a8b8489270957118e69a241227dc32c5587819269630ff
          687bb88284b88376fa8f86e0dbafc09d8dbba49a4a433fbd379d10
          3c5c
u[0]    = 967a9f376c20a33d6a041ed783fd7a6b7fba24ab92029bc69340a2
          6441c287d368b8496fb14d19631ff406e057bcf8e8553660e7e73d
          561d
u[1]    = 78d710dd21fedeb0dc93ec424e17e879935a689aa2c14b207a0055
          f1e57a44d83929731ca74fcca2fd0cb6bbaab12265fe104dd6fae4
          87a5
Q0.x    = 5f238a69135b8207607ea4dcebed925425adb75dfdb86e6e7f1279
          6f2086cba1add20f36a2e38176dd4feda1ad25aa8657728d390ce4
          b818
Q0.y    = 225a31f6a260be2b81b735ea1bdaaa65486a50777e3e3b83265e69
          a572e2054e63f0519a06537fba0d15076c993c6e19121fd077e8e4
          5ee9
Q1.x    = a1d4f1d07717adbcc3926caaf2d731532c2065c191dfca7b60a5e1
          499a1c237985807b441004b5476c896105806f8157e362ef96f16e
          7293
Q1.y    = e320a16c1417d41241f03507ca0ea48d0e494cfd8bb067107bc18a
          939c69581ecaee71a5f656fcd091688391f41ca1b23b3fad4876e6
          8e01
]]></artwork>
        </section>
        <section anchor="edwards448xmdsha-512ell2nu" numbered="true" toc="default">
          <name>edwards448_XMD:SHA-512_ELL2_NU_</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
suite   = edwards448_XMD:SHA-512_ELL2_NU_
dst     = QUUX-V01-CS02-with-edwards448_XMD:SHA-512_ELL2_NU_

msg     =
P.x     = 9edd52909ac5f8d4506149c30e1ea8709eed77c409d3ba2b3834a9
          18c4d7bf47cb11c464847fc5edfc4ec5dcb6e2e1c4a4bf2cf93914
          44af
P.y     = 6d73a9acd7c51479d59f7aab60bd0090ec44fe64d82ffea0ccff18
          ac5060632be1c44219adef88937e2f28ebab0b4edf16c501b6ae83
          7409
u[0]    = d244401e5d2f510c21944e96203cff15813d57c3f40b1a15bd73e1
          d9ac031966137e39e1111cf46e590ed4726ea9c96616a581a57cb4
          6010
Q.x     = ce981eeb6c73a7edba5c4c29af37010c398f1dbe39fe00be52100e
          b7c107f71793ce5928c2a34ce7fc37e054838d2788c46abad5b1f7
          009f
Q.y     = e822cb7fa3f0e97e1215619f13ed7fde59137dc807a37ffbb7a375
          7f948f3fb50168c7fd6a5077a1fe7e6f484ba4881c964e5fff2b99
          e9af

msg     = abc
P.x     = 2df5a5ee45640cc4e297f969c9771b36e4358463d47a530e375fe1
          3d442a17cc5f27818365eead72adee48c5911eb4ad7ed4e242f81d
          37b8
P.y     = a1ba8d111dd6338338f88c552d3338077fc5fe037860f2eb2b7496
          6a4a96f7fc59f859518caba87a1cf3fefbcace608e7b651ab5cb9e
          1eed
u[0]    = 2f3bcc6253b74569ea64a9d90ea4ee52c71bd168241eaa88c6f458
          93ffe00fe9888f2966a6308ce194cff35059d09cf59c68f3b961d0
          fd17
Q.x     = 4dc176c8c7cacf550289ae7cba158307880fa606e7bdb607d976dd
          398e60088bf1316e193b56784ea4a295884176efee84a500d46003
          7e1f
Q.y     = 711909a05b086efe857ec86729a667a531d958d17f5f7a4b9d9fa1
          59d3d7668d74ae4f4dd1b7273e2a26c68029c881255e462d046f89
          ebe0

msg     = abcdef0123456789
P.x     = 7120e8a2d8f4c34743b8afc1ec9f72fee0e9fd60d25f776fabc9a8
          bd5c3ea1d5797653b782483cad1af66e41acf04fa893844e0986be
          739c
P.y     = 6098bc3d041ba1d31074e9ca1b788c42c9db695f13ddda8d3e8275
          478d54fc4ba754c2b397ddafc021810a4068a2b3f6e6e08cfd7787
          ebd6
u[0]    = b9e80bb5fc08b259cd3b8e9f9ab722b427becf3797b2316ec94e2b
          6ff8286908fd2c70470c1290939ab14bda375185054ea4205e0ea0
          23ca
Q.x     = c7c2691fbb36a69fc3a04970d2c9881dbede0b68a69ba7c92b9160
          112293d97103b360cdca664a47ebdc31b7b60c6d5bebb6c5691a46
          c1c8
Q.y     = 8c9e09b8a17559a59cf3071f48e68c5d1fa1836f66c59bc3b76df0
          9a62df5ebb5c0ac1a6f6f71e51f876241b3e7d459f45b142891057
          eb63

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
P.x     = 1fe7630fdd70fcc20ef2463e07ab5ec990c8a60a625de07b8114d4
          d960d1ab3c3ad5e8d4e98d991bb35a4c257f31d8e9f7951112172f
          5a3b
P.y     = b81d594af4ed69062aa35c2a3ca5f8fbbcc1ea13a893ff79873958
          b48a79dde9b2a9422376d66d1bb1321c6bb90e18ae413c4669e16b
          63c7
u[0]    = 9849d55e9866d3ffb6f2bcbd45dfba339fc02138f07b30b669b088
          be9a8d17bcb639943fcd2e920f6eda62f32b1aca5c871d93013cdf
          1d01
Q.x     = cd18e60afd20ce97349af7732e50f2d8da587187dbabf767abbffc
          be08abef5c60f300a502f8d4b841c6076e218a301fad6c58da3b81
          61f5
Q.y     = 6dac55c4fdde9118fb8f64d02b1268467fe709eac8b84d2cef0db2
          c786b51916fdccdc7d0999ab073b1e743603dfba27425d282570bb
          6373

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
P.x     = e6856da5667f5083bddc84e447578522373fe36b45af60245d5e40
          adbe2c1934918a1d2071a1826dbbaed45bbaef0d888a4ffd513281
          26a0
P.y     = 3e2108cc4d0a88c5bceb7a0ac983b1f3b224efa288f59178f2cc30
          615635d1269be84482cc443035bfae0a01f25a262b3b650c778162
          4c1e
u[0]    = 74e63d0db5942bc43c2505caf4b71eb5a826ce0f3f4f23ba2bbbd0
          9948a0b0eee887163a93a90566b456c687bb8671ef2e2fe4e51ebd
          8def
Q.x     = 60d1975f6f5b78a8e6edf580958acead694b229a7b35e79b1f214d
          e76b2391d3fa39ccb1b0d19d719f37f91fc191c554b97acff501af
          6fac
Q.y     = 5dbd9a91c9865928da7fffcd548ad4da813539d349aa40798fed5d
          33c872ca56e6545ca0b851eba4b1b05cf9a710b15c94de700a6d6d
          d1c8
]]></artwork>
        </section>
      </section>
      <section anchor="secp256k1" numbered="true" toc="default">
        <name>secp256k1</name>
        <section anchor="secp256k1xmdsha-256sswuro" numbered="true" toc="default">
          <name>secp256k1_XMD:SHA-256_SSWU_RO_</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
suite   = secp256k1_XMD:SHA-256_SSWU_RO_
dst     = QUUX-V01-CS02-with-secp256k1_XMD:SHA-256_SSWU_RO_

msg     =
P.x     = c1cae290e291aee617ebaef1be6d73861479c48b841eaba9b7b585
          2ddfeb1346
P.y     = 64fa678e07ae116126f08b022a94af6de15985c996c3a91b64c406
          a960e51067
u[0]    = 6b0f9910dd2ba71c78f2ee9f04d73b5f4c5f7fc773a701abea1e57
          3cab002fb3
u[1]    = 1ae6c212e08fe1a5937f6202f929a2cc8ef4ee5b9782db68b0d579
          9fd8f09e16
Q0.x    = 74519ef88b32b425a095e4ebcc84d81b64e9e2c2675340a720bb1a
          1857b99f1e
Q0.y    = c174fa322ab7c192e11748beed45b508e9fdb1ce046dee9c2cd3a2
          a86b410936
Q1.x    = 44548adb1b399263ded3510554d28b4bead34b8cf9a37b4bd0bd2b
          a4db87ae63
Q1.y    = 96eb8e2faf05e368efe5957c6167001760233e6dd2487516b46ae7
          25c4cce0c6

msg     = abc
P.x     = 3377e01eab42db296b512293120c6cee72b6ecf9f9205760bd9ff1
          1fb3cb2c4b
P.y     = 7f95890f33efebd1044d382a01b1bee0900fb6116f94688d487c6c
          7b9c8371f6
u[0]    = 128aab5d3679a1f7601e3bdf94ced1f43e491f544767e18a4873f3
          97b08a2b61
u[1]    = 5897b65da3b595a813d0fdcc75c895dc531be76a03518b044daaa0
          f2e4689e00
Q0.x    = 07dd9432d426845fb19857d1b3a91722436604ccbbbadad8523b8f
          c38a5322d7
Q0.y    = 604588ef5138cffe3277bbd590b8550bcbe0e523bbaf1bed4014a4
          67122eb33f
Q1.x    = e9ef9794d15d4e77dde751e06c182782046b8dac05f8491eb88764
          fc65321f78
Q1.y    = cb07ce53670d5314bf236ee2c871455c562dd76314aa41f012919f
          e8e7f717b3

msg     = abcdef0123456789
P.x     = bac54083f293f1fe08e4a70137260aa90783a5cb84d3f35848b324
          d0674b0e3a
P.y     = 4436476085d4c3c4508b60fcf4389c40176adce756b398bdee27bc
          a19758d828
u[0]    = ea67a7c02f2cd5d8b87715c169d055a22520f74daeb080e6180958
          380e2f98b9
u[1]    = 7434d0d1a500d38380d1f9615c021857ac8d546925f5f2355319d8
          23a478da18
Q0.x    = 576d43ab0260275adf11af990d130a5752704f7947862876172080
          8862544b5d
Q0.y    = 643c4a7fb68ae6cff55edd66b809087434bbaff0c07f3f9ec4d49b
          b3c16623c3
Q1.x    = f89d6d261a5e00fe5cf45e827b507643e67c2a947a20fd9ad71039
          f8b0e29ff8
Q1.y    = b33855e0cc34a9176ead91c6c3acb1aacb1ce936d563bc1cee1dcf
          fc806caf57

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
P.x     = e2167bc785333a37aa562f021f1e881defb853839babf52a7f72b1
          02e41890e9
P.y     = f2401dd95cc35867ffed4f367cd564763719fbc6a53e969fb8496a
          1e6685d873
u[0]    = eda89a5024fac0a8207a87e8cc4e85aa3bce10745d501a30deb873
          41b05bcdf5
u[1]    = dfe78cd116818fc2c16f3837fedbe2639fab012c407eac9dfe9245
          bf650ac51d
Q0.x    = 9c91513ccfe9520c9c645588dff5f9b4e92eaf6ad4ab6f1cd720d1
          92eb58247a
Q0.y    = c7371dcd0134412f221e386f8d68f49e7fa36f9037676e163d4a06
          3fbf8a1fb8
Q1.x    = 10fee3284d7be6bd5912503b972fc52bf4761f47141a0015f1c6ae
          36848d869b
Q1.y    = 0b163d9b4bf21887364332be3eff3c870fa053cf508732900fc69a
          6eb0e1b672

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
P.x     = e3c8d35aaaf0b9b647e88a0a0a7ee5d5bed5ad38238152e4e6fd8c
          1f8cb7c998
P.y     = 8446eeb6181bf12f56a9d24e262221cc2f0c4725c7e3803024b588
          8ee5823aa6
u[0]    = 8d862e7e7e23d7843fe16d811d46d7e6480127a6b78838c277bca1
          7df6900e9f
u[1]    = 68071d2530f040f081ba818d3c7188a94c900586761e9115efa47a
          e9bd847938
Q0.x    = b32b0ab55977b936f1e93fdc68cec775e13245e161dbfe556bbb1f
          72799b4181
Q0.y    = 2f5317098360b722f132d7156a94822641b615c91f8663be691698
          70a12af9e8
Q1.x    = 148f98780f19388b9fa93e7dc567b5a673e5fca7079cd9cdafd719
          82ec4c5e12
Q1.y    = 3989645d83a433bc0c001f3dac29af861f33a6fd1e04f4b36873f5
          bff497298a
]]></artwork>
        </section>
        <section anchor="secp256k1xmdsha-256sswunu" numbered="true" toc="default">
          <name>secp256k1_XMD:SHA-256_SSWU_NU_</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
suite   = secp256k1_XMD:SHA-256_SSWU_NU_
dst     = QUUX-V01-CS02-with-secp256k1_XMD:SHA-256_SSWU_NU_

msg     =
P.x     = a4792346075feae77ac3b30026f99c1441b4ecf666ded19b7522cf
          65c4c55c5b
P.y     = 62c59e2a6aeed1b23be5883e833912b08ba06be7f57c0e9cdc663f
          31639ff3a7
u[0]    = 0137fcd23bc3da962e8808f97474d097a6c8aa2881fceef4514173
          635872cf3b
Q.x     = a4792346075feae77ac3b30026f99c1441b4ecf666ded19b7522cf
          65c4c55c5b
Q.y     = 62c59e2a6aeed1b23be5883e833912b08ba06be7f57c0e9cdc663f
          31639ff3a7

msg     = abc
P.x     = 3f3b5842033fff837d504bb4ce2a372bfeadbdbd84a1d2b678b6e1
          d7ee426b9d
P.y     = 902910d1fef15d8ae2006fc84f2a5a7bda0e0407dc913062c3a493
          c4f5d876a5
u[0]    = e03f894b4d7caf1a50d6aa45cac27412c8867a25489e32c5ddeb50
          3229f63a2e
Q.x     = 3f3b5842033fff837d504bb4ce2a372bfeadbdbd84a1d2b678b6e1
          d7ee426b9d
Q.y     = 902910d1fef15d8ae2006fc84f2a5a7bda0e0407dc913062c3a493
          c4f5d876a5

msg     = abcdef0123456789
P.x     = 07644fa6281c694709f53bdd21bed94dab995671e4a8cd1904ec4a
          a50c59bfdf
P.y     = c79f8d1dad79b6540426922f7fbc9579c3018dafeffcd4552b1626
          b506c21e7b
u[0]    = e7a6525ae7069ff43498f7f508b41c57f80563c1fe4283510b3224
          46f32af41b
Q.x     = 07644fa6281c694709f53bdd21bed94dab995671e4a8cd1904ec4a
          a50c59bfdf
Q.y     = c79f8d1dad79b6540426922f7fbc9579c3018dafeffcd4552b1626
          b506c21e7b

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
P.x     = b734f05e9b9709ab631d960fa26d669c4aeaea64ae62004b9d34f4
          83aa9acc33
P.y     = 03fc8a4a5a78632e2eb4d8460d69ff33c1d72574b79a35e402e801
          f2d0b1d6ee
u[0]    = d97cf3d176a2f26b9614a704d7d434739d194226a706c886c5c3c3
          9806bc323c
Q.x     = b734f05e9b9709ab631d960fa26d669c4aeaea64ae62004b9d34f4
          83aa9acc33
Q.y     = 03fc8a4a5a78632e2eb4d8460d69ff33c1d72574b79a35e402e801
          f2d0b1d6ee

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
P.x     = 17d22b867658977b5002dbe8d0ee70a8cfddec3eec50fb93f36136
          070fd9fa6c
P.y     = e9178ff02f4dab73480f8dd590328aea99856a7b6cc8e5a6cdf289
          ecc2a51718
u[0]    = a9ffbeee1d6e41ac33c248fb3364612ff591b502386c1bf6ac4aaf
          1ea51f8c3b
Q.x     = 17d22b867658977b5002dbe8d0ee70a8cfddec3eec50fb93f36136
          070fd9fa6c
Q.y     = e9178ff02f4dab73480f8dd590328aea99856a7b6cc8e5a6cdf289
          ecc2a51718
]]></artwork>
        </section>
      </section>
      <section anchor="bls12-381-g1" numbered="true" toc="default">
        <name>BLS12-381 G1</name>
        <section anchor="bls12381g1xmdsha-256sswuro" numbered="true" toc="default">
          <name>BLS12381G1_XMD:SHA-256_SSWU_RO_</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
suite   = BLS12381G1_XMD:SHA-256_SSWU_RO_
dst     = QUUX-V01-CS02-with-BLS12381G1_XMD:SHA-256_SSWU_RO_

msg     =
P.x     = 052926add2207b76ca4fa57a8734416c8dc95e24501772c8142787
          00eed6d1e4e8cf62d9c09db0fac349612b759e79a1
P.y     = 08ba738453bfed09cb546dbb0783dbb3a5f1f566ed67bb6be0e8c6
          7e2e81a4cc68ee29813bb7994998f3eae0c9c6a265
u[0]    = 0ba14bd907ad64a016293ee7c2d276b8eae71f25a4b941eece7b0d
          89f17f75cb3ae5438a614fb61d6835ad59f29c564f
u[1]    = 019b9bd7979f12657976de2884c7cce192b82c177c80e0ec604436
          a7f538d231552f0d96d9f7babe5fa3b19b3ff25ac9
Q0.x    = 11a3cce7e1d90975990066b2f2643b9540fa40d6137780df4e753a
          8054d07580db3b7f1f03396333d4a359d1fe3766fe
Q0.y    = 0eeaf6d794e479e270da10fdaf768db4c96b650a74518fc67b04b0
          3927754bac66f3ac720404f339ecdcc028afa091b7
Q1.x    = 160003aaf1632b13396dbad518effa00fff532f604de1a7fc2082f
          f4cb0afa2d63b2c32da1bef2bf6c5ca62dc6b72f9c
Q1.y    = 0d8bb2d14e20cf9f6036152ed386d79189415b6d015a20133acb4e
          019139b94e9c146aaad5817f866c95d609a361735e

msg     = abc
P.x     = 03567bc5ef9c690c2ab2ecdf6a96ef1c139cc0b2f284dca0a9a794
          3388a49a3aee664ba5379a7655d3c68900be2f6903
P.y     = 0b9c15f3fe6e5cf4211f346271d7b01c8f3b28be689c8429c85b67
          af215533311f0b8dfaaa154fa6b88176c229f2885d
u[0]    = 0d921c33f2bad966478a03ca35d05719bdf92d347557ea166e5bba
          579eea9b83e9afa5c088573c2281410369fbd32951
u[1]    = 003574a00b109ada2f26a37a91f9d1e740dffd8d69ec0c35e1e9f4
          652c7dba61123e9dd2e76c655d956e2b3462611139
Q0.x    = 125435adce8e1cbd1c803e7123f45392dc6e326d292499c2c45c58
          65985fd74fe8f042ecdeeec5ecac80680d04317d80
Q0.y    = 0e8828948c989126595ee30e4f7c931cbd6f4570735624fd25aef2
          fa41d3f79cfb4b4ee7b7e55a8ce013af2a5ba20bf2
Q1.x    = 11def93719829ecda3b46aa8c31fc3ac9c34b428982b898369608e
          4f042babee6c77ab9218aad5c87ba785481eff8ae4
Q1.y    = 0007c9cef122ccf2efd233d6eb9bfc680aa276652b0661f4f820a6
          53cec1db7ff69899f8e52b8e92b025a12c822a6ce6

msg     = abcdef0123456789
P.x     = 11e0b079dea29a68f0383ee94fed1b940995272407e3bb916bbf26
          8c263ddd57a6a27200a784cbc248e84f357ce82d98
P.y     = 03a87ae2caf14e8ee52e51fa2ed8eefe80f02457004ba4d486d6aa
          1f517c0889501dc7413753f9599b099ebcbbd2d709
u[0]    = 062d1865eb80ebfa73dcfc45db1ad4266b9f3a93219976a3790ab8
          d52d3e5f1e62f3b01795e36834b17b70e7b76246d4
u[1]    = 0cdc3e2f271f29c4ff75020857ce6c5d36008c9b48385ea2f2bf6f
          96f428a3deb798aa033cd482d1cdc8b30178b08e3a
Q0.x    = 08834484878c217682f6d09a4b51444802fdba3d7f2df9903a0dda
          db92130ebbfa807fffa0eabf257d7b48272410afff
Q0.y    = 0b318f7ecf77f45a0f038e62d7098221d2dbbca2a394164e2e3fe9
          53dc714ac2cde412d8f2d7f0c03b259e6795a2508e
Q1.x    = 158418ed6b27e2549f05531a8281b5822b31c3bf3144277fbb977f
          8d6e2694fedceb7011b3c2b192f23e2a44b2bd106e
Q1.y    = 1879074f344471fac5f839e2b4920789643c075792bec5af4282c7
          3f7941cda5aa77b00085eb10e206171b9787c4169f

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
P.x     = 15f68eaa693b95ccb85215dc65fa81038d69629f70aeee0d0f677c
          f22285e7bf58d7cb86eefe8f2e9bc3f8cb84fac488
P.y     = 1807a1d50c29f430b8cafc4f8638dfeeadf51211e1602a5f184443
          076715f91bb90a48ba1e370edce6ae1062f5e6dd38
u[0]    = 010476f6a060453c0b1ad0b628f3e57c23039ee16eea5e71bb87c3
          b5419b1255dc0e5883322e563b84a29543823c0e86
u[1]    = 0b1a912064fb0554b180e07af7e787f1f883a0470759c03c1b6509
          eb8ce980d1670305ae7b928226bb58fdc0a419f46e
Q0.x    = 0cbd7f84ad2c99643fea7a7ac8f52d63d66cefa06d9a56148e58b9
          84b3dd25e1f41ff47154543343949c64f88d48a710
Q0.y    = 052c00e4ed52d000d94881a5638ae9274d3efc8bc77bc0e5c650de
          04a000b2c334a9e80b85282a00f3148dfdface0865
Q1.x    = 06493fb68f0d513af08be0372f849436a787e7b701ae31cb964d96
          8021d6ba6bd7d26a38aaa5a68e8c21a6b17dc8b579
Q1.y    = 02e98f2ccf5802b05ffaac7c20018bc0c0b2fd580216c4aa2275d2
          909dc0c92d0d0bdc979226adeb57a29933536b6bb4

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
P.x     = 082aabae8b7dedb0e78aeb619ad3bfd9277a2f77ba7fad20ef6aab
          dc6c31d19ba5a6d12283553294c1825c4b3ca2dcfe
P.y     = 05b84ae5a942248eea39e1d91030458c40153f3b654ab7872d779a
          d1e942856a20c438e8d99bc8abfbf74729ce1f7ac8
u[0]    = 0a8ffa7447f6be1c5a2ea4b959c9454b431e29ccc0802bc052413a
          9c5b4f9aac67a93431bd480d15be1e057c8a08e8c6
u[1]    = 05d487032f602c90fa7625dbafe0f4a49ef4a6b0b33d7bb349ff4c
          f5410d297fd6241876e3e77b651cfc8191e40a68b7
Q0.x    = 0cf97e6dbd0947857f3e578231d07b309c622ade08f2c08b32ff37
          2bd90db19467b2563cc997d4407968d4ac80e154f8
Q0.y    = 127f0cddf2613058101a5701f4cb9d0861fd6c2a1b8e0afe194fcc
          f586a3201a53874a2761a9ab6d7220c68661a35ab3
Q1.x    = 092f1acfa62b05f95884c6791fba989bbe58044ee6355d100973bf
          9553ade52b47929264e6ae770fb264582d8dce512a
Q1.y    = 028e6d0169a72cfedb737be45db6c401d3adfb12c58c619c82b93a
          5dfcccef12290de530b0480575ddc8397cda0bbebf
]]></artwork>
        </section>
        <section anchor="bls12381g1xmdsha-256sswunu" numbered="true" toc="default">
          <name>BLS12381G1_XMD:SHA-256_SSWU_NU_</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
suite   = BLS12381G1_XMD:SHA-256_SSWU_NU_
dst     = QUUX-V01-CS02-with-BLS12381G1_XMD:SHA-256_SSWU_NU_

msg     =
P.x     = 184bb665c37ff561a89ec2122dd343f20e0f4cbcaec84e3c3052ea
          81d1834e192c426074b02ed3dca4e7676ce4ce48ba
P.y     = 04407b8d35af4dacc809927071fc0405218f1401a6d15af775810e
          4e460064bcc9468beeba82fdc751be70476c888bf3
u[0]    = 156c8a6a2c184569d69a76be144b5cdc5141d2d2ca4fe341f011e2
          5e3969c55ad9e9b9ce2eb833c81a908e5fa4ac5f03
Q.x     = 11398d3b324810a1b093f8e35aa8571cced95858207e7f49c4fd74
          656096d61d8a2f9a23cdb18a4dd11cd1d66f41f709
Q.y     = 19316b6fb2ba7717355d5d66a361899057e1e84a6823039efc7bec
          cefe09d023fb2713b1c415fcf278eb0c39a89b4f72

msg     = abc
P.x     = 009769f3ab59bfd551d53a5f846b9984c59b97d6842b20a2c565ba
          a167945e3d026a3755b6345df8ec7e6acb6868ae6d
P.y     = 1532c00cf61aa3d0ce3e5aa20c3b531a2abd2c770a790a26138183
          03c6b830ffc0ecf6c357af3317b9575c567f11cd2c
u[0]    = 147e1ed29f06e4c5079b9d14fc89d2820d32419b990c1c7bb7dbea
          2a36a045124b31ffbde7c99329c05c559af1c6cc82
Q.x     = 1998321bc27ff6d71df3051b5aec12ff47363d81a5e9d2dff55f44
          4f6ca7e7d6af45c56fd029c58237c266ef5cda5254
Q.y     = 034d274476c6307ae584f951c82e7ea85b84f72d28f4d647173235
          6121af8d62a49bc263e8eb913a6cf6f125995514ee

msg     = abcdef0123456789
P.x     = 1974dbb8e6b5d20b84df7e625e2fbfecb2cdb5f77d5eae5fb2955e
          5ce7313cae8364bc2fff520a6c25619739c6bdcb6a
P.y     = 15f9897e11c6441eaa676de141c8d83c37aab8667173cbe1dfd6de
          74d11861b961dccebcd9d289ac633455dfcc7013a3
u[0]    = 04090815ad598a06897dd89bcda860f25837d54e897298ce31e694
          7378134d3761dc59a572154963e8c954919ecfa82d
Q.x     = 17d502fa43bd6a4cad2859049a0c3ecefd60240d129be65da271a4
          c03a9c38fa78163b9d2a919d2beb57df7d609b4919
Q.y     = 109019902ae93a8732abecf2ff7fecd2e4e305eb91f41c9c3267f1
          6b6c19de138c7272947f25512745da6c466cdfd1ac

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
P.x     = 0a7a047c4a8397b3446450642c2ac64d7239b61872c9ae7a59707a
          8f4f950f101e766afe58223b3bff3a19a7f754027c
P.y     = 1383aebba1e4327ccff7cf9912bda0dbc77de048b71ef8c8a81111
          d71dc33c5e3aa6edee9cf6f5fe525d50cc50b77cc9
u[0]    = 08dccd088ca55b8bfbc96fb50bb25c592faa867a8bb78d4e94a8cc
          2c92306190244532e91feba2b7fed977e3c3bb5a1f
Q.x     = 112eb92dd2b3aa9cd38b08de4bef603f2f9fb0ca226030626a9a2e
          47ad1e9847fe0a5ed13766c339e38f514bba143b21
Q.y     = 17542ce2f8d0a54f2c5ba8c4b14e10b22d5bcd7bae2af3c965c8c8
          72b571058c720eac448276c99967ded2bf124490e1

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
P.x     = 0e7a16a975904f131682edbb03d9560d3e48214c9986bd50417a77
          108d13dc957500edf96462a3d01e62dc6cd468ef11
P.y     = 0ae89e677711d05c30a48d6d75e76ca9fb70fe06c6dd6ff988683d
          89ccde29ac7d46c53bb97a59b1901abf1db66052db
u[0]    = 0dd824886d2123a96447f6c56e3a3fa992fbfefdba17b6673f9f63
          0ff19e4d326529db37e1c1be43f905bf9202e0278d
Q.x     = 1775d400a1bacc1c39c355da7e96d2d1c97baa9430c4a3476881f8
          521c09a01f921f592607961efc99c4cd46bd78ca19
Q.y     = 1109b5d59f65964315de65a7a143e86eabc053104ed289cf480949
          317a5685fad7254ff8e7fe6d24d3104e5d55ad6370
]]></artwork>
        </section>
      </section>
      <section anchor="bls12-381-g2" numbered="true" toc="default">
        <name>BLS12-381 G2</name>
        <section anchor="bls12381g2xmdsha-256sswuro" numbered="true" toc="default">
          <name>BLS12381G2_XMD:SHA-256_SSWU_RO_</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
suite   = BLS12381G2_XMD:SHA-256_SSWU_RO_
dst     = QUUX-V01-CS02-with-BLS12381G2_XMD:SHA-256_SSWU_RO_

msg     =
P.x     = 0141ebfbdca40eb85b87142e130ab689c673cf60f1a3e98d693352
          66f30d9b8d4ac44c1038e9dcdd5393faf5c41fb78a
    + I * 05cb8437535e20ecffaef7752baddf98034139c38452458baeefab
          379ba13dff5bf5dd71b72418717047f5b0f37da03d
P.y     = 0503921d7f6a12805e72940b963c0cf3471c7b2a524950ca195d11
          062ee75ec076daf2d4bc358c4b190c0c98064fdd92
    + I * 12424ac32561493f3fe3c260708a12b7c620e7be00099a974e259d
          dc7d1f6395c3c811cdd19f1e8dbf3e9ecfdcbab8d6
u[0]    = 03dbc2cce174e91ba93cbb08f26b917f98194a2ea08d1cce75b2b9
          cc9f21689d80bd79b594a613d0a68eb807dfdc1cf8
    + I * 05a2acec64114845711a54199ea339abd125ba38253b70a92c876d
          f10598bd1986b739cad67961eb94f7076511b3b39a
u[1]    = 02f99798e8a5acdeed60d7e18e9120521ba1f47ec090984662846b
          c825de191b5b7641148c0dbc237726a334473eee94
    + I * 145a81e418d4010cc027a68f14391b30074e89e60ee7a22f87217b
          2f6eb0c4b94c9115b436e6fa4607e95a98de30a435
Q0.x    = 019ad3fc9c72425a998d7ab1ea0e646a1f6093444fc6965f1cad5a
          3195a7b1e099c050d57f45e3fa191cc6d75ed7458c
    + I * 171c88b0b0efb5eb2b88913a9e74fe111a4f68867b59db252ce586
          8af4d1254bfab77ebde5d61cd1a86fb2fe4a5a1c1d
Q0.y    = 0ba10604e62bdd9eeeb4156652066167b72c8d743b050fb4c1016c
          31b505129374f76e03fa127d6a156213576910fef3
    + I * 0eb22c7a543d3d376e9716a49b72e79a89c9bfe9feee8533ed931c
          bb5373dde1fbcd7411d8052e02693654f71e15410a
Q1.x    = 113d2b9cd4bd98aee53470b27abc658d91b47a78a51584f3d4b950
          677cfb8a3e99c24222c406128c91296ef6b45608be
    + I * 13855912321c5cb793e9d1e88f6f8d342d49c0b0dbac613ee9e17e
          3c0b3c97dfbb5a49cc3fb45102fdbaf65e0efe2632
Q1.y    = 0fd3def0b7574a1d801be44fde617162aa2e89da47f464317d9bb5
          abc3a7071763ce74180883ad7ad9a723a9afafcdca
    + I * 056f617902b3c0d0f78a9a8cbda43a26b65f602f8786540b9469b0
          60db7b38417915b413ca65f875c130bebfaa59790c

msg     = abc
P.x     = 02c2d18e033b960562aae3cab37a27ce00d80ccd5ba4b7fe0e7a21
          0245129dbec7780ccc7954725f4168aff2787776e6
    + I * 139cddbccdc5e91b9623efd38c49f81a6f83f175e80b06fc374de9
          eb4b41dfe4ca3a230ed250fbe3a2acf73a41177fd8
P.y     = 1787327b68159716a37440985269cf584bcb1e621d3a7202be6ea0
          5c4cfe244aeb197642555a0645fb87bf7466b2ba48
    + I * 00aa65dae3c8d732d10ecd2c50f8a1baf3001578f71c694e03866e
          9f3d49ac1e1ce70dd94a733534f106d4cec0eddd16
u[0]    = 15f7c0aa8f6b296ab5ff9c2c7581ade64f4ee6f1bf18f55179ff44
          a2cf355fa53dd2a2158c5ecb17d7c52f63e7195771
    + I * 01c8067bf4c0ba709aa8b9abc3d1cef589a4758e09ef53732d670f
          d8739a7274e111ba2fcaa71b3d33df2a3a0c8529dd
u[1]    = 187111d5e088b6b9acfdfad078c4dacf72dcd17ca17c82be35e79f
          8c372a693f60a033b461d81b025864a0ad051a06e4
    + I * 08b852331c96ed983e497ebc6dee9b75e373d923b729194af8e72a
          051ea586f3538a6ebb1e80881a082fa2b24df9f566
Q0.x    = 12b2e525281b5f4d2276954e84ac4f42cf4e13b6ac4228624e1776
          0faf94ce5706d53f0ca1952f1c5ef75239aeed55ad
    + I * 05d8a724db78e570e34100c0bc4a5fa84ad5839359b40398151f37
          cff5a51de945c563463c9efbdda569850ee5a53e77
Q0.y    = 02eacdc556d0bdb5d18d22f23dcb086dd106cad713777c7e640794
          3edbe0b3d1efe391eedf11e977fac55f9b94f2489c
    + I * 04bbe48bfd5814648d0b9e30f0717b34015d45a861425fabc1ee06
          fdfce36384ae2c808185e693ae97dcde118f34de41
Q1.x    = 19f18cc5ec0c2f055e47c802acc3b0e40c337256a208001dde14b2
          5afced146f37ea3d3ce16834c78175b3ed61f3c537
    + I * 15b0dadc256a258b4c68ea43605dffa6d312eef215c19e6474b3e1
          01d33b661dfee43b51abbf96fee68fc6043ac56a58
Q1.y    = 05e47c1781286e61c7ade887512bd9c2cb9f640d3be9cf87ea0bad
          24bd0ebfe946497b48a581ab6c7d4ca74b5147287f
    + I * 19f98db2f4a1fcdf56a9ced7b320ea9deecf57c8e59236b0dc21f6
          ee7229aa9705ce9ac7fe7a31c72edca0d92370c096

msg     = abcdef0123456789
P.x     = 121982811d2491fde9ba7ed31ef9ca474f0e1501297f68c298e9f4
          c0028add35aea8bb83d53c08cfc007c1e005723cd0
    + I * 190d119345b94fbd15497bcba94ecf7db2cbfd1e1fe7da034d26cb
          ba169fb3968288b3fafb265f9ebd380512a71c3f2c
P.y     = 05571a0f8d3c08d094576981f4a3b8eda0a8e771fcdcc8ecceaf13
          56a6acf17574518acb506e435b639353c2e14827c8
    + I * 0bb5e7572275c567462d91807de765611490205a941a5a6af3b169
          1bfe596c31225d3aabdf15faff860cb4ef17c7c3be
u[0]    = 0313d9325081b415bfd4e5364efaef392ecf69b087496973b22930
          3e1816d2080971470f7da112c4eb43053130b785e1
    + I * 062f84cb21ed89406890c051a0e8b9cf6c575cf6e8e18ecf63ba86
          826b0ae02548d83b483b79e48512b82a6c0686df8f
u[1]    = 1739123845406baa7be5c5dc74492051b6d42504de008c635f3535
          bb831d478a341420e67dcc7b46b2e8cba5379cca97
    + I * 01897665d9cb5db16a27657760bbea7951f67ad68f8d55f7113f24
          ba6ddd82caef240a9bfa627972279974894701d975
Q0.x    = 0f48f1ea1318ddb713697708f7327781fb39718971d72a9245b973
          1faaca4dbaa7cca433d6c434a820c28b18e20ea208
    + I * 06051467c8f85da5ba2540974758f7a1e0239a5981de441fdd8768
          0a995649c211054869c50edbac1f3a86c561ba3162
Q0.y    = 168b3d6df80069dbbedb714d41b32961ad064c227355e1ce5fac8e
          105de5e49d77f0c64867f3834848f152497eb76333
    + I * 134e0e8331cee8cb12f9c2d0742714ed9eee78a84d634c9a95f6a7
          391b37125ed48bfc6e90bf3546e99930ff67cc97bc
Q1.x    = 004fd03968cd1c99a0dd84551f44c206c84dcbdb78076c5bfee24e
          89a92c8508b52b88b68a92258403cbe1ea2da3495f
    + I * 1674338ea298281b636b2eb0fe593008d03171195fd6dcd4531e8a
          1ed1f02a72da238a17a635de307d7d24aa2d969a47
Q1.y    = 0dc7fa13fff6b12558419e0a1e94bfc3cfaf67238009991c5f24ee
          94b632c3d09e27eca329989aee348a67b50d5e236c
    + I * 169585e164c131103d85324f2d7747b23b91d66ae5d947c449c819
          4a347969fc6bbd967729768da485ba71868df8aed2

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
P.x     = 19a84dd7248a1066f737cc34502ee5555bd3c19f2ecdb3c7d9e24d
          c65d4e25e50d83f0f77105e955d78f4762d33c17da
    + I * 0934aba516a52d8ae479939a91998299c76d39cc0c035cd18813be
          c433f587e2d7a4fef038260eef0cef4d02aae3eb91
P.y     = 14f81cd421617428bc3b9fe25afbb751d934a00493524bc4e06563
          5b0555084dd54679df1536101b2c979c0152d09192
    + I * 09bcccfa036b4847c9950780733633f13619994394c23ff0b32fa6
          b795844f4a0673e20282d07bc69641cee04f5e5662
u[0]    = 025820cefc7d06fd38de7d8e370e0da8a52498be9b53cba9927b2e
          f5c6de1e12e12f188bbc7bc923864883c57e49e253
    + I * 034147b77ce337a52e5948f66db0bab47a8d038e712123bb381899
          b6ab5ad20f02805601e6104c29df18c254b8618c7b
u[1]    = 0930315cae1f9a6017c3f0c8f2314baa130e1cf13f6532bff0a8a1
          790cd70af918088c3db94bda214e896e1543629795
    + I * 10c4df2cacf67ea3cb3108b00d4cbd0b3968031ebc8eac4b1ebcef
          e84d6b715fde66bef0219951ece29d1facc8a520ef
Q0.x    = 09eccbc53df677f0e5814e3f86e41e146422834854a224bf5a83a5
          0e4cc0a77bfc56718e8166ad180f53526ea9194b57
    + I * 0c3633943f91daee715277bd644fba585168a72f96ded64fc5a384
          cce4ec884a4c3c30f08e09cd2129335dc8f67840ec
Q0.y    = 0eb6186a0457d5b12d132902d4468bfeb7315d83320b6c32f1c875
          f344efcba979952b4aa418589cb01af712f98cc555
    + I * 119e3cf167e69eb16c1c7830e8df88856d48be12e3ff0a40791a5c
          d2f7221311d4bf13b1847f371f467357b3f3c0b4c7
Q1.x    = 0eb3aabc1ddfce17ff18455fcc7167d15ce6b60ddc9eb9b59f8d40
          ab49420d35558686293d046fc1e42f864b7f60e381
    + I * 198bdfb19d7441ebcca61e8ff774b29d17da16547d2c10c273227a
          635cacea3f16826322ae85717630f0867539b5ed8b
Q1.y    = 0aaf1dee3adf3ed4c80e481c09b57ea4c705e1b8d25b897f0ceeec
          3990748716575f92abff22a1c8f4582aff7b872d52
    + I * 0d058d9061ed27d4259848a06c96c5ca68921a5d269b078650c882
          cb3c2bd424a8702b7a6ee4e0ead9982baf6843e924

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
P.x     = 01a6ba2f9a11fa5598b2d8ace0fbe0a0eacb65deceb476fbbcb64f
          d24557c2f4b18ecfc5663e54ae16a84f5ab7f62534
    + I * 11fca2ff525572795a801eed17eb12785887c7b63fb77a42be46ce
          4a34131d71f7a73e95fee3f812aea3de78b4d01569
P.y     = 0b6798718c8aed24bc19cb27f866f1c9effcdbf92397ad6448b5c9
          db90d2b9da6cbabf48adc1adf59a1a28344e79d57e
    + I * 03a47f8e6d1763ba0cad63d6114c0accbef65707825a511b251a66
          0a9b3994249ae4e63fac38b23da0c398689ee2ab52
u[0]    = 190b513da3e66fc9a3587b78c76d1d132b1152174d0b83e3c11140
          66392579a45824c5fa17649ab89299ddd4bda54935
    + I * 12ab625b0fe0ebd1367fe9fac57bb1168891846039b4216b9d9400
          7b674de2d79126870e88aeef54b2ec717a887dcf39
u[1]    = 0e6a42010cf435fb5bacc156a585e1ea3294cc81d0ceb81924d950
          40298380b164f702275892cedd81b62de3aba3f6b5
    + I * 117d9a0defc57a33ed208428cb84e54c85a6840e7648480ae42883
          8989d25d97a0af8e3255be62b25c2a85630d2dddd8
Q0.x    = 17cadf8d04a1a170f8347d42856526a24cc466cb2ddfd506cff011
          91666b7f944e31244d662c904de5440516a2b09004
    + I * 0d13ba91f2a8b0051cf3279ea0ee63a9f19bc9cb8bfcc7d78b3cbd
          8cc4fc43ba726774b28038213acf2b0095391c523e
Q0.y    = 17ef19497d6d9246fa94d35575c0f8d06ee02f21a284dbeaa78768
          cb1e25abd564e3381de87bda26acd04f41181610c5
    + I * 12c3c913ba4ed03c24f0721a81a6be7430f2971ffca8fd1729aafe
          496bb725807531b44b34b59b3ae5495e5a2dcbd5c8
Q1.x    = 16ec57b7fe04c71dfe34fb5ad84dbce5a2dbbd6ee085f1d8cd17f4
          5e8868976fc3c51ad9eeda682c7869024d24579bfd
    + I * 13103f7aace1ae1420d208a537f7d3a9679c287208026e4e3439ab
          8cd534c12856284d95e27f5e1f33eec2ce656533b0
Q1.y    = 0958b2c4c2c10fcef5a6c59b9e92c4a67b0fae3e2e0f1b6b5edad9
          c940b8f3524ba9ebbc3f2ceb3cfe377655b3163bd7
    + I * 0ccb594ed8bd14ca64ed9cb4e0aba221be540f25dd0d6ba15a4a4b
          e5d67bcf35df7853b2d8dad3ba245f1ea3697f66aa
]]></artwork>
        </section>
        <section anchor="bls12381g2xmdsha-256sswunu" numbered="true" toc="default">
          <name>BLS12381G2_XMD:SHA-256_SSWU_NU_</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
suite   = BLS12381G2_XMD:SHA-256_SSWU_NU_
dst     = QUUX-V01-CS02-with-BLS12381G2_XMD:SHA-256_SSWU_NU_

msg     =
P.x     = 00e7f4568a82b4b7dc1f14c6aaa055edf51502319c723c4dc2688c
          7fe5944c213f510328082396515734b6612c4e7bb7
    + I * 126b855e9e69b1f691f816e48ac6977664d24d99f8724868a18418
          6469ddfd4617367e94527d4b74fc86413483afb35b
P.y     = 0caead0fd7b6176c01436833c79d305c78be307da5f6af6c133c47
          311def6ff1e0babf57a0fb5539fce7ee12407b0a42
    + I * 1498aadcf7ae2b345243e281ae076df6de84455d766ab6fcdaad71
          fab60abb2e8b980a440043cd305db09d283c895e3d
u[0]    = 07355d25caf6e7f2f0cb2812ca0e513bd026ed09dda65b177500fa
          31714e09ea0ded3a078b526bed3307f804d4b93b04
    + I * 02829ce3c021339ccb5caf3e187f6370e1e2a311dec9b753631170
          63ab2015603ff52c3d3b98f19c2f65575e99e8b78c
Q.x     = 18ed3794ad43c781816c523776188deafba67ab773189b8f18c49b
          c7aa841cd81525171f7a5203b2a340579192403bef
    + I * 0727d90785d179e7b5732c8a34b660335fed03b913710b60903cf4
          954b651ed3466dc3728e21855ae822d4a0f1d06587
Q.y     = 00764a5cf6c5f61c52c838523460eb2168b5a5b43705e19cb612e0
          06f29b717897facfd15dd1c8874c915f6d53d0342d
    + I * 19290bb9797c12c1d275817aa2605ebe42275b66860f0e4d04487e
          bc2e47c50b36edd86c685a60c20a2bd584a82b011a

msg     = abc
P.x     = 108ed59fd9fae381abfd1d6bce2fd2fa220990f0f837fa30e0f279
          14ed6e1454db0d1ee957b219f61da6ff8be0d6441f
    + I * 0296238ea82c6d4adb3c838ee3cb2346049c90b96d602d7bb1b469
          b905c9228be25c627bffee872def773d5b2a2eb57d
P.y     = 033f90f6057aadacae7963b0a0b379dd46750c1c94a6357c99b65f
          63b79e321ff50fe3053330911c56b6ceea08fee656
    + I * 153606c417e59fb331b7ae6bce4fbf7c5190c33ce9402b5ebe2b70
          e44fca614f3f1382a3625ed5493843d0b0a652fc3f
u[0]    = 138879a9559e24cecee8697b8b4ad32cced053138ab913b9987277
          2dc753a2967ed50aabc907937aefb2439ba06cc50c
    + I * 0a1ae7999ea9bab1dcc9ef8887a6cb6e8f1e22566015428d220b7e
          ec90ffa70ad1f624018a9ad11e78d588bd3617f9f2
Q.x     = 0f40e1d5025ecef0d850aa0bb7bbeceab21a3d4e85e6bee857805b
          09693051f5b25428c6be343edba5f14317fcc30143
    + I * 02e0d261f2b9fee88b82804ec83db330caa75fbb12719cfa71ccce
          1c532dc4e1e79b0a6a281ed8d3817524286c8bc04c
Q.y     = 0cf4a4adc5c66da0bca4caddc6a57ecd97c8252d7526a8ff478e0d
          fed816c4d321b5c3039c6683ae9b1e6a3a38c9c0ae
    + I * 11cad1646bb3768c04be2ab2bbe1f80263b7ff6f8f9488f5bc3b68
          50e5a3e97e20acc583613c69cf3d2bfe8489744ebb

msg     = abcdef0123456789
P.x     = 038af300ef34c7759a6caaa4e69363cafeed218a1f207e93b2c70d
          91a1263d375d6730bd6b6509dcac3ba5b567e85bf3
    + I * 0da75be60fb6aa0e9e3143e40c42796edf15685cafe0279afd2a67
          c3dff1c82341f17effd402e4f1af240ea90f4b659b
P.y     = 19b148cbdf163cf0894f29660d2e7bfb2b68e37d54cc83fd4e6e62
          c020eaa48709302ef8e746736c0e19342cc1ce3df4
    + I * 0492f4fed741b073e5a82580f7c663f9b79e036b70ab3e51162359
          cec4e77c78086fe879b65ca7a47d34374c8315ac5e
u[0]    = 18c16fe362b7dbdfa102e42bdfd3e2f4e6191d479437a59db4eb71
          6986bf08ee1f42634db66bde97d6c16bbfd342b3b8
    + I * 0e37812ce1b146d998d5f92bdd5ada2a31bfd63dfe18311aa91637
          b5f279dd045763166aa1615e46a50d8d8f475f184e
Q.x     = 13a9d4a738a85c9f917c7be36b240915434b58679980010499b9ae
          8d7a1bf7fbe617a15b3cd6060093f40d18e0f19456
    + I * 16fa88754e7670366a859d6f6899ad765bf5a177abedb2740aacc9
          252c43f90cd0421373fbd5b2b76bb8f5c4886b5d37
Q.y     = 0a7fa7d82c46797039398253e8765a4194100b330dfed6d7fbb46d
          6fbf01e222088779ac336e3675c7a7a0ee05bbb6e3
    + I * 0c6ee170ab766d11fa9457cef53253f2628010b2cffc102b3b2835
          1eb9df6c281d3cfc78e9934769d661b72a5265338d

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
P.x     = 0c5ae723be00e6c3f0efe184fdc0702b64588fe77dda152ab13099
          a3bacd3876767fa7bbad6d6fd90b3642e902b208f9
    + I * 12c8c05c1d5fc7bfa847f4d7d81e294e66b9a78bc9953990c35894
          5e1f042eedafce608b67fdd3ab0cb2e6e263b9b1ad
P.y     = 04e77ddb3ede41b5ec4396b7421dd916efc68a358a0d7425bddd25
          3547f2fb4830522358491827265dfc5bcc1928a569
    + I * 11c624c56dbe154d759d021eec60fab3d8b852395a89de497e4850
          4366feedd4662d023af447d66926a28076813dd646
u[0]    = 08d4a0997b9d52fecf99427abb721f0fa779479963315fe21c6445
          250de7183e3f63bfdf86570da8929489e421d4ee95
    + I * 16cb4ccad91ec95aab070f22043916cd6a59c4ca94097f7f510043
          d48515526dc8eaaea27e586f09151ae613688d5a89
Q.x     = 0a08b2f639855dfdeaaed972702b109e2241a54de198b2b4cd12ad
          9f88fa419a6086a58d91fc805de812ea29bee427c2
    + I * 04a7442e4cb8b42ef0f41dac9ee74e65ecad3ce0851f0746dc4756
          8b0e7a8134121ed09ba054509232c49148aef62cda
Q.y     = 05d60b1f04212b2c87607458f71d770f43973511c260f0540eef3a
          565f42c7ce59aa1cea684bb2a7bcab84acd2f36c8c
    + I * 1017aa5747ba15505ece266a86b0ca9c712f41a254b76ca04094ca
          442ce45ecd224bd5544cd16685d0d1b9d156dd0531

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
P.x     = 0ea4e7c33d43e17cc516a72f76437c4bf81d8f4eac69ac355d3bf9
          b71b8138d55dc10fd458be115afa798b55dac34be1
    + I * 1565c2f625032d232f13121d3cfb476f45275c303a037faa255f9d
          a62000c2c864ea881e2bcddd111edc4a3c0da3e88d
P.y     = 043b6f5fe4e52c839148dc66f2b3751e69a0f6ebb3d056d6465d50
          d4108543ecd956e10fa1640dfd9bc0030cc2558d28
    + I * 0f8991d2a1ad662e7b6f58ab787947f1fa607fce12dde171bc1790
          3b012091b657e15333e11701edcf5b63ba2a561247
u[0]    = 03f80ce4ff0ca2f576d797a3660e3f65b274285c054feccc3215c8
          79e2c0589d376e83ede13f93c32f05da0f68fd6a10
    + I * 006488a837c5413746d868d1efb7232724da10eca410b07d8b505b
          9363bdccf0a1fc0029bad07d65b15ccfe6dd25e20d
Q.x     = 19592c812d5a50c5601062faba14c7d670711745311c879de1235a
          0a11c75aab61327bf2d1725db07ec4d6996a682886
    + I * 0eef4fa41ddc17ed47baf447a2c498548f3c72a02381313d13bef9
          16e240b61ce125539090d62d9fbb14a900bf1b8e90
Q.y     = 1260d6e0987eae96af9ebe551e08de22b37791d53f4db9e0d59da7
          36e66699735793e853e26362531fe4adf99c1883e3
    + I * 0dbace5df0a4ac4ac2f45d8fdf8aee45484576fdd6efc4f98ab9b9
          f4112309e628255e183022d98ea5ed6e47ca00306c
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="expand-testvectors" numbered="true" toc="default">
      <name>Expand test vectors</name>
      <t>This section gives test vectors for expand_message variants specified in <xref target="hashtofield-expand" format="default"/>.
The test vectors in this section were generated using code that is
available from <xref target="hash2curve-repo" format="default"/>.</t>
      <t>Each test vector in this section lists the expand_message name, hash function, and DST,
along with a series of tuples of the function inputs (msg and len_in_bytes),
output (uniform_bytes), and intermediate values (dst_prime and msg_prime).
DST and msg are represented as ASCII strings.
Intermediate and output values are represented as byte strings in hexadecimal.</t>
      <section anchor="expandmessagexmdsha-256" numbered="true" toc="default">
        <name>expand_message_xmd(SHA-256)</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
name    = expand_message_xmd
DST     = QUUX-V01-CS02-with-expander
hash    = SHA256

msg     =
len_in_bytes = 0x20
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 0000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          0000000000000000000000002000515555582d5630312d43533032
          2d776974682d657870616e6465721b
uniform_bytes = f659819a6473c1835b25ea59e3d38914c98b374f0970b7e4
          c92181df928fca88

msg     = abc
len_in_bytes = 0x20
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 0000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          0000000000000000000000616263002000515555582d5630312d43
          5330322d776974682d657870616e6465721b
uniform_bytes = 1c38f7c211ef233367b2420d04798fa4698080a8901021a7
          95a1151775fe4da7

msg     = abcdef0123456789
len_in_bytes = 0x20
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 0000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000061626364656630313233343536373839
          002000515555582d5630312d435330322d776974682d657870616e
          6465721b
uniform_bytes = 8f7e7b66791f0da0dbb5ec7c22ec637f79758c0a48170bfb
          7c4611bd304ece89

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
len_in_bytes = 0x20
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 0000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          0000000000000000000000713132385f7171717171717171717171
          717171717171717171717171717171717171717171717171717171
          717171717171717171717171717171717171717171717171717171
          717171717171717171717171717171717171717171717171717171
          717171717171717171717171717171717171717171717171717171
          717171717171717171002000515555582d5630312d435330322d77
          6974682d657870616e6465721b
uniform_bytes = 72d5aa5ec810370d1f0013c0df2f1d65699494ee2a39f72e
          1716b1b964e1c642

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
len_in_bytes = 0x20
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 0000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          0000000000000000000000613531325f6161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161002000515555582d5630312d
          435330322d776974682d657870616e6465721b
uniform_bytes = 3b8e704fc48336aca4c2a12195b720882f2162a4b7b13a9c
          350db46f429b771b

msg     =
len_in_bytes = 0x80
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 0000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          0000000000000000000000008000515555582d5630312d43533032
          2d776974682d657870616e6465721b
uniform_bytes = 8bcffd1a3cae24cf9cd7ab85628fd111bb17e3739d3b53f8
          9580d217aa79526f1708354a76a402d3569d6a9d19ef3de4d0b991
          e4f54b9f20dcde9b95a66824cbdf6c1a963a1913d43fd7ac443a02
          fc5d9d8d77e2071b86ab114a9f34150954a7531da568a1ea8c7608
          61c0cde2005afc2c114042ee7b5848f5303f0611cf297f

msg     = abc
len_in_bytes = 0x80
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 0000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          0000000000000000000000616263008000515555582d5630312d43
          5330322d776974682d657870616e6465721b
uniform_bytes = fe994ec51bdaa821598047b3121c149b364b178606d5e72b
          fbb713933acc29c186f316baecf7ea22212f2496ef3f785a27e84a
          40d8b299cec56032763eceeff4c61bd1fe65ed81decafff4a31d01
          98619c0aa0c6c51fca15520789925e813dcfd318b542f879944127
          1f4db9ee3b8092a7a2e8d5b75b73e28fb1ab6b4573c192

msg     = abcdef0123456789
len_in_bytes = 0x80
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 0000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000061626364656630313233343536373839
          008000515555582d5630312d435330322d776974682d657870616e
          6465721b
uniform_bytes = c9ec7941811b1e19ce98e21db28d22259354d4d0643e3011
          75e2f474e030d32694e9dd5520dde93f3600d8edad94e5c3649030
          88a7228cc9eff685d7eaac50d5a5a8229d083b51de4ccc3733917f
          4b9535a819b445814890b7029b5de805bf62b33a4dc7e24acdf2c9
          24e9fe50d55a6b832c8c84c7f82474b34e48c6d43867be

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
len_in_bytes = 0x80
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 0000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          0000000000000000000000713132385f7171717171717171717171
          717171717171717171717171717171717171717171717171717171
          717171717171717171717171717171717171717171717171717171
          717171717171717171717171717171717171717171717171717171
          717171717171717171717171717171717171717171717171717171
          717171717171717171008000515555582d5630312d435330322d77
          6974682d657870616e6465721b
uniform_bytes = 48e256ddba722053ba462b2b93351fc966026e6d6db49318
          9798181c5f3feea377b5a6f1d8368d7453faef715f9aecb078cd40
          2cbd548c0e179c4ed1e4c7e5b048e0a39d31817b5b24f50db58bb3
          720fe96ba53db947842120a068816ac05c159bb5266c63658b4f00
          0cbf87b1209a225def8ef1dca917bcda79a1e42acd8069

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
len_in_bytes = 0x80
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 0000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          0000000000000000000000613531325f6161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161008000515555582d5630312d
          435330322d776974682d657870616e6465721b
uniform_bytes = 396962db47f749ec3b5042ce2452b619607f27fd3939ece2
          746a7614fb83a1d097f554df3927b084e55de92c7871430d6b95c2
          a13896d8a33bc48587b1f66d21b128a1a8240d5b0c26dfe795a1a8
          42a0807bb148b77c2ef82ed4b6c9f7fcb732e7f94466c8b51e52bf
          378fba044a31f5cb44583a892f5969dcd73b3fa128816e

]]></artwork>
      </section>
      <section anchor="expandmessagexmdsha-512" numbered="true" toc="default">
        <name>expand_message_xmd(SHA-512)</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
name    = expand_message_xmd
DST     = QUUX-V01-CS02-with-expander
hash    = SHA512

msg     =
len_in_bytes = 0x20
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 0000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000002000515555
          582d5630312d435330322d776974682d657870616e6465721b
uniform_bytes = 2eaa1f7b5715f4736e6a5dbe288257abf1faa028680c1d93
          8cd62ac699ead642

msg     = abc
len_in_bytes = 0x20
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 0000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000616263002000
          515555582d5630312d435330322d776974682d657870616e646572
          1b
uniform_bytes = 0eeda81f69376c80c0f8986496f22f21124cb3c562cf1dc6
          08d2c13005553b0f

msg     = abcdef0123456789
len_in_bytes = 0x20
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 0000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000616263646566
          30313233343536373839002000515555582d5630312d435330322d
          776974682d657870616e6465721b
uniform_bytes = 2e375fc05e05e80dbf3083796fde2911789d9e8847e1fceb
          f4ca4b36e239b338

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
len_in_bytes = 0x20
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 0000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000713132385f71
          717171717171717171717171717171717171717171717171717171
          717171717171717171717171717171717171717171717171717171
          717171717171717171717171717171717171717171717171717171
          717171717171717171717171717171717171717171717171717171
          71717171717171717171717171717171717171002000515555582d
          5630312d435330322d776974682d657870616e6465721b
uniform_bytes = c37f9095fe7fe4f01c03c3540c1229e6ac8583b075100859
          20f62ec66acc0197

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
len_in_bytes = 0x20
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 0000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000613531325f61
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161610020
          00515555582d5630312d435330322d776974682d657870616e6465
          721b
uniform_bytes = af57a7f56e9ed2aa88c6eab45c8c6e7638ae02da7c92cc04
          f6648c874ebd560e

msg     =
len_in_bytes = 0x80
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 0000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000008000515555
          582d5630312d435330322d776974682d657870616e6465721b
uniform_bytes = 0687ce02eba5eb3faf1c3c539d1f04babd3c0f420edae244
          eeb2253b6c6d6865145c31458e824b4e87ca61c3442dc7c8c9872b
          0b7250aa33e0668ccebbd2b386de658ca11a1dcceb51368721ae6d
          cd2d4bc86eaebc4e0d11fa02ad053289c9b28a03da6c942b2e12c1
          4e88dbde3b0ba619d6214f47212b628f3e1b537b66efcf

msg     = abc
len_in_bytes = 0x80
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 0000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000616263008000
          515555582d5630312d435330322d776974682d657870616e646572
          1b
uniform_bytes = 779ae4fd8a92f365e4df96b9fde97b40486bb005c1a2096c
          86f55f3d92875d89045fbdbc4a0e9f2d3e1e6bcd870b2d7131d868
          225b6fe72881a81cc5166b5285393f71d2e68bb0ac603479959370
          d06bdbe5f0d8bfd9af9494d1e4029bd68ab35a561341dd3f866b3e
          f0c95c1fdfaab384ce24a23427803dda1db0c7d8d5344a

msg     = abcdef0123456789
len_in_bytes = 0x80
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 0000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000616263646566
          30313233343536373839008000515555582d5630312d435330322d
          776974682d657870616e6465721b
uniform_bytes = f0953d28846a50e9f88b7ae35b643fc43733c9618751b569
          a73960c655c068db7b9f044ad5a40d49d91c62302eaa26163c12ab
          fa982e2b5d753049e000adf7630ae117aeb1fb9b61fc724431ac68
          b369e12a9481b4294384c3c890d576a79264787bc8076e7cdabe50
          c044130e480501046920ff090c1a091c88391502f0fbac

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
len_in_bytes = 0x80
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 0000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000713132385f71
          717171717171717171717171717171717171717171717171717171
          717171717171717171717171717171717171717171717171717171
          717171717171717171717171717171717171717171717171717171
          717171717171717171717171717171717171717171717171717171
          71717171717171717171717171717171717171008000515555582d
          5630312d435330322d776974682d657870616e6465721b
uniform_bytes = 64d3e59f0bc3c5e653011c914b419ba8310390a9585311fd
          db26791d26663bd71971c347e1b5e88ba9274d2445ed9dcf48eea9
          528d807b7952924159b7c27caa4f25a2ea94df9508e70a7012dfce
          0e8021b37e59ea21b80aa9af7f1a1f2efa4fbe523c4266ce7d342a
          caacd438e452c501c131156b4945515e9008d2b155c258

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
len_in_bytes = 0x80
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 0000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000000000000000
          000000000000000000000000000000000000000000613531325f61
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161610080
          00515555582d5630312d435330322d776974682d657870616e6465
          721b
uniform_bytes = 01524feea5b22f6509f6b1e805c97df94faf4d821b01aade
          ebc89e9daaed0733b4544e50852fd3e019d58eaad6d267a134c8bc
          2c08bc46c10bfeff3ee03110bcd8a0d695d75a34092bd8b677bdd3
          69a13325549abab54f4ac907b712bdd3567f38c4554c51902b735b
          81f43a7ef6f938c7690d107c052c7e7b795ac635b3200a

]]></artwork>
      </section>
      <section anchor="expandmessagexofshake-128" numbered="true" toc="default">
        <name>expand_message_xof(SHAKE-128)</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
name    = expand_message_xof
DST     = QUUX-V01-CS02-with-expander
hash    = SHAKE_128

msg     =
len_in_bytes = 0x20
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 0020515555582d5630312d435330322d776974682d657870616e
          6465721b
uniform_bytes = eca3fe8f7f5f1d52d7ed3691c321adc7d2a0fef1f843d221
          f7002530070746de

msg     = abc
len_in_bytes = 0x20
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 6162630020515555582d5630312d435330322d776974682d6578
          70616e6465721b
uniform_bytes = c79b8ea0af10fd8871eda98334ea9d54e9e5282be9752167
          8f987718b187bc08

msg     = abcdef0123456789
len_in_bytes = 0x20
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 616263646566303132333435363738390020515555582d563031
          2d435330322d776974682d657870616e6465721b
uniform_bytes = fb6f4af2a83f6276e9d41784f1e29da5e27566167c33e5cf
          2682c30096878b73

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
len_in_bytes = 0x20
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 713132385f717171717171717171717171717171717171717171
          717171717171717171717171717171717171717171717171717171
          717171717171717171717171717171717171717171717171717171
          717171717171717171717171717171717171717171717171717171
          717171717171717171717171717171717171717171717171717100
          20515555582d5630312d435330322d776974682d657870616e6465
          721b
uniform_bytes = 125d05850db915e0683d17d044d87477e6e7b3f70a450dd0
          97761e18d1d1dcdf

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
len_in_bytes = 0x20
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 613531325f616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          61616161610020515555582d5630312d435330322d776974682d65
          7870616e6465721b
uniform_bytes = beafd026cb942c86f6a2b31bb8e6bf7173fb1b0caf3c21ea
          4b3b9d05d904fd23

msg     =
len_in_bytes = 0x80
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 0080515555582d5630312d435330322d776974682d657870616e
          6465721b
uniform_bytes = 15733b3fb22fac0e0902c220aeea48e5e47d39f36c2cc03e
          ac34367c48f2a3ebbcb3baa8a0cf17ab12fff4defc7ce22aed4718
          8b6c163e828741473bd89cc646a082cb68b8e835b1374ea9a6315d
          61db0043f4abf506c26386e84668e077c85ebd9d632f4390559b97
          9e70e9e7affbd0ac2a212c03b698efbbe940f2d164732b

msg     = abc
len_in_bytes = 0x80
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 6162630080515555582d5630312d435330322d776974682d6578
          70616e6465721b
uniform_bytes = 4ccafb6d95b91537798d1fbb25b9fbe1a5bbe1683f43a4f6
          f03ef540b811235317bfc0aefb217faca055e1b8f32dfde9eb102c
          dc026ed27caa71530e361b3adbb92ccf68da35aed8b9dc7e4e6b5d
          b0666c607a31df05513ddaf4c8ee23b0ee7f395a6e8be32eb13ca9
          7da289f2643616ac30fe9104bb0d3a67a0a525837c2dc6

msg     = abcdef0123456789
len_in_bytes = 0x80
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 616263646566303132333435363738390080515555582d563031
          2d435330322d776974682d657870616e6465721b
uniform_bytes = c8ee0e12736efbc9b47781db9d1e5db9c853684344a6776e
          b362d75b354f4b74cf60ba1373dc2e22c68efb76a022ed5391f67c
          77990802018c8cdc7af6d00c86b66a3b3ccad3f18d90f4437a1651
          86f6601cf0bb281ea5d80d1de20fe22bb2e2d8acab0c043e76e3a0
          f34e0a1e66c9ade4fef9ef3b431130ad6f232babe9fe68

msg     = q128_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
          qqqqqqqqqqqqqqqqqqqqqqqqq
len_in_bytes = 0x80
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 713132385f717171717171717171717171717171717171717171
          717171717171717171717171717171717171717171717171717171
          717171717171717171717171717171717171717171717171717171
          717171717171717171717171717171717171717171717171717171
          717171717171717171717171717171717171717171717171717100
          80515555582d5630312d435330322d776974682d657870616e6465
          721b
uniform_bytes = 3eebe6721b2ec746629856dc2dd3f03a830dabfefd7e2d1e
          72aaf2127d6ad17c988b5762f32e6edf61972378a4106dc4b63fa1
          08ad03b793eedf4588f34c4df2a95b30995a464cb3ee31d6dca30a
          dbfc90ffdf5414d7893082c55b269d9ec9cd6d2a715b9c4fad4eb7
          0ed56f878b55a17b5994ef0de5b338675aad35354195cd

msg     = a512_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
len_in_bytes = 0x80
DST_prime = 515555582d5630312d435330322d776974682d657870616e6465
          721b
msg_prime = 613531325f616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          616161616161616161616161616161616161616161616161616161
          61616161610080515555582d5630312d435330322d776974682d65
          7870616e6465721b
uniform_bytes = 858cb4a6a5668a97d0f7039b5d6d574dde18dd2323cf6b20
          3945c66df86477d1f747b46401903b3fa66d1276108ea7187b4411
          b7499acf4600080ce34ff6d21555c2af16f091adf8b285c8439f2e
          47fa0553c3a6ef5a4227a13f34406241b7d7fd8853a080bad25ec4
          804cdfe4fda500e1c872e71b8c61a8e160691894b96058

]]></artwork>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
+yfiMBTcdL+nh6EltO3qcoaX5eRlSS97YXNNdTuvw8iud0Z2HY9M7YxM7YxM
TTpTYWTX0cjC59nO59nk84zH6nCJ80gYgtGCI5inHiftGB8IBdJwqeXKqvf5
X6vpn8qUfXvCtVe2qs1MlTZGSdHmTd0pkRury67NMpO3eZ23sjNp0xWqqWXb
dZ1Is6wTpSnySvTNSddcrjI0VLVSdVJltrBSZ0K11miZG22NzfK0EFmWqtLg
XyKzpmnTJldt3baykH176kNMtzK3oDqt5x6qy0D1VuVlKUSNYWa1qHRtNCZq
mobK7qZtWxWmzdI6z2RXZVXZ1p0tmjLLy0rYJqubvj1Pddvq1hRdkalKtUa0
HajRyDYXDZqQeZYWrSrQtOhym4mmMbnUeVEIiSUsWpG9bVrXNzKTCtPKmlYL
2RXVO/7AVJbK9O35aZkytynWv81NU5q003Wb6jxrMO5UF21eZKVu0qxoi6po
ddGBm0yddkamoi2FVn17nptkrQtRZ0UtulroUpUil2ltuyIX0uZlUUpZqVTj
88biX5Uui9xWua7BaLZWom/Pc9N7TJV/cDxV3YbsN3BTFsjevd8/rkhzrZq+
vbCHdVpg4zVN1bTgtq7NbW2LQknQx0gq4FuURjSdqWzV1mXVdk0msa2LKjcy
L1Xfnid7kVWZ1qUo8gybVppO6RLL2umqs0qVNtWqlUIUskvbQta1LpuuErVs
ulZiCTrWktMS7eQQFdfwjjRlXJ3dkXiuvvt/qTITXqA/F2JQXml4lvbPav+o
xpOTk5ObFFv/lRx95Z5U/kk1audX6DyRh8Hmg47LwrNseBaUo1Cjrmc1YN9W
NtNWtretD6gOhdBp3slG2EoplaVNldYC0qSt60rkVV40KlW2qrRsyxRvdtAx
ZZNDXDeZlQYviNRAXnXSFrItrLbaiALvqKyA3N5Rl6KUdWZbZetM6QYbIK+q
Bj9IAdFWCYN9VlKdbggPXWWi7HJIJKVMmbYYYtFklao6CdGnRGVUXmDYmbWd
aJRpKtU0U33aQhekedvUEHaVhaaA8q2glkWqay0aY1Mls1LJOq8rZfOiwlt5
KqwpIKBzU+foxSqq/l5j5J1NRVl3datNbVvTpFN1K0p8j41fdAZ6BhrMpkVa
tyotbZ5nAkQkhVTkmFzbdDKngUPd1/zftFK5UgX1a5VIS6hLkzeqqqDH2rqB
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
XVXGh9QZH1ppvIfW+IBq41fqDacjTufUKqmHWJc8n4jU/r2M1chYJk4PW0dK
R96ooUZvl+7e3eXYnFNRYx1VBtXitsyhUwtOMs70RF+H8xBfGc9fYwunG9ww
r2cUCn1qXlrzyme0XWNnb1zBLGpiw3qkpzFtr3JGb1QzekPuHH+iAZb9rFLG
12U5q4rYKYK28JSawxff8xXa5fOC1YTb/Ndhu6vwxB0wX96SVtKpipFfi5p+
eiOtVD5whNPefNsfk0/NkE/158c9+fBiHYYyXCs4AkKlZb2kuCZ5tsO2bZKx
9szGS5KNdSS3SUoyOxymt+ZykN5r4ToqXJpk0cXnDLxhfLN6K8DJ8hGcQIMB
TmSHs2O4Go2BL0zzfaBgBxVk5SwqyEHC6laooHaKVxRTWFDjsSj+qw8vhuHN
nl74JNPzlqacPSqQ7qjgJgvUTf0fFGTUJDFFMWbMdwYZBC+Cg1yMOhQ7Vph8
/Bivs7A4/Ccm+Scm+Y0xCX2z+17p0cjtsItDI2/vvWLcEd7b13toVeTODr0t
yBF5QDl+zx46o/U9YU55e5jTrS8vdnBONcE59YyiTufsY7Ef58jRmJSHJhEa
yGY6yXfQgGAYMdcJmbflGIYS6JjMRc3MJUvnAMKeuQwAYdktxv6cW78gSyp0
D0oy8piCu0y9H7hzkCOPwF2Whyf073cCd1kxgDv61GTTT2/mkKzcQXfZhNDZ
DKHzNECWCN3lYh+6AzTJI8OCB5on+YRx8hnGyZlxiklHxb6OsN3yXdbJJzPK
Z2ZU8IzKcUfF3hmVh0nRCyfCq4WaaZM9QKoxOxb5PF6tboVXiwh6vz9eLcp9
eLW6BV4tGNrXt8arRT2LV+vDpEzfgldHznK/fNy7jjksG3l0HYwOlI64UJQg
eOuR7fDq+6Hb2KWOrmiirmP/MYrGCjn1x0nyXd8uQT7t5XEPsbMI35rv89dz
Je14du9xqDa4sr0YJvD3xLxDr3vR7u/d0XM1YuobsK587gI1otgRMeDc+TO6
2Qbf5nEXDqFVhGrZw22yAb9ar6jm1h3yuRuc+3lVzg+P+CPv4Z/10Pf4i6lq
773gwqZ1b3lXOOdqLA999EkPZQv2g9sHZT2QdRiv7F3mvljMuRJSv64yjAfg
+/HpAGi/iCDlxClvikTnPyI/u3bHT3q+QzV862/y2UtvwMYsvdWAYiM0qXbw
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
sX7NQ+es8W9kfMLzc3S5Guuab2FrAY4cP3upV682kerxe2O7CUpz+BO7lI1V
VqinEOwNKn6FrbCv9QQo6NNaUSTu3b5ZcZKfgMTtpaWjomcWe+He+id7RNUV
Xi0+v1ienjplen95sXy1+Pp0efZmaY//vDw9s1Sp5q+XDf533P3o7mz1Od8h
0lbsNWFzvXi8xHa1Z4tnZr3dnuzMLXJ842ugQe+ecDDy0eIlxoTpHkVhyRP4
EBUpGRLxu8Nmqu1jTV+TOKHrV2orVE+5djHJJ5Es2m5emO2HF0XvL4l+dq7R
t5ZDziw9I1+4javic8qn7aE9cmhbtMs3S0qjSE4x4iRWIyH2ll47vFFoBLl0
wMVo3a3RGJHOfMSy6WiMULnegRNdwUnOZFBL7tFENvEGhWhS7pgXv/wMoUP/
v2Kl9bN/4pRVQzqNxZGhVnOWQVywjpE3UcuwZX+0ODmBNJVA1px00KP0v/Jr
+Kv0LyzxMr1UnUQzpV6oOHnjkhHGOhJLS6MxR3jhX+hu2UmZhR8Q/YnlBv2z
7UUP1nDykTzpe9rGUceDoInROEYe3zlHmPx4udn8OOO1OoWsE49Ux/FRm8nO
PfZi4kswODPwJUxz6lxON30+gCTiebo0Prj64QVawr/Z34h+I383/ApaPAKn
f80eA+MaSywB6fLn+tzyzXKf1Qy9rvkDiI+Vu3NK7NXWrlhyuqKAwUvh7lOh
+juhwcyalwIY9biZW0kCCXtqh2a3AypkPM5tfieeH2jyJeKp/rTc7HN8Pd/d
ou+ABF6I5xFI5Fv5FzKJnbxcoNsQMuUisOJgK4LyxUkUH/Iv41qE5M26tXd6
lDTEUtre9HxGN3mLLQm2N9awA8cvH9Ov/rf5S5LR+319Nr4VnLvxD6GQo8+m
DjY/2VDiXhO/X25csarWp89YbhL9Ri/P2F+JgcJ8abf7NJKoo51+qOrLJlSE
8bfYrFjJfyE+ArEr9B7f2h45dnuDxeVRrMDGQ7Cm3vhMHWvdcpKOE3Yn7+uL
sR72NHKuQ30HvNWW5CxEHhZgcm3wBbvWxDPxtH8Z5Du1+HoDTHF5tPgmxf+F
41+aiDvW8dejT5yNzKWIuKKN88V/gp9+ePGXx5/defbw7jH/8uzZn//0w4un
X//wwitwHu4C/EUvx+/yq3jzRdJihAt+55s//ekvx9+l4vjTZ6k8JmId7/8s
wdDdd8mTkyvfgjQilyptZNE2puhMrVWZ5kLklanzpqyLvLCi1ELXMm2EUHVm
dB1fxposk1nZKpuh1WvfaqVLXWZ1lRuTm7IsTNvZrBGdqKsqq8s0y1UtpK1b
hd4rkxZpY2sdtdrkJlO2ykSeXP7v9P+4VnWbq0yaotBF26Zdl1Zp24lWp1YL
k2ZNXdhUqbRtqzpLi6zIrW10PFbMSuYiT9MarQrfKrpHI5mSaKEtusLqMtW2
SoVK8YPIRdVkqipVY9oqT7XudKrr+NBJytRKa3Wuk29SR1iMtSkyfC3xx1Z1
naxULjBk1YEMda7atO50q/KyzkUGwpq8LbJOxWNVdVHWKmtzavXatdoa0+R5
VRWqSjNdVRh3h0azPC9FYSpVGNthNW0u0zqvs7ZtlWqrqNXc5EWOETQi+UaE
sebCGFsok6dtXUpdWDwohFJZl3ZZVeZgCiNMK1slFZZEdlVmVUzXVpdtXaW2
y6lVP9Ymy1uhVdGmqW5rjMmasgJNilRnrc2EqEXZNbY0lTRgqxr9FnUdtWpz
LRostjYR64KwJmLftGmqpiqzKs9zoTV4ps0x7LQGFbI8bbJadhZ802GKtSjy
qizzVo/YVytVVTrtIvYF84kGa1QqoSU4uRFZY9KmS41pLegAmoiuUhmWJ81M
RSthy5ggXddiV0iweMy+2ANlJ62WjUjBncbIQpssVQIr1TVF1ZQdWLbCX1pd
CFt3yqZl1KrOVQl+0p2I2FeVNcZYKdVggLboyqY1Oq2ssJUyJTZWV9MMdaNU
nmcSe8+2po1aLWpja5th70Tsm0tR6xZbyXbKmKxuSpGJLLe1aGRXthaMltIe
b02JrYYtLvGveFOoEvxUmSarIvYFt6ciy8CerUq1acARTSEzI1MFnqwLg/+L
sk2bQhgJuaLyTKUxXfGWaGtlTRexbwp2LtGT7QzWulN1V6oKpFAVuLRVZa7b
olKgbaUr9Jwq2XVFGvNAUVuLLZ53EfvmFThStrKRGEbZEV+BDAYbDxsIdMUG
s40tNBRxlTUpJGZhIQMjsZDLUuCjwk7YFzRNhcSmLcqqjni5yFOsk6k68Ae9
k0mdt12KhYPkzKzRRdN1mGja1aYgsV1UQsSbuwBlQd22SiNeNrrNspb2HQZY
6q7L0lTqqrWyKjGYSts0q2STQ+RJiEeJDVWmI/5ou7rJC6NVxMsppFfdCpnr
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
SpYOCepJr5UjACbKo4/k3bP1b6qZdGywfxIarh4b9U1Nhoe0hsMibZlKn9DS
fdGHsqJmL8JESLcL6KCzJ3jZxVWn0NddMi6aLChF1qTduIiNCDtSWoHZYJvH
sBOXzXsLQKB3CWsYFA6Rm9/YvO5ThKw8d7QGhIEnmDLsygbbpWbAIakTkhZF
FwGKMErjMDlA4hszqqwsiobSeHPq9cF/efXLP/6ufTRffbY+/ezVH9b47ONP
Pn31b/9lna/+nK9+/sV//+CDf/nN609xff3s9ccfvfrX139Yn96/tj/+5NWb
X/z1b9enn7Z/Xa/+0D553T76TL/2uzVe79drvnr90at/+7fftE9/89nH+vuH
8+dvfuXf//0X+oB1X1E/+9nzQ//v+mS9+tf10fqkfaZL/f7T1x/966vx8dSv
/aZ99ur1px+0P7TXH7b+4Xq1P/n4t59/khu//+QP6+efrN99zMd88Ms2fvP8
oP/wOR++/lT3/Jlu50vP81H77frZK675av/+o/PDP3vF+P3vf/6Xn33QPvxY
98PZ3quma33yWiP08X712e9/9+Hnf9IVv/g9fejvfq9P+TuACZf4cH3069cf
/br/P93Z3//sg49//5m+/+rvfv/Raw3sb7/4+vnR1x99tj757ZqvNQwa4w9/
r8v/3fz0s1//7pPXv13nR3TVN3/7+198oJv74muvmkZQA/HJ+nR9xBi2T1/9
j3/+X//4j68+/ewTjeanv/jgH58X59c+v5PPP+ctF+DWvvh9xvI3649t6n3/
tn34i6Mac4/ir//42/l3n592/v2bE9UPGNg3S+8//uy5/zfffMsp6pufX598
cN7K+SldW5d+np8+x5aw/UdnuOrn4/XfX8EOqK9UbEvUHDvlaaUApU2aCVJV
iNX3lBlKNkkRhaT1jOLO9g/+NOLn1Ofb//OMlN/pn29wAdL5Vz/rtUX/VY99
nvWalHpeFIgKRCdkr7jm2exWzKnLi8NXtKVKR51C/Ixd+auCGIsai19RoUqj
fPk86eXV8U/C7NV/9Qt8UrF3PPxbX6BFMzLTzLW2E/ZB4poKEyM2D4lNtZhi
RJCV9J29Up0IuXAoJ9LKbPM/mEDfu+wvb/PPb5N7T+cpPUPOgyafvRDzdYGv
X7NvH5a78uLtrxxHnKOBVsX7j6gke1eaA26NRFFRzbFgt1EEg/t+4kdRlmRt
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
EJ4EAA==

-->

</rfc>
