node-rsa-es
Version:
Node.js RSA library
112 lines (100 loc) • 3.28 kB
JavaScript
// 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');
}
}
}
};