diff --git a/types/ssh2-streams/index.d.ts b/types/ssh2-streams/index.d.ts index 54d6359538..8b2530edb0 100644 --- a/types/ssh2-streams/index.d.ts +++ b/types/ssh2-streams/index.d.ts @@ -1686,23 +1686,17 @@ export interface Stats extends Attributes { } export namespace utils { - export function parseKey(keyData: string | Buffer): ParsedKey | Error; - export function genPublicKey(privKeyInfo: ParsedKey): ParsedKey; - export function decryptKey(privKeyInfo: ParsedKey, passphrase: string): void; + export function parseKey(keyData: string | Buffer, passphrase?: string): ParsedKey | {}[]; } export interface ParsedKey { - fulltype: string; type: string; - extra: string; comment: string; - encryption: string; - private: Buffer; - privateOrig: Buffer; - public: Buffer; - publicOrig: Buffer; - ppk?: boolean; - privateMAC?: string; + getPrivatePEM(): string; + getPublicPEM(): string; + getPublicSSH(): string; + sign(data: string | Buffer): Buffer | Error; + verify(data: string | Buffer, signature: Buffer): boolean | Error; } export interface ReadFileOptions { diff --git a/types/ssh2-streams/ssh2-streams-tests.ts b/types/ssh2-streams/ssh2-streams-tests.ts index 7fd73756d5..c813d4eeb4 100644 --- a/types/ssh2-streams/ssh2-streams-tests.ts +++ b/types/ssh2-streams/ssh2-streams-tests.ts @@ -87,9 +87,7 @@ server.forwardedTcpip(0, 0, 0, { bindAddr: "bindAddr", bindPort: 8080, remoteAdd server.x11(0, 0, 0, { originAddr: "originAddr", originPort: 0 }); server.openssh_forwardedStreamLocal(0, 0, 0, { socketPath: "socketPath" }); -const maybeParsedKey = ssh2.utils.parseKey("keyData"); -ssh2.utils.decryptKey(parsedKey, "passphrase"); -const publicKey = ssh2.utils.genPublicKey(parsedKey); +const maybeParsedKey = ssh2.utils.parseKey("keyData", "passphrase"); declare const attrs: ssh2.Attributes; diff --git a/types/ssh2/ssh2-tests.ts b/types/ssh2/ssh2-tests.ts index aa599498b5..87a0ea713f 100644 --- a/types/ssh2/ssh2-tests.ts +++ b/types/ssh2/ssh2-tests.ts @@ -313,7 +313,8 @@ var buffersEqual = require('buffer-equal-constant-time'), //ssh2 = require('ssh2'), utils = ssh2.utils; -var pubKey = utils.genPublicKey(utils.parseKey(fs.readFileSync('user.pub')) as ssh2_streams.ParsedKey); +var pubKey = utils.parseKey(fs.readFileSync('user.pub')) as ssh2_streams.ParsedKey; +var pubKeySSH = Buffer.from(pubKey.getPublicSSH()); new ssh2.Server({ hostKeys: [fs.readFileSync('host.key')] @@ -326,15 +327,14 @@ new ssh2.Server({ && ctx.password === 'bar') ctx.accept(); else if (ctx.method === 'publickey' - && ctx.key.algo === pubKey.fulltype - && buffersEqual(ctx.key.data, pubKey.public)) { + && ctx.key.algo === pubKey.type + && buffersEqual(ctx.key.data, pubKeySSH)) { if (ctx.signature) { - var verifier = crypto.createVerify(ctx.sigAlgo); - verifier.update(ctx.blob); - if (verifier.verify(pubKey.publicOrig.toString("utf8"), ctx.signature)) + if (pubKey.verify(ctx.blob, ctx.signature)) { ctx.accept(); - else + } else { ctx.reject(); + } } else { // if no signature present, that means the client is just checking // the validity of the given public key