1 // Copyright (C) 2011 - Will Glozer. All rights reserved.
3 package com.lambdaworks.crypto.test;
5 import com.lambdaworks.crypto.PBKDF;
8 import java.math.BigInteger;
10 import static org.junit.Assert.*;
11 import static com.lambdaworks.crypto.test.CryptoTestUtil.*;
13 public class PBKDFTest {
16 public void pbkdf2_hmac_sha1_rfc6070() throws Exception {
17 String alg = "HmacSHA1";
22 P = "password".getBytes("UTF-8");
23 S = "salt".getBytes("UTF-8");
26 DK = "0c60c80f961f0e71f3a9b524af6012062fe037a6";
28 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
30 P = "password".getBytes("UTF-8");
31 S = "salt".getBytes("UTF-8");
34 DK = "ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957";
36 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
38 P = "password".getBytes("UTF-8");
39 S = "salt".getBytes("UTF-8");
42 DK = "4b007901b765489abead49d926f721d065a429c1";
44 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
46 P = "password".getBytes("UTF-8");
47 S = "salt".getBytes("UTF-8");
50 DK = "eefe3d61cd4da4e4e9945b3d6ba2158c2634e984";
52 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
54 P = "passwordPASSWORDpassword".getBytes("UTF-8");
55 S = "saltSALTsaltSALTsaltSALTsaltSALTsalt".getBytes("UTF-8");
58 DK = "3d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038";
60 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
62 P = "pass\0word".getBytes("UTF-8");
63 S = "sa\0lt".getBytes("UTF-8");
66 DK = "56fa6aa75548099dcc37d7f03425e0c3";
68 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
72 public void pbkdf2_hmac_sha1_rfc3962() throws Exception {
73 String alg = "HmacSHA1";
78 P = "password".getBytes("UTF-8");
79 S = "ATHENA.MIT.EDUraeburn".getBytes("UTF-8");
83 DK = "cdedb5281bb2f801565a1122b2563515";
84 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
87 DK = "cdedb5281bb2f801565a1122b25635150ad1f7a04bb9f3a333ecc0e2e1f70837";
88 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
90 P = "password".getBytes("UTF-8");
91 S = "ATHENA.MIT.EDUraeburn".getBytes("UTF-8");
95 DK = "01dbee7f4a9e243e988b62c73cda935d";
96 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
99 DK = "01dbee7f4a9e243e988b62c73cda935da05378b93244ec8f48a99e61ad799d86";
100 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
102 P = "password".getBytes("UTF-8");
103 S = "ATHENA.MIT.EDUraeburn".getBytes("UTF-8");
107 DK = "5c08eb61fdf71e4e4ec3cf6ba1f5512b";
108 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
111 DK = "5c08eb61fdf71e4e4ec3cf6ba1f5512ba7e52ddbc5e5142f708a31e2e62b1e13";
112 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
114 P = "password".getBytes("UTF-8");
115 S = new BigInteger("1234567878563412", 16).toByteArray();
119 DK = "d1daa78615f287e6a1c8b120d7062a49";
120 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
123 DK = "d1daa78615f287e6a1c8b120d7062a493f98d203e6be49a6adf4fa574b6e64ee";
124 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
128 public void pbkdf2_hmac_sha256_scrypt() throws Exception {
129 String alg = "HmacSHA256";
134 P = "password".getBytes("UTF-8");
135 S = "salt".getBytes("UTF-8");
138 DK = "c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134a";
140 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));