<?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.2.12 -->
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc text-list-symbols="-o*+"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-irtf-cfrg-pairing-friendly-curves-07" category="exp" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" tocDepth="4" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 2.40.1 -->
  <front>
    <title>Pairing-Friendly Curves</title>
    <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-pairing-friendly-curves-07"/>
    <author initials="Y." surname="Sakemi" fullname="Yumi Sakemi" role="editor">
      <organization>Lepidum</organization>
      <address>
        <email>yumi.sakemi@lepidum.co.jp</email>
      </address>
    </author>
    <author initials="T." surname="Kobayashi" fullname="Tetsutaro Kobayashi">
      <organization>NTT</organization>
      <address>
        <email>tetsutaro.kobayashi.dr@hco.ntt.co.jp</email>
      </address>
    </author>
    <author initials="T." surname="Saito" fullname="Tsunekazu Saito">
      <organization>NTT</organization>
      <address>
        <email>tsunekazu.saito.hg@hco.ntt.co.jp</email>
      </address>
    </author>
    <author initials="R." surname="Wahby" fullname="Riad S. Wahby">
      <organization>Stanford University</organization>
      <address>
        <email>rsw@cs.stanford.edu</email>
      </address>
    </author>
    <date/>
    <area>IRTF</area>
    <workgroup>CFRG</workgroup>
    <keyword>Internet-Draft</keyword>
    <keyword>Request for Comments</keyword>
    <keyword>Pairing-Friendly Curves</keyword>
    <keyword>Eliptic Curve Cryptgraphy</keyword>
    <abstract>
      <t>Pairing-based cryptography, a subfield of elliptic curve cryptography, has received attention due to its flexible and practical functionality. Pairings are special maps defined using 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 the 100-bit security level due to the effect of the attack. In this memo, we list the security levels of certain pairing-friendly curves, and motivate our choices of curves. First, we summarize the adoption status of pairing-friendly curves in standards, libraries and applications, and classify them in the 128-bit, 192-bit, and 256-bit security levels. Then, from the viewpoints of "security" and "widely used", we select the recommended pairing-friendly curves considering exTNFS.
</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <section anchor="pairing-based-cryptography" numbered="true" toc="default">
        <name>Pairing-based Cryptography</name>
        <t>Elliptic curve cryptography is an important area in currently deployed cryptography. The cryptographic algorithms based on elliptic curve cryptography, such as the Elliptic Curve Digital Signature Algorithm (ECDSA), are widely used in many applications.</t>
        <t>Pairing-based cryptography, a subfield of elliptic curve cryptography, has attracted much attention due to its flexible and practical functionality.
Pairings are special maps defined using elliptic curves.
Pairings are fundamental in the construction of several cryptographic algorithms and protocols such as identity-based encryption (IBE), attribute-based encryption (ABE), authenticated key exchange (AKE), short signatures, and so on. Several applications of pairing-based cryptography are currently in practical use.</t>
        <t>As the importance of pairings grows, elliptic curves where pairings are efficiently computable are studied and the special curves called pairing-friendly curves are proposed.</t>
      </section>
      <section anchor="applications-of-pairing-based-cryptography" numbered="true" toc="default">
        <name>Applications of Pairing-based Cryptography</name>
        <t>Several applications using pairing-based cryptography have already been standardized and deployed. We list here some examples of applications available in the real world.</t>
        <t>IETF published RFCs for pairing-based cryptography such as Identity-Based Cryptography <xref target="RFC5091" format="default"/>, Sakai-Kasahara Key Encryption (SAKKE) <xref target="RFC6508" format="default"/>, and Identity-Based Authenticated Key Exchange (IBAKE) <xref target="RFC6539" format="default"/>. 
SAKKE is applied to Multimedia Internet KEYing (MIKEY) <xref target="RFC6509" format="default"/> and used in 3GPP <xref target="SAKKE" format="default"/>.</t>
        <t>Pairing-based key agreement protocols are standardized in ISO/IEC <xref target="ISOIEC11770-3" format="default"/>.
In <xref target="ISOIEC11770-3" format="default"/>, a key agreement scheme by Joux <xref target="Joux00" format="default"/>, identity-based key agreement schemes by Smart-Chen-Cheng <xref target="CCS07" format="default"/> and Fujioka-Suzuki-Ustaoglu <xref target="FSU10" format="default"/> are specified.</t>
        <t>MIRACL implements M-Pin, a multi-factor authentication protocol <xref target="M-Pin" format="default"/>.
The M-Pin protocol includes a type of zero-knowledge proof, where pairings are used for its construction.</t>
        <t>The Trusted Computing Group (TCG) specified the Elliptic Curve Direct Anonymous Attestation (ECDAA) in the specification of a Trusted Platform Module (TPM) <xref target="TPM" format="default"/>. 
ECDAA is a protocol for proving the attestation held by a TPM to a verifier without revealing the attestation held by that TPM. Pairings are used in the construction of ECDAA. FIDO Alliance <xref target="FIDO" format="default"/> and W3C <xref target="W3C" format="default"/> also published an ECDAA algorithm similar to TCG.</t>

<t>Intel introduced Intel Enhanced Privacy ID (EPID) that enables remote attestation of a hardware device while preserving the privacy of the device as part of the functionality of Intel Software Guard Extensions (SGX) <xref target="EPID" format="default"/>. They extended TPM ECDAA to realize such functionality. A pairing-based EPID was proposed <xref target="BL10" format="default"/> and distributed along with Intel SGX applications.</t>

<t>Zcash implemented their own zero-knowledge proof algorithm named Zero-Knowledge Succinct Non-Interactive Argument of Knowledge (zk-SNARKs) <xref target="Zcash" format="default"/>. zk-SNARKs are used for protecting the privacy of transactions of Zcash. They use pairings to construct zk-SNARKs.</t>
<t>Cloudflare introduced Geo Key Manager <xref target="Cloudflare" format="default"/> to restrict distribution of customers' private keys to a subset of their data centers. To achieve this functionality, ABE is used, and pairings take a role as a building block. In addition, Cloudflare published a new cryptographic library, the Cloudflare Interoperable, Reusable Cryptographic Library (CIRCL) <xref target="CIRCL" format="default"/> in 2019. They plan to include securely implemented subroutines for pairing computations on certain secure pairing-friendly curves in CIRCL.</t>
        <t>Currently, Boneh-Lynn-Shacham (BLS) signature schemes are being standardized 
<xref target="I-D.boneh-bls-signature" format="default"/> and utilized in several blockchain projects 
such as Ethereum <xref target="Ethereum" format="default"/>, Algorand <xref target="Algorand" format="default"/>, Chia Network <xref target="Chia" format="default"/>, and DFINITY <xref target="DFINITY" format="default"/>. 
The aggregation functionality of BLS signatures is effective for their applications of decentralization and scalability.</t>
      </section>


      <section anchor="goal" numbered="true" toc="default">
        <name>Motivation and Contribution</name>
<t> At CRYPTO 2016, Kim and Barbulescu proposed an efficient number field sieve (NFS) algorithm for the discrete logarithm problem in a finite field <xref target="KB16" format="default"/>. Several types of pairing-friendly curves such as Barreto-Naehrig curves (BN curves)<xref target="BN05" format="default"/> and Barreto-Lynn-Scott curves (BLS curves)<xref target="BLS02" format="default"/> are affected by the attack, since a pairing-friendly curve suitable for cryptographic applications requires that the discrete logarithm problem is sufficiently difficult. In particular, BN254, which is a BN curve with a 254-bit characteristic effective for pairing calculations, was adopted by a lot of cryptographic libraries as a parameter of the 128-bit security level, however, BN254 ensures no more than the 100-bit security level due to the effect of the attack, where the security level described in this memo corresponds to the security strength of NIST recommendation <xref target="NIST" format="default"/>.
</t>

<t>To resolve this effect immediately, several research groups and implementers re-evaluated the security of pairing-friendly curves and they respectively proposed various curves that are secure against the attack <xref target="BD18" format="default"/> <xref target="BLS12-381" format="default"/>.</t>

<t>In this memo, we list the security levels of certain pairing-friendly curves, and motivate our choices of curves. First, we summarize the adoption status of pairing-friendly curves in international standards, libraries and applications, and classify them in the 128-bit, 192-bit, and 256-bit security levels. Then, from the viewpoints of "security" and "widely used", pairing-friendly curves corresponding to each security level are selected in accordance with the security evaluation by Barbulescu and Duquesne <xref target="BD18" format="default"/>. </t> 

<t> As a result, we recommend the BLS curve with 381-bit characteristic of embedding degree 12 and the BN curve with the 462-bit characteristic for the 128-bit security level, and the BLS curves of embedding degree 48 with the 581-bit characteristic for the 256-bit security level. This memo shows their specific test vectors.</t>
      </section>

      <section anchor="requirements-terminology" numbered="true" toc="default">
        <name>Requirements Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/> when, and only when, they appear in all capitals, as shown here.</t>
      </section>
    </section>
    <section anchor="preliminaries" numbered="true" toc="default">
      <name>Preliminaries</name>
      <section anchor="elliptic-curve" numbered="true" toc="default">
        <name>Elliptic Curves</name>
        <t>Let p &gt; 3 be a prime and q = p^n for a natural number n.
Let F_q be a finite field.
The curve defined by the following equation E is called an elliptic curve: </t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
   E : y^2 = x^3 + A * x + B,
]]></artwork>
        <t> and A and B in F_q satisfy the discriminant inequality 4 * A^3 + 27 * B^2 != 0 mod q.
This is called the Weierstrass normal form of an elliptic curve.</t>
<t>A solution (x,y) to the equation E can be thought of as a point on the corresponding curve. For a natural number k, we define the set of (F_q^k)-rational points of E, denoted by E(F_q^k), to be the set of all solutions (x,y) in F_q^k, together with a 'point at infinity' O_E, which is defined to lie on every vertical line passing through the curve E.</t>
<t>The set E(F_q^k) forms a group under a group law which can be defined geometrically as follows. For P and Q in E(F_q^k) define P + Q to be the reflection about the x-axis of the unique third point of intersection of the straight line passing through P and Q with the curve E. If the straight line is tangent to E, we say that it passes through that point twice. The identity of this group is the point at infinity O_E. We also define scalar multiplication [a]P for a positive integer a as the point P added to itself (a-1) times.</t>
<t>We define some of the terminology used in this memo as follows:</t>

        <dl newline="false" spacing="normal">
          <dt>O_E:</dt>
          <dd>
  the point at infinity over an elliptic curve E.</dd>
          <dt>E(F_q^k):</dt>
          <dd>
  the group of F_q-rational points of E.</dd>
          <dt>#E(F_q^k):</dt>
          <dd>
  the number of F_q-rational points of E.</dd>
          <dt>r:</dt>
          <dd>
  the largest prime divisor of #E(F_q).</dd>
          <dt>BP:</dt>
          <dd>
  a point in E(F_q) of order r. (The 'base point' of a cyclic subgroup of E(F_q))</dd>
          <dt>h:</dt>
          <dd>
  the cofactor h =  #E(F_q) / r.</dd>
        </dl>
      </section>
      <section anchor="pairing" numbered="true" toc="default">
        <name>Pairings</name>
        <t>A pairing is a bilinear map defined on two subgroups of rational points of an elliptic curve. Examples include the Weil pairing, the Tate pairing, the optimal Ate pairing <xref target="Ver09" format="default"/>, and so on.
The optimal Ate pairing is considered to be the most efficient to compute and is the one that is most commonly used for practical implementation.</t>

<t>Let E be an elliptic curve defined over a prime field F_p. Let k be the minimum integer for which r is a divisor of p^k - 1; this is called the embedding degree. Let G_1 be a cyclic subgroup of E(F_p) of order r, there also exists a cyclic subgroup of E(F_p^k) of order r, define this to be G_2. It can sometimes be convenient for efficiency to do the computations of G_2 in the twist E', and so consider G_2 to instead be a subgroup of E'. Let G_T be an order r subgroup of the multiplicative group (F_p^k)^*; this exists by definition of k.</t>
        <t>A pairing is defined as a bilinear map e: (G_1, G_2) -&gt; G_T
satisfying the following properties:</t>
        <ol spacing="normal" type="1">
          <li>Bilinearity: for any S in G_1, T in G_2, and integers a and b, e([a]S, [b]T) = e(S, T)^{a * b}.</li>
          <li>Non-degeneracy: for any T in G_2, e(S, T) = 1 if and only if S = O_E.
 Similarly, for any S in G_1, e(S, T) = 1 if and only if T = O_E.</li>
        </ol>
      <t>In applications, it is also necessary that for any S in G_1 and T in G_2, this bilinear map is efficiently computable.</t>
      </section>


      <section anchor="BNdef" numbered="true" toc="default">
        <name>Barreto-Naehrig Curves</name>
        <t>A BN curve <xref target="BN05" format="default"/> is one of the instantiations of pairing-friendly curves proposed in 2005. A pairing over BN curves constructs optimal Ate pairings.</t>
        <t>A BN curve is defined by elliptic curves E and E' parameterized by a well-chosen integer t.
E is defined over F_p, where p is a prime more than or equal to 5, and E(F_p) has a subgroup of prime order r.
The characteristic p and the order r are parameterized by</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
    p = 36 * t^4 + 36 * t^3 + 24 * t^2 + 6 * t + 1
    r = 36 * t^4 + 36 * t^3 + 18 * t^2 + 6 * t + 1
]]></artwork>
        <t>for an integer t.</t>
        <t>The elliptic curve E has an equation of the form E: y^2 = x^3 + b, where b is an element of a multiplicative group (F_p)^* of order (p - 1).</t>
        <t>BN curves always have order 6 twists. If m is an element that is neither a square nor a cube in an extension field F_p^2, the twist E' of E is defined over an extension field F_p^2 by the equation E': y^2 = x^3 + b' with b' = b / m or b' = b * m. 
BN curves are called D-type if b' = b / m, and M-type if b' = b * m.
The embeddiing degree k is 12.</t>
        <t>A pairing e is defined by taking G_1 as a subgroup of E(F_p) of order r, G_2 as a subgroup of E'(F_p^2), and G_T as a subgroup of a multiplicative group (F_p^12)^* of order r.</t>
      </section>
      <section anchor="BLSdef" numbered="true" toc="default">
        <name>Barreto-Lynn-Scott Curves</name>
        <t>A BLS curve <xref target="BLS02" format="default"/> is another instantiation of pairings proposed in 2002. Similar to BN curves, a pairing over BLS curves constructs optimal Ate pairings.</t>
        <t>A BLS curve is defined by elliptic curves E and E' parameterized by a well-chosen integer t.
E is defined over a finite field F_p by an equation of the form E: y^2 = x^3 + b,
and its twist E': y^2 = x^3 + b', is defined in the same way as BN curves. 
In contrast to BN curves, E(F_p) does not have a prime order.
Instead, its order is divisible by a large parameterized prime r and denoted by h * r with cofactor h.
The pairing is defined on the r-torsion points.
In the same way as BN curves, BLS curves can be categorized into D-type and M-type.</t>
        <t>BLS curves vary in accordance with different embedding degrees. In this memo, we deal with the BLS12 and BLS48 families with embedding degrees 12 and 48 with respect to r, respectively.</t>
        <t>In BLS curves, parameterized p and r are given by the following equations:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
   BLS12:
       p = (t - 1)^2 * (t^4 - t^2 + 1) / 3 + t
       r = t^4 - t^2 + 1
   BLS48:
       p = (t - 1)^2 * (t^16 - t^8 + 1) / 3 + t
       r = t^16 - t^8 + 1
]]></artwork>
        <t>for a well chosen integer t.</t>
        <t>A pairing e is defined by taking G_1 as a subgroup of E(F_p) of order r, G_2 as an order r subgroup of E'(F_p^2) for BLS12 and of E'(F_p^8) for BLS48, and G_T as an order r subgroup of a multiplicative group (F_p^12)^* for BLS12 and of a multiplicative group (F_p^48)^* for BLS48.</t>
      </section>
      
      <section anchor="representation-convention-for-an-extension-field" numbered="true" toc="default">
        <name>Representation Convention for an Extension Field</name>
        <t>Pairing-friendly curves use a tower of some extension fields. 
In order to encode an element of an extension field, focusing on interoperability, we adopt the representation convention shown in Appendix J.4 of <xref target="I-D.ietf-lwig-curve-representations" format="default"/> as a standard and effective method.</t>
        <t>Let F_p be a finite field of characteristic p and F_p^d = F_p(i) be an extension field of F_p of degree d.</t>
        <t>
    For an element s in F_p^d such that s = s_0 + s_1 * i + ... + s_{d - 1} *&nbsp;&nbsp;i^{d - 1} where s_0, s_1, ... , s_{d - 1} in the basefield F_p, s is represented as octet string by oct(s) = s_0 || s_1 || ... || s_{d - 1}.
</t>
        <t>Let F_p^d' = F_p^d(j) be an extension field of F_p^d of degree d' / d.</t>
        <t>
    For an element s' in F_p^d' such that s' = s'_0 + s'_1 * j + ... + s'_{d' / d - 1} * j^{d' / d - 1} where s'_0, s'_1, ..., s'_{d' / d - 1} in the basefield F_p^d, s' is represented as integer by oct(s') = oct(s'_0) || oct(s'_1) || ... || oct(s'_{d' / d - 1}), where oct(s'_0), ... , oct(s'_{d' / d - 1}) are octet strings encoded by above convention.
</t>
        <t>In general, one can define encoding between integer and an element of any finite field tower by inductively applying the above convention.</t>
        <t>The parameters and test vectors of extension fields described in this memo are encoded by this convention and represented in an octet stream.</t>
<t>
When applications communicate elements in an extension field, using the compression method <xref target="MP04" format="default"/> may be more effective. 
In that case, care for interoperability must be taken.
</t>
</section>
    </section>
    <section anchor="security_pfc" numbered="true" toc="default">
      <name>Security of Pairing-Friendly Curves</name>
      <section anchor="evaluating-the-security-of-pairing-friendly-curves" numbered="true" toc="default">
        <name>Evaluating the Security of Pairing-Friendly Curves</name>
        <t>The security of pairing-friendly curves is evaluated by the hardness of the following discrete logarithm problems: </t>
        <ul spacing="normal">
          <li>The elliptic curve discrete logarithm problem (ECDLP) in G_1 and G_2</li>
          <li>The finite field discrete logarithm problem (FFDLP) in G_T</li>
        </ul>
        <t>There are other hard problems over pairing-friendly curves used for proving the security of pairing-based cryptography. Such problems include the computational bilinear Diffie-Hellman (CBDH) problem, the bilinear Diffie-Hellman (BDH) problem, the decision bilinear Diffie-Hellman (DBDH) problem, the gap DBDH problem, etc. <xref target="ECRYPT" format="default"/>.
Almost all of these variants are reduced to the hardness of discrete logarithm problems described above and are believed to be easier than the discrete logarithm problems.</t>
        <t>Although it would be sufficient to attack any of these problems to attack paiting-based crytography, the only known attacks thus far attack the discrete logarithm problem directly, so we focus on the discrete logarithm in this memo.</t>
        <t>The security level of pairing-friendly curves is estimated by the computational cost of the most efficient algorithm to solve the above discrete logarithm problems. The best known algorithms for solving the discrete logarithm problems are based on Pollard's rho algorithm <xref target="Pollard78" format="default"/> and Index Calculus <xref target="HR83" format="default"/>. 
        To make index calculus algorithms more efficient, number field sieve (NFS) algorithms are utilized.</t>
      </section>
      <section anchor="impact" numbered="true" toc="default">
        <name>Impact of Recent Attacks</name>
        <t>In 2016, Kim and Barbulescu proposed a new variant of the NFS algorithms, the extended tower number field sieve (exTNFS), which drastically reduces the complexity of solving FFDLP <xref target="KB16" format="default"/>.
Due to exTNFS, the security level of certain pairing-friendly curves asymptotically dropped down.
For instance, Barbulescu and Duquesne estimated that the security of the BN curves, which had been believed to provide 128-bit security (BN256, for example) was reduced to approximately 100 bits <xref target="BD18" format="default"/>. Here, the security level described in this memo corresponds to the security strength of NIST recommendation <xref target="NIST" format="default"/>.
</t>
        <t>There has since been research into the minimum bit length of the parameters of pairing-friendly curves for each security level when applying exTNFS as an attacking method for FFDLP.
For 128-bit security, Barbulescu and Duquesne estimated the minimum bit length of p of BN curves and BLS12 curves after exTNFS as 461 bits <xref target="BD18" format="default"/>.
For 256-bit security, Kiyomura et al. estimated the minimum bit length of p^k of BLS48 curves as 27,410 bits, which indicated 572 bits of p <xref target="KIK17" format="default"/>.</t>
      </section>
    </section>
    
    
    <section anchor="secure_params" numbered="true" toc="default">
      <name>Selection of Pairing-Friendly Curves</name>
<t>
In this section, we introduce some of the known secure pairing-friendly curves that consider the impact of exTNFS.
</t>
<t>
First, we show the adoption status of pairing-friendly curves in standards, libraries and applications, and classify them in accordance with the 128-bit, 192-bit, and 256-bit security levels.
Then, from the viewpoints of "security" and "widely used", pairing-friendly curves corresponding to each security level are selected and their parameters are indicated.
</t>
<t>
In our selection policy, it is important that selected curves are shown in peer-reviewed papers for security and that they are widely used in cryptographic libraries. 
In addition, "efficiency" is one of the important aspects but greatly dependant on implementations, so we choose to prioritize "security" and "widely used" over "efficiency" in consideration of future interconnections and interoperability over the internet. </t>

    <section anchor="impl" numbered="true" toc="default">
        <name>Adoption Status of Pairing-friendly Curves</name>
          <t>We show the pairing-friendly curves that have been selected by existing standards, cryptographic libraries, and applications.</t>
<t><xref target="adoption" format="default"/> summarizes the adoption status of pairing-friendly curves. In this table, "Arnd" is an abbreviation for "Around". The curves categorized into 'Arnd 128-bit', 'Arnd 192-bit' and 'Arnd 256-bit' for each label show that their security levels are within the range of plus/minus 5 bits for each security level. Other labels shown with '~' mean that the security level of the categorized curve is outside the range of each security level. Specifically, the security level of the categorized curves is more than the previous column and is less than the next column.
The details are described as the following subsections. A BN curve with a XXX-bit characteristic p is denoted as BNXXX and a BLS curve of embedding degree k with a XXX-bit p is denoted as BLSk_XXX.
Due to space limitations, <xref target="adoption" format="default"/> omits libraries that have not been maintained since the 2016 exTNFS attacks and curves that have had the security levels below 128 bits since before 2016 (ex. BN160). The full version of <xref target="adoption" format="default"/> is available at <eref target="https://lepidum.co.jp/blog/2020-03-27/ietf-draft-pfc/" brackets="none"/>. In this table, the security level for each curve is evaluated in accordance with <xref target="BD18" format="default"/>,<xref target="GMT19" format="default"/>, <xref target="MAF19" format="default"/> and <xref target="FK18" format="default"/>. Note that the Freeman curves and MNT curves are not included in this table because <xref target="BD18" format="default"/> does not show the security level of these curves.
</t>


      <table anchor="adoption" align="center">
        <name>Adoption Status of Pairing-Friendly Curves</name>
        <thead>
          <tr>
            <th align="center" rowspan="2" >Category</th>
            <th align="center" rowspan="2">Name</th>
            <th align="center" rowspan="2">Curve Type</th>
            <th align="center" colspan="6">Security Levels (bit)</th>
          </tr>
          <tr>
            <td align="left"> ~ </td>
            <td align="left"> Arnd 128 </td>
            <td align="left"> ~ </td>
            <td align="left"> Arnd 192 </td>
            <td align="left"> ~ </td>
            <td align="left"> Arnd 256 </td>            
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left" rowspan="9">Standard</td>
            <td align="left" rowspan="3">ISO/IEC</td>
            <td align="left">BN256I</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN384</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
           <tr>
            <td align="left">BN512I</td>
            <td align="left">&nbsp;</td>
            <td align="left"></td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>         
          <tr>
            <td align="left" rowspan="2">TCG</td>
            <td align="left">BN256I</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN638</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left" rowspan="4">FIDO/W3C</td>
            <td align="left">BN256I</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN256D</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN512I</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN638</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left" rowspan="51">Library</td>
            <td align="left" rowspan="5">mcl</td>
            <td align="left">BLS12_381</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN254N</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN_SNARK1</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN382M</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN462</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left" rowspan="2">TEPLA</td>
            <td align="left">BN254B</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN254N</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left" rowspan="15">RELIC</td>
            <td align="left">BLS12_381</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BLS12_446</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BLS12_455</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BLS12_638</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BLS24_477</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left"></td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BLS48_575</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
          </tr>
          <tr>
            <td align="left">BN254N</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>    
          <tr>
            <td align="left">BN256D</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>    
          <tr>
            <td align="left">BN382R</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>    
          <tr>
            <td align="left">BN446</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr> 
          <tr>
            <td align="left">BN638</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr> 
          <tr>
            <td align="left">CP8_544</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left"></td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr> 
          <tr>
            <td align="left">K54_569</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left"></td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
          </tr> 
          <tr>
            <td align="left">KSS18_508</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr> 
          <tr>
            <td align="left">OT8_511</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left"></td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr> 
          <tr>
            <td align="left" rowspan="9">AMCL</td>
            <td align="left">BLS12_381</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BLS12_383</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BLS12_461</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BLS24_479</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BLS48_556</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
          </tr>
          <tr>
            <td align="left">BN254N</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN254CX</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN256I</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN512I</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">Intel IPP</td>
            <td align="left">BN256I</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">Kyushu Univ.</td>
            <td align="left">BLS48_581</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
          </tr>
          <tr>
            <td align="left" rowspan="11">MIRACL</td>
            <td align="left">BLS12_381</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BLS12_383</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BLS12_461</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BLS24_479</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BLS48_556</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
          </tr>
          <tr>
            <td align="left">BLS48_581</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
          </tr>
          <tr>
            <td align="left">BN254N</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN254CX</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN256I</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN462</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN512I</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left" rowspan="7">Adjoint</td>
            <td align="left">BLS12_381</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN_SNARK1</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN254B</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN254N</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN254S1</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN254S2</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN462</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left" rowspan="10">Application</td>
            <td align="left" rowspan="2">Zcash</td>
            <td align="left">BLS12_381</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN_SNARK1</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left" >Ethereum</td>
            <td align="left">BLS12_381</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">Chia Network</td>
            <td align="left">BLS12_381</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left" rowspan="5">DFINITY</td>
            <td align="left">BLS12_381</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN254N</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN_SNARK1</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN382M</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">BN462</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left" >Algorand</td>
            <td align="left">BLS12_381</td>
            <td align="left">&nbsp;</td>
            <td align="left">X</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
            <td align="left">&nbsp;</td>
          </tr>
        </tbody>
      </table>

      <section anchor="standardization" numbered="true" toc="default">
        <name>International Standards</name>
        <t>ISO/IEC 15946 series specifies public-key cryptographic techniques based on elliptic curves. ISO/IEC 15946-5 <xref target="ISOIEC15946-5" format="default"/> shows numerical examples of MNT curves<xref target="MNT01" format="default"/> with 160-bit p and 256-bit p, Freeman curves <xref target="Freeman06" format="default"/> with 224-bit p and 256-bit p, and BN curves with 160-bit p, 192-bit p, 224-bit p, 256-bit p, 384-bit p, and 512-bit p. These parameters do not take into account the effects of the exTNFS. On the other hand, the parameters may be revised in future versions since ISO/IEC 15946-5 is currently under development.   
As described below, BN curves with 256-bit p and 512-bit p specified in ISO/IEC 15946-5 used by other standards and libraries, these curves are especially denoted as BN256I and BN512I. The suffix 'I' of BN256I and BN512I are given from the initials of the standard name ISO.
</t>

        <t>TCG adopts the BN256I and a BN curve with 638-bit p specified by their own<xref target="TPM" format="default"/>. FIDO Alliance <xref target="FIDO" format="default"/> and W3C <xref target="W3C" format="default"/> adopt BN256I, BN512I, the BN638 by TCG, and the BN curve with 256-bit p proposed by Devegili et al.<xref target="DSD07" format="default"/> (named BN256D). The suffix 'D' of BN256D is given from the initials of the first author's name of the paper which proposed the parameter.

</t>
      </section>

      <section anchor="cryptographic_libraries" numbered="true" toc="default">
        <name>Cryptographic Libraries</name>
        <t>There are a lot of cryptographic libraries that support pairing calculations.</t>
        <t>PBC is a library for pairing-based cryptography published by Stanford University that supports BN curves, MNT curves, Freeman curves, and supersingular curves <xref target="PBC" format="default"/>. Users can generate pairing parameters by using PBC and use pairing operations with the generated parameters.</t>
        <t>mcl<xref target="mcl" format="default"/> is a library for pairing-based cryptography that supports four BN curves and BLS12_381 <xref target="GMT19" format="default"/>. These BN curves include BN254 proposed by Nogami et al. <xref target="NASKM08" format="default"/> (named BN254N), BN_SNARK1 suitable for SNARK applications<xref target="libsnark" format="default"/>, BN382M, and BN462. The suffix 'N' of BN256N and the suffix 'M' of BN382M are respectively given from the initials of the first author's name of the proposed paper and the library's name mcl. Kyushu University published a library that supports the BLS48_581 <xref target="BLS48" format="default"/>. The University of Tsukuba Elliptic Curve and Pairing Library (TEPLA) <xref target="TEPLA" format="default"/> supports two BN curves, BN254N and BN254 proposed by Beuchat et al. <xref target="BGMORT10" format="default"/> (named BN254B). The suffix 'B' of BN254B is given from the initials of the first author's name of the proposed paper. Intel published a cryptographic library named Intel Integrated Performance Primitives (Intel-IPP) <xref target="Intel-IPP" format="default"/> and the library supports BN256I.</t>
        <t>RELIC <xref target="RELIC" format="default"/> uses various types of pairing-friendly curves including six BN curves (BN158, BN254R, BN256R, BN382R, BN446, and BN638), where BN254R, BN256R, and BN382R are RELIC specific parameters that are different from BN254N, BN254B, BN256I, BN256D, and BN382M. The suffix 'R' of BN382R is given from the initials of the library's name RELIC. In addition, RELIC supports six BLS curves (BLS12_381, BLS12_446, BLS12_445, BLS12_638, BLS24_477, and BLS48_575 <xref target="MAF19" format="default"/>), Cocks-Pinch curves of embedding degree 8 with 544-bit p<xref target="GMT19" format="default"/>, pairing-friendly curves constructed by Scott et al. <xref target="SG19" format="default"/> based on Kachisa-Scott-Schaefer curves with embedding degree 54 with 569-bit p (named K54_569)<xref target="MAF19" format="default"/>, a KSS curve <xref target="KSS08" format="default"/> of embedding degree 18 with 508-bit p (named KSS18_508) <xref target="AFKMR12" format="default"/>, Optimal TNFS-secure curve <xref target="FM19" format="default"/> of embedding degree 8 with 511-bit p(OT8_511), and a supersingular curve <xref target="S86" format="default"/> with 1536-bit p (SS_1536).</t>
       <t>Apache Milagro Crypto Library (AMCL)<xref target="AMCL" format="default"/> supports four BLS curves (BLS12_381, BLS12_461, BLS24_479 and BLS48_556) and four BN curves (BN254N, BN254CX proposed by CertiVox, BN256I, and BN512I). In addition to AMCL's supported curves, MIRACL <xref target="MIRACL" format="default"/> supports BN462 and BLS48_581.</t>
<t>Adjoint published a library that supports the BLS12_381 and six BN curves (BN_SNARK1, BN254B, BN254N, BN254S1, BN254S2, and BN462) <xref target="AdjointLib" format="default"/>, where BN254S1 and BN254S2 are BN curves adopted by an old version of AMCL <xref target="AMCLv2" format="default"/>. The suffix 'S' of BN254S1 and BN254S2 are given from the initials of developper's name because he proposed these parameters. 
</t>
      </section>

      <section anchor="applications" numbered="true" toc="default">
        <name>Applications</name>
<t>Zcash uses a BN curve (named BN128) in their library libsnark <xref target="libsnark" format="default"/>.
In response to the exTNFS attacks, they proposed new parameters using BLS12_381 <xref target="BLS12-381" format="default"/> <xref target="GMT19" format="default"/>and published its experimental implementation <xref target="zkcrypto" format="default"/>.</t>
      <t>Ethereum 2.0 adopted BLS12_381 and uses the implementation by Meyer <xref target="pureGo-bls" format="default"/>. Chia Network published their implementation <xref target="Chia" format="default"/> by integrating the RELIC toolkit <xref target="RELIC" format="default"/>. DFINITY uses mcl, and Algorand published an implementation which supports BLS12_381.</t>

      </section>
 </section>
           
      <section anchor="for-128-bits-of-security" numbered="true" toc="default">      
        <name>For 128-bit Security</name>
<t>
<xref target="adoption" format="default"/> shows a lot of cases of adopting BN and BLS curves. Among them, BLS12_381 and BN462 match our selection policy.
Especially, the one that best matches the policy is BLS12_381 from the viewpoint of "widely used" and "efficiency", so we introduce the parameters of BLS12_381 in this memo. 
</t>
<t>
On the other hand, from the viewpoint of the future use, the parameter of BN462 is also introduced. 
As shown in recent security evaluations for BLS12_381<xref target="BD18" format="default"/> <xref target="GMT19" format="default"/>, its security level close to 128-bit but it is less than 128-bit.
If the attack is improved even a little, BLS12_381 will not be suitable for the curve of the 128-bit security level.
As curves of 128-bit security level are currently the most widely used, we recommend both BLS12-381 and BN462 in this memo in order to have a more efficient and a more prudent option respectively.
</t>

<section anchor="parameter-BLS12-381" numbered="true" toc="default">
      <name>BLS Curves for the 128-bit security level</name>
      <t>
      In this part, we introduce the parameters of the Barreto-Lynn-Scott curve of embedding degree 12 with 381-bit p that is adopted by a lot of applications such as Zcash <xref target="Zcash" format="default"/>, Ethereum <xref target="Ethereum" format="default"/>, and so on.
      </t>
          <t>The BLS12_381 curve is shown in <xref target="BLS12-381" format="default"/> and it is defined by the parameter</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
    t = -2^63 - 2^62 - 2^60 - 2^57 - 2^48 - 2^16 
]]></artwork>
          <t>where the size of p becomes 381-bit length.</t>
          <t>For the finite field F_p, the towers of extension field F_p^2, F_p^6 and F_p^12 are defined by indeterminates u, v, and w as follows:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
    F_p^2 = F_p[u] / (u^2 + 1)
    F_p^6 = F_p^2[v] / (v^3 - u - 1)
    F_p^12 = F_p^6[w] / (w^2 - v).
]]></artwork>
          <t>Defined by t, the elliptic curve E and its twist E' are represented 
by E: y^2 = x^3 + 4 and E': y^2 = x^3 + 4(u + 1). BLS12_381 is categorized into M-type.</t>
          <t>We have to note that the security level of this pairing is expected to be 126 rather than 128 bits <xref target="GMT19" format="default"/>.
</t>
          <t>Parameters of BLS12_381 are given as follows.</t>
          <ul spacing="normal">
            <li>
              <t>G_1 is the largest prime-order subgroup of E(F_p)
              </t>
              <ul spacing="normal">
                <li>r : the order of G_1</li>
                <li>BP = (x,y) : a 'base point', i.e., a generator of G_1</li>
                <li>h : the cofactor #E(F_p)/r</li>
              </ul>
            </li>
            <li>
              <t>G_2 is an r-order subgroup of E'(F_p^2)
              </t>
              <ul spacing="normal">
                <li>
                  <t>BP' = (x',y') : a 'base point', i.e., a generator of G_2 (encoded with <xref target="I-D.ietf-lwig-curve-representations" format="default"/>)
                  </t>
                  <ul spacing="normal">
                    <li>x' = x'_0 + x'_1 * u (x'_0, x'_1 in F_p)</li>
                    <li>y' = y'_0 + y'_1 * u (y'_0, y'_1 in F_p)</li>
                  </ul>
                </li>
                <li>h' : the cofactor #Et(F_p^8)/r</li>
              </ul>
            </li>
          </ul>
          <dl newline="false" spacing="normal">
            <dt>p:</dt>
            <dd>
      0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab
  </dd>
            <dt>r:</dt>
            <dd>
      0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001
  </dd>
            <dt>x:</dt>
            <dd>
      0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb
  </dd>
            <dt>y:</dt>
            <dd>
      0x08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1
  </dd>
            <dt>h:</dt>
            <dd>
      0x396c8c005555e1568c00aaab0000aaab
  </dd>
            <dt>b:</dt>
            <dd>
  4</dd>
            <dt>r':</dt>
            <dd>
      0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab
  </dd>
            <dt>x'_0:</dt>
            <dd>
      0x024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8
  </dd>
            <dt>x'_1:</dt>
            <dd>
      0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e
  </dd>
            <dt>y'_0:</dt>
            <dd>
      0x0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801
  </dd>
            <dt>y'_1:</dt>
            <dd>
      0x0606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be
  </dd>
            <dt>h':</dt>
            <dd>
      0x5d543a95414e7f1091d50792876a202cd91de4547085abaa68a205b2e5a7ddfa628f1cb4d9e82ef21537e293a6691ae1616ec6e786f0c70cf1c38e31c7238e5
  </dd>
            <dt>b':</dt>
            <dd>
  4 * (u + 1)</dd>
          </dl>
          
          <t>
          As mentioned above, BLS12_381 is adopted in a lot of applications. Since it is expected that BLS12_381 will continue to be widely used more and more in the future, <xref target="zcash_rep_bls12_381" format="default"/> shows the serialization format of points on an elliptic curve as useful information. This serialization format is also adopted in <xref target="I-D.boneh-bls-signature" format="default"/> <xref target="zkcrypto" format="default"/>.
          </t>
	    </section>
	    

        <section anchor="bn-curves" numbered="true" toc="default">
          <name>BN Curves for the 128-bit security level</name>
          <t>A BN curve with the 128-bit security level is shown in <xref target="BD18" format="default"/>, which we call BN462. 
BN462 is defined by the parameter</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
    t = 2^114 + 2^101 - 2^14 - 1 
]]></artwork>
          <t>for the definition in <xref target="BNdef" format="default"/>.</t>
          <t>For the finite field F_p, the towers of extension field F_p^2, F_p^6 and F_p^12 are defined by indeterminates u, v, and w as follows:</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
    F_p^2 = F_p[u] / (u^2 + 1)
    F_p^6 = F_p^2[v] / (v^3 - u - 2)
    F_p^12 = F_p^6[w] / (w^2 - v).
]]></artwork>
          <t>Defined by t, the elliptic curve E and its twist E' are represented by E: y^2 = x^3 + 5 and E': y^2 = x^3 - u + 2, respectively. The size of p becomes 462-bit length. BN462 is categorized into D-type.</t>
          <t>We have to note that BN462 is significantly slower than BLS12_381, but has 134-bit security level <xref target="GMT19" format="default"/>, so may be more resistant to future small improvements to the exTNFS attack.</t>
          <t>We note also that CP8_544 is more efficient than BN462, has 131-bit security level,and that due to its construction will not be affected by future small improvements to the exTNFS attack. However, as this curve is not widely used (it is only implemented in one library), we instead chose BN462 for our 'safe' option.</t>
          <t>We give the following parameters for BN462.</t>
          <ul spacing="normal">
            <li>
              <t>G_1 is the largest prime-order subgroup of E(F_p)
              </t>
              <ul spacing="normal">
                <li>r : the order of G_1</li>
                <li>BP = (x,y) : a 'base point', i.e., a generator of G_1</li>
                <li>h : the cofactor #E(F_p)/r</li>
              </ul>
            </li>
            <li>
              <t>G_2 is an r-order subgroup of E'(F_p^2)
              </t>
              <ul spacing="normal">
                <li>
                  <t>BP' = (x',y') : a 'base point', i.e., a generator of G_2 (encoded with <xref target="I-D.ietf-lwig-curve-representations" format="default"/>)
                  </t>
                  <ul spacing="normal">
                    <li>x' = x'_0 + x'_1 * u (x'_0, x'_1 in F_p)</li>
                    <li>y' = y'_0 + y'_1 * u (y'_0, y'_1 in F_p)</li>
                  </ul>
                </li>
                <li>h' : the cofactor #Et(F_p^8)/r</li>
              </ul>
            </li>
          </ul>
          <dl newline="false" spacing="normal">
            <dt>p:</dt>
            <dd>
      0x240480360120023ffffffffff6ff0cf6b7d9bfca0000000000d812908f41c8020ffffffffff6ff66fc6ff687f640000000002401b00840138013
  </dd>
            <dt>r:</dt>
            <dd>
      0x240480360120023ffffffffff6ff0cf6b7d9bfca0000000000d812908ee1c201f7fffffffff6ff66fc7bf717f7c0000000002401b007e010800d
  </dd>
            <dt>x:</dt>
            <dd>
      0x21a6d67ef250191fadba34a0a30160b9ac9264b6f95f63b3edbec3cf4b2e689db1bbb4e69a416a0b1e79239c0372e5cd70113c98d91f36b6980d
  </dd>
            <dt>y:</dt>
            <dd>
      0x0118ea0460f7f7abb82b33676a7432a490eeda842cccfa7d788c659650426e6af77df11b8ae40eb80f475432c66600622ecaa8a5734d36fb03de
  </dd>
            <dt>h:</dt>
            <dd>
  1</dd>
            <dt>b:</dt>
            <dd>
  5</dd>
            <dt>r':</dt>
            <dd>
      0x240480360120023ffffffffff6ff0cf6b7d9bfca0000000000d812908ee1c201f7fffffffff6ff66fc7bf717f7c0000000002401b007e010800d
  </dd>
            <dt>x'_0:</dt>
            <dd>
      0x0257ccc85b58dda0dfb38e3a8cbdc5482e0337e7c1cd96ed61c913820408208f9ad2699bad92e0032ae1f0aa6a8b48807695468e3d934ae1e4df
  </dd>
            <dt>x'_1:</dt>
            <dd>
      0x1d2e4343e8599102af8edca849566ba3c98e2a354730cbed9176884058b18134dd86bae555b783718f50af8b59bf7e850e9b73108ba6aa8cd283
  </dd>
            <dt>y'_0:</dt>
            <dd>
      0x0a0650439da22c1979517427a20809eca035634706e23c3fa7a6bb42fe810f1399a1f41c9ddae32e03695a140e7b11d7c3376e5b68df0db7154e
  </dd>
            <dt>y'_1:</dt>
            <dd>
      0x073ef0cbd438cbe0172c8ae37306324d44d5e6b0c69ac57b393f1ab370fd725cc647692444a04ef87387aa68d53743493b9eba14cc552ca2a93a
  </dd>
            <dt>h':</dt>
            <dd>
      0x240480360120023ffffffffff6ff0cf6b7d9bfca0000000000d812908fa1ce0227fffffffff6ff66fc63f5f7f4c0000000002401b008a0168019
  </dd>
            <dt>b':</dt>
            <dd>
  -u + 2</dd>
          </dl>
        </section>

      </section>


      <section anchor="for-192-bits-of-security" numbered="true" toc="default">
        <name>For 192-bit Security</name>
        <t>As shown in <xref target="adoption" format="default"/>, there are only two candidates of pairing-friendly curves for the 192-bit security level, BLS24_477 and BLS24_479. BLS24_477 has only one implementation and BLS24_479 is an experimental parameter that is not shown in any peer-reviewed paper. Therefore, because neither match our selection policy, we do not show the parameters for 192-bit security here.</t>
      </section>
      
      
      <section anchor="for-256-bits-of-security" numbered="true" toc="default">
        <name>For 256-bit Security</name>
        
        <t>As shown in <xref target="adoption" format="default"/>, there are three candidates of pairing-friendly curves for 256-bit security. According to our selection policy, we select BLS48_581, as it is the most widely adopted by cryptographic libraries.
		</t>
        
        <t>The selected BLS48 curve is shown in <xref target="KIK17" format="default"/> and it is defined by the parameter</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
    t = -1 + 2^7 - 2^10 - 2^30 - 2^32. 
]]></artwork>
<t>In this case, the size of p becomes 581-bit. </t>
        <t>For the finite field F_p, the towers of extension field F_p^2, F_p^4, F_p^8, F_p^24 and F_p^48 are defined by indeterminates u, v, w, z, and s as follows:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
    F_p^2 = F_p[u] / (u^2 + 1)
    F_p^4 = F_p^2[v] / (v^2 + u + 1)
    F_p^8 = F_p^4[w] / (w^2 + v)
    F_p^24 = F_p^8[z] / (z^3 + w)
    F_p^48 = F_p^24[s] / (s^2 + z).
]]></artwork>
        <t>The elliptic curve E and its twist E' are represented by E: y^2 = x^3 + 1 
and E': y^2 = x^3 - 1 / w. BLS48-581 is categorized into D-type.</t>
        <t>We then give the parameters for BLS48-581 as follows.</t>
        <ul spacing="normal">
          <li>
            <t>G_1 is the largest prime-order subgroup of E(F_p)
            </t>
            <ul spacing="normal">
              <li>r : the order of G_1</li>
              <li>BP = (x,y) : a 'base point', i.e., a generator of G_1</li>
              <li>h : the cofactor #E(F_p)/r</li>
            </ul>
          </li>
          <li>
            <t>G_2 is an r-order subgroup of E'(F_p^8)
            </t>
            <ul spacing="normal">
              <li>r': an order</li>
              <li>
                <t>BP' = (x',y') : a 'base point', i.e., a generator of G_2 (encoded with <xref target="I-D.ietf-lwig-curve-representations" format="default"/>)
                </t>
                <ul spacing="normal">
                  <li>x' = x'_0 + x'_1 * u + x'_2 * v + x'_3 * u * v + x'_4 * w + x'_5 * u * w + x'_6 * v * w + x'_7 * u * v * w (x'_0, ..., x'_7 in F_p)</li>
                  <li>y' = y'_0 + y'_1 * u + y'_2 * v + y'_3 * u * v + y'_4 * w + y'_5 * u * w + y'_6 * v * w + y'_7 * u * v * w (y'_0, ..., y'_7 in F_p)</li>
                </ul>
              </li>
              <li>h' : the cofactor #E'(F_p^8)/r</li>
            </ul>
          </li>
        </ul>
        <dl newline="false" spacing="normal">
          <dt>p:</dt>
          <dd>
      0x1280f73ff3476f313824e31d47012a0056e84f8d122131bb3be6c0f1f3975444a48ae43af6e082acd9cd30394f4736daf68367a5513170ee0a578fdf721a4a48ac3edc154e6565912b
  </dd>
          <dt>r:</dt>
          <dd>
      0x2386f8a925e2885e233a9ccc1615c0d6c635387a3f0b3cbe003fad6bc972c2e6e741969d34c4c92016a85c7cd0562303c4ccbe599467c24da118a5fe6fcd671c01
  </dd>
          <dt>x:</dt>
          <dd>
      0x02af59b7ac340f2baf2b73df1e93f860de3f257e0e86868cf61abdbaedffb9f7544550546a9df6f9645847665d859236ebdbc57db368b11786cb74da5d3a1e6d8c3bce8732315af640
  </dd>
          <dt>y:</dt>
          <dd>
      0x0cefda44f6531f91f86b3a2d1fb398a488a553c9efeb8a52e991279dd41b720ef7bb7beffb98aee53e80f678584c3ef22f487f77c2876d1b2e35f37aef7b926b576dbb5de3e2587a70
  </dd>
<dt>x'_0:</dt>
          <dd>
    0x05d615d9a7871e4a38237fa45a2775debabbefc70344dbccb7de64db3a2ef156c46ff79baad1a8c42281a63ca0612f400503004d80491f510317b79766322154dec34fd0b4ace8bfab
  </dd>
          <dt>x'_1:</dt>
          <dd>
    0x07c4973ece2258512069b0e86abc07e8b22bb6d980e1623e9526f6da12307f4e1c3943a00abfedf16214a76affa62504f0c3c7630d979630ffd75556a01afa143f1669b36676b47c57
  </dd>
          <dt>x'_2:</dt>
          <dd>
    0x01fccc70198f1334e1b2ea1853ad83bc73a8a6ca9ae237ca7a6d6957ccbab5ab6860161c1dbd19242ffae766f0d2a6d55f028cbdfbb879d5fea8ef4cded6b3f0b46488156ca55a3e6a
  </dd>
          <dt>x'_3:</dt>
          <dd>
    0x0be2218c25ceb6185c78d8012954d4bfe8f5985ac62f3e5821b7b92a393f8be0cc218a95f63e1c776e6ec143b1b279b9468c31c5257c200ca52310b8cb4e80bc3f09a7033cbb7feafe
  </dd>
          <dt>x'_4:</dt>
          <dd>
    0x038b91c600b35913a3c598e4caa9dd63007c675d0b1642b5675ff0e7c5805386699981f9e48199d5ac10b2ef492ae589274fad55fc1889aa80c65b5f746c9d4cbb739c3a1c53f8cce5
  </dd>
          <dt>x'_5:</dt>
          <dd>
    0x0c96c7797eb0738603f1311e4ecda088f7b8f35dcef0977a3d1a58677bb037418181df63835d28997eb57b40b9c0b15dd7595a9f177612f097fc7960910fce3370f2004d914a3c093a
  </dd>
          <dt>x'_6:</dt>
          <dd>
    0x0b9b7951c6061ee3f0197a498908aee660dea41b39d13852b6db908ba2c0b7a449cef11f293b13ced0fd0caa5efcf3432aad1cbe4324c22d63334b5b0e205c3354e41607e60750e057
  </dd>
          <dt>x'_7:</dt>
          <dd>
    0x0827d5c22fb2bdec5282624c4f4aaa2b1e5d7a9defaf47b5211cf741719728a7f9f8cfca93f29cff364a7190b7e2b0d4585479bd6aebf9fc44e56af2fc9e97c3f84e19da00fbc6ae34
  </dd>
          <dt>y'_0:</dt>
          <dd>
    0x00eb53356c375b5dfa497216452f3024b918b4238059a577e6f3b39ebfc435faab0906235afa27748d90f7336d8ae5163c1599abf77eea6d659045012ab12c0ff323edd3fe4d2d7971
  </dd>
          <dt>y'_1:</dt>
          <dd>
    0x0284dc75979e0ff144da6531815fcadc2b75a422ba325e6fba01d72964732fcbf3afb096b243b1f192c5c3d1892ab24e1dd212fa097d760e2e588b423525ffc7b111471db936cd5665
  </dd>
          <dt>y'_2:</dt>
          <dd>
    0x0b36a201dd008523e421efb70367669ef2c2fc5030216d5b119d3a480d370514475f7d5c99d0e90411515536ca3295e5e2f0c1d35d51a652269cbc7c46fc3b8fde68332a526a2a8474
  </dd>
          <dt>y'_3:</dt>
          <dd>
    0x0aec25a4621edc0688223fbbd478762b1c2cded3360dcee23dd8b0e710e122d2742c89b224333fa40dced2817742770ba10d67bda503ee5e578fb3d8b8a1e5337316213da92841589d
  </dd>
          <dt>y'_4:</dt>
          <dd>
    0x0d209d5a223a9c46916503fa5a88325a2554dc541b43dd93b5a959805f1129857ed85c77fa238cdce8a1e2ca4e512b64f59f430135945d137b08857fdddfcf7a43f47831f982e50137
  </dd>
          <dt>y'_5:</dt>
          <dd>
    0x07d0d03745736b7a513d339d5ad537b90421ad66eb16722b589d82e2055ab7504fa83420e8c270841f6824f47c180d139e3aafc198caa72b679da59ed8226cf3a594eedc58cf90bee4
  </dd>
          <dt>y'_6:</dt>
          <dd>
    0x0896767811be65ea25c2d05dfdd17af8a006f364fc0841b064155f14e4c819a6df98f425ae3a2864f22c1fab8c74b2618b5bb40fa639f53dccc9e884017d9aa62b3d41faeafeb23986
  </dd>
          <dt>y'_7:</dt>
          <dd>
    0x035e2524ff89029d393a5c07e84f981b5e068f1406be8e50c87549b6ef8eca9a9533a3f8e69c31e97e1ad0333ec719205417300d8c4ab33f748e5ac66e84069c55d667ffcb732718b6
  </dd>
          <dt>h:</dt>
          <dd>
      0x85555841aaaec4ac
  </dd>
          <dt>b:</dt>
          <dd>
  1</dd>
          <dt>r':</dt>
          <dd>
      0x2386f8a925e2885e233a9ccc1615c0d6c635387a3f0b3cbe003fad6bc972c2e6e741969d34c4c92016a85c7cd0562303c4ccbe599467c24da118a5fe6fcd671c01
  </dd>
          <dt>h':</dt>
          <dd>
      0x170e915cb0a6b7406b8d94042317f811d6bc3fc6e211ada42e58ccfcb3ac076a7e4499d700a0c23dc4b0c078f92def8c87b7fe63e1eea270db353a4ef4d38b5998ad8f0d042ea24c8f02be1c0c83992fe5d7725227bb27123a949e0876c0a8ce0a67326db0e955dcb791b867f31d6bfa62fbdd5f44a00504df04e186fae033f1eb43c1b1a08b6e086eff03c8fee9ebdd1e191a8a4b0466c90b389987de5637d5dd13dab33196bd2e5afa6cd19cf0fc3fc7db7ece1f3fac742626b1b02fcee04043b2ea96492f6afa51739597c54bb78aa6b0b99319fef9d09f768831018ee6564c68d054c62f2e0b4549426fec24ab26957a669dba2a2b6945ce40c9aec6afdeda16c79e15546cd7771fa544d5364236690ea06832679562a68731420ae52d0d35a90b8d10b688e31b6aee45f45b7a5083c71732105852decc888f64839a4de33b99521f0984a418d20fc7b0609530e454f0696fa2a8075ac01cc8ae3869e8d0fe1f3788ffac4c01aa2720e431da333c83d9663bfb1fb7a1a7b90528482c6be7892299030bb51a51dc7e91e9156874416bf4c26f1ea7ec578058563960ef92bbbb8632d3a1b695f954af10e9a78e40acffc13b06540aae9da5287fc4429485d44e6289d8c0d6a3eb2ece35012452751839fb48bc14b515478e2ff412d930ac20307561f3a5c998e6bcbfebd97effc6433033a2361bfcdc4fc74ad379a16c6dea49c209b1
  </dd>
          <dt>b':</dt>
          <dd>
  -1 / w</dd>
        </dl>
      </section>
    </section>
    
    
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>The recommended pairing-friendly curves are selected by considering the exTNFS proposed by Kim et al. in 2016 <xref target="KB16" format="default"/> and they are categorized in each security level in accordance with <xref target="BD18" format="default"/>.
Implementers who will newly develop pairing-based cryptography applications SHOULD use the recommended parameters.
As of 2020, as far as we know, there are no fatal attacks that significantly reduce the security of pairing-friendly curves after exTNFS.
</t>
      <t>BLS curves of embedding degree 12 typically require a characteristic p of 461 bits or larger to achieve the 128-bit security level <xref target="BD18" format="default"/>.
Note that the security level of BLS12-381, which is adopted by a lot of libraries and applications, is slightly below 128 bits because a 381-bit characteristic is used <xref target="BD18" format="default"/> <xref target="GMT19" format="default"/>.
</t>
      <t> BN254 is used in most of the existing implementations as shown in <xref target="adoption" format="default"/>, however, BN curves that were estimated as the 128-bit security level before exTNFS including BN254 ensure no more than the 100-bit security level by the effect of exTNFS.
 Implementers MAY use pairing-friendly curves with 100-bit security only if they need to keep interoperability with the existing applications.
</t>      
<t>In addition, implementors should be aware of the following points when they implement pairing-based cryptographic applications using recommended curves.</t>
<t>In applications such as key agreement protocols, users exchange the elements in G_1 and G_2 as public keys. To check these elements are so-called sub-group secure <xref target="BCM15" format="default"/>, implementors should validate if the elements have the correct order r. Specifically, for public keys P in G_1 and Q in G_2, a receiver should calculate scalar multiplications [r]P and [r]Q, and check the results become points at infinity.
</t>
<t>The pairing-based protocols, such as the BLS signatures, calculate a scalar multiplication with the secret key. In order to prevent the leakage of secret key due to side channel attacks, implementors should apply countermeasure techniques such as montgomery ladder when they implement a module of scalar multiplication<xref target="Montgomery" format="default"/> <xref target="RFC7748" format="default"/>.
</t>
<t>
When converting between an element in extension field and an octet string, implementors should check that the coefficient is within an appropriate range <xref target="IEEE1363" format="default"/>.
If the coefficient is out of range, there is a possible that security vulnerabilities such as the signature forgery may occur.
</t>
<t>
Recommended parameters are affected by the Cheon's attack which is a solving algorithm for the strong DH problem <xref target="Cheon06" format="default"/>. Therefore, implementers should be careful when they design cryptographic protocols based on the strong DH problem. For example, in the case of Short Signatures, they can prevent the Cheon's attack by carefully setting the maximum number of queries.
</t>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>This document has no actions for IANA.</t>
    </section>
    <section anchor="acknowledgements" numbered="true" toc="default">
      <name>Acknowledgements</name>
      <t>The authors would like to thank Akihiro Kato and Shoko Yonezawa for their significant contribution to an early version of this memo.
The authors would also like to acknowledge Sakae Chikara, Kim Taechan, Hoeteck Wee, Sergey Gorbunov, Michael Scott, Chloe Martindale as an Expert Reviewer, Watson Ladd, Armand Faz, and Satoru Kanno for their valuable comments.</t>

</section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
        <reference anchor="Ver09">
          <front>
            <title>Optimal Pairings</title>
            <seriesInfo name="DOI" value="10.1109/tit.2009.2034881"/>
            <seriesInfo name="IEEE Transactions on Information Theory" value="Vol. 56, pp. 455-461"/>
            <author initials="F." surname="Vercauteren" fullname="Frederik Vercauteren">
              <organization/>
            </author>
            <date year="2010" month="January"/>
          </front>
        </reference>
        <reference anchor="BN05">
          <front>
            <title>Pairing-Friendly Elliptic Curves of Prime Order</title>
            <seriesInfo name="DOI" value="10.1007/11693383_22"/>
            <seriesInfo name="Selected Areas in Cryptography" value="pp. 319-331"/>
            <author initials="P." surname="Barreto" fullname="Paulo S. L. M. Barreto">
              <organization/>
            </author>
            <author initials="M." surname="Naehrig" fullname="Michael Naehrig">
              <organization/>
            </author>
            <date year="2006"/>
          </front>
        </reference>
        <reference anchor="BLS02">
          <front>
            <title>Constructing Elliptic Curves with Prescribed Embedding Degrees</title>
            <seriesInfo name="DOI" value="10.1007/3-540-36413-7_19"/>
            <seriesInfo name="Security in Communication Networks" value="pp. 257-267"/>
            <author initials="P." surname="Barreto" fullname="Paulo S. L. M. Barreto">
              <organization/>
            </author>
            <author initials="B." surname="Lynn" fullname="Ben Lynn">
              <organization/>
            </author>
            <author initials="M." surname="Scott" fullname="Michael Scott">
              <organization/>
            </author>
            <date year="2003"/>
          </front>
        </reference>
        <reference anchor="KB16">
          <front>
            <title>Extended Tower Number Field Sieve: A New Complexity for the Medium Prime Case</title>
            <seriesInfo name="DOI" value="10.1007/978-3-662-53018-4_20"/>
            <seriesInfo name="Advances in Cryptology - CRYPTO 2016" value="pp. 543-571"/>
            <author initials="T." surname="Kim" fullname="Taechan Kim">
              <organization/>
            </author>
            <author initials="R." surname="Barbulescu" fullname="Razvan Barbulescu">
              <organization/>
            </author>
            <date year="2016"/>
          </front>
        </reference>
        <reference anchor="BD18">
          <front>
            <title>Updating Key Size Estimations for Pairings</title>
            <seriesInfo name="DOI" value="10.1007/s00145-018-9280-5"/>
            <seriesInfo name="Journal of" value="Cryptology"/>
            <author initials="R." surname="Barbulescu" fullname="Razvan Barbulescu">
              <organization/>
            </author>
            <author initials="S." surname="Duquesne" fullname="Sylvain Duquesne">
              <organization/>
            </author>
            <date year="2018" month="January"/>
          </front>
        </reference>
        <reference anchor="KIK17">
          <front>
            <title>Secure and Efficient Pairing at 256-Bit Security Level</title>
            <seriesInfo name="DOI" value="10.1007/978-3-319-61204-1_4"/>
            <seriesInfo name="Applied Cryptography and Network Security" value="pp. 59-79"/>
            <author initials="Y." surname="Kiyomura" fullname="Yutaro Kiyomura">
              <organization/>
            </author>
            <author initials="A." surname="Inoue" fullname="Akiko Inoue">
              <organization/>
            </author>
            <author initials="Y." surname="Kawahara" fullname="Yuto Kawahara">
              <organization/>
            </author>
            <author initials="M." surname="Yasuda" fullname="Masaya Yasuda">
              <organization/>
            </author>
            <author initials="T." surname="Takagi" fullname="Tsuyoshi Takagi">
              <organization/>
            </author>
            <author initials="T." surname="Kobayashi" fullname="Tetsutaro Kobayashi">
              <organization/>
            </author>
            <date year="2017"/>
          </front>
        </reference>

        <reference anchor="GMT19">
          <front>
            <title>Cocks–Pinch curves of embedding degrees five to eight and optimal ate pairing computation</title>
            <seriesInfo name="DOI" value="10.1007/s10623-020-00727-w"/>
            <seriesInfo name="International Journal of Designs, Codes and Cryptography" value="vol. 88, pp. 1047-1081"/>
            <author initials="A." surname="Guillevic">
              <organization/>
            </author>
            <author initials="S. " surname="Masson" fullname="Simon Masson">
              <organization/>
            </author>
            <author initials="E." surname="Thome" fullname="Emmanuel Thome">
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>

        <reference anchor="NIST">
          <front>
            <title>NIST special publication 800-57 part 1 (revised) : Recommendation for key management, part 1: General (revised)</title>
            <seriesInfo name="National Institute of Standards and Technology" value="(NIST)"/>
            <author initials="E." surname="Barker">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
        </reference>

      </references>



      <references>
        <name>Informative References</name>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5091.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6508.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6539.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6509.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7748.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8017.xml"/>
        <reference anchor="SAKKE">
          <front>
            <title>Security of the mission critical service (Release 15)</title>
            <seriesInfo name="3GPP TS" value="33.180 15.3.0"/>
            <author>
              <organization>3GPP</organization>
            </author>
            <date year="2018"/>
          </front>
        </reference>
        <reference anchor="ISOIEC11770-3">
          <front>
            <title>ISO/IEC 11770-3:2015</title>
            <seriesInfo name="ISO/IEC" value="Information technology -- Security techniques -- Key management -- Part 3: Mechanisms using asymmetric techniques"/>
            <author>
              <organization>ISO/IEC</organization>
            </author>
            <date year="2015"/>
          </front>
        </reference>
        <reference anchor="Joux00">
          <front>
            <title>A One Round Protocol for Tripartite Diffie-Hellman</title>
            <seriesInfo name="DOI" value="10.1007/10722028_23"/>
            <seriesInfo name="Lecture Notes in Computer Science" value="pp. 385-393"/>
            <author initials="A." surname="Joux" fullname="Antoine Joux">
              <organization/>
            </author>
            <date year="2000"/>
          </front>
        </reference>
        <reference anchor="CCS07">
          <front>
            <title>Identity-based key agreement protocols from pairings</title>
            <seriesInfo name="DOI" value="10.1007/s10207-006-0011-9"/>
            <seriesInfo name="International Journal of Information Security" value="Vol. 6, pp. 213-241"/>
            <author initials="L." surname="Chen" fullname="L. Chen">
              <organization/>
            </author>
            <author initials="Z." surname="Cheng" fullname="Z. Cheng">
              <organization/>
            </author>
            <author initials="N." surname="Smart" fullname="N. P. Smart">
              <organization/>
            </author>
            <date year="2007" month="January"/>
          </front>
        </reference>
        <reference anchor="FSU10">
          <front>
            <title>Ephemeral Key Leakage Resilient and Efficient ID-AKEs That Can Share Identities, Private and Master Keys</title>
            <seriesInfo name="DOI" value="10.1007/978-3-642-17455-1_12"/>
            <seriesInfo name="Lecture Notes in Computer Science" value="pp. 187-205"/>
            <author initials="A." surname="Fujioka" fullname="Atsushi Fujioka">
              <organization/>
            </author>
            <author initials="K." surname="Suzuki" fullname="Koutarou Suzuki">
              <organization/>
            </author>
            <author initials="B." surname="Ustaoglu" fullname="Berkant Ustaoglu">
              <organization/>
            </author>
            <date year="2010"/>
          </front>
        </reference>
        <reference anchor="M-Pin" target="https://www.miracl.com/miracl-labs/m-pin-a-multi-factor-zero-knowledge-authentication-protocol">
          <front>
            <title>M-Pin: A Multi-Factor Zero Knowledge Authentication Protocol</title>
            <author initials="M." surname="Scott">
              <organization/>
            </author>
            <date year="2019" month="July"/>
          </front>
        </reference>
        <reference anchor="TPM" target="https://trustedcomputinggroup.org/resource/tpm-library-specification/">
          <front>
            <title>Trusted Platform Module Library Specification, Family \"2.0\", Level 00, Revision 01.38</title>
            <author>
              <organization>Trusted Computing Group (TCG)</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="FIDO" target="https://fidoalliance.org/specs/fido-v2.0-rd-20180702/fido-ecdaa-algorithm-v2.0-rd-20180702.html">
          <front>
            <title>FIDO ECDAA Algorithm - FIDO Alliance Review Draft 02</title>
            <author initials="R." surname="Lindemann">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="W3C" target="https://www.w3.org/TR/webauthn/">
          <front>
            <title>Web Authentication: An API for accessing Public Key Credentials Level 1 - W3C Recommendation</title>
            <author initials="E." surname="Lundberg">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="EPID" target="https://software.intel.com/en-us/download/intel-sgx-intel-epid-provisioning-and-attestation-services">
          <front>
            <title>Intel (R) SGX: Intel (R) EPID Provisioning and Attestation Services</title>
            <author>
              <organization>Intel Corporation</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="BL10">
          <front>
            <title>Enhanced Privacy ID from Bilinear Pairing for Hardware Authentication and Attestation</title>
            <seriesInfo name="DOI" value="10.1109/socialcom.2010.118"/>
            <seriesInfo name="2010 IEEE Second International Conference on Social" value="Computing"/>
            <author initials="E." surname="Brickell" fullname="Ernie Brickell">
              <organization/>
            </author>
            <author initials="J." surname="Li" fullname="Jiangtao Li">
              <organization/>
            </author>
            <date year="2010" month="August"/>
          </front>
        </reference>

        <reference anchor="Zcash" target="https://z.cash/technology/zksnarks.html">
          <front>
            <title>What are zk-SNARKs?</title>
            <author initials="R." surname="Lindemann">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>

        <reference anchor="ZCashRep" target="https://github.com/zkcrypto/pairing/blob/master/src/bls12_381/README.md">
          <front>
            <title>BLS12-381</title>
            <author>
              <organization>Electric Coin Company</organization>
            </author>
            <date year="2017" month="July"/>
          </front>
        </reference>

        <reference anchor="Cloudflare" target="https://blog.cloudflare.com/geo-key-manager-how-it-works/">
          <front>
            <title>Geo Key Manager: How It Works</title>
            <author initials="N." surname="Sullivan">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.draft-ietf-lwig-curve-representations-08.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.draft-boneh-bls-signature-00.xml"/>
        <reference anchor="Ethereum" target="https://medium.com/prysmatic-labs/ethereum-2-0-development-update-17-prysmatic-labs-ed5bcf82ec00">
          <front>
            <title>Ethereum 2.0 Development Update #17 - Prysmatic Labs</title>
            <author initials="R." surname="Jordan">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="Algorand" target="https://medium.com/algorand/digital-signatures-for-blockchains-5820e15fbe95">
          <front>
            <title>Efficient and Secure Digital Signatures for Proof-of-Stake Blockchains</title>
            <author initials="S." surname="Gorbunov">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="Chia" target="https://github.com/Chia-Network/bls-signatures">
          <front>
            <title>BLS signatures in C++, using the relic toolkit</title>
            <author>
              <organization>Chia Network</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="DFINITY" target="https://dfinity.org/pdf-viewer/library/dfinity-consensus.pdf">
          <front>
            <title>DFINITY Technology Overview Series Consensus System Rev. 1</title>
            <author initials="D." surname="Williams">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
<reference anchor="IEEE1363" >
  <front>
    <title>IEEE Standard Specifications for Public-Key Cryptography</title>
    <author >
      <organization></organization>
    </author>
    <date year="2000"/>
  </front>
  <seriesInfo name="IEEE" value="standard"/>
  <seriesInfo name="DOI" value="10.1109/IEEESTD.2000.92292"/>
</reference>

        <reference anchor="Cheon06">
          <front>
            <title>Security Analysis of the Strong Diffie-Hellman Problem</title>
            <seriesInfo name="DOI" value="10.1007/11761679_1"/>
            <seriesInfo name="EUROCRYPT 2006" value="pp. 1-11"/>
            <author initials="J. H. " surname="Cheon" fullname="Jung Hee Cheon">
              <organization/>
            </author>
            <date year="2006"/>
          </front>
        </reference>


<reference anchor="ECRYPT">
          <front>
            <title>Final Report on Main Computational Assumptions in Cryptography</title>
            <author>
              <organization>ECRYPT</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="Pollard78">
          <front>
            <title>Monte Carlo methods for index computation $({\rm mod}\ p)$</title>
            <seriesInfo name="DOI" value="10.1090/s0025-5718-1978-0491431-9"/>
            <seriesInfo name="Mathematics of Computation" value="Vol. 32, pp. 918-918"/>
            <author initials="J." surname="Pollard" fullname="J. M. Pollard">
              <organization/>
            </author>
            <date year="1978" month="September"/>
          </front>
        </reference>
        <reference anchor="HR83">
          <front>
            <title>Fast Computation of Discrete Logarithms in GF (q)</title>
            <seriesInfo name="DOI" value="10.1007/978-1-4757-0602-4_1"/>
            <seriesInfo name="Advances in Cryptology" value="pp. 3-13"/>
            <author initials="M." surname="Hellman" fullname="Martin E. Hellman">
              <organization/>
            </author>
            <author initials="J." surname="Reyneri" fullname="Justin M. Reyneri">
              <organization/>
            </author>
            <date year="1983"/>
          </front>
        </reference>
        
        <reference anchor="mcl" target="https://github.com/herumi/mcl">
          <front>
            <title>mcl - A portable and fast pairing-based cryptography library</title>
            <author initials="S." surname="Mitsunari">
              <organization/>
            </author>
            <date year="2016"/>
          </front>
        </reference>
        <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">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="ISOIEC15946-5">
          <front>
            <title>ISO/IEC 15946-5:2017</title>
            <seriesInfo name="ISO/IEC" value="Information technology -- Security techniques -- Cryptographic techniques based on elliptic curves -- Part 5: Elliptic curve generation"/>
            <author>
              <organization>ISO/IEC</organization>
            </author>
            <date year="2017"/>
          </front>
        </reference>

        <reference anchor="MIRACL" target="https://github.com/miracl/core">
          <front>
            <title>The MIRACL Core Cryptographic Library</title>
            <author>
              <organization>MIRACL Ltd.</organization>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        
        <reference anchor="libsnark" target="https://github.com/zcash/libsnark">
          <front>
            <title>libsnark: a C++ library for zkSNARK proofs</title>
            <author>
              <organization>SCIPR Lab</organization>
            </author>
            <date year="2012"/>
          </front>
        </reference>
        <reference anchor="zkcrypto" target="https://github.com/zkcrypto/pairing">
          <front>
            <title>zkcrypto - Pairing-friendly elliptic curve library</title>
            <author>
              <organization>zkcrypto</organization>
            </author>
            <date year="2017"/>
          </front>
        </reference>
        <reference anchor="CIRCL" target="https://github.com/cloudflare/circl">
          <front>
            <title>CIRCL: Cloudflare Interoperable, Reusable Cryptographic Library</title>
            <author>
              <organization>Cloudflare</organization>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="PBC" target="https://crypto.stanford.edu/pbc/">
          <front>
            <title>PBC Library - The Pairing-Based Cryptography Library</title>
            <author initials="B." surname="Lynn">
              <organization/>
            </author>
            <date year="2006"/>
          </front>
        </reference>
        <reference anchor="RELIC" target="https://github.com/relic-toolkit/relic">
          <front>
            <title>RELIC is an Efficient LIbrary for Cryptography</title>
            <author initials="C.P.L." surname="Gouvea">
              <organization/>
            </author>
            <date year="2013"/>
          </front>
        </reference>
        <reference anchor="pureGo-bls" target="https://github.com/phoreproject/bls">
          <front>
            <title>Pure GO bls library</title>
            <author initials="J." surname="Meyer">
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>

        <reference anchor="TEPLA" target="http://www.cipher.risk.tsukuba.ac.jp/tepla/index_e.html">
          <front>
            <title>TEPLA: University of Tsukuba Elliptic Curve and Pairing Library</title>
            <author>
              <organization>University of Tsukuba</organization>
            </author>
            <date year="2013"/>
          </front>
        </reference>
        <reference anchor="AMCL" target="https://github.com/apache/incubator-milagro-crypto">
          <front>
            <title>The Apache Milagro Cryptographic Library (AMCL)</title>
            <author>
              <organization>The Apache Software Foundation</organization>
            </author>
            <date year="2016"/>
          </front>
        </reference>
        <reference anchor="Intel-IPP" target="https://software.intel.com/en-us/ipp-crypto-reference-arithmetic-of-the-group-of-elliptic-curve-points">
          <front>
            <title>Developer Reference for Intel Integrated Performance Primitives Cryptography 2019</title>
            <author>
              <organization>Intel Corporation</organization>
            </author>
            <date year="2018"/>
          </front>
        </reference>
        <reference anchor="BLS48" target="https://github.com/mk-math-kyushu/bls48">
          <front>
            <title>bls48 - C++ library for Optimal Ate Pairing on BLS48</title>
            <author>
              <organization>Kyushu University</organization>
            </author>
            <date year="2017"/>
          </front>
        </reference>
        
        <reference anchor="NASKM08">
          <front>
            <title>Integer Variable X-Based Ate Pairing</title>
            <seriesInfo name="DOI" value="10.1007/978-3-540-85538-5_13"/>
            <seriesInfo name="Pairing 2008" value="pp. 178-191"/>
            <author initials="Y." surname="Nogami" fullname="Yasuyuki Nogami">
              <organization/>
            </author>
            <author initials="M." surname="Akane" fullname="Masataka Akane">
              <organization/>
            </author>
            <author initials="Y." surname="Sakemi" fullname="Yumi Sakemi">
              <organization/>
            </author>
            <author initials="H." surname="Kato" fullname="Hidehiro Kato">
              <organization/>
            </author>
            <author initials="Y." surname="Morikawa" fullname="Yoshitaka Morikawa">
              <organization/>
            </author>  
            <date year="2008"/>
          </front>
        </reference>

        <reference anchor="DSD07">
          <front>
            <title>Implementing Cryptographic Pairings over Barreto-Naehrig Curves</title>
            <seriesInfo name="DOI" value="10.1007/978-3-540-73489-5_10"/>
            <seriesInfo name="Pairing 2007" value="pp. 197-207"/>
            <author initials="A. J." surname="Devegili" fullname="Augusto Jun Devegili">
              <organization/>
            </author>
            <author initials="M." surname="Scott" fullname="Michael Scott">
              <organization/>
            </author>
            <author initials="R." surname="Dahab" fullname="Ricard Dahab">
              <organization/>
            </author>
            <date year="2007"/>
          </front>
        </reference>

        <reference anchor="BGMORT10">
          <front>
            <title>High-Speed Software Implementation of the Optimal Ate Pairing over Barreto–Naehrig Curves</title>
            <seriesInfo name="DOI" value="10.1007/978-3-642-17455-1_2"/>
            <seriesInfo name="Pairing 2010" value="pp. 21-39"/>
            <author initials="J." surname="Beuchat" fullname="Jean-Luc Beuchat">
              <organization/>
            </author>
            <author initials="J." surname="González-Díaz" fullname="Jorge E. González-Díaz">
              <organization/>
            </author>
            <author initials="S." surname="Mitsunari" fullname="Shigeo Mitsunari">
              <organization/>
            </author>
            <author initials="E." surname="Okamoto" fullname="Eiji Okamoto">
              <organization/>
            </author>
            <author initials="F." surname="Rodríguez-Henríquez" fullname="Francisco Rodríguez-Henríquez">
              <organization/>
            </author>
            <author initials="T." surname="Teruya" fullname="Tadanori Teruya">
              <organization/>
            </author>
            <date year="2010"/>
          </front>
        </reference>

        <reference anchor="MP04" target="https://eprint.iacr.org/2004/032.pdf">
          <front>
            <title>Cocks–Pinch curves of embedding degrees five to eight and optimal ate pairing computation</title>
            <seriesInfo name="Cryptology ePrint Archive" value="Report 2019/431"/>
            <author initials="A." surname="Guillevic">
              <organization/>
            </author>
            <author initials="S." surname="Masson">
              <organization/>
            </author>
            <author initials="E." surname="Thome">
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>

        <reference anchor="SG19" target="https://eprint.iacr.org/2018/193.pdf">
          <front>
            <title>A New Family of Pairing-Friendly elliptic curves</title>
            <seriesInfo name="Cryptology ePrint Archive" value="Report 2019/193"/>
            <author initials="M." surname="Scott">
              <organization/>
            </author>
            <author initials="A." surname="Guillevic">
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>

        <reference anchor="BCM15" target="https://eprint.iacr.org/2015/247.pdf">
          <front>
            <title>Subgroup security in pairing-based cryptography</title>
            <seriesInfo name="Cryptology ePrint Archive" value="Report 2015/247"/>
            <author initials="P. S. L. M." surname="Barreto">
              <organization/>
            </author>
            <author initials="C." surname="Costello">
              <organization/>
            </author>
            <author initials="R." surname="Misoczki">
              <organization/>
            </author>
            <author initials="M." surname="Naehrig">
              <organization/>
            </author>
            <author initials="G. C. C. F. " surname="Pereira">
              <organization/>
            </author>
            <author initials="G. " surname="Zanon">
              <organization/>
            </author>

            <date year="2015"/>
          </front>
        </reference>

        <reference anchor="Montgomery" target="https://www.ams.org/journals/mcom/1987-48-177/S0025-5718-1987-0866113-7/S0025-5718-1987-0866113-7.pdf">
          <front>
            <title>Speeding the Pollard and Elliptic Curve Methods of Factorization</title>
            <seriesInfo name="MATHEMATICS OF COMPUTATION" value=", January"/>
            <author initials="P." surname="Montgomery">
              <organization/>
            </author>
            <date year="1987"/>
          </front>
        </reference>

        <reference anchor="MAF19" target="https://www.researchgate.net/publication/337011283_Computing_the_Optimal_Ate_Pairing_over_Elliptic_Curves_with_Embedding_Degrees_54_and_48_at_the_256-bit_security_level">
          <front>
            <title>Computing the Optimal Ate Pairing over Elliptic Curves with Embedding Degrees 54 and 48 at the 256-bit security level</title>
            <seriesInfo name="International Journal of Applied Cryptography" value="to appear"/>
            <author initials="N.B." surname="Mbiang">
              <organization/>
            </author>
            <author initials="D.F." surname="Aranha">
              <organization/>
            </author>
            <author initials="E." surname="Fouotsa">
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>

        <reference anchor="KSS08">
          <front>
            <title>Constructing Brezing-Weng Pairing-Friendly Elliptic Curves Using Elements in the Cyclotomic Field</title>
            <seriesInfo name="DOI" value="10.1007/978-3-540-85538-5_9"/>
            <seriesInfo name="Pairing 2008" value="pp. 126-135"/>
            <author initials="E." surname="Kachisa" >
              <organization/>
            </author>
            <author initials="E." surname="Schaefer">
              <organization/>
            </author>
            <author initials="M." surname="Scott">
              <organization/>
            </author>
            <date year="2008"/>
          </front>
        </reference>

        <reference anchor="AFKMR12">
          <front>
            <title>Implementing Pairings at the 192-Bit Security Level</title>
            <seriesInfo name="DOI" value="/10.1007/978-3-642-36334-4_11"/>
            <seriesInfo name="Pairing 2012" value="pp. 177-195"/>
            <author initials="D.F." surname="Aranha" >
              <organization/>
            </author>
            <author initials="L." surname="Fuentes-Castaneda">
              <organization/>
            </author>
            <author initials="E." surname="Knapp">
              <organization/>
            </author>
            <author initials="A." surname="Menezes">
              <organization/>
            </author>
            <author initials="F." surname="Rodríguez-Henríquez">
              <organization/>
            </author>
            <date year="2012"/>
          </front>
        </reference>

        <reference anchor="FM19" target="https://eprint.iacr.org/2019/555.pdf">
          <front>
            <title>Optimal TNFS-secure pairings on elliptic curves with composite embedding degree</title>
            <seriesInfo name="Cryptology ePrint Archive" value="Report 2019/555"/>
            <author initials="G." surname="Fotiadis">
              <organization/>
            </author>
            <author initials="C." surname="Martindale">
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>

        <reference anchor="FK18" target="https://eprint.iacr.org/2018/1017.pdf">
          <front>
            <title>TNFS Resistant Families of Pairing-Friendly Elliptic Curves</title>
            <seriesInfo name="Cryptology ePrint Archive" value="Report 2018/1017"/>
            <author initials="G." surname="Fotiadis">
              <organization/>
            </author>
            <author initials="E." surname="Konstantinou">
              <organization/>
            </author>
            <date year="2018"/>
          </front>
        </reference>


        <reference anchor="S86">
          <front>
            <title>The arithmetic of elliptic curves</title>
            <seriesInfo name="Springer GTM" value="106"/>
            <author initials="J. H." surname="Silverman">
              <organization/>
            </author>
            <date year="1986"/>
          </front>
        </reference>

        <reference anchor="MNT01">
          <front>
            <title>New explicit conditions of Elliptic Curve Traces under FR reduction</title>
            <seriesInfo name="IEICE Trans. Fundamentals. E84-A(5)" value="pp. 1234-1243"/>
            <author initials="A." surname="Miyaji" >
              <organization/>
            </author>
            <author initials="M." surname="Nakabayashi">
              <organization/>
            </author>
            <author initials="S." surname="Takano">
              <organization/>
            </author>
            <date year="2001"/>
          </front>
        </reference>

        <reference anchor="Freeman06">
          <front>
            <title>Constructing pairing-friendly elliptic curves with embedding degree 10</title>
            <seriesInfo name="DOI" value="10.1007/11792086_32"/>
            <seriesInfo name="ANTS 2006" value="pp. 452-465"/>
            <author initials="D." surname="Freeman" >
              <organization/>
            </author>
            <date year="2006"/>
          </front>
        </reference>

        <reference anchor="AdjointLib" target="https://github.com/adjoint-io/pairing">
          <front>
            <title>Optimised bilinear pairings over elliptic curves</title>
            <author>
              <organization>Adjoint Inc.</organization>
            </author>
            <date year="2018"/>
          </front>
        </reference>

        <reference anchor="AMCLv2" target="https://github.com/miracl/amcl/tree/master/version22">
          <front>
            <title>Old version of the Apache Milagro Cryptographic Library</title>
            <author>
              <organization>The Apache Software Foundation</organization>
            </author>
            <date year="2016"/>
          </front>
        </reference>

      </references>
    </references>
    <section anchor="comp_pairing" numbered="true" toc="default">
      <name>Computing the Optimal Ate Pairing</name>
      <t>Before presenting the computation of the optimal Ate pairing e(P, Q) 
satisfying the properties shown in <xref target="pairing" format="default"/>, 
we give the subfunctions used for the pairing computation.</t>
      <t>The following algorithm, Line_Function shows the computation of the line function.
It takes A = (A[1], A[2]), B = (B[1], B[2]) in G_2, and P = ((P[1], P[2])) in G_1 as input, and outputs an element of G_T.</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
    if (A = B) then
        l := (3 * A[1]^2) / (2 * A[2]);
    else if (A = -B) then
        return P[1] - A[1];
    else
        l := (B[2] - A[2]) / (B[1] - A[1]);
    end if;
    return (l * (P[1] -A[1]) + A[2] -P[2]);
]]></artwork>
      <t>When implementing the line function, implementers should consider the isomorphism of E and its twist curve E' so that one can reduce the computational cost of operations in G_2. We note that Line_function does not consider such an isomorphism.</t>
      <t>The computation of the optimal Ate pairing for BN curves uses the Frobenius map.
The p-power Frobenius map pi for a point Q = (x, y) over E' is pi(p, Q) = (x^p, y^p).</t>
      <section anchor="optimal-ate-pairings-over-barreto-naehrig-curves" numbered="true" toc="default">
        <name>Optimal Ate Pairings over Barreto-Naehrig Curves</name>
        <t>Let c = 6 * t + 2 for a parameter t and c_0, c_1, ... , c_L in {-1,0,1} such that the sum of c_i * 2^i (i = 0, 1, ..., L) equals c.</t>
        <t>The following algorithm shows the computation of the optimal Ate pairing on BN curves.
It takes P in G_1, Q in G_2, an integer c, c_0, ...,c_L in {-1,0,1} such that the sum of c_i * 2^i (i = 0, 1, ..., L) equals c, and the order r of G_1 as input, and outputs e(P, Q).</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
    f := 1; T := Q;
    if (c_L = -1)
        T := -T;
    end if
    for i = L-1 to 0
        f := f^2 * Line_function(T, T, P); T := 2 * T;
        if (c_i = 1 | c_i = -1)
            f := f * Line_function(T, c_i * Q); T := T + c_i * Q;
        end if
    end for
    Q_1 := pi(p, Q); Q_2 := pi(p, Q_1);
    f := f * Line_function(T, Q_1, P); T := T + Q_1;
    f := f * Line_function(T, -Q_2, P);
    f := f^{(p^k - 1) / r}
    return f;
]]></artwork>
      </section>
      <section anchor="optimal-ate-pairings-over-barreto-lynn-scott-curves" numbered="true" toc="default">
        <name>Optimal Ate Pairings over Barreto-Lynn-Scott Curves</name>
        <t>Let c = t for a parameter t and c_0, c_1, ... , c_L in {-1,0,1} such that the sum of c_i * 2^i (i = 0, 1, ..., L) equals c.
The following algorithm shows the computation of optimal Ate pairing over Barreto-Lynn-Scott curves.
It takes P in G_1, Q in G_2, a parameter c, c_0, c_1, ..., c_L in {-1,0,1} such that the sum of c_i * 2^i (i = 0, 1, ..., L), 
and an order r as input, and outputs e(P, Q).</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
    f := 1; T := Q;
    if (c_L = -1)
        T := -T;
    end if
    for i = L-1 to 0
        f := f^2 * Line_function(T, T, P); T := 2 * T;
        if (c_i = 1 | c_i = -1)
            f := f * Line_function(T, c_i * Q, P); T := T + c_i * Q;
        end if
    end for
    f := f^{(p^k - 1) / r};
    return f;
]]></artwork>
      </section>
    </section>

    <section anchor="test-vectors-of-optimal-ate-pairing" numbered="true" toc="default">
      <name>Test Vectors of Optimal Ate Pairing</name>
      <t>We provide test vectors for Optimal Ate Pairing e(P, Q) given in <xref target="comp_pairing" format="default"/> for the curves BLS12-381, BN462 and BLS48-581 given in <xref target="secure_params" format="default"/>.
Here, the inputs P = (x, y) and Q = (x', y') are the corresponding base points BP and BP' given in <xref target="secure_params" format="default"/>.</t>
      <t>For BLS12-381 and BN462, Q = (x', y') is given by</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
    x' = x'_0 + x'_1 * u and
    y' = y'_0 + y'_1 * u,
]]></artwork>
      <t>where u is a indeterminate and x'_0, x'_1, y'_0, y'_1 are elements of F_p.</t>
      <t>For BLS48-581, Q = (x', y') is given by</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
    x' = x'_0 + x'_1 * u + x'_2 * v + x'_3 * u * v 
        + x'_4 * w + x'_5 * u * w + x'_6 * v * w + x'_7 * u * v * w and 
    y' = y'_0 + y'_1 * u + y'_2 * v + y'_3 * u * v 
        + y'_4 * w + y'_5 * u * w + y'_6 * v * w + y'_7 * u * v * w,
]]></artwork>
      <t>where u, v and w are indeterminates and x'_0, ..., x'_7 and y'_0, ..., y'_7 are elements of F_p.
The representation of Q = (x', y') given below is followed by <xref target="I-D.ietf-lwig-curve-representations" format="default"/>.</t>

      <t>BLS12-381:</t>
      <dl newline="false" spacing="normal">
        <dt>Input x value:</dt>
        <dd>
      0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb
  </dd>
        <dt>Input y value:</dt>
        <dd>
      0x08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1
  </dd>
        <dt>Input x'_0 value:</dt>
        <dd>
      0x024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8
  </dd>
        <dt>Input x'_1 value:</dt>
        <dd>
      0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e
  </dd>
        <dt>Input y'_0 value:</dt>
        <dd>
      0x0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801
  </dd>
        <dt>Input y'_1 value:</dt>
        <dd>
      0x0606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be
  </dd>

  <dt>e_0:</dt>
        <dd>
      0x11619b45f61edfe3b47a15fac19442526ff489dcda25e59121d9931438907dfd448299a87dde3a649bdba96e84d54558
  </dd>
        <dt>e_1:</dt>
        <dd>
      0x153ce14a76a53e205ba8f275ef1137c56a566f638b52d34ba3bf3bf22f277d70f76316218c0dfd583a394b8448d2be7f
  </dd>
        <dt>e_2:</dt>
        <dd>
      0x095668fb4a02fe930ed44767834c915b283b1c6ca98c047bd4c272e9ac3f3ba6ff0b05a93e59c71fba77bce995f04692
  </dd>
        <dt>e_3:</dt>
        <dd>
      0x16deedaa683124fe7260085184d88f7d036b86f53bb5b7f1fc5e248814782065413e7d958d17960109ea006b2afdeb5f
  </dd>
        <dt>e_4:</dt>
        <dd>
      0x09c92cf02f3cd3d2f9d34bc44eee0dd50314ed44ca5d30ce6a9ec0539be7a86b121edc61839ccc908c4bdde256cd6048
  </dd>
        <dt>e_5:</dt>
        <dd>
      0x111061f398efc2a97ff825b04d21089e24fd8b93a47e41e60eae7e9b2a38d54fa4dedced0811c34ce528781ab9e929c7
  </dd>
        <dt>e_6:</dt>
        <dd>
      0x01ecfcf31c86257ab00b4709c33f1c9c4e007659dd5ffc4a735192167ce197058cfb4c94225e7f1b6c26ad9ba68f63bc
  </dd>
        <dt>e_7:</dt>
        <dd>
      0x08890726743a1f94a8193a166800b7787744a8ad8e2f9365db76863e894b7a11d83f90d873567e9d645ccf725b32d26f
  </dd>
        <dt>e_8:</dt>
        <dd>
      0x0e61c752414ca5dfd258e9606bac08daec29b3e2c57062669556954fb227d3f1260eedf25446a086b0844bcd43646c10
  </dd>
        <dt>e_9:</dt>
        <dd>
      0x0fe63f185f56dd29150fc498bbeea78969e7e783043620db33f75a05a0a2ce5c442beaff9da195ff15164c00ab66bdde
  </dd>
        <dt>e_10:</dt>
        <dd>
      0x10900338a92ed0b47af211636f7cfdec717b7ee43900eee9b5fc24f0000c5874d4801372db478987691c566a8c474978
  </dd>
        <dt>e_11:</dt>
        <dd>
      0x1454814f3085f0e6602247671bc408bbce2007201536818c901dbd4d2095dd86c1ec8b888e59611f60a301af7776be3d
  </dd>
      </dl>

      <t>BN462:</t>
      <dl newline="false" spacing="normal">
        <dt>Input x value:</dt>
        <dd>
      0x21a6d67ef250191fadba34a0a30160b9ac9264b6f95f63b3edbec3cf4b2e689db1bbb4e69a416a0b1e79239c0372e5cd70113c98d91f36b6980d
  </dd>
        <dt>Input y value:</dt>
        <dd>
      0x0118ea0460f7f7abb82b33676a7432a490eeda842cccfa7d788c659650426e6af77df11b8ae40eb80f475432c66600622ecaa8a5734d36fb03de
  </dd>
        <dt>Input x'_0 value:</dt>
        <dd>
      0x0257ccc85b58dda0dfb38e3a8cbdc5482e0337e7c1cd96ed61c913820408208f9ad2699bad92e0032ae1f0aa6a8b48807695468e3d934ae1e4df
  </dd>
        <dt>Input x'_1 value:</dt>
        <dd>
      0x1d2e4343e8599102af8edca849566ba3c98e2a354730cbed9176884058b18134dd86bae555b783718f50af8b59bf7e850e9b73108ba6aa8cd283
  </dd>
        <dt>Input y'_0 value:</dt>
        <dd>
      0x0a0650439da22c1979517427a20809eca035634706e23c3fa7a6bb42fe810f1399a1f41c9ddae32e03695a140e7b11d7c3376e5b68df0db7154e
  </dd>
        <dt>Input y'_1 value:</dt>
        <dd>
      0x073ef0cbd438cbe0172c8ae37306324d44d5e6b0c69ac57b393f1ab370fd725cc647692444a04ef87387aa68d53743493b9eba14cc552ca2a93a
  </dd>
  <dt>e_0:</dt>
        <dd>
      0x0cf7f0f2e01610804272f4a7a24014ac085543d787c8f8bf07059f93f87ba7e2a4ac77835d4ff10e78669be39cd23cc3a659c093dbe3b9647e8c
  </dd>
        <dt>e_1:</dt>
        <dd>
      0x00ef2c737515694ee5b85051e39970f24e27ca278847c7cfa709b0df408b830b3763b1b001f1194445b62d6c093fb6f77e43e369edefb1200389
  </dd>
        <dt>e_2:</dt>
        <dd>
      0x04d685b29fd2b8faedacd36873f24a06158742bb2328740f93827934592d6f1723e0772bb9ccd3025f88dc457fc4f77dfef76104ff43cd430bf7
  </dd>
        <dt>e_3:</dt>
        <dd>
      0x090067ef2892de0c48ee49cbe4ff1f835286c700c8d191574cb424019de11142b3c722cc5083a71912411c4a1f61c00d1e8f14f545348eb7462c
  </dd>
        <dt>e_4:</dt>
        <dd>
      0x1437603b60dce235a090c43f5147d9c03bd63081c8bb1ffa7d8a2c31d673230860bb3dfe4ca85581f7459204ef755f63cba1fbd6a4436f10ba0e
  </dd>
        <dt>e_5:</dt>
        <dd>
      0x13191b1110d13650bf8e76b356fe776eb9d7a03fe33f82e3fe5732071f305d201843238cc96fd0e892bc61701e1844faa8e33446f87c6e29e75f
  </dd>
        <dt>e_6:</dt>
        <dd>
      0x07b1ce375c0191c786bb184cc9c08a6ae5a569dd7586f75d6d2de2b2f075787ee5082d44ca4b8009b3285ecae5fa521e23be76e6a08f17fa5cc8
  </dd>
        <dt>e_7:</dt>
        <dd>
      0x05b64add5e49574b124a02d85f508c8d2d37993ae4c370a9cda89a100cdb5e1d441b57768dbc68429ffae243c0c57fe5ab0a3ee4c6f2d9d34714
  </dd>
        <dt>e_8:</dt>
        <dd>
      0x0fd9a3271854a2b4542b42c55916e1faf7a8b87a7d10907179ac7073f6a1de044906ffaf4760d11c8f92df3e50251e39ce92c700a12e77d0adf3
  </dd>
        <dt>e_9:</dt>
        <dd>
      0x17fa0c7fa60c9a6d4d8bb9897991efd087899edc776f33743db921a689720c82257ee3c788e8160c112f18e841a3dd9a79a6f8782f771d542ee5
  </dd>
        <dt>e_10:</dt>
        <dd>
      0x0c901397a62bb185a8f9cf336e28cfb0f354e2313f99c538cdceedf8b8aa22c23b896201170fc915690f79f6ba75581f1b76055cd89b7182041c
  </dd>
        <dt>e_11:</dt>
        <dd>
      0x20f27fde93cee94ca4bf9ded1b1378c1b0d80439eeb1d0c8daef30db0037104a5e32a2ccc94fa1860a95e39a93ba51187b45f4c2c50c16482322
  </dd>
      </dl>

      <t>BLS48-581:</t>
      <dl newline="false" spacing="normal">
        <dt>Input x value:</dt>
        <dd>
      0x02af59b7ac340f2baf2b73df1e93f860de3f257e0e86868cf61abdbaedffb9f7544550546a9df6f9645847665d859236ebdbc57db368b11786cb74da5d3a1e6d8c3bce8732315af640
  </dd>
        <dt>Input y value:</dt>
        <dd>
      0x0cefda44f6531f91f86b3a2d1fb398a488a553c9efeb8a52e991279dd41b720ef7bb7beffb98aee53e80f678584c3ef22f487f77c2876d1b2e35f37aef7b926b576dbb5de3e2587a70
  </dd>

  <dt>x'_0:</dt>
        <dd>
    0x05d615d9a7871e4a38237fa45a2775debabbefc70344dbccb7de64db3a2ef156c46ff79baad1a8c42281a63ca0612f400503004d80491f510317b79766322154dec34fd0b4ace8bfab
  </dd>
        <dt>x'_1:</dt>
        <dd>
    0x07c4973ece2258512069b0e86abc07e8b22bb6d980e1623e9526f6da12307f4e1c3943a00abfedf16214a76affa62504f0c3c7630d979630ffd75556a01afa143f1669b36676b47c57
  </dd>
        <dt>x'_2:</dt>
        <dd>
    0x01fccc70198f1334e1b2ea1853ad83bc73a8a6ca9ae237ca7a6d6957ccbab5ab6860161c1dbd19242ffae766f0d2a6d55f028cbdfbb879d5fea8ef4cded6b3f0b46488156ca55a3e6a
  </dd>
        <dt>x'_3:</dt>
        <dd>
    0x0be2218c25ceb6185c78d8012954d4bfe8f5985ac62f3e5821b7b92a393f8be0cc218a95f63e1c776e6ec143b1b279b9468c31c5257c200ca52310b8cb4e80bc3f09a7033cbb7feafe
  </dd>
        <dt>x'_4:</dt>
        <dd>
    0x038b91c600b35913a3c598e4caa9dd63007c675d0b1642b5675ff0e7c5805386699981f9e48199d5ac10b2ef492ae589274fad55fc1889aa80c65b5f746c9d4cbb739c3a1c53f8cce5
  </dd>
        <dt>x'_5:</dt>
        <dd>
    0x0c96c7797eb0738603f1311e4ecda088f7b8f35dcef0977a3d1a58677bb037418181df63835d28997eb57b40b9c0b15dd7595a9f177612f097fc7960910fce3370f2004d914a3c093a
  </dd>
        <dt>x'_6:</dt>
        <dd>
    0x0b9b7951c6061ee3f0197a498908aee660dea41b39d13852b6db908ba2c0b7a449cef11f293b13ced0fd0caa5efcf3432aad1cbe4324c22d63334b5b0e205c3354e41607e60750e057
  </dd>
        <dt>x'_7:</dt>
        <dd>
    0x0827d5c22fb2bdec5282624c4f4aaa2b1e5d7a9defaf47b5211cf741719728a7f9f8cfca93f29cff364a7190b7e2b0d4585479bd6aebf9fc44e56af2fc9e97c3f84e19da00fbc6ae34
  </dd>
        <dt>y'_0:</dt>
        <dd>
    0x00eb53356c375b5dfa497216452f3024b918b4238059a577e6f3b39ebfc435faab0906235afa27748d90f7336d8ae5163c1599abf77eea6d659045012ab12c0ff323edd3fe4d2d7971
  </dd>
        <dt>y'_1:</dt>
        <dd>
    0x0284dc75979e0ff144da6531815fcadc2b75a422ba325e6fba01d72964732fcbf3afb096b243b1f192c5c3d1892ab24e1dd212fa097d760e2e588b423525ffc7b111471db936cd5665
  </dd>
        <dt>y'_2:</dt>
        <dd>
    0x0b36a201dd008523e421efb70367669ef2c2fc5030216d5b119d3a480d370514475f7d5c99d0e90411515536ca3295e5e2f0c1d35d51a652269cbc7c46fc3b8fde68332a526a2a8474
  </dd>
        <dt>y'_3:</dt>
        <dd>
    0x0aec25a4621edc0688223fbbd478762b1c2cded3360dcee23dd8b0e710e122d2742c89b224333fa40dced2817742770ba10d67bda503ee5e578fb3d8b8a1e5337316213da92841589d
  </dd>
        <dt>y'_4:</dt>
        <dd>
    0x0d209d5a223a9c46916503fa5a88325a2554dc541b43dd93b5a959805f1129857ed85c77fa238cdce8a1e2ca4e512b64f59f430135945d137b08857fdddfcf7a43f47831f982e50137
  </dd>
        <dt>y'_5:</dt>
        <dd>
    0x07d0d03745736b7a513d339d5ad537b90421ad66eb16722b589d82e2055ab7504fa83420e8c270841f6824f47c180d139e3aafc198caa72b679da59ed8226cf3a594eedc58cf90bee4
  </dd>
        <dt>y'_6:</dt>
        <dd>
    0x0896767811be65ea25c2d05dfdd17af8a006f364fc0841b064155f14e4c819a6df98f425ae3a2864f22c1fab8c74b2618b5bb40fa639f53dccc9e884017d9aa62b3d41faeafeb23986
  </dd>
        <dt>y'_7:</dt>
        <dd>
    0x035e2524ff89029d393a5c07e84f981b5e068f1406be8e50c87549b6ef8eca9a9533a3f8e69c31e97e1ad0333ec719205417300d8c4ab33f748e5ac66e84069c55d667ffcb732718b6
  </dd>

  <dt>e_0:</dt>
        <dd>
      0x0e26c3fcb8ef67417814098de5111ffcccc1d003d15b367bad07cef2291a93d31db03e3f03376f3beae2bd877bcfc22a25dc51016eda1ab56ee3033bc4b4fec5962f02dffb3af5e38e
  </dd>
        <dt>e_1:</dt>
        <dd>
      0x069061b8047279aa5c2d25cdf676ddf34eddbc8ec2ec0f03614886fa828e1fc066b26d35744c0c38271843aa4fb617b57fa9eb4bd256d17367914159fc18b10a1085cb626e5bedb145
  </dd>
        <dt>e_2:</dt>
        <dd>
      0x02b9bece645fbf9d8f97025a1545359f6fe3ffab3cd57094f862f7fb9ca01c88705c26675bcc723878e943da6b56ce25d063381fcd2a292e0e7501fe572744184fb4ab4ca071a04281
  </dd>
        <dt>e_3:</dt>
        <dd>
      0x0080d267bf036c1e61d7fc73905e8c630b97aa05ef3266c82e7a111072c0d2056baa8137fba111c9650dfb18cb1f43363041e202e3192fced29d2b0501c882543fb370a56bfdc2435b
  </dd>
        <dt>e_4:</dt>
        <dd>
      0x03c6b4c12f338f9401e6a493a405b33e64389338db8c5e592a8dd79eac7720dd83dd6b0c189eeda20809160cd57cdf3e2edc82db15f553c1f6c953ea27114cb6bd8a38e273f407dae0
  </dd>
        <dt>e_5:</dt>
        <dd>
      0x016e46224f28bfd8833f76ac29ee6e406a9da1bde55f5e82b3bd977897a9104f18b9ee41ea9af7d4183d895102950a12ce9975669db07924e1b432d9680f5ce7e5c67ed68f381eba45
  </dd>
        <dt>e_6:</dt>
        <dd>
      0x008ddce7a4a1b94be5df3ceea56bef0077dcdde86d579938a50933a47296d337b7629934128e2457e24142b0eeaa978fd8e70986d7dd51fccbbeb8a1933434fec4f5bc538de2646e90
  </dd>
        <dt>e_7:</dt>
        <dd>
      0x060ef6eae55728e40bd4628265218b24b38cdd434968c14bfefb87f0dcbfc76cc473ae2dc0cac6e69dfdf90951175178dc75b9cc08320fcde187aa58ea047a2ee00b1968650eec2791
  </dd>
        <dt>e_8:</dt>
        <dd>
      0x0c3943636876fd4f9393414099a746f84b2633dfb7c36ba6512a0b48e66dcb2e409f1b9e150e36b0b4311165810a3c721525f0d43a021f090e6a27577b42c7a57bed3327edb98ba8f8
  </dd>
        <dt>e_9:</dt>
        <dd>
      0x02d31eb8be0d923cac2a8eb6a07556c8951d849ec53c2848ee78c5eed40262eb21822527a8555b071f1cd080e049e5e7ebfe2541d5b42c1e414341694d6f16d287e4a8d28359c2d2f9
  </dd>
        <dt>e_10:</dt>
        <dd>
      0x07f19673c5580d6a10d09a032397c5d425c3a99ff1dd0abe5bec40a0d47a6b8daabb22edb6b06dd8691950b8f23faefcdd80c45aa3817a840018965941f4247f9f97233a84f58b262e
  </dd>
        <dt>e_11:</dt>
        <dd>
      0x0d3fe01f0c114915c3bdf8089377780076c1685302279fd9ab12d07477aac03b69291652e9f179baa0a99c38aa8851c1d25ffdb4ded2c8fe8b30338c14428607d6d822610d41f51372
  </dd>
        <dt>e_12:</dt>
        <dd>
      0x0662eefd5fab9509aed968866b68cff3bc5d48ecc8ac6867c212a2d82cee5a689a3c9c67f1d611adac7268dc8b06471c0598f7016ca3d1c01649dda4b43531cffc4eb41e691e27f2eb
  </dd>
        <dt>e_13:</dt>
        <dd>
      0x0aad8f4a8cfdca8de0985070304fe4f4d32f99b01d4ea50d9f7cd2abdc0aeea99311a36ec6ed18208642cef9e09b96795b27c42a5a744a7b01a617a91d9fb7623d636640d61a6596ec
  </dd>
        <dt>e_14:</dt>
        <dd>
      0x0ffcf21d641fd9c6a641a749d80cab1bcad4b34ee97567d905ed9d5cfb74e9aef19674e2eb6ce3dfb706aa814d4a228db4fcd707e571259435393a27cac68b59a1b690ae8cde7a94c3
  </dd>
        <dt>e_15:</dt>
        <dd>
      0x0cbe92a53151790cece4a86f91e9b31644a86fc4c954e5fa04e707beb69fc60a858fed8ebd53e4cfd51546d5c0732331071c358d721ee601bfd3847e0e904101c62822dd2e4c7f8e5c
  </dd>
        <dt>e_16:</dt>
        <dd>
      0x0202db83b1ff33016679b6cfc8931deea6df1485c894dcd113bacf564411519a42026b5fda4e16262674dcb3f089cd7d552f8089a1fec93e3db6bca43788cdb06fc41baaa5c5098667
  </dd>
        <dt>e_17:</dt>
        <dd>
      0x070a617ed131b857f5b74b625c4ef70cc567f619defb5f2ab67534a1a8aa72975fc4248ac8551ce02b68801703971a2cf1cb934c9c354cadd5cfc4575cde8dbde6122bd54826a9b3e9
  </dd>
        <dt>e_18:</dt>
        <dd>
      0x070e1ebce457c141417f88423127b7a7321424f64119d5089d883cb953283ee4e1f2e01ffa7b903fe7a94af4bb1acb02ca6a36678e41506879069cee11c9dcf6a080b6a4a7c7f21dc9
  </dd>
        <dt>e_19:</dt>
        <dd>
      0x058a06be5a36c6148d8a1287ee7f0e725453fa1bb05cf77239f235b417127e370cfa4f88e61a23ea16df3c45d29c203d04d09782b39e9b4037c0c4ac8e8653e7c533ad752a640b233e
  </dd>
        <dt>e_20:</dt>
        <dd>
      0x0dfdfaaeb9349cf18d21b92ad68f8a7ecc509c35fcd4b8abeb93be7a204ac871f2195180206a2c340fccb69dbc30b9410ed0b122308a8fc75141f673ae5ec82b6a45fc2d664409c6b6
  </dd>
        <dt>e_21:</dt>
        <dd>
      0x0d06c8adfdd81275da2a0ce375b8df9199f3d359e8cf50064a3dc10a592417124a3b705b05a7ffe78e20f935a08868ecf3fc5aba0ace7ce4497bb59085ca277c16b3d53dd7dae5c857
  </dd>
        <dt>e_22:</dt>
        <dd>
      0x0708effd28c4ae21b6969cb9bdd0c27f8a3e341798b6f6d4baf27be259b4a47688b50cb68a69a917a4a1faf56cec93f69ac416512c32e9d5e69bd8836b6c2ba9c6889d507ad571dbc4
  </dd>
        <dt>e_23:</dt>
        <dd>
      0x09da7c7aa48ce571f8ece74b98431b14ae6fb4a53ae979cd6b2e82320e8d25a0ece1ca1563aa5aa6926e7d608358af8399534f6b00788e95e37ef1b549f43a58ad250a71f0b2fdb2bf
  </dd>
        <dt>e_24:</dt>
        <dd>
      0x0a7150a14471994833d89f41daeaa999dfc24a9968d4e33d88ed9e9f07aa2432c53e486ba6e3b6e4f4b8d9c989010a375935c06e4b8d6c31239fad6a61e2647b84a0e3f76e57005ff7
  </dd>
        <dt>e_25:</dt>
        <dd>
      0x084696f31ff27889d4dccdc4967964a5387a5ae071ad391c5723c9034f16c2557915ada07ec68f18672b5b2107f785c15ddf9697046dc633b5a23cc0e442d28ef6eea9915d0638d4d8
  </dd>
        <dt>e_26:</dt>
        <dd>
      0x0398e76e3d2202f999ac0f73e0099fe4e0fe2de9d223e78fc65c56e209cdf48f0d1ad8f6093e924ce5f0c93437c11212b7841de26f9067065b1898f48006bcc6f2ab8fa8e0b93f4ba4
  </dd>
        <dt>e_27:</dt>
        <dd>
      0x06d683f556022368e7a633dc6fe319fd1d4fc0e07acff7c4d4177e83a911e73313e0ed980cd9197bd17ac45942a65d90e6cb9209ede7f36c10e009c9d337ee97c4068db40e34d0e361
  </dd>
        <dt>e_28:</dt>
        <dd>
      0x0d764075344b70818f91b13ee445fd8c1587d1c0664002180bbac9a396ad4a8dc1e695b0c4267df4a09081c1e5c256c53fd49a73ffc817e65217a44fc0b20ef5ee92b28d4bc3e38576
  </dd>
        <dt>e_29:</dt>
        <dd>
      0x0aa6a32fdc4423b1c6d43e5104159bcd8e03a676d055d4496f7b1bc8761164a2908a3ff0e4c4d1f4362015c14824927011e2909531b8d87ee0acd676e7221a1ca1c21a33e2cf87dc51
  </dd>
        <dt>e_30:</dt>
        <dd>
      0x1147719959ac8eeab3fc913539784f1f947df47066b6c0c1beafecdb5fa784c3be9de5ab282a678a2a0cbef8714141a6c8aaa76500819a896b46af20509953495e2a85eff58348b38d
  </dd>
        <dt>e_31:</dt>
        <dd>
      0x11a377bcebd3c12702bb34044f06f8870ca712fb5caa6d30c48ace96898fcbcddbcf31f331c9e524684c02c90db7f30b9fc470d6e651a7e8b1f684383f3705d7a47a1b4fe463d623c8
  </dd>
        <dt>e_32:</dt>
        <dd>
      0x0b8b4511f451ba2cc58dc28e56d5e1d0a8f557ecb242f4d994a627e07cf3fa44e6d83cb907deacf303d2f761810b5d943b46c4383e1435ec23fec196a70e33946173c78be3c75dfc83
  </dd>
        <dt>e_33:</dt>
        <dd>
      0x090962d632ee2a57ce4208052ce47a9f76ea0fdad724b7256bb07f3944e9639a981d3431087241e30ae9bf5e2ea32af323ce7ed195d383b749cb25bc09f678d385a49a0c09f6d9efca
  </dd>
        <dt>e_34:</dt>
        <dd>
      0x0931c7befc80acd185491c68af886fa8ee39c21ed3ebd743b9168ae3b298df485bfdc75b94f0b21aecd8dca941dfc6d1566cc70dc648e6ccc73e4cbf2a1ac83c8294d447c66e74784d
  </dd>
        <dt>e_35:</dt>
        <dd>
      0x020ac007bf6c76ec827d53647058aca48896916269c6a2016b8c06f0130901c8975779f1672e581e2dfdbcf504e96ecf6801d0d39aad35cf79fbe7fe193c6c882c15bce593223f0c7c
  </dd>
        <dt>e_36:</dt>
        <dd>
      0x0c0aed0d890c3b0b673bf4981398dcbf0d15d36af6347a39599f3a22584184828f78f91bbbbd08124a97672963ec313ff142c456ec1a2fc3909fd4429fd699d827d48777d3b0e0e699
  </dd>
        <dt>e_37:</dt>
        <dd>
      0x0ef7799241a1ba6baaa8740d5667a1ace50fb8e63accc3bc30dc07b11d78dc545b68910c027489a0d842d1ba3ac406197881361a18b9fe337ff22d730fa44afabb9f801f759086c8e4
  </dd>
        <dt>e_38:</dt>
        <dd>
      0x016663c940d062f4057257c8f4fb9b35e82541717a34582dd7d55b41ebadf40d486ed74570043b2a3c4de29859fdeae9b6b456cb33bb401ecf38f9685646692300517e9b035d6665fc
  </dd>
        <dt>e_39:</dt>
        <dd>
      0x1184a79510edf25e3bd2dc793a5082fa0fed0d559fa14a5ce9ffca4c61f17196e1ffbb84326272e0d079368e9a735be1d05ec80c20dc6198b50a22a765defdc151d437335f1309aced
  </dd>
        <dt>e_40:</dt>
        <dd>
      0x120e47a747d942a593d202707c936dafa6fed489967dd94e48f317fd3c881b1041e3b6bbf9e8031d44e39c1ab5ae41e487eac9acd90e869129c38a8e6c97cf55d6666d22299951f91a
  </dd>
        <dt>e_41:</dt>
        <dd>
      0x026b6e374108ecb2fe8d557087f40ab7bac8c5af0644a655271765d57ad71742aa331326d871610a8c4c30ccf5d8adbeec23cdff20d9502a5005fce2593caf0682c82e4873b89d6d71
  </dd>
        <dt>e_42:</dt>
        <dd>
      0x041be63a2fa643e5a66faeb099a3440105c18dca58d51f74b3bf281da4e689b13f365273a2ed397e7b1c26bdd4daade710c30350318b0ae9a9b16882c29fe31ca3b884c92916d6d07a
  </dd>
        <dt>e_43:</dt>
        <dd>
      0x124018a12f0f0af881e6765e9e81071acc56ebcddadcd107750bd8697440cc16f190a3595633bb8900e6829823866c5769f03a306f979a3e039e620d6d2f576793d36d840b168eeedd
  </dd>
        <dt>e_44:</dt>
        <dd>
      0x0d422de4a83449c535b4b9ece586754c941548f15d50ada6740865be9c0b066788b6078727c7dee299acc15cbdcc7d51cdc5b17757c07d9a9146b01d2fdc7b8c562002da0f9084bde5
  </dd>
        <dt>e_45:</dt>
        <dd>
      0x1119f6c5468bce2ec2b450858dc073fea4fb05b6e83dd20c55c9cf694cbcc57fc0effb1d33b9b5587852d0961c40ff114b7493361e4cfdff16e85fbce667869b6f7e9eb804bcec46db
  </dd>
        <dt>e_46:</dt>
        <dd>
      0x061eaa8e9b0085364a61ea4f69c3516b6bf9f79f8c79d053e646ea637215cf6590203b275290872e3d7b258102dd0c0a4a310af3958165f2078ff9dc3ac9e995ce5413268d80974784
  </dd>
        <dt>e_47:</dt>
        <dd>
      0x0add8d58e9ec0c9393eb8c4bc0b08174a6b421e15040ef558da58d241e5f906ad6ca2aa5de361421708a6b8ff6736efbac6b4688bf752259b4650595aa395c40d00f4417f180779985
  </dd>
      </dl>
    </section>

<section anchor="zcash_rep_bls12_381" numbered="true" toc="default">
      <name>ZCash serialization format for BLS12-381</name>
<t>
This section describes the serialization format defined by <xref target="ZCashRep" format="default"/>.
This format applies to points on the BLS12-381 elliptic curves E and E',
whose parameters are given in <xref target="parameter-BLS12-381" format="default"/>.
</t>
<t>
At a high level, the serialization format is defined as follows:
</t>
          <ul spacing="normal">
           <li>Serialized points include three metadata bits that indicate
  whether a point is compressed or not, whether a point is the point at
  infinity or not, and (for compressed points) the sign of the point's
  y-coordinate.
            </li>
            <li>Points on E are serialized into 48 bytes (compressed) or 96 bytes (uncompressed). Points on E' are serialized into 96 bytes (compressed) or 192 bytes (uncompressed).</li>
            <li>The serialization of a point at infinity comprises a string of zero bytes, except that the metadata bits may be nonzero.
            </li>
            <li>The serialization of a compressed point other than the point at infinity comprises a serialized x-coordinate.
            </li>
            <li>The serialization of an uncompressed point other than the point at infinity comprises a serialized x-coordinate followed by a serialized y-coordinate.
            </li>
           </ul>
<t>
Below, we give detailed serialization and de-serialization procedures.
The following notation is used in the rest of this section:
</t>
          <ul spacing="normal">
          <li>Elements of F_p^2 are represented as polynomial with F_p coefficients like <xref target="representation-convention-for-an-extension-field" format="default"/>.
          </li>
          <li> For a byte string str, str[0] is defined as the first byte of str.
          </li>
          <li>The function sign_F_p(y) returns one bit representing the sign of an
  element of F_p. This function is defined as follows:
          </li>
          </ul>
          <artwork name="" type="" align="left" alt=""><![CDATA[
    sign_F_p(y) := { 1 if y > (p - 1) / 2, else
                   { 0 otherwise.
]]></artwork>
          <ul spacing="normal">          
            <li> The function sign_F_p^2(y') returns one bit representing the sign of an element in F_p^2. This function is defined as follows:
            </li>
          </ul>
          <artwork name="" type="" align="left" alt=""><![CDATA[
    sign_F_p^2(y') := { sign_F_p(y'_0) if y'_1 equals 0, else
                      { 1 if y'_1 > (p - 1) / 2, else
                      { 0 otherwise.
]]></artwork>

<section anchor="zcash_rep_bls12_381_seri_procedure" numbered="true" toc="default">
      <name>Point Serialization Procedure</name>

      <t>The serialization procedure is defined as follows for a point P = (x, y).
This procedure uses the I2OSP function defined in <xref target="RFC8017" format="default"/>.
      </t>

      <ol spacing="normal" type="1">
      <li>
      <t>
      Compute the metadata bits C_bit, I_bit, and S_bit, as follows:
      </t>
      <ul spacing="normal">
      <li>
      C_bit is 1 if point compression should be used, otherwise it is 0.
      </li>

      <li>
      I_bit is 1 if P is the point at infinity, otherwise it is 0.
      </li>

      <li>
      S_bit is 0 if P is the point at infinity or if point compression is not used.
      Otherwise (i.e., when point compression is used and P is not the point at infinity), if P is a point on E, S_bit = sign_F_p(y), else if P is a point on E', S_bit = sign_F_p^2(y).
      </li>
      </ul>
      </li>

      <li>
      <t>
Let m_byte = (C_bit * 2^7) + (I_bit * 2^6) + (S_bit * 2^5).
      </t>
      </li>

      <li>
      <t>Let x_string be the serialization of x, which is defined as follows:
      </t>
      <ul spacing="normal">
      <li>
      If P is the point at infinity on E, let x_string = I2OSP(0, 48).
      </li>

    <li>
        If P is a point on E other than the point at infinity, then x is an
      element of F_p, i.e., an integer in the inclusive range [0, p - 1].
      In this case, let x_string = I2OSP(x, 48).
      </li>

      <li>
    If P is the point at infinity on E', let x_string = I2OSP(0, 96).
      </li>
      <li>
    If P is a point on E' other than the point at infinity, then x can be
      represented as (x_0, x_1) where x_0 and x_1 are elements of F_p,
      i.e., integers in the inclusive range [0, p - 1] (see discussion of
      vector representations above).
      In this case, let x_string = I2OSP(x_1, 48) || I2OSP(x_0, 48).
     </li>
</ul>
<t>
    Notice that in all of the above cases, the 3 most significant bits of
    x_string[0] are guaranteed to be 0.
</t>
</li>

<li>
<t>
If point compression is used, let y_string be the empty string.
   Otherwise (i.e., when point compression is not used), let y_string
   be the serialization of y, which is defined in Step 3.
</t>
</li>

<li>
<t>
Let s_string = x_string || y_string.
</t>
</li>

<li>
<t>
Set s_string[0] = x_string[0] OR m_byte, where OR is computed bitwise.
   After this operation, the most significant bit of s_string[0] equals
   C_bit, the next bit equals I_bit, and the next equals S_bit.
   (This is true because the three most significant bits of x_string[0]
   are guaranteed to be zero, as discussed above.)
</t>
</li>

<li>
<t>
Output s_string.
</t>
</li>
      </ol>

</section>

<section anchor="zcash_rep_bls12_381_deseri_procedure" numbered="true" toc="default">
      <name>Point deserialization procedure</name>
      
      <t>The deserialization procedure is defined as follows for a string s_string. This procedure uses the OS2IP function defined in <xref target="RFC8017" format="default"/>.
      </t>
      <ol spacing="normal" type="1">
      <li>
      <t>Let m_byte = s_string[0] AND 0xE0, where AND is computed bitwise. In other words, the three most significant bits of m_byte equal the three most significant bits of s_string[0], and the remaining bits are 0.
      </t>
      <t>
      If m_byte equals any of 0x20, 0x60, or 0xE0, output INVALID and stop decoding.
      </t>
      <t>
Otherwise:
</t>
<ul spacing="normal">
<li>Let C_bit equal the most significant bit of m_byte,
</li>
<li>
Let I_bit equal the second most significant bit of m_byte, and
</li>
<li>
Let S_bit equal the third most significant bit of m_byte.
</li>
</ul>
      </li>

<li>
<t>
If C_bit is 1:
</t>
<ul spacing="normal">
<li>
    If s_string has length 48 bytes, the output point is on the curve E.
</li>
<li>
    If s_string has length 96 bytes, the output point is on the curve E'.
</li>
<li>
    If s_string has any other length, output INVALID and stop decoding.
</li>
</ul>
<t>
    If C_bit is 0:
</t>
<ul spacing="normal">
<li>
    If s_string has length 96 bytes, the output point is on E.
</li>
<li>
    If s_string has length 192 bytes, the output point is on E'.
</li>
<li>
    If s_string has any other length, output INVALID and stop decoding.
</li>
</ul>
</li>

<li>
Let s_string[0] = s_string[0] AND 0x1F, where AND is computed bitwise.
   In other words, set the three most significant bits of s_string[0] to 0.
</li>

<li>
<t>If I_bit is 1:
</t>
<ul spacing="normal">
<li>
    If s_string is not the all zeros string, output INVALID and stop decoding.
</li>
<li>
    Otherwise (i.e., if s_string is the all zeros string), output the point
      at infinity on the curve that was determined in step 2 and stop decoding.
</li>
</ul>
<t>
    Otherwise, I_bit must be 0. Continue decoding.
</t>
</li>

<li>
<t>
 If C_bit is 0:
</t>
<ul spacing="normal">
<li>
    Let x_string be the first half of s_string.
</li>
<li>
    Let y_string be the last half of s_string.
</li>
<li>
    Let x = OS2IP(x_string).
</li>
<li>
    Let y = OS2IP(y_string).
</li>
<li>
    If the point P = (x, y) is not a valid point on the curve that was determined
      in step 2, output INVALID and stop decoding.
</li>
<li>
    Otherwise, output the point P = (x, y) and stop decoding.
</li>
</ul>
<t>
    Otherwise, C_bit must be 1. Continue decoding.
</t>
</li>

<li>
Let x = OS2IP(s_string).
</li>

<li>
<t>
If the curve that was determined in step 2 is E:
</t>
<ul spacing="normal">
<li>
    Let y2 = x^3 + 4 in F_p.
</li>
<li>
    If y2 is not square in F_p, output INVALID and stop decoding.
</li>
<li>
    Otherwise, let y = sqrt(y2) in F_p and let Y_bit = sign_F_p(y).
</li>
</ul>
<t>
    Otherwise, (i.e., when the curve that was determined in step 2 is E'):
</t>
<ul spacing="normal">
<li>
    Let y2 = x^3 + 4 * (u + 1) in F_p^2.
</li>
<li>
    If y2 is not square in F_p^2, output INVALID and stop decoding.
</li>
<li>
    Otherwise, let y = sqrt(y2) in F_p^2 and let Y_bit = sign_F_p^2(y).
</li>
</ul>
</li>
<li>
If S_bit equals Y_bit, output P = (x, y) and stop decoding.
   Otherwise, output P = (x, -y) and stop decoding.
</li>


</ol>

</section>
</section>
    

  </back>
</rfc>
