Class BLS12_381G2Point
E: y^2 = x^3 + 4*(1+I) over
Fp^2.
Affine coordinates with each operation normalising via
Fp2Element.inverse().
Two scalar-multiplication APIs are provided: multiply(BigInteger) is the
variable-time double-and-add — fast for public scalars (cofactor
clearing, subgroup checks) but unsafe for secret scalars; and
constantTimeMultiply(BigInteger) is a fixed-iteration ladder for use with
secret scalars (e.g. sk * H(msg) in BLS sign).
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Fp2ElementB coefficient: 4 * (1 + I).static final BLS12_381G2PointThe point at infinity (identity element). -
Method Summary
Modifier and TypeMethodDescriptionadd(BLS12_381G2Point other) constantTimeMultiply(BigInteger scalar) Constant-time scalar multiplication, suitable for secret scalars (e.g.booleaninthashCode()booleanmultiply(BigInteger scalar) Variable-time double-and-add scalar multiplication.negate()static BLS12_381G2Pointof(Fp2Element x, Fp2Element y) Constructs a G2 point from affine coordinates and verifies that(x, y)satisfies the curve equationy^2 = x^3 + 4*(1+I).toString()x()y()
-
Field Details
-
B
B coefficient: 4 * (1 + I). -
INFINITY
The point at infinity (identity element).
-
-
Method Details
-
of
Constructs a G2 point from affine coordinates and verifies that(x, y)satisfies the curve equationy^2 = x^3 + 4*(1+I). -
isInfinity
public boolean isInfinity() -
x
-
y
-
negate
-
add
-
doublePoint
-
constantTimeMultiply
Constant-time scalar multiplication, suitable for secret scalars (e.g.sk * H(msg)in BLS sign).Uses a fixed-iteration "double, conditionally add" ladder over 256 bits, with the conditional-add implemented as an array-indexed select rather than an
if. Both branches of every iteration compute the same set of point operations regardless of the scalar-bit value, so the per-bit timing does not depend on the scalar.Caveats. "Constant-time" here means the scalar-bit-pattern-independent at the scalar-mult loop level. The underlying affine point ops still have data-dependent branches for infinity / equal-x cases (which are negligibly probable for random secret scalars on a prime-order subgroup), and the JVM itself may introduce cache / GC / JIT timing variance that pure Java cannot fully eliminate. Sufficient against a remote network timing attacker on a typical workload; not a substitute for a constant-time native implementation against a co-located adversary with cache-line resolution.
-
multiply
Variable-time double-and-add scalar multiplication. Suitable for non-secret scalars (e.g. cofactor clearing); not safe for secret scalar use — seeconstantTimeMultiply(BigInteger). -
equals
-
hashCode
-
toString
-