123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- var SSH2Stream = require('../lib/ssh');
- var parseKey = require('../lib/utils').parseKey;
- var MESSAGE = require('../lib/constants').MESSAGE;
- var assert = require('assert');
- var fs = require('fs');
- var SERVER_KEY = fs.readFileSync(__dirname + '/fixtures/openssh_new_rsa');
- var SERVER_KEY_PRV = parseKey(SERVER_KEY);
- var server = new SSH2Stream({
- server: true,
- hostKeys: {
- 'ssh-rsa': SERVER_KEY_PRV
- },
- algorithms: {
- serverHostKey: ['ssh-rsa']
- }
- });
- 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 = Buffer.allocUnsafe(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');
- });
|