Skip to main content

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

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

If you're not sure about the file name format, learn more about wheel file names.

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.

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 files

0.2.0

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page