blob: e053fb93c20faa9e0dde7ce3cff70c325f38297f [file] [log] [blame]
package org.bouncycastle.jcajce.spec;
import javax.crypto.spec.PBEKeySpec;
import org.bouncycastle.asn1.DERNull;
import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
/**
* Extension of PBEKeySpec which takes into account the PRF algorithm setting available in PKCS#5 PBKDF2.
*/
public class PBKDF2KeySpec
extends PBEKeySpec
{
private static final AlgorithmIdentifier defaultPRF = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_hmacWithSHA1, DERNull.INSTANCE);
private AlgorithmIdentifier prf;
/**
* Base constructor.
*
* @param password password to use as the seed of the PBE key generator.
* @param salt salt to use in the generator,
* @param iterationCount iteration count to use in the generator.
* @param keySize size of the key to be generated (in bits).
* @param prf identifier and parameters for the PRF algorithm to use.
*/
public PBKDF2KeySpec(char[] password, byte[] salt, int iterationCount, int keySize, AlgorithmIdentifier prf)
{
super(password, salt, iterationCount, keySize);
this.prf = prf;
}
/**
* Return true if this spec is for the default PRF (HmacSHA1), false otherwise.
*
* @return true if this spec uses the default PRF, false otherwise.
*/
public boolean isDefaultPrf()
{
return defaultPRF.equals(prf);
}
/**
* Return an AlgorithmIdentifier representing the PRF.
*
* @return the PRF's AlgorithmIdentifier.
*/
public AlgorithmIdentifier getPrf()
{
return prf;
}
}