A python3 compatible fork of gpglib, a Library for decrypting gpg that doesn't shell out to gpg
Project description
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/
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file gpglib2-0.5.1.tar.gz
.
File metadata
- Download URL: gpglib2-0.5.1.tar.gz
- Upload date:
- Size: 15.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.8.18
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9d2ca30d3048bf09651c5bf54ab117cf17e98c728b665546f583299585ad0242 |
|
MD5 | b58bf34aa6cb847781d5966cea08511d |
|
BLAKE2b-256 | bc7a1cee2d1226865cef20180ae1522a9d386abb4d0cc7d83aeb01502db956b2 |
File details
Details for the file gpglib2-0.5.1-py3-none-any.whl
.
File metadata
- Download URL: gpglib2-0.5.1-py3-none-any.whl
- Upload date:
- Size: 19.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.8.18
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | be3c9e61ada140d41ff23e687567c71b3082dba85287019f90af0e1c242bb34e |
|
MD5 | 97fdb725a8870e8ac9d02069e4f0e7c5 |
|
BLAKE2b-256 | db54966afbc67a6db0a06c4069b70d0b249c551d895733fdfd04cb58dd5d464f |