97 lines
3.1 KiB
JavaScript
97 lines
3.1 KiB
JavaScript
var _ = require('../utils')._;
|
|
|
|
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};
|
|
}
|
|
|
|
module.exports = {
|
|
pkcs1: require('./pkcs1'),
|
|
pkcs8: require('./pkcs8'),
|
|
components: require('./components'),
|
|
openssh: require('./openssh'),
|
|
|
|
isPrivateExport: function (format) {
|
|
return module.exports[format] && typeof module.exports[format].privateExport === 'function';
|
|
},
|
|
|
|
isPrivateImport: function (format) {
|
|
return module.exports[format] && typeof module.exports[format].privateImport === 'function';
|
|
},
|
|
|
|
isPublicExport: function (format) {
|
|
return module.exports[format] && typeof module.exports[format].publicExport === 'function';
|
|
},
|
|
|
|
isPublicImport: function (format) {
|
|
return module.exports[format] && typeof module.exports[format].publicImport === 'function';
|
|
},
|
|
|
|
detectAndImport: function (key, data, format) {
|
|
if (format === undefined) {
|
|
for (var scheme in module.exports) {
|
|
if (typeof module.exports[scheme].autoImport === 'function' && module.exports[scheme].autoImport(key, data)) {
|
|
return true;
|
|
}
|
|
}
|
|
} else if (format) {
|
|
var fmt = formatParse(format);
|
|
|
|
if (module.exports[fmt.scheme]) {
|
|
if (fmt.keyType === 'private') {
|
|
module.exports[fmt.scheme].privateImport(key, data, fmt.keyOpt);
|
|
} else {
|
|
module.exports[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 (module.exports[fmt.scheme]) {
|
|
if (fmt.keyType === 'private') {
|
|
if (!key.isPrivate()) {
|
|
throw Error("This is not private key");
|
|
}
|
|
return module.exports[fmt.scheme].privateExport(key, fmt.keyOpt);
|
|
} else {
|
|
if (!key.isPublic()) {
|
|
throw Error("This is not public key");
|
|
}
|
|
return module.exports[fmt.scheme].publicExport(key, fmt.keyOpt);
|
|
}
|
|
} else {
|
|
throw Error('Unsupported key format');
|
|
}
|
|
}
|
|
}
|
|
}; |