From 5cb67257f2b3b5fcfd3444e366f26a0f2ae09504 Mon Sep 17 00:00:00 2001 From: Ben McGinnes Date: Thu, 20 Sep 2018 11:38:20 +1000 Subject: [PATCH] docs: python bindings and its special request * Added some material on using the new-ish hkp4py module with GPGME. * Example code will be added later once a couple of little issues are addressed. Signed-off-by: Ben McGinnes --- doc/gpgme-python-howto.texi | 44 +++++++++++++++++++++---- lang/python/docs/gpgme-python-howto.org | 34 +++++++++++++++++-- 2 files changed, 69 insertions(+), 9 deletions(-) diff --git a/doc/gpgme-python-howto.texi b/doc/gpgme-python-howto.texi index 7cdce1eb..85a8dcfd 100644 --- a/doc/gpgme-python-howto.texi +++ b/doc/gpgme-python-howto.texi @@ -28,7 +28,7 @@ * Basic Functions:: * Creating keys and subkeys:: * Advanced or Experimental Use Cases:: -* Miscellaneous work-arounds:: +* Miscellaneous extras and work-arounds:: * Copyright and Licensing:: @detailmenu @@ -125,9 +125,14 @@ Advanced or Experimental Use Cases * C plus Python plus SWIG plus Cython:: -Miscellaneous work-arounds +Miscellaneous extras and work-arounds * Group lines:: +* Keyserver access for Python:: + +Keyserver access for Python + +* Key import format:: Copyright and Licensing @@ -763,7 +768,7 @@ one argument which is a bytes literal object containing either the binary or ASCII armoured key data for one or more keys. The following example retrieves one or more keys from the SKS -keyservers via the web using the requests module. Since requests +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. @@ -811,7 +816,7 @@ else: @strong{NOTE:} When searching for a key ID of any length or a fingerprint (without spaces), the SKS servers require the the leading @samp{0x} -indicative of hexadecimal be included. Also note that the old short +indicative of hexadecimal be included. Also note that the old short key IDs (e.g. @samp{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 @@ -2178,11 +2183,12 @@ The example versions include some additional options to annotate the existing code and to detect Cython's use. The latter comes from the @uref{http://docs.cython.org/en/latest/src/tutorial/pure.html#magic-attributes-within-the-pxd, Magic Attributes} section of the Cython documentation. -@node Miscellaneous work-arounds -@chapter Miscellaneous work-arounds +@node Miscellaneous extras and work-arounds +@chapter Miscellaneous extras and work-arounds @menu * Group lines:: +* Keyserver access for Python:: @end menu @node Group lines @@ -2249,6 +2255,32 @@ script reads all the group entries in a user's @samp{gpg.conf} file and converts them into crypt-hooks suitable for use with the Mutt and Neomutt mail clients. +@node Keyserver access for Python +@section Keyserver access for Python + +The @uref{https://github.com/Selfnet/hkp4py, hkp4py} module by Marcel Fest was originally a port of the old +@uref{https://github.com/dgladkov/python-hkp, python-hkp} module from Python 2 to Python 3 and updated to use the +@uref{http://docs.python-requests.org/en/latest/index.html, requests} module instead. It has since been modified to provide +support for Python 2.7 as well and is available via PyPI. + +Since it rewrites the @samp{hkp} protocol prefix as @samp{http} and @samp{hkps} as +@samp{https}, the module is able to be used even with servers which do not +support the full scope of keyserver functions. It will work quite +readily when incorporated into a @ref{C plus Python plus SWIG plus Cython, , Cython} generated and compiled version +of any code. + +@menu +* Key import format:: +@end menu + +@node Key import format +@subsection Key import format + +The hkp4py module returns key data via requests as string literals +(@samp{r.text}) instead of byte literals (@samp{r.content}). This means that +the retrurned key data must be encoded to UTF-8 when importing that +key material using a @samp{gpg.Context().key_import()} method. + @node Copyright and Licensing @chapter Copyright and Licensing diff --git a/lang/python/docs/gpgme-python-howto.org b/lang/python/docs/gpgme-python-howto.org index 0836d21d..53ca3a58 100644 --- a/lang/python/docs/gpgme-python-howto.org +++ b/lang/python/docs/gpgme-python-howto.org @@ -642,7 +642,7 @@ one argument which is a bytes literal object containing either the binary or ASCII armoured key data for one or more keys. The following example retrieves one or more keys from the SKS -keyservers via the web using the requests module. Since requests +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. @@ -690,7 +690,7 @@ else: *NOTE:* When searching for a key ID of any length or a fingerprint (without spaces), the SKS servers require the the leading =0x= -indicative of hexadecimal be included. Also note that the old short +indicative of hexadecimal be included. Also note that the old short key 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 @@ -2084,7 +2084,7 @@ existing code and to detect Cython's use. The latter comes from the [[http://docs.cython.org/en/latest/src/tutorial/pure.html#magic-attributes-within-the-pxd][Magic Attributes]] section of the Cython documentation. -* Miscellaneous work-arounds +* Miscellaneous extras and work-arounds :PROPERTIES: :CUSTOM_ID: cheats-and-hacks :END: @@ -2157,6 +2157,34 @@ converts them into crypt-hooks suitable for use with the Mutt and Neomutt mail clients. +** Keyserver access for Python + :PROPERTIES: + :CUSTOM_ID: hkp4py + :END: + +The [[https://github.com/Selfnet/hkp4py][hkp4py]] module by Marcel Fest was originally a port of the old +[[https://github.com/dgladkov/python-hkp][python-hkp]] module from Python 2 to Python 3 and updated to use the +[[http://docs.python-requests.org/en/latest/index.html][requests]] module instead. It has since been modified to provide +support for Python 2.7 as well and is available via PyPI. + +Since it rewrites the =hkp= protocol prefix as =http= and =hkps= as +=https=, the module is able to be used even with servers which do not +support the full scope of keyserver functions. It will work quite +readily when incorporated into a [[#cython][Cython]] generated and compiled version +of any code. + + +*** Key import format + :PROPERTIES: + :CUSTOM_ID: hkp4py-strings + :END: + +The hkp4py module returns key data via requests as string literals +(=r.text=) instead of byte literals (=r.content=). This means that +the retrurned key data must be encoded to UTF-8 when importing that +key material using a =gpg.Context().key_import()= method. + + * Copyright and Licensing :PROPERTIES: :CUSTOM_ID: copyright-and-license