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 {
15 public void pbkdf2_hmac_sha1_rfc6070() throws Exception {
16 String alg = "HmacSHA1";
21 P = "password".getBytes("UTF-8");
22 S = "salt".getBytes("UTF-8");
25 DK = "0c60c80f961f0e71f3a9b524af6012062fe037a6";
27 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
29 P = "password".getBytes("UTF-8");
30 S = "salt".getBytes("UTF-8");
33 DK = "ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957";
35 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
37 P = "password".getBytes("UTF-8");
38 S = "salt".getBytes("UTF-8");
41 DK = "4b007901b765489abead49d926f721d065a429c1";
43 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
45 P = "password".getBytes("UTF-8");
46 S = "salt".getBytes("UTF-8");
49 DK = "eefe3d61cd4da4e4e9945b3d6ba2158c2634e984";
51 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
53 P = "passwordPASSWORDpassword".getBytes("UTF-8");
54 S = "saltSALTsaltSALTsaltSALTsaltSALTsalt".getBytes("UTF-8");
57 DK = "3d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038";
59 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
61 P = "pass\0word".getBytes("UTF-8");
62 S = "sa\0lt".getBytes("UTF-8");
65 DK = "56fa6aa75548099dcc37d7f03425e0c3";
67 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
71 public void pbkdf2_hmac_sha1_rfc3962() throws Exception {
72 String alg = "HmacSHA1";
77 P = "password".getBytes("UTF-8");
78 S = "ATHENA.MIT.EDUraeburn".getBytes("UTF-8");
82 DK = "cdedb5281bb2f801565a1122b2563515";
83 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
86 DK = "cdedb5281bb2f801565a1122b25635150ad1f7a04bb9f3a333ecc0e2e1f70837";
87 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
89 P = "password".getBytes("UTF-8");
90 S = "ATHENA.MIT.EDUraeburn".getBytes("UTF-8");
94 DK = "01dbee7f4a9e243e988b62c73cda935d";
95 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
98 DK = "01dbee7f4a9e243e988b62c73cda935da05378b93244ec8f48a99e61ad799d86";
99 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
101 P = "password".getBytes("UTF-8");
102 S = "ATHENA.MIT.EDUraeburn".getBytes("UTF-8");
106 DK = "5c08eb61fdf71e4e4ec3cf6ba1f5512b";
107 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
110 DK = "5c08eb61fdf71e4e4ec3cf6ba1f5512ba7e52ddbc5e5142f708a31e2e62b1e13";
111 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
113 P = "password".getBytes("UTF-8");
114 S = new BigInteger("1234567878563412", 16).toByteArray();
118 DK = "d1daa78615f287e6a1c8b120d7062a49";
119 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
122 DK = "d1daa78615f287e6a1c8b120d7062a493f98d203e6be49a6adf4fa574b6e64ee";
123 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
127 public void pbkdf2_hmac_sha256_scrypt() throws Exception {
128 String alg = "HmacSHA256";
133 P = "password".getBytes("UTF-8");
134 S = "salt".getBytes("UTF-8");
137 DK = "c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134a";
139 assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));