1
# pygpgme - a Python wrapper for the gpgme library
2
# Copyright (C) 2006 James Henstridge
4
# This library is free software; you can redistribute it and/or
5
# modify it under the terms of the GNU Lesser General Public
6
# License as published by the Free Software Foundation; either
7
# version 2.1 of the License, or (at your option) any later version.
9
# This library is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
# Lesser General Public License for more details.
14
# You should have received a copy of the GNU Lesser General Public
15
# License along with this library; if not, write to the Free Software
16
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22
from gpgme.tests.util import GpgHomeTestCase
25
# See /usr/share/doc/gnupg/DETAILS.gz
27
# XXX we are using a passwordless key because the passphrase_cb
28
# backend seems to be currently broken.
30
signing_only_param = """
31
<GnupgKeyParms format="internal">
37
Name-Email: someone@example.com
43
class GenerateKeyTestCase(GpgHomeTestCase):
45
def assertCanSign(self, key):
46
"""Check that the given key can be used to create signatures."""
50
plaintext = StringIO.StringIO('Hello World\n')
51
signature = StringIO.StringIO()
55
plaintext, signature, gpgme.SIG_MODE_DETACH)
60
sigs = ctx.verify(signature, plaintext, None)
61
self.assertEqual(len(sigs), 1)
62
self.assertEqual(sigs[0].fpr, key.subkeys[0].fpr)
64
def test_generate_signing_only_keys(self):
66
result = ctx.genkey(signing_only_param)
68
self.assertEqual(result.primary, True)
69
self.assertEqual(result.sub, False)
70
self.assertEqual(len(result.fpr), 40)
72
# The generated key is part of the current keyring.
73
key = ctx.get_key(result.fpr, True)
74
self.assertEqual(key.revoked, False)
75
self.assertEqual(key.expired, False)
76
self.assertEqual(key.secret, True)
77
self.assertEqual(key.protocol, gpgme.PROTOCOL_OpenPGP)
79
# Single signing-only RSA key.
80
self.assertEqual(len(key.subkeys), 1)
81
subkey = key.subkeys[0]
82
self.assertEqual(subkey.secret, True)
83
self.assertEqual(subkey.pubkey_algo, gpgme.PK_RSA)
84
self.assertEqual(subkey.length, 1024)
86
self.assertEqual(key.can_sign, True)
87
self.assertEqual(key.can_encrypt, False)
89
# The only UID available matches the given parameters.
91
self.assertEqual(uid.name, 'Testing')
92
self.assertEqual(uid.comment, 'comment')
93
self.assertEqual(uid.email, 'someone@example.com')
95
# Finally check if the generated key can perform signatures.
96
self.assertCanSign(key)
98
def test_invalid_parameters(self):
101
ctx.genkey('garbage parameters')
102
except gpgme.GpgmeError, exc:
103
self.assertTrue(hasattr(exc, "result"))
105
self.assertEqual(result.primary, False)
106
self.assertEqual(result.sub, False)
107
self.assertEqual(result.fpr, None)
109
self.fail("GpgmeError not raised")
113
loader = unittest.TestLoader()
114
return loader.loadTestsFromName(__name__)
117
if __name__ == '__main__':