pem.js 727 Bytes
'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('')) };
};

PEM.packBlock = function (opts) {
  return '-----BEGIN ' + opts.type + '-----\n'
    + Enc.bufToBase64(opts.bytes).match(/.{1,64}/g).join('\n') + '\n'
    + '-----END ' + opts.type + '-----'
  ;
};