mirror of
https://git.coolaj86.com/coolaj86/old-keypairs.js
synced 2025-03-14 12:20:42 +00:00
46 lines
1.4 KiB
JavaScript
46 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) {
|
|
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)");
|
|
};
|