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