Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/quite/humla-spongycastle.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Dettman <peter.dettman@bouncycastle.org>2013-10-03 07:08:23 +0400
committerPeter Dettman <peter.dettman@bouncycastle.org>2013-10-03 07:08:23 +0400
commit3c5038351168638dae41006cb2010d3c56f1917b (patch)
treea8edde796ca35e31e692e0d1645d660dc8a69b09 /core/src/main/java/org/bouncycastle/math
parent2a3806269e4ff1b667c2ca2e9bbf30d51b7e7576 (diff)
Use an extra "register" in multiply to save 1/4 the shift-adds
Diffstat (limited to 'core/src/main/java/org/bouncycastle/math')
-rw-r--r--core/src/main/java/org/bouncycastle/math/ec/IntArray.java14
1 files changed, 11 insertions, 3 deletions
diff --git a/core/src/main/java/org/bouncycastle/math/ec/IntArray.java b/core/src/main/java/org/bouncycastle/math/ec/IntArray.java
index fe5948a4..eb29d7c5 100644
--- a/core/src/main/java/org/bouncycastle/math/ec/IntArray.java
+++ b/core/src/main/java/org/bouncycastle/math/ec/IntArray.java
@@ -500,21 +500,26 @@ class IntArray
int[] b = B.resizedInts(bLen);
int[] c0 = new int[cLen];
int[] c1 = new int[cLen];
+ int[] c01 = new int[cLen];
int bit1 = 1 << 16;
for (;;)
{
- int bit2 = bit1 >>> 16;
+ int bit0 = bit1 >>> 16, bit01 = bit0 | bit1;
for (int aPos = 0; aPos < aLen; ++aPos)
{
int aVal = a[aPos];
- if ((aVal & bit1) != 0)
+ if ((aVal & bit01) == bit01)
+ {
+ addShiftedByWordsQuick(c01, aPos, b);
+ }
+ else if ((aVal & bit1) != 0)
{
addShiftedByWordsQuick(c1, aPos, b);
}
- if ((aVal & bit2) != 0)
+ else if ((aVal & bit0) != 0)
{
addShiftedByWordsQuick(c0, aPos, b);
}
@@ -528,6 +533,9 @@ class IntArray
shiftLeftQuick(b);
}
+ addQuick(c1, c01, cLen);
+ addQuick(c0, c01, cLen);
+
addShiftedByBitsQuick(c0, c1, cLen, 16);
return new IntArray(c0);