Skip to main content

GPGLib2

This is a Python3 compatible fork of the gpglib library with support for AES secret keys and the mdc packet types.

History

Back in 2012 we couldn’t find a library for decrypting gpg that didn’t shell out to gpg.

And shelling out to gpg is slow when you do it for many small files.

So, with the help of http://pypi.python.org/pypi/OpenPGP and PyCrypto we created this, which is more performant than shelling out.

Then in 2017 a friend needed this library for a task, but the library wasn’t compatible with python3. Unfortunately we couldn’t get write access back to the original gpglib, so we have created a fork.

ChangeLog

0.5.1 - 8 January 2024
  • Update pycryptodome

0.5.0 - 2 December 2023
  • Update to hatchling

  • Now supports python 3.8 to 3.12

  • Changed to MIT license

0.4.0 - 6 December 2020
  • gpglib2 now only supports python3.6 and above

  • Formatting and linting with black and pylama

  • Upgraded dependencies

0.3.1 - 1 September 2018
  • Update pycryptodome for CVE-2018-15560

  • Remove use of a private method in pycryptodome when decrypting session keys

0.3 - 4 August 2018
  • Migrated from pycrypto to pycryptodome

0.2.1 - 7 February 2018
  • performance enhancement

0.2 - 28 Jan 2018
  • Fork and python3 compatibility

Installing

To install, pip:

$ python -m pip install gpglib2

Or download from pypi: http://pypi.python.org/pypi/gpglib2.

Or clone the git repo: https://github.com/delfick/gpglib2.

Making test data

This is what I did to get the data in tests/data.

From within tests/data:

$ gpg --full-gen-key --homedir ./gpg
# Once with RSA encrypt and sign, username Stephen and password "password25"
# And again with DSA/Elgamal, username Bobby and password "password25"

Then find the keyid:

$ gpg --homedir ./gpg --list-keys
  ------------------------------------------------------------------------
  pub   rsa2048 2018-08-03 [SC]
        F93E6E1B45D1C037B42650DE52320610E94B004B
  uid           [ultimate] Stephen <stephen@stephen.com>
  sub   rsa2048 2018-08-03 [E]

  pub   dsa2048 2018-08-03 [SC]
        A02F07AF335D3212FEB29C44FF5D18CBDBE4C62B
  uid           [ultimate] Bobby <bobby@bobby.com>
  sub   elg2048 2018-08-03 [E]

# Here, the key we want is "F93E6E1B45D1C037B42650DE52320610E94B004B"

Then with that keyid export the secret and public keys for both the rsa and dsa keys:

$ export KEY=F93E6E1B45D1C037B42650DE52320610E94B004B
$ gpg --export $KEY > keys/key.public.rsa.gpg
$ gpg --export-secret-key $KEY > keys/key.secret.rsa.gpg

I then created dump.small and dump.big as random json structures (the big on is from http://json.org/example.html).

Then run ./tests/data/generate_test_data.sh to generate messages in the tests/encrypted folder.

Note that this is only necessary if you are editing generate_test_data.sh to accommodate different options. If you are doing this then you will also need to do the same to tests/test_decryption.py to take the different data into account.

Tests

Run:

> ./test.sh

Currently not much is tested.

You may also use tox:

> source run.sh activate
> tox

Docs

Run:

> ./run.sh docs view

Generated documentation is also available at: http://gpglib2.readthedocs.org/en/latest/

Metadata

Release files for gpglib2 0.5.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gpglib2 0.5.1
File Size Uploaded
gpglib2-0.5.1.tar.gz 15.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for gpglib2 0.5.1
File Interpreter ABI Platform
gpglib2-0.5.1-py3-none-any.whl Python 3 none any Details

Total release size: 35.1 kB

Release files / gpglib2-0.5.1.tar.gz

Download URL gpglib2-0.5.1.tar.gz
Size 15.2 kB
Tags Source
SHA-256 checksum
How to use checksums
9d2ca30d3048bf09651c5bf54ab117cf17e98c728b665546f583299585ad0242
BLAKE2b-256 checksum
How to use checksums
bc7a1cee2d1226865cef20180ae1522a9d386abb4d0cc7d83aeb01502db956b2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.8.18

Release files / gpglib2-0.5.1-py3-none-any.whl

Download URL gpglib2-0.5.1-py3-none-any.whl
Size 19.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
be3c9e61ada140d41ff23e687567c71b3082dba85287019f90af0e1c242bb34e
BLAKE2b-256 checksum
How to use checksums
db54966afbc67a6db0a06c4069b70d0b249c551d895733fdfd04cb58dd5d464f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.8.18

Release history Release notifications | RSS feed

This release

0.5.1 This release

2 release files

0.5.0

2 release files

0.4.0

1 release file

0.3.1

1 release file

0.3

1 release file

0.2.1

1 release file

0.2

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page