# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: dwayne@oscl.ca-20080402173924-3kxw93wi6xp5oubc
# target_branch: http://www.lag.net/paramiko/bzr/paramiko/
# testament_sha1: c60e808d53c1deb2a4ce7e3b7865299446021738
# timestamp: 2008-04-02 11:42:36 -0600
# source_branch: http://www.lag.net/paramiko/bzr/paramiko/
# base_revision_id: robey@lag.net-20080324065154-w8p2lhawmsbynxc0
# 
# Begin patch
=== added file 'paramiko/nullcrypto.py'
--- paramiko/nullcrypto.py	1970-01-01 00:00:00 +0000
+++ paramiko/nullcrypto.py	2008-04-02 17:39:24 +0000
@@ -0,0 +1,63 @@
+#!/usr/bin/python
+# -*- coding: ascii -*-
+# Copyright (C) 2008  Open Systems Canada Limited
+#
+# This file is part of paramiko.
+#
+# Paramiko is free software; you can redistribute it and/or modify it under the
+# terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation; either version 2.1 of the License, or (at your option)
+# any later version.
+#
+# Paramiko is distrubuted in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with Paramiko; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+import warnings
+
+class NullCipher(object):
+    block_size = 16
+    key_size = 16
+
+    @classmethod
+    def new(cls, key, mode, IV):
+        return cls()
+
+    def __init__(self):
+        warnings.warn("Using null cipher.  ONLY FOR DEBUGGING!")
+
+    def encrypt(self, data):
+        return data
+
+    def decrypt(self, data):
+        return data
+
+class NullDigest(object):
+    blocksize = 1
+    digest_size = 4
+
+    @classmethod
+    def new(cls, data=""):
+        return cls()
+
+    def __init__(self):
+        warnings.warn("Using null digest.  ONLY FOR DEBUGGING!")
+
+    def update(self, data):
+        pass
+
+    def digest(self):
+        return "\xAA\xAA\xAA\xAA"
+
+    def hexdigest(self):
+        return "aaaaaaaa"
+
+    def copy(self):
+        return self.__class__.new()
+
+# vim:set ts=4 sw=4 sts=4 expandtab:

=== modified file 'paramiko/transport.py'
--- paramiko/transport.py	2008-03-24 06:51:54 +0000
+++ paramiko/transport.py	2008-04-02 17:39:24 +0000
@@ -38,6 +38,7 @@
 from paramiko.kex_gex import KexGex
 from paramiko.kex_group1 import KexGroup1
 from paramiko.message import Message
+from paramiko.nullcrypto import NullCipher, NullDigest
 from paramiko.packet import Packetizer, NeedRekeyException
 from paramiko.primes import ModulusPack
 from paramiko.rsakey import RSAKey
@@ -207,6 +208,7 @@
         'aes128-cbc': { 'class': AES, 'mode': AES.MODE_CBC, 'block-size': 16, 'key-size': 16 },
         'aes256-cbc': { 'class': AES, 'mode': AES.MODE_CBC, 'block-size': 16, 'key-size': 32 },
         '3des-cbc': { 'class': DES3, 'mode': DES3.MODE_CBC, 'block-size': 8, 'key-size': 24 },
+        #'none@lag.net': { 'class': NullCipher, 'mode': 0, 'block-size': 16, 'key-size': 16 },   # only for debugging!
         }
 
     _mac_info = {
@@ -214,6 +216,7 @@
         'hmac-sha1-96': { 'class': SHA, 'size': 12 },
         'hmac-md5': { 'class': MD5, 'size': 16 },
         'hmac-md5-96': { 'class': MD5, 'size': 12 },
+        #'none@lag.net': { 'class': NullDigest, 'size': 4 },   # only for debugging!
         }
 
     _key_info = {

# Begin bundle
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
