Skip to content
Permalink
Browse files Browse the repository at this point in the history
Fix carry propagation bug in Nat???.square methods
  • Loading branch information
peterdettman committed Nov 29, 2016
1 parent 02417ce commit 7906420
Show file tree
Hide file tree
Showing 7 changed files with 385 additions and 70 deletions.
12 changes: 6 additions & 6 deletions core/src/main/java/org/bouncycastle/math/raw/Nat128.java
Expand Up @@ -636,8 +636,8 @@ public static void square(int[] x, int[] zz)
}

long x_3 = x[3] & M;
long zz_5 = zz[5] & M;
long zz_6 = zz[6] & M;
long zz_5 = (zz[5] & M) + (zz_4 >>> 32); zz_4 &= M;
long zz_6 = (zz[6] & M) + (zz_5 >>> 32); zz_5 &= M;
{
zz_3 += x_3 * x_0;
w = (int)zz_3;
Expand All @@ -658,7 +658,7 @@ public static void square(int[] x, int[] zz)
w = (int)zz_6;
zz[6] = (w << 1) | c;
c = w >>> 31;
w = zz[7] + (int)(zz_6 >> 32);
w = zz[7] + (int)(zz_6 >>> 32);
zz[7] = (w << 1) | c;
}

Expand Down Expand Up @@ -713,8 +713,8 @@ public static void square(int[] x, int xOff, int[] zz, int zzOff)
}

long x_3 = x[xOff + 3] & M;
long zz_5 = zz[zzOff + 5] & M;
long zz_6 = zz[zzOff + 6] & M;
long zz_5 = (zz[zzOff + 5] & M) + (zz_4 >>> 32); zz_4 &= M;
long zz_6 = (zz[zzOff + 6] & M) + (zz_5 >>> 32); zz_5 &= M;
{
zz_3 += x_3 * x_0;
w = (int)zz_3;
Expand All @@ -734,7 +734,7 @@ public static void square(int[] x, int xOff, int[] zz, int zzOff)
w = (int)zz_6;
zz[zzOff + 6] = (w << 1) | c;
c = w >>> 31;
w = zz[zzOff + 7] + (int)(zz_6 >> 32);
w = zz[zzOff + 7] + (int)(zz_6 >>> 32);
zz[zzOff + 7] = (w << 1) | c;
}

Expand Down
20 changes: 10 additions & 10 deletions core/src/main/java/org/bouncycastle/math/raw/Nat160.java
Expand Up @@ -609,8 +609,8 @@ public static void square(int[] x, int[] zz)
}

long x_3 = x[3] & M;
long zz_5 = zz[5] & M;
long zz_6 = zz[6] & M;
long zz_5 = (zz[5] & M) + (zz_4 >>> 32); zz_4 &= M;
long zz_6 = (zz[6] & M) + (zz_5 >>> 32); zz_5 &= M;
{
zz_3 += x_3 * x_0;
w = (int)zz_3;
Expand All @@ -624,8 +624,8 @@ public static void square(int[] x, int[] zz)
}

long x_4 = x[4] & M;
long zz_7 = zz[7] & M;
long zz_8 = zz[8] & M;
long zz_7 = (zz[7] & M) + (zz_6 >>> 32); zz_6 &= M;
long zz_8 = (zz[8] & M) + (zz_7 >>> 32); zz_7 &= M;
{
zz_4 += x_4 * x_0;
w = (int)zz_4;
Expand All @@ -649,7 +649,7 @@ public static void square(int[] x, int[] zz)
w = (int)zz_8;
zz[8] = (w << 1) | c;
c = w >>> 31;
w = zz[9] + (int)(zz_8 >> 32);
w = zz[9] + (int)(zz_8 >>> 32);
zz[9] = (w << 1) | c;
}

Expand Down Expand Up @@ -704,8 +704,8 @@ public static void square(int[] x, int xOff, int[] zz, int zzOff)
}

long x_3 = x[xOff + 3] & M;
long zz_5 = zz[zzOff + 5] & M;
long zz_6 = zz[zzOff + 6] & M;
long zz_5 = (zz[zzOff + 5] & M) + (zz_4 >>> 32); zz_4 &= M;
long zz_6 = (zz[zzOff + 6] & M) + (zz_5 >>> 32); zz_5 &= M;
{
zz_3 += x_3 * x_0;
w = (int)zz_3;
Expand All @@ -719,8 +719,8 @@ public static void square(int[] x, int xOff, int[] zz, int zzOff)
}

long x_4 = x[xOff + 4] & M;
long zz_7 = zz[zzOff + 7] & M;
long zz_8 = zz[zzOff + 8] & M;
long zz_7 = (zz[zzOff + 7] & M) + (zz_6 >>> 32); zz_6 &= M;
long zz_8 = (zz[zzOff + 8] & M) + (zz_7 >>> 32); zz_7 &= M;
{
zz_4 += x_4 * x_0;
w = (int)zz_4;
Expand All @@ -744,7 +744,7 @@ public static void square(int[] x, int xOff, int[] zz, int zzOff)
w = (int)zz_8;
zz[zzOff + 8] = (w << 1) | c;
c = w >>> 31;
w = zz[zzOff + 9] + (int)(zz_8 >> 32);
w = zz[zzOff + 9] + (int)(zz_8 >>> 32);
zz[zzOff + 9] = (w << 1) | c;
}

Expand Down
28 changes: 14 additions & 14 deletions core/src/main/java/org/bouncycastle/math/raw/Nat192.java
Expand Up @@ -715,8 +715,8 @@ public static void square(int[] x, int[] zz)
}

long x_3 = x[3] & M;
long zz_5 = zz[5] & M;
long zz_6 = zz[6] & M;
long zz_5 = (zz[5] & M) + (zz_4 >>> 32); zz_4 &= M;
long zz_6 = (zz[6] & M) + (zz_5 >>> 32); zz_5 &= M;
{
zz_3 += x_3 * x_0;
w = (int)zz_3;
Expand All @@ -730,8 +730,8 @@ public static void square(int[] x, int[] zz)
}

long x_4 = x[4] & M;
long zz_7 = zz[7] & M;
long zz_8 = zz[8] & M;
long zz_7 = (zz[7] & M) + (zz_6 >>> 32); zz_6 &= M;
long zz_8 = (zz[8] & M) + (zz_7 >>> 32); zz_7 &= M;
{
zz_4 += x_4 * x_0;
w = (int)zz_4;
Expand All @@ -747,8 +747,8 @@ public static void square(int[] x, int[] zz)
}

long x_5 = x[5] & M;
long zz_9 = zz[9] & M;
long zz_10 = zz[10] & M;
long zz_9 = (zz[9] & M) + (zz_8 >>> 32); zz_8 &= M;
long zz_10 = (zz[10] & M) + (zz_9 >>> 32); zz_9 &= M;
{
zz_5 += x_5 * x_0;
w = (int)zz_5;
Expand Down Expand Up @@ -776,7 +776,7 @@ public static void square(int[] x, int[] zz)
w = (int)zz_10;
zz[10] = (w << 1) | c;
c = w >>> 31;
w = zz[11] + (int)(zz_10 >> 32);
w = zz[11] + (int)(zz_10 >>> 32);
zz[11] = (w << 1) | c;
}

Expand Down Expand Up @@ -831,8 +831,8 @@ public static void square(int[] x, int xOff, int[] zz, int zzOff)
}

long x_3 = x[xOff + 3] & M;
long zz_5 = zz[zzOff + 5] & M;
long zz_6 = zz[zzOff + 6] & M;
long zz_5 = (zz[zzOff + 5] & M) + (zz_4 >>> 32); zz_4 &= M;
long zz_6 = (zz[zzOff + 6] & M) + (zz_5 >>> 32); zz_5 &= M;
{
zz_3 += x_3 * x_0;
w = (int)zz_3;
Expand All @@ -846,8 +846,8 @@ public static void square(int[] x, int xOff, int[] zz, int zzOff)
}

long x_4 = x[xOff + 4] & M;
long zz_7 = zz[zzOff + 7] & M;
long zz_8 = zz[zzOff + 8] & M;
long zz_7 = (zz[zzOff + 7] & M) + (zz_6 >>> 32); zz_6 &= M;
long zz_8 = (zz[zzOff + 8] & M) + (zz_7 >>> 32); zz_7 &= M;
{
zz_4 += x_4 * x_0;
w = (int)zz_4;
Expand All @@ -863,8 +863,8 @@ public static void square(int[] x, int xOff, int[] zz, int zzOff)
}

long x_5 = x[xOff + 5] & M;
long zz_9 = zz[zzOff + 9] & M;
long zz_10 = zz[zzOff + 10] & M;
long zz_9 = (zz[zzOff + 9] & M) + (zz_8 >>> 32); zz_8 &= M;
long zz_10 = (zz[zzOff + 10] & M) + (zz_9 >>> 32); zz_9 &= M;
{
zz_5 += x_5 * x_0;
w = (int)zz_5;
Expand Down Expand Up @@ -892,7 +892,7 @@ public static void square(int[] x, int xOff, int[] zz, int zzOff)
w = (int)zz_10;
zz[zzOff + 10] = (w << 1) | c;
c = w >>> 31;
w = zz[zzOff + 11] + (int)(zz_10 >> 32);
w = zz[zzOff + 11] + (int)(zz_10 >>> 32);
zz[zzOff + 11] = (w << 1) | c;
}

Expand Down
36 changes: 18 additions & 18 deletions core/src/main/java/org/bouncycastle/math/raw/Nat224.java
Expand Up @@ -793,8 +793,8 @@ public static void square(int[] x, int[] zz)
}

long x_3 = x[3] & M;
long zz_5 = zz[5] & M;
long zz_6 = zz[6] & M;
long zz_5 = (zz[5] & M) + (zz_4 >>> 32); zz_4 &= M;
long zz_6 = (zz[6] & M) + (zz_5 >>> 32); zz_5 &= M;
{
zz_3 += x_3 * x_0;
w = (int)zz_3;
Expand All @@ -808,8 +808,8 @@ public static void square(int[] x, int[] zz)
}

long x_4 = x[4] & M;
long zz_7 = zz[7] & M;
long zz_8 = zz[8] & M;
long zz_7 = (zz[7] & M) + (zz_6 >>> 32); zz_6 &= M;
long zz_8 = (zz[8] & M) + (zz_7 >>> 32); zz_7 &= M;
{
zz_4 += x_4 * x_0;
w = (int)zz_4;
Expand All @@ -825,8 +825,8 @@ public static void square(int[] x, int[] zz)
}

long x_5 = x[5] & M;
long zz_9 = zz[9] & M;
long zz_10 = zz[10] & M;
long zz_9 = (zz[9] & M) + (zz_8 >>> 32); zz_8 &= M;
long zz_10 = (zz[10] & M) + (zz_9 >>> 32); zz_9 &= M;
{
zz_5 += x_5 * x_0;
w = (int)zz_5;
Expand All @@ -844,8 +844,8 @@ public static void square(int[] x, int[] zz)
}

long x_6 = x[6] & M;
long zz_11 = zz[11] & M;
long zz_12 = zz[12] & M;
long zz_11 = (zz[11] & M) + (zz_10 >>> 32); zz_10 &= M;
long zz_12 = (zz[12] & M) + (zz_11 >>> 32); zz_11 &= M;
{
zz_6 += x_6 * x_0;
w = (int)zz_6;
Expand Down Expand Up @@ -877,7 +877,7 @@ public static void square(int[] x, int[] zz)
w = (int)zz_12;
zz[12] = (w << 1) | c;
c = w >>> 31;
w = zz[13] + (int)(zz_12 >> 32);
w = zz[13] + (int)(zz_12 >>> 32);
zz[13] = (w << 1) | c;
}

Expand Down Expand Up @@ -932,8 +932,8 @@ public static void square(int[] x, int xOff, int[] zz, int zzOff)
}

long x_3 = x[xOff + 3] & M;
long zz_5 = zz[zzOff + 5] & M;
long zz_6 = zz[zzOff + 6] & M;
long zz_5 = (zz[zzOff + 5] & M) + (zz_4 >>> 32); zz_4 &= M;
long zz_6 = (zz[zzOff + 6] & M) + (zz_5 >>> 32); zz_5 &= M;
{
zz_3 += x_3 * x_0;
w = (int)zz_3;
Expand All @@ -947,8 +947,8 @@ public static void square(int[] x, int xOff, int[] zz, int zzOff)
}

long x_4 = x[xOff + 4] & M;
long zz_7 = zz[zzOff + 7] & M;
long zz_8 = zz[zzOff + 8] & M;
long zz_7 = (zz[zzOff + 7] & M) + (zz_6 >>> 32); zz_6 &= M;
long zz_8 = (zz[zzOff + 8] & M) + (zz_7 >>> 32); zz_7 &= M;
{
zz_4 += x_4 * x_0;
w = (int)zz_4;
Expand All @@ -964,8 +964,8 @@ public static void square(int[] x, int xOff, int[] zz, int zzOff)
}

long x_5 = x[xOff + 5] & M;
long zz_9 = zz[zzOff + 9] & M;
long zz_10 = zz[zzOff + 10] & M;
long zz_9 = (zz[zzOff + 9] & M) + (zz_8 >>> 32); zz_8 &= M;
long zz_10 = (zz[zzOff + 10] & M) + (zz_9 >>> 32); zz_9 &= M;
{
zz_5 += x_5 * x_0;
w = (int)zz_5;
Expand All @@ -983,8 +983,8 @@ public static void square(int[] x, int xOff, int[] zz, int zzOff)
}

long x_6 = x[xOff + 6] & M;
long zz_11 = zz[zzOff + 11] & M;
long zz_12 = zz[zzOff + 12] & M;
long zz_11 = (zz[zzOff + 11] & M) + (zz_10 >>> 32); zz_10 &= M;
long zz_12 = (zz[zzOff + 12] & M) + (zz_11 >>> 32); zz_11 &= M;
{
zz_6 += x_6 * x_0;
w = (int)zz_6;
Expand Down Expand Up @@ -1016,7 +1016,7 @@ public static void square(int[] x, int xOff, int[] zz, int zzOff)
w = (int)zz_12;
zz[zzOff + 12] = (w << 1) | c;
c = w >>> 31;
w = zz[zzOff + 13] + (int)(zz_12 >> 32);
w = zz[zzOff + 13] + (int)(zz_12 >>> 32);
zz[zzOff + 13] = (w << 1) | c;
}

Expand Down

0 comments on commit 7906420

Please sign in to comment.