package org.bouncycastle.math.ec;

import java.math.BigInteger;

Class implementing the NAF (Non-Adjacent Form) multiplication algorithm.
/** * Class implementing the NAF (Non-Adjacent Form) multiplication algorithm. */
class FpNafMultiplier implements ECMultiplier {
D.3.2 pg 101
See Also:
  • multiply.multiply(ECPoint, BigInteger)
/** * D.3.2 pg 101 * @see org.bouncycastle.math.ec.ECMultiplier#multiply(org.bouncycastle.math.ec.ECPoint, java.math.BigInteger) */
public ECPoint multiply(ECPoint p, BigInteger k, PreCompInfo preCompInfo) { // TODO Probably should try to add this // BigInteger e = k.mod(n); // n == order of p BigInteger e = k; BigInteger h = e.multiply(BigInteger.valueOf(3)); ECPoint neg = p.negate(); ECPoint R = p; for (int i = h.bitLength() - 2; i > 0; --i) { R = R.twice(); boolean hBit = h.testBit(i); boolean eBit = e.testBit(i); if (hBit != eBit) { R = R.add(hBit ? p : neg); } } return R; } }