first commit
This commit is contained in:
66
build/node_modules/ssh2-streams/test/test-kexdh.js
generated
vendored
Normal file
66
build/node_modules/ssh2-streams/test/test-kexdh.js
generated
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
var SSH2Stream = require('../lib/ssh');
|
||||
var parseKey = require('../lib/utils').parseKey;
|
||||
var genPubKey = require('../lib/utils').genPublicKey;
|
||||
var MESSAGE = require('../lib/constants').MESSAGE;
|
||||
|
||||
var assert = require('assert');
|
||||
var fs = require('fs');
|
||||
|
||||
var SERVER_KEY = fs.readFileSync(__dirname + '/fixtures/ssh_host_rsa_key');
|
||||
var SERVER_KEY_PRV = parseKey(SERVER_KEY);
|
||||
var SERVER_KEY_PUB = genPubKey(SERVER_KEY_PRV);
|
||||
|
||||
var server = new SSH2Stream({
|
||||
server: true,
|
||||
hostKeys: {
|
||||
'ssh-rsa': {
|
||||
privateKey: SERVER_KEY_PRV,
|
||||
publicKey: SERVER_KEY_PUB,
|
||||
}
|
||||
}
|
||||
});
|
||||
var client = new SSH2Stream();
|
||||
var cliError;
|
||||
var srvError;
|
||||
|
||||
server.on('error', function(err) {
|
||||
assert(err);
|
||||
assert(/unexpected/.test(err.message));
|
||||
assert(!srvError);
|
||||
srvError = err;
|
||||
});
|
||||
|
||||
// Removed 'KEXDH_REPLY' listeners as it causes client to send 'NEWKEYS' which
|
||||
// changes server's state.
|
||||
client.removeAllListeners('KEXDH_REPLY');
|
||||
// Removed 'NEWKEYS' listeners as server sends 'NEWKEYS' after receiving
|
||||
// 'KEXDH_INIT' which causes errors on client if 'NEWKEYS' is processed
|
||||
// without processing 'KEXDH_REPLY'
|
||||
client.removeAllListeners('NEWKEYS');
|
||||
// Added 'KEXDH_REPLY' which violates protocol and re-sends 'KEXDH_INIT'
|
||||
// packet
|
||||
client.on('KEXDH_REPLY', function(info) {
|
||||
var state = client._state;
|
||||
var outstate = state.outgoing;
|
||||
var buf = new Buffer(1 + 4 + outstate.pubkey.length);
|
||||
buf[0] = MESSAGE.KEXDH_INIT;
|
||||
buf.writeUInt32BE(outstate.pubkey.length, 1, true);
|
||||
outstate.pubkey.copy(buf, 5);
|
||||
SSH2Stream._send(client, buf, undefined, true);
|
||||
});
|
||||
client.on('error', function(err) {
|
||||
assert(!cliError);
|
||||
assert(err);
|
||||
assert.equal(
|
||||
err.message,
|
||||
'PROTOCOL_ERROR',
|
||||
'Expected Error: PROTOCOL_ERROR Got Error: ' + err.message
|
||||
);
|
||||
cliError = err;
|
||||
});
|
||||
client.pipe(server).pipe(client);
|
||||
|
||||
process.on('exit', function() {
|
||||
assert(cliError, 'Expected client error');
|
||||
//assert(srvError, 'Expected server error');
|
||||
});
|
||||
Reference in New Issue
Block a user