what-the-bank/sources/org/bouncycastle/math/ec/WNafL2RMultiplier.java

47 lines
1.8 KiB
Java
Raw Normal View History

2024-07-27 18:17:47 +07:00
package org.bouncycastle.math.ec;
import java.math.BigInteger;
/* loaded from: classes6.dex */
public class WNafL2RMultiplier extends AbstractECMultiplier {
@Override // org.bouncycastle.math.ec.AbstractECMultiplier
protected ECPoint multiplyPositive(ECPoint eCPoint, BigInteger bigInteger) {
ECPoint eCPoint2;
int max = Math.max(2, Math.min(16, getWindowSize(bigInteger.bitLength())));
WNafPreCompInfo precompute = WNafUtil.precompute(eCPoint, max, true);
ECPoint[] preComp = precompute.getPreComp();
ECPoint[] preCompNeg = precompute.getPreCompNeg();
int[] generateCompactWindowNaf = WNafUtil.generateCompactWindowNaf(max, bigInteger);
ECPoint infinity = eCPoint.getCurve().getInfinity();
int length = generateCompactWindowNaf.length;
if (length > 1) {
length--;
int i = generateCompactWindowNaf[length];
int i2 = i >> 16;
int i3 = i & 65535;
int abs = Math.abs(i2);
ECPoint[] eCPointArr = i2 < 0 ? preCompNeg : preComp;
if ((abs << 2) < (1 << max)) {
byte b = LongArray.bitLengths[abs];
int i4 = max - b;
eCPoint2 = eCPointArr[((1 << (max - 1)) - 1) >>> 1].add(eCPointArr[(((abs ^ (1 << (b - 1))) << i4) + 1) >>> 1]);
i3 -= i4;
} else {
eCPoint2 = eCPointArr[abs >>> 1];
}
infinity = eCPoint2.timesPow2(i3);
}
while (length > 0) {
length--;
int i5 = generateCompactWindowNaf[length];
int i6 = i5 >> 16;
infinity = infinity.twicePlus((i6 < 0 ? preCompNeg : preComp)[Math.abs(i6) >>> 1]).timesPow2(i5 & 65535);
}
return infinity;
}
protected int getWindowSize(int i) {
return WNafUtil.getWindowSize(i);
}
}