multiply method

ECPointFp multiply(
  1. BigInt k
)

Implementation

ECPointFp multiply(BigInt k) {
  if (isInfinity()) return this;
  if (k.sign == 0) return curve.infinity;

  final k3 = k * BigInt.from(3);
  final neg = negate();
  ECPointFp Q = this;

  for (int i = k3.bitLength - 2; i > 0; i--) {
    Q = Q.twice();

    /*final k3Bit = (k3 >> i) & BigInt.one == BigInt.one;
    final kBit = (k >> i) & BigInt.one == BigInt.zero;*/

    final k3Bit = (k3 >> i).isOdd;
    ;
    final kBit = (k >> i).isOdd;

    if (k3Bit != kBit) {
      Q = Q.add(k3Bit ? this : neg);
    }
  }

  return Q;
}