UNPKG

1.05 kBJavaScriptView Raw
1
2module.exports = function (crypto, password, keyLen, ivLen) {
3 keyLen = keyLen/8;
4 ivLen = ivLen || 0;
5 var ki = 0;
6 var ii = 0;
7 var key = new Buffer(keyLen);
8 var iv = new Buffer(ivLen);
9 var addmd = 0;
10 var md, md_buf;
11 var i;
12 while (true) {
13 md = crypto.createHash('md5');
14 if(addmd++ > 0) {
15 md.update(md_buf);
16 }
17 md.update(password);
18 md_buf = md.digest();
19 i = 0;
20 if(keyLen > 0) {
21 while(true) {
22 if(keyLen === 0) {
23 break;
24 }
25 if(i === md_buf.length) {
26 break;
27 }
28 key[ki++] = md_buf[i];
29 keyLen--;
30 i++;
31 }
32 }
33 if(ivLen > 0 && i !== md_buf.length) {
34 while(true) {
35 if(ivLen === 0) {
36 break;
37 }
38 if(i === md_buf.length) {
39 break;
40 }
41 iv[ii++] = md_buf[i];
42 ivLen--;
43 i++;
44 }
45 }
46 if(keyLen === 0 && ivLen === 0) {
47 break;
48 }
49 }
50 for(i=0;i<md_buf.length;i++) {
51 md_buf[i] = 0;
52 }
53 return {
54 key: key,
55 iv: iv
56 };
57};
\No newline at end of file