UNPKG

node-rsa-es

Version:
112 lines (100 loc) 3.28 kB
// var _ = require('../utils')._; import pkcs1 from './pkcs1.js'; import pkcs8 from './pkcs8.js'; import components from './components.js'; import openssh from './openssh.js'; var EXPORT_FORMAT_ALIASES = { 'private': 'pkcs1-private-pem', 'private-der': 'pkcs1-private-der', 'public': 'pkcs8-public-pem', 'public-der': 'pkcs8-public-der', }; function formatParse(format) { format = format.split('-'); var keyType = 'private'; var keyOpt = {type: 'default'}; for (var i = 1; i < format.length; i++) { if (format[i]) { switch (format[i]) { case 'public': keyType = format[i]; break; case 'private': keyType = format[i]; break; case 'pem': keyOpt.type = format[i]; break; case 'der': keyOpt.type = format[i]; break; } } } return {scheme: format[0], keyType: keyType, keyOpt: keyOpt}; } var obj = { pkcs1, pkcs8, components, openssh } export default { pkcs1, pkcs8, components, openssh, isPrivateExport: function (format) { return obj[format] && typeof obj[format].privateExport === 'function'; }, isPrivateImport: function (format) { return obj[format] && typeof obj[format].privateImport === 'function'; }, isPublicExport: function (format) { return obj[format] && typeof obj[format].publicExport === 'function'; }, isPublicImport: function (format) { return obj[format] && typeof obj[format].publicImport === 'function'; }, detectAndImport: function (key, data, format) { if (format === undefined) { for (var scheme in obj) { if (typeof obj[scheme].autoImport === 'function' && obj[scheme].autoImport(key, data)) { return true; } } } else if (format) { var fmt = formatParse(format); if (obj[fmt.scheme]) { if (fmt.keyType === 'private') { obj[fmt.scheme].privateImport(key, data, fmt.keyOpt); } else { obj[fmt.scheme].publicImport(key, data, fmt.keyOpt); } } else { throw Error('Unsupported key format'); } } return false; }, detectAndExport: function (key, format) { if (format) { var fmt = formatParse(format); if (obj[fmt.scheme]) { if (fmt.keyType === 'private') { if (!key.isPrivate()) { throw Error("This is not private key"); } return obj[fmt.scheme].privateExport(key, fmt.keyOpt); } else { if (!key.isPublic()) { throw Error("This is not public key"); } return obj[fmt.scheme].publicExport(key, fmt.keyOpt); } } else { throw Error('Unsupported key format'); } } } };