package org.bouncycastle.math.ec; import java.math.BigInteger; public abstract class AbstractECMultiplier implements ECMultiplier { public ECPoint multiply(ECPoint p, BigInteger k) { int sign = k.signum(); if (sign == 0 || p.isInfinity()) { return p.getCurve().getInfinity(); } ECPoint positive = multiplyPositive(p, k.abs()); ECPoint result = sign > 0 ? positive : positive.negate(); /* * Although the various multipliers ought not to produce invalid output under normal * circumstances, a final check here is advised to guard against fault attacks. */ return ECAlgorithms.validatePoint(result); } protected abstract ECPoint multiplyPositive(ECPoint p, BigInteger k); }