]> WPIA git - gigi.git/blob - tests/com/lambdaworks/crypto/test/PBKDFTest.java
Merge "Update notes about password security"
[gigi.git] / tests / com / lambdaworks / crypto / test / PBKDFTest.java
1 // Copyright (C) 2011 - Will Glozer. All rights reserved.
2
3 package com.lambdaworks.crypto.test;
4
5 import com.lambdaworks.crypto.PBKDF;
6 import org.junit.Test;
7
8 import java.math.BigInteger;
9
10 import static org.junit.Assert.*;
11 import static com.lambdaworks.crypto.test.CryptoTestUtil.*;
12
13 public class PBKDFTest {
14
15     @Test
16     public void pbkdf2_hmac_sha1_rfc6070() throws Exception {
17         String alg = "HmacSHA1";
18         byte[] P, S;
19         int c, dkLen;
20         String DK;
21
22         P = "password".getBytes("UTF-8");
23         S = "salt".getBytes("UTF-8");
24         c = 1;
25         dkLen = 20;
26         DK = "0c60c80f961f0e71f3a9b524af6012062fe037a6";
27
28         assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
29
30         P = "password".getBytes("UTF-8");
31         S = "salt".getBytes("UTF-8");
32         c = 2;
33         dkLen = 20;
34         DK = "ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957";
35
36         assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
37
38         P = "password".getBytes("UTF-8");
39         S = "salt".getBytes("UTF-8");
40         c = 4096;
41         dkLen = 20;
42         DK = "4b007901b765489abead49d926f721d065a429c1";
43
44         assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
45
46         P = "password".getBytes("UTF-8");
47         S = "salt".getBytes("UTF-8");
48         c = 16777216;
49         dkLen = 20;
50         DK = "eefe3d61cd4da4e4e9945b3d6ba2158c2634e984";
51
52         assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
53
54         P = "passwordPASSWORDpassword".getBytes("UTF-8");
55         S = "saltSALTsaltSALTsaltSALTsaltSALTsalt".getBytes("UTF-8");
56         c = 4096;
57         dkLen = 25;
58         DK = "3d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038";
59
60         assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
61
62         P = "pass\0word".getBytes("UTF-8");
63         S = "sa\0lt".getBytes("UTF-8");
64         c = 4096;
65         dkLen = 16;
66         DK = "56fa6aa75548099dcc37d7f03425e0c3";
67
68         assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
69     }
70
71     @Test
72     public void pbkdf2_hmac_sha1_rfc3962() throws Exception {
73         String alg = "HmacSHA1";
74         byte[] P, S;
75         int c, dkLen;
76         String DK;
77
78         P = "password".getBytes("UTF-8");
79         S = "ATHENA.MIT.EDUraeburn".getBytes("UTF-8");
80         c = 1;
81
82         dkLen = 16;
83         DK = "cdedb5281bb2f801565a1122b2563515";
84         assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
85
86         dkLen = 32;
87         DK = "cdedb5281bb2f801565a1122b25635150ad1f7a04bb9f3a333ecc0e2e1f70837";
88         assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
89
90         P = "password".getBytes("UTF-8");
91         S = "ATHENA.MIT.EDUraeburn".getBytes("UTF-8");
92         c = 2;
93
94         dkLen = 16;
95         DK = "01dbee7f4a9e243e988b62c73cda935d";
96         assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
97
98         dkLen = 32;
99         DK = "01dbee7f4a9e243e988b62c73cda935da05378b93244ec8f48a99e61ad799d86";
100         assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
101
102         P = "password".getBytes("UTF-8");
103         S = "ATHENA.MIT.EDUraeburn".getBytes("UTF-8");
104         c = 1200;
105
106         dkLen = 16;
107         DK = "5c08eb61fdf71e4e4ec3cf6ba1f5512b";
108         assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
109
110         dkLen = 32;
111         DK = "5c08eb61fdf71e4e4ec3cf6ba1f5512ba7e52ddbc5e5142f708a31e2e62b1e13";
112         assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
113
114         P = "password".getBytes("UTF-8");
115         S = new BigInteger("1234567878563412", 16).toByteArray();
116         c = 5;
117
118         dkLen = 16;
119         DK = "d1daa78615f287e6a1c8b120d7062a49";
120         assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
121
122         dkLen = 32;
123         DK = "d1daa78615f287e6a1c8b120d7062a493f98d203e6be49a6adf4fa574b6e64ee";
124         assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
125     }
126
127     @Test
128     public void pbkdf2_hmac_sha256_scrypt() throws Exception {
129         String alg = "HmacSHA256";
130         byte[] P, S;
131         int c, dkLen;
132         String DK;
133
134         P = "password".getBytes("UTF-8");
135         S = "salt".getBytes("UTF-8");
136         c = 4096;
137         dkLen = 32;
138         DK = "c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134a";
139
140         assertArrayEquals(decode(DK), PBKDF.pbkdf2(alg, P, S, c, dkLen));
141     }
142 }