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:
Diffstat (limited to 'core/src/main/java/org/bouncycastle/math/raw/Mod.java')
-rw-r--r--core/src/main/java/org/bouncycastle/math/raw/Mod.java199
1 files changed, 0 insertions, 199 deletions
diff --git a/core/src/main/java/org/bouncycastle/math/raw/Mod.java b/core/src/main/java/org/bouncycastle/math/raw/Mod.java
deleted file mode 100644
index 47e6d8c6..00000000
--- a/core/src/main/java/org/bouncycastle/math/raw/Mod.java
+++ /dev/null
@@ -1,199 +0,0 @@
-package org.bouncycastle.math.raw;
-
-import java.util.Random;
-
-import org.bouncycastle.util.Pack;
-
-public abstract class Mod
-{
- public static int inverse32(int d)
- {
-// int x = d + (((d + 1) & 4) << 1); // d.x == 1 mod 2**4
- int x = d; // d.x == 1 mod 2**3
- x *= 2 - d * x; // d.x == 1 mod 2**6
- x *= 2 - d * x; // d.x == 1 mod 2**12
- x *= 2 - d * x; // d.x == 1 mod 2**24
- x *= 2 - d * x; // d.x == 1 mod 2**48
-// assert d * x == 1;
- return x;
- }
-
- public static void invert(int[] p, int[] x, int[] z)
- {
- int len = p.length;
- if (Nat.isZero(len, x))
- {
- throw new IllegalArgumentException("'x' cannot be 0");
- }
- if (Nat.isOne(len, x))
- {
- System.arraycopy(x, 0, z, 0, len);
- return;
- }
-
- int[] u = Nat.copy(len, x);
- int[] a = Nat.create(len);
- a[0] = 1;
- int ac = 0;
-
- if ((u[0] & 1) == 0)
- {
- ac = inversionStep(p, u, len, a, ac);
- }
- if (Nat.isOne(len, u))
- {
- inversionResult(p, ac, a, z);
- return;
- }
-
- int[] v = Nat.copy(len, p);
- int[] b = Nat.create(len);
- int bc = 0;
-
- int uvLen = len;
-
- for (;;)
- {
- while (u[uvLen - 1] == 0 && v[uvLen - 1] == 0)
- {
- --uvLen;
- }
-
- if (Nat.gte(uvLen, u, v))
- {
- Nat.subFrom(uvLen, v, u);
-// assert (u[0] & 1) == 0;
- ac += Nat.subFrom(len, b, a) - bc;
- ac = inversionStep(p, u, uvLen, a, ac);
- if (Nat.isOne(uvLen, u))
- {
- inversionResult(p, ac, a, z);
- return;
- }
- }
- else
- {
- Nat.subFrom(uvLen, u, v);
-// assert (v[0] & 1) == 0;
- bc += Nat.subFrom(len, a, b) - ac;
- bc = inversionStep(p, v, uvLen, b, bc);
- if (Nat.isOne(uvLen, v))
- {
- inversionResult(p, bc, b, z);
- return;
- }
- }
- }
- }
-
- public static int[] random(int[] p)
- {
- int len = p.length;
- Random rand = new Random();
- int[] s = Nat.create(len);
-
- int m = p[len - 1];
- m |= m >>> 1;
- m |= m >>> 2;
- m |= m >>> 4;
- m |= m >>> 8;
- m |= m >>> 16;
-
- do
- {
- for (int i = 0; i != len; i++)
- {
- s[i] = rand.nextInt();
- }
- s[len - 1] &= m;
- }
- while (Nat.gte(len, s, p));
-
- return s;
- }
-
- public static void add(int[] p, int[] x, int[] y, int[] z)
- {
- int len = p.length;
- int c = Nat.add(len, x, y, z);
- if (c != 0)
- {
- Nat.subFrom(len, p, z);
- }
- }
-
- public static void subtract(int[] p, int[] x, int[] y, int[] z)
- {
- int len = p.length;
- int c = Nat.sub(len, x, y, z);
- if (c != 0)
- {
- Nat.addTo(len, p, z);
- }
- }
-
- private static void inversionResult(int[] p, int ac, int[] a, int[] z)
- {
- if (ac < 0)
- {
- Nat.add(p.length, a, p, z);
- }
- else
- {
- System.arraycopy(a, 0, z, 0, p.length);
- }
- }
-
- private static int inversionStep(int[] p, int[] u, int uLen, int[] x, int xc)
- {
- int len = p.length;
- int count = 0;
- while (u[0] == 0)
- {
- Nat.shiftDownWord(uLen, u, 0);
- count += 32;
- }
-
- {
- int zeroes = getTrailingZeroes(u[0]);
- if (zeroes > 0)
- {
- Nat.shiftDownBits(uLen, u, zeroes, 0);
- count += zeroes;
- }
- }
-
- for (int i = 0; i < count; ++i)
- {
- if ((x[0] & 1) != 0)
- {
- if (xc < 0)
- {
- xc += Nat.addTo(len, p, x);
- }
- else
- {
- xc += Nat.subFrom(len, p, x);
- }
- }
-
-// assert xc == 0 || xc == 1;
- Nat.shiftDownBit(len, x, xc);
- }
-
- return xc;
- }
-
- private static int getTrailingZeroes(int x)
- {
-// assert x != 0;
-
- int count = 0;
- while ((x & 1) == 0)
- {
- x >>>= 1;
- ++count;
- }
- return count;
- }
-}