diff options
author | Ben McGinnes <[email protected]> | 2018-06-06 23:46:56 +0000 |
---|---|---|
committer | Ben McGinnes <[email protected]> | 2018-06-06 23:46:56 +0000 |
commit | 167847f1bcfb1b573bd40fe897f39d4ee4167176 (patch) | |
tree | f9b8ef6c5ef3db191c5183a4806041f32e52de57 /lang/python/docs | |
parent | core: Return a better error code on certain decryption failures. (diff) | |
download | gpgme-ben/key-import.tar.gz gpgme-ben/key-import.zip |
python bindings: import keysben/key-import
* Adapted from prior submissions by Tobias Mueller and Jacob Adams.
* key_import function added to gpg.core.Context().
* Two example scripts added to to examples/howto: import-key-file.py
imports keys from a local file and import-keys.py accesses the SKS
keyserver pool using the requests module to search for keys
(includes check for key IDs which may not include the leading 0x).
* Added documentation demonstrating the use of the key_import()
function with a large number of keys matching one domain (eff.org;
the example shows how EFF staff are following their own advice
issued last month).
Diffstat (limited to 'lang/python/docs')
-rw-r--r-- | lang/python/docs/GPGMEpythonHOWTOen.org | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/lang/python/docs/GPGMEpythonHOWTOen.org b/lang/python/docs/GPGMEpythonHOWTOen.org index 3325c086..31929fa3 100644 --- a/lang/python/docs/GPGMEpythonHOWTOen.org +++ b/lang/python/docs/GPGMEpythonHOWTOen.org @@ -454,6 +454,85 @@ literals with the fingerprint when getting a key in this way. +** Importing keys + :PROPERTIES: + :CUSTOM_ID: howto-import-key + :END: + + Importing keys is possible with the =key_import()= method and takes + one argument which is a bytes literal object containing either the + binary or ASCII armoured key data for one or more keys. + + In the following example a key will be retrieved from the SKS + keyservers via the web using the requests module. Since requests + returns the content as a bytes literal object, we can then use that + directly to import the resulting data into our keybox. In order to + demonstrate multiple imports this example searches for all the keys + of users at a particular domain name; in this case the EFF. + + #+begin_src python + import gpg + import os.path + import requests + + c = gpg.Context() + + homedir = input("Enter the GPG configuration directory path (optional): ") + pattern = input("The pattern to search for in key or user IDs: ") + url = "https://sks-keyservers.net/pks/lookup" + payload = { "op": "get", "search": pattern } + + if homedir.startswith("~"): + if os.path.exists(os.path.expanduser(homedir)) is True: + c.home_dir = os.path.expanduser(homedir) + else: + pass + elif os.path.exists(homedir) is True: + c.home_dir = homedir + else: + pass + + r = requests.get(url, verify=True, params=payload) + incoming = c.key_import(r.content) + + summary = """ + Total number of keys: {0} + Total number imported: {1} + Number of version 3 keys ignored: {2} + + Number of imported key objects or updates: {3} + Number of unchanged keys: {4} + Number of new signatures: {5} + Number of revoked keys: {6} + """.format(incoming.considered, len(incoming.imports), + incoming.skipped_v3_keys, incoming.imported, incoming.unchanged, + incoming.new_signatures, incoming.new_revocations) + + print(summary) + #+end_src + + The resulting output in that case, where the search pattern entered + was [email protected]= was: + + #+begin_src shell + Total number of keys: 272 + Total number imported: 249 + Number of version 3 keys ignored: 23 + + Number of imported key objects or updates: 180 + Number of unchanged keys: 66 + Number of new signatures: 7 + Number of revoked keys: 0 + #+end_src + + The examples for this document in =lang/python/examples/howto/ now + include to variations of this; one for searching the SKS keyserver + pool and the other for importing from a local file. + + The example above and the corresponding executable script included + in the examples requires Kenneth Reitz's excellent [[http://docs.python-requests.org/en/master/][Requests module]]. + + * Basic Functions :PROPERTIES: :CUSTOM_ID: howto-the-basics |