Skip to main content

CSH-256: A hybrid password hashing algorithm with time-cost resistance

Project description

CSH-256: Custom Secure Hash - 256 bit

PyPI version License: MIT Python 3.8+

A hybrid password hashing algorithm combining the structural robustness of traditional cryptographic hash functions with the time-cost resistance of key derivation functions.

Features

  • 🔒 Hardware-Resistant: Designed to resist GPU/ASIC attacks through computational slowdown
  • 🎯 Avalanche Effect: 51.56% bit diffusion rate (near-optimal 50%)
  • High-Performance C Core: Optional C extension for maximum speed
  • 🔧 Configurable: Adjustable iteration count for future-proof security
  • 🛡️ Battle-Tested Primitives: Uses SHA-256 structure, AES S-Box, and RSA-inspired operations
  • 📦 Zero Dependencies: Pure Python + optional C extension

Algorithm Overview

CSH-256 implements three security layers:

  1. Non-Linearity Layer: AES S-Box substitution for enhanced diffusion
  2. Computational Slowdown: Modular Cubing (h³ mod 2⁶⁴)
  3. Time-Cost Iteration: Password stretching through repeated compression

The algorithm achieves 51.56% avalanche effect, meaning changing a single input bit changes approximately half of the output bits.

Installation

From PyPI (Recommended)

pip install csh256

From Source (with C extension)

git clone https://github.com/hemaabokila/CSH-256-Repo.git
cd CSH-256-Repo
pip install -e .

Pure Python (no C compiler needed)

pip install csh256 --no-binary csh256

Quick Start

Basic Usage

import csh256

# Hash a password (auto-generates salt)
hash_result = csh256.hash("my_secure_password")
print(hash_result)
# Output: 'a3f2b1c4d5e6f7a8b9c0d1e2f3a4b5c6...'

Complete Example with Storage

import csh256

# Create a hash with all parameters
result = csh256.hash_full("my_secure_password")

# Store in database (PHC format)
db.store_user(username="alice", password_hash=result['formatted'])
# Stores: '$csh256$i=4096$3f4e2a1b...$a3f2b1c4...'

# Later, verify password
stored_hash = db.get_password_hash("alice")
is_valid = csh256.verify("my_secure_password", formatted=stored_hash)
print(f"Password valid: {is_valid}")

Custom Parameters

import csh256

# Use custom salt and iterations
custom_salt = csh256.generate_salt()
result = csh256.hash_full(
    "my_password",
    salt=custom_salt,
    iterations=8192  # Higher = more secure but slower
)

print(f"Hash: {result['hash']}")
print(f"Salt: {result['salt'].hex()}")
print(f"Iterations: {result['iterations']}")

API Reference

Core Functions

hash(password, salt=None, iterations=None)

Generate a CSH-256 hash (returns hex string only).

Parameters:

  • password (str | bytes): Password to hash
  • salt (bytes, optional): 16-byte salt (auto-generated if None)
  • iterations (int, optional): Iteration count (default: 4096)

Returns: 64-character hexadecimal hash string


hash_full(password, salt=None, iterations=None)

Generate complete hash with all parameters.

Returns: Dictionary with keys:

  • hash: Hex hash string
  • salt: Salt bytes
  • iterations: Iteration count
  • formatted: PHC-formatted string

verify(password, hash_value=None, salt=None, iterations=None, formatted=None)

Verify a password against stored hash.

Parameters:

  • password (str | bytes): Password to verify
  • Either:
    • hash_value, salt, iterations: Individual components
    • formatted: PHC-formatted string

Returns: True if valid, False otherwise


Utility Functions

generate_salt(size=16)

Generate cryptographically secure random salt.

format_hash(hash_value, salt, iterations)

Format components into PHC string.

parse_hash(formatted)

Parse PHC string into components.

recommend_iterations(target_time_ms=250)

Recommend iteration count based on target computation time.

# Find iterations for ~500ms computation
iterations = csh256.recommend_iterations(500)
print(f"Use {iterations} iterations")

Performance Benchmarks

Tested on Intel i7-10700K @ 3.80GHz:

Iterations Time (Python) Time (C) Speedup
1,024 0.85s 0.12s 7.1x
4,096 3.42s 0.48s 7.1x
8,192 6.84s 0.96s 7.1x
16,384 13.68s 1.92s 7.1x

Security Considerations

Recommended Iterations

  • Minimum: 4,096 iterations
  • Standard: 8,192 iterations (~500ms)
  • High-Security: 16,384+ iterations (~1s+)

Salt Requirements

  • Must be exactly 16 bytes
  • Must be cryptographically random
  • Must be unique per password
  • Use csh256.generate_salt() for secure generation

Storage Format

Always store using PHC format:

$csh256$i=4096$<salt_hex>$<hash_hex>

This format includes all parameters needed for verification.

Algorithm Specification

Architecture

  • Structure: Merkle–Damgård construction
  • Block Size: 512 bits
  • Output Size: 256 bits
  • Rounds: 64 per compression

Security Primitives

  1. SHA-256 Functions: Σ₀, Σ₁, σ₀, σ₁, CH, MAJ
  2. AES S-Box: 8-bit non-linear substitution
  3. RSA Primitive: Modular Cubing (h³ mod 2⁶⁴)

Avalanche Effect

  • Measured: 51.56% bit diffusion
  • Ideal: 50.00%
  • Interpretation: Near-perfect statistical independence

Testing

# Run all tests
pytest tests/

# Run with coverage
pytest --cov=csh256 tests/

# Run benchmarks
pytest tests/test_performance.py -v

Development

# Install development dependencies
pip install -e ".[dev]"

# Format code
black csh256/ tests/

# Type checking
mypy csh256/

# Linting
flake8 csh256/

Comparison with Other Algorithms

Algorithm Type Memory-Hard GPU-Resistant Configurable Cost
CSH-256 Hybrid No Yes Yes (iterations)
Bcrypt KDF No Partial Yes (cost factor)
Scrypt KDF Yes Yes Yes (N, r, p)
Argon2 KDF Yes Yes Yes (t, m, p)
PBKDF2 KDF No No Yes (iterations)

CSH-256 focuses on computational cost through non-parallelizable operations rather than memory hardness.

License

MIT License - see LICENSE file for details.

Citation

If you use CSH-256 in academic work, please cite:

@software{csh256,
  author = {Aboukila, Ibrahim Hilal},
  title = {CSH-256: A Hybrid Password Hashing Algorithm},
  year = {2025},
  url = {https://github.com/hemaabokila/CSH-256-Repo}
}

Contributing

Contributions welcome! Please read CONTRIBUTING.md first.

References

  1. Rivest, R. L., et al. (1978). "A Method for Obtaining Digital Signatures and Public-Key Cryptosystems"
  2. NIST FIPS 180-4: Secure Hash Standard (SHS)
  3. Daemen, J., & Rijmen, V. (2002). "The Design of Rijndael: AES"

Author

Ibrahim Hilal Aboukila

Acknowledgments

Special thanks to the cryptography community for their foundational work in hash functions and key derivation.


⚠️ Security Notice: While CSH-256 implements multiple security layers, always use the latest recommended iteration counts and follow secure password practices. For production use, conduct thorough security audits.

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

csh256-1.0.6.tar.gz (25.1 kB view details)

Uploaded Source

Built Distributions

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

csh256-1.0.6-cp312-cp312-win_amd64.whl (29.9 kB view details)

Uploaded CPython 3.12Windows x86-64

csh256-1.0.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (27.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

csh256-1.0.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (27.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

csh256-1.0.6-cp312-cp312-macosx_11_0_arm64.whl (26.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

csh256-1.0.6-cp311-cp311-win_amd64.whl (29.9 kB view details)

Uploaded CPython 3.11Windows x86-64

csh256-1.0.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (27.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

csh256-1.0.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (27.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

csh256-1.0.6-cp311-cp311-macosx_11_0_arm64.whl (26.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

csh256-1.0.6-cp310-cp310-win_amd64.whl (29.9 kB view details)

Uploaded CPython 3.10Windows x86-64

csh256-1.0.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (27.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

csh256-1.0.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (27.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

csh256-1.0.6-cp310-cp310-macosx_11_0_arm64.whl (26.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

csh256-1.0.6-cp39-cp39-win_amd64.whl (29.9 kB view details)

Uploaded CPython 3.9Windows x86-64

csh256-1.0.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (27.0 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

csh256-1.0.6-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (27.4 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

csh256-1.0.6-cp39-cp39-macosx_11_0_arm64.whl (26.2 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

csh256-1.0.6-cp38-cp38-win_amd64.whl (29.9 kB view details)

Uploaded CPython 3.8Windows x86-64

csh256-1.0.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (36.6 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

csh256-1.0.6-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (37.0 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

csh256-1.0.6-cp38-cp38-macosx_11_0_arm64.whl (26.2 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

File details

Details for the file csh256-1.0.6.tar.gz.

File metadata

  • Download URL: csh256-1.0.6.tar.gz
  • Upload date:
  • Size: 25.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for csh256-1.0.6.tar.gz
Algorithm Hash digest
SHA256 06806fed3b609a1fad54bef933958d2f487d7c9d7061ad954e87b4fba9bbe8f3
MD5 f8a3eece4a95ab3267981570b3911a54
BLAKE2b-256 0f990178e1431265458326c7b19f92e0775bca45cf78f8438720c6a097705e83

See more details on using hashes here.

File details

Details for the file csh256-1.0.6-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: csh256-1.0.6-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 29.9 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for csh256-1.0.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 8fb08516d0c23b96ece9d338dcb3a114bda6fc44de7451ed0ffeb8926205c24a
MD5 96905d6836c3880a4a57acf10dcc60b7
BLAKE2b-256 a122cd8e41e681131f0e2e71ff8580fef8220616bad1b34e729ce39c56707891

See more details on using hashes here.

File details

Details for the file csh256-1.0.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for csh256-1.0.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 451d2e9833b7316206344c4f06cee59335cab99d5b4445a09fac96fdfea861e3
MD5 458d7aec7700803b3755698c6bdfea7a
BLAKE2b-256 b4bc260573d798aee71b9313a617721b8e6e3834b01b067b17b952731b05a1a6

See more details on using hashes here.

File details

Details for the file csh256-1.0.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for csh256-1.0.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cca22e694c6200723041823a46c6ed6003518f71b239fde67158198f127dcde4
MD5 4ca96bd335801653930e956d8ccff62c
BLAKE2b-256 5e966f575ce85c758b9eea9cba55adfd3e50b1089b2066fe173d043127f3f289

See more details on using hashes here.

File details

Details for the file csh256-1.0.6-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for csh256-1.0.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 98925e36cc9aefe9320063611ea840a744b213aa5d5c023acb8d9246e7bea67c
MD5 5054699d1a6e23b6f7312a40bd69daee
BLAKE2b-256 ff4f4aef23dfc582eee499e61ecafcd9bbbc16387540eb125456c69b55cdcba9

See more details on using hashes here.

File details

Details for the file csh256-1.0.6-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: csh256-1.0.6-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 29.9 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for csh256-1.0.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2f60ffda895a30efd07aee5225daa4cc86d1fb4dce886ace248e87c45b86d11a
MD5 a30fe2a5955376293aa7fac6b1fa01fd
BLAKE2b-256 664c9270b993c349345bd56bd9ede46773aab488ff7088090e3e943e5bf8fd5c

See more details on using hashes here.

File details

Details for the file csh256-1.0.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for csh256-1.0.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9b5627ae0b1d689faa872fbf1929b626eaaf0123427696e26bc46195b45cedf9
MD5 8f403e1a70f881521664c0eaeab606f9
BLAKE2b-256 e97cee97cfda81ebe3a752b2a0740e884b9ffa9ee86c0d5ca818bbe3383006a5

See more details on using hashes here.

File details

Details for the file csh256-1.0.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for csh256-1.0.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 50192e050f321e59a75ec78e21100628940de0efe4d3bd5023f58d3aa97e8370
MD5 579454f6500f20deae6de48537e8264e
BLAKE2b-256 723fcd4cd85d203c887b9827a28bba602597d0b7820cd732c28c4aacffadadb7

See more details on using hashes here.

File details

Details for the file csh256-1.0.6-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for csh256-1.0.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cbe029d25ade6170c555bfc53e3919b41c25ab3d7fd5f04e6f3f1ce2a4dbf48b
MD5 c965a5f01032a8c7d6bfe1a34f6fa182
BLAKE2b-256 5442aa71f6003c9d3a6a230d4d5a45ac58bc2330b6485a43467ddcf77e169896

See more details on using hashes here.

File details

Details for the file csh256-1.0.6-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: csh256-1.0.6-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 29.9 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for csh256-1.0.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f7e91c93aa7e817052485d7ff7a48f46713da95f3689cc92c11603906a697c09
MD5 bbde53a016e58671ead53e0dd57ebc87
BLAKE2b-256 522be98e2151c43ceab0aa60431135aacab36f16f3f21af84392eeb5175b1be5

See more details on using hashes here.

File details

Details for the file csh256-1.0.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for csh256-1.0.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fa7a2027be3da557c248e2c038d27b75087710871c3277f3e58e30225bcbad22
MD5 173df760b4e8a6a95d92182d00c90cdc
BLAKE2b-256 4b6e3757423c47551be751d69f09755e1c7cc51f8dfaee007ea46285e2b2a13f

See more details on using hashes here.

File details

Details for the file csh256-1.0.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for csh256-1.0.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d8a4477580aeda4cf91d5ed612c2659e58238d45964360d20021781a0c5e963c
MD5 cdc2d26c09ed555c2f27917086a68642
BLAKE2b-256 6b17b2798ac717d6b7a6289bd3fae3160da2089724bdac7d45a5d823527e6cc1

See more details on using hashes here.

File details

Details for the file csh256-1.0.6-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for csh256-1.0.6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e96430dc6b6b2b6175b6ce680bf197f1e92d004be74de244718631ad29920794
MD5 4e7b3e5ebf37e3b939029b3cdd742f47
BLAKE2b-256 52ee115ad8af72b35e609408bb3ac62919264d18e8127225858c4019399db82d

See more details on using hashes here.

File details

Details for the file csh256-1.0.6-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: csh256-1.0.6-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 29.9 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for csh256-1.0.6-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 16da109f8f3c5c50ae78e5c53fcfc8f5c41bb81a83296e9694625bfbb2f20d91
MD5 d84378c3ecc867f3dca12ae0403a85b6
BLAKE2b-256 6508a15004cba32d0c8f3891e383be1c885060b02b0ff9602436e64513cabb9c

See more details on using hashes here.

File details

Details for the file csh256-1.0.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for csh256-1.0.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0545ef681d132a76817af3dd6decc2436c078df1d6e3dbe0eae54e83107e7a88
MD5 a3f1f46ed07d82421f68ba5c38d1b97b
BLAKE2b-256 5d3facdefb853c0eedada4e57307f176e070c074ee52cb06d59574ff4529244d

See more details on using hashes here.

File details

Details for the file csh256-1.0.6-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for csh256-1.0.6-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0df884cb015480ed28b0c8792e409b378fc4198b1c5ff9af1200c7dd97e0d259
MD5 75280cd269da8832138b55aa380988a7
BLAKE2b-256 cc461d4af521a51cfad1e83b04d293f02079b815e5e8b5ca1cc8cce23a864bf7

See more details on using hashes here.

File details

Details for the file csh256-1.0.6-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for csh256-1.0.6-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 316432fee3b1a8748ac325b4c8a0fadb68ffeff2c1965e72a5ea24a8f13abe20
MD5 c5757be4d4c0d2c1d838a5f54ca25839
BLAKE2b-256 764b68d40c4afede6140b16b95b4440fb2ffe7726f0cc4002afae10e75aed694

See more details on using hashes here.

File details

Details for the file csh256-1.0.6-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: csh256-1.0.6-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 29.9 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for csh256-1.0.6-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 eb5ce503741f999bd45649c88ab53aa8a0695616b17ab54f7479ceb6e4f2e1a2
MD5 af7615c99af13235527830b301de57ff
BLAKE2b-256 9465ccd7bdffa2486a563696bfd656305dfd448d99e21410b5798812dd9f414f

See more details on using hashes here.

File details

Details for the file csh256-1.0.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for csh256-1.0.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 55f8e7512183b081adca2220e68ba48b0818ab718ba3efd49f9be84cadf1934c
MD5 ff5d3c6ba6cd863aa6ce79693a92c129
BLAKE2b-256 dd8fcc012a99944cfbe1f5e1e4e41e2046b924e6894588d4e1f1418f0764282b

See more details on using hashes here.

File details

Details for the file csh256-1.0.6-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for csh256-1.0.6-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0dacf81ce96c71f64e4bba37f38c5c0791cdd926f8eb80195fb28a60b71acc8f
MD5 6e4ef88c0ab34bd75ee3a05a75191dab
BLAKE2b-256 b3bce57b537c98c363dd9c5a7a17570873df1510b075d656925b95d77154a650

See more details on using hashes here.

File details

Details for the file csh256-1.0.6-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for csh256-1.0.6-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 17aa15817d67fac99d0c2e0e1d014e32500e7342ca9e030c177c333b3f06ef89
MD5 0fb19d6b33d76a040418234752e58522
BLAKE2b-256 d06669d048fa97b441de175996059f420b636b8ac8ae6438f87d95d9bfdc484a

See more details on using hashes here.

Supported by

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