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>2014-03-10 08:11:58 +0400
committerPeter Dettman <peter.dettman@bouncycastle.org>2014-03-10 08:11:58 +0400
commit54bb4f4673c0f4f54dd31961b3825aed0e88d26a (patch)
tree984cfc08c1751b39cf1c753704519db04bcbc7b3 /core/src/main/java/org/bouncycastle
parentd7cb465404714226fc9741e1897a781a55e300c4 (diff)
Inline reduce32 calls and registerize some values to avoid extra writes
Diffstat (limited to 'core/src/main/java/org/bouncycastle')
-rw-r--r--core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP192R1Field.java26
-rw-r--r--core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP224R1Field.java29
2 files changed, 49 insertions, 6 deletions
diff --git a/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP192R1Field.java b/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP192R1Field.java
index ed5cce2e..a1fb5004 100644
--- a/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP192R1Field.java
+++ b/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP192R1Field.java
@@ -99,7 +99,7 @@ public class SecP192R1Field
long cc = 0;
cc += (xx[0] & M) + t0;
- z[0] = (int)cc;
+ int z0 = (int)cc;
cc >>= 32;
cc += (xx[1] & M) + t1;
z[1] = (int)cc;
@@ -109,7 +109,7 @@ public class SecP192R1Field
t1 += xx09;
cc += (xx[2] & M) + t0;
- z[2] = (int)cc;
+ long z2 = cc & M;
cc >>= 32;
cc += (xx[3] & M) + t1;
z[3] = (int)cc;
@@ -125,7 +125,27 @@ public class SecP192R1Field
z[5] = (int)cc;
cc >>= 32;
- reduce32((int)cc, z);
+ z2 += cc;
+
+ cc += (z0 & M);
+ z[0] = (int)cc;
+ cc >>= 32;
+ if (cc != 0)
+ {
+ cc += (z[1] & M);
+ z[1] = (int)cc;
+ z2 += cc >> 32;
+ }
+ z[2] = (int)z2;
+ cc = z2 >> 32;
+
+// assert cc == 0 || cc == 1;
+
+ if ((cc != 0 && Nat.incAt(6, z, 3) != 0)
+ || (z[5] == P5 && Nat192.gte(z, P)))
+ {
+ addPInvTo(z);
+ }
}
public static void reduce32(int x, int[] z)
diff --git a/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP224R1Field.java b/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP224R1Field.java
index 1cc25553..493bbbea 100644
--- a/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP224R1Field.java
+++ b/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP224R1Field.java
@@ -104,7 +104,7 @@ public class SecP224R1Field
long cc = 0;
cc += (xx[0] & M) - t0;
- z[0] = (int)cc;
+ long z0 = cc & M;
cc >>= 32;
cc += (xx[1] & M) - t1;
z[1] = (int)cc;
@@ -113,7 +113,7 @@ public class SecP224R1Field
z[2] = (int)cc;
cc >>= 32;
cc += (xx[3] & M) + t0 - xx10;
- z[3] = (int)cc;
+ long z3 = cc & M;
cc >>= 32;
cc += (xx[4] & M) + t1 - xx11;
z[4] = (int)cc;
@@ -128,7 +128,30 @@ public class SecP224R1Field
// assert cc >= 0;
- reduce32((int)cc, z);
+ z3 += cc;
+
+ z0 -= cc;
+ z[0] = (int)z0;
+ cc = z0 >> 32;
+ if (cc != 0)
+ {
+ cc += (z[1] & M);
+ z[1] = (int)cc;
+ cc >>= 32;
+ cc += (z[2] & M);
+ z[2] = (int)cc;
+ z3 += cc >> 32;
+ }
+ z[3] = (int)z3;
+ cc = z3 >> 32;
+
+// assert cc == 0 || cc == 1;
+
+ if ((cc != 0 && Nat.incAt(7, z, 4) != 0)
+ || (z[6] == P6 && Nat224.gte(z, P)))
+ {
+ addPInvTo(z);
+ }
}
public static void reduce32(int x, int[] z)