old-keypairs.js/lib/x509-parser.js

47 lines
1.4 KiB
JavaScript

'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) {
console.log(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) { console.error(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)");
};