pairing static method

Computes the optimal Ate pairing e(P, Q) ∈ GT for affine points P and Q.

Implementation

static GtNative pairing(G1NativeAffinePoint p, G2NativeAffinePoint q) {
  final identity = p.isIdentity() || q.isIdentity();
  final newP = G1NativeAffinePoint.conditionalSelect(
    p,
    G1NativeAffinePoint.generator(),
    identity,
  );
  final newQ = G2NativeAffinePoint.conditionalSelect(
    q,
    G2NativeAffinePoint.generator(),
    identity,
  );
  final adder = MillerLoopDriverBls12Pairing(
    cur: newQ.toProjective(),
    base: newQ,
    p: newP,
  );
  final tmp = millerLoop(adder);
  final result = MillerLoopResultBls12(
    Bls12NativeFp12.conditionalSelect(tmp, Bls12NativeFp12.one(), identity),
  );
  return result.finalExponentiation();
}