1c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrompackage org.bouncycastle.crypto.modes.gcm; 2c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 3c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstromimport org.bouncycastle.crypto.util.Pack; 46e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.util.Arrays; 5c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 6c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstromabstract class GCMUtil 7c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom{ 85db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root private static final int E1 = 0xe1000000; 95db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root private static final byte E1B = (byte)0xe1; 105db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root private static final long E1L = (E1 & 0xFFFFFFFFL) << 24; 115db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 125db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root private static int[] generateLookup() 135db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 145db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int[] lookup = new int[256]; 155db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 165db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root for (int c = 0; c < 256; ++c) 175db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 185db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int v = 0; 195db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root for (int i = 7; i >= 0; --i) 205db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 215db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root if ((c & (1 << i)) != 0) 225db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 235db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root v ^= (E1 >>> (7 - i)); 245db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 255db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 265db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root lookup[c] = v; 275db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 285db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 295db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root return lookup; 305db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 315db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 325db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root private static final int[] LOOKUP = generateLookup(); 335db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 346e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom static byte[] oneAsBytes() 356e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 366e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom byte[] tmp = new byte[16]; 376e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom tmp[0] = (byte)0x80; 386e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return tmp; 396e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 406e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 416e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom static int[] oneAsInts() 426e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 436e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom int[] tmp = new int[4]; 445db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root tmp[0] = 1 << 31; 455db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root return tmp; 465db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 475db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 485db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static long[] oneAsLongs() 495db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 505db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root long[] tmp = new long[2]; 515db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root tmp[0] = 1L << 63; 526e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return tmp; 536e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 546e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 555db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static byte[] asBytes(int[] x) 565db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 575db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root byte[] z = new byte[16]; 585db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root Pack.intToBigEndian(x, z, 0); 595db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root return z; 605db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 615db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 625db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static void asBytes(int[] x, byte[] z) 635db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 645db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root Pack.intToBigEndian(x, z, 0); 655db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 665db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 675db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static byte[] asBytes(long[] x) 685db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 695db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root byte[] z = new byte[16]; 705db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root Pack.longToBigEndian(x, z, 0); 715db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root return z; 725db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 735db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 745db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static void asBytes(long[] x, byte[] z) 755db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 765db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root Pack.longToBigEndian(x, z, 0); 775db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 785db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 795db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static int[] asInts(byte[] x) 805db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 815db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int[] z = new int[4]; 825db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root Pack.bigEndianToInt(x, 0, z); 835db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root return z; 845db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 855db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 865db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static void asInts(byte[] x, int[] z) 8770c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom { 885db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root Pack.bigEndianToInt(x, 0, z); 8970c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom } 9070c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom 915db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static long[] asLongs(byte[] x) 92c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 935db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root long[] z = new long[2]; 945db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root Pack.bigEndianToLong(x, 0, z); 955db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root return z; 9670c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom } 9770c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom 985db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static void asLongs(byte[] x, long[] z) 9970c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom { 1005db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root Pack.bigEndianToLong(x, 0, z); 101c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 102c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 1035db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static void multiply(byte[] x, byte[] y) 1046e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 1055db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root byte[] r0 = Arrays.clone(x); 1065db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root byte[] r1 = new byte[16]; 1076e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 1086e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom for (int i = 0; i < 16; ++i) 1096e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 1105db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root byte bits = y[i]; 1116e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom for (int j = 7; j >= 0; --j) 1126e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 1136e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom if ((bits & (1 << j)) != 0) 1146e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 1155db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root xor(r1, r0); 1166e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 1176e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 1185db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root if (shiftRight(r0) != 0) 1196e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 1205db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root r0[0] ^= E1B; 1216e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 1226e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 1236e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 1246e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 1255db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root System.arraycopy(r1, 0, x, 0, 16); 1265db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 1275db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 1285db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static void multiply(int[] x, int[] y) 1295db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 1305db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int[] r0 = Arrays.clone(x); 1315db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int[] r1 = new int[4]; 1325db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 1335db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root for (int i = 0; i < 4; ++i) 1345db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 1355db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int bits = y[i]; 1365db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root for (int j = 31; j >= 0; --j) 1375db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 1385db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root if ((bits & (1 << j)) != 0) 1395db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 1405db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root xor(r1, r0); 1415db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 1425db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 1435db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root if (shiftRight(r0) != 0) 1445db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 1455db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root r0[0] ^= E1; 1465db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 1475db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 1485db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 1495db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 1505db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root System.arraycopy(r1, 0, x, 0, 4); 1515db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 1525db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 1535db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static void multiply(long[] x, long[] y) 1545db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 1555db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root long[] r0 = new long[]{ x[0], x[1] }; 1565db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root long[] r1 = new long[2]; 1575db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 1585db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root for (int i = 0; i < 2; ++i) 1595db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 1605db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root long bits = y[i]; 1615db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root for (int j = 63; j >= 0; --j) 1625db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 1635db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root if ((bits & (1L << j)) != 0) 1645db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 1655db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root xor(r1, r0); 1665db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 1675db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 1685db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root if (shiftRight(r0) != 0) 1695db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 1705db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root r0[0] ^= E1L; 1715db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 1725db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 1735db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 1745db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 1755db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[0] = r1[0]; 1765db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[1] = r1[1]; 1776e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 1786e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 179c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom // P is the value with only bit i=1 set 180c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom static void multiplyP(int[] x) 181c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 1825db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root if (shiftRight(x) != 0) 183c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 1845db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[0] ^= E1; 185c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 186c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 187c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 1885db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static void multiplyP(int[] x, int[] y) 18970c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom { 1905db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root if (shiftRight(x, y) != 0) 19170c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom { 1925db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root y[0] ^= E1; 19370c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom } 19470c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom } 19570c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom 19670c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom // P is the value with only bit i=1 set 197c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom static void multiplyP8(int[] x) 198c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 1994c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// for (int i = 8; i != 0; --i) 2004c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// { 2014c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// multiplyP(x); 2024c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom// } 2034c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 2045db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int c = shiftRightN(x, 8); 2055db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[0] ^= LOOKUP[c >>> 24]; 206c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 207c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 2085db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static void multiplyP8(int[] x, int[] y) 20970c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom { 2105db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int c = shiftRightN(x, 8, y); 2115db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root y[0] ^= LOOKUP[c >>> 24]; 21270c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom } 21370c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom 2145db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static byte shiftRight(byte[] x) 215c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 2165db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// int c = 0; 2175db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// for (int i = 0; i < 16; ++i) 2185db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// { 2195db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// int b = x[i] & 0xff; 2205db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// x[i] = (byte)((b >>> 1) | c); 2215db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// c = (b & 1) << 7; 2225db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// } 2235db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// return (byte)c; 2245db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 2255db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int i = 0, c = 0; 2265db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root do 227c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 2285db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int b = x[i] & 0xff; 2295db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[i++] = (byte)((b >>> 1) | c); 2305db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root c = (b & 1) << 7; 2315db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root b = x[i] & 0xff; 2325db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[i++] = (byte)((b >>> 1) | c); 2335db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root c = (b & 1) << 7; 2345db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root b = x[i] & 0xff; 2355db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[i++] = (byte)((b >>> 1) | c); 2365db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root c = (b & 1) << 7; 2375db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root b = x[i] & 0xff; 2385db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[i++] = (byte)((b >>> 1) | c); 2395db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root c = (b & 1) << 7; 240c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 2415db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root while (i < 16); 2425db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root return (byte)c; 243c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 244c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 2455db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static byte shiftRight(byte[] x, byte[] z) 24670c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom { 2475db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// int c = 0; 2485db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// for (int i = 0; i < 16; ++i) 2495db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// { 2505db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// int b = x[i] & 0xff; 2515db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// z[i] = (byte) ((b >>> 1) | c); 2525db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// c = (b & 1) << 7; 2535db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// } 2545db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// return (byte) c; 2555db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 2565db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int i = 0, c = 0; 2575db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root do 25870c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom { 2595db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int b = x[i] & 0xff; 2605db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[i++] = (byte)((b >>> 1) | c); 2615db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root c = (b & 1) << 7; 2625db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root b = x[i] & 0xff; 2635db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[i++] = (byte)((b >>> 1) | c); 2645db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root c = (b & 1) << 7; 2655db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root b = x[i] & 0xff; 2665db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[i++] = (byte)((b >>> 1) | c); 2675db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root c = (b & 1) << 7; 2685db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root b = x[i] & 0xff; 2695db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[i++] = (byte)((b >>> 1) | c); 2705db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root c = (b & 1) << 7; 27170c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom } 2725db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root while (i < 16); 2735db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root return (byte)c; 27470c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom } 27570c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom 2765db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static int shiftRight(int[] x) 277c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 2785db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// int c = 0; 2795db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// for (int i = 0; i < 4; ++i) 2805db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// { 2815db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// int b = x[i]; 2825db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// x[i] = (b >>> 1) | c; 2835db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// c = b << 31; 2845db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// } 2855db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// return c; 2865db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 2875db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int b = x[0]; 2885db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[0] = b >>> 1; 2895db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int c = b << 31; 2905db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root b = x[1]; 2915db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[1] = (b >>> 1) | c; 2925db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root c = b << 31; 2935db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root b = x[2]; 2945db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[2] = (b >>> 1) | c; 2955db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root c = b << 31; 2965db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root b = x[3]; 2975db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[3] = (b >>> 1) | c; 2985db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root return b << 31; 299c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 300c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 3015db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static int shiftRight(int[] x, int[] z) 30270c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom { 3035db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// int c = 0; 3045db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// for (int i = 0; i < 4; ++i) 3055db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// { 3065db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// int b = x[i]; 3075db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// z[i] = (b >>> 1) | c; 3085db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// c = b << 31; 3095db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// } 3105db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// return c; 3115db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 3125db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int b = x[0]; 3135db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[0] = b >>> 1; 3145db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int c = b << 31; 3155db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root b = x[1]; 3165db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[1] = (b >>> 1) | c; 3175db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root c = b << 31; 3185db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root b = x[2]; 3195db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[2] = (b >>> 1) | c; 3205db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root c = b << 31; 3215db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root b = x[3]; 3225db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[3] = (b >>> 1) | c; 3235db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root return b << 31; 32470c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom } 32570c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom 3265db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static long shiftRight(long[] x) 3274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 3285db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root long b = x[0]; 3295db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[0] = b >>> 1; 3305db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root long c = b << 63; 3315db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root b = x[1]; 3325db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[1] = (b >>> 1) | c; 3335db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root return b << 63; 3345db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 3355db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 3365db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static long shiftRight(long[] x, long[] z) 3375db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 3385db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root long b = x[0]; 3395db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[0] = b >>> 1; 3405db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root long c = b << 63; 3415db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root b = x[1]; 3425db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[1] = (b >>> 1) | c; 3435db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root return b << 63; 3445db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 3455db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 3465db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static int shiftRightN(int[] x, int n) 3475db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 3485db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// int c = 0, nInv = 32 - n; 3495db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// for (int i = 0; i < 4; ++i) 3505db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// { 3515db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// int b = x[i]; 3525db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// x[i] = (b >>> n) | c; 3535db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// c = b << nInv; 3545db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// } 3555db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// return c; 3565db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 3575db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int b = x[0], nInv = 32 - n; 3585db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[0] = b >>> n; 3595db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int c = b << nInv; 3605db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root b = x[1]; 3615db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[1] = (b >>> n) | c; 3625db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root c = b << nInv; 3635db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root b = x[2]; 3645db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[2] = (b >>> n) | c; 3655db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root c = b << nInv; 3665db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root b = x[3]; 3675db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[3] = (b >>> n) | c; 3685db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root return b << nInv; 3694c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 3704c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 3715db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static int shiftRightN(int[] x, int n, int[] z) 3725db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 3735db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// int c = 0, nInv = 32 - n; 3745db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// for (int i = 0; i < 4; ++i) 3755db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// { 3765db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// int b = x[i]; 3775db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// z[i] = (b >>> n) | c; 3785db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// c = b << nInv; 3795db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// } 3805db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root// return c; 3815db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 3825db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int b = x[0], nInv = 32 - n; 3835db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[0] = b >>> n; 3845db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int c = b << nInv; 3855db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root b = x[1]; 3865db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[1] = (b >>> n) | c; 3875db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root c = b << nInv; 3885db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root b = x[2]; 3895db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[2] = (b >>> n) | c; 3905db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root c = b << nInv; 3915db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root b = x[3]; 3925db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[3] = (b >>> n) | c; 3935db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root return b << nInv; 3945db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 3955db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 3965db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static void xor(byte[] x, byte[] y) 39770c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom { 39870c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom int i = 0; 3995db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root do 40070c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom { 4015db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[i] ^= y[i]; ++i; 4025db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[i] ^= y[i]; ++i; 4035db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[i] ^= y[i]; ++i; 4045db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[i] ^= y[i]; ++i; 40570c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom } 4065db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root while (i < 16); 40770c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom } 40870c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom 4095db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static void xor(byte[] x, byte[] y, int yOff, int yLen) 410c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 4115db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root while (yLen-- > 0) 412c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 4135db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[yLen] ^= y[yOff + yLen]; 414c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 415c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 416c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 4175db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static void xor(byte[] x, byte[] y, byte[] z) 41870c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom { 4195db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int i = 0; 4205db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root do 42170c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom { 4225db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[i] = (byte)(x[i] ^ y[i]); ++i; 4235db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[i] = (byte)(x[i] ^ y[i]); ++i; 4245db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[i] = (byte)(x[i] ^ y[i]); ++i; 4255db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[i] = (byte)(x[i] ^ y[i]); ++i; 42670c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom } 4275db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root while (i < 16); 42870c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom } 42970c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom 4305db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static void xor(int[] x, int[] y) 43170c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom { 4325db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[0] ^= y[0]; 4335db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[1] ^= y[1]; 4345db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[2] ^= y[2]; 4355db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[3] ^= y[3]; 43670c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom } 43770c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom 4385db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static void xor(int[] x, int[] y, int[] z) 439c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 4405db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[0] = x[0] ^ y[0]; 4415db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[1] = x[1] ^ y[1]; 4425db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[2] = x[2] ^ y[2]; 4435db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[3] = x[3] ^ y[3]; 444c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 44570c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom 4465db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static void xor(long[] x, long[] y) 44770c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom { 4485db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[0] ^= y[0]; 4495db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root x[1] ^= y[1]; 4505db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root } 4515db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 4525db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root static void xor(long[] x, long[] y, long[] z) 4535db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { 4545db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[0] = x[0] ^ y[0]; 4555db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root z[1] = x[1] ^ y[1]; 45670c8287138e69a98c2f950036f9f703ee37228c8Brian Carlstrom } 457c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom} 458