operator - method

Implementation

@override
JubJubNativePoint operator -(BaseRedJubJubPoint<JubJubNativeFr> rhs) {
  switch (rhs) {
    case final JubJubNielsNativePoint point:
      final a = (v - u) * point.vPlusU;
      final b = (v + u) * point.vMinusU;
      final c = t1 * t2 * point.t2d;
      final d = (z * point.z).double();
      return _JubjubCompletedNativePoint(
        u: b - a,
        v: b + a,
        z: d - c,
        t: d + c,
      ).toExtended();
    case final JubJubAffineNielsNativePoint point:
      final a = (v - u) * point.vPlusU;
      final b = (v + u) * point.vMinusU;
      final c = t1 * t2 * point.t2d;
      final d = z.double();
      return _JubjubCompletedNativePoint(
        u: b - a,
        v: b + a,
        z: d - c,
        t: d + c,
      ).toExtended();
    case final JubJubNativePoint point:
      return this - point.toNiels();
    case final JubJubAffineNativePoint point:
      return this - point.toNiels();
    default:
      throw CryptoException.operationNotSupported;
  }
}