scalarMul method

  1. @override
AffinePoint scalarMul(
  1. AffinePoint basePoint,
  2. List<int> k
)
override

scalarMult returns k*(basePoint.X, basePoint.Y) where k is a number in big-endian form (BigInt bytes).

Implementation

@override
AffinePoint scalarMul(AffinePoint basePoint, List<int> k) {
  var _p = JacobianPoint.fromXYZ(basePoint.X, basePoint.Y, BigInt.zero);

  for (var byte in k) {
    for (var bitNum = 0; bitNum < 8; bitNum++) {
      _p = _doubleJacobian(_p.X, _p.Y, _p.Z);
      if (byte & 0x80 == 0x80) {
        _p = _addJacobian(
            basePoint.X, basePoint.Y, BigInt.one, _p.X, _p.Y, _p.Z);
      }
      byte <<= 1;
    }
  }

  return _affineFromJacobian(_p.X, _p.Y, _p.Z);
}