/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz
399.3.28 by Daniel Schierbeck
Added license and copyright information to crypt module.
1
# This program is free software; you can redistribute it and/or modify
2
# it under the terms of the GNU General Public License as published by
3
# the Free Software Foundation; either version 2 of the License, or
4
# (at your option) any later version.
5
6
# This program is distributed in the hope that it will be useful,
7
# but WITHOUT ANY WARRANTY; without even the implied warranty of
8
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9
# GNU General Public License for more details.
10
11
# You should have received a copy of the GNU General Public License
12
# along with this program; if not, write to the Free Software
13
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
14
399.3.32 by Daniel Schierbeck
Fixed encoding error.
15
__copyright__ = 'Copyright (C) 2008 Daniel Schierbeck'
399.3.28 by Daniel Schierbeck
Added license and copyright information to crypt module.
16
__author__ = 'Daniel Schierbeck <daniel.schierbeck@gmail.com>'
399.3.4 by Daniel Schierbeck
Moved crypt code to crypt.py.
17
18
import dbus
19
20
BUS_NAME = 'org.gnome.seahorse'
399.3.5 by Daniel Schierbeck
Added support for key fingerprints.
21
399.3.4 by Daniel Schierbeck
Moved crypt code to crypt.py.
22
CRYPTO_INTERFACE = 'org.gnome.seahorse.CryptoService'
23
CRYPTO_PATH = '/org/gnome/seahorse/crypto'
24
399.3.5 by Daniel Schierbeck
Added support for key fingerprints.
25
OPENPGP_INTERFACE = 'org.gnome.seahorse.Keys'
26
OPENPGP_PATH = '/org/gnome/seahorse/keys/openpgp'
27
399.3.4 by Daniel Schierbeck
Moved crypt code to crypt.py.
28
KEY_TYPE_OPENPGP = 'openpgp'
29
KEY_TYPE_SSH = 'ssh'
30
450.5.1 by Daniel Schierbeck
Fixed check for Seahorse.
31
try:
32
    dbus.validate_bus_name(BUS_NAME)
33
except ValueError:
34
    raise ImportError
35
399.3.4 by Daniel Schierbeck
Moved crypt code to crypt.py.
36
bus = dbus.SessionBus()
399.3.27 by Daniel Schierbeck
Only show Signature tab if DBus and Seahorse are installed.
37
399.3.4 by Daniel Schierbeck
Moved crypt code to crypt.py.
38
crypto = dbus.Interface(bus.get_object(BUS_NAME, CRYPTO_PATH), 
39
                        CRYPTO_INTERFACE)
399.3.5 by Daniel Schierbeck
Added support for key fingerprints.
40
openpgp = dbus.Interface(bus.get_object(BUS_NAME, OPENPGP_PATH),
399.3.25 by Daniel Schierbeck
Added discovery of unknown keys.
41
                         OPENPGP_INTERFACE)
399.3.4 by Daniel Schierbeck
Moved crypt code to crypt.py.
42
399.3.7 by Daniel Schierbeck
Made Seahorse discover unknown keys, and added trust level to the UI.
43
FLAG_VALID = 0x0001
44
FLAG_CAN_ENCRYPT = 0x0002
45
FLAG_CAN_SIGN = 0x0004
46
FLAG_EXPIRED = 0x0100
47
FLAG_REVOKED = 0x0200
48
FLAG_DISABLED = 0x0400
49
FLAG_TRUSTED = 0x1000
50
399.3.6 by Daniel Schierbeck
Added support for key trust.
51
TRUST_NEVER = -1
52
TRUST_UNKNOWN = 0
53
TRUST_MARGINAL = 1
54
TRUST_FULL = 5
55
TRUST_ULTIMATE = 10
56
399.3.24 by Daniel Schierbeck
Added key location getter.
57
LOCATION_MISSING = 10
58
LOCATION_SEARCHING = 20
59
LOCATION_REMOTE = 50
60
LOCATION_LOCAL = 100
61
450.5.3 by Daniel Schierbeck
Made the signature checking code not try to discover the signature key.
62
keyset = dict()
399.3.7 by Daniel Schierbeck
Made Seahorse discover unknown keys, and added trust level to the UI.
63
399.3.4 by Daniel Schierbeck
Moved crypt code to crypt.py.
64
def verify(crypttext):
399.3.8 by Daniel Schierbeck
Moved crypt code into a Key class.
65
    (cleartext, key) = crypto.VerifyText(KEY_TYPE_OPENPGP, 1, crypttext)
66
450.5.3 by Daniel Schierbeck
Made the signature checking code not try to discover the signature key.
67
    if key != "":
68
        if key not in keyset:
69
            keyset[key] = Key(key)
70
71
        return keyset[key]
399.3.8 by Daniel Schierbeck
Moved crypt code into a Key class.
72
73
class Key:
74
75
    def __init__(self, key):
76
        self.key = key
450.5.4 by Daniel Schierbeck
Made the crypt code only use one DBus call to get key fields.
77
450.5.3 by Daniel Schierbeck
Made the signature checking code not try to discover the signature key.
78
        (keys, unmatched) = openpgp.MatchKeys([self.get_id()], 0x00000010)
79
        self.available = (key in keys)
399.3.25 by Daniel Schierbeck
Added discovery of unknown keys.
80
450.5.4 by Daniel Schierbeck
Made the crypt code only use one DBus call to get key fields.
81
        if self.available:
82
            fields = openpgp.GetKeyFields(key, ['fingerprint', 'trust', 'flags', 'display-name', 'location'])
399.3.8 by Daniel Schierbeck
Moved crypt code into a Key class.
83
        else:
450.5.4 by Daniel Schierbeck
Made the crypt code only use one DBus call to get key fields.
84
            fields = dict()
85
86
        self.fingerprint = fields.get('fingerprint', 'N/A')
87
        self.trust = fields.get('trust', TRUST_UNKNOWN)
88
        self.flags = fields.get('flags', 0)
89
        self.display_name = fields.get('display-name', '')
90
        self.location = fields.get('location', LOCATION_MISSING)
399.3.8 by Daniel Schierbeck
Moved crypt code into a Key class.
91
    
92
    def get_flags(self):
93
        return self.flags
94
399.3.10 by Daniel Schierbeck
Added getter for display name field.
95
    def get_display_name(self):
96
        return self.display_name
97
399.3.8 by Daniel Schierbeck
Moved crypt code into a Key class.
98
    def get_id(self):
99
        return self.key.split(':')[1][8:]
100
101
    def get_fingerprint(self):
102
        return self.fingerprint
103
104
    def get_trust(self):
105
        return self.trust
106
399.3.24 by Daniel Schierbeck
Added key location getter.
107
    def get_location(self):
108
        return self.location
109
399.3.11 by Daniel Schierbeck
Fixed error with unavailable keys.
110
    def is_available(self):
450.5.3 by Daniel Schierbeck
Made the signature checking code not try to discover the signature key.
111
        return self.available
399.3.8 by Daniel Schierbeck
Moved crypt code into a Key class.
112
113
    def is_trusted(self):
450.5.4 by Daniel Schierbeck
Made the crypt code only use one DBus call to get key fields.
114
        return self.flags & FLAG_TRUSTED != 0