Пример #1
0
        //returns true if a new packet could be obtained
        private SSH1Packet ConstructPacket()
        {
            if (_event != null && !_event.WaitOne(3000))
            {
                throw new Exception("waithandle timed out");
            }

            if (_writeOffset - _readOffset < 4)
            {
                return(null);
            }
            int packet_length  = SSHUtil.ReadInt32(_buffer, _readOffset);
            int padding_length = 8 - (packet_length % 8);             //padding length
            int total          = packet_length + padding_length;

            if (_writeOffset - _readOffset < 4 + total)
            {
                return(null);
            }

            byte[] decrypted = new byte[total];
            if (_cipher != null)
            {
                _cipher.Decrypt(_buffer, _readOffset + 4, total, decrypted, 0);
            }
            else
            {
                Array.Copy(_buffer, _readOffset + 4, decrypted, 0, total);
            }
            _readOffset += 4 + total;

            SSH1Packet p = new SSH1Packet();

            p.ConstructAndCheck(decrypted, packet_length, padding_length, _checkMAC);
            return(p);
        }
Пример #2
0
        //returns true if a new packet could be obtained
        private SSH1Packet ConstructPacket()
        {
            if(_event!=null && !_event.WaitOne(3000))
                throw new Exception("waithandle timed out");

            if(_writeOffset-_readOffset<4) return null;
            int packet_length = SSHUtil.ReadInt32(_buffer, _readOffset);
            int padding_length = 8 - (packet_length % 8); //padding length
            int total = packet_length + padding_length;
            if(_writeOffset-_readOffset<4+total) return null;

            byte[] decrypted = new byte[total];
            if(_cipher!=null)
                _cipher.Decrypt(_buffer, _readOffset+4, total, decrypted, 0);
            else
                Array.Copy(_buffer, _readOffset+4, decrypted, 0, total);
            _readOffset += 4 + total;

            SSH1Packet p = new SSH1Packet();
            p.ConstructAndCheck(decrypted, packet_length, padding_length, _checkMAC);
            return p;
        }