aboutsummaryrefslogtreecommitdiffstats
path: root/lang/python/doc/rst/gpgme-python-howto.rst
diff options
context:
space:
mode:
Diffstat (limited to 'lang/python/doc/rst/gpgme-python-howto.rst')
-rw-r--r--lang/python/doc/rst/gpgme-python-howto.rst67
1 files changed, 55 insertions, 12 deletions
diff --git a/lang/python/doc/rst/gpgme-python-howto.rst b/lang/python/doc/rst/gpgme-python-howto.rst
index 1bd069ca..7843965a 100644
--- a/lang/python/doc/rst/gpgme-python-howto.rst
+++ b/lang/python/doc/rst/gpgme-python-howto.rst
@@ -932,6 +932,14 @@ IDs (e.g. ``0xDEADBEEF``) should no longer be used due to the relative
ease by which such key IDs can be reproduced, as demonstrated by the
Evil32 Project in 2014 (which was subsequently exploited in 2016).
+Testing for whether a string in any given search is or may be a
+hexadecimal value which may be missing the leading ``0x`` is a simple
+matter of using a try/except statement which attempts to convert the
+string as hex to an integer and then back to hex; then using that to
+search with. Raising a ValueError simply results in treating the string
+as a string. This is the method and logic utilised in the
+``import-keys-hkp.py`` script (see below).
+
.. _import-protonmail:
Working with ProtonMail
@@ -1068,6 +1076,7 @@ the keys found.
c = gpg.Context()
server = hkp4py.KeyServer("hkps://hkps.pool.sks-keyservers.net")
results = []
+ keys = []
if len(sys.argv) > 2:
pattern = " ".join(sys.argv[1:])
@@ -1076,22 +1085,56 @@ the keys found.
else:
pattern = input("Enter the pattern to search for keys or user IDs: ")
- try:
- keys = server.search(pattern)
- print("Found {0} key(s).".format(len(keys)))
- except Exception as e:
- keys = []
+
+ if pattern is not None:
+ try:
+ key = server.search(hex(int(pattern, 16)))
+ keyed = True
+ except ValueError as ve:
+ key = server.search(pattern)
+ keyed = False
+
+ if key is not None:
+ keys.append(key[0])
+ if keyed is True:
+ try:
+ fob = server.search(pattern)
+ except:
+ fob = None
+ if fob is not None:
+ keys.append(fob[0])
+ else:
+ pass
+ else:
+ pass
+
for logrus in pattern.split():
- if logrus.startswith("0x") is True:
+ try:
+ key = server.search(hex(int(logrus, 16)))
+ hexed = True
+ except ValueError as ve:
key = server.search(logrus)
+ hexed = False
+
+ if key is not None:
+ keys.append(key[0])
+ if hexed is True:
+ try:
+ fob = server.search(logrus)
+ except:
+ fob = None
+ if fob is not None:
+ keys.append(fob[0])
+ else:
+ pass
else:
- key = server.search("0x{0}".format(logrus))
- keys.append(key[0])
- print("Found {0} key(s).".format(len(keys)))
+ pass
- for key in keys:
- import_result = c.key_import(key.key_blob)
- results.append(import_result)
+
+ if len(keys) > 0:
+ for key in keys:
+ import_result = c.key_import(key.key_blob)
+ results.append(import_result)
for result in results:
if result is not None and hasattr(result, "considered") is False: