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-03 11:53:10 +0400
committerPeter Dettman <peter.dettman@bouncycastle.org>2014-03-03 11:53:10 +0400
commit0d4373f8e7dcb57b6bb820eb35267e05cac2cc8c (patch)
tree88a79f5fa97527cbcc226f045f138252ac88f192 /core/src/main/java/org
parent936a648b70a4012aaed08fb019838ffdfdb7ac84 (diff)
Refactor reduction methods and change scope of PExt fields
Diffstat (limited to 'core/src/main/java/org')
-rw-r--r--core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP192K1Field.java15
-rw-r--r--core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP192R1Field.java19
-rw-r--r--core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP224K1Field.java15
-rw-r--r--core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP224R1Field.java10
-rw-r--r--core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP256K1Field.java13
-rw-r--r--core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP256R1Field.java66
-rw-r--r--core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP384R1Field.java57
7 files changed, 92 insertions, 103 deletions
diff --git a/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP192K1Field.java b/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP192K1Field.java
index dcb8e0fb..e310529d 100644
--- a/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP192K1Field.java
+++ b/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP192K1Field.java
@@ -6,9 +6,9 @@ public class SecP192K1Field
{
// 2^192 - 2^32 - 2^12 - 2^8 - 2^7 - 2^6 - 2^3 - 1
static final int[] P = new int[]{ 0xFFFFEE37, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF };
- private static final int P5 = 0xFFFFFFFF;
- private static final int[] PExt = new int[]{ 0x013C4FD1, 0x00002392, 0x00000001, 0x00000000, 0x00000000,
+ static final int[] PExt = new int[]{ 0x013C4FD1, 0x00002392, 0x00000001, 0x00000000, 0x00000000,
0x00000000, 0xFFFFDC6E, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF };
+ private static final int P5 = 0xFFFFFFFF;
private static final int PExt11 = 0xFFFFFFFF;
private static final long PInv = 0x00000001000011C9L;
private static final int PInv33 = 0x11C9;
@@ -85,8 +85,8 @@ public class SecP192K1Field
public static void reduce(int[] xx, int[] z)
{
- long c = Nat192.mul33Add(PInv33, xx, 6, xx, 0, z, 0);
- c = Nat192.mul33DWordAdd(PInv33, c, z, 0);
+ long cc = Nat192.mul33Add(PInv33, xx, 6, xx, 0, z, 0);
+ int c = Nat192.mul33DWordAdd(PInv33, cc, z, 0);
// assert c == 0L || c == 1L;
@@ -98,11 +98,8 @@ public class SecP192K1Field
public static void reduce32(int x, int[] z)
{
- int c = Nat192.mul33WordAdd(PInv33, x, z, 0);
-
- // assert c == 0L || c == 1L;
-
- if (c != 0 || (z[5] == P5 && Nat192.gte(z, P)))
+ if ((x != 0 && Nat192.mul33WordAdd(PInv33, x, z, 0) != 0)
+ || (z[5] == P5 && Nat192.gte(z, P)))
{
Nat192.addDWord(PInv, z, 0);
}
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 b7e11471..7f026009 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
@@ -8,9 +8,9 @@ public class SecP192R1Field
// 2^192 - 2^64 - 1
static final int[] P = new int[]{ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF };
- private static final int P5 = 0xFFFFFFFF;
- private static final int[] PExt = new int[]{ 0x00000001, 0x00000000, 0x00000002, 0x00000000, 0x00000001,
+ static final int[] PExt = new int[]{ 0x00000001, 0x00000000, 0x00000002, 0x00000000, 0x00000001,
0x00000000, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF };
+ private static final int P5 = 0xFFFFFFFF;
private static final int PExt11 = 0xFFFFFFFF;
public static void add(int[] x, int[] y, int[] z)
@@ -119,22 +119,13 @@ public class SecP192R1Field
z[5] = (int)cc;
cc >>= 32;
- int c = (int)cc;
- while (c > 0)
- {
- c += Nat192.sub(z, P, z);
- }
-
- if (z[5] == P5 && Nat192.gte(z, P))
- {
- Nat192.sub(z, P, z);
- }
+ reduce32((int)cc, z);
}
public static void reduce32(int x, int[] z)
{
- int c = Nat192.addWord(x, z, 0) + Nat192.addWord(x, z, 2);
- if (c != 0 || (z[5] == P5 && Nat192.gte(z, P)))
+ if ((x != 0 && (Nat192.addWord(x, z, 0) + Nat192.addWord(x, z, 2) != 0))
+ || (z[5] == P5 && Nat192.gte(z, P)))
{
Nat192.sub(z, P, z);
}
diff --git a/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP224K1Field.java b/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP224K1Field.java
index 70895d51..4dc9e121 100644
--- a/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP224K1Field.java
+++ b/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP224K1Field.java
@@ -7,9 +7,9 @@ public class SecP224K1Field
// 2^224 - 2^32 - 2^12 - 2^11 - 2^9 - 2^7 - 2^4 - 2 - 1
static final int[] P = new int[]{ 0xFFFFE56D, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF };
- private static final int P6 = 0xFFFFFFFF;
- private static final int[] PExt = new int[]{ 0x02C23069, 0x00003526, 0x00000001, 0x00000000, 0x00000000,
+ static final int[] PExt = new int[]{ 0x02C23069, 0x00003526, 0x00000001, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xFFFFCADA, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF };
+ private static final int P6 = 0xFFFFFFFF;
private static final int PExt13 = 0xFFFFFFFF;
private static final long PInv = 0x0000000100001A93L;
private static final int PInv33 = 0x1A93;
@@ -86,8 +86,8 @@ public class SecP224K1Field
public static void reduce(int[] xx, int[] z)
{
- long c = Nat224.mul33Add(PInv33, xx, 7, xx, 0, z, 0);
- c = Nat224.mul33DWordAdd(PInv33, c, z, 0);
+ long cc = Nat224.mul33Add(PInv33, xx, 7, xx, 0, z, 0);
+ int c = Nat224.mul33DWordAdd(PInv33, cc, z, 0);
// assert c == 0L || c == 1L;
@@ -99,11 +99,8 @@ public class SecP224K1Field
public static void reduce32(int x, int[] z)
{
- int c = Nat224.mul33WordAdd(PInv33, x, z, 0);
-
- // assert c == 0L || c == 1L;
-
- if (c != 0 || (z[6] == P6 && Nat224.gte(z, P)))
+ if ((x != 0 && Nat224.mul33WordAdd(PInv33, x, z, 0) != 0)
+ || (z[6] == P6 && Nat224.gte(z, P)))
{
Nat224.addDWord(PInv, z, 0);
}
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 72a1dc52..ef851d8f 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
@@ -8,9 +8,9 @@ public class SecP224R1Field
// 2^224 - 2^96 + 1
static final int[] P = new int[]{ 0x00000001, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF };
- private static final int P6 = 0xFFFFFFFF;
- private static final int[] PExt = new int[]{ 0x00000001, 0x00000000, 0x00000000, 0xFFFFFFFE, 0xFFFFFFFF,
+ static final int[] PExt = new int[]{ 0x00000001, 0x00000000, 0x00000000, 0xFFFFFFFE, 0xFFFFFFFF,
0xFFFFFFFF, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF };
+ private static final int P6 = 0xFFFFFFFF;
private static final int PExt13 = 0xFFFFFFFF;
public static void add(int[] x, int[] y, int[] z)
@@ -116,7 +116,7 @@ public class SecP224R1Field
cc >>= 32;
int c = (int)cc;
- if (c > 0)
+ if (c >= 0)
{
reduce32(c, z);
}
@@ -131,8 +131,8 @@ public class SecP224R1Field
public static void reduce32(int x, int[] z)
{
- int c = Nat224.subWord(x, z, 0) + Nat224.addWord(x, z, 3);
- if (c != 0 || (z[6] == P6 && Nat224.gte(z, P)))
+ if ((x != 0 && (Nat224.subWord(x, z, 0) + Nat224.addWord(x, z, 3) != 0))
+ || (z[6] == P6 && Nat224.gte(z, P)))
{
Nat224.sub(z, P, z);
}
diff --git a/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP256K1Field.java b/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP256K1Field.java
index 4f16c5c6..b4c47fbe 100644
--- a/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP256K1Field.java
+++ b/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP256K1Field.java
@@ -8,7 +8,7 @@ public class SecP256K1Field
static final int[] P = new int[]{ 0xFFFFFC2F, 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF };
private static final int P7 = 0xFFFFFFFF;
- private static final int[] PExt = new int[]{ 0x000E90A1, 0x000007A2, 0x00000001, 0x00000000, 0x00000000,
+ static final int[] PExt = new int[]{ 0x000E90A1, 0x000007A2, 0x00000001, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0xFFFFF85E, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF };
private static final int PExt15 = 0xFFFFFFFF;
@@ -87,8 +87,8 @@ public class SecP256K1Field
public static void reduce(int[] xx, int[] z)
{
- long c = Nat256.mul33Add(PInv33, xx, 8, xx, 0, z, 0);
- c = Nat256.mul33DWordAdd(PInv33, c, z, 0);
+ long cc = Nat256.mul33Add(PInv33, xx, 8, xx, 0, z, 0);
+ int c = Nat256.mul33DWordAdd(PInv33, cc, z, 0);
// assert c == 0L || c == 1L;
@@ -100,11 +100,8 @@ public class SecP256K1Field
public static void reduce32(int x, int[] z)
{
- int c = Nat256.mul33WordAdd(PInv33, x, z, 0);
-
- // assert c == 0L || c == 1L;
-
- if (c != 0 || (z[7] == P7 && Nat256.gte(z, P)))
+ if ((x != 0 && Nat256.mul33WordAdd(PInv33, x, z, 0) != 0)
+ || (z[7] == P7 && Nat256.gte(z, P)))
{
Nat256.addDWord(PInv, z, 0);
}
diff --git a/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP256R1Field.java b/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP256R1Field.java
index d3baceda..8315935c 100644
--- a/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP256R1Field.java
+++ b/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP256R1Field.java
@@ -9,12 +9,12 @@ public class SecP256R1Field
// 2^256 - 2^224 + 2^192 + 2^96 - 1
static final int[] P = new int[]{ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000,
0x00000001, 0xFFFFFFFF };
+ static final int[] PExt = new int[]{ 0x00000001, 0x00000000, 0x00000000, 0xFFFFFFFE, 0xFFFFFFFF,
+ 0xFFFFFFFF, 0xFFFFFFFE, 0x00000001, 0xFFFFFFFE, 0x00000001, 0xFFFFFFFE, 0x00000001, 0x00000001, 0xFFFFFFFE,
+ 0x00000002, 0xFFFFFFFE };
private static final int[] _2P = new int[]{ 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000001, 0x00000000, 0x00000000,
0x00000002, 0xFFFFFFFE, 0x00000001 };
private static final int P7 = 0xFFFFFFFF;
- private static final int[] PExt = new int[]{ 0x00000001, 0x00000000, 0x00000000, 0xFFFFFFFE, 0xFFFFFFFF,
- 0xFFFFFFFF, 0xFFFFFFFE, 0x00000001, 0xFFFFFFFE, 0x00000001, 0xFFFFFFFE, 0x00000001, 0x00000001, 0xFFFFFFFE,
- 0x00000002, 0xFFFFFFFE };
public static void add(int[] x, int[] y, int[] z)
{
@@ -126,7 +126,7 @@ public class SecP256R1Field
cc >>= 32;
int c = (int)cc;
- if (c > 0)
+ if (c >= 0)
{
reduce32(c, z);
}
@@ -145,33 +145,39 @@ public class SecP256R1Field
public static void reduce32(int x, int[] z)
{
- long xx08 = x & M;
-
long cc = 0;
- cc += (z[0] & M) + xx08;
- z[0] = (int)cc;
- cc >>= 32;
- cc += (z[1] & M);
- z[1] = (int)cc;
- cc >>= 32;
- cc += (z[2] & M);
- z[2] = (int)cc;
- cc >>= 32;
- cc += (z[3] & M) - xx08;
- z[3] = (int)cc;
- cc >>= 32;
- cc += (z[4] & M);
- z[4] = (int)cc;
- cc >>= 32;
- cc += (z[5] & M);
- z[5] = (int)cc;
- cc >>= 32;
- cc += (z[6] & M) - xx08;
- z[6] = (int)cc;
- cc >>= 32;
- cc += (z[7] & M) + xx08;
- z[7] = (int)cc;
- cc >>= 32;
+
+ if (x != 0)
+ {
+ long xx08 = x & M;
+
+ cc += (z[0] & M) + xx08;
+ z[0] = (int)cc;
+ cc >>= 32;
+ cc += (z[1] & M);
+ z[1] = (int)cc;
+ cc >>= 32;
+ cc += (z[2] & M);
+ z[2] = (int)cc;
+ cc >>= 32;
+ cc += (z[3] & M) - xx08;
+ z[3] = (int)cc;
+ cc >>= 32;
+ cc += (z[4] & M);
+ z[4] = (int)cc;
+ cc >>= 32;
+ cc += (z[5] & M);
+ z[5] = (int)cc;
+ cc >>= 32;
+ cc += (z[6] & M) - xx08;
+ z[6] = (int)cc;
+ cc >>= 32;
+ cc += (z[7] & M) + xx08;
+ z[7] = (int)cc;
+ cc >>= 32;
+
+// assert cc == 0 || cc == 1;
+ }
if (cc != 0 || (z[7] == P7 && Nat256.gte(z, P)))
{
diff --git a/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP384R1Field.java b/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP384R1Field.java
index d7d0d50e..b4df7ec0 100644
--- a/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP384R1Field.java
+++ b/core/src/main/java/org/bouncycastle/math/ec/custom/sec/SecP384R1Field.java
@@ -11,10 +11,10 @@ public class SecP384R1Field
// 2^384 - 2^128 - 2^96 + 2^32 - 1
static final int[] P = new int[]{ 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF };
- private static final int P11 = 0xFFFFFFFF;
- private static final int[] PExt = new int[]{ 0x00000001, 0xFFFFFFFE, 0x00000000, 0x00000002, 0x00000000, 0xFFFFFFFE,
+ static final int[] PExt = new int[]{ 0x00000001, 0xFFFFFFFE, 0x00000000, 0x00000002, 0x00000000, 0xFFFFFFFE,
0x00000000, 0x00000002, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFE, 0x00000001, 0x00000000,
0xFFFFFFFE, 0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF };
+ private static final int P11 = 0xFFFFFFFF;
private static final int PExt23 = 0xFFFFFFFF;
public static void add(int[] x, int[] y, int[] z)
@@ -132,7 +132,7 @@ public class SecP384R1Field
cc >>= 32;
int c = (int)cc;
- if (c > 0)
+ if (c >= 0)
{
reduce32(c, z);
}
@@ -147,34 +147,35 @@ public class SecP384R1Field
public static void reduce32(int x, int[] z)
{
- long xx12 = x & M;
-
long cc = 0;
- cc += (z[0] & M) + xx12;
- z[0] = (int)cc;
- cc >>= 32;
- cc += (z[1] & M) - xx12;
- z[1] = (int)cc;
- cc >>= 32;
- cc += (z[2] & M);
- z[2] = (int)cc;
- cc >>= 32;
- cc += (z[3] & M) + xx12;
- z[3] = (int)cc;
- cc >>= 32;
- cc += (z[4] & M) + xx12;
- z[4] = (int)cc;
- cc >>= 32;
-
-// assert cc >= 0;
+
+ if (x != 0)
+ {
+ long xx12 = x & M;
+
+ cc += (z[0] & M) + xx12;
+ z[0] = (int)cc;
+ cc >>= 32;
+ cc += (z[1] & M) - xx12;
+ z[1] = (int)cc;
+ cc >>= 32;
+ cc += (z[2] & M);
+ z[2] = (int)cc;
+ cc >>= 32;
+ cc += (z[3] & M) + xx12;
+ z[3] = (int)cc;
+ cc >>= 32;
+ cc += (z[4] & M) + xx12;
+ z[4] = (int)cc;
+ cc >>= 32;
+
+// assert cc == 0 || cc == 1;
+ }
- if (cc > 0)
+ if ((cc != 0 && Nat.inc(12, z, 5) != 0)
+ || (z[11] == P11 && Nat.gte(12, z, P)))
{
- int c = Nat.addWord(12, (int)cc, z, 5);
- if (c != 0 || (z[11] == P11 && Nat.gte(12, z, P)))
- {
- Nat.sub(12, z, P, z);
- }
+ Nat.sub(12, z, P, z);
}
}