GnuPG Made Easy (GPGME) is a library designed to make access to GnuPG easier for applications. It provides a High-Level Crypto API for encryption, decryption, signing, signature verification and key management.

Frequently Asked Questions

Why does the function gpgme_data_seek not work?

You probably did not compile the program with largefile support. GPGME is compiled with largefile support by default, so offt is a 64-bit data type. Because gpgme_data_seek uses off_t as a parameter type, you have to compile your program with largefile support as well, so that the data types used by GPGME and by your program match.

Note that you have to compile your program with largefile support even if you do not use gpgme_data_seek, because file descriptors are exchanged between the program and GPGME.

The GPGME documentation contains much more information on the subject. See section 2.3 Largefile support of the GPGME Reference Manual.

Why don't the Python bindings announced in 2016 work?

The Python bindings have been undergoing continual improvement and fine tuning since the initial announcement. To obtain the most accurate bindings it is recommended to install the bindings shipped with GPGME itself rather than older versions available on PyPI.

The Python module has been renamed from pyme or pyme3 and is now simply called gpg. Otherwise the function remains similar and example code is included with the source.

A basic decryption operation to take an encrypted file and decrypt it with a key in your secret keys would look something like this:

import gpg

ciphertext = open("filename.txt.asc", "rb")
plaintext = gpg.Context().decrypt(ciphertext)
f = open("filename.txt", "wb")
del plaintext