{ "info": { "author": "The Health Agency and the Zope Community", "author_email": "zope3-dev@zope.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Zope3", "Intended Audience :: Developers", "License :: OSI Approved :: Zope Public License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet :: WWW/HTTP" ], "description": "============\n z3c.bcrypt\n============\n\n.. warning:: z3c.bcrypt has been superseeded with the new version of\n `zope.password`_ as it now includes `bcrypt` support based on\n the well-maintained `bcrypt`_ library. Please don't use\n this package in new projects.\n\nz3c.bcrypt provides `zope.password`_ compatible \"password manager\" utilities\nthat use bcrypt (or alternatively pbkdf2) encoding for storing passwords.\n\nBoth encoding schemes are implemented in the cryptacular_ library that is\na dependency for this package.\n\n.. _`zope.password`: https://pypi.org/project/zope.password/\n.. _cryptacular: https://pypi.org/project/cryptacular/\n.. _`bcrypt`: https://pypi.org/project/bcrypt/\n\n\n==================\n Using z3c.bcrypt\n==================\n\n >>> from zope.interface.verify import verifyObject\n >>> from zope.password.interfaces import IPasswordManager\n >>> from z3c.bcrypt import BcryptPasswordManager\n >>> manager = BcryptPasswordManager()\n >>> verifyObject(IPasswordManager, manager)\n True\n\n >>> password = u\"right \\N{CYRILLIC CAPITAL LETTER A}\"\n\n >>> encoded = manager.encodePassword(password)\n >>> encoded\n '$2a$...'\n >>> manager.checkPassword(encoded, password)\n True\n >>> manager.checkPassword(encoded, password + u\"wrong\")\n False\n\n >>> from z3c.bcrypt import PBKDF2PasswordManager\n >>> manager = PBKDF2PasswordManager()\n >>> verifyObject(IPasswordManager, manager)\n True\n\n >>> encoded = manager.encodePassword(password)\n >>> encoded\n u'$p5k2$...'\n >>> manager.checkPassword(encoded, password)\n True\n >>> manager.checkPassword(encoded, password + u\"wrong\")\n False\n\n >>> # A previously encoded password, should be decodable even if the\n >>> # current encoding of the same password is different::\n >>> previouslyencoded = (\n ... '$p5k2$1000$LgAFPIlc9CgrlSaxHyTUMA='\n ... '=$IuUYplhMkR4qCl8-ONRVjEgJNwE=')\n >>> encoded == previouslyencoded\n False\n >>> manager.checkPassword(previouslyencoded , password)\n True\n\nExcessively long \"passwords\" will take up a lot of computation time that\ncan be used as a DOS attack vector. The password managers in z3c.bcrypt will\nonly use the first 4096 characters of the incoming password for checking.\n\nThis is inspired by:\n\n https://www.djangoproject.com/weblog/2013/sep/15/security/\n\nThis test would take significantly longer if the 4096 length limit would\nnot be in place. XXX how to test that reliably?\n\n >>> incomming = '$p5k2$1000$' + 'a' * 1024 * 1024 * 100 # lot of data.\n >>> manager.checkPassword(encoded, incomming)\n False\n\nConfiguration\n=============\n\nThis package provides a ``configure.zcml`` which installs\nimplementations of the ``IPasswordManager`` as utilities:\n\n >>> from zope.configuration import xmlconfig\n >>> _ = xmlconfig.string(\"\"\"\n ... \n ...\n ... \n ... \n ... \"\"\")\n\n >>> from zope import component\n >>> from zope.password.interfaces import IPasswordManager\n >>> component.getUtility(IPasswordManager, name='bcrypt')\n \n >>> component.getUtility(IPasswordManager, name='pbkdf2')\n \n\n\n=========================\n Changelog of z3c.bcrypt\n=========================\n\n2.0.1 (2018-08-01)\n==================\n\n- Package is deprecated in favor of `zope.password`_.\n\n2.0.0 (2017-05-10)\n==================\n\n- Standardize namespace __init__.\n\n- Add support for Python 3.4, 3.5, 3.6 and PyPy.\n\n1.2 (2013-10-10)\n================\n\n- Only verify the first 4096 characters of a password to prevent\n denial-of-service attacks through repeated submission of large\n passwords, tying up server resources in the expensive computation\n of the corresponding hashes.\n\n See: https://www.djangoproject.com/weblog/2013/sep/15/security/\n\n1.1 (2010-02-22)\n================\n\n- Fixes in the configure.zcml.\n\n1.0 (2010-02-18)\n================\n\n- Initial public release.\n\n.. _`zope.password`: https://pypi.org/project/zope.password/\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/zopefoundation/z3c.bcrypt", "keywords": "zope authentication password bcrypy pbkdf2", "license": "ZPL 2.1", "maintainer": "", "maintainer_email": "", "name": "z3c.bcrypt", "package_url": "https://pypi.org/project/z3c.bcrypt/", "platform": "", "project_url": "https://pypi.org/project/z3c.bcrypt/", "project_urls": { "Homepage": "http://github.com/zopefoundation/z3c.bcrypt" }, "release_url": "https://pypi.org/project/z3c.bcrypt/2.0.1/", "requires_dist": null, "requires_python": "", "summary": "Password manager utility using bcrypt or pbkdf2 encoding. Useful in combination with zope.password", "version": "2.0.1" }, "last_serial": 4124754, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "ab05cd8fbc2a93c34c3eede658bf2b05", "sha256": "c970e1bc48a3f26ba3c5ce123961dd90d8d12c2644198cf1c4ecf4f1763795e6" }, "downloads": -1, "filename": "z3c.bcrypt-1.0.tar.gz", "has_sig": false, "md5_digest": "ab05cd8fbc2a93c34c3eede658bf2b05", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5155, "upload_time": "2010-02-18T14:19:41", "url": "https://files.pythonhosted.org/packages/2a/46/d05927181d24e2deb20cccbfc0b27d819f436777b5c655db6b92c4489c40/z3c.bcrypt-1.0.tar.gz" } ], "1.0dev": [], "1.1": [ { "comment_text": "", "digests": { "md5": "25a0bd3cf255f3e3422ffbd3c072fdc7", "sha256": "d2165a4fd3470f30009002c2b5bb94a701e57295ccb4acc4a5c75e418a2c9c23" }, "downloads": -1, "filename": "z3c.bcrypt-1.1.tar.gz", "has_sig": false, "md5_digest": "25a0bd3cf255f3e3422ffbd3c072fdc7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5185, "upload_time": "2010-02-22T11:18:14", "url": "https://files.pythonhosted.org/packages/d7/9f/749e39ac369c52cb867dc3632552f377296382e9d8645199ae81a81a19d1/z3c.bcrypt-1.1.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "1a7e6a2a8f2f0a8db20b1abcca6fa3ab", "sha256": "3ba4be34d37c49f70aab0b147a333c955b2bfcc3670b3b3d8aec6f4f35091bfc" }, "downloads": -1, "filename": "z3c.bcrypt-1.2.zip", "has_sig": false, "md5_digest": "1a7e6a2a8f2f0a8db20b1abcca6fa3ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12887, "upload_time": "2013-10-10T11:01:32", "url": "https://files.pythonhosted.org/packages/d2/6c/9f286617d8e470c7a1c715d8a7b653af0d9ef3837ea541c9d7632b4b04dc/z3c.bcrypt-1.2.zip" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "97b3d425bac4d9c2ef64525137d16beb", "sha256": "35215c8b9270ba050039072e3875717aed14a0c324571ec41408e5543a48db7d" }, "downloads": -1, "filename": "z3c.bcrypt-2.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "97b3d425bac4d9c2ef64525137d16beb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9569, "upload_time": "2017-05-10T11:25:02", "url": "https://files.pythonhosted.org/packages/82/02/23625f78d2d2cd7635f1dff9e2e340ec28d21270647e9541ac21feca90ff/z3c.bcrypt-2.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ae6787f56dcd61d75de08f52c2ddba44", "sha256": "cbc3439307e23dc5dcaf6bc18f374a205fe208007ff6e7fa3c7189fa405a50cc" }, "downloads": -1, "filename": "z3c.bcrypt-2.0.0.tar.gz", "has_sig": false, "md5_digest": "ae6787f56dcd61d75de08f52c2ddba44", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6917, "upload_time": "2017-05-10T11:25:04", "url": "https://files.pythonhosted.org/packages/89/68/00ab70a32b7cc8a6efb9fa88e1b57457de3efca683d5644750b39b9a0a22/z3c.bcrypt-2.0.0.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "9d87b828fba7303e18c8d1cdcea41b6c", "sha256": "3f12b07769d71596babb553a172088426ca2b92c28a034ecb948a138056c1f1f" }, "downloads": -1, "filename": "z3c.bcrypt-2.0.1.tar.gz", "has_sig": false, "md5_digest": "9d87b828fba7303e18c8d1cdcea41b6c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7642, "upload_time": "2018-08-01T13:16:29", "url": "https://files.pythonhosted.org/packages/c3/69/44e1fd04b264e9efc670f4d55e3da34ddfbf827d6bcdcb617f7f9c958a2f/z3c.bcrypt-2.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9d87b828fba7303e18c8d1cdcea41b6c", "sha256": "3f12b07769d71596babb553a172088426ca2b92c28a034ecb948a138056c1f1f" }, "downloads": -1, "filename": "z3c.bcrypt-2.0.1.tar.gz", "has_sig": false, "md5_digest": "9d87b828fba7303e18c8d1cdcea41b6c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7642, "upload_time": "2018-08-01T13:16:29", "url": "https://files.pythonhosted.org/packages/c3/69/44e1fd04b264e9efc670f4d55e3da34ddfbf827d6bcdcb617f7f9c958a2f/z3c.bcrypt-2.0.1.tar.gz" } ] }