diff options
Diffstat (limited to 'lang/python/doc/src/gpgme-python-howto')
-rw-r--r-- | lang/python/doc/src/gpgme-python-howto | 92 |
1 files changed, 84 insertions, 8 deletions
diff --git a/lang/python/doc/src/gpgme-python-howto b/lang/python/doc/src/gpgme-python-howto index 11fb1e25..4b02a933 100644 --- a/lang/python/doc/src/gpgme-python-howto +++ b/lang/python/doc/src/gpgme-python-howto @@ -279,15 +279,16 @@ a significant advantage in some way. reach EOL soon. In production systems and services, Python 3.6 should be robust enough to be relied on. 3. If possible add the following Python modules which are not part of - the standard library: [[http://docs.python-requests.org/en/latest/index.html][Requests]], [[https://cython.org/][Cython]] and [[https://github.com/Selfnet/hkp4py][hkp4py]]. Chances are - quite high that at least the first one and maybe two of those will - already be installed. + the standard library: [[http://docs.python-requests.org/en/latest/index.html][Requests]], [[https://cython.org/][Cython]], [[https://pendulum.eustace.io/][Pendulum]] and [[https://github.com/Selfnet/hkp4py][hkp4py]]. -Note that, as with Cython, some of the planned additions to the -[[#advanced-use][Advanced]] section, will bring with them additional requirements. Most -of these will be fairly well known and commonly installed ones, -however, which are in many cases likely to have already been installed -on many systems or be familiar to Python programmers. +Chances are quite high that at least the first one and maybe two of +those will already be installed. + +Note that, as with Cython, some of advanced use case scenarios will +bring with them additional requirements. Most of these will be fairly +well known and commonly installed ones, however, which are in many +cases likely to have already been installed on many systems or be +familiar to Python programmers. ** Installation @@ -2640,6 +2641,81 @@ c.key_sign(key, uids=uid, expires_in=2764800) #+END_SRC +*** Verifying key certifications + :PROPERTIES: + :CUSTOM_ID: key-sign-verify + :END: + +#+BEGIN_SRC python -i +import gpg +import time + +c = gpg.Context() +dmfpr = "177B7C25DB99745EE2EE13ED026D2F19E99E63AA" +keys = list(c.keylist(pattern=dmuid, mode=gpg.constants.keylist.mode.SIGS)) +key = keys[0] + +for user in key.uids: + for sig in user.signatures: + print("0x{0}".format(sig.keyid), "", time.ctime(sig.timestamp), "", + sig.uid) +#+END_SRC + +Which for Danger Mouse displays the following: + +#+BEGIN_EXAMPLE + 0x92E3F6115435C65A Thu Mar 15 13:17:44 2018 Danger Mouse <[email protected]> + 0x321E4E2373590E5D Mon Nov 26 12:46:05 2018 Ben McGinnes <[email protected]> +#+END_EXAMPLE + +The two key signatures listed are for the self-certification of Danger +Mouse's key made when the key was created in March, 2018; and the +second is a signature made by the author and set to expire at the end +of the year. Note that the second signature was made with the +following code (including the preceding code to display the output of +the certifications or key signatures): + +#+BEGIN_SRC python -i +import gpg +import math +import pendulum +import time + +hd = "/home/dm/.gnupg" +c = gpg.Context() +d = gpg.Context(home_dir=hd) +dmfpr = "177B7C25DB99745EE2EE13ED026D2F19E99E63AA" +dmuid = "Danger Mouse <[email protected]>" +dkeys = list(c.keylist(pattern=dmuid)) +dmkey = dkeys[0] + +c.key_import(d.key_export(pattern=None)) + +tp = pendulum.period(pendulum.now(tz="local"), pendulum.datetime(2019, 1, 1)) +ts = tp.total_seconds() +total_secs = math.ceil(ts) +c.key_sign(dmkey, uids=dmuid, expires_in=total_secs) + +d.key_import(c.key_export(pattern=dmuid)) +keys = list(c.keylist(pattern=dmuid, mode=gpg.constants.keylist.mode.SIGS)) +key = keys[0] + +for user in key.uids: + for sig in user.signatures: + print("0x{0}".format(sig.keyid), "", time.ctime(sig.timestamp), "", + sig.uid) +#+END_SRC + +Note that this final code block includes the use of a module which is +/not/ part of Python's standard library, the [[https://pendulum.eustace.io/][pendulum module]]. Unlike +the standard datetime module, pendulum makes working with dates and +times significantly easier in Python; just as the requests module +makes working with HTTP and HTTPS easier than the builtin modules do. + +Though neither requests nor pendulum are required modules for using +the GPGME Python bindings, they are both highly recommended more +generally. + * Advanced or Experimental Use Cases :PROPERTIES: :CUSTOM_ID: advanced-use |