15db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Rootpackage org.bouncycastle.jcajce.spec;
25db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
35db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Rootimport javax.crypto.spec.PBEKeySpec;
45db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
55db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Rootimport org.bouncycastle.asn1.x509.AlgorithmIdentifier;
65db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
7d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root/**
8d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root * Extension of PBEKeySpec which takes into account the PRF algorithm setting available in PKCS#5 PBKDF2.
9d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root */
105db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Rootpublic class PBKDF2KeySpec
115db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    extends PBEKeySpec
125db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root{
135db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    private AlgorithmIdentifier prf;
145db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
15d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root    /**
16d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root     * Base constructor.
17d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root     *
18d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root     * @param password password to use as the seed of the PBE key generator.
19d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root     * @param salt salt to use in the generator,
20d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root     * @param iterationCount iteration count to use in the generator.
21d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root     * @param keySize size of the key to be generated.
22d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root     * @param prf identifier and parameters for the PRF algorithm to use.
23d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root     */
245db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    public PBKDF2KeySpec(char[] password, byte[] salt, int iterationCount, int keySize, AlgorithmIdentifier prf)
255db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    {
265db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        super(password, salt, iterationCount, keySize);
275db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
285db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        this.prf = prf;
295db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    }
305db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
315db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    public AlgorithmIdentifier getPrf()
325db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    {
335db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        return prf;
345db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    }
355db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root}
36