package org.bouncycastle.jcajce.provider.symmetric.util;
import java.security.spec.KeySpec;
import javax.crypto.interfaces.PBEKey;
import javax.crypto.spec.PBEKeySpec;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.PBEParametersGenerator;
import org.bouncycastle.crypto.params.KeyParameter;
import org.bouncycastle.crypto.params.ParametersWithIV;
public class BCPBEKey
implements PBEKey
{
String algorithm;
ASN1ObjectIdentifier oid;
int type;
int digest;
int keySize;
int ivSize;
CipherParameters param;
PBEKeySpec pbeKeySpec;
boolean tryWrong = false;
Params: - param –
/**
* @param param
*/
public BCPBEKey(
String algorithm,
ASN1ObjectIdentifier oid,
int type,
int digest,
int keySize,
int ivSize,
PBEKeySpec pbeKeySpec,
CipherParameters param)
{
this.algorithm = algorithm;
this.oid = oid;
this.type = type;
this.digest = digest;
this.keySize = keySize;
this.ivSize = ivSize;
this.pbeKeySpec = pbeKeySpec;
this.param = param;
}
public BCPBEKey(String algName,
KeySpec pbeSpec, CipherParameters param)
{
this.algorithm = algName;
this.param = param;
}
public String getAlgorithm()
{
return algorithm;
}
public String getFormat()
{
return "RAW";
}
public byte[] getEncoded()
{
if (param != null)
{
KeyParameter kParam;
if (param instanceof ParametersWithIV)
{
kParam = (KeyParameter)((ParametersWithIV)param).getParameters();
}
else
{
kParam = (KeyParameter)param;
}
return kParam.getKey();
}
else
{
if (type == PBE.PKCS12)
{
return PBEParametersGenerator.PKCS12PasswordToBytes(pbeKeySpec.getPassword());
}
else if (type == PBE.PKCS5S2_UTF8)
{
return PBEParametersGenerator.PKCS5PasswordToUTF8Bytes(pbeKeySpec.getPassword());
}
else
{
return PBEParametersGenerator.PKCS5PasswordToBytes(pbeKeySpec.getPassword());
}
}
}
int getType()
{
return type;
}
int getDigest()
{
return digest;
}
int getKeySize()
{
return keySize;
}
public int getIvSize()
{
return ivSize;
}
public CipherParameters getParam()
{
return param;
}
/* (non-Javadoc)
* @see javax.crypto.interfaces.PBEKey#getPassword()
*/
public char[] getPassword()
{
return pbeKeySpec.getPassword();
}
/* (non-Javadoc)
* @see javax.crypto.interfaces.PBEKey#getSalt()
*/
public byte[] getSalt()
{
return pbeKeySpec.getSalt();
}
/* (non-Javadoc)
* @see javax.crypto.interfaces.PBEKey#getIterationCount()
*/
public int getIterationCount()
{
return pbeKeySpec.getIterationCount();
}
public ASN1ObjectIdentifier getOID()
{
return oid;
}
public void setTryWrongPKCS12Zero(boolean tryWrong)
{
this.tryWrong = tryWrong;
}
boolean shouldTryWrongPKCS12()
{
return tryWrong;
}
}