org.spongycastle.math.ec.FpNafMultiplier Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of scprov-jdk15on Show documentation
Show all versions of scprov-jdk15on Show documentation
The Bouncy Castle Crypto package is a Java implementation of cryptographic algorithms.
This jar contains JCE provider for the Bouncy Castle Cryptography APIs for JDK 1.5 to JDK 1.7.
package org.spongycastle.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 org.spongycastle.math.ec.ECMultiplier#multiply(org.spongycastle.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;
}
}