| package org.bouncycastle.math.ec; |
| |
| import java.math.BigInteger; |
| |
| /** |
| * Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (right-to-left). |
| */ |
| public class NafR2LMultiplier extends AbstractECMultiplier |
| { |
| protected ECPoint multiplyPositive(ECPoint p, BigInteger k) |
| { |
| int[] naf = WNafUtil.generateCompactNaf(k); |
| |
| ECPoint R0 = p.getCurve().getInfinity(), R1 = p; |
| |
| int zeroes = 0; |
| for (int i = 0; i < naf.length; ++i) |
| { |
| int ni = naf[i]; |
| int digit = ni >> 16; |
| zeroes += ni & 0xFFFF; |
| |
| R1 = R1.timesPow2(zeroes); |
| R0 = R0.add(digit < 0 ? R1.negate() : R1); |
| |
| zeroes = 1; |
| } |
| |
| return R0; |
| } |
| } |