diff options
Diffstat (limited to 'core/src/main/java/org/bouncycastle/crypto/modes/gcm')
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 |