Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80542 views
1
var md5 = require('create-hash/md5')
2
module.exports = EVP_BytesToKey
3
function 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
}
63
64