Red Hat Application Migration Toolkit
package iaik.security.cipher;
import iaik.security.cipher.DES;
import iaik.security.cipher.DESKeyGenerator;
import iaik.security.cipher.SecretKey;
import iaik.security.pbe.PBEGenParameterSpec;
import java.security.AlgorithmParameterGenerator;
import java.security.AlgorithmParameters;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.InvalidParameterSpecException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEParameterSpec;
public class PbeWithMD5AndDES_CBC extends DES {
// $FF: synthetic field
static Class a;
protected AlgorithmParameters params;
static Class a(String var0) {
try {
return Class.forName(var0);
} catch (ClassNotFoundException var2) {
throw new NoClassDefFoundError(var2.getMessage());
}
}
protected void initCipher(int var1, Key var2) throws InvalidAlgorithmParameterException, InvalidKeyException {
if(var2 != null && var2.getAlgorithm().equals("PBE") && var2.getFormat().equals("RAW")) {
byte[] var3 = var2.getEncoded();
PBEParameterSpec var4;
try {
var4 = (PBEParameterSpec)this.params.getParameterSpec(a != null?a:(a = a("javax.crypto.spec.PBEParameterSpec")));
} catch (InvalidParameterSpecException var13) {
throw new InvalidAlgorithmParameterException(var13.getMessage());
}
byte[] var5 = var4.getSalt();
int var6 = var4.getIterationCount();
if(var5.length != 8) {
throw new InvalidAlgorithmParameterException("Salt must be 8 bytes long.");
} else {
byte[] var7 = new byte[var3.length + var5.length];
System.arraycopy(var3, 0, var7, 0, var3.length);
System.arraycopy(var5, 0, var7, var3.length, var5.length);
MessageDigest var8;
try {
var8 = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException var12) {
throw new InvalidKeyException(var12.toString());
}
for(int var9 = 0; var9 < var6; ++var9) {
var7 = var8.digest(var7);
}
DESKeyGenerator.adjustParity(var7, 0);
SecretKey var10 = new SecretKey(var7, 0, 8, "RAW");
IvParameterSpec var11 = new IvParameterSpec(var7, 8, 8);
super.engineInit(var1, var10, var11, (SecureRandom)null);
}
} else {
throw new InvalidKeyException("Must be a PBEKey in RAW format.");
}
}
public void engineSetPadding(String var1) {
}
public void engineSetMode(String var1) {
}
public void engineInit(int var1, Key var2, AlgorithmParameterSpec var3, SecureRandom var4) throws InvalidAlgorithmParameterException, InvalidKeyException {
if(var3 == null) {
this.engineInit(var1, var2, var4);
} else {
if(var3 instanceof PBEParameterSpec) {
try {
this.params.init(var3);
} catch (InvalidParameterSpecException var7) {
throw new InvalidAlgorithmParameterException("Error setting algorithm parameters.");
}
} else {
if(!(var3 instanceof PBEGenParameterSpec)) {
throw new InvalidAlgorithmParameterException("Parameters must be an instance of PBEParameterSpec or PBEGenParameterSpec.");
}
try {
AlgorithmParameterGenerator var5 = AlgorithmParameterGenerator.getInstance("PBE");
var5.init(var3, var4);
this.params = var5.generateParameters();
} catch (NoSuchAlgorithmException var6) {
throw new InvalidAlgorithmParameterException("Error setting algorithm parameters.");
}
}
this.initCipher(var1, var2);
}
}
public void engineInit(int var1, Key var2, SecureRandom var3) throws InvalidKeyException {
try {
AlgorithmParameterGenerator var4 = AlgorithmParameterGenerator.getInstance("PBE");
var4.init(8, var3);
this.params = var4.generateParameters();
this.initCipher(var1, var2);
} catch (NoSuchAlgorithmException var5) {
throw new InvalidKeyException(var5.getMessage());
} catch (InvalidAlgorithmParameterException var6) {
throw new InvalidKeyException(var6.getMessage());
}
}
public void engineInit(int var1, Key var2, AlgorithmParameters var3, SecureRandom var4) throws InvalidAlgorithmParameterException, InvalidKeyException {
if(var3 != null && var3.getAlgorithm() == "PBE") {
this.params = var3;
this.initCipher(var1, var2);
} else {
throw new InvalidAlgorithmParameterException("Parameters must be of type PBEParameters.");
}
}
public AlgorithmParameters engineGetParameters() {
return this.params;
}
public PbeWithMD5AndDES_CBC() throws NoSuchPaddingException, NoSuchAlgorithmException {
super.engineSetPadding("PKCS5Padding");
super.engineSetMode("CBC");
this.params = AlgorithmParameters.getInstance("PBE");
}
}