UNPKG

imba

Version:

Intuitive and powerful language for building webapps that fly

43 lines (42 loc) 1.34 kB
import { inherits as inherits$0 } from "util"; import DERDecoder from "./der"; 'use strict'; const inherits = { inherits: inherits$0 }.inherits; function PEMDecoder(entity) { DERDecoder.call(this, entity); this.enc = 'pem'; } inherits(PEMDecoder, DERDecoder); PEMDecoder.prototype.decode = function decode(data, options) { const lines = data.toString().split(/[\r\n]+/g); const label = options.label.toUpperCase(); const re = /^-----(BEGIN|END) ([^-]+)-----$/; let start = -1; let end = -1; for (let i = 0; i < lines.length; i++) { const 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); const base64 = lines.slice(start + 1, end).join(''); // Remove excessive symbols base64.replace(/[^a-z0-9+/=]+/gi, ''); const input = Buffer.from(base64, 'base64'); return DERDecoder.prototype.decode.call(this, input, options); }; export default PEMDecoder;