353 lines
11 KiB
Java
353 lines
11 KiB
Java
package org.bouncycastle.crypto.engines;
|
|
|
|
import org.bouncycastle.crypto.BlockCipher;
|
|
import org.bouncycastle.crypto.CipherParameters;
|
|
import org.bouncycastle.crypto.DataLengthException;
|
|
import org.bouncycastle.crypto.OutputLengthException;
|
|
import org.bouncycastle.crypto.params.KeyParameter;
|
|
|
|
/* loaded from: classes6.dex */
|
|
public abstract class SerpentEngineBase implements BlockCipher {
|
|
protected static final int BLOCK_SIZE = 16;
|
|
static final int PHI = -1640531527;
|
|
static final int ROUNDS = 32;
|
|
protected int X0;
|
|
protected int X1;
|
|
protected int X2;
|
|
protected int X3;
|
|
protected boolean encrypting;
|
|
protected int[] wKey;
|
|
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
|
public static int rotateLeft(int i, int i2) {
|
|
return (i << i2) | (i >>> (-i2));
|
|
}
|
|
|
|
protected static int rotateRight(int i, int i2) {
|
|
return (i >>> i2) | (i << (-i2));
|
|
}
|
|
|
|
protected abstract void decryptBlock(byte[] bArr, int i, byte[] bArr2, int i2);
|
|
|
|
protected abstract void encryptBlock(byte[] bArr, int i, byte[] bArr2, int i2);
|
|
|
|
@Override // org.bouncycastle.crypto.BlockCipher
|
|
public int getBlockSize() {
|
|
return 16;
|
|
}
|
|
|
|
protected abstract int[] makeWorkingKey(byte[] bArr);
|
|
|
|
@Override // org.bouncycastle.crypto.BlockCipher
|
|
public void reset() {
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
|
public final void sb7(int i, int i2, int i3, int i4) {
|
|
int i5 = i2 ^ i3;
|
|
int i6 = (i3 & i5) ^ i4;
|
|
int i7 = i ^ i6;
|
|
int i8 = i2 ^ ((i4 | i5) & i7);
|
|
this.X1 = i8;
|
|
int i9 = (i & i7) ^ i5;
|
|
this.X3 = i9;
|
|
int i10 = (i8 | i6) ^ i7;
|
|
int i11 = i6 ^ (i9 & i10);
|
|
this.X2 = i11;
|
|
this.X0 = (i9 & i11) ^ (~i10);
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
|
public final void sb6(int i, int i2, int i3, int i4) {
|
|
int i5 = i ^ i4;
|
|
int i6 = i2 ^ i5;
|
|
int i7 = ((~i) | i5) ^ i3;
|
|
int i8 = i2 ^ i7;
|
|
this.X1 = i8;
|
|
int i9 = (i8 | i5) ^ i4;
|
|
int i10 = (i7 & i9) ^ i6;
|
|
this.X2 = i10;
|
|
int i11 = i9 ^ i7;
|
|
this.X0 = i10 ^ i11;
|
|
this.X3 = (~i7) ^ (i11 & i6);
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
|
public final void sb5(int i, int i2, int i3, int i4) {
|
|
int i5 = ~i;
|
|
int i6 = i ^ i2;
|
|
int i7 = i ^ i4;
|
|
int i8 = (i3 ^ i5) ^ (i6 | i7);
|
|
this.X0 = i8;
|
|
int i9 = i4 & i8;
|
|
int i10 = (i6 ^ i8) ^ i9;
|
|
this.X1 = i10;
|
|
int i11 = i7 ^ (i8 | i5);
|
|
this.X2 = (i6 | i9) ^ i11;
|
|
this.X3 = (i11 & i10) ^ (i2 ^ i9);
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
|
public final void sb4(int i, int i2, int i3, int i4) {
|
|
int i5 = i ^ i4;
|
|
int i6 = i3 ^ (i4 & i5);
|
|
int i7 = i2 | i6;
|
|
this.X3 = i5 ^ i7;
|
|
int i8 = ~i2;
|
|
int i9 = (i5 | i8) ^ i6;
|
|
this.X0 = i9;
|
|
int i10 = i8 ^ i5;
|
|
int i11 = (i7 & i10) ^ (i9 & i);
|
|
this.X2 = i11;
|
|
this.X1 = (i ^ i6) ^ (i10 & i11);
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
|
public final void sb3(int i, int i2, int i3, int i4) {
|
|
int i5 = i ^ i2;
|
|
int i6 = i | i4;
|
|
int i7 = i3 ^ i4;
|
|
int i8 = (i & i3) | (i5 & i6);
|
|
int i9 = i7 ^ i8;
|
|
this.X2 = i9;
|
|
int i10 = i8 ^ (i6 ^ i2);
|
|
int i11 = i5 ^ (i7 & i10);
|
|
this.X0 = i11;
|
|
int i12 = i9 & i11;
|
|
this.X1 = i10 ^ i12;
|
|
this.X3 = (i2 | i4) ^ (i7 ^ i12);
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
|
public final void sb2(int i, int i2, int i3, int i4) {
|
|
int i5 = ~i;
|
|
int i6 = i2 ^ i4;
|
|
int i7 = (i3 & i5) ^ i6;
|
|
this.X0 = i7;
|
|
int i8 = i3 ^ i5;
|
|
int i9 = i2 & (i3 ^ i7);
|
|
int i10 = i8 ^ i9;
|
|
this.X3 = i10;
|
|
int i11 = i ^ ((i9 | i4) & (i7 | i8));
|
|
this.X2 = i11;
|
|
this.X1 = (i11 ^ (i4 | i5)) ^ (i6 ^ i10);
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
|
public final void sb1(int i, int i2, int i3, int i4) {
|
|
int i5 = (~i) ^ i2;
|
|
int i6 = (i | i5) ^ i3;
|
|
int i7 = i4 ^ i6;
|
|
this.X2 = i7;
|
|
int i8 = i2 ^ (i4 | i5);
|
|
int i9 = i7 ^ i5;
|
|
int i10 = (i6 & i8) ^ i9;
|
|
this.X3 = i10;
|
|
int i11 = i8 ^ i6;
|
|
this.X1 = i10 ^ i11;
|
|
this.X0 = i6 ^ (i11 & i9);
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
|
public final void sb0(int i, int i2, int i3, int i4) {
|
|
int i5 = i ^ i4;
|
|
int i6 = i3 ^ i5;
|
|
int i7 = i2 ^ i6;
|
|
int i8 = (i4 & i) ^ i7;
|
|
this.X3 = i8;
|
|
int i9 = i ^ (i2 & i5);
|
|
this.X2 = (i3 | i9) ^ i7;
|
|
int i10 = (i6 ^ i9) & i8;
|
|
this.X1 = (~i6) ^ i10;
|
|
this.X0 = (~i9) ^ i10;
|
|
}
|
|
|
|
@Override // org.bouncycastle.crypto.BlockCipher
|
|
public final int processBlock(byte[] bArr, int i, byte[] bArr2, int i2) {
|
|
if (this.wKey == null) {
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.append(getAlgorithmName());
|
|
sb.append(" not initialised");
|
|
throw new IllegalStateException(sb.toString());
|
|
}
|
|
if (i + 16 > bArr.length) {
|
|
throw new DataLengthException("input buffer too short");
|
|
}
|
|
if (i2 + 16 > bArr2.length) {
|
|
throw new OutputLengthException("output buffer too short");
|
|
}
|
|
if (this.encrypting) {
|
|
encryptBlock(bArr, i, bArr2, i2);
|
|
return 16;
|
|
}
|
|
decryptBlock(bArr, i, bArr2, i2);
|
|
return 16;
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
|
public final void inverseLT() {
|
|
int rotateRight = (rotateRight(this.X2, 22) ^ this.X3) ^ (this.X1 << 7);
|
|
int rotateRight2 = rotateRight(this.X0, 5);
|
|
int i = this.X1;
|
|
int i2 = this.X3;
|
|
int i3 = (rotateRight2 ^ i) ^ i2;
|
|
int rotateRight3 = rotateRight(i2, 7);
|
|
int rotateRight4 = rotateRight(this.X1, 1);
|
|
this.X3 = (rotateRight3 ^ rotateRight) ^ (i3 << 3);
|
|
this.X1 = (rotateRight4 ^ i3) ^ rotateRight;
|
|
this.X2 = rotateRight(rotateRight, 3);
|
|
this.X0 = rotateRight(i3, 13);
|
|
}
|
|
|
|
@Override // org.bouncycastle.crypto.BlockCipher
|
|
public void init(boolean z, CipherParameters cipherParameters) {
|
|
if (cipherParameters instanceof KeyParameter) {
|
|
this.encrypting = z;
|
|
this.wKey = makeWorkingKey(((KeyParameter) cipherParameters).getKey());
|
|
} else {
|
|
StringBuilder sb = new StringBuilder("invalid parameter passed to ");
|
|
sb.append(getAlgorithmName());
|
|
sb.append(" init - ");
|
|
sb.append(cipherParameters.getClass().getName());
|
|
throw new IllegalArgumentException(sb.toString());
|
|
}
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
|
public final void ib7(int i, int i2, int i3, int i4) {
|
|
int i5 = (i & i2) | i3;
|
|
int i6 = (i | i2) & i4;
|
|
int i7 = i5 ^ i6;
|
|
this.X3 = i7;
|
|
int i8 = i2 ^ i6;
|
|
int i9 = (((~i4) ^ i7) | i8) ^ i;
|
|
this.X1 = i9;
|
|
int i10 = (i8 ^ i3) ^ (i4 | i9);
|
|
this.X0 = i10;
|
|
this.X2 = ((i & i7) ^ i10) ^ (i5 ^ i9);
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
|
public final void ib6(int i, int i2, int i3, int i4) {
|
|
int i5 = ~i;
|
|
int i6 = i ^ i2;
|
|
int i7 = i3 ^ i6;
|
|
int i8 = (i3 | i5) ^ i4;
|
|
this.X1 = i7 ^ i8;
|
|
int i9 = i6 ^ (i7 & i8);
|
|
int i10 = i8 ^ (i2 | i9);
|
|
this.X3 = i10;
|
|
int i11 = i2 | i10;
|
|
this.X0 = i9 ^ i11;
|
|
this.X2 = (i4 & i5) ^ (i11 ^ i7);
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
|
public final void ib5(int i, int i2, int i3, int i4) {
|
|
int i5 = ~i3;
|
|
int i6 = (i2 & i5) ^ i4;
|
|
int i7 = i & i6;
|
|
int i8 = (i2 ^ i5) ^ i7;
|
|
this.X3 = i8;
|
|
int i9 = i8 | i2;
|
|
this.X1 = i6 ^ (i & i9);
|
|
int i10 = i4 | i;
|
|
this.X0 = (i5 ^ i9) ^ i10;
|
|
this.X2 = ((i ^ i3) | i7) ^ (i2 & i10);
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
|
public final void ib4(int i, int i2, int i3, int i4) {
|
|
int i5 = i2 ^ ((i3 | i4) & i);
|
|
int i6 = i3 ^ (i & i5);
|
|
int i7 = i4 ^ i6;
|
|
this.X1 = i7;
|
|
int i8 = ~i;
|
|
int i9 = (i6 & i7) ^ i5;
|
|
this.X3 = i9;
|
|
int i10 = i4 ^ (i7 | i8);
|
|
this.X0 = i9 ^ i10;
|
|
this.X2 = (i8 ^ i7) ^ (i5 & i10);
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
|
public final void ib3(int i, int i2, int i3, int i4) {
|
|
int i5 = i2 ^ i3;
|
|
int i6 = (i2 & i5) ^ i;
|
|
int i7 = i4 | i6;
|
|
int i8 = i5 ^ i7;
|
|
this.X0 = i8;
|
|
int i9 = i4 ^ (i5 | i7);
|
|
this.X2 = (i3 ^ i6) ^ i9;
|
|
int i10 = (i | i2) ^ i9;
|
|
int i11 = (i8 & i10) ^ i6;
|
|
this.X3 = i11;
|
|
this.X1 = (i10 ^ i8) ^ i11;
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
|
public final void ib2(int i, int i2, int i3, int i4) {
|
|
int i5 = i2 ^ i4;
|
|
int i6 = i ^ i3;
|
|
int i7 = i3 ^ i5;
|
|
int i8 = (i2 & i7) ^ i6;
|
|
this.X0 = i8;
|
|
int i9 = (((i | (~i5)) ^ i4) | i6) ^ i5;
|
|
this.X3 = i9;
|
|
int i10 = ~i7;
|
|
int i11 = i9 | i8;
|
|
this.X1 = i10 ^ i11;
|
|
this.X2 = (i11 ^ i6) ^ (i4 & i10);
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
|
public final void ib1(int i, int i2, int i3, int i4) {
|
|
int i5 = i4 ^ i2;
|
|
int i6 = i ^ (i2 & i5);
|
|
int i7 = i5 ^ i6;
|
|
int i8 = i3 ^ i7;
|
|
this.X3 = i8;
|
|
int i9 = i2 ^ (i5 & i6);
|
|
int i10 = i6 ^ (i8 | i9);
|
|
this.X1 = i10;
|
|
int i11 = ~i10;
|
|
int i12 = i9 ^ i8;
|
|
this.X0 = i11 ^ i12;
|
|
this.X2 = (i11 | i12) ^ i7;
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
|
public final void ib0(int i, int i2, int i3, int i4) {
|
|
int i5 = ~i;
|
|
int i6 = i2 ^ i;
|
|
int i7 = (i5 | i6) ^ i4;
|
|
int i8 = i3 ^ i7;
|
|
int i9 = i6 ^ i8;
|
|
this.X2 = i9;
|
|
int i10 = (i6 & i4) ^ i5;
|
|
int i11 = (i9 & i10) ^ i7;
|
|
this.X1 = i11;
|
|
int i12 = (i & i7) ^ (i11 | i8);
|
|
this.X3 = i12;
|
|
this.X0 = i12 ^ (i10 ^ i8);
|
|
}
|
|
|
|
@Override // org.bouncycastle.crypto.BlockCipher
|
|
public String getAlgorithmName() {
|
|
return "Serpent";
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: protected */
|
|
public final void LT() {
|
|
int rotateLeft = rotateLeft(this.X0, 13);
|
|
int rotateLeft2 = rotateLeft(this.X2, 3);
|
|
int i = this.X1;
|
|
int i2 = this.X3;
|
|
this.X1 = rotateLeft((i ^ rotateLeft) ^ rotateLeft2, 1);
|
|
int rotateLeft3 = rotateLeft((i2 ^ rotateLeft2) ^ (rotateLeft << 3), 7);
|
|
this.X3 = rotateLeft3;
|
|
this.X0 = rotateLeft((rotateLeft ^ this.X1) ^ rotateLeft3, 5);
|
|
this.X2 = rotateLeft((this.X3 ^ rotateLeft2) ^ (this.X1 << 7), 22);
|
|
}
|
|
}
|