Skip to main content

A memory-hard password-hashing function

Project description

Logo: кошка Свинья

catpig

catpig is a memory-hard password-hashing function.

It uses SHAKE256 to create data that will occupy memory of a given size (space_mib).

The data will be read in 4096-byte chunks with a pseudo-random offset and hashed by the BLAKE2b function.

Memory access patterns during reading of the first half of a given amount of data depend only on the salt (iMHF). Memory access patterns during reading of the second half of a given amount of data also depend the results of previous steps (dMHF).

The output length is always 64 bytes.

Install

pip install catpig

Usage

from catpig.catpig import catpig

derived_key = catpig(password, salt, space_mib, passes)

password and salt must be bytes-like objects.

space_mib defines the memory usage in mebibytes.

passes defines the amount of data that will be read and hashed by the BLAKE2b function. One pass corresponds to reading a data size equal to space_mib.

Test vectors

>>> from catpig.catpig import catpig
>>>
>>> catpig(b'', b'', space_mib=1, passes=1).hex()
'831e43e4a352066a8ade279225d95e7543203cce8ce77348e4f7898741f32b9f1b8793393aa69cef84016d5f391aa9a7840050c5c59b9defd6cc324cb44e3e9a'
>>>
>>> catpig(password=b'password', salt=b'salt', space_mib=64, passes=4).hex()
'd1999b1a7749de88ac8b6f1d8659ccf3b1c2cfe7fd84426bddc75de4b9f57bc07293cca52bb22e0915945d462bb760dfab02d78a713e65620307bc08b8fb7905'
>>>
>>> catpig(password=b'passphrase', salt=b'NaCl', space_mib=512, passes=8).hex()
'83b6181449eb405e7bb662642090c077298e445f63846a98f18b8102df5e80f8a50dcf43f951ce8e893aac5beb23d33e5282624fd288fac4d07b8647f6c9bffe'
>>>
>>> catpig(password=b'new_passphrase', salt=b'SodiumChloride', space_mib=5000, passes=15).hex()
'b4f96ceddf5c46380f6a425ebf2a30372cccfb3e4d7d95fd1cfc7c64910142eca3b7e61c20e32db7c97c72230c3b63abf1802dc068513297b67c274267fd1dde'

Warnings

  • The author is not an expert in cryptography.
  • catpig has not been independently audited.

Requirements

  • Python >= 3.6

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

catpig-0.3.0.tar.gz (3.9 kB view details)

Uploaded Source

Built Distribution

catpig-0.3.0-py3-none-any.whl (6.8 kB view details)

Uploaded Python 3

File details

Details for the file catpig-0.3.0.tar.gz.

File metadata

  • Download URL: catpig-0.3.0.tar.gz
  • Upload date:
  • Size: 3.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.2

File hashes

Hashes for catpig-0.3.0.tar.gz
Algorithm Hash digest
SHA256 9def934f7437c4bf9c22757bf1eeac90422e9c87afe43ca23a33c401205c4ec7
MD5 e2a388fc66c0d3bf567d3039ee16e7ed
BLAKE2b-256 1d4583115d7651636c9696fcb64a3877019d5915922e600bcea6d86723dabeec

See more details on using hashes here.

File details

Details for the file catpig-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: catpig-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 6.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.2

File hashes

Hashes for catpig-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 043361801fefd486d731db7baf2084a6ffe28ddf2b8febaf46e5d9a950aa75e0
MD5 a3bdad4f422805db530e249a782a281f
BLAKE2b-256 d4511848e195501ac3725de1be873cdb2621dc5c1268de6d66f11bd97ba1d7aa

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