java.lang.Object
dk.jonaslindstrom.ruffini.elliptic.structures.bls12381.BLS12381

public class BLS12381 extends Object
Implementation of the BLS12-381 pairing-friendly elliptic curve construction.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static dk.jonaslindstrom.ruffini.finitefields.BigPrimeField
    The base field FP = Fp.
    static dk.jonaslindstrom.ruffini.finitefields.AlgebraicFieldExtension<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<BigInteger>>,dk.jonaslindstrom.ruffini.finitefields.AlgebraicFieldExtension<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<BigInteger>,dk.jonaslindstrom.ruffini.finitefields.AlgebraicFieldExtension<BigInteger,dk.jonaslindstrom.ruffini.finitefields.BigPrimeField>>>
    FP12 = FP6(w) / (w2 - v)) is a quadratic field extension of FP6.
    static dk.jonaslindstrom.ruffini.finitefields.AlgebraicFieldExtension<BigInteger,dk.jonaslindstrom.ruffini.finitefields.BigPrimeField>
    FP2 = FP(u) / (u2 + 1) is a quadratic field extension of base field FP.
    static dk.jonaslindstrom.ruffini.finitefields.AlgebraicFieldExtension<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<BigInteger>,dk.jonaslindstrom.ruffini.finitefields.AlgebraicFieldExtension<BigInteger,dk.jonaslindstrom.ruffini.finitefields.BigPrimeField>>
    FP6 = FP2(v) / (v3 - (u + 1)) is a cubic field extension of FP2.
    static dk.jonaslindstrom.ruffini.finitefields.BigPrimeField
    Prime field of order q.
    Curve over FP containing the G1 subgroup.
    Generator for the G1 subgroup of order q.
    static ShortWeierstrassCurveAffine<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<BigInteger>,?>
    Curve over FP2 containing the G2 subgroup.
    static AffinePoint<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<BigInteger>>
     
    static dk.jonaslindstrom.ruffini.common.abstractions.Group<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<BigInteger>>>>
     
    static BigInteger
    Modulus of the base field.
    static java.util.function.BiFunction<AffinePoint<BigInteger>,AffinePoint<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<BigInteger>>,dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<BigInteger>>>>
    The optimal Ate pairing which is a bilinear function e: G1 x G2 → GT.
    static BigInteger
    Order of subgroups of G1, G2 and GT
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static dk.jonaslindstrom.ruffini.common.util.SamePair<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<BigInteger>>>>
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • p

      public static BigInteger p
      Modulus of the base field.
    • FP

      public static dk.jonaslindstrom.ruffini.finitefields.BigPrimeField FP
      The base field FP = Fp.
    • FP2

      public static dk.jonaslindstrom.ruffini.finitefields.AlgebraicFieldExtension<BigInteger,dk.jonaslindstrom.ruffini.finitefields.BigPrimeField> FP2
      FP2 = FP(u) / (u2 + 1) is a quadratic field extension of base field FP.
    • FP6

      public static dk.jonaslindstrom.ruffini.finitefields.AlgebraicFieldExtension<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<BigInteger>,dk.jonaslindstrom.ruffini.finitefields.AlgebraicFieldExtension<BigInteger,dk.jonaslindstrom.ruffini.finitefields.BigPrimeField>> FP6
      FP6 = FP2(v) / (v3 - (u + 1)) is a cubic field extension of FP2.
    • FP12

      public static dk.jonaslindstrom.ruffini.finitefields.AlgebraicFieldExtension<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<BigInteger>>,dk.jonaslindstrom.ruffini.finitefields.AlgebraicFieldExtension<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<BigInteger>,dk.jonaslindstrom.ruffini.finitefields.AlgebraicFieldExtension<BigInteger,dk.jonaslindstrom.ruffini.finitefields.BigPrimeField>>> FP12
      FP12 = FP6(w) / (w2 - v)) is a quadratic field extension of FP6.
    • GT

      public static dk.jonaslindstrom.ruffini.common.abstractions.Group<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<BigInteger>>>> GT
    • G2

      public static ShortWeierstrassCurveAffine<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<BigInteger>,?> G2
      Curve over FP2 containing the G2 subgroup.
    • G1

      Curve over FP containing the G1 subgroup.
    • G2_GENERATOR

      public static AffinePoint<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<BigInteger>> G2_GENERATOR
    • q

      public static BigInteger q
      Order of subgroups of G1, G2 and GT
    • FQ

      public static dk.jonaslindstrom.ruffini.finitefields.BigPrimeField FQ
      Prime field of order q.
    • G1_GENERATOR

      public static AffinePoint<BigInteger> G1_GENERATOR
      Generator for the G1 subgroup of order q.
    • PAIRING

      public static java.util.function.BiFunction<AffinePoint<BigInteger>,AffinePoint<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<BigInteger>>,dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<BigInteger>>>> PAIRING
      The optimal Ate pairing which is a bilinear function e: G1 x G2 → GT.
  • Constructor Details

    • BLS12381

      public BLS12381()
  • Method Details

    • twist

      public static dk.jonaslindstrom.ruffini.common.util.SamePair<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<dk.jonaslindstrom.ruffini.polynomials.elements.Polynomial<BigInteger>>>> twist(AffinePoint<BigInteger> p)