| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | var inherits = require('inherits');var Buffer = require('buffer').Buffer;var DERDecoder = require('./der');function PEMDecoder(entity) {  DERDecoder.call(this, entity);  this.enc = 'pem';};inherits(PEMDecoder, DERDecoder);module.exports = PEMDecoder;PEMDecoder.prototype.decode = function decode(data, options) {  var lines = data.toString().split(/[\r\n]+/g);  var label = options.label.toUpperCase();  var re = /^-----(BEGIN|END) ([^-]+)-----$/;  var start = -1;  var end = -1;  for (var i = 0; i < lines.length; i++) {    var match = lines[i].match(re);    if (match === null)      continue;    if (match[2] !== label)      continue;    if (start === -1) {      if (match[1] !== 'BEGIN')        break;      start = i;    } else {      if (match[1] !== 'END')        break;      end = i;      break;    }  }  if (start === -1 || end === -1)    throw new Error('PEM section not found for: ' + label);  var base64 = lines.slice(start + 1, end).join('');  // Remove excessive symbols  base64.replace(/[^a-z0-9\+\/=]+/gi, '');  var input = new Buffer(base64, 'base64');  return DERDecoder.prototype.decode.call(this, input, options);};
 |