'use strict'; var x509 = module.exports; var PEM = require('./pem-parser.js'); var EC = require('./x509-ec-parser.js'); var RSA = require('./x509-rsa-parser.js'); x509.parse = function (opts) { var pem = opts.pem; var der = opts.der; if ('string' === opts.key) { pem = opts.key; } else if (opts.key && opts.key.length) { der = opts.key; } if (pem) { pem = PEM.parseBlock(pem); } else { pem = { bytes: der, type: '' }; } der = pem.bytes; var typ = pem.type; var pub = /PUBLIC KEY/.test(typ); var prv = /PRIVATE KEY/.test(typ); var ec = /EC P/.test(typ); var rsa = /RSA P/.test(typ); // Try EC Private and Public keys if (!rsa && !pub) { try { return EC.parsePkcs8(der); } catch(e) { /*ignore*/ } try { return EC.parseSec1(der); } catch(e) { /*ignore*/ } } else if (!rsa && !prv) { try { return EC.parseSpki(der); } catch(e) { /*ignore*/ } } // Try RSA Private and Public keys if (!ec && !pub) { try { return RSA.parsePkcs8(der); } catch(e) { /*ignore*/ } try { return RSA.parsePkcs1(der); } catch(e) { /*ignore*/ } } else if (!ec && !prv) { try { return RSA.parseSpki(der); } catch(e) { /*ignore*/ } try { return RSA.parsePublicPkcs1(der); } catch(e) { /*ignore*/ } } throw new Error("Invalid or Unsupported key:\n" + "Tried ASN.1 PEM/DER PKCS1, SEC1, PKCS8, and SPKI/PKIX (RSA and EC Private and Public)"); };