200 lines
7.6 KiB
Java
200 lines
7.6 KiB
Java
|
package org.bouncycastle.crypto.engines;
|
||
|
|
||
|
/* loaded from: classes6.dex */
|
||
|
public final class CAST6Engine extends CAST5Engine {
|
||
|
protected static final int BLOCK_SIZE = 16;
|
||
|
protected static final int ROUNDS = 12;
|
||
|
protected int[] _Kr = new int[48];
|
||
|
protected int[] _Km = new int[48];
|
||
|
protected int[] _Tr = new int[192];
|
||
|
protected int[] _Tm = new int[192];
|
||
|
private int[] _workingKey = new int[8];
|
||
|
|
||
|
@Override // org.bouncycastle.crypto.engines.CAST5Engine, org.bouncycastle.crypto.BlockCipher
|
||
|
public final int getBlockSize() {
|
||
|
return 16;
|
||
|
}
|
||
|
|
||
|
@Override // org.bouncycastle.crypto.engines.CAST5Engine, org.bouncycastle.crypto.BlockCipher
|
||
|
public final void reset() {
|
||
|
}
|
||
|
|
||
|
@Override // org.bouncycastle.crypto.engines.CAST5Engine
|
||
|
protected final void setKey(byte[] bArr) {
|
||
|
int i = 1518500249;
|
||
|
int i2 = 19;
|
||
|
for (int i3 = 0; i3 < 24; i3++) {
|
||
|
for (int i4 = 0; i4 < 8; i4++) {
|
||
|
int i5 = (i3 << 3) + i4;
|
||
|
this._Tm[i5] = i;
|
||
|
i += 1859775393;
|
||
|
this._Tr[i5] = i2;
|
||
|
i2 = (i2 + 17) & 31;
|
||
|
}
|
||
|
}
|
||
|
byte[] bArr2 = new byte[64];
|
||
|
System.arraycopy(bArr, 0, bArr2, 0, bArr.length);
|
||
|
for (int i6 = 0; i6 < 8; i6++) {
|
||
|
this._workingKey[i6] = BytesTo32bits(bArr2, i6 << 2);
|
||
|
}
|
||
|
for (int i7 = 0; i7 < 12; i7++) {
|
||
|
int i8 = i7 << 4;
|
||
|
int[] iArr = this._workingKey;
|
||
|
iArr[6] = iArr[6] ^ F1(iArr[7], this._Tm[i8], this._Tr[i8]);
|
||
|
int[] iArr2 = this._workingKey;
|
||
|
int i9 = i8 + 1;
|
||
|
iArr2[5] = iArr2[5] ^ F2(iArr2[6], this._Tm[i9], this._Tr[i9]);
|
||
|
int[] iArr3 = this._workingKey;
|
||
|
int i10 = i8 + 2;
|
||
|
iArr3[4] = iArr3[4] ^ F3(iArr3[5], this._Tm[i10], this._Tr[i10]);
|
||
|
int[] iArr4 = this._workingKey;
|
||
|
int i11 = i8 + 3;
|
||
|
iArr4[3] = iArr4[3] ^ F1(iArr4[4], this._Tm[i11], this._Tr[i11]);
|
||
|
int[] iArr5 = this._workingKey;
|
||
|
int i12 = i8 + 4;
|
||
|
iArr5[2] = iArr5[2] ^ F2(iArr5[3], this._Tm[i12], this._Tr[i12]);
|
||
|
int[] iArr6 = this._workingKey;
|
||
|
int i13 = i8 + 5;
|
||
|
iArr6[1] = F3(iArr6[2], this._Tm[i13], this._Tr[i13]) ^ iArr6[1];
|
||
|
int[] iArr7 = this._workingKey;
|
||
|
int i14 = i8 + 6;
|
||
|
iArr7[0] = iArr7[0] ^ F1(iArr7[1], this._Tm[i14], this._Tr[i14]);
|
||
|
int[] iArr8 = this._workingKey;
|
||
|
int i15 = i8 + 7;
|
||
|
iArr8[7] = F2(iArr8[0], this._Tm[i15], this._Tr[i15]) ^ iArr8[7];
|
||
|
int i16 = ((i7 << 1) + 1) << 3;
|
||
|
int[] iArr9 = this._workingKey;
|
||
|
iArr9[6] = iArr9[6] ^ F1(iArr9[7], this._Tm[i16], this._Tr[i16]);
|
||
|
int[] iArr10 = this._workingKey;
|
||
|
int i17 = i16 + 1;
|
||
|
iArr10[5] = iArr10[5] ^ F2(iArr10[6], this._Tm[i17], this._Tr[i17]);
|
||
|
int[] iArr11 = this._workingKey;
|
||
|
int i18 = i16 + 2;
|
||
|
iArr11[4] = iArr11[4] ^ F3(iArr11[5], this._Tm[i18], this._Tr[i18]);
|
||
|
int[] iArr12 = this._workingKey;
|
||
|
int i19 = i16 + 3;
|
||
|
iArr12[3] = iArr12[3] ^ F1(iArr12[4], this._Tm[i19], this._Tr[i19]);
|
||
|
int[] iArr13 = this._workingKey;
|
||
|
int i20 = i16 + 4;
|
||
|
iArr13[2] = F2(iArr13[3], this._Tm[i20], this._Tr[i20]) ^ iArr13[2];
|
||
|
int[] iArr14 = this._workingKey;
|
||
|
int i21 = i16 + 5;
|
||
|
iArr14[1] = iArr14[1] ^ F3(iArr14[2], this._Tm[i21], this._Tr[i21]);
|
||
|
int[] iArr15 = this._workingKey;
|
||
|
int i22 = i16 + 6;
|
||
|
iArr15[0] = iArr15[0] ^ F1(iArr15[1], this._Tm[i22], this._Tr[i22]);
|
||
|
int[] iArr16 = this._workingKey;
|
||
|
int i23 = i16 + 7;
|
||
|
iArr16[7] = F2(iArr16[0], this._Tm[i23], this._Tr[i23]) ^ iArr16[7];
|
||
|
int[] iArr17 = this._Kr;
|
||
|
int i24 = i7 << 2;
|
||
|
int[] iArr18 = this._workingKey;
|
||
|
iArr17[i24] = iArr18[0] & 31;
|
||
|
int i25 = i24 + 1;
|
||
|
iArr17[i25] = iArr18[2] & 31;
|
||
|
int i26 = i24 + 2;
|
||
|
iArr17[i26] = iArr18[4] & 31;
|
||
|
int i27 = i24 + 3;
|
||
|
iArr17[i27] = iArr18[6] & 31;
|
||
|
int[] iArr19 = this._Km;
|
||
|
iArr19[i24] = iArr18[7];
|
||
|
iArr19[i25] = iArr18[5];
|
||
|
iArr19[i26] = iArr18[3];
|
||
|
iArr19[i27] = iArr18[1];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override // org.bouncycastle.crypto.engines.CAST5Engine, org.bouncycastle.crypto.BlockCipher
|
||
|
public final String getAlgorithmName() {
|
||
|
return "CAST6";
|
||
|
}
|
||
|
|
||
|
@Override // org.bouncycastle.crypto.engines.CAST5Engine
|
||
|
protected final int encryptBlock(byte[] bArr, int i, byte[] bArr2, int i2) {
|
||
|
int[] iArr = new int[4];
|
||
|
CAST_Encipher(BytesTo32bits(bArr, i), BytesTo32bits(bArr, i + 4), BytesTo32bits(bArr, i + 8), BytesTo32bits(bArr, i + 12), iArr);
|
||
|
Bits32ToBytes(iArr[0], bArr2, i2);
|
||
|
Bits32ToBytes(iArr[1], bArr2, i2 + 4);
|
||
|
Bits32ToBytes(iArr[2], bArr2, i2 + 8);
|
||
|
Bits32ToBytes(iArr[3], bArr2, i2 + 12);
|
||
|
return 16;
|
||
|
}
|
||
|
|
||
|
@Override // org.bouncycastle.crypto.engines.CAST5Engine
|
||
|
protected final int decryptBlock(byte[] bArr, int i, byte[] bArr2, int i2) {
|
||
|
int[] iArr = new int[4];
|
||
|
CAST_Decipher(BytesTo32bits(bArr, i), BytesTo32bits(bArr, i + 4), BytesTo32bits(bArr, i + 8), BytesTo32bits(bArr, i + 12), iArr);
|
||
|
Bits32ToBytes(iArr[0], bArr2, i2);
|
||
|
Bits32ToBytes(iArr[1], bArr2, i2 + 4);
|
||
|
Bits32ToBytes(iArr[2], bArr2, i2 + 8);
|
||
|
Bits32ToBytes(iArr[3], bArr2, i2 + 12);
|
||
|
return 16;
|
||
|
}
|
||
|
|
||
|
protected final void CAST_Encipher(int i, int i2, int i3, int i4, int[] iArr) {
|
||
|
int i5;
|
||
|
int i6 = 0;
|
||
|
while (true) {
|
||
|
if (i6 >= 6) {
|
||
|
break;
|
||
|
}
|
||
|
int i7 = i6 << 2;
|
||
|
i3 ^= F1(i4, this._Km[i7], this._Kr[i7]);
|
||
|
int i8 = i7 + 1;
|
||
|
i2 ^= F2(i3, this._Km[i8], this._Kr[i8]);
|
||
|
int i9 = i7 + 2;
|
||
|
i ^= F3(i2, this._Km[i9], this._Kr[i9]);
|
||
|
int i10 = i7 + 3;
|
||
|
i4 ^= F1(i, this._Km[i10], this._Kr[i10]);
|
||
|
i6++;
|
||
|
}
|
||
|
for (i5 = 6; i5 < 12; i5++) {
|
||
|
int i11 = i5 << 2;
|
||
|
int i12 = i11 + 3;
|
||
|
i4 ^= F1(i, this._Km[i12], this._Kr[i12]);
|
||
|
int i13 = i11 + 2;
|
||
|
i ^= F3(i2, this._Km[i13], this._Kr[i13]);
|
||
|
int i14 = i11 + 1;
|
||
|
i2 ^= F2(i3, this._Km[i14], this._Kr[i14]);
|
||
|
i3 ^= F1(i4, this._Km[i11], this._Kr[i11]);
|
||
|
}
|
||
|
iArr[0] = i;
|
||
|
iArr[1] = i2;
|
||
|
iArr[2] = i3;
|
||
|
iArr[3] = i4;
|
||
|
}
|
||
|
|
||
|
protected final void CAST_Decipher(int i, int i2, int i3, int i4, int[] iArr) {
|
||
|
int i5;
|
||
|
int i6 = 0;
|
||
|
while (true) {
|
||
|
if (i6 >= 6) {
|
||
|
break;
|
||
|
}
|
||
|
int i7 = (11 - i6) << 2;
|
||
|
i3 ^= F1(i4, this._Km[i7], this._Kr[i7]);
|
||
|
int i8 = i7 + 1;
|
||
|
i2 ^= F2(i3, this._Km[i8], this._Kr[i8]);
|
||
|
int i9 = i7 + 2;
|
||
|
i ^= F3(i2, this._Km[i9], this._Kr[i9]);
|
||
|
int i10 = i7 + 3;
|
||
|
i4 ^= F1(i, this._Km[i10], this._Kr[i10]);
|
||
|
i6++;
|
||
|
}
|
||
|
for (i5 = 6; i5 < 12; i5++) {
|
||
|
int i11 = (11 - i5) << 2;
|
||
|
int i12 = i11 + 3;
|
||
|
i4 ^= F1(i, this._Km[i12], this._Kr[i12]);
|
||
|
int i13 = i11 + 2;
|
||
|
i ^= F3(i2, this._Km[i13], this._Kr[i13]);
|
||
|
int i14 = i11 + 1;
|
||
|
i2 ^= F2(i3, this._Km[i14], this._Kr[i14]);
|
||
|
i3 ^= F1(i4, this._Km[i11], this._Kr[i11]);
|
||
|
}
|
||
|
iArr[0] = i;
|
||
|
iArr[1] = i2;
|
||
|
iArr[2] = i3;
|
||
|
iArr[3] = i4;
|
||
|
}
|
||
|
}
|