1 |
|
2 | var findProc = /Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r+/=]+)[\n\r]+/m
|
3 | var startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m
|
4 | var fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r+/=]+)-----END \1-----$/m
|
5 | var evp = require('evp_bytestokey')
|
6 | var ciphers = require('browserify-aes')
|
7 | var Buffer = require('safe-buffer').Buffer
|
8 | module.exports = function (okey, password) {
|
9 | var key = okey.toString()
|
10 | var match = key.match(findProc)
|
11 | var decrypted
|
12 | if (!match) {
|
13 | var match2 = key.match(fullRegex)
|
14 | decrypted = Buffer.from(match2[2].replace(/[\r\n]/g, ''), 'base64')
|
15 | } else {
|
16 | var suite = 'aes' + match[1]
|
17 | var iv = Buffer.from(match[2], 'hex')
|
18 | var cipherText = Buffer.from(match[3].replace(/[\r\n]/g, ''), 'base64')
|
19 | var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key
|
20 | var out = []
|
21 | var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)
|
22 | out.push(cipher.update(cipherText))
|
23 | out.push(cipher.final())
|
24 | decrypted = Buffer.concat(out)
|
25 | }
|
26 | var tag = key.match(startRegex)[1]
|
27 | return {
|
28 | tag: tag,
|
29 | data: decrypted
|
30 | }
|
31 | }
|