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