rpms/python-twisted-conch/F-11 python-2.6.patch, NONE, 1.1 python-twisted-conch.spec, 1.10, 1.11

Thomas Vander Stichele thomasvs at fedoraproject.org
Fri Jul 17 14:26:24 UTC 2009


Author: thomasvs

Update of /cvs/extras/rpms/python-twisted-conch/F-11
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv9848

Modified Files:
	python-twisted-conch.spec 
Added Files:
	python-2.6.patch 
Log Message:
add patch for python 2.6 deprecation warnings

python-2.6.patch:
 scripts/ckeygen.py     |   46 +++++++++++++++++-------------
 ssh/keys.py            |   18 ++++++------
 ssh/transport.py       |   36 ++++++++++--------------
 test/test_ckeygen.py   |   73 +++++++++++++++++++++++++++++++++++++++++++++++++
 test/test_keys.py      |    7 ++--
 test/test_transport.py |   26 ++++++++---------
 6 files changed, 140 insertions(+), 66 deletions(-)

--- NEW FILE python-2.6.patch ---

--- twisted-conch-8.2.0.orig/twisted/conch/test/test_keys.py

+++ twisted-conch-8.2.0/twisted/conch/test/test_keys.py

@@ -12,10 +12,11 @@

 else:

     from twisted.conch.ssh import keys, common, sexpy, asn1

 

+import os, base64

 from twisted.conch.test import keydata

 from twisted.python import randbytes

+from twisted.python.hashlib import sha1

 from twisted.trial import unittest

-import sha, os, base64

 

 class SSHKeysHandlingTestCase(unittest.TestCase):

     """

@@ -330,7 +331,7 @@

         messageSize = 6

         self.assertEquals(keys.pkcs1Pad(data, messageSize),

                 '\x01\xff\x00ABC')

-        hash = sha.new().digest()

+        hash = sha1().digest()

         messageSize = 40

         self.assertEquals(keys.pkcs1Digest('', messageSize),

                 '\x01\xff\xff\xff\x00' + keys.ID_SHA1 + hash)

@@ -362,7 +363,7 @@

         """

         data = 'data'

         key, sig = self._signDSA(data)

-        sigData = sha.new(data).digest()

+        sigData = sha1(data).digest()

         v = key.sign(sigData, '\x55' * 19)

         self.assertEquals(sig, common.NS('ssh-dss') + common.NS(

             Crypto.Util.number.long_to_bytes(v[0], 20) +

--- twisted-conch-8.2.0.orig/twisted/conch/test/test_transport.py

+++ twisted-conch-8.2.0/twisted/conch/test/test_transport.py

@@ -5,8 +5,6 @@

 Tests for ssh/transport.py and the classes therein.

 """

 

-import md5, sha

-

 try:

     import Crypto.Cipher.DES3

 except ImportError:

@@ -27,6 +25,7 @@

 from twisted.protocols import loopback

 from twisted.python import randbytes

 from twisted.python.reflect import qual

+from twisted.python.hashlib import md5, sha1

 from twisted.conch.ssh import service

 from twisted.test import proto_helpers

 

@@ -856,9 +855,8 @@

         """

         self.proto.sessionID = 'EF'

 

-        k1 = sha.new('AB' + 'CD'

-                     + 'K' + self.proto.sessionID).digest()

-        k2 = sha.new('ABCD' + k1).digest()

+        k1 = sha1('AB' + 'CD' + 'K' + self.proto.sessionID).digest()

+        k2 = sha1('ABCD' + k1).digest()

         self.assertEquals(self.proto._getKey('K', 'AB', 'CD'), k1 + k2)

 

 

@@ -1109,7 +1107,7 @@

         f = common._MPpow(transport.DH_GENERATOR, y, transport.DH_PRIME)

         sharedSecret = common._MPpow(e, y, transport.DH_PRIME)

 

-        h = sha.new()

+        h = sha1()

         h.update(common.NS(self.proto.ourVersionString) * 2)

         h.update(common.NS(self.proto.ourKexInitPayload) * 2)

         h.update(common.NS(self.proto.factory.publicKeys['ssh-rsa'].blob()))

@@ -1190,7 +1188,7 @@

         y = common.getMP('\x00\x00\x00\x80' + '\x99' * 128)[0]

         f = common._MPpow(self.proto.g, y, self.proto.p)

         sharedSecret = common._MPpow(e, y, self.proto.p)

-        h = sha.new()

+        h = sha1()

         h.update(common.NS(self.proto.ourVersionString) * 2)

         h.update(common.NS(self.proto.ourKexInitPayload) * 2)

         h.update(common.NS(self.proto.factory.publicKeys['ssh-rsa'].blob()))

@@ -1221,7 +1219,7 @@

         y = common.getMP('\x00\x00\x00\x80' + '\x99' * 128)[0]

         f = common._MPpow(self.proto.g, y, self.proto.p)

         sharedSecret = common._MPpow(e, y, self.proto.p)

-        h = sha.new()

+        h = sha1()

         h.update(common.NS(self.proto.ourVersionString) * 2)

         h.update(common.NS(self.proto.ourKexInitPayload) * 2)

         h.update(common.NS(self.proto.factory.publicKeys['ssh-rsa'].blob()))

@@ -1360,7 +1358,7 @@

         self.calledVerifyHostKey = True

         self.assertEquals(pubKey, self.blob)

         self.assertEquals(fingerprint.replace(':', ''),

-                          md5.new(pubKey).hexdigest())

+                          md5(pubKey).hexdigest())

         return defer.succeed(True)

 

 

@@ -1427,7 +1425,7 @@

 

         sharedSecret = common._MPpow(transport.DH_GENERATOR,

                                      self.proto.x, transport.DH_PRIME)

-        h = sha.new()

+        h = sha1()

         h.update(common.NS(self.proto.ourVersionString) * 2)

         h.update(common.NS(self.proto.ourKexInitPayload) * 2)

         h.update(common.NS(self.blob))

@@ -1476,7 +1474,7 @@

 

         self.test_KEX_DH_GEX_GROUP()

         sharedSecret = common._MPpow(3, self.proto.x, self.proto.p)

-        h = sha.new()

+        h = sha1()

         h.update(common.NS(self.proto.ourVersionString) * 2)

         h.update(common.NS(self.proto.ourKexInitPayload) * 2)

         h.update(common.NS(self.blob))

@@ -1654,7 +1652,7 @@

                                   Crypto.Cipher.XOR.new('\x36').encrypt(key))

                 self.assertEquals(mod[2],

                                   Crypto.Cipher.XOR.new('\x5c').encrypt(key))

-                self.assertEquals(mod[3], len(mod[0].new().digest()))

+                self.assertEquals(mod[3], len(mod[0]().digest()))

 

 

     def test_setKeysCiphers(self):

@@ -1693,7 +1691,7 @@

             outMac.setKeys('', '', '', '', key, '')

             inMac.setKeys('', '', '', '', '', key)

             if mod:

-                ds = mod.digest_size

+                ds = mod().digest_size

             else:

                 ds = 0

             self.assertEquals(inMac.verifyDigestSize, ds)

@@ -1703,7 +1701,7 @@

             data = key

             packet = '\x00' * 4 + key

             if mod:

-                mac = mod.new(o + mod.new(i + packet).digest()).digest()

+                mac = mod(o + mod(i + packet).digest()).digest()

             else:

                 mac = ''

             self.assertEquals(outMac.makeMAC(seqid, data), mac)

--- twisted-conch-8.2.0.orig/twisted/conch/test/test_ckeygen.py

+++ twisted-conch-8.2.0/twisted/conch/test/test_ckeygen.py

@@ -0,0 +1,73 @@

+# Copyright (c) 2008 Twisted Matrix Laboratories.

+# See LICENSE for details.

+

+"""

+Tests for L{twisted.conch.scripts.ckeygen}.

+"""

+

+import sys

+from StringIO import StringIO

+

+from twisted.python.filepath import FilePath

+from twisted.trial.unittest import TestCase

+from twisted.conch.ssh.keys import Key

+from twisted.conch.scripts.ckeygen import printFingerprint, _saveKey

+from twisted.conch.test.keydata import publicRSA_openssh, privateRSA_openssh

+

+

+

+class KeyGenTests(TestCase):

+    """

+    Tests for various functions used to implement the I{ckeygen} script.

+    """

+    def setUp(self):

+        """

+        Patch C{sys.stdout} with a L{StringIO} instance to tests can make

+        assertions about what's printed.

+        """

+        self.stdout = StringIO()

+        self.patch(sys, 'stdout', self.stdout)

+

+

+    def test_printFingerprint(self):

+        """

+        L{printFingerprint} writes a line to standard out giving the number of

+        bits of the key, its fingerprint, and the basename of the file from it

+        was read.

+        """

+        filename = self.mktemp()

+        FilePath(filename).setContent(publicRSA_openssh)

+        printFingerprint({'filename': filename})

+        self.assertEqual(

+            self.stdout.getvalue(),

+            '768 3d:13:5f:cb:c9:79:8a:93:06:27:65:bc:3d:0b:8f:af temp\n')

+

+

+    def test_saveKey(self):

+        """

+        L{_saveKey} writes the private and public parts of a key to two

+        different files and writes a report of this to standard out.

+        """

+        base = FilePath(self.mktemp())

+        base.makedirs()

+        filename = base.child('id_rsa').path

+        key = Key.fromString(privateRSA_openssh)

+        _saveKey(

+            key.keyObject,

+            {'filename': filename, 'pass': 'passphrase'})

+        self.assertEqual(

+            self.stdout.getvalue(),

+            "Your identification has been saved in %s\n"

+            "Your public key has been saved in %s.pub\n"

+            "The key fingerprint is:\n"

+            "3d:13:5f:cb:c9:79:8a:93:06:27:65:bc:3d:0b:8f:af\n" % (

+                filename,

+                filename))

+        self.assertEqual(

+            key.fromString(

+                base.child('id_rsa').getContent(), None, 'passphrase'),

+            key)

+        self.assertEqual(

+            Key.fromString(base.child('id_rsa.pub').getContent()),

+            key.public())

+

--- twisted-conch-8.2.0.orig/twisted/conch/ssh/transport.py

+++ twisted-conch-8.2.0/twisted/conch/ssh/transport.py

@@ -13,8 +13,6 @@

 

 # base library imports

 import struct

-import md5

-import sha

 import zlib

 import array

 

@@ -26,6 +24,7 @@

 from twisted.internet import protocol, defer

 from twisted.conch import error

 from twisted.python import log, randbytes

+from twisted.python.hashlib import md5, sha1

 

 # sibling imports

 from twisted.conch.ssh import keys

@@ -532,9 +531,9 @@

         @type sharedSecret: C{str}

         @type exchangeHash: C{str}

         """

-        k1 = sha.new(sharedSecret + exchangeHash + c + self.sessionID)

+        k1 = sha1(sharedSecret + exchangeHash + c + self.sessionID)

         k1 = k1.digest()

-        k2 = sha.new(sharedSecret + exchangeHash + k1).digest()

+        k2 = sha1(sharedSecret + exchangeHash + k1).digest()

         return k1 + k2

 

 

@@ -723,7 +722,7 @@

             y = Util.number.getRandomNumber(512, randbytes.secureRandom)

             serverDHpublicKey = _MPpow(DH_GENERATOR, y, DH_PRIME)

             sharedSecret = _MPpow(clientDHpublicKey, y, DH_PRIME)

-            h = sha.new()

+            h = sha1()

             h.update(NS(self.otherVersionString))

             h.update(NS(self.ourVersionString))

             h.update(NS(self.otherKexInitPayload))

@@ -792,7 +791,7 @@

 

         serverDHpublicKey = _MPpow(self.g, y, self.p)

         sharedSecret = _MPpow(clientDHpublicKey, y, self.p)

-        h = sha.new()

+        h = sha1()

         h.update(NS(self.otherVersionString))

         h.update(NS(self.ourVersionString))

         h.update(NS(self.otherKexInitPayload))

@@ -933,7 +932,7 @@

             f, packet = getMP(packet)

             signature, packet = getNS(packet)

             fingerprint = ':'.join([ch.encode('hex') for ch in

-                                    md5.new(pubKey).digest()])

+                                    md5(pubKey).digest()])

             d = self.verifyHostKey(pubKey, fingerprint)

             d.addCallback(self._continueKEXDH_REPLY, pubKey, f, signature)

             d.addErrback(

@@ -962,7 +961,7 @@

         """

         serverKey = keys.Key.fromString(pubKey)

         sharedSecret = _MPpow(f, self.x, DH_PRIME)

-        h = sha.new()

+        h = sha1()

         h.update(NS(self.ourVersionString))

         h.update(NS(self.otherVersionString))

         h.update(NS(self.ourKexInitPayload))

@@ -992,7 +991,7 @@

         f, packet = getMP(packet)

         signature, packet = getNS(packet)

         fingerprint = ':'.join(map(lambda c: '%02x'%ord(c),

-            md5.new(pubKey).digest()))

+            md5(pubKey).digest()))

         d = self.verifyHostKey(pubKey, fingerprint)

         d.addCallback(self._continueGEX_REPLY, pubKey, f, signature)

         d.addErrback(

@@ -1015,7 +1014,7 @@

         """

         serverKey = keys.Key.fromString(pubKey)

         sharedSecret = _MPpow(f, self.x, self.p)

-        h = sha.new()

+        h = sha1()

         h.update(NS(self.ourVersionString))

         h.update(NS(self.otherVersionString))

         h.update(NS(self.ourKexInitPayload))

@@ -1169,9 +1168,9 @@

         'none':(None, 0, 0),

     }

     macMap = {

-        'hmac-sha1': sha,

+        'hmac-sha1': sha1,

         'hmac-md5': md5,

-        'none':None

+        'none': None

      }

 

 

@@ -1243,10 +1242,7 @@

         mod = self.macMap[mac]

         if not mod:

             return (None, '', '', 0)

-        #if not hasattr(mod, 'digest_size'):

-        #     ds = len(mod.new().digest())

-        #else:

-        ds = mod.digest_size

+        ds = mod().digest_size

         key = key[:ds] + '\x00' * (64 - ds)

         i = XOR.new('\x36').encrypt(key)

         o = XOR.new('\x5c').encrypt(key)

@@ -1287,8 +1283,8 @@

             return ''

         data = struct.pack('>L', seqid) + data

         mod, i, o, ds = self.outMAC

-        inner = mod.new(i + data)

-        outer = mod.new(o + inner.digest())

+        inner = mod(i + data)

+        outer = mod(o + inner.digest())

         return outer.digest()

 

 

@@ -1309,8 +1305,8 @@

             return mac == ''

         data = struct.pack('>L', seqid) + data

         mod, i, o, ds = self.inMAC

-        inner = mod.new(i + data)

-        outer = mod.new(o + inner.digest())

+        inner = mod(i + data)

+        outer = mod(o + inner.digest())

         return mac == outer.digest()

 

 

--- twisted-conch-8.2.0.orig/twisted/conch/ssh/keys.py

+++ twisted-conch-8.2.0/twisted/conch/ssh/keys.py

@@ -10,7 +10,6 @@

 

 # base library imports

 import base64

-import sha, md5

 import warnings

 

 # external library imports

@@ -20,6 +19,7 @@

 

 # twisted

 from twisted.python import randbytes

+from twisted.python.hashlib import md5, sha1

 

 # sibling imports

 from twisted.conch.ssh import asn1, common, sexpy

@@ -205,8 +205,8 @@

                 len(ivdata), 2)])

             if not passphrase:

                 raise EncryptedKeyError('encrypted key with no passphrase')

-            ba = md5.new(passphrase + iv).digest()

-            bb = md5.new(ba + passphrase + iv).digest()

+            ba = md5(passphrase + iv).digest()

+            bb = md5(ba + passphrase + iv).digest()

             decKey = (ba + bb)[:24]

             b64Data = base64.decodestring(''.join(lines[3:-1]))

             keyData = DES3.new(decKey, DES3.MODE_CBC, iv).decrypt(b64Data)

@@ -443,7 +443,7 @@

 

         @rtype: L{str}

         """

-        return ':'.join([x.encode('hex') for x in md5.md5(self.blob()).digest()])

+        return ':'.join([x.encode('hex') for x in md5(self.blob()).digest()])

 

 

     def type(self):

@@ -597,8 +597,8 @@

                 hexiv = ''.join(['%02X' % ord(x) for x in iv])

                 lines.append('Proc-Type: 4,ENCRYPTED')

                 lines.append('DEK-Info: DES-EDE3-CBC,%s\n' % hexiv)

-                ba = md5.new(extra + iv).digest()

-                bb = md5.new(ba + extra + iv).digest()

+                ba = md5(extra + iv).digest()

+                bb = md5(ba + extra + iv).digest()

                 encKey = (ba + bb)[:24]

             asn1Data = asn1.pack([objData])

             if extra:

@@ -681,7 +681,7 @@

             signature = self.keyObject.sign(digest, '')[0]

             ret = common.NS(Util.number.long_to_bytes(signature))

         elif self.type() == 'DSA':

-            digest = sha.new(data).digest()

+            digest = sha1(data).digest()

             randomBytes = randbytes.secureRandom(19)

             sig = self.keyObject.sign(digest, randomBytes)

             # SSH insists that the DSS signature blob be two 160-bit integers

@@ -710,7 +710,7 @@

             signature = common.getNS(signature)[0]

             numbers = [Util.number.bytes_to_long(n) for n in signature[:20],

                     signature[20:]]

-            digest = sha.new(data).digest()

+            digest = sha1(data).digest()

         return self.keyObject.verify(digest, numbers)

 

 def getPublicKeyString(filename=None, line=0, data=''):

@@ -863,7 +863,7 @@

     @type data: C{str}

     @type messageLength: C{str}

     """

-    digest = sha.new(data).digest()

+    digest = sha1(data).digest()

     return pkcs1Pad(ID_SHA1+digest, messageLength)

 

 def lenSig(obj):

--- twisted-conch-8.2.0.orig/twisted/conch/scripts/ckeygen.py

+++ twisted-conch-8.2.0/twisted/conch/scripts/ckeygen.py

@@ -1,16 +1,12 @@

-# Copyright (c) 2001-2007 Twisted Matrix Laboratories.

+# -*- test-case-name: twisted.conch.test.test_ckeygen -*-

+# Copyright (c) 2001-2008 Twisted Matrix Laboratories.

 # See LICENSE for details.

 

-#

-# $Id: ckeygen.py,v 1.8 2003/05/10 14:03:40 spiv Exp $

+"""

+Implementation module for the `ckeygen` command.

+"""

 

-#""" Implementation module for the `ckeygen` command.

-#"""

-

-from twisted.conch.ssh import keys

-from twisted.python import log, usage, randbytes

-

-import sys, os, getpass, md5, socket

+import sys, os, getpass, socket

 if getpass.getpass == getpass.unix_getpass:

     try:

         import termios # hack around broken termios

@@ -19,6 +15,10 @@

         sys.modules['termios'] = None

         reload(getpass)

 

+from twisted.conch.ssh import keys

+from twisted.python import filepath, log, usage, randbytes

+

+

 class GeneralOptions(usage.Options):

     synopsis = """Usage:    ckeygen [options]

  """

@@ -88,6 +88,7 @@

     key = DSA.generate(int(options['bits']), randbytes.secureRandom)

     _saveKey(key, options)

 

+

 def printFingerprint(options):

     if not options['filename']:

         filename = os.path.expanduser('~/.ssh/id_rsa')

@@ -95,11 +96,12 @@

     if os.path.exists(options['filename']+'.pub'):

         options['filename'] += '.pub'

     try:

-        string = keys.getPublicKeyString(options['filename'])

-        obj = keys.getPublicKeyObject(string)

+        key = keys.Key.fromFile(options['filename'])

+        obj = key.keyObject

+        string = key.blob()

         print '%s %s %s' % (

-            obj.size()+1,

-            ':'.join(['%02x' % ord(x) for x in md5.new(string).digest()]),

+            obj.size() + 1,

+            key.fingerprint(),

             os.path.basename(options['filename']))

     except:

         sys.exit('bad key')

@@ -163,17 +165,21 @@

                 break

             print 'Passphrases do not match.  Try again.'

         options['pass'] = p1

+

+    keyObj = keys.Key(key)

     comment = '%s@%s' % (getpass.getuser(), socket.gethostname())

-    open(options['filename'], 'w').write(

-            keys.makePrivateKeyString(key, passphrase=options['pass']))

+

+    filepath.FilePath(options['filename']).setContent(

+        keyObj.toString('openssh', options['pass']))

     os.chmod(options['filename'], 33152)

-    open(options['filename']+'.pub', 'w').write(

-            keys.makePublicKeyString(key, comment = comment))

-    pubKey = keys.getPublicKeyString(data=keys.makePublicKeyString(key, comment=comment))

+

+    filepath.FilePath(options['filename'] + '.pub').setContent(

+        keyObj.public().toString('openssh', comment))

+

     print 'Your identification has been saved in %s' % options['filename']

     print 'Your public key has been saved in %s.pub' % options['filename']

     print 'The key fingerprint is:'

-    print ':'.join(['%02x' % ord(x) for x in md5.new(pubKey).digest()])

+    print keyObj.fingerprint()

 

 if __name__ == '__main__':

     run()


Index: python-twisted-conch.spec
===================================================================
RCS file: /cvs/extras/rpms/python-twisted-conch/F-11/python-twisted-conch.spec,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -p -r1.10 -r1.11
--- python-twisted-conch.spec	26 Feb 2009 23:54:30 -0000	1.10
+++ python-twisted-conch.spec	17 Jul 2009 14:25:54 -0000	1.11
@@ -3,12 +3,13 @@
 
 Name:           %{python}-twisted-conch
 Version:        8.2.0
-Release:        2%{?dist}
+Release:        3%{?dist}
 Summary:        SSH and SFTP protocol implementation together with clients and servers
 Group:          Development/Libraries
 License:        MIT
 URL:            http://twistedmatrix.com/trac/wiki/TwistedConch
 Source0:        http://tmrc.mit.edu/mirror/twisted/Conch/8.1/TwistedConch-%{version}.tar.bz2
+Patch1:         python-2.6.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 BuildRequires:  %{python}-twisted-core >= 8.2.0
 BuildRequires:  %{python}-devel
@@ -34,6 +35,7 @@ server-side input history and interactiv
 
 %prep
 %setup -q -n TwistedConch-%{version}
+%patch1 -p1
 
 # Fix doc file dependencies
 chmod -x doc/{benchmarks/buffering_mixin.py,examples/sshsimpleserver.py}
@@ -88,6 +90,11 @@ fi
 %{python_sitearch}/twisted/plugins/twisted_conch.py*
 
 %changelog
+* Fri Jul 17 2009 Thomas Vander Stichele <thomas at apestaart dot org>
+- 8.2.0-3
+- Patch to fix python 2.6 deprecation warnings extracted from
+  http://packages.debian.org/squeeze/python-twisted-conch
+
 * Thu Feb 26 2009 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 8.2.0-2
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
 




More information about the fedora-extras-commits mailing list