Exemplo n.º 1
0
    def test_generate_ssh_key_pair(self):
        """
        Private key is generated in the specified path, and the public
        key is generated on a path based on private key path.
        """
        private_path, self.private_segments = mk.fs.makePathInTemp()
        public_path = u"%s.pub" % (private_path)
        self.public_segments = self.private_segments[:]
        self.public_segments[-1] = u"%s.pub" % (self.public_segments[-1])
        comment = u"%s %s" % (mk.string(), mk.string())
        # The current code doesn't allow creating smaller keys, so at 1024
        # bit, this test is very slow.
        options = self.Bunch(key_size=1024, key_type="rsa", key_file=private_path, key_comment=comment)

        private_path = LocalFilesystem.getEncodedPath(private_path)
        public_path = LocalFilesystem.getEncodedPath(public_path)

        self.assertFalse(mk.fs.exists(self.private_segments))
        self.assertFalse(mk.fs.exists(self.public_segments))

        generate_ssh_key(options)

        self.assertTrue(mk.fs.exists(self.private_segments))
        self.assertTrue(mk.fs.exists(self.public_segments))

        # Check content of private key.
        private_key = Key.fromFile(filename=private_path)
        self.assertEqual(1024, private_key.size)
        self.assertIsFalse(private_key.isPublic())
        self.assertEqual("RSA", private_key.type())

        # Check content of public key.
        public_key = Key.fromFile(filename=public_path)
        self.assertEqual(1024, public_key.size)
        self.assertIsTrue(public_key.isPublic())
        self.assertEqual("RSA", public_key.type())

        # Check that public key is the pair of private key.
        private_data = private_key.data()
        public_data = public_key.data()
        self.assertEqual(private_data["e"], public_data["e"])
        self.assertEqual(private_data["n"], public_data["n"])
Exemplo n.º 2
0
    def test_key_store_comment(self):
        """
        When serializing a SSH public key to a file, a random comment can be
        added.
        """
        key = Key.fromString(data=RSA_PUBLIC_KEY_OPENSSH)
        public_file = StringIO()
        comment = mk.string()
        public_key_serialization = u'%s %s' % (
            RSA_PUBLIC_KEY_OPENSSH, comment)

        key.store(public_file=public_file, comment=comment)

        result_key = Key.fromString(public_file.getvalue())
        self.assertEqual(key.data, result_key.data)
        self.assertEqual(
            public_file.getvalue().decode('utf-8'), public_key_serialization)