public void exponentiateX(long pow, byte[] output) { // Initial value is little-endian 1 long[] y = GCMUtil.oneAsLongs(); if (pow > 0) { long[] powX = Arrays.clone(x); do { if ((pow & 1L) != 0) { GCMUtil.multiply(y, powX); } GCMUtil.square(powX, powX); pow >>>= 1; } while (pow > 0); } GCMUtil.asBytes(y, output); } }
public void init(byte[] H) { if (T == null) { T = new long[256][2]; } else if (Arrays.areEqual(this.H, H)) { return; } this.H = Arrays.clone(H); // T[0] = 0 // T[1] = H.p^7 GCMUtil.asLongs(this.H, T[1]); GCMUtil.multiplyP7(T[1], T[1]); for (int n = 2; n < 256; n += 2) { // T[2.n] = T[n].p^-1 GCMUtil.divideP(T[n >> 1], T[n]); // T[2.n + 1] = T[2.n] + T[1] GCMUtil.xor(T[n], T[1], T[n + 1]); } }
GCMUtil.asLongs(this.H, t[1]); GCMUtil.multiplyP3(t[1], t[1]); GCMUtil.multiplyP4(T[i - 1][1], t[1]); GCMUtil.divideP(t[n >> 1], t[n]); GCMUtil.xor(t[n], t[1], t[n + 1]);
public void exponentiateX(long pow, byte[] output) { long[] y = GCMUtil.oneAsLongs(); int bit = 0; while (pow > 0) { if ((pow & 1L) != 0) { ensureAvailable(bit); GCMUtil.multiply(y, (long[])lookupPowX2.elementAt(bit)); } ++bit; pow >>>= 1; } GCMUtil.asBytes(y, output); }
private void gHASHPartial(byte[] Y, byte[] b, int off, int len) { GCMUtil.xor(Y, b, off, len); multiplier.multiplyH(Y); }
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); } }
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); } } }
public void init(byte[] H) { this.H = GCMUtil.asLongs(H); }
public void init(byte[] x) { this.x = GCMUtil.asInts(x); }
private static final int[] LOOKUP = generateLookup();
GCMUtil.asLongs(this.H, t[1]); GCMUtil.multiplyP7(t[1], t[1]); GCMUtil.multiplyP8(T[i - 1][1], t[1]); GCMUtil.divideP(t[n >> 1], t[n]); GCMUtil.xor(t[n], t[1], t[n + 1]);
GCMUtil.asInts(H, M[0][128]); GCMUtil.multiplyP(M[0][j + j], M[0][j]); GCMUtil.xor(M[i][j], M[i][k], M[i][j + k]); GCMUtil.multiplyP8(M[i - 1][j], M[i][j]);
private void gHASHBlock(byte[] Y, byte[] b) { GCMUtil.xor(Y, b); multiplier.multiplyH(Y); }
public void init(byte[] x) { this.x = GCMUtil.asLongs(x); }