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

  • improve build for conda forge

0.8.12

  • Add SCRYPT_WINDOWS_LINK_LEGACY_OPENSSL environment variable, when set, openssl 1.0.2 is linked

0.8.11

  • fix build for conda feedstock

0.8.10

  • fix typo

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.13.tar.gz (53.6 kB view details)

Uploaded Source

Built Distributions

scrypt-0.8.13-cp37-cp37m-win_amd64.whl (35.3 kB view details)

Uploaded CPython 3.7m Windows x86-64

scrypt-0.8.13-cp37-cp37m-win32.whl (29.7 kB view details)

Uploaded CPython 3.7m Windows x86

scrypt-0.8.13-cp36-cp36m-win_amd64.whl (35.3 kB view details)

Uploaded CPython 3.6m Windows x86-64

scrypt-0.8.13-cp36-cp36m-win32.whl (29.7 kB view details)

Uploaded CPython 3.6m Windows x86

scrypt-0.8.13-cp35-cp35m-win_amd64.whl (35.3 kB view details)

Uploaded CPython 3.5m Windows x86-64

scrypt-0.8.13-cp35-cp35m-win32.whl (29.7 kB view details)

Uploaded CPython 3.5m Windows x86

scrypt-0.8.13-cp34-cp34m-win32.whl (28.1 kB view details)

Uploaded CPython 3.4m Windows x86

scrypt-0.8.13-cp27-cp27m-win32.whl (28.1 kB view details)

Uploaded CPython 2.7m Windows x86

File details

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

File metadata

  • Download URL: scrypt-0.8.13.tar.gz
  • Upload date:
  • Size: 53.6 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.13.tar.gz
Algorithm Hash digest
SHA256 1377b1adc98c4152694bf5d7e93b41a9d2e9060af69b747cfad8c93ac426f9ea
MD5 d64b5f3f731179ed17077c94bd6e6525
BLAKE2b-256 803d141eb80e754b86f6c25a2ffaf6c3af3acdb65a3e3700829a05ab0c5d965d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: scrypt-0.8.13-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 35.3 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.13-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 a12930a9942774dbaebe0ae4e3d089a6ea158daf7fc6d9b81aba47bcb73103ff
MD5 86c63034c549b8eb72a6e21665571b55
BLAKE2b-256 af4d06b8b97b5db55619a98cc09b2670e69220d228c973b47e15bef6409504fe

See more details on using hashes here.

File details

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

File metadata

  • Download URL: scrypt-0.8.13-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 29.7 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.13-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 96ef78c99b324000cadf019c6af1f6cd2fefc1048951fc07365ec74bf99c17f9
MD5 fdd630611027eac783d311e04fa5537c
BLAKE2b-256 b31dd47432be62bc71eaeacfea2abcfbb4c39decff7afd5ce4750d3cb0a3bdcd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: scrypt-0.8.13-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 35.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.13-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 336a76da970674206591a9d1092b165a6792eadeaed5fd8fd0d7e367ea0cd74a
MD5 337250f8518f8bbe8814909c4e718c5f
BLAKE2b-256 15b850068cf98dbe6fff1761d53dbb164535f38da54711a5e33cd900981893c6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: scrypt-0.8.13-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 29.7 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.13-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 d5acc01c27048ad5f5477aeaa97c8faa1bd739f0a915d31b4526e18609fd9df1
MD5 3f7b5c2f409960dc10037e29ff3cf12f
BLAKE2b-256 7f611401c9d692debd96bd1432d251980185402c6996ffce96a2ae5eb6ffd228

See more details on using hashes here.

File details

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

File metadata

  • Download URL: scrypt-0.8.13-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 35.3 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.13-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 e1d24b8dd8a4451745a0f99c6bf356475fa822e5ebdeb207ea99f0fdab54c909
MD5 74d2b79c9131831c34283b5b79f51f79
BLAKE2b-256 1a528eb8fc0de5e6ffaf6dbaf3d2d32685065cd8296043ed78ab4e7c3b6e16cf

See more details on using hashes here.

File details

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

File metadata

  • Download URL: scrypt-0.8.13-cp35-cp35m-win32.whl
  • Upload date:
  • Size: 29.7 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.13-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 40fcaecc2e6cc3f9d200c7fb111454f4b584dcde3cf1242d0730ca299fb08553
MD5 a354074209c86c455196edb3d449ac45
BLAKE2b-256 3dc3458873bae3c561fa6aa61be71c922b62e8a9490a0c8c1b9b7bae601463c4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: scrypt-0.8.13-cp34-cp34m-win32.whl
  • Upload date:
  • Size: 28.1 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.13-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 b9da3cd041efdbfde0f353351b6f8a8e0b7b7b4e8d95a29e59f77c48e2cee96d
MD5 af799862f9ad53f4637aa7a7c73414f7
BLAKE2b-256 5d4dad21a8ae134d17a2316d5750d8463791e37bb5876f59ad61ee841672cda9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: scrypt-0.8.13-cp27-cp27m-win32.whl
  • Upload date:
  • Size: 28.1 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.13-cp27-cp27m-win32.whl
Algorithm Hash digest
SHA256 b5434eb5608d491abf42bdacb5dea2103ff25d4e42c0a2b574bd74c7789bbb37
MD5 db97e1197f771ff7581d37c5d09d0137
BLAKE2b-256 b905b1dbefa436725c32fcfb8459fc0444982323b026c0c806666ec3ed693370

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