NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1295 most downloaded on PyPI
Pretty Good Privacy for Python
Last release 4 years ago
no release in 18 months
Release timing varies
gaps range from 1 weeks to 2.0 years
Nearly every release is documented
notes for 15 of 15 stable releases
Nothing withdrawn
no release was ever pulled
12 years old
15 releases · first in 2014
added the ability to ignore usage flags
Released: Nov 23, 2022
added the ability to ignore usage flags
accept passphrases formatted as bytes
default to 3DES when no preferred algorithms are supported
generate TZ-aware datetime objects
works with Cryptography 38
dropped support for Python 2 and Python 3 <= 3.5
renamed PGPOpenSSLCipherNotSupported to PGPOpenSSLCipherNotSupportedError
renamed PGPOpenSSLCipherNotSupported to PGPOpenSSLCipherNotSupportedError
renamed PGPInsecureCipher to PGPInsecureCipherError
fixed a bunch of typos
improve code style, increase consistency
PGPy v0.5.x is still compatible with Python 2.7 and 3.4. Support for those versions will be dropped in PGPy v0.6.0.
One column per quarter.
Released: April 16, 2021
Note
PGPy v0.5.x is still compatible with Python 2.7 and 3.4. Support for those versions will be dropped in PGPy v0.6.0.
Fixed compatibility break with Python < 3.8 (#368)
Fixed importing ABCs from collections (#328)
Documentation updates
This is the last release that will support Python 2.7 and 3.4. Future releases will require Python 3.5 or greater.
This is the last release that will support Python 2.7 and 3.4. Future releases will require Python 3.5 or greater.
Signature subpackets of type 0 cause an infinite parse loop
Released: August 1, 2019
Greatly improved Elliptic Curve Point format handling code (special thanks @rot42 )
Mainly a unit test fix release, but also contains an important line of code unintentionally omitted from v0.4.2
Mainly a unit test fix release, but also contains an important line of code unintentionally omitted from v0.4.2
Released: August 16, 2017
Private key checksum calculations were not getting stored for ECDSA keys; this has been fixed.
The test suite gpg wrappers have been replaced with use of the gpg package. (#171)
Documentation moved to ReadTheDocs !
Documentation moved to ReadTheDocs!
Bugfix release, and Python 3.6 support!
Bugfix release, and Python 3.6 support!
Released: April 13, 2017
Fixed an issue with dearmoring ASCII-armored PGP blocks with windows-style newlines (#156)
Improved the robustness of the code that tunes the hash count for deriving symmetric encryption keys (#157)
Fixed an issue with how public keys are created from private keys that was causing exports to become malformed (#168)
Added explicit support for Python 3.6 (#166)
Added support for Brainpool Standard curves for users who have OpenSSL 1.0.2 available
Exciting features added in this release:
Exciting features added in this release:
and some bug fixes as well! As usual, check out the changelog
Released: April 21, 2016
Armorable.from_blob was incorrectly not accepting bytes objects; this has been fixed (#140)
Fixed an issue where string-formatting PGPUID objects would sometimes raise an exception (#142)
Occasionally, the ASN.1 encoding of DSA signatures was being built in a way that although GPG could parse and verify them, it was incorrect, and PGPy incorrectly failed to verify them. (#143)
Fixed an issue where keys with expiration dates set would have the wrong value returned from the key.is_expired property (#151)
Fixed an issue where PGPy would try to incorrectly coerce non-ASCII-compatible characters to ASCII-compatible bytes, potentially resulting in mojibake. (#154)
ECDSA and ECDH keys can now be loaded (#109, #110)
Keys can be generated with the following algorithms:
RSA
DSA
ECDSA
ECDH
Keys can now be passphrase-protected. It is also possible to change the passphrase on a key that is already protected. (#149)
ECDSA keys can now be used to sign and verify (#111)
ECDH keys can now be used to encrypt and decrypt
It is now possible to recover a public key from a private key (#92)
Marker packets are now understood
Removed support for Python 3.2, as multiple dependency libraries have already done so
Added explicit support for Python 3.5
Updated library dependencies where required or useful
Reworked some IO-intensive routines to be less IO-intensive, and therefore faster
PGPy v0.3.0 is a major feature release.
Released: November 19, 2014
PGPy v0.3.0 is a major feature release.
Warning
The API changed significantly in this version. It is likely that anything using a previous version will need to be updated to work correctly with PGPy 0.3.0 or later.
When keys are exported, any certification signatures that are marked as being non-exportable are now skipped (#101)
When the wrong key is used to validate a signature, the error message in the raised exception now makes that clear (#106)
Standalone signatures can now be generated
Can now specify which User ID to use when signing things (#121)
Can now create new User IDs and User Attributes (#118)
Can now add new User IDs and User Attributes to keys (#119)
Timestamp signatures can now be generated
Can now sign keys, user ids, and user attributes (#104)
Can now create new PGPMessages (#114)
Key flags are now respected by PGPKey objects (#99)
Multiple signatures can now be validated at once in cases where that makes sense, such as when validating self-signatures on keys/user ids (#120)
Message signatures can now be verified (#117)
Messages can now be encrypted/decrypted using a passphrase (#113)
Cleartext messages can now be created and signed (#26)
Cleartext messages with inline signatures can now be verified (#27)
Messages can now be loaded (#102)
Messages can now be compressed (#100)
CRC24 computation is now much faster than previous versions (#68)
PGPKey and PGPKeyring APIs have changed significantly (#76)
String2Key computation is now much faster than previous versions (#94)
key material parts are now stored as integers (or long on Python 2.x) (#94)
PGPy v0.2.3 is a bugfix release
Released: July 31, 2014
PGPy v0.2.3 is a bugfix release
Fixed an issue where explicitly selecting a key and then trying to validate with it would erroneously raise an exception as though the wrong key were selected.
PGPy v0.2.2 is primarily a bugfix release.
Released: July 31, 2014
PGPy v0.2.2 is primarily a bugfix release.
Fixed a typo that would cause TypeError to be raised as bytecode was being generated (#85)
Fixed an issue where unicode input on Python 2.7 could result in unexpected UnicodeDecodeError exceptions being raised
Switched the main parse loop to use a bytearray instead of slicing a bytes, resulting in a ~160x speedup in parsing large blocks of passing. (#87)
PGPy v0.2.1 is primarily a bugfix release.
Released: July 31, 2014
PGPy v0.2.1 is primarily a bugfix release.
Critical bit on signature subpackets was being ignored, and when set, causing a ValueError to be raised when trying to parse it. The critical bit is now being parsed and masked out correctly. (#81)
No longer raises exceptions on unrecognized subpackets; instead, it now treats them as opaque.
No longer raises exceptions on unrecognized packets; instead, it now treats them as opaque. This also applies to signature and key packets with versions other than v4.
Fixed an issue where a User ID packet that lacked both a comment and an email address was failing to be found by the uid regex in KeyCollection.
Fixed an issue where an old-format packet header with a length_type set longer than needed was resulting in the packet getting truncated.
Fixed an issue where parsing a subpacket with a 2-byte length was erroneously being parsed as a 5-byte length.
Fixed an issue where parsing a subpacket with a 5-byte length where the value was < 8434 was causing an error
Fixed an issue where a packet or subpacket reporting a value marked reserved in RFC 4880 would cause ValueError to be raised during parsing.
Key material marked as public key algorithm 20 (Reserved - Formerly ElGamal Encrypt or Sign) is now parsed as ElGamal key material.
Fixed an issue where parsing a new-format packet header length where the first octet was 223 was erroneously reported as being malformed.
Added support for parsing the 'Preferred Key Server' signature subpacket
Added support for loading unsupported or unrecognized signature subpackets.
Added support for loading unsupported or unrecognized packets.
Starting with v0.2.0, PGPy is now using the BSD 3-Clause license. v0.1.0 used the MIT license.
Released: July 20, 2014
Starting with v0.2.0, PGPy is now using the BSD 3-Clause license. v0.1.0 used the MIT license.
Subkeys can now be accessed and used for actions supported by PGPKeyring (#67)
DSA:
Signing of binary documents now works (#16)
Verification of signatures of binary documents now works (#15)
Can now decrypt secret key material that was encrypted using:
Camellia128 (#36)
Camellia192 (#37)
Camellia256 (#38)
AES128 (#32)
AES192 (#33)
AES256 (#34)
Blowfish (#31)
Triple-DES (#30)
IDEA (#29)
PGP packets generated by PGPy now exclusively use new-style header lengths (#47)
GPG Trust Packets are now understood and fully parsed (#14)
Lots more packet types are now fully parsed
Signing with 1024-bit DSA keys does not work with OpenSSL 0.9.8 (#48) - this primarily affects Mac OS X.
Verifying signatures signed with any DSA key length other than 2048-bits does not work with OpenSSL 0.9.8 - this primarily affects Mac OS X.
PGP blocks loaded from ASCII armored blocks now retain their ASCII headers (#54)
PGP new-style packet headers were not being properly parsed in all cases
Many unit test enhancements
Released: May 02, 2014 * Initial release.
Released: May 02, 2014
Initial release.
Your coding agent can read these notes before it upgrades. Set up the MCP server →