| 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; |
| } |
| } |