bouncycastle.math.ec.FpNafMultiplier Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of woodlouse Show documentation
Show all versions of woodlouse Show documentation
Lightweight crypto toolkit for Android and Java 6+
The newest version!
package bouncycastle.math.ec;
import java.math.BigInteger;
/**
* Class implementing the NAF (Non-Adjacent Form) multiplication algorithm.
*/
class FpNafMultiplier implements ECMultiplier
{
/**
* D.3.2 pg 101
* @see bouncycastle.math.ec.ECMultiplier#multiply(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;
}
}