diff --git a/lib/pem-packer.js b/lib/pem-packer.js new file mode 100644 index 0000000..aa1bb1b --- /dev/null +++ b/lib/pem-packer.js @@ -0,0 +1,13 @@ +'use strict'; + +var PEM = module.exports; +var Enc = require('./encoding.js'); + +PEM.packBlock = function (opts) { + var n = opts.lineLength || 64; + var re = new RegExp('.{1,' + n + '}', 'g'); + return '-----BEGIN ' + opts.type + '-----\n' + + Enc.bufToBase64(opts.bytes).match(re).join('\n') + '\n' + + '-----END ' + opts.type + '-----' + ; +}; diff --git a/lib/pem-parser.js b/lib/pem-parser.js new file mode 100644 index 0000000..dafeac7 --- /dev/null +++ b/lib/pem-parser.js @@ -0,0 +1,21 @@ +'use strict'; + +var PEM = module.exports; +var Enc = require('./encoding.js'); + +PEM.parseBlock = function pemToDer(pem) { + var lines = pem.trim().split(/\n/); + var end = lines.length - 1; + var head = lines[0].match(/-----BEGIN (.*)-----/); + var foot = lines[end].match(/-----END (.*)-----/); + + if (head) { + lines = lines.slice(1, end); + head = head[1]; + if (head !== foot[1]) { + throw new Error("headers and footers do not match"); + } + } + + return { type: head, bytes: Enc.base64ToBuf(lines.join('')) }; +};