summary refs log tree commit diff
path: root/crypto/src/math/ec/multiplier/AbstractECMultiplier.cs
blob: fe683726f7569fa7ab2cc96328e04d736210079d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
namespace Org.BouncyCastle.Math.EC.Multiplier
{
    public abstract class AbstractECMultiplier
        : ECMultiplier
    {
        public virtual ECPoint Multiply(ECPoint p, BigInteger k)
        {
            int sign = k.SignValue;
            if (sign == 0 || p.IsInfinity)
                return p.Curve.Infinity;

            ECPoint positive = MultiplyPositive(p, k.Abs());
            return sign > 0 ? positive : positive.Negate();
        }

        protected abstract ECPoint MultiplyPositive(ECPoint p, BigInteger k);
    }
}