Skip to main content

Bindings for the scrypt key derivation function library

Project description

This is a set of Python bindings for the scrypt key derivation function.

Latest Version https://anaconda.org/conda-forge/scrypt/badges/version.svg https://anaconda.org/conda-forge/scrypt/badges/downloads.svg

Scrypt is useful when encrypting password as it is possible to specify a minimum amount of time to use when encrypting and decrypting. If, for example, a password takes 0.05 seconds to verify, a user won’t notice the slight delay when signing in, but doing a brute force search of several billion passwords will take a considerable amount of time. This is in contrast to more traditional hash functions such as MD5 or the SHA family which can be implemented extremely fast on cheap hardware.

Installation

For Debian and Ubuntu, please ensure that the following packages are installed:

$ sudo apt-get install build-essential libssl-dev python-dev

For Fedora and RHEL-derivatives, please ensure that the following packages are installed:

$ sudo yum install gcc openssl-devel python-devel

For OSX, please do the following:

$ brew install openssl
$ export CFLAGS="-I$(brew --prefix openssl)/include $CFLAGS"
$ export LDFLAGS="-L$(brew --prefix openssl)/lib $LDFLAGS"

For OSX, you can also use the precompiled wheels. They are installed by:

$ pip install scrypt

For Windows, please use the precompiled wheels. They are installed by:

$ pip install scrypt

For Windows, when the package should be compiled, the development package from https://slproweb.com/products/Win32OpenSSL.html is needed. It needs to be installed to C:OpenSSL-Win64.

You can install py-scrypt from this repository if you want the latest but possibly non-compiling version:

$ hg clone http://bitbucket.org/mhallin/py-scrypt
$ cd py-scrypt
$ python setup.py build

Become superuser (or use virtualenv):
# python setup.py install

Run tests after install:
$ python setup.py test

Or you can install the latest release from PyPi:

$ pip install scrypt

Users of the Anaconda Python distribution can directly obtain pre-built Windows, Intel Linux or macOS / OSX binaries from the conda-forge channel. This can be done via:

$ conda install -c conda-forge scrypt

If you want py-scrypt for your Python 3 environment, just run the above commands with your Python 3 interpreter. Py-scrypt supports both Python 2 and 3.

From version 0.6.0 (not available on PyPi yet), py-scrypt supports PyPy as well.

Changelog

0.8.9

  • use the static libcrypto_static for windows and openssl 1.1.1

0.8.8

  • setup.py for windows improved, works with openssl 1.0.2 and 1.1.1

0.8.7

  • setup.py for windows fixed

0.8.6

  • setup.py fixed, scrypt could not be imported in version 0.8.5

0.8.5

  • MANIFEST.in fixed

  • scrypt.py moved into own scrypt directory with __init__.py

  • openssl library path for osx wheel repaired

0.8.4

  • __version__ added to scrypt

  • missing void in sha256.c fixed

0.8.3

  • scrypt updated to 1.2.1

  • Wheels are created for python 3.6

Usage

Fore encryption/decryption, the library exports two functions encrypt and decrypt:

>>> import scrypt
>>> data = scrypt.encrypt('a secret message', 'password', maxtime=0.1) # This will take at least 0.1 seconds
>>> data[:20]
'scrypt\x00\r\x00\x00\x00\x08\x00\x00\x00\x01RX9H'
>>> scrypt.decrypt(data, 'password', maxtime=0.1) # This will also take at least 0.1 seconds
'a secret message'
>>> scrypt.decrypt(data, 'password', maxtime=0.05) # scrypt won't be able to decrypt this data fast enough
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
scrypt.error: decrypting file would take too long
>>> scrypt.decrypt(data, 'wrong password', maxtime=0.1) # scrypt will throw an exception if the password is incorrect
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
scrypt.error: password is incorrect

From these, one can make a simple password verifier using the following functions:

def hash_password(password, maxtime=0.5, datalength=64):
    return scrypt.encrypt(os.urandom(datalength), password, maxtime=maxtime)

def verify_password(hashed_password, guessed_password, maxtime=0.5):
    try:
        scrypt.decrypt(hashed_password, guessed_password, maxtime)
        return True
    except scrypt.error:
        return False

But, if you want output that is deterministic and constant in size, you can use the hash function:

>>> import scrypt
>>> h1 = scrypt.hash('password', 'random salt')
>>> len(h1)  # The hash will be 64 bytes by default, but is overridable.
64
>>> h1[:10]
'\xfe\x87\xf3hS\tUo\xcd\xc8'
>>> h2 = scrypt.hash('password', 'random salt')
>>> h1 == h2 # The hash function is deterministic
True

Acknowledgements

Scrypt was created by Colin Percival and is licensed as 2-clause BSD. Since scrypt does not normally build as a shared library, I have included the source for the currently latest version of the library in this repository. When a new version arrives, I will update these sources.

Kelvin Wong on Bitbucket provided changes to make the library available on Mac OS X 10.6 and earlier, as well as changes to make the library work more like the command-line version of scrypt by default. Kelvin also contributed with the unit tests, lots of cross platform testing and work on the hash function.

Burstaholic on Bitbucket provided the necessary changes to make the library build on Windows.

The python-appveyor-demo repository for setting up automated Windows builds for a multitude of Python versions.

License

This library is licensed under the same license as scrypt; 2-clause BSD.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

scrypt-0.8.9.tar.gz (53.3 kB view details)

Uploaded Source

Built Distributions

scrypt-0.8.9-cp37-cp37m-win_amd64.whl (27.2 kB view details)

Uploaded CPython 3.7m Windows x86-64

scrypt-0.8.9-cp37-cp37m-win32.whl (29.6 kB view details)

Uploaded CPython 3.7m Windows x86

scrypt-0.8.9-cp36-cp36m-win_amd64.whl (27.3 kB view details)

Uploaded CPython 3.6m Windows x86-64

scrypt-0.8.9-cp36-cp36m-win32.whl (29.6 kB view details)

Uploaded CPython 3.6m Windows x86

scrypt-0.8.9-cp35-cp35m-win_amd64.whl (27.2 kB view details)

Uploaded CPython 3.5m Windows x86-64

scrypt-0.8.9-cp35-cp35m-win32.whl (29.6 kB view details)

Uploaded CPython 3.5m Windows x86

scrypt-0.8.9-cp34-cp34m-win_amd64.whl (24.6 kB view details)

Uploaded CPython 3.4m Windows x86-64

scrypt-0.8.9-cp34-cp34m-win32.whl (28.0 kB view details)

Uploaded CPython 3.4m Windows x86

scrypt-0.8.9-cp27-cp27m-win_amd64.whl (24.3 kB view details)

Uploaded CPython 2.7m Windows x86-64

scrypt-0.8.9-cp27-cp27m-win32.whl (28.0 kB view details)

Uploaded CPython 2.7m Windows x86

File details

Details for the file scrypt-0.8.9.tar.gz.

File metadata

  • Download URL: scrypt-0.8.9.tar.gz
  • Upload date:
  • Size: 53.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.9.1 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for scrypt-0.8.9.tar.gz
Algorithm Hash digest
SHA256 9a8e6d63aea4a24ebd756aff57feaa44de91f4032636da80209c2a8dca1ca39f
MD5 fd6d38daf356c53babefa5bd8c442369
BLAKE2b-256 fefce0377574102c87c04d7d7c4fa46cb2f0625ad1bd7506d261058414090c83

See more details on using hashes here.

File details

Details for the file scrypt-0.8.9-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: scrypt-0.8.9-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 27.2 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.9.1 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for scrypt-0.8.9-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 478145321c25897308c5da40bd8989f9d94fd17ce6db309b01273a724cef40ee
MD5 9ce36a8f916b11b9d7b404d0cd97e14e
BLAKE2b-256 ef0a91a54929264f33761729e38037a727b0b1c8012b29356b65db9e279c0b2e

See more details on using hashes here.

File details

Details for the file scrypt-0.8.9-cp37-cp37m-win32.whl.

File metadata

  • Download URL: scrypt-0.8.9-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 29.6 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.9.1 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for scrypt-0.8.9-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 bc9a962b11d4f8f9733d5025c018c6146fe0141b699329368ebeb97ef9143f4e
MD5 3d1616c522af181884672b20fad4c461
BLAKE2b-256 95a37cf54f7a56acdfc5fb31d1cc1ae36d2cc9fbbd10db9bedab5ec9b2e3d729

See more details on using hashes here.

File details

Details for the file scrypt-0.8.9-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: scrypt-0.8.9-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 27.3 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.9.1 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for scrypt-0.8.9-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 553ead56f886277dcb87820e1899d503f46cafd245edd29b2285a205d30ffdd5
MD5 38b046baa9872abe46142f2362fe9f95
BLAKE2b-256 79508cbf72117be00e85f9534eb2a966af88c442e81f45b3fb16a190715b0642

See more details on using hashes here.

File details

Details for the file scrypt-0.8.9-cp36-cp36m-win32.whl.

File metadata

  • Download URL: scrypt-0.8.9-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 29.6 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.9.1 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for scrypt-0.8.9-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 26fd646c1538ba09dac20ac23aa5271f1906403c4e7094fe421d65e0d4614389
MD5 7355c7743e20e84ecda1483bea9df173
BLAKE2b-256 3b3f9c72db41573b4211ebf1e3775eb4bb6c7b98e7aa5273d7703af335be92a0

See more details on using hashes here.

File details

Details for the file scrypt-0.8.9-cp35-cp35m-win_amd64.whl.

File metadata

  • Download URL: scrypt-0.8.9-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 27.2 kB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.9.1 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for scrypt-0.8.9-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 de0e7f0eed5a9266bab8ac9e5d0482761a99cf990d76e29e5393bb467bd7bfa9
MD5 961af38a6157058ff2566d432d8654ff
BLAKE2b-256 09d424150833203d83b29c7703c5356ca18d7beecae62f20009f0c490c61dacc

See more details on using hashes here.

File details

Details for the file scrypt-0.8.9-cp35-cp35m-win32.whl.

File metadata

  • Download URL: scrypt-0.8.9-cp35-cp35m-win32.whl
  • Upload date:
  • Size: 29.6 kB
  • Tags: CPython 3.5m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.9.1 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for scrypt-0.8.9-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 983b4bbbe4c5f814849ee39388eec61f5a621a9ca4deaf84cb141966b46de18d
MD5 3736ffcc7be72b88cf2f9601bf796213
BLAKE2b-256 548252b8fa373e3c02a1aa80c2d1387777490b2fd202a9df4a15de6d666e5023

See more details on using hashes here.

File details

Details for the file scrypt-0.8.9-cp34-cp34m-win_amd64.whl.

File metadata

  • Download URL: scrypt-0.8.9-cp34-cp34m-win_amd64.whl
  • Upload date:
  • Size: 24.6 kB
  • Tags: CPython 3.4m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.9.1 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for scrypt-0.8.9-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 ea138e082fb6b38ccb41c457ab5b75b8c73df1fcc54c4d072f3339ab10215595
MD5 5b29cf7555da7e67270de4923cf79c1c
BLAKE2b-256 2001fbd4348bc829868057f35cdfa2f5d1c940283d3682cafccd486ab348f3c4

See more details on using hashes here.

File details

Details for the file scrypt-0.8.9-cp34-cp34m-win32.whl.

File metadata

  • Download URL: scrypt-0.8.9-cp34-cp34m-win32.whl
  • Upload date:
  • Size: 28.0 kB
  • Tags: CPython 3.4m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.9.1 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for scrypt-0.8.9-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 8116786c9b81304d33865b547b7f96d43c74a24fa8c739b0b68090b391f81eb6
MD5 104be43d6a955ba6504330ea1b63d608
BLAKE2b-256 14ce570d2201a5969c25cd22ad216023bcf1f6a7e4537c8ec3ace09be0008de7

See more details on using hashes here.

File details

Details for the file scrypt-0.8.9-cp27-cp27m-win_amd64.whl.

File metadata

  • Download URL: scrypt-0.8.9-cp27-cp27m-win_amd64.whl
  • Upload date:
  • Size: 24.3 kB
  • Tags: CPython 2.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.9.1 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for scrypt-0.8.9-cp27-cp27m-win_amd64.whl
Algorithm Hash digest
SHA256 770dd6e51d058ad359cba2d925b8d2ba4f0dd677436d27a5810929635106e4cd
MD5 3dd26401539877668c41bcee98ded211
BLAKE2b-256 71c9ba6b14e52a1da4857582222593dc455b7fc3119f15b5e81434f7c4b5e870

See more details on using hashes here.

File details

Details for the file scrypt-0.8.9-cp27-cp27m-win32.whl.

File metadata

  • Download URL: scrypt-0.8.9-cp27-cp27m-win32.whl
  • Upload date:
  • Size: 28.0 kB
  • Tags: CPython 2.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.9.1 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for scrypt-0.8.9-cp27-cp27m-win32.whl
Algorithm Hash digest
SHA256 2c5df45fff1975805f4a834ca6324bfc24759cd6ddae98370985e01a2be0be69
MD5 25acb7e1e815a002761b7ba60da90f5a
BLAKE2b-256 5d9d92c3e61d3b8fa3fe1cf3a2a252d9fa553d721ec85ae260aedf8e75778ec4

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page