| Index: third_party/twisted_8_1/twisted/conch/test/test_keys.py
|
| diff --git a/third_party/twisted_8_1/twisted/conch/test/test_keys.py b/third_party/twisted_8_1/twisted/conch/test/test_keys.py
|
| deleted file mode 100644
|
| index 5431af44eb39ce0c9d1840bdfec7e815dcc180a3..0000000000000000000000000000000000000000
|
| --- a/third_party/twisted_8_1/twisted/conch/test/test_keys.py
|
| +++ /dev/null
|
| @@ -1,846 +0,0 @@
|
| -# -*- test-case-name: twisted.conch.test.test_keys -*-
|
| -# Copyright (c) 2001-2008 Twisted Matrix Laboratories.
|
| -# See LICENSE for details.
|
| -
|
| -try:
|
| - import Crypto
|
| -except ImportError:
|
| - Crypto = None
|
| -else:
|
| - from twisted.conch.ssh import keys, common, sexpy, asn1
|
| -
|
| -from twisted.conch.test import keydata
|
| -from twisted.python import randbytes
|
| -from twisted.trial import unittest
|
| -import sha, os, base64
|
| -
|
| -class SSHKeysHandlingTestCase(unittest.TestCase):
|
| - """
|
| - test the handling of reading/signing/verifying with RSA and DSA keys
|
| - assumed test keys are in test/
|
| - """
|
| -
|
| - if not Crypto:
|
| - skip = "cannot run w/o PyCrypto"
|
| -
|
| - def setUp(self):
|
| - self.tmpdir = self.mktemp()
|
| - os.mkdir(self.tmpdir)
|
| - self.privateKeyFile = os.path.join(self.tmpdir, 'private')
|
| - self.publicKeyFile = os.path.join(self.tmpdir, 'public')
|
| - file(self.privateKeyFile, 'wb').write(keydata.privateRSA_openssh)
|
| - file(self.publicKeyFile, 'wb').write('first line\n' +
|
| - keydata.publicRSA_openssh)
|
| -
|
| - def test_readFile(self):
|
| - """
|
| - Test that reading a key from a file works as expected.
|
| - """
|
| - self.assertEquals(self.assertWarns(DeprecationWarning,
|
| - "getPublicKeyString is deprecated since Twisted Conch 0.9. "
|
| - "Use Key.fromString().", unittest.__file__,
|
| - keys.getPublicKeyString, self.publicKeyFile, 1),
|
| - keys.Key.fromString(keydata.publicRSA_openssh).blob())
|
| - self.assertEquals(self.assertWarns(DeprecationWarning,
|
| - "getPrivateKeyObject is deprecated since Twisted Conch 0.9. "
|
| - "Use Key.fromString().", unittest.__file__,
|
| - keys.getPrivateKeyObject, self.privateKeyFile),
|
| - keys.Key.fromString(keydata.privateRSA_openssh).keyObject)
|
| -
|
| - def test_DSA(self):
|
| - """
|
| - Test DSA keys using both OpenSSH and LSH formats.
|
| - """
|
| - self._testKey(keydata.publicDSA_openssh, keydata.privateDSA_openssh,
|
| - keydata.DSAData, 'openssh')
|
| - self._testKey(keydata.publicDSA_lsh, keydata.privateDSA_lsh,
|
| - keydata.DSAData,'lsh')
|
| - obj = self.assertWarns(DeprecationWarning, "getPrivateKeyObject is "
|
| - "deprecated since Twisted Conch 0.9. Use Key.fromString().",
|
| - unittest.__file__, keys.getPrivateKeyObject,
|
| - data=keydata.privateDSA_agentv3)
|
| - self._testGeneratePrivateKey(obj, keydata.privateDSA_agentv3,
|
| - 'agentv3')
|
| -
|
| - def test_RSA(self):
|
| - """
|
| - Same as test_DSA but for RSA keys.
|
| - """
|
| - self._testKey(keydata.publicRSA_openssh, keydata.privateRSA_openssh,
|
| - keydata.RSAData, 'openssh')
|
| - self._testKey(keydata.publicRSA_lsh, keydata.privateRSA_lsh,
|
| - keydata.RSAData, 'lsh')
|
| - obj = self.assertWarns(DeprecationWarning, "getPrivateKeyObject is "
|
| - "deprecated since Twisted Conch 0.9. Use Key.fromString().",
|
| - unittest.__file__, keys.getPrivateKeyObject,
|
| - data=keydata.privateRSA_agentv3)
|
| - self._testGeneratePrivateKey(obj, keydata.privateRSA_agentv3,
|
| - 'agentv3')
|
| -
|
| - def _testKey(self, pubStr, privStr, data, keyType):
|
| - """
|
| - Run each of the key tests with the public/private keypairs.
|
| -
|
| - @param pubStr: The data for a public key in the format defined by
|
| - keyType.
|
| - @param privStr: The data for a private key in the format defined by
|
| - keyType.
|
| - @param data: The numerical values encoded in the key.
|
| - @param keyType: the type of the public and private key data: either
|
| - "openssh" or "lsh".
|
| - """
|
| - pubBlob = self.assertWarns(DeprecationWarning, "getPublicKeyString is "
|
| - "deprecated since Twisted Conch 0.9. Use Key.fromString().",
|
| - unittest.__file__, keys.getPublicKeyString, data=pubStr)
|
| - pubObj = self.assertWarns(DeprecationWarning, "getPublicKeyObject is "
|
| - "deprecated since Twisted Conch 0.9. Use Key.fromString().",
|
| - unittest.__file__, keys.getPublicKeyObject, pubBlob)
|
| - privObj = self.assertWarns(DeprecationWarning, "getPrivateKeyObject is "
|
| - "deprecated since Twisted Conch 0.9. Use Key.fromString().",
|
| - unittest.__file__, keys.getPrivateKeyObject, data=privStr)
|
| -
|
| - self._testKeySignVerify(privObj, pubObj)
|
| - self._testKeyFromString(privObj, pubObj, data, keyType)
|
| - self._testGeneratePublicKey(privObj, pubObj, pubStr, keyType)
|
| - self._testGeneratePrivateKey(privObj, privStr, keyType)
|
| - self._testGenerateBlob(privObj, pubObj, pubBlob)
|
| -
|
| - def _testKeySignVerify(self, privObj, pubObj):
|
| - """
|
| - Test that signing and verifying works correctly.
|
| - @param privObj: a private key object.
|
| - @type privObj: C{Crypto.PublicKey.pubkey.pubkey}
|
| - @param pubObj: a public key object.
|
| - @type pubObj: C{Crypto.PublicKey.pubkey.pubkey}
|
| - """
|
| -
|
| - testData = 'this is the test data'
|
| - sig = self.assertWarns(DeprecationWarning,
|
| - "signData is deprecated since Twisted Conch 0.9. "
|
| - "Use Key(obj).sign(data).", unittest.__file__, keys.signData,
|
| - privObj, testData)
|
| - self.assertTrue(self.assertWarns(DeprecationWarning,
|
| - "verifySignature is deprecated since Twisted Conch 0.9. "
|
| - "Use Key(obj).verify(signature, data).", unittest.__file__,
|
| - keys.verifySignature, privObj, sig, testData),
|
| - 'verifying with private %s failed' %
|
| - keys.objectType(privObj))
|
| -
|
| - self.assertTrue(self.assertWarns(DeprecationWarning,
|
| - "verifySignature is deprecated since Twisted Conch 0.9. "
|
| - "Use Key(obj).verify(signature, data).", unittest.__file__,
|
| - keys.verifySignature, pubObj, sig, testData),
|
| - 'verifying with public %s failed' %
|
| - keys.objectType(pubObj))
|
| -
|
| - self.failIf(self.assertWarns(DeprecationWarning,
|
| - "verifySignature is deprecated since Twisted Conch 0.9. "
|
| - "Use Key(obj).verify(signature, data).", unittest.__file__,
|
| - keys.verifySignature,privObj, sig, 'other data'),
|
| - 'verified bad data with %s' %
|
| - keys.objectType(privObj))
|
| -
|
| - self.failIf(self.assertWarns(DeprecationWarning,
|
| - "verifySignature is deprecated since Twisted Conch 0.9. "
|
| - "Use Key(obj).verify(signature, data).", unittest.__file__,
|
| - keys.verifySignature, privObj, 'bad sig', testData),
|
| - 'verified badsign with %s' %
|
| - keys.objectType(privObj))
|
| -
|
| - def _testKeyFromString(self, privObj, pubObj, data, keyType):
|
| - """
|
| - Test key object generation from a string. The public key objects
|
| - were generated in _testKey; just check that they were created
|
| - correctly.
|
| - """
|
| - for k in data.keys():
|
| - self.assertEquals(getattr(privObj, k), data[k])
|
| - for k in pubObj.keydata:
|
| - if hasattr(pubObj, k): # public key objects don't have all the
|
| - # attributes
|
| - self.assertEquals(getattr(pubObj, k), data[k])
|
| -
|
| - def _testGeneratePublicKey(self, privObj, pubObj, pubStr, keyType):
|
| - """
|
| - Test public key string generation from an object.
|
| - """
|
| - self.assertEquals(self.assertWarns(DeprecationWarning,
|
| - "makePublicKeyString is deprecated since Twisted Conch 0.9. "
|
| - "Use Key(obj).toString().", unittest.__file__,
|
| - keys.makePublicKeyString, pubObj, 'comment',
|
| - keyType), pubStr)
|
| - self.assertEquals(self.assertWarns(DeprecationWarning,
|
| - "makePublicKeyString is deprecated since Twisted Conch 0.9. "
|
| - "Use Key(obj).toString().", unittest.__file__,
|
| - keys.makePublicKeyString, privObj, 'comment',
|
| - keyType), pubStr)
|
| -
|
| - def _testGeneratePrivateKey(self, privObj, privStr, keyType):
|
| - """
|
| - Test private key string generation from an object.
|
| - """
|
| - self.assertEquals(self.assertWarns(DeprecationWarning,
|
| - "makePrivateKeyString is deprecated since Twisted Conch 0.9. "
|
| - "Use Key(obj).toString().", unittest.__file__,
|
| - keys.makePrivateKeyString, privObj, kind=keyType),
|
| - privStr)
|
| - if keyType == 'openssh':
|
| - encData = self.assertWarns(DeprecationWarning,
|
| - "makePrivateKeyString is deprecated since Twisted Conch "
|
| - "0.9. Use Key(obj).toString().", unittest.__file__,
|
| - keys.makePrivateKeyString, privObj, passphrase='test',
|
| - kind=keyType)
|
| - self.assertEquals(self.assertWarns(DeprecationWarning,
|
| - "getPrivateKeyObject is deprecated since Twisted Conch 0.9. "
|
| - "Use Key.fromString().", unittest.__file__,
|
| - keys.getPrivateKeyObject, data = encData, passphrase='test'),
|
| - privObj)
|
| -
|
| - def _testGenerateBlob(self, privObj, pubObj, pubBlob):
|
| - """
|
| - Test wire-format blob generation.
|
| - """
|
| - self.assertEquals(self.assertWarns(DeprecationWarning,
|
| - "makePublicKeyBlob is deprecated since Twisted Conch 0.9. "
|
| - "Use Key(obj).blob().", unittest.__file__,
|
| - keys.makePublicKeyBlob, pubObj), pubBlob)
|
| - self.assertEquals(self.assertWarns(DeprecationWarning,
|
| - "makePublicKeyBlob is deprecated since Twisted Conch 0.9. "
|
| - "Use Key(obj).blob().", unittest.__file__,
|
| - keys.makePublicKeyBlob, privObj), pubBlob)
|
| -
|
| - def test_getPublicKeyStringErrors(self):
|
| - """
|
| - Test that getPublicKeyString raises errors in appropriate cases.
|
| - """
|
| - self.assertWarns(DeprecationWarning, "getPublicKeyString is deprecated"
|
| - " since Twisted Conch 0.9. Use Key.fromString().",
|
| - unittest.__file__, self.assertRaises, keys.BadKeyError,
|
| - keys.getPublicKeyString, self.publicKeyFile, 1,
|
| - data=keydata.publicRSA_openssh)
|
| - self.assertWarns(DeprecationWarning, "getPublicKeyString is deprecated"
|
| - " since Twisted Conch 0.9. Use Key.fromString().",
|
| - unittest.__file__, self.assertRaises, keys.BadKeyError,
|
| - keys.getPublicKeyString, data = 'invalid key')
|
| - sexp = sexpy.pack([['public-key', ['bad-key', ['p', '2']]]])
|
| - self.assertWarns(DeprecationWarning, "getPublicKeyString is deprecated"
|
| - " since Twisted Conch 0.9. Use Key.fromString().",
|
| - unittest.__file__, self.assertRaises, keys.BadKeyError,
|
| - keys.getPublicKeyString, data='{'+base64.encodestring(sexp)+'}')
|
| -
|
| - def test_getPrivateKeyObjectErrors(self):
|
| - """
|
| - Test that getPrivateKeyObject raises errors in appropriate cases.
|
| - """
|
| - self.assertWarns(DeprecationWarning, "getPrivateKeyObject is deprecated"
|
| - " since Twisted Conch 0.9. Use Key.fromString().",
|
| - unittest.__file__, self.assertRaises, keys.BadKeyError,
|
| - keys.getPrivateKeyObject, self.privateKeyFile,
|
| - keydata.privateRSA_openssh)
|
| - self.assertWarns(DeprecationWarning, "getPrivateKeyObject is deprecated"
|
| - " since Twisted Conch 0.9. Use Key.fromString().",
|
| - unittest.__file__, self.assertRaises, keys.BadKeyError,
|
| - keys.getPrivateKeyObject, data = 'invalid key')
|
| - sexp = sexpy.pack([['private-key', ['bad-key', ['p', '2']]]])
|
| - self.assertWarns(DeprecationWarning, "getPrivateKeyObject is deprecated"
|
| - " since Twisted Conch 0.9. Use Key.fromString().",
|
| - unittest.__file__, self.assertRaises, keys.BadKeyError,
|
| - keys.getPrivateKeyObject, data=sexp)
|
| - self.assertWarns(DeprecationWarning, "getPrivateKeyObject is deprecated"
|
| - " since Twisted Conch 0.9. Use Key.fromString().",
|
| - unittest.__file__, self.assertRaises, keys.BadKeyError,
|
| - keys.getPrivateKeyObject,
|
| - data='\x00\x00\x00\x07ssh-foo'+'\x00\x00\x00\x01\x01'*5)
|
| -
|
| - def test_makePublicKeyStringErrors(self):
|
| - """
|
| - Test that makePublicKeyString raises errors in appropriate cases.
|
| - """
|
| - self.assertWarns(DeprecationWarning, "makePublicKeyString is deprecated"
|
| - " since Twisted Conch 0.9. Use Key(obj).toString().",
|
| - unittest.__file__, self.assertRaises, Exception,
|
| - keys.makePublicKeyString, None, kind='bad type')
|
| - self.assertWarns(DeprecationWarning, "makePublicKeyString is deprecated"
|
| - " since Twisted Conch 0.9. Use Key(obj).toString().",
|
| - unittest.__file__, self.assertRaises, Exception,
|
| - keys.makePublicKeyString, None)
|
| - self.assertWarns(DeprecationWarning, "makePublicKeyString is deprecated"
|
| - " since Twisted Conch 0.9. Use Key(obj).toString().",
|
| - unittest.__file__, self.assertRaises, Exception,
|
| - keys.makePublicKeyString, None, kind='lsh')
|
| -
|
| - def test_getPublicKeyObjectErrors(self):
|
| - """
|
| - Test that getPublicKeyObject raises errors in appropriate cases.
|
| - """
|
| - self.assertWarns(DeprecationWarning, "getPublicKeyObject is deprecated"
|
| - " since Twisted Conch 0.9. Use Key.fromString().",
|
| - unittest.__file__, self.assertRaises, keys.BadKeyError,
|
| - keys.getPublicKeyObject, '\x00\x00\x00\x01A')
|
| -
|
| - def test_makePrivateKeyStringErrors(self):
|
| - """
|
| - Test that makePrivateKeyString raises errors in appropriate cases.
|
| - """
|
| - self.assertWarns(DeprecationWarning, "makePrivateKeyString is "
|
| - "deprecated since Twisted Conch 0.9. Use Key(obj).toString().",
|
| - unittest.__file__, self.assertRaises, Exception,
|
| - keys.makePrivateKeyString, None, kind='bad type')
|
| - self.assertWarns(DeprecationWarning, "makePrivateKeyString is "
|
| - "deprecated since Twisted Conch 0.9. Use Key(obj).toString().",
|
| - unittest.__file__, self.assertRaises, Exception,
|
| - keys.makePrivateKeyString, None)
|
| - self.assertWarns(DeprecationWarning, "makePrivateKeyString is "
|
| - "deprecated since Twisted Conch 0.9. Use Key(obj).toString().",
|
| - unittest.__file__, self.assertRaises, Exception,
|
| - keys.makePrivateKeyString, None, kind='lsh')
|
| -
|
| -class HelpersTestCase(unittest.TestCase):
|
| -
|
| - if not Crypto:
|
| - skip = "cannot run w/o PyCrypto"
|
| -
|
| - def setUp(self):
|
| - self._secureRandom = randbytes.secureRandom
|
| - randbytes.secureRandom = lambda x: '\x55' * x
|
| -
|
| - def tearDown(self):
|
| - randbytes.secureRandom = self._secureRandom
|
| - self._secureRandom = None
|
| -
|
| - def test_pkcs1(self):
|
| - """
|
| - Test Public Key Cryptographic Standard #1 functions.
|
| - """
|
| - data = 'ABC'
|
| - messageSize = 6
|
| - self.assertEquals(keys.pkcs1Pad(data, messageSize),
|
| - '\x01\xff\x00ABC')
|
| - hash = sha.new().digest()
|
| - messageSize = 40
|
| - self.assertEquals(keys.pkcs1Digest('', messageSize),
|
| - '\x01\xff\xff\xff\x00' + keys.ID_SHA1 + hash)
|
| -
|
| - def _signRSA(self, data):
|
| - key = keys.Key.fromString(keydata.privateRSA_openssh)
|
| - sig = key.sign(data)
|
| - return key.keyObject, sig
|
| -
|
| - def _signDSA(self, data):
|
| - key = keys.Key.fromString(keydata.privateDSA_openssh)
|
| - sig = key.sign(data)
|
| - return key.keyObject, sig
|
| -
|
| - def test_signRSA(self):
|
| - """
|
| - Test that RSA keys return appropriate signatures.
|
| - """
|
| - data = 'data'
|
| - key, sig = self._signRSA(data)
|
| - sigData = keys.pkcs1Digest(data, keys.lenSig(key))
|
| - v = key.sign(sigData, '')[0]
|
| - self.assertEquals(sig, common.NS('ssh-rsa') + common.MP(v))
|
| - return key, sig
|
| -
|
| - def test_signDSA(self):
|
| - """
|
| - Test that DSA keys return appropriate signatures.
|
| - """
|
| - data = 'data'
|
| - key, sig = self._signDSA(data)
|
| - sigData = sha.new(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) +
|
| - Crypto.Util.number.long_to_bytes(v[1], 20)))
|
| - return key, sig
|
| -
|
| - def test_verifyRSA(self):
|
| - """
|
| - Test that RSA signatures are verified appropriately.
|
| - """
|
| - data = 'data'
|
| - key, sig = self._signRSA(data)
|
| - self.assertTrue(self.assertWarns(DeprecationWarning, "verifySignature "
|
| - "is deprecated since Twisted Conch 0.9. Use "
|
| - "Key(obj).verify(signature, data).", unittest.__file__,
|
| - keys.verifySignature, key, sig, data))
|
| -
|
| - def test_verifyDSA(self):
|
| - """
|
| - Test that RSA signatures are verified appropriately.
|
| - """
|
| - data = 'data'
|
| - key, sig = self._signDSA(data)
|
| - self.assertTrue(self.assertWarns(DeprecationWarning, "verifySignature "
|
| - "is deprecated since Twisted Conch 0.9. Use "
|
| - "Key(obj).verify(signature, data).", unittest.__file__,
|
| - keys.verifySignature, key, sig, data))
|
| -
|
| - def test_objectType(self):
|
| - """
|
| - Test that objectType, returns the correct type for objects.
|
| - """
|
| - self.assertEquals(keys.objectType(keys.Key.fromString(
|
| - keydata.privateRSA_openssh).keyObject), 'ssh-rsa')
|
| - self.assertEquals(keys.objectType(keys.Key.fromString(
|
| - keydata.privateDSA_openssh).keyObject), 'ssh-dss')
|
| - self.assertRaises(keys.BadKeyError, keys.objectType, None)
|
| -
|
| - def test_asn1PackError(self):
|
| - """
|
| - L{asn1.pack} should raise a C{ValueError} when given a type not
|
| - handled.
|
| - """
|
| - self.assertRaises(ValueError, asn1.pack, [object()])
|
| -
|
| - def test_printKey(self):
|
| - """
|
| - Test that the printKey function prints correctly.
|
| - """
|
| - obj = keys.Key.fromString(keydata.privateRSA_openssh).keyObject
|
| - self.assertEquals(self.assertWarns(DeprecationWarning, "printKey is "
|
| - "deprecated since Twisted Conch 0.9. Use repr(Key(obj)).",
|
| - unittest.__file__, keys.printKey, obj),
|
| - """RSA Private Key (767 bits)
|
| -attr e:
|
| -\t23
|
| -attr d:
|
| -\t6e:1f:b5:55:97:eb:ed:67:ed:2b:99:6e:ec:c1:ed:
|
| -\ta8:4d:52:d6:f3:d6:65:06:04:df:e5:54:9f:cc:89:
|
| -\t00:3c:9b:67:87:ec:65:a0:ab:cd:6f:65:90:8a:97:
|
| -\t90:4d:c6:21:8f:a8:8d:d8:59:86:43:b5:81:b1:b4:
|
| -\td7:5f:2c:22:0a:61:c1:25:8a:47:12:b4:9a:f8:7a:
|
| -\t11:1c:4a:a8:8b:75:c4:91:09:3b:be:04:ca:45:d9:
|
| -\t57:8a:0d:27:cb:23
|
| -attr n:
|
| -\t00:af:32:71:f0:e6:0e:9c:99:b3:7f:8b:5f:04:4b:
|
| -\tcb:8b:c0:d5:3e:b2:77:fd:cf:64:d8:8f:c0:cf:ae:
|
| -\t1f:c6:31:df:f6:29:b2:44:96:e2:c6:d4:21:94:7f:
|
| -\t65:7c:d8:d4:23:1f:b8:2e:6a:c9:1f:94:0d:46:c1:
|
| -\t69:a2:b7:07:0c:a3:93:c1:34:d8:2e:1e:4a:99:1a:
|
| -\t6c:96:46:07:46:2b:dc:25:29:1b:87:f0:be:05:1d:
|
| -\tee:b4:34:b9:e7:99:95
|
| -attr q:
|
| -\t00:dc:9f:6b:d9:98:21:56:11:8d:e9:5f:03:9d:0a:
|
| -\td3:93:6e:13:77:41:3c:85:4f:00:70:fd:05:54:ff:
|
| -\tbc:3d:09:bf:83:f6:97:7f:64:10:91:04:fe:a2:67:
|
| -\t47:54:42:6b
|
| -attr p:
|
| -\t00:cb:4a:4b:d0:40:47:e8:45:52:f7:c7:af:0c:20:
|
| -\t6d:43:0d:b6:39:94:f9:da:a5:e5:03:06:76:83:24:
|
| -\teb:88:a1:55:a2:a8:de:12:3b:77:49:92:8a:a9:71:
|
| -\td2:02:93:ff
|
| -attr u:
|
| -\t00:b4:73:97:4b:50:10:a3:17:b3:a8:47:f1:3a:14:
|
| -\t76:52:d1:38:2a:cf:12:14:34:c1:a8:54:4c:29:35:
|
| -\t80:a0:38:b8:f0:fa:4c:c4:c2:85:ab:db:87:82:ba:
|
| -\tdc:eb:db:2a""")
|
| -
|
| -class KeyTestCase(unittest.TestCase):
|
| -
|
| - def setUp(self):
|
| - self.rsaObj = Crypto.PublicKey.RSA.construct((1L, 2L, 3L, 4L, 5L))
|
| - self.dsaObj = Crypto.PublicKey.DSA.construct((1L, 2L, 3L, 4L, 5L))
|
| - self.rsaSignature = ('\x00\x00\x00\x07ssh-rsa\x00'
|
| - '\x00\x00`N\xac\xb4@qK\xa0(\xc3\xf2h \xd3\xdd\xee6Np\x9d_'
|
| - '\xb0>\xe3\x0c(L\x9d{\txUd|!\xf6m\x9c\xd3\x93\x842\x7fU'
|
| - '\x05\xf4\xf7\xfaD\xda\xce\x81\x8ea\x7f=Y\xed*\xb7\xba\x81'
|
| - '\xf2\xad\xda\xeb(\x97\x03S\x08\x81\xc7\xb1\xb7\xe6\xe3'
|
| - '\xcd*\xd4\xbd\xc0wt\xf7y\xcd\xf0\xb7\x7f\xfb\x1e>\xf9r'
|
| - '\x8c\xba')
|
| - self.dsaSignature = ('\x00\x00\x00\x07ssh-dss\x00\x00'
|
| - '\x00(\x18z)H\x8a\x1b\xc6\r\xbbq\xa2\xd7f\x7f$\xa7\xbf'
|
| - '\xe8\x87\x8c\x88\xef\xd9k\x1a\x98\xdd{=\xdec\x18\t\xe3'
|
| - '\x87\xa9\xc72h\x95')
|
| - self.oldSecureRandom = randbytes.secureRandom
|
| - randbytes.secureRandom = lambda x: '\xff' * x
|
| - self.keyFile = self.mktemp()
|
| - file(self.keyFile, 'wb').write(keydata.privateRSA_lsh)
|
| -
|
| - def tearDown(self):
|
| - randbytes.secureRandom = self.oldSecureRandom
|
| - del self.oldSecureRandom
|
| - os.unlink(self.keyFile)
|
| -
|
| - def test__guessStringType(self):
|
| - """
|
| - Test that the _guessStringType method guesses string types
|
| - correctly.
|
| - """
|
| - self.assertEquals(keys.Key._guessStringType(keydata.publicRSA_openssh),
|
| - 'public_openssh')
|
| - self.assertEquals(keys.Key._guessStringType(keydata.publicDSA_openssh),
|
| - 'public_openssh')
|
| - self.assertEquals(keys.Key._guessStringType(
|
| - keydata.privateRSA_openssh), 'private_openssh')
|
| - self.assertEquals(keys.Key._guessStringType(
|
| - keydata.privateDSA_openssh), 'private_openssh')
|
| - self.assertEquals(keys.Key._guessStringType(keydata.publicRSA_lsh),
|
| - 'public_lsh')
|
| - self.assertEquals(keys.Key._guessStringType(keydata.publicDSA_lsh),
|
| - 'public_lsh')
|
| - self.assertEquals(keys.Key._guessStringType(keydata.privateRSA_lsh),
|
| - 'private_lsh')
|
| - self.assertEquals(keys.Key._guessStringType(keydata.privateDSA_lsh),
|
| - 'private_lsh')
|
| - self.assertEquals(keys.Key._guessStringType(
|
| - keydata.privateRSA_agentv3), 'agentv3')
|
| - self.assertEquals(keys.Key._guessStringType(
|
| - keydata.privateDSA_agentv3), 'agentv3')
|
| - self.assertEquals(keys.Key._guessStringType(
|
| - '\x00\x00\x00\x07ssh-rsa\x00\x00\x00\x01\x01'),
|
| - 'blob')
|
| - self.assertEquals(keys.Key._guessStringType(
|
| - '\x00\x00\x00\x07ssh-dss\x00\x00\x00\x01\x01'),
|
| - 'blob')
|
| - self.assertEquals(keys.Key._guessStringType('not a key'),
|
| - None)
|
| -
|
| - def _testPublicPrivateFromString(self, public, private, type, data):
|
| - self._testPublicFromString(public, type, data)
|
| - self._testPrivateFromString(private, type, data)
|
| -
|
| - def _testPublicFromString(self, public, type, data):
|
| - publicKey = keys.Key.fromString(public)
|
| - self.assertTrue(publicKey.isPublic())
|
| - self.assertEquals(publicKey.type(), type)
|
| - for k, v in publicKey.data().items():
|
| - self.assertEquals(data[k], v)
|
| -
|
| - def _testPrivateFromString(self, private, type, data):
|
| - privateKey = keys.Key.fromString(private)
|
| - self.assertFalse(privateKey.isPublic())
|
| - self.assertEquals(privateKey.type(), type)
|
| - for k, v in data.items():
|
| - self.assertEquals(privateKey.data()[k], v)
|
| -
|
| - def test_fromOpenSSH(self):
|
| - """
|
| - Test that keys are correctly generated from OpenSSH strings.
|
| - """
|
| - self._testPublicPrivateFromString(keydata.publicRSA_openssh,
|
| - keydata.privateRSA_openssh, 'RSA', keydata.RSAData)
|
| - self.assertEquals(keys.Key.fromString(
|
| - keydata.privateRSA_openssh_encrypted,
|
| - passphrase='encrypted'),
|
| - keys.Key.fromString(keydata.privateRSA_openssh))
|
| - self.assertEquals(keys.Key.fromString(
|
| - keydata.privateRSA_openssh_alternate),
|
| - keys.Key.fromString(keydata.privateRSA_openssh))
|
| - self._testPublicPrivateFromString(keydata.publicDSA_openssh,
|
| - keydata.privateDSA_openssh, 'DSA', keydata.DSAData)
|
| -
|
| - def test_fromLSH(self):
|
| - """
|
| - Test that keys are correctly generated from LSH strings.
|
| - """
|
| - self._testPublicPrivateFromString(keydata.publicRSA_lsh,
|
| - keydata.privateRSA_lsh, 'RSA', keydata.RSAData)
|
| - self._testPublicPrivateFromString(keydata.publicDSA_lsh,
|
| - keydata.privateDSA_lsh, 'DSA', keydata.DSAData)
|
| - sexp = sexpy.pack([['public-key', ['bad-key', ['p', '2']]]])
|
| - self.assertRaises(keys.BadKeyError, keys.Key.fromString,
|
| - data='{'+base64.encodestring(sexp)+'}')
|
| - sexp = sexpy.pack([['private-key', ['bad-key', ['p', '2']]]])
|
| - self.assertRaises(keys.BadKeyError, keys.Key.fromString,
|
| - sexp)
|
| -
|
| - def test_fromAgentv3(self):
|
| - """
|
| - Test that keys are correctly generated from Agent v3 strings.
|
| - """
|
| - self._testPrivateFromString(keydata.privateRSA_agentv3, 'RSA',
|
| - keydata.RSAData)
|
| - self._testPrivateFromString(keydata.privateDSA_agentv3, 'DSA',
|
| - keydata.DSAData)
|
| - self.assertRaises(keys.BadKeyError, keys.Key.fromString,
|
| - '\x00\x00\x00\x07ssh-foo'+'\x00\x00\x00\x01\x01'*5)
|
| -
|
| - def test_fromStringErrors(self):
|
| - """
|
| - Test that fromString raises errors appropriately.
|
| - """
|
| - self.assertRaises(keys.BadKeyError, keys.Key.fromString, '')
|
| - self.assertRaises(keys.BadKeyError, keys.Key.fromString, '',
|
| - 'bad_type')
|
| - self.assertRaises(keys.BadKeyError, keys.Key.fromString,
|
| - keydata.publicRSA_lsh, passphrase = 'unencrypted')
|
| - self.assertRaises(keys.EncryptedKeyError, keys.Key.fromString,
|
| - keys.Key(self.rsaObj).toString('openssh', 'encrypted'))
|
| - self.assertRaises(keys.BadKeyError, keys.Key.fromString,
|
| - '-----BEGIN RSA KEY-----\nwA==\n')
|
| -
|
| - def test_fromFile(self):
|
| - """
|
| - Test that fromFile works correctly.
|
| - """
|
| - self.assertEquals(keys.Key.fromFile(self.keyFile),
|
| - keys.Key.fromString(keydata.privateRSA_lsh))
|
| - self.assertRaises(keys.BadKeyError, keys.Key.fromFile,
|
| - self.keyFile, 'bad_type')
|
| - self.assertRaises(keys.BadKeyError, keys.Key.fromFile,
|
| - self.keyFile, passphrase='unencrypted')
|
| -
|
| - def test_init(self):
|
| - """
|
| - Test that the PublicKey object is initialized correctly.
|
| - """
|
| - obj = Crypto.PublicKey.RSA.construct((1L, 2L))
|
| - key = keys.Key(obj)
|
| - self.assertEquals(key.keyObject, obj)
|
| -
|
| - def test_equal(self):
|
| - """
|
| - Test that Key objects are compared correctly.
|
| - """
|
| - rsa1 = keys.Key(self.rsaObj)
|
| - rsa2 = keys.Key(self.rsaObj)
|
| - rsa3 = keys.Key(Crypto.PublicKey.RSA.construct((1L, 2L)))
|
| - dsa = keys.Key(self.dsaObj)
|
| - self.assertTrue(rsa1 == rsa2)
|
| - self.assertFalse(rsa1 == rsa3)
|
| - self.assertFalse(rsa1 == dsa)
|
| - self.assertFalse(rsa1 == object)
|
| - self.assertFalse(rsa1 == None)
|
| -
|
| - def test_notEqual(self):
|
| - """
|
| - Test that Key objects are not-compared correctly.
|
| - """
|
| - rsa1 = keys.Key(self.rsaObj)
|
| - rsa2 = keys.Key(self.rsaObj)
|
| - rsa3 = keys.Key(Crypto.PublicKey.RSA.construct((1L, 2L)))
|
| - dsa = keys.Key(self.dsaObj)
|
| - self.assertFalse(rsa1 != rsa2)
|
| - self.assertTrue(rsa1 != rsa3)
|
| - self.assertTrue(rsa1 != dsa)
|
| - self.assertTrue(rsa1 != object)
|
| - self.assertTrue(rsa1 != None)
|
| -
|
| - def test_type(self):
|
| - """
|
| - Test that the type method returns the correct type for an object.
|
| - """
|
| - self.assertEquals(keys.Key(self.rsaObj).type(), 'RSA')
|
| - self.assertEquals(keys.Key(self.rsaObj).sshType(), 'ssh-rsa')
|
| - self.assertEquals(keys.Key(self.dsaObj).type(), 'DSA')
|
| - self.assertEquals(keys.Key(self.dsaObj).sshType(), 'ssh-dss')
|
| - self.assertRaises(RuntimeError, keys.Key(None).type)
|
| - self.assertRaises(RuntimeError, keys.Key(None).sshType)
|
| - self.assertRaises(RuntimeError, keys.Key(self).type)
|
| - self.assertRaises(RuntimeError, keys.Key(self).sshType)
|
| -
|
| - def test_fromBlob(self):
|
| - """
|
| - Test that a public key is correctly generated from a public key blob.
|
| - """
|
| - rsaBlob = common.NS('ssh-rsa') + common.MP(2) + common.MP(3)
|
| - rsaKey = keys.Key.fromString(rsaBlob)
|
| - dsaBlob = (common.NS('ssh-dss') + common.MP(2) + common.MP(3) +
|
| - common.MP(4) + common.MP(5))
|
| - dsaKey = keys.Key.fromString(dsaBlob)
|
| - badBlob = common.NS('ssh-bad')
|
| - self.assertTrue(rsaKey.isPublic())
|
| - self.assertEquals(rsaKey.data(), {'e':2L, 'n':3L})
|
| - self.assertTrue(dsaKey.isPublic())
|
| - self.assertEquals(dsaKey.data(), {'p':2L, 'q':3L, 'g':4L, 'y':5L})
|
| - self.assertRaises(keys.BadKeyError,
|
| - keys.Key.fromString, badBlob)
|
| -
|
| -
|
| - def test_blob(self):
|
| - """
|
| - Test that the Key object generates blobs correctly.
|
| - """
|
| - self.assertEquals(keys.Key(self.rsaObj).blob(),
|
| - '\x00\x00\x00\x07ssh-rsa\x00\x00\x00\x01\x02'
|
| - '\x00\x00\x00\x01\x01')
|
| - self.assertEquals(keys.Key(self.dsaObj).blob(),
|
| - '\x00\x00\x00\x07ssh-dss\x00\x00\x00\x01\x03'
|
| - '\x00\x00\x00\x01\x04\x00\x00\x00\x01\x02'
|
| - '\x00\x00\x00\x01\x01')
|
| -
|
| - badKey = keys.Key(None)
|
| - self.assertRaises(RuntimeError, badKey.blob)
|
| -
|
| - def test_toOpenSSH(self):
|
| - """
|
| - Test that the Key object generates OpenSSH keys correctly.
|
| - """
|
| - key = keys.Key.fromString(keydata.privateRSA_lsh)
|
| - self.assertEquals(key.toString('openssh'), keydata.privateRSA_openssh)
|
| - self.assertEquals(key.toString('openssh', 'encrypted'),
|
| - keydata.privateRSA_openssh_encrypted)
|
| - self.assertEquals(key.public().toString('openssh'),
|
| - keydata.publicRSA_openssh[:-8]) # no comment
|
| - self.assertEquals(key.public().toString('openssh', 'comment'),
|
| - keydata.publicRSA_openssh)
|
| - key = keys.Key.fromString(keydata.privateDSA_lsh)
|
| - self.assertEquals(key.toString('openssh'), keydata.privateDSA_openssh)
|
| - self.assertEquals(key.public().toString('openssh', 'comment'),
|
| - keydata.publicDSA_openssh)
|
| - self.assertEquals(key.public().toString('openssh'),
|
| - keydata.publicDSA_openssh[:-8]) # no comment
|
| -
|
| - def test_toLSH(self):
|
| - """
|
| - Test that the Key object generates LSH keys correctly.
|
| - """
|
| - key = keys.Key.fromString(keydata.privateRSA_openssh)
|
| - self.assertEquals(key.toString('lsh'), keydata.privateRSA_lsh)
|
| - self.assertEquals(key.public().toString('lsh'),
|
| - keydata.publicRSA_lsh)
|
| - key = keys.Key.fromString(keydata.privateDSA_openssh)
|
| - self.assertEquals(key.toString('lsh'), keydata.privateDSA_lsh)
|
| - self.assertEquals(key.public().toString('lsh'),
|
| - keydata.publicDSA_lsh)
|
| -
|
| - def test_toAgentv3(self):
|
| - """
|
| - Test that the Key object generates Agent v3 keys correctly.
|
| - """
|
| - key = keys.Key.fromString(keydata.privateRSA_openssh)
|
| - self.assertEquals(key.toString('agentv3'), keydata.privateRSA_agentv3)
|
| - key = keys.Key.fromString(keydata.privateDSA_openssh)
|
| - self.assertEquals(key.toString('agentv3'), keydata.privateDSA_agentv3)
|
| -
|
| - def test_toStringErrors(self):
|
| - """
|
| - Test that toString raises errors appropriately.
|
| - """
|
| - self.assertRaises(keys.BadKeyError, keys.Key(self.rsaObj).toString,
|
| - 'bad_type')
|
| -
|
| - def test_sign(self):
|
| - """
|
| - Test that the Key object generates correct signatures.
|
| - """
|
| - key = keys.Key.fromString(keydata.privateRSA_openssh)
|
| - self.assertEquals(key.sign(''), self.rsaSignature)
|
| - key = keys.Key.fromString(keydata.privateDSA_openssh)
|
| - self.assertEquals(key.sign(''), self.dsaSignature)
|
| -
|
| -
|
| - def test_verify(self):
|
| - """
|
| - Test that the Key object correctly verifies signatures.
|
| - """
|
| - key = keys.Key.fromString(keydata.publicRSA_openssh)
|
| - self.assertTrue(key.verify(self.rsaSignature, ''))
|
| - self.assertFalse(key.verify(self.rsaSignature, 'a'))
|
| - self.assertFalse(key.verify(self.dsaSignature, ''))
|
| - key = keys.Key.fromString(keydata.publicDSA_openssh)
|
| - self.assertTrue(key.verify(self.dsaSignature, ''))
|
| - self.assertFalse(key.verify(self.dsaSignature, 'a'))
|
| - self.assertFalse(key.verify(self.rsaSignature, ''))
|
| -
|
| - def test_repr(self):
|
| - """
|
| - Test the pretty representation of Key.
|
| - """
|
| - self.assertEquals(repr(keys.Key(self.rsaObj)),
|
| -"""<RSA Private Key (0 bits)
|
| -attr e:
|
| -\t02
|
| -attr d:
|
| -\t03
|
| -attr n:
|
| -\t01
|
| -attr q:
|
| -\t05
|
| -attr p:
|
| -\t04
|
| -attr u:
|
| -\t04>""")
|
| -
|
| -class WarningsTestCase(unittest.TestCase):
|
| - """
|
| - Test that deprecated functions warn the user of their deprecation.
|
| - """
|
| -
|
| - def setUp(self):
|
| - self.keyObject = keys.Key.fromString(keydata.privateRSA_lsh).keyObject
|
| -
|
| - def test_getPublicKeyString(self):
|
| - """
|
| - Test that getPublicKeyString warns with a DeprecationWarning.
|
| - """
|
| - self.assertWarns(DeprecationWarning,
|
| - "getPublicKeyString is deprecated since Twisted Conch 0.9."
|
| - " Use Key.fromString().",
|
| - unittest.__file__, keys.getPublicKeyString,
|
| - data=keydata.publicRSA_openssh)
|
| -
|
| - def test_makePublicKeyString(self):
|
| - """
|
| - Test that makePublicKeyString warns with a DeprecationWarning.
|
| - """
|
| - self.assertWarns(DeprecationWarning,
|
| - "makePublicKeyString is deprecated since Twisted Conch 0.9."
|
| - " Use Key(obj).toString().", unittest.__file__,
|
| - keys.makePublicKeyString, self.keyObject)
|
| -
|
| - def test_getPublicKeyObject(self):
|
| - """
|
| - Test that getPublicKeyObject warns with a DeprecationWarning.
|
| - """
|
| - self.assertWarns(DeprecationWarning,
|
| - "getPublicKeyObject is deprecated since Twisted Conch 0.9."
|
| - " Use Key.fromString().", unittest.__file__,
|
| - keys.getPublicKeyObject, keydata.publicRSA_lsh)
|
| -
|
| - def test_getPrivateKeyObject(self):
|
| - """
|
| - Test that getPrivateKeyObject warns with a DeprecationWarning.
|
| - """
|
| - self.assertWarns(DeprecationWarning,
|
| - "getPrivateKeyObject is deprecated since Twisted Conch 0.9."
|
| - " Use Key.fromString().", unittest.__file__,
|
| - keys.getPrivateKeyObject, data=keydata.privateRSA_lsh)
|
| -
|
| - def test_makePrivateKeyString(self):
|
| - """
|
| - Test that makePrivateKeyString warns with a DeprecationWarning.
|
| - """
|
| - self.assertWarns(DeprecationWarning,
|
| - "makePrivateKeyString is deprecated since Twisted Conch 0.9."
|
| - " Use Key(obj).toString().", unittest.__file__,
|
| - keys.makePrivateKeyString, self.keyObject)
|
| -
|
| - def test_makePublicKeyBlob(self):
|
| - """
|
| - Test that makePublicKeyBlob warns with a DeprecationWarning.
|
| - """
|
| - self.assertWarns(DeprecationWarning,
|
| - "makePublicKeyBlob is deprecated since Twisted Conch 0.9."
|
| - " Use Key(obj).blob().", unittest.__file__,
|
| - keys.makePublicKeyBlob, self.keyObject)
|
| -
|
| - def test_signData(self):
|
| - """
|
| - Test that signData warns with a DeprecationWarning.
|
| - """
|
| - self.assertWarns(DeprecationWarning,
|
| - "signData is deprecated since Twisted Conch 0.9."
|
| - " Use Key(obj).sign(data).", unittest.__file__,
|
| - keys.signData, self.keyObject, '')
|
| -
|
| - def test_verifySignature(self):
|
| - """
|
| - Test that signData warns with a DeprecationWarning.
|
| - """
|
| - self.assertWarns(DeprecationWarning,
|
| - "verifySignature is deprecated since Twisted Conch 0.9."
|
| - " Use Key(obj).verify(signature, data).", unittest.__file__,
|
| - keys.verifySignature, self.keyObject, '\x00\x00\x00\x00', '')
|
| -
|
| - def test_printKey(self):
|
| - """
|
| - Test that signData warns with a DeprecationWarning.
|
| - """
|
| - self.assertWarns(DeprecationWarning,
|
| - "printKey is deprecated since Twisted Conch 0.9."
|
| - " Use repr(Key(obj)).", unittest.__file__,
|
| - keys.printKey, self.keyObject)
|
| -
|
|
|