diff options
author | Kent Gibson <warthog618@gmail.com> | 2012-11-04 13:58:04 +0800 |
---|---|---|
committer | Jeff Forcier <jeff@bitprophet.org> | 2013-02-27 18:47:04 -0800 |
commit | adad068b132d0f0c64174b75fb72ee238c289992 (patch) | |
tree | 070589b68ed18473ca590408cd2e82c58936e259 | |
parent | 8e697988af494f4cd499911c9a15ee25d6e2a492 (diff) |
Don't random pad packets for SDCTR ciphers
-rw-r--r-- | paramiko/packet.py | 12 | ||||
-rw-r--r-- | paramiko/transport.py | 3 |
2 files changed, 9 insertions, 6 deletions
diff --git a/paramiko/packet.py b/paramiko/packet.py index 5d918e2a..5972ab29 100644 --- a/paramiko/packet.py +++ b/paramiko/packet.py @@ -87,6 +87,7 @@ class Packetizer (object): self.__mac_size_in = 0 self.__block_engine_out = None self.__block_engine_in = None + self.__sdctr_out = False self.__mac_engine_out = None self.__mac_engine_in = None self.__mac_key_out = '' @@ -110,11 +111,12 @@ class Packetizer (object): """ self.__logger = log - def set_outbound_cipher(self, block_engine, block_size, mac_engine, mac_size, mac_key): + def set_outbound_cipher(self, block_engine, block_size, mac_engine, mac_size, mac_key, sdctr): """ Switch outbound data cipher. """ self.__block_engine_out = block_engine + self.__sdctr_out = sdctr self.__block_size_out = block_size self.__mac_engine_out = mac_engine self.__mac_size_out = mac_size @@ -490,12 +492,12 @@ class Packetizer (object): padding = 3 + bsize - ((len(payload) + 8) % bsize) packet = struct.pack('>IB', len(payload) + padding + 1, padding) packet += payload - if self.__block_engine_out is not None: - packet += rng.read(padding) - else: - # cute trick i caught openssh doing: if we're not encrypting, + if self.__sdctr_out or self.__block_engine_out is None: + # cute trick i caught openssh doing: if we're not encrypting or SDCTR mode (RFC4344), # don't waste random bytes for the padding packet += (chr(0) * padding) + else: + packet += rng.read(padding) return packet def _trigger_rekey(self): diff --git a/paramiko/transport.py b/paramiko/transport.py index c8010312..fd6dab76 100644 --- a/paramiko/transport.py +++ b/paramiko/transport.py @@ -1885,7 +1885,8 @@ class Transport (threading.Thread): mac_key = self._compute_key('F', mac_engine.digest_size) else: mac_key = self._compute_key('E', mac_engine.digest_size) - self.packetizer.set_outbound_cipher(engine, block_size, mac_engine, mac_size, mac_key) + sdctr = self.local_cipher.endswith('-ctr') + self.packetizer.set_outbound_cipher(engine, block_size, mac_engine, mac_size, mac_key, sdctr) compress_out = self._compression_info[self.local_compression][0] if (compress_out is not None) and ((self.local_compression != 'zlib@openssh.com') or self.authenticated): self._log(DEBUG, 'Switching on outbound compression ...') |