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/crypto/modes/gcm')
-rw-r--r--core/src/main/java/org/bouncycastle/crypto/modes/gcm/BasicGCMExponentiator.java36
-rw-r--r--core/src/main/java/org/bouncycastle/crypto/modes/gcm/BasicGCMMultiplier.java18
-rw-r--r--core/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMExponentiator.java7
-rw-r--r--core/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMMultiplier.java7
-rw-r--r--core/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMUtil.java457
-rw-r--r--core/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables1kGCMExponentiator.java58
-rw-r--r--core/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables64kGCMMultiplier.java73
-rw-r--r--core/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables8kGCMMultiplier.java90
8 files changed, 0 insertions, 746 deletions
diff --git a/core/src/main/java/org/bouncycastle/crypto/modes/gcm/BasicGCMExponentiator.java b/core/src/main/java/org/bouncycastle/crypto/modes/gcm/BasicGCMExponentiator.java
deleted file mode 100644
index fc25810d..00000000
--- a/core/src/main/java/org/bouncycastle/crypto/modes/gcm/BasicGCMExponentiator.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.bouncycastle.crypto.modes.gcm;
-
-import org.bouncycastle.util.Arrays;
-
-public class BasicGCMExponentiator implements GCMExponentiator
-{
- private int[] x;
-
- public void init(byte[] x)
- {
- this.x = GCMUtil.asInts(x);
- }
-
- public void exponentiateX(long pow, byte[] output)
- {
- // Initial value is little-endian 1
- int[] y = GCMUtil.oneAsInts();
-
- if (pow > 0)
- {
- int[] powX = Arrays.clone(x);
- do
- {
- if ((pow & 1L) != 0)
- {
- GCMUtil.multiply(y, powX);
- }
- GCMUtil.multiply(powX, powX);
- pow >>>= 1;
- }
- while (pow > 0);
- }
-
- GCMUtil.asBytes(y, output);
- }
-}
diff --git a/core/src/main/java/org/bouncycastle/crypto/modes/gcm/BasicGCMMultiplier.java b/core/src/main/java/org/bouncycastle/crypto/modes/gcm/BasicGCMMultiplier.java
deleted file mode 100644
index a98d5b2a..00000000
--- a/core/src/main/java/org/bouncycastle/crypto/modes/gcm/BasicGCMMultiplier.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.bouncycastle.crypto.modes.gcm;
-
-import org.bouncycastle.util.Arrays;
-
-public class BasicGCMMultiplier implements GCMMultiplier
-{
- private byte[] H;
-
- public void init(byte[] H)
- {
- this.H = Arrays.clone(H);
- }
-
- public void multiplyH(byte[] x)
- {
- GCMUtil.multiply(x, H);
- }
-}
diff --git a/core/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMExponentiator.java b/core/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMExponentiator.java
deleted file mode 100644
index e1cc5c76..00000000
--- a/core/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMExponentiator.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.bouncycastle.crypto.modes.gcm;
-
-public interface GCMExponentiator
-{
- void init(byte[] x);
- void exponentiateX(long pow, byte[] output);
-}
diff --git a/core/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMMultiplier.java b/core/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMMultiplier.java
deleted file mode 100644
index f52f6105..00000000
--- a/core/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMMultiplier.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.bouncycastle.crypto.modes.gcm;
-
-public interface GCMMultiplier
-{
- void init(byte[] H);
- void multiplyH(byte[] x);
-}
diff --git a/core/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMUtil.java b/core/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMUtil.java
deleted file mode 100644
index f5ed7e4f..00000000
--- a/core/src/main/java/org/bouncycastle/crypto/modes/gcm/GCMUtil.java
+++ /dev/null
@@ -1,457 +0,0 @@
-package org.bouncycastle.crypto.modes.gcm;
-
-import org.bouncycastle.util.Arrays;
-import org.bouncycastle.util.Pack;
-
-abstract class GCMUtil
-{
- private static final int E1 = 0xe1000000;
- private static final byte E1B = (byte)0xe1;
- private static final long E1L = (E1 & 0xFFFFFFFFL) << 24;
-
- private static int[] generateLookup()
- {
- int[] lookup = new int[256];
-
- for (int c = 0; c < 256; ++c)
- {
- int v = 0;
- for (int i = 7; i >= 0; --i)
- {
- if ((c & (1 << i)) != 0)
- {
- v ^= (E1 >>> (7 - i));
- }
- }
- lookup[c] = v;
- }
-
- return lookup;
- }
-
- private static final int[] LOOKUP = generateLookup();
-
- static byte[] oneAsBytes()
- {
- byte[] tmp = new byte[16];
- tmp[0] = (byte)0x80;
- return tmp;
- }
-
- static int[] oneAsInts()
- {
- int[] tmp = new int[4];
- tmp[0] = 1 << 31;
- return tmp;
- }
-
- static long[] oneAsLongs()
- {
- long[] tmp = new long[2];
- tmp[0] = 1L << 63;
- return tmp;
- }
-
- static byte[] asBytes(int[] x)
- {
- byte[] z = new byte[16];
- Pack.intToBigEndian(x, z, 0);
- return z;
- }
-
- static void asBytes(int[] x, byte[] z)
- {
- Pack.intToBigEndian(x, z, 0);
- }
-
- static byte[] asBytes(long[] x)
- {
- byte[] z = new byte[16];
- Pack.longToBigEndian(x, z, 0);
- return z;
- }
-
- static void asBytes(long[] x, byte[] z)
- {
- Pack.longToBigEndian(x, z, 0);
- }
-
- static int[] asInts(byte[] x)
- {
- int[] z = new int[4];
- Pack.bigEndianToInt(x, 0, z);
- return z;
- }
-
- static void asInts(byte[] x, int[] z)
- {
- Pack.bigEndianToInt(x, 0, z);
- }
-
- static long[] asLongs(byte[] x)
- {
- long[] z = new long[2];
- Pack.bigEndianToLong(x, 0, z);
- return z;
- }
-
- static void asLongs(byte[] x, long[] z)
- {
- Pack.bigEndianToLong(x, 0, z);
- }
-
- static void multiply(byte[] x, byte[] y)
- {
- byte[] r0 = Arrays.clone(x);
- byte[] r1 = new byte[16];
-
- for (int i = 0; i < 16; ++i)
- {
- byte bits = y[i];
- for (int j = 7; j >= 0; --j)
- {
- if ((bits & (1 << j)) != 0)
- {
- xor(r1, r0);
- }
-
- if (shiftRight(r0) != 0)
- {
- r0[0] ^= E1B;
- }
- }
- }
-
- System.arraycopy(r1, 0, x, 0, 16);
- }
-
- static void multiply(int[] x, int[] y)
- {
- int[] r0 = Arrays.clone(x);
- int[] r1 = new int[4];
-
- for (int i = 0; i < 4; ++i)
- {
- int bits = y[i];
- for (int j = 31; j >= 0; --j)
- {
- if ((bits & (1 << j)) != 0)
- {
- xor(r1, r0);
- }
-
- if (shiftRight(r0) != 0)
- {
- r0[0] ^= E1;
- }
- }
- }
-
- System.arraycopy(r1, 0, x, 0, 4);
- }
-
- static void multiply(long[] x, long[] y)
- {
- long[] r0 = new long[]{ x[0], x[1] };
- long[] r1 = new long[2];
-
- for (int i = 0; i < 2; ++i)
- {
- long bits = y[i];
- for (int j = 63; j >= 0; --j)
- {
- if ((bits & (1L << j)) != 0)
- {
- xor(r1, r0);
- }
-
- if (shiftRight(r0) != 0)
- {
- r0[0] ^= E1L;
- }
- }
- }
-
- x[0] = r1[0];
- x[1] = r1[1];
- }
-
- // P is the value with only bit i=1 set
- static void multiplyP(int[] x)
- {
- if (shiftRight(x) != 0)
- {
- x[0] ^= E1;
- }
- }
-
- static void multiplyP(int[] x, int[] y)
- {
- if (shiftRight(x, y) != 0)
- {
- y[0] ^= E1;
- }
- }
-
- // P is the value with only bit i=1 set
- static void multiplyP8(int[] x)
- {
-// for (int i = 8; i != 0; --i)
-// {
-// multiplyP(x);
-// }
-
- int c = shiftRightN(x, 8);
- x[0] ^= LOOKUP[c >>> 24];
- }
-
- static void multiplyP8(int[] x, int[] y)
- {
- int c = shiftRightN(x, 8, y);
- y[0] ^= LOOKUP[c >>> 24];
- }
-
- static byte shiftRight(byte[] x)
- {
-// int c = 0;
-// for (int i = 0; i < 16; ++i)
-// {
-// int b = x[i] & 0xff;
-// x[i] = (byte)((b >>> 1) | c);
-// c = (b & 1) << 7;
-// }
-// return (byte)c;
-
- int i = 0, c = 0;
- do
- {
- int b = x[i] & 0xff;
- x[i++] = (byte)((b >>> 1) | c);
- c = (b & 1) << 7;
- b = x[i] & 0xff;
- x[i++] = (byte)((b >>> 1) | c);
- c = (b & 1) << 7;
- b = x[i] & 0xff;
- x[i++] = (byte)((b >>> 1) | c);
- c = (b & 1) << 7;
- b = x[i] & 0xff;
- x[i++] = (byte)((b >>> 1) | c);
- c = (b & 1) << 7;
- }
- while (i < 16);
- return (byte)c;
- }
-
- static byte shiftRight(byte[] x, byte[] z)
- {
-// int c = 0;
-// for (int i = 0; i < 16; ++i)
-// {
-// int b = x[i] & 0xff;
-// z[i] = (byte) ((b >>> 1) | c);
-// c = (b & 1) << 7;
-// }
-// return (byte) c;
-
- int i = 0, c = 0;
- do
- {
- int b = x[i] & 0xff;
- z[i++] = (byte)((b >>> 1) | c);
- c = (b & 1) << 7;
- b = x[i] & 0xff;
- z[i++] = (byte)((b >>> 1) | c);
- c = (b & 1) << 7;
- b = x[i] & 0xff;
- z[i++] = (byte)((b >>> 1) | c);
- c = (b & 1) << 7;
- b = x[i] & 0xff;
- z[i++] = (byte)((b >>> 1) | c);
- c = (b & 1) << 7;
- }
- while (i < 16);
- return (byte)c;
- }
-
- static int shiftRight(int[] x)
- {
-// int c = 0;
-// for (int i = 0; i < 4; ++i)
-// {
-// int b = x[i];
-// x[i] = (b >>> 1) | c;
-// c = b << 31;
-// }
-// return c;
-
- int b = x[0];
- x[0] = b >>> 1;
- int c = b << 31;
- b = x[1];
- x[1] = (b >>> 1) | c;
- c = b << 31;
- b = x[2];
- x[2] = (b >>> 1) | c;
- c = b << 31;
- b = x[3];
- x[3] = (b >>> 1) | c;
- return b << 31;
- }
-
- static int shiftRight(int[] x, int[] z)
- {
-// int c = 0;
-// for (int i = 0; i < 4; ++i)
-// {
-// int b = x[i];
-// z[i] = (b >>> 1) | c;
-// c = b << 31;
-// }
-// return c;
-
- int b = x[0];
- z[0] = b >>> 1;
- int c = b << 31;
- b = x[1];
- z[1] = (b >>> 1) | c;
- c = b << 31;
- b = x[2];
- z[2] = (b >>> 1) | c;
- c = b << 31;
- b = x[3];
- z[3] = (b >>> 1) | c;
- return b << 31;
- }
-
- static long shiftRight(long[] x)
- {
- long b = x[0];
- x[0] = b >>> 1;
- long c = b << 63;
- b = x[1];
- x[1] = (b >>> 1) | c;
- return b << 63;
- }
-
- static long shiftRight(long[] x, long[] z)
- {
- long b = x[0];
- z[0] = b >>> 1;
- long c = b << 63;
- b = x[1];
- z[1] = (b >>> 1) | c;
- return b << 63;
- }
-
- static int shiftRightN(int[] x, int n)
- {
-// int c = 0, nInv = 32 - n;
-// for (int i = 0; i < 4; ++i)
-// {
-// int b = x[i];
-// x[i] = (b >>> n) | c;
-// c = b << nInv;
-// }
-// return c;
-
- int b = x[0], nInv = 32 - n;
- x[0] = b >>> n;
- int c = b << nInv;
- b = x[1];
- x[1] = (b >>> n) | c;
- c = b << nInv;
- b = x[2];
- x[2] = (b >>> n) | c;
- c = b << nInv;
- b = x[3];
- x[3] = (b >>> n) | c;
- return b << nInv;
- }
-
- static int shiftRightN(int[] x, int n, int[] z)
- {
-// int c = 0, nInv = 32 - n;
-// for (int i = 0; i < 4; ++i)
-// {
-// int b = x[i];
-// z[i] = (b >>> n) | c;
-// c = b << nInv;
-// }
-// return c;
-
- int b = x[0], nInv = 32 - n;
- z[0] = b >>> n;
- int c = b << nInv;
- b = x[1];
- z[1] = (b >>> n) | c;
- c = b << nInv;
- b = x[2];
- z[2] = (b >>> n) | c;
- c = b << nInv;
- b = x[3];
- z[3] = (b >>> n) | c;
- return b << nInv;
- }
-
- static void xor(byte[] x, byte[] y)
- {
- int i = 0;
- do
- {
- x[i] ^= y[i]; ++i;
- x[i] ^= y[i]; ++i;
- x[i] ^= y[i]; ++i;
- x[i] ^= y[i]; ++i;
- }
- while (i < 16);
- }
-
- static void xor(byte[] x, byte[] y, int yOff, int yLen)
- {
- while (yLen-- > 0)
- {
- x[yLen] ^= y[yOff + yLen];
- }
- }
-
- static void xor(byte[] x, byte[] y, byte[] z)
- {
- int i = 0;
- do
- {
- z[i] = (byte)(x[i] ^ y[i]); ++i;
- z[i] = (byte)(x[i] ^ y[i]); ++i;
- z[i] = (byte)(x[i] ^ y[i]); ++i;
- z[i] = (byte)(x[i] ^ y[i]); ++i;
- }
- while (i < 16);
- }
-
- static void xor(int[] x, int[] y)
- {
- x[0] ^= y[0];
- x[1] ^= y[1];
- x[2] ^= y[2];
- x[3] ^= y[3];
- }
-
- static void xor(int[] x, int[] y, int[] z)
- {
- z[0] = x[0] ^ y[0];
- z[1] = x[1] ^ y[1];
- z[2] = x[2] ^ y[2];
- z[3] = x[3] ^ y[3];
- }
-
- static void xor(long[] x, long[] y)
- {
- x[0] ^= y[0];
- x[1] ^= y[1];
- }
-
- static void xor(long[] x, long[] y, long[] z)
- {
- z[0] = x[0] ^ y[0];
- z[1] = x[1] ^ y[1];
- }
-}
diff --git a/core/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables1kGCMExponentiator.java b/core/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables1kGCMExponentiator.java
deleted file mode 100644
index 6eff4e3f..00000000
--- a/core/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables1kGCMExponentiator.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package org.bouncycastle.crypto.modes.gcm;
-
-import java.util.Vector;
-
-import org.bouncycastle.util.Arrays;
-
-public class Tables1kGCMExponentiator implements GCMExponentiator
-{
- // A lookup table of the power-of-two powers of 'x'
- // - lookupPowX2[i] = x^(2^i)
- private Vector lookupPowX2;
-
- public void init(byte[] x)
- {
- int[] y = GCMUtil.asInts(x);
- if (lookupPowX2 != null && Arrays.areEqual(y, (int[])lookupPowX2.elementAt(0)))
- {
- return;
- }
-
- lookupPowX2 = new Vector(8);
- lookupPowX2.addElement(y);
- }
-
- public void exponentiateX(long pow, byte[] output)
- {
- int[] y = GCMUtil.oneAsInts();
- int bit = 0;
- while (pow > 0)
- {
- if ((pow & 1L) != 0)
- {
- ensureAvailable(bit);
- GCMUtil.multiply(y, (int[])lookupPowX2.elementAt(bit));
- }
- ++bit;
- pow >>>= 1;
- }
-
- GCMUtil.asBytes(y, output);
- }
-
- private void ensureAvailable(int bit)
- {
- int count = lookupPowX2.size();
- if (count <= bit)
- {
- int[] tmp = (int[])lookupPowX2.elementAt(count - 1);
- do
- {
- tmp = Arrays.clone(tmp);
- GCMUtil.multiply(tmp, tmp);
- lookupPowX2.addElement(tmp);
- }
- while (++count <= bit);
- }
- }
-}
diff --git a/core/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables64kGCMMultiplier.java b/core/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables64kGCMMultiplier.java
deleted file mode 100644
index 4f32a0d9..00000000
--- a/core/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables64kGCMMultiplier.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.bouncycastle.crypto.modes.gcm;
-
-import org.bouncycastle.util.Arrays;
-import org.bouncycastle.util.Pack;
-
-public class Tables64kGCMMultiplier implements GCMMultiplier
-{
- private byte[] H;
- private int[][][] M;
-
- public void init(byte[] H)
- {
- if (M == null)
- {
- M = new int[16][256][4];
- }
- else if (Arrays.areEqual(this.H, H))
- {
- return;
- }
-
- this.H = Arrays.clone(H);
-
- // M[0][0] is ZEROES;
- GCMUtil.asInts(H, M[0][128]);
-
- for (int j = 64; j >= 1; j >>= 1)
- {
- GCMUtil.multiplyP(M[0][j + j], M[0][j]);
- }
-
- int i = 0;
- for (;;)
- {
- for (int j = 2; j < 256; j += j)
- {
- for (int k = 1; k < j; ++k)
- {
- GCMUtil.xor(M[i][j], M[i][k], M[i][j + k]);
- }
- }
-
- if (++i == 16)
- {
- return;
- }
-
- // M[i][0] is ZEROES;
- for (int j = 128; j > 0; j >>= 1)
- {
- GCMUtil.multiplyP8(M[i - 1][j], M[i][j]);
- }
- }
- }
-
- public void multiplyH(byte[] x)
- {
-// assert x.Length == 16;
-
- int[] z = new int[4];
- for (int i = 15; i >= 0; --i)
- {
-// GCMUtil.xor(z, M[i][x[i] & 0xff]);
- int[] m = M[i][x[i] & 0xff];
- z[0] ^= m[0];
- z[1] ^= m[1];
- z[2] ^= m[2];
- z[3] ^= m[3];
- }
-
- Pack.intToBigEndian(z, x, 0);
- }
-}
diff --git a/core/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables8kGCMMultiplier.java b/core/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables8kGCMMultiplier.java
deleted file mode 100644
index 69c1dce8..00000000
--- a/core/src/main/java/org/bouncycastle/crypto/modes/gcm/Tables8kGCMMultiplier.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package org.bouncycastle.crypto.modes.gcm;
-
-import org.bouncycastle.util.Arrays;
-import org.bouncycastle.util.Pack;
-
-public class Tables8kGCMMultiplier implements GCMMultiplier
-{
- private byte[] H;
- private int[][][] M;
-
- public void init(byte[] H)
- {
- if (M == null)
- {
- M = new int[32][16][4];
- }
- else if (Arrays.areEqual(this.H, H))
- {
- return;
- }
-
- this.H = Arrays.clone(H);
-
- // M[0][0] is ZEROES;
- // M[1][0] is ZEROES;
- GCMUtil.asInts(H, M[1][8]);
-
- for (int j = 4; j >= 1; j >>= 1)
- {
- GCMUtil.multiplyP(M[1][j + j], M[1][j]);
- }
-
- GCMUtil.multiplyP(M[1][1], M[0][8]);
-
- for (int j = 4; j >= 1; j >>= 1)
- {
- GCMUtil.multiplyP(M[0][j + j], M[0][j]);
- }
-
- int i = 0;
- for (;;)
- {
- for (int j = 2; j < 16; j += j)
- {
- for (int k = 1; k < j; ++k)
- {
- GCMUtil.xor(M[i][j], M[i][k], M[i][j + k]);
- }
- }
-
- if (++i == 32)
- {
- return;
- }
-
- if (i > 1)
- {
- // M[i][0] is ZEROES;
- for(int j = 8; j > 0; j >>= 1)
- {
- GCMUtil.multiplyP8(M[i - 2][j], M[i][j]);
- }
- }
- }
- }
-
- public void multiplyH(byte[] x)
- {
-// assert x.Length == 16;
-
- int[] z = new int[4];
- for (int i = 15; i >= 0; --i)
- {
-// GCMUtil.xor(z, M[i + i][x[i] & 0x0f]);
- int[] m = M[i + i][x[i] & 0x0f];
- z[0] ^= m[0];
- z[1] ^= m[1];
- z[2] ^= m[2];
- z[3] ^= m[3];
-// GCMUtil.xor(z, M[i + i + 1][(x[i] & 0xf0) >>> 4]);
- m = M[i + i + 1][(x[i] & 0xf0) >>> 4];
- z[0] ^= m[0];
- z[1] ^= m[1];
- z[2] ^= m[2];
- z[3] ^= m[3];
- }
-
- Pack.intToBigEndian(z, x, 0);
- }
-} \ No newline at end of file