UNPKG

1.19 kBJavaScriptView Raw
1var md5 = require('create-hash/md5')
2module.exports = EVP_BytesToKey
3function EVP_BytesToKey (password, keyLen, ivLen) {
4 if (!Buffer.isBuffer(password)) {
5 password = new Buffer(password, 'binary')
6 }
7 keyLen = keyLen / 8
8 ivLen = ivLen || 0
9 var ki = 0
10 var ii = 0
11 var key = new Buffer(keyLen)
12 var iv = new Buffer(ivLen)
13 var addmd = 0
14 var md_buf
15 var i
16 var bufs = []
17 while (true) {
18 if (addmd++ > 0) {
19 bufs.push(md_buf)
20 }
21 bufs.push(password)
22 md_buf = md5(Buffer.concat(bufs))
23 bufs = []
24 i = 0
25 if (keyLen > 0) {
26 while (true) {
27 if (keyLen === 0) {
28 break
29 }
30 if (i === md_buf.length) {
31 break
32 }
33 key[ki++] = md_buf[i]
34 keyLen--
35 i++
36 }
37 }
38 if (ivLen > 0 && i !== md_buf.length) {
39 while (true) {
40 if (ivLen === 0) {
41 break
42 }
43 if (i === md_buf.length) {
44 break
45 }
46 iv[ii++] = md_buf[i]
47 ivLen--
48 i++
49 }
50 }
51 if (keyLen === 0 && ivLen === 0) {
52 break
53 }
54 }
55 for (i = 0; i < md_buf.length; i++) {
56 md_buf[i] = 0
57 }
58 return {
59 key: key,
60 iv: iv
61 }
62}