diff --git a/docs/scenarios/crypto.rst b/docs/scenarios/crypto.rst index 0b5773b12..1d61c1a9a 100644 --- a/docs/scenarios/crypto.rst +++ b/docs/scenarios/crypto.rst @@ -45,6 +45,8 @@ 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. +A more comprehensive `GPGME Python Bindings HOWTO `_ is available with the source and a HTML version is available `here `_. Python 3 sample scripts from the examples in the HOWTO are also provided with the source and are accessible `here `_. + 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 @@ -58,27 +60,28 @@ 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() - + a_key = input("Enter the fingerprint or key ID to encrypt to: ") + filename = input("Enter the filename to encrypt: ") + with open(filename, "rb") as afile: + text = afile.read() + c = gpg.core.Context(armor=True) + rkey = list(c.keylist(pattern=a_key, secret=False)) + ciphertext, result, sign_result = c.encrypt(text, recipients=rkey, + always_trust=True, + add_encrypt_to=True) + with open("{0}.asc".format(filename), "wb") as bfile: + bfile.write(ciphertext) # Decryption with corresponding secret key # invokes gpg-agent and pinentry. - plaintext = gpg.Context().decrypt(ciphertext) - + with open("{0}.asc".format(filename), "rb") as cfile: + plaintext, result, verify_result = gpg.Context().decrypt(cfile) + with open("new-{0}".format(filename), "wb") as dfile: + dfile.write(plaintext) # Matching the data. - if text == plaintext[0].decode("utf-8"): + # Also running a diff on filename and the new filename should match. + if text == plaintext: print("Hang on ... did you say *all* of GnuPG? Yep.") else: pass