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 exponentiation (h³ mod 2⁶⁴) inspired by RSA
  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 exponentiation (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.5.tar.gz (25.2 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.5-cp312-cp312-win_amd64.whl (30.1 kB view details)

Uploaded CPython 3.12Windows x86-64

csh256-1.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (27.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

csh256-1.0.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (27.6 kB view details)

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

csh256-1.0.5-cp312-cp312-macosx_11_0_arm64.whl (26.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

csh256-1.0.5-cp311-cp311-win_amd64.whl (30.1 kB view details)

Uploaded CPython 3.11Windows x86-64

csh256-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (27.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

csh256-1.0.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (27.6 kB view details)

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

csh256-1.0.5-cp311-cp311-macosx_11_0_arm64.whl (26.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

csh256-1.0.5-cp310-cp310-win_amd64.whl (30.1 kB view details)

Uploaded CPython 3.10Windows x86-64

csh256-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (27.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

csh256-1.0.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (27.6 kB view details)

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

csh256-1.0.5-cp310-cp310-macosx_11_0_arm64.whl (26.3 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

csh256-1.0.5-cp39-cp39-win_amd64.whl (30.1 kB view details)

Uploaded CPython 3.9Windows x86-64

csh256-1.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (27.1 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

csh256-1.0.5-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (27.5 kB view details)

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

csh256-1.0.5-cp39-cp39-macosx_11_0_arm64.whl (26.3 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

csh256-1.0.5-cp38-cp38-win_amd64.whl (30.0 kB view details)

Uploaded CPython 3.8Windows x86-64

csh256-1.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (36.7 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

csh256-1.0.5-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (37.2 kB view details)

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

csh256-1.0.5-cp38-cp38-macosx_11_0_arm64.whl (26.3 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: csh256-1.0.5.tar.gz
  • Upload date:
  • Size: 25.2 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.5.tar.gz
Algorithm Hash digest
SHA256 948500d82dc67cbe61b125eadecd9511f085b9546fca2329456dd8b6f67dd8e2
MD5 3849f328541f4f8735dcd7548e1dfde8
BLAKE2b-256 5a41db1d7ba78008e313e130d9863a2b0afa297141fe8edf8810f3bd1240e6f9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: csh256-1.0.5-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 30.1 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.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1837759de9b0ad4629e08dffccae8cf91a78ca87a056b500a02d79c391e30422
MD5 dd0199df75b6bc2aee4e58d32bb15e78
BLAKE2b-256 89ff2aaf326d4c13078583e135cd74ca8bee8054b9e636f7e8be6984f70adbfb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csh256-1.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d28650690dd409f079e2754a2b8bf33c908b0d55ce18e77c48ee55655616132c
MD5 c2a14fbf47996125ad239123a8739c05
BLAKE2b-256 947bfb437f1caa6713b71deda2d1103a639946e044be4f4925bc396cce6658a1

See more details on using hashes here.

File details

Details for the file csh256-1.0.5-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.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4c83979d10088899a7e8bd4c5cc07f0f9b8a5add98b675aaba1767bb2f58cb19
MD5 5f703b2147f97c19b9e3ac128ab4fc77
BLAKE2b-256 3bffeb7848fe99a0dcd005b6dbb8d94c0d53eea3ac1c29be58d0c216bce9623c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csh256-1.0.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1e73b187b85b4abc2fcb007ddb03d06c5f1d0ec54a3402ea0b06760165a68878
MD5 003468f3d98894dba098f0280a27c71b
BLAKE2b-256 33d262f7bf27b4d86b5a8f49ccc649d01b619e62e3bfa5d935292a9eb2387aa9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: csh256-1.0.5-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 30.1 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.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b8392711b4509257b777313a69d2556f8217ef0139ecaf696279ee6d994a9fc7
MD5 9731cdeba3bd393524e480382317c5ec
BLAKE2b-256 4a6a9e80b07ecaa7d4d7d95868afd531b8abc586bc3728b58fb0fcdcd994e241

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csh256-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 18b0735ccb082eed4dbc1a915899cada38e68a16801f066955478f9378857598
MD5 d0f8ae75edee1025e6c742d70f1fe49f
BLAKE2b-256 eae76cd669f3d77ee678fdc7b63e99e65a47c43f9805650058580f621b3e9c79

See more details on using hashes here.

File details

Details for the file csh256-1.0.5-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.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1f8535962ee5d74633a6aee7dfccea9d184a0ea5086631b421fbb536b3871d41
MD5 78fd20dbc5e386b361392bce5c4a05d0
BLAKE2b-256 e3a080d4220caa0008f72fbc5fa23851836dfffff4b5baa9d1a40b1363b022a7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csh256-1.0.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 35785b88fbf7e4561190eb64b0c318145b4d20148373e615c8f18f578a876d35
MD5 782fbbe43eea5d4631551fbc46ce68d0
BLAKE2b-256 680f9853cb0406ad78d5b6384773a944542d68233f75c9ad6efbd91db65001e0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: csh256-1.0.5-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 30.1 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.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 2b4f45913dbe8884ba23b8005d1b48c3c66017da8861f6ec8be0e7ef3ea2f7c2
MD5 c078b30ef11da343aa5b394414a5b95a
BLAKE2b-256 741ad6e13a84766e65e28c0bfbeb6eb4cb29d95a4ae5dcd19c467aa525e9ff92

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csh256-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cc53d6cbb943cc841f91dedda8cfef1a5d83eb9d677f6eb218ba96110f3f9e06
MD5 ab0b8db2f1ce343339c8e0a9fde8f25a
BLAKE2b-256 78693132cf9e696b2cebdb866933c20042a659b1f77092f208b546ff88fa4def

See more details on using hashes here.

File details

Details for the file csh256-1.0.5-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.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 eb8abd93f22e9f9ebd7693aa2872be163b21722743b04a6067514da8391b9875
MD5 b20c18a06d9418efac74293574c6468a
BLAKE2b-256 7783af878e1996f5dbfa7a70d139ceb7502ee7175015a19c3777ada46984e903

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csh256-1.0.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8a70861878f5d3f8ebe3ac0485b1f6827ef8fb7b6232073a66d7bbe7e8c8506a
MD5 ebf6cdf04d8e5e69681ddfbf92d37196
BLAKE2b-256 f39d9cd549c99fd72eabb3082383eae30773e8f26b871e82c6c845b9bfc01514

See more details on using hashes here.

File details

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

File metadata

  • Download URL: csh256-1.0.5-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 30.1 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.5-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 3b002582cccefea4eae4b6c07597fcdfd88583e6c9f6338c9b15f0ba647e220d
MD5 c3f34c73a6929b318a64f8604a783f07
BLAKE2b-256 c97f502326e2f2ba754a308ea4ea57716d3fc53b65ad1dccf32ccfc352405769

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csh256-1.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2bda1fc9b970523844cfab3401a9072fea58244407a815c92c63a72621bbe528
MD5 ed3df1ba914cbd8516c903b0c71d731e
BLAKE2b-256 893091d4ec34225ad55692ca1e910617c2180b87554e1ba4744c3b62601af3b7

See more details on using hashes here.

File details

Details for the file csh256-1.0.5-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.5-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7c95e778d1755c2b00729e1449bbe573e20ea47229542648aa3666929d67ed5c
MD5 e449a46b2d39efdd1c34a747515d8415
BLAKE2b-256 ac91d8f741fca94a4c5cb60ac0aca6089d7aa3e07e58e41ab1751db5c303fe17

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csh256-1.0.5-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 129ea4efb5237dff649742522b9ebac4f59602ce9e99e4682748665429760d68
MD5 8824b2b5b8fed74e5c128d1c9ad4f987
BLAKE2b-256 d678c19b78ed7d92dcd839bf959644a53a0b30310da2b76293e2d51909587a7d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: csh256-1.0.5-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 30.0 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.5-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 4ff9efb4bca415625d965ce07a0c97dcf6fdfa8f800559abae3dc0e0b3fcbf3d
MD5 a62cc724457e03d49d9c7e269efb512e
BLAKE2b-256 7a9edbc80f8742fc5627ec83988fb7005fecc430e50d7405b7d60032806e33c8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csh256-1.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f19fbaf95eb6dd21236738d1e837f2a11937361b0fff6637a4412f5e4a068164
MD5 43a1d6434b0e4d325cdb79f634fbb733
BLAKE2b-256 5011added446660bf6b2a9331a05ab41dde2cba98b27773a346477f3a9da9334

See more details on using hashes here.

File details

Details for the file csh256-1.0.5-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.5-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7c406079171986686c00f59b1bf8a03d389b0ce5864e6519c04491ea88c1bab1
MD5 ef4a0a00888721e6f48a4b44db05a0f6
BLAKE2b-256 f9738e581af0dc69818d278f2b2f93a81251e744e86108c74ea533feaf3d9e46

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csh256-1.0.5-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f552bbbb47e66e1c47b9c77892613613fee8854dbdf60edd1b01cae763dd8f0f
MD5 935272cc983938b4b6874a426f19f2a9
BLAKE2b-256 496a45f9524db7be3cc38c9d55187f7604f6149b1a49e0f7522e88d1d990a200

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