package org.bouncycastle.crypto.modes.gcm; import com.google.common.primitives.UnsignedBytes; import java.lang.reflect.Array; import org.bouncycastle.util.Arrays; import org.bouncycastle.util.Pack; /* loaded from: classes6.dex */ public class Tables64kGCMMultiplier implements GCMMultiplier { private byte[] H; private int[][][] M; @Override // org.bouncycastle.crypto.modes.gcm.GCMMultiplier public void multiplyH(byte[] bArr) { int[] iArr = new int[4]; for (int i = 15; i >= 0; i--) { int[] iArr2 = this.M[i][bArr[i] & UnsignedBytes.MAX_VALUE]; iArr[0] = iArr[0] ^ iArr2[0]; iArr[1] = iArr[1] ^ iArr2[1]; iArr[2] = iArr[2] ^ iArr2[2]; iArr[3] = iArr2[3] ^ iArr[3]; } Pack.intToBigEndian(iArr, bArr, 0); } @Override // org.bouncycastle.crypto.modes.gcm.GCMMultiplier public void init(byte[] bArr) { if (this.M == null) { this.M = (int[][][]) Array.newInstance((Class) Integer.TYPE, 16, 256, 4); } else if (Arrays.areEqual(this.H, bArr)) { return; } this.H = Arrays.clone(bArr); int i = 0; GCMUtil.asInts(bArr, this.M[0][128]); for (int i2 = 64; i2 > 0; i2 >>= 1) { int[][] iArr = this.M[0]; GCMUtil.multiplyP(iArr[i2 + i2], iArr[i2]); } while (true) { for (int i3 = 2; i3 < 256; i3 += i3) { for (int i4 = 1; i4 < i3; i4++) { int[][] iArr2 = this.M[i]; GCMUtil.xor(iArr2[i3], iArr2[i4], iArr2[i3 + i4]); } } int i5 = i + 1; if (i5 == 16) { return; } for (int i6 = 128; i6 > 0; i6 >>= 1) { int[][][] iArr3 = this.M; GCMUtil.multiplyP8(iArr3[i][i6], iArr3[i5][i6]); } i = i5; } } }