UNPKG

@microsoft/dev-tunnels-ssh-keys

Version:

SSH key import/export library for Dev Tunnels

69 lines 2.92 kB
"use strict"; // // 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