{ "info": { "author": "Jan Varho", "author_email": "jan@varho.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: ISC License (ISCL)", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Security :: Cryptography", "Topic :: Software Development :: Libraries" ], "description": "Scrypt for Python\n==\n\n[![Build Status](https://travis-ci.org/jvarho/pylibscrypt.svg)](https://travis-ci.org/jvarho/pylibscrypt)\n[![Coverage Status](https://coveralls.io/repos/github/jvarho/pylibscrypt/badge.svg?branch=master)](https://coveralls.io/github/jvarho/pylibscrypt?branch=master)\n[![PyPI version](https://img.shields.io/pypi/v/pylibscrypt.svg)](https://pypi.python.org/pypi/pylibscrypt)\n\nThere are a lot of different scrypt modules for Python, but none of them have\neverything that I'd like, so here's One More[1].\n\n\nFeatures\n--\n* Uses hashlib.scrypt on Python 3.6 and OpenSSL 1.1.\n* Uses system libscrypt[2] as the next choice.\n* If neither is available, tries the scrypt Python module[3] or libsodium[4].\n* Offers a pure Python scrypt implementation for when there is no C scrypt.\n* Not unusably slow, even in pure Python... at least with pypy[5].\n\nWith PyPy as the interpreter the Python implementation is around one fifth the\nspeed of C scrypt. With CPython it is between about 50x and 250x slower.\n\n\nRequirements\n--\n* Python 2.7.8+ or 3.4+. Equivalent versions of PyPy should also work.\n* If you want speed, you should use one of:\n - libscrypt 1.8+ (older may work)\n - py-scrypt 0.6+ (pip install scrypt)\n - libsodium 1.0+\n - Python 3.6+ with OpenSSL 1.1+\n\n\nUsage\n--\n\nYou can install the most recent release from PyPi using:\n\n pip install pylibscrypt\n\nYou most likely want to create MCF hashes and store them somewhere, then check\nuser-entered passwords against those hashes. For that you only need to use two\nfunctions from the API:\n\n from pylibscrypt import scrypt_mcf, scrypt_mcf_check\n # Generate an MCF hash with random salt\n mcf = scrypt_mcf(b'Hello World')\n # Test it\n print(scrypt_mcf_check(mcf, b'Hello World')) # prints True\n print(scrypt_mcf_check(mcf, b'HelloPyWorld')) # prints False\n\nFor full API, you can try help(pylibscrypt) from python after importing.\n\nIt is highly recommended that you use a random salt, i.e. don't pass one.\n\n\nVersioning\n--\nThe package has a version number that can be read from python like so:\n\n print(pylibscrypt.__version__)\n\nThe version number is of the form X.Y.Z, following Semantic Versioning[6].\nReleases are tagged vX.Y.Z and release branches bX.Y.x when they differ from\nmaster.\n\n\nDevelopment\n--\nDevelopment happens on GitHub[7]. If you find a bug, please open an issue there.\n\nRunning pylibscrypt.tests will test all implementations with some quick tests.\nRunning any implementation directly (e.g. pylibscrypt.pylibsodium) will also\ncompare to scrypt test vectors from the paper but this is slow for the pure\nPython version (pypyscrypt) unless running with pypy.\n\nYou can test more comprehensively using the docker test environment. Either\nbuild and run using `make docker-run` or pull the jvarho/pylibscrypt image and\nrun using `docker run -v ${PWD}:/app jvarho/pylibscrypt`.\n\nPull requests should be automatically tested and will not be merged if broken.\n\n[1]:https://xkcd.com/927/\n[2]:https://github.com/technion/libscrypt\n[3]:https://bitbucket.org/mhallin/py-scrypt/src\n[4]:https://github.com/jedisct1/libsodium\n[5]:http://pypy.org/\n[6]:http://semver.org/spec/v2.0.0.html\n[7]:https://github.com/jvarho/pylibscrypt\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jvarho/pylibscrypt", "keywords": "", "license": "ISC License", "maintainer": "", "maintainer_email": "", "name": "pylibscrypt", "package_url": "https://pypi.org/project/pylibscrypt/", "platform": "", "project_url": "https://pypi.org/project/pylibscrypt/", "project_urls": { "Homepage": "https://github.com/jvarho/pylibscrypt" }, "release_url": "https://pypi.org/project/pylibscrypt/1.8.0/", "requires_dist": null, "requires_python": "", "summary": "Scrypt for Python", "version": "1.8.0" }, "last_serial": 4918613, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "8a697c8ac11a63f60338f94d26ab66c7", "sha256": "a25fec060aadcb0fc1a98131176daad9ee660de69379c905525b94c7569508fb" }, "downloads": -1, "filename": "pylibscrypt-1.0.0.tar.gz", "has_sig": false, "md5_digest": "8a697c8ac11a63f60338f94d26ab66c7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10141, "upload_time": "2014-05-02T14:35:01", "url": "https://files.pythonhosted.org/packages/ed/46/c1b851a928c36248e7fec1b91065ac39efe06c28ae3137400b3fd3b29fe6/pylibscrypt-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "fa52e1a605e3bda2a1e0f8a60c7f0e19", "sha256": "68ae53716b7fcf801fc0a38c60ca3cdb239eb87f32e4b3163a95df1b7be92aaf" }, "downloads": -1, "filename": "pylibscrypt-1.0.1.tar.gz", "has_sig": false, "md5_digest": "fa52e1a605e3bda2a1e0f8a60c7f0e19", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10694, "upload_time": "2014-05-03T07:25:10", "url": "https://files.pythonhosted.org/packages/4b/90/fb0fffd458f8add6834ebb274aab7f56cbd0471599570fb6f8584ffdaa2d/pylibscrypt-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "160622a382d5788796c53a420282da6b", "sha256": "94a76eccc13dfc325956089c181b0db52a6a4c19e2bdc1b7a94369c01c5eedfc" }, "downloads": -1, "filename": "pylibscrypt-1.0.2.tar.gz", "has_sig": false, "md5_digest": "160622a382d5788796c53a420282da6b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10512, "upload_time": "2014-05-03T07:51:34", "url": "https://files.pythonhosted.org/packages/87/6a/f8ea2c7010cc20fc0ccda9c6249bc7fed652a21cf8c63de4ccd07056b8c5/pylibscrypt-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "e61b14c37172e7e448fe0db547b5bba6", "sha256": "ab9702014f7cde512bff4825335590fc1e39874c0c7e1b283e07af888302e549" }, "downloads": -1, "filename": "pylibscrypt-1.0.3.tar.gz", "has_sig": false, "md5_digest": "e61b14c37172e7e448fe0db547b5bba6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10534, "upload_time": "2014-05-05T10:34:29", "url": "https://files.pythonhosted.org/packages/c6/ca/893ccc3bbe05c5fd5c4cd1a65eecebdab443f1d16031518f40b069d637c8/pylibscrypt-1.0.3.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "2f51dc388d2ec9b6b90c82915ce1509d", "sha256": "87c3e3d362b23027c81b38612bb07c97223b88eaffcf95190da64c395a0817a7" }, "downloads": -1, "filename": "pylibscrypt-1.1.0.tar.gz", "has_sig": false, "md5_digest": "2f51dc388d2ec9b6b90c82915ce1509d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11936, "upload_time": "2014-05-08T09:19:44", "url": "https://files.pythonhosted.org/packages/5f/55/08c9edb0a4a0a0ca1abbc5b319d2d7092720b0b9343285ca01ca0773d2e0/pylibscrypt-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "dddc676570f32aa41aad157e3278c4ce", "sha256": "54a8a2922e87c5eeae687170e774ae631e2c4f0e8626e1fa307a44a1fed71ac7" }, "downloads": -1, "filename": "pylibscrypt-1.1.1.tar.gz", "has_sig": false, "md5_digest": "dddc676570f32aa41aad157e3278c4ce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11953, "upload_time": "2014-05-12T17:04:17", "url": "https://files.pythonhosted.org/packages/ce/cf/a45dc8840455042b2e8814a50254e706eb226f31ad8efd4a39b535ad170f/pylibscrypt-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "cf847acd95d7fc335cc3f1ed43d90b22", "sha256": "01e8f7d6db6f483aa78054e7c8add091887238e9732d2033961f6e8a5c31cdb6" }, "downloads": -1, "filename": "pylibscrypt-1.1.2.tar.gz", "has_sig": false, "md5_digest": "cf847acd95d7fc335cc3f1ed43d90b22", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11986, "upload_time": "2014-05-12T18:02:18", "url": "https://files.pythonhosted.org/packages/88/7b/76a837c46de4e9e4cf7afd7e4ea126efe247cd80522be5622fbaeb80723f/pylibscrypt-1.1.2.tar.gz" } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "9f2be5c58452503c3a074fb176673e77", "sha256": "d1f293eebf78df2f237c593055bd0ffa311557040640a4a62a11536d8d0e46cd" }, "downloads": -1, "filename": "pylibscrypt-1.1.3.tar.gz", "has_sig": false, "md5_digest": "9f2be5c58452503c3a074fb176673e77", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12450, "upload_time": "2014-05-16T07:25:30", "url": "https://files.pythonhosted.org/packages/78/03/1e56d3ffaa2d7e2876778c138757515c6deab06d6a0b423dcf5bd5f58a50/pylibscrypt-1.1.3.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "dedafce2d4406c370a53a80271140f57", "sha256": "34f3cf12b843ddb8c454034907da7dc9ea2be538558f5645bf48b3df5d766ae6" }, "downloads": -1, "filename": "pylibscrypt-1.2.0.tar.gz", "has_sig": false, "md5_digest": "dedafce2d4406c370a53a80271140f57", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18047, "upload_time": "2014-05-16T10:18:59", "url": "https://files.pythonhosted.org/packages/a1/78/34713831c167f47045fecdfb78674d4253933affb6c4d459fafc4b329fd3/pylibscrypt-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "f17cf47262dd2c8556810b7182b8a9e5", "sha256": "39a772291ff6312e414e6d8bdc59bfe3f39342da5dec4a5abf4914b8192dc96e" }, "downloads": -1, "filename": "pylibscrypt-1.2.1.tar.gz", "has_sig": false, "md5_digest": "f17cf47262dd2c8556810b7182b8a9e5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18056, "upload_time": "2014-05-17T10:04:59", "url": "https://files.pythonhosted.org/packages/77/13/b12fa19ed36aee20b5faad6061a514b6c25acef7a92557ffb93d8f6bfbc6/pylibscrypt-1.2.1.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "35d23e6769faf1b1f74f5e54fe18bd1a", "sha256": "a2b4d50465add6d9b26d3a8a34ad777820dd03167e7d7b03ae99f1d9b6d095b0" }, "downloads": -1, "filename": "pylibscrypt-1.3.0.tar.gz", "has_sig": false, "md5_digest": "35d23e6769faf1b1f74f5e54fe18bd1a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20028, "upload_time": "2014-07-08T09:07:41", "url": "https://files.pythonhosted.org/packages/b9/f0/2095142b06576d4365e8397b0dbabc875eee2851f83d0a6911c2fc77154b/pylibscrypt-1.3.0.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "77a2fc153e7d9b12b2f45ab24bb1480a", "sha256": "640f6080db9d8bee250fc18d5dd0f164ffd4d88575ac101c39ff94a0169968f8" }, "downloads": -1, "filename": "pylibscrypt-1.4.0.tar.gz", "has_sig": false, "md5_digest": "77a2fc153e7d9b12b2f45ab24bb1480a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20358, "upload_time": "2015-03-23T09:33:47", "url": "https://files.pythonhosted.org/packages/e4/82/5d33388d84f87e37e72064ce9c9273f3c1d3d7b3bf8c8129e2d4226e0a84/pylibscrypt-1.4.0.tar.gz" } ], "1.4.1": [ { "comment_text": "", "digests": { "md5": "c4d986a3df9026aeca5050cbd16bf088", "sha256": "90c0deaa9a8a638edce4c0962c56b4f5f4dd420c9719e001ba776b62c7f8539a" }, "downloads": -1, "filename": "pylibscrypt-1.4.1.tar.gz", "has_sig": false, "md5_digest": "c4d986a3df9026aeca5050cbd16bf088", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20333, "upload_time": "2015-03-27T06:48:42", "url": "https://files.pythonhosted.org/packages/62/31/97232cd5c2b8851fa8ccc5ce7e4d5992be0fdbc5d5a8a6fbfb59f1b09070/pylibscrypt-1.4.1.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "cc269bb35d2e71a7e8485eeee8c08215", "sha256": "43b4ad95a09b085d47b3cd1aac6f5f9194caf8adbad7ab4099123f2d8f38a878" }, "downloads": -1, "filename": "pylibscrypt-1.5.0.tar.gz", "has_sig": false, "md5_digest": "cc269bb35d2e71a7e8485eeee8c08215", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20692, "upload_time": "2015-09-07T11:24:30", "url": "https://files.pythonhosted.org/packages/82/92/701271bfb185bbb390f55df237071ddd5ccd1beaeaac0b8579c6c56437e0/pylibscrypt-1.5.0.tar.gz" } ], "1.5.1": [ { "comment_text": "", "digests": { "md5": "24abf43a072408603640cc0b733d9fef", "sha256": "e1a284e645bc26011cb0e1a3fe5876011a9fa900948ba67dcbe07a2986f2ad65" }, "downloads": -1, "filename": "pylibscrypt-1.5.1.tar.gz", "has_sig": false, "md5_digest": "24abf43a072408603640cc0b733d9fef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20716, "upload_time": "2015-09-15T05:23:10", "url": "https://files.pythonhosted.org/packages/73/e2/80602c340284190833daf09df65c36fd0c39a6e1397abc81378596ccb59f/pylibscrypt-1.5.1.tar.gz" } ], "1.5.2": [ { "comment_text": "", "digests": { "md5": "ebde1627f08069495241c8df48d1a848", "sha256": "22722f3f00177ea84f571f65da7766e4510667af00135658a3adddd5a5d70b3b" }, "downloads": -1, "filename": "pylibscrypt-1.5.2.tar.gz", "has_sig": false, "md5_digest": "ebde1627f08069495241c8df48d1a848", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20810, "upload_time": "2015-12-22T10:59:57", "url": "https://files.pythonhosted.org/packages/cf/4d/4dcb192db1478626d4fbe4b958b00758ce2648a6fc2d71e3efea54e5ab31/pylibscrypt-1.5.2.tar.gz" } ], "1.5.3": [ { "comment_text": "", "digests": { "md5": "3042bb85f3193fe67ba4ef7f10a1dd5f", "sha256": "98c606e34a7555011f975d03544582b529bc7e26fb9a0283b9427233c8ee27e8" }, "downloads": -1, "filename": "pylibscrypt-1.5.3.tar.gz", "has_sig": false, "md5_digest": "3042bb85f3193fe67ba4ef7f10a1dd5f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20828, "upload_time": "2016-06-20T12:54:46", "url": "https://files.pythonhosted.org/packages/89/b8/5e3ea9d8da2782f141300b1821bddc4b70c116f9916b8c6d525ccf3e663b/pylibscrypt-1.5.3.tar.gz" } ], "1.6.0": [ { "comment_text": "", "digests": { "md5": "e0f0819f25ff47ab30a452caf5efb251", "sha256": "f942aab75f69424a8d22526af3e8316eb5379982dc558abeb5d7435838c90d07" }, "downloads": -1, "filename": "pylibscrypt-1.6.0.tar.gz", "has_sig": false, "md5_digest": "e0f0819f25ff47ab30a452caf5efb251", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21266, "upload_time": "2017-01-04T16:21:47", "url": "https://files.pythonhosted.org/packages/20/0e/fb08f3f6db6053a7513fe7af9049f6518ad3fb81a335440a93a5a5ef76fb/pylibscrypt-1.6.0.tar.gz" } ], "1.6.1": [ { "comment_text": "", "digests": { "md5": "9119ebef8864f570525609fecb6b0267", "sha256": "b389df5760df03fa5fdda3be7738cc66f29e4edaaba695f1f44e5815f9f4b484" }, "downloads": -1, "filename": "pylibscrypt-1.6.1.tar.gz", "has_sig": false, "md5_digest": "9119ebef8864f570525609fecb6b0267", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21683, "upload_time": "2017-05-08T16:39:10", "url": "https://files.pythonhosted.org/packages/a4/76/7674dfa995781a42406e64d607b88061a0c92ae8afd8960cdd193f1a7acf/pylibscrypt-1.6.1.tar.gz" } ], "1.7.0": [ { "comment_text": "", "digests": { "md5": "4450e6e4e4c8cb6f58b67420dc3de9cf", "sha256": "a3f586f6b78bd8c63104483e56b8cdecbe427652461c3b3312f9d427f5774ae1" }, "downloads": -1, "filename": "pylibscrypt-1.7.0.tar.gz", "has_sig": false, "md5_digest": "4450e6e4e4c8cb6f58b67420dc3de9cf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21355, "upload_time": "2017-11-16T15:09:33", "url": "https://files.pythonhosted.org/packages/c0/15/4c1bb0c45772a4fc966c2d552bfa54b0691a43d4804eb6115ef71e299a0f/pylibscrypt-1.7.0.tar.gz" } ], "1.7.1": [ { "comment_text": "", "digests": { "md5": "484de55e90d1a707ec885609714570c9", "sha256": "7aa9424e211a12106c67ea884ccfe609856289372b900d3702faaf66e87f79ac" }, "downloads": -1, "filename": "pylibscrypt-1.7.1.tar.gz", "has_sig": false, "md5_digest": "484de55e90d1a707ec885609714570c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21456, "upload_time": "2017-12-16T08:36:41", "url": "https://files.pythonhosted.org/packages/e7/d6/97ce677536c967da7ba668be3d01cd25a35dc28daee26f8c7eea3e2aaca8/pylibscrypt-1.7.1.tar.gz" } ], "1.8.0": [ { "comment_text": "", "digests": { "md5": "35047edd6cfa1941478e89a2780f5734", "sha256": "893c4519afae05878f7aa313b76f6193e4d4b69d157b7febf6a5ef69ae3bf6e9" }, "downloads": -1, "filename": "pylibscrypt-1.8.0.tar.gz", "has_sig": false, "md5_digest": "35047edd6cfa1941478e89a2780f5734", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21682, "upload_time": "2019-03-09T12:18:35", "url": "https://files.pythonhosted.org/packages/a5/00/9975628999c9eafd4c31545900b8fb82e7dc11a62a7193fc4ffa7a5096d9/pylibscrypt-1.8.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "35047edd6cfa1941478e89a2780f5734", "sha256": "893c4519afae05878f7aa313b76f6193e4d4b69d157b7febf6a5ef69ae3bf6e9" }, "downloads": -1, "filename": "pylibscrypt-1.8.0.tar.gz", "has_sig": false, "md5_digest": "35047edd6cfa1941478e89a2780f5734", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21682, "upload_time": "2019-03-09T12:18:35", "url": "https://files.pythonhosted.org/packages/a5/00/9975628999c9eafd4c31545900b8fb82e7dc11a62a7193fc4ffa7a5096d9/pylibscrypt-1.8.0.tar.gz" } ] }