On checke enfin les expiration/confiance sur les sous-clés.

This commit is contained in:
Vincent Le Gallic 2013-07-30 05:55:17 +02:00
parent 41aa2cf53c
commit 1dce8eb8c8

View file

@ -322,6 +322,28 @@ def update_keys(options):
_, stdout = gpg(options, "receive-keys", [key for _, key in keys.values() if key]) _, stdout = gpg(options, "receive-keys", [key for _, key in keys.values() if key])
return stdout.read().decode("utf-8") return stdout.read().decode("utf-8")
def _check_encryptable(key):
"""Vérifie qu'on peut chiffrer un message pour ``key``.
C'est-à-dire, que la clé est de confiance (et non expirée).
Puis qu'on peut chiffrer avec, ou qu'au moins une de ses subkeys est de chiffrement (capability e)
et est de confiance et n'est pas expirée"""
# Il faut avoir confiance la clé…
meaning, trustvalue = GPG_TRUSTLEVELS[key[u"trustletter"]]
if not trustvalue:
return u"La confiance en la clé est : %s" % (meaning,)
# …et pouvoir chiffrer avec…
if u"e" in key[u"capabilities"]:
# …soit directement…
return u""
# …soit avec une de ses subkeys
esubkeys = [sub for sub in key[u"subkeys"] if u"e" in sub[u"capabilities"]]
if len(esubkeys) == 0:
return u"La clé principale de permet pas de chiffrer et auncune sous-clé de chiffrement."
if any([GPG_TRUSTLEVELS[sub[u"trustletter"]][1] for sub in esubkeys]):
return u""
else:
return u"Aucune sous clé de chiffrement n'est de confiance et non expirée."
def check_keys(options, recipients=None, quiet=False): def check_keys(options, recipients=None, quiet=False):
"""Vérifie les clés, c'est-à-dire, si le mail est présent dans les identités du fingerprint, """Vérifie les clés, c'est-à-dire, si le mail est présent dans les identités du fingerprint,
et que la clé est de confiance (et non expirée/révoquée). et que la clé est de confiance (et non expirée/révoquée).
@ -355,11 +377,9 @@ def check_keys(options, recipients=None, quiet=False):
if any([u"<%s>" % (mail,) in u["uid"] for u in key["uids"]]): if any([u"<%s>" % (mail,) in u["uid"] for u in key["uids"]]):
if speak: if speak:
print("M ", end="") print("M ", end="")
meaning, trustvalue = GPG_TRUSTLEVELS[key["trustletter"]] # … et qu'on peut raisonnablement chiffrer pour lui
# … et qu'on lui fait confiance failed = _check_encryptable(key)
if not trustvalue: if not failed and speak:
failed = u"La confiance en la clé est : %s" % (meaning,)
elif speak:
print("C ", end="") print("C ", end="")
else: else:
failed = u"!! Le fingerprint et le mail ne correspondent pas !" failed = u"!! Le fingerprint et le mail ne correspondent pas !"