1 |
|
2 | module.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 |