{"id":15474988,"url":"https://github.com/vsajip/python-gnupg","last_synced_at":"2025-05-16T15:07:44.321Z","repository":{"id":41165465,"uuid":"436952016","full_name":"vsajip/python-gnupg","owner":"vsajip","description":"A Python API for the GNU Privacy Guard (GnuPG). N.B. This repository has been migrated from Mercurial on 2019-11-16, so references to commits before this date will refer to the Mercurial source and not this Git repository. The migration is marked by a commit that adds a .gitignore file.","archived":false,"fork":false,"pushed_at":"2024-10-01T10:21:47.000Z","size":4756,"stargazers_count":99,"open_issues_count":2,"forks_count":29,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-10-08T19:39:12.249Z","etag":null,"topics":["encryption-decryption","gnupg","python","signing","verification"],"latest_commit_sha":null,"homepage":"https://docs.red-dove.com/python-gnupg/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vsajip.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-12-10T11:18:04.000Z","updated_at":"2024-10-04T21:20:13.000Z","dependencies_parsed_at":"2024-03-13T10:31:01.073Z","dependency_job_id":"5f11da46-0a92-4850-9078-d840e00fb632","html_url":"https://github.com/vsajip/python-gnupg","commit_stats":{"total_commits":458,"total_committers":17,"mean_commits":"26.941176470588236","dds":0.06113537117903933,"last_synced_commit":"9e2a4f510a7e351794a055993d3a3f04fb289e00"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vsajip%2Fpython-gnupg","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vsajip%2Fpython-gnupg/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vsajip%2Fpython-gnupg/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vsajip%2Fpython-gnupg/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vsajip","download_url":"https://codeload.github.com/vsajip/python-gnupg/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254553958,"owners_count":22090417,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["encryption-decryption","gnupg","python","signing","verification"],"created_at":"2024-10-02T03:06:05.738Z","updated_at":"2025-05-16T15:07:39.305Z","avatar_url":"https://github.com/vsajip.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"|badge1| |badge2| |badge3|\n\n.. |badge1| image:: https://img.shields.io/github/actions/workflow/status/vsajip/python-gnupg/python-package.yml\n   :alt: GitHub test status\n\n.. |badge2| image:: https://img.shields.io/codecov/c/github/vsajip/python-gnupg\n   :target: https://app.codecov.io/gh/vsajip/python-gnupg\n   :alt: GitHub coverage status\n\n.. |badge3| image:: https://img.shields.io/pypi/v/python-gnupg\n   :target: https://pypi.org/project/python-gnupg/\n   :alt: PyPI package\n\n\nWhat is it?\n===========\n\nThe GNU Privacy Guard (gpg, or gpg.exe on Windows) is a command-line program\nwhich provides support for programmatic access via spawning a separate process\nto run it and then communicating with that process from your program.\n\nThis project, ``python-gnupg``, implements a Python library which takes care\nof the internal details and allows its users to generate and manage keys,\nencrypt and decrypt data, and sign and verify messages.\n\nInstallation\n============\n\nInstalling from PyPI\n--------------------\n\nYou can install this package from the Python Package Index (pyPI) by running::\n\n    pip install python-gnupg\n\n.. important::\n   There is at least one fork of this project, which was apparently created\n   because an earlier version of this software used the ``subprocess`` module\n   with ``shell=True``, making it vulnerable to shell injection. **This is no\n   longer the case**.\n\n   Forks may not be drop-in compatible with this software, so take care to use\n   the correct version, as indicated in the ``pip install`` command above.\n\n\nInstalling from a source distribution archive\n---------------------------------------------\nTo install this package from a source distribution archive, do the following:\n\n1. Extract all the files in the distribution archive to some directory on your\n   system.\n2. In that directory, run ``pip install .``, referencing a suitable ``pip`` (e.g. one\n   from a specific venv which you want to install to).\n3. Optionally, run ``python test_gnupg.py`` to ensure that the package is\n   working as expected.\n\nCredits\n=======\n\n* The developers of the GNU Privacy Guard.\n* The original version of this module was developed by Andrew Kuchling.\n* It was improved by Richard Jones.\n* It was further improved by Steve Traugott.\n\nThe present incarnation, based on the earlier versions, uses the ``subprocess``\nmodule and so works on Windows as well as Unix/Linux platforms. It's not,\nhowever, 100% backwards-compatible with earlier incarnations.\n\nChange log\n==========\n\n.. note:: GCnn refers to an issue nn on Google Code.\n\n\n0.5.5 (future)\n--------------\n\nReleased: Not yet\n\n* Fix #249: Handle fetching GPG version when not the first item in the configuration.\n\n* Fix #250: Capture uid info in a uid_map attribute of ScanKeys/ListKeys.\n\n\n0.5.4\n-----\n\nReleased: 2025-01-07\n\n* Fix #242: Handle exceptions in ``on_data`` callable.\n\n\n0.5.3\n-----\n\nReleased: 2024-09-20\n\n* Fix #117: Add WKD (Web Key Directory) support for auto-locating keys. Thanks to Myzel394\n  for the patch.\n\n* Fix #237: Ensure local variable is initialized even when an exception occurs.\n\n* Fix #239: Remove logging of decryption result.\n\n\n0.5.2\n-----\n\nReleased: 2023-12-12\n\n* Fix #228: Clarify documentation for encryption/decryption.\n\n* Make I/O buffer size configurable via ``buffer_size`` attribute on a ``GPG`` instance.\n\n\n0.5.1\n-----\n\nReleased: 2023-07-22\n\n* Added ``TRUST_EXPIRED`` to ``trust_keys``. Thanks to Leif Liddy for the patch.\n\n* Fix #206: Remove deprecated ``--always-trust`` in favour of ``--trust-model always``\n\n* Fix #208: Add ``status_detail`` attribute to result objects which is populated when\n  the status is ``'invalid recipient'`` (encryption/decryption) or ``'invalid signer'``\n  (signing). This attribute will be set when the result object's ``status`` attribute is\n  set to ``invalid recipient`` and will contain more information about the failure in the\n  form of ``reason:ident`` where ``reason`` is a text description of the reason, and\n  ``ident`` identifies the recipient key.\n\n* Add ``scan_keys_mem()`` function to scan keys in a string. Thanks to Sky Moore\n  for the patch.\n\n* Fix #214: Handle multiple signatures when one of them is invalid or unverified.\n\n* A ``problems`` attribute was added which holds problems reported by ``gpg``\n  during verification. This is a list of dictionaries, one for each reported\n  problem. Each dictionary will have ``status`` and ``keyid`` keys indicating\n  the problem and the corresponding key; other information in the dictionaries\n  will be error specific.\n\n* Fix #217: Use machine-readable interface to query the ``gpg`` version. Thanks to Justus\n  Winter for the patch.\n\n* Added the ability to export keys to a file. Thanks to Leif Liddy for the patch.\n\n\n0.5.0\n-----\n\nReleased: 2022-08-23\n\n* Fixed #181: Added the ability to pass file paths to encrypt_file, decrypt_file,\n  sign_file, verify_file, get_recipients_file and added import_keys_file.\n\n* Fixed #183: Handle FAILURE and UNEXPECTED conditions correctly. Thanks to sebbASF for\n  the patch.\n\n* Fixed #185: Handle VALIDSIG arguments more robustly.\n\n* Fixed #188: Remove handling of DECRYPTION_FAILED from Verify code, as not required\n  there. Thanks to sebbASF for the patch.\n\n* Fixed #190: Handle KEY_CREATED more robustly.\n\n* Fixed #191: Handle NODATA messages during verification.\n\n* Fixed #196: Don't log chunk data by default, as it could contain sensitive\n  information (during decryption, for example).\n\n* Added the ability to pass an environment to the gpg executable. Thanks to Edvard\n  Rejthar for the patch.\n\n\n0.4.9\n-----\n\nReleased: 2022-05-20\n\n* Fixed #161: Added a status attribute to the returned object from gen_key() which\n  is set to 'ok' if a key was successfully created, or 'key not created' if that\n  was reported by gpg, or None in any other case.\n\n* Fixed #164: Provided the ability to add subkeys. Thanks to Daniel Kilimnik for the\n  feature request and patch.\n\n* Fixed #166: Added keygrip values to the information collected when keys are listed.\n  Thanks to Daniel Kilimnik for the feature request and patch.\n\n* Fixed #173: Added extra_args to send_keys(), recv_keys() and search_keys() to allow\n  passing options relating to key servers.\n\n0.4.8\n-----\n\nReleased: 2021-11-24\n\n* Fixed #147: Return gpg's return code in all result instances.\n\n* Fixed #152: Add check for invalid file objects.\n\n* Fixed #157: Provide more useful status message when a secret key is absent.\n\n* Fixed #158: Added a get_recipients() API to find the recipients of an encrypted\n  message without decrypting it.\n\n\n0.4.7\n-----\n\nReleased: 2021-03-11\n\n* Fixed #129, #141: Added support for no passphrase during key generation.\n\n* Fixed #143: Improved permission-denied test. Thanks to Elliot Cameron for the patch.\n\n* Fixed #144: Updated logging to only show partial results.\n\n* Fixed #146: Allowed a passphrase to be passed to import_keys(). Thanks to Chris de\n  Graaf for the patch.\n\n\n0.4.6\n-----\n\nReleased: 2020-04-17\n\n* Fixed #122: Updated documentation about gnupghome needing to be an existing\n  directory.\n\n* Fixed #123: Handled error conditions from gpg when calling trust_keys().\n\n* Fixed #124: Avoided an exception being raised when ImportResult.summary()\n  was called after a failed recv_keys().\n\n* Fixed #128: Added ECC support by changing key generation parameters. (The Key-Length\n  value isn't added if a curve is specified.)\n\n* Fixed #130: Provided a mechanism to provide more complete error messages.\n\nSupport for Python versions 3.5 and under is discontinued, except for Python 2.7.\n\n\n0.4.5\n-----\n\nReleased: 2019-08-12\n\n* Fixed #107: Improved documentation.\n\n* Fixed #112: Raised a ValueError if a gnupghome is specified which is not an\n  existing directory.\n\n* Fixed #113: Corrected stale link in the documentation.\n\n* Fixed #116: Updated documentation to clarify when spurious key-expired/\n  signature-expired messages might be seen.\n\n* Fixed #119: Added --yes to avoid pinentry when deleting secret keys with\n  GnuPG \u003e= 2.1.\n\n* A warning is logged if gpg returns a non-zero return code.\n\n* Added ``extra_args`` to ``import_keys``.\n\n* Added support for CI using AppVeyor.\n\n\n0.4.4\n-----\n\nReleased: 2019-01-24\n\n* Fixed #108: Changed how any return value from the ``on_data`` callable is\n  processed. In earlier versions, the return value was ignored. In this version,\n  if the return value is ``False``, the data received from ``gpg`` is not\n  buffered. Otherwise (if the value is ``None`` or ``True``, for example), the\n  data is buffered as normal. This functionality can be used to do your own\n  buffering, or to prevent buffering altogether.\n\n  The ``on_data`` callable is also called once with an empty byte-string to\n  signal the end of data from ``gpg``.\n\n* Fixed #97: Added an additional attribute ``check_fingerprint_collisions`` to\n  ``GPG`` instances, which defaults to ``False``. It seems that ``gpg`` is happy\n  to have duplicate keys and fingerprints in a keyring, so we can't be too\n  strict. A user can set this attribute of an instance to ``True`` to trigger a\n  check for collisions.\n\n* Fixed #111: With GnuPG 2.2.7 or later, provide the fingerprint of a signing\n  key for a failed signature verification, if available.\n\n* Fixed #21: For verification where multiple signatures are involved, a\n  mapping of signature_ids to fingerprint, keyid, username, creation date,\n  creation timestamp and expiry timestamp is provided.\n\n* Added a check to disallow certain control characters ('\\r', '\\n', NUL) in\n  passphrases.\n\n\n0.4.3\n-----\n\nReleased: 2018-06-13\n\n* Added --no-verbose to the gpg command line, in case verbose is specified in\n  gpg.conf - we don't need verbose output.\n\n\n0.4.2\n-----\n\nReleased: 2018-03-28\n\n* Fixed #81: Subkey information is now collected and returned in a ``subkey_info``\n  dictionary keyed by the subkey's ID.\n\n* Fixed #84: GPG2 version is now correctly detected on OS X.\n\n* Fixed #94: Added ``expect_passphrase`` password for use on GnuPG \u003e= 2.1 when\n  passing passphrase to ``gpg`` via pinentry.\n\n* Fixed #95: Provided a ``trust_keys`` method to allow setting the trust level\n  for keys. Thanks to William Foster for a suggested implementation.\n\n* Made the exception message when the gpg executable is not found contain the\n  path of the executable that was tried. Thanks to Kostis Anagnostopoulos for\n  the suggestion.\n\n* Fixed #100: Made the error message less categorical in the case of a failure\n  with an unspecified reason, adding some information from gpg error codes when\n  available.\n\n\n0.4.1\n-----\n\nReleased: 2017-07-06\n\n* Updated message handling logic to no longer raise exceptions when a message\n  isn't recognised. Thanks to Daniel Kahn Gillmor for the patch.\n\n* Always use always use ``--fixed-list-mode``, ``--batch`` and\n  ``--with-colons``. Thanks to Daniel Kahn Gillmor for the patch.\n\n* Improved ``scan_keys()`` handling on GnuPG \u003e= 2.1. Thanks to Daniel Kahn\n  Gillmor for the patch.\n\n* Improved test behaviour with GnuPG \u003e= 2.1. Failures when deleting test\n  directory trees are now ignored. Thanks to Daniel Kahn Gillmor for the patch.\n\n* Added ``close_file`` keyword argument to verify_file to allow the file closing\n  to be made optional. Current behaviour is maintained - ``close_file=False``\n  can be passed to skip closing the file being verified.\n\n* Added the ``extra_args`` keyword parameter to allow custom arguments to be\n  passed to the ``gpg`` executable.\n\n* Instances of the ``GPG`` class now have an additional ``on_data`` attribute,\n  which defaults to ``None``. It can be set to a callable which will be called\n  with a single argument - a binary chunk of data received from the ``gpg``\n  executable. The callable can do whatever it likes with the chunks passed to it\n  - e.g. write them to a separate stream. The callable should not raise any\n  exceptions (unless it wants the current operation to fail).\n\n\n0.4.0\n-----\n\nReleased: 2017-01-29\n\n* Added support for ``KEY_CONSIDERED`` in more places - encryption /\n  decryption, signing, key generation and key import.\n\n* Partial fix for #32 (GPG 2.1 compatibility). Unfortunately, better\n  support cannot be provided at this point, unless there are certain\n  changes (relating to pinentry popups) in how GPG 2.1 works.\n\n* Fixed #60: An IndexError was being thrown by ``scan_keys()``.\n\n* Ensured that utf-8 encoding is used when the ``--with-column`` mode is\n  used. Thanks to Yann Leboulanger for the patch.\n\n* ``list_keys()`` now uses ``--fixed-list-mode``. Thanks to Werner Koch\n  for the pointer.\n\n\n0.3.9\n-----\n\nReleased: 2016-09-10\n\n* Fixed #38: You can now request information about signatures against\n  keys. Thanks to SunDwarf for the suggestion and patch, which was used\n  as a basis for this change.\n\n* Fixed #49: When exporting keys, no attempt is made to decode the output when\n  armor=False is specified.\n\n* Fixed #53: A ``FAILURE`` message caused by passing an incorrect passphrase\n  is handled.\n\n* Handled ``EXPORTED`` and ``EXPORT_RES`` messages while exporting keys. Thanks\n  to Marcel Pörner for the patch.\n\n* Fixed #54: Improved error message shown when gpg is not available.\n\n* Fixed #55: Added support for ``KEY_CONSIDERED`` while verifying.\n\n* Avoided encoding problems with filenames under Windows. Thanks to Kévin\n  Bernard-Allies for the patch.\n\n* Fixed #57: Used a better mechanism for comparing keys.\n\n\n0.3.8\n-----\n\nReleased: 2015-09-24\n\n* Fixed #22: handled ``PROGRESS`` messages during verification and signing.\n\n* Fixed #26: handled ``PINENTRY_LAUNCHED`` messages during verification,\n  decryption and key generation.\n\n* Fixed #28: Allowed a default Name-Email to be computed even when neither of\n  ``LOGNAME`` and ``USERNAME`` are in the environment.\n\n* Fixed #29: Included test files missing from the tarball in previous versions.\n\n* Fixed #39: On Python 3.x, passing a text instead of a binary stream caused\n  file decryption to hang due to a ``UnicodeDecodeError``. This has now been\n  correctly handled: The decryption fails with a \"no data\" status.\n\n* Fixed #41: Handled Unicode filenames correctly by encoding them on 2.x using\n  the file system encoding.\n\n* Fixed #43: handled ``PINENTRY_LAUNCHED`` messages during key export. Thanks\n  to Ian Denhardt for looking into this.\n\n* Hide the console window which appears on Windows when gpg is spawned.\n  Thanks to Kévin Bernard-Allies for the patch.\n\n* Subkey fingerprints are now captured.\n\n* The returned value from the ``list_keys`` method now has a new attribute,\n  ``key_map``, which is a dictionary mapping key and subkey fingerprints to\n  the corresponding key's dictionary. With this change, you don't need to\n  iterate over the (potentially large) returned list to search for a key with\n  a given fingerprint - the ``key_map`` dict will take you straight to the key\n  info, whether the fingerprint you have is for a key or a subkey. Thanks to\n  Nick Daly for the initial suggestion.\n\n0.3.7\n-----\n\nReleased: 2014-12-07\n\nSigned with PGP key: Vinay Sajip (CODE SIGNING KEY) \u003cvinay_sajip@yahoo.co.uk\u003e\n\nKey Fingerprint    : CA74 9061 914E AC13 8E66 EADB 9147 B477 339A 9B86\n\n* Added an ``output`` keyword parameter to the ``sign`` and\n  ``sign_file`` methods, to allow writing the signature to a file.\n  Thanks to Jannis Leidel for the patch.\n\n* Allowed specifying ``True`` for the ``sign`` keyword parameter,\n  which allows use of the default key for signing and avoids having to\n  specify a key id when it's desired to use the default. Thanks to\n  Fabian Beutel for the patch.\n\n* Used a uniform approach with subprocess on Windows and POSIX: shell=True\n  is not used on either.\n\n* When signing/verifying, the status is updated to reflect any expired or\n  revoked keys or signatures.\n\n* Handled 'NOTATION_NAME' and 'NOTATION_DATA' during verification.\n\n* Fixed #1, #16, #18, #20: Quoting approach changed, since now shell=False.\n\n* Fixed #14: Handled 'NEED_PASSPHRASE_PIN' message.\n\n* Fixed #8: Added a scan_keys method to allow scanning of keys without the\n  need to import into a keyring. Thanks to Venzen Khaosan for the suggestion.\n\n* Fixed #5: Added '0x' prefix when searching for keys. Thanks to Aaron Toponce\n  for the report.\n\n* Fixed #4: Handled 'PROGRESS' message during encryption. Thanks to Daniel\n  Mills for the report.\n\n* Fixed #3: Changed default encoding to Latin-1.\n\n* Fixed #2: Raised ValueError if no recipients were specified\n  for an asymmetric encryption request.\n\n* Handled 'UNEXPECTED' message during verification. Thanks to\n  David Andersen for the patch.\n\n* Replaced old range(len(X)) idiom with enumerate().\n\n* Refactored ``ListKeys`` / ``SearchKeys`` classes to maximise use of common\n  functions.\n\n* Fixed GC94: Added ``export-minimal`` and ``armor`` options when exporting\n  keys. This addition was inadvertently left out of 0.3.6.\n\n0.3.6\n-----\n\nReleased: 2014-02-05\n\n* Fixed GC82: Enabled fast random tests on gpg as well as gpg2.\n* Fixed GC85: Avoided deleting temporary file to preserve its permissions.\n* Fixed GC87: Avoided writing passphrase to log.\n* Fixed GC95: Added ``verify_data()`` method to allow verification of\n  signatures in memory.\n* Fixed GC96: Regularised end-of-line characters.\n* Fixed GC98: Rectified problems with earlier fix for shell injection.\n\n0.3.5\n-----\n\nReleased: 2013-08-30\n\n* Added improved shell quoting to guard against shell injection.\n* Fixed GC76: Added ``search_keys()`` and ``send_keys()`` methods.\n* Fixed GC77: Allowed specifying a symmetric cipher algorithm.\n* Fixed GC78: Fell back to utf-8 encoding when no other could be determined.\n* Fixed GC79: Default key length is now 2048 bits.\n* Fixed GC80: Removed the Name-Comment default in key generation.\n\n0.3.4\n-----\n\nReleased: 2013-06-05\n\n* Fixed GC65: Fixed encoding exception when getting version.\n* Fixed GC66: Now accepts sets and frozensets where appropriate.\n* Fixed GC67: Hash algorithm now captured in sign result.\n* Fixed GC68: Added support for ``--secret-keyring``.\n* Fixed GC70: Added support for multiple keyrings.\n\n0.3.3\n-----\n\nReleased: 2013-03-11\n\n* Fixed GC57: Handled control characters in ``list_keys()``.\n* Fixed GC61: Enabled fast random for testing.\n* Fixed GC62: Handled ``KEYEXPIRED`` status.\n* Fixed GC63: Handled ``NO_SGNR`` status.\n\n0.3.2\n-----\n\nReleased: 2013-01-17\n\n* Fixed GC56: Disallowed blank values in key generation.\n* Fixed GC57: Handled colons and other characters in ``list_keys()``.\n* Fixed GC59/GC60: Handled ``INV_SGNR`` status during verification and removed\n  calls requiring interactive password input from doctests.\n\n0.3.1\n-----\n\nReleased: 2012-09-01\n\n* Fixed GC45: Allowed additional arguments to gpg executable.\n* Fixed GC50: Used latin-1 encoding in tests when it's known to be required.\n* Fixed GC51: Test now returns non-zero exit status on test failure.\n* Fixed GC53: Now handles ``INV_SGNR`` and ``KEY_NOT_CREATED`` statuses.\n* Fixed GC55: Verification and decryption now return trust level of signer in\n  integer and text form.\n\n0.3.0\n-----\n\nReleased: 2012-05-12\n\n* Fixed GC49: Reinstated Yann Leboulanger's change to support subkeys\n  (accidentally left out in 0.2.7).\n\n0.2.9\n-----\n\nReleased: 2012-03-29\n\n* Fixed GC36: Now handles ``CARDCTRL`` and ``POLICY_URL`` messages.\n* Fixed GC40: Now handles ``DECRYPTION_INFO``, ``DECRYPTION_FAILED`` and\n  ``DECRYPTION_OKAY`` messages.\n* The ``random_binary_data file`` is no longer shipped, but constructed by the\n  test suite if needed.\n\n0.2.8\n-----\n\nReleased: 2011-09-02\n\n* Fixed GC29: Now handles ``IMPORT_RES`` while verifying.\n* Fixed GC30: Fixed an encoding problem.\n* Fixed GC33: Quoted arguments for added safety.\n\n0.2.7\n-----\n\nReleased: 2011-04-10\n\n* Fixed GC24: License is clarified as BSD.\n* Fixed GC25: Incorporated Daniel Folkinshteyn's changes.\n* Fixed GC26: Incorporated Yann Leboulanger's subkey change.\n* Fixed GC27: Incorporated hysterix's support for symmetric encryption.\n* Did some internal cleanups of Unicode handling.\n\n0.2.6\n-----\n\nReleased: 2011-01-25\n\n* Fixed GC14: Should be able to accept passphrases from GPG-Agent.\n* Fixed GC19: Should be able to create a detached signature.\n* Fixed GC21/GC23: Better handling of less common responses from GPG.\n\n0.2.5\n-----\n\nReleased: 2010-10-13\n\n* Fixed GC11/GC16: Detached signatures can now be created.\n* Fixed GC3: Detached signatures can be verified.\n* Fixed GC12: Better support for RSA and IDEA.\n* Fixed GC15/GC17: Better support for non-ASCII input.\n\n0.2.4\n-----\n\nReleased: 2010-03-01\n\n* Fixed GC9: Now allows encryption without armor and the ability to encrypt\n  and decrypt directly to/from files.\n\n0.2.3\n-----\n\nReleased: 2010-01-07\n\n* Fixed GC7: Made sending data to process threaded and added a test case.\n  With a test data file used by the test case, the archive size has gone up\n  to 5MB (the size of the test file).\n\n0.2.2\n-----\n\nReleased: 2009-10-06\n\n* Fixed GC5/GC6: Added ``--batch`` when specifying ``--passphrase-fd`` and\n  changed the name of the distribution file to add the ``python-`` prefix.\n\n0.2.1\n-----\n\nReleased: 2009-08-07\n\n* Fixed GC2: Added ``handle_status()`` method to the ``ListKeys`` class.\n\n0.2.0\n-----\n\nReleased: 2009-07-16\n\n* Various changes made to support Python 3.0.\n\n0.1.0\n-----\n\nReleased: 2009-07-04\n\n* Initial release.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvsajip%2Fpython-gnupg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvsajip%2Fpython-gnupg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvsajip%2Fpython-gnupg/lists"}