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