GPG Lib
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....
Installing
To install, just use pip:
$ pip install gpglib
Or download from pypi: http://pypi.python.org/pypi/gpglib.
Or clone the git repo: https://github.com/Hitwise/gpglib.
Making test data
This is what I did to get the data in tests/data.
From within tests/data:
$ gpg --gen-key --homedir ./gpg # Once with RSA encrypt and sign, username Stephen and password "blahandstuff" # And again with DSA/Elgamal, username Bobby and password "blahandstuff"
Then find the keyid:
$ gpg --homedir ./gpg --list-keys # ./gpg/pubring.gpg # ----------------- # pub 2048R/1E42B68C 2012-06-15 # uid Stephen # sub 2048R/80C7020A 2012-06-15 # Here, the key we want is "80C7020A"
Then with that keyid export the secret and public keys for both the rsa and dsa keys:
$ gpg --export 80C7020A > key.public.rsa.gpg $ gpg --export-secret-key 80C7020A > 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 used the following command to populate the tests/data/encrypted folder:
$ gpg -o encrypted/<key>/<cipher>/<compression>/<msg>.gpg --cipher-algo <cipher> --compress-algo <compression> --yes --disable-mdc --homedir ./gpg -r <name for key> --encrypt dump.<msg>
Where:
- <key> is rsa or dsa
- <cipher> is cast5, aes, 3des or blowfish
- <compression> is zip, zlib or bzip2
- <msg> is small and big for the two examples I have
Tests
Install the pip requirements:
$ pip install -r requirements_test.txt
Install nosy if you want the ability to make tests autorun when you run the tests (https://bitbucket.org/delfick/nosy)
And then run:
$ ./test.sh
Or if you have nosy:
$ nosy ./test.sh
Currently not much is tested.
Docs
Install the pip requirements:
$ pip install -r requirements_docs.txt
And then go into the docs directory and run make:
$ cd docs $ make html
Open up docs/_build/html/index.html in your browser.
Automatically generated documentation is available at: http://gpglib.readthedocs.org/en/latest/