UNPKG

1.23 kBJavaScriptView Raw
1// adapted from https://github.com/apatil/pemstrip
2var 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
3var startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m
4var fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r+/=]+)-----END \1-----$/m
5var evp = require('evp_bytestokey')
6var ciphers = require('browserify-aes')
7var Buffer = require('safe-buffer').Buffer
8module.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}