scale method

EDPoint scale()

Scale the Edwards curve point.

Implementation

EDPoint scale() {
  final BigInt z1 = _coords[2];

  /// If the z-coordinate is already 1, the point is already in projective form, and no scaling is required.
  if (z1 == BigInt.one) {
    return this;
  }
  final BigInt x1 = _coords[0];
  final BigInt y1 = _coords[1];

  /// Retrieve the prime value (p) of the curve.
  final BigInt p = curve.p;

  /// Compute the inverse of z1 modulo p.
  final BigInt zInv = BigintUtils.inverseMod(z1, p);
  final BigInt x = (x1 * zInv) % p;
  final BigInt y = (y1 * zInv) % p;
  final BigInt t = (x * y) % p;

  /// Update the coordinates to their scaled values and set z-coordinate to 1 (projective form).
  _coords[0] = x;
  _coords[1] = y;
  _coords[2] = BigInt.one;
  _coords[3] = t;

  return this;
}