From 35450c3efae219624c03c2cbf4ba8c0998f6e416 Mon Sep 17 00:00:00 2001 From: Ben McGinnes Date: Wed, 28 Feb 2018 12:57:48 +1100 Subject: [PATCH] GPGME Python bindings * Added GPGME bindings description and the standard encryption and decryption example. --- docs/scenarios/crypto.rst | 46 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/docs/scenarios/crypto.rst b/docs/scenarios/crypto.rst index 191062afe..0b5773b12 100644 --- a/docs/scenarios/crypto.rst +++ b/docs/scenarios/crypto.rst @@ -40,6 +40,52 @@ Example code using high level symmetric encryption recipe: +GPGME bindings +-------------- + +The `GPGME Python bindings `_ provide pythonic access to `GPG Made Easy `_, a C API for the entire GNU Privacy Guard suite of projects, including GPG, libgcrypt and gpgsm (the S/MIME engine). It supports Python 2.6, 2.7, 3.4 and above. Depends on the SWIG C interface for Python as well as the GnuPG software and libraries. + +Available under the same terms as the rest of the GnuPG Project: GPLv2 and LGPLv2.1, both with the "or any later version" clause. + +Installation +------------ + +Included by default when compiling GPGME if the configure script locates a supported python version (which it will if it's in $PATH during configuration). + +Example +------- + +.. code-block:: python3 + + import gpg + import os + + # Encryption to public key specified in rkey. + rkey = "0xDEADBEEF" + text = "Something to hide." + plain = gpg.core.Data(text) + cipher = gpg.core.Data() + c = gpg.core.Context() + c.set_armor(1) + c.op_keylist_start(rkey, 0) + r = c.op_keylist_next() + c.op_encrypt([r], 1, plain, cipher) + cipher.seek(0, os.SEEK_SET) + ciphertext = cipher.read() + + # Decryption with corresponding secret key + # invokes gpg-agent and pinentry. + plaintext = gpg.Context().decrypt(ciphertext) + + # Matching the data. + if text == plaintext[0].decode("utf-8"): + print("Hang on ... did you say *all* of GnuPG? Yep.") + else: + pass + + + + PyCrypto --------