Skip to main content

Python scrypt bindings

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.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.

Metadata

Release files for scrypt 0.8.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for scrypt 0.8.7
File Size Uploaded
scrypt-0.8.7.tar.gz 53.2 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for scrypt 0.8.7
File
scrypt-0.8.7-py3.7-win-amd64.egg Legacy Egg format - - Details
scrypt-0.8.7-cp37-cp37m-win_amd64.whl CPython 3.7 CPython 3.7 pymalloc Windows x86-64 Details
scrypt-0.8.7-cp36-cp36m-win_amd64.whl CPython 3.6 CPython 3.6 pymalloc Windows x86-64 Details
scrypt-0.8.7-cp36-cp36m-win32.whl CPython 3.6 CPython 3.6 pymalloc Windows x86-32 Details
scrypt-0.8.7-cp35-cp35m-win_amd64.whl CPython 3.5 CPython 3.5 pymalloc Windows x86-64 Details
scrypt-0.8.7-cp35-cp35m-win32.whl CPython 3.5 CPython 3.5 pymalloc Windows x86-32 Details
scrypt-0.8.7-cp34-cp34m-win_amd64.whl CPython 3.4 CPython 3.4 pymalloc Windows x86-64 Details
scrypt-0.8.7-cp34-cp34m-win32.whl CPython 3.4 CPython 3.4 pymalloc Windows x86-32 Details
scrypt-0.8.7-cp27-cp27m-win_amd64.whl CPython 2.7 CPython 2.7 pymalloc Windows x86-64 Details
scrypt-0.8.7-cp27-cp27m-win32.whl CPython 2.7 CPython 2.7 pymalloc Windows x86-32 Details

Total release size: 303.6 kB

Release files / scrypt-0.8.7.tar.gz

Download URL scrypt-0.8.7.tar.gz
Size 53.2 kB
Tags Source
SHA-256 checksum
How to use checksums
b97744546656d98c4eff72da7856067ba21a538c34d519a346d4be3a66385342
BLAKE2b-256 checksum
How to use checksums
1faf70a7cb4f27f1673bc8b6af3587545eb0327e5823ab96b1eb81b541fe087e
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / scrypt-0.8.7-py3.7-win-amd64.egg

Download URL scrypt-0.8.7-py3.7-win-amd64.egg
Size 30.6 kB
Tags Egg
SHA-256 checksum
How to use checksums
3e99b3f79ba6df87201160cf61a119d13b760cd220ff815e805d1d3194a6d981
BLAKE2b-256 checksum
How to use checksums
a6dd9d447dc4752c8337707a0169877d8d89146ba0380b6fdbe0c9384da7e057
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / scrypt-0.8.7-cp37-cp37m-win_amd64.whl

Download URL scrypt-0.8.7-cp37-cp37m-win_amd64.whl
Size 27.5 kB
Tags CPython 3.7 CPython 3.7 pymalloc Windows x86-64
SHA-256 checksum
How to use checksums
ef81802964a89427121abdc3691a013af1947a58d007be99711d2ed61dc5bc54
BLAKE2b-256 checksum
How to use checksums
d50c07431ddb41ebd337c93939be3f63798b380d61f6171f275c8f8632f39dfd
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / scrypt-0.8.7-cp36-cp36m-win_amd64.whl

Download URL scrypt-0.8.7-cp36-cp36m-win_amd64.whl
Size 27.2 kB
Tags CPython 3.6 CPython 3.6 pymalloc Windows x86-64
SHA-256 checksum
How to use checksums
c23533edf7be99e3697b260acf2ebd1fdbac6407944c9fa83d724f0dff891815
BLAKE2b-256 checksum
How to use checksums
deeb7d9c977eb985c6599733aacb58f9dbf8ea751d042046b2cd3622efe1f0f3
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / scrypt-0.8.7-cp36-cp36m-win32.whl

Download URL scrypt-0.8.7-cp36-cp36m-win32.whl
Size 23.1 kB
Tags CPython 3.6 CPython 3.6 pymalloc Windows x86-32
SHA-256 checksum
How to use checksums
36786f03da25e699ee97bb3a050859c8c0aedaf7ca2e212f33253dfc775b46eb
BLAKE2b-256 checksum
How to use checksums
ca2536677007f4de858ff54594491d7c028524d3dd4a9d843cb5825108eab925
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / scrypt-0.8.7-cp35-cp35m-win_amd64.whl

Download URL scrypt-0.8.7-cp35-cp35m-win_amd64.whl
Size 27.2 kB
Tags CPython 3.5 CPython 3.5 pymalloc Windows x86-64
SHA-256 checksum
How to use checksums
c3e3f48ffbbe15c15ade1a59e317acde8742ffbf7dfcbe78ff1cf1d34da343c4
BLAKE2b-256 checksum
How to use checksums
ac68e302d7e37462f20e8cd7a1c1fea07574926c9832830d7dcfd39f1e683889
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / scrypt-0.8.7-cp35-cp35m-win32.whl

Download URL scrypt-0.8.7-cp35-cp35m-win32.whl
Size 23.1 kB
Tags CPython 3.5 CPython 3.5 pymalloc Windows x86-32
SHA-256 checksum
How to use checksums
5466ccff520df8ecf63bcbea71d0baea44bef6962d53dd03f706543a9aa07f57
BLAKE2b-256 checksum
How to use checksums
3f50e6e57d9a80e328d1d0ae0849f5f0556803f26b4c158af5482c363565da91
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / scrypt-0.8.7-cp34-cp34m-win_amd64.whl

Download URL scrypt-0.8.7-cp34-cp34m-win_amd64.whl
Size 24.6 kB
Tags CPython 3.4 CPython 3.4 pymalloc Windows x86-64
SHA-256 checksum
How to use checksums
5c23e58e8baa557b4aa0fc5d565edc0892548464737cd81701fc96258eff72a5
BLAKE2b-256 checksum
How to use checksums
98ccfe64b130dc2ea975ff6c6cfc2274d4bcaf38b902882358fe4fdb46829930
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / scrypt-0.8.7-cp34-cp34m-win32.whl

Download URL scrypt-0.8.7-cp34-cp34m-win32.whl
Size 21.4 kB
Tags CPython 3.4 CPython 3.4 pymalloc Windows x86-32
SHA-256 checksum
How to use checksums
36b0956335a196f99d07b6c123848d2e29434c00297a9ceb6d9ed909a0426fb0
BLAKE2b-256 checksum
How to use checksums
594007a484cc66f25e78e7ae86880e380977220c4f46a292a1f5d30762eafdca
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / scrypt-0.8.7-cp27-cp27m-win_amd64.whl

Download URL scrypt-0.8.7-cp27-cp27m-win_amd64.whl
Size 24.2 kB
Tags CPython 2.7 CPython 2.7 pymalloc Windows x86-64
SHA-256 checksum
How to use checksums
9e739b829fcdc2228a6653c2fabea4833f110ea0c9387c6a0d394e47e3797e7a
BLAKE2b-256 checksum
How to use checksums
8c56ed65a29ff15274640aac0b2056d51353ed61bcb10adff5030de8ee98629a
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / scrypt-0.8.7-cp27-cp27m-win32.whl

Download URL scrypt-0.8.7-cp27-cp27m-win32.whl
Size 21.4 kB
Tags CPython 2.7 CPython 2.7 pymalloc Windows x86-32
SHA-256 checksum
How to use checksums
d29b7d1f7fa3e67cd117b2f4fa26f27b5e0526f4040113ed78cdbe482a795393
BLAKE2b-256 checksum
How to use checksums
7c463a8a19a804958e2f4a6170c4765af159a4768198b546599fa0b0cea7a66d
Upload date
Uploaded using Trusted Publishing?
What is 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

Release history Release notifications | RSS feed

0.8.13

9 release files

0.8.12

9 release files

0.8.9

11 release files

0.8.8

11 release files

This release

0.8.7 This release

11 release files

0.8.0

18 release files

0.7.1

7 release files

0.7.0

5 release files

0.6.1

1 release file

0.6.0

1 release file

0.5.5

1 release file

0.5.4

1 release file

0.5.3

1 release file

0.5.2

1 release file

0.5.1

2 release files

0.5.0

1 release file

0.4.0

0.3.0

0.1.0

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page