@microsoft/dev-tunnels-ssh-keys
Version:
SSH key import/export library for Dev Tunnels
69 lines • 2.92 kB
JavaScript
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
Object.defineProperty(exports, "__esModule", { value: true });
exports.PublicKeyFormatter = void 0;
const dev_tunnels_ssh_1 = require("@microsoft/dev-tunnels-ssh");
const keyData_1 = require("./keyData");
/** Provides import/export of the SSH public key format. */
class PublicKeyFormatter {
async import(keyData) {
if (!keyData)
throw new TypeError('KeyData object expected.');
if (!keyData.keyType) {
// Try to parse binary data without any key type prefix.
try {
const reader = new dev_tunnels_ssh_1.SshDataReader(keyData.data);
keyData.keyType = reader.readString('ascii');
}
catch (e) {
return null;
}
}
let keyPair = null;
if (keyData.keyType === dev_tunnels_ssh_1.Rsa.keyAlgorithmName) {
keyPair = dev_tunnels_ssh_1.SshAlgorithms.publicKey.rsaWithSha512.createKeyPair();
}
else if (keyData.keyType === dev_tunnels_ssh_1.ECDsa.ecdsaSha2Nistp256) {
keyPair = dev_tunnels_ssh_1.SshAlgorithms.publicKey.ecdsaSha2Nistp256.createKeyPair();
}
else if (keyData.keyType === dev_tunnels_ssh_1.ECDsa.ecdsaSha2Nistp384) {
keyPair = dev_tunnels_ssh_1.SshAlgorithms.publicKey.ecdsaSha2Nistp384.createKeyPair();
}
else if (keyData.keyType === dev_tunnels_ssh_1.ECDsa.ecdsaSha2Nistp521) {
keyPair = dev_tunnels_ssh_1.SshAlgorithms.publicKey.ecdsaSha2Nistp521.createKeyPair();
}
if (keyPair) {
await keyPair.setPublicKeyBytes(keyData.data);
const comment = keyData.headers.get('Comment');
keyPair.comment = comment !== null && comment !== void 0 ? comment : null;
}
return keyPair;
}
async export(keyPair, includePrivate) {
if (!keyPair)
throw new TypeError('KeyPair object expected.');
if (includePrivate) {
throw new Error('SSH public key formatter does not support private keys.');
}
if (!keyPair.hasPublicKey) {
throw new Error('KeyPair object does not include a public key.');
}
const keyData = new keyData_1.KeyData();
keyData.keyType = keyPair.keyAlgorithmName;
keyData.data = (await keyPair.getPublicKeyBytes());
if (keyPair.comment) {
keyData.headers.set('Comment', keyPair.comment);
}
return keyData;
}
async decrypt(keyData, passphrase) {
return keyData;
}
encrypt(keyData, passphrase) {
throw new Error('SSH public key format does not support encryption.');
}
}
exports.PublicKeyFormatter = PublicKeyFormatter;
//# sourceMappingURL=publicKeyFormatter.js.map
;