diff options
author | Peter Dettman <peter.dettman@bouncycastle.org> | 2014-03-10 08:11:58 +0400 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2014-03-10 08:11:58 +0400 |
commit | 54bb4f4673c0f4f54dd31961b3825aed0e88d26a (patch) | |
tree | 984cfc08c1751b39cf1c753704519db04bcbc7b3 /core/src/main/java/org | |
parent | d7cb465404714226fc9741e1897a781a55e300c4 (diff) |
Inline reduce32 calls and registerize some values to avoid extra writes
Diffstat (limited to 'core/src/main/java/org')
-rw-r--r-- | core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP192R1Field.java | 26 | ||||
-rw-r--r-- | core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP224R1Field.java | 29 |
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) |