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-01 05:56:38 +0400
committerPeter Dettman <peter.dettman@bouncycastle.org>2013-10-01 05:56:38 +0400
commitcf8715b17f8fca5848893e082e4b8999e0d9b67b (patch)
tree196663079769a4a56876f1decf3932003ff5c1aa /core/src/main/java/org/bouncycastle/math
parent1fff1bd3a6d916b21e00125a2462445a1eca07b8 (diff)
Factor out square16 method and unroll loop
Diffstat (limited to 'core/src/main/java/org/bouncycastle/math')
-rw-r--r--core/src/main/java/org/bouncycastle/math/ec/IntArray.java47
1 files changed, 20 insertions, 27 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 49d33cac..10f709ba 100644
--- a/core/src/main/java/org/bouncycastle/math/ec/IntArray.java
+++ b/core/src/main/java/org/bouncycastle/math/ec/IntArray.java
@@ -650,37 +650,30 @@ class IntArray
public IntArray square(int m)
{
- int mLen = (m + 31) >>> 5;
- if (m_ints.length < mLen)
+ int len = getUsedLength(), _2len = len << 1;
+ int[] r = new int[_2len];
+
+ int pos = 0;
+ while (pos < _2len)
{
- m_ints = resizedInts(mLen);
+ int mi = m_ints[pos >>> 1];
+ r[pos++] = square16(mi & 0xFFFF);
+ r[pos++] = square16(mi >>> 16);
}
- IntArray c = new IntArray(mLen + mLen);
-
- // TODO twice the same code, put in separate private method
- for (int i = 0; i < mLen; i++)
- {
- int v0 = 0;
- for (int j = 0; j < 4; j++)
- {
- v0 = v0 >>> 8;
- int u = (m_ints[i] >>> (j * 4)) & 0xF;
- v0 |= SQUARING_TABLE[u];
- }
- c.m_ints[i + i] = v0;
+ return new IntArray(r);
+ }
- v0 = 0;
- int upper = m_ints[i] >>> 16;
- for (int j = 0; j < 4; j++)
- {
- v0 = v0 >>> 8;
- int u = (upper >>> (j * 4)) & 0xF;
- v0 |= SQUARING_TABLE[u];
- }
- c.m_ints[i + i + 1] = v0;
- }
- return c;
+ private static int square16(int n)
+ {
+ int x = SQUARING_TABLE[n & 0xF];
+ x >>>= 8; n >>>= 4;
+ x |= SQUARING_TABLE[n & 0xF];
+ x >>>= 8; n >>>= 4;
+ x |= SQUARING_TABLE[n & 0xF];
+ x >>>= 8; n >>>= 4;
+ x |= SQUARING_TABLE[n];
+ return x;
}
public boolean equals(Object o)