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.4.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.4-cp312-cp312-win_amd64.whl (30.0 kB view details)

Uploaded CPython 3.12Windows x86-64

csh256-1.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (27.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

csh256-1.0.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (27.9 kB view details)

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

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

Uploaded CPython 3.12macOS 11.0+ ARM64

csh256-1.0.4-cp311-cp311-win_amd64.whl (30.0 kB view details)

Uploaded CPython 3.11Windows x86-64

csh256-1.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (27.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

csh256-1.0.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (27.9 kB view details)

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

csh256-1.0.4-cp311-cp311-macosx_11_0_arm64.whl (26.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

csh256-1.0.4-cp310-cp310-win_amd64.whl (30.0 kB view details)

Uploaded CPython 3.10Windows x86-64

csh256-1.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (27.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

csh256-1.0.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (27.9 kB view details)

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

csh256-1.0.4-cp310-cp310-macosx_11_0_arm64.whl (26.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

csh256-1.0.4-cp39-cp39-win_amd64.whl (30.0 kB view details)

Uploaded CPython 3.9Windows x86-64

csh256-1.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (27.8 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

csh256-1.0.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (27.9 kB view details)

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

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

Uploaded CPython 3.9macOS 11.0+ ARM64

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

Uploaded CPython 3.8Windows x86-64

csh256-1.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (37.7 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

csh256-1.0.4-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (37.8 kB view details)

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

csh256-1.0.4-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.4.tar.gz.

File metadata

  • Download URL: csh256-1.0.4.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.4.tar.gz
Algorithm Hash digest
SHA256 22d6709254aedafa81e2a9d9d1c7da0a1bc983277745ea8c1f3af14c6d04d181
MD5 c7e555283e87878b4246a1e95ddba734
BLAKE2b-256 2c362552332ded24ccbafd522c95b125ca442802c838ff9748bbe967003ada31

See more details on using hashes here.

File details

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

File metadata

  • Download URL: csh256-1.0.4-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 30.0 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.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 15431d770eda85f743ba1f73f31fef510c013d8039ae8f8b2a65a1d8febab50e
MD5 9b6ba56f7f70a48387480da46c0e45ed
BLAKE2b-256 a7eb34b406f25db9360660af9472d8d59f993fd8ef3c3f6254ccdbc6298e92a5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csh256-1.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1bb7117161327f7256790eb1bd629e48d651993135cbb178bbaf0eb793d98db2
MD5 779b0fdd6fd31de1798fbc2ce9d9d391
BLAKE2b-256 7db3526eab2f90d3f266d58d71f36ca6d2aa43537a2b641b892e7ca3f4e438e7

See more details on using hashes here.

File details

Details for the file csh256-1.0.4-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.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 124498dfc32857914156f87caef24df3e44d292fe4d850706114066b6e669590
MD5 35ed5bea9c75607f0c711c3118d623c7
BLAKE2b-256 8362e60701b38126291a1d5722d3338e2992a1012d9532041d61f0693918564d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csh256-1.0.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 11535428c9f70901b001bbc3beb273525812c5f2f9f8c24c74d853112b9ef340
MD5 099953b36ef9a9e13cbe8fa7e5265526
BLAKE2b-256 cec83a7ffe0027c61d548ae2fe92ce28d1c9560db287dc3b8c97166c0149a617

See more details on using hashes here.

File details

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

File metadata

  • Download URL: csh256-1.0.4-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 30.0 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.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 95ab56cf2b734d725e6fb023771274c2554a1cf9c386bef3751992e020db3a9a
MD5 c7078c9d41c646ca675713d0f4da7ba6
BLAKE2b-256 e4dc9eb056efcfb4e7de19c572d1d622f4d1352ae9c10621bc5d0e11a43d156d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csh256-1.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7fa53572573d85468e57bb76ae55d24ed3a8825b792545d4fe2ff522ac276952
MD5 67d65ec93ea594610db711161dfa7ce6
BLAKE2b-256 708786eae2e62576167e08e4a155268cdf69a4a504844eb0582a642819a560fc

See more details on using hashes here.

File details

Details for the file csh256-1.0.4-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.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 037a7db5f71cd70700e283cdd825500e2aa644a55d607cdcb96d891458473036
MD5 9ca3c0f92b9ded9681588c82efcd2898
BLAKE2b-256 b53ceefd0457dabea38d963f2a64d2c26b5be99d23b1b9dac3559b4a3cab8572

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csh256-1.0.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d91539b1ff53a4dee9d47f00b675573eda2398466766a4962e09dfcc1edfb32b
MD5 56620b4c1f2eddf15a1c9179758512ae
BLAKE2b-256 cc1744838299cc416e6566dc4775fa9b058f5724f5ea94aace2e7c827c113cc3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: csh256-1.0.4-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 30.0 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.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 aa994f5395f5bba7dd5a58e907c39a05fd2f1dc669b8c3f64e5389a5ff116a70
MD5 74def2c44f50fcb4c33445db911ec250
BLAKE2b-256 84a961b9fd65ccca039f50dfb76c7333dbbbaea3eaca24188c9c4f44d54ccc06

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csh256-1.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d3d4f7e1966e03844bdb5c54c55a725dc491d705c2699bf71b4040732a05e453
MD5 02b9d50646c7471c2052741e60dda584
BLAKE2b-256 1979b29fb79bd0667a92c3b7cc1a9d611f85e9b34deeb43433bb709927845841

See more details on using hashes here.

File details

Details for the file csh256-1.0.4-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.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 16fce1615a98ae15546aa9014934f2fd7ef0e51b1ff6d275a8e0ea10b02a807b
MD5 ff7d18a3f608886a7d0b50a736bb8537
BLAKE2b-256 6ff95faa4fe3d723f288c680cbe9949e76d7b1dc769de4cce0882c62e180290e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csh256-1.0.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 88bab23327e96c479c599b31aa3773f355d9e3ef0be285a4bf240722932f38b4
MD5 0c822201507b8f6cb6155a480e1a2eae
BLAKE2b-256 a6244d9172d6e7422aeea51d51750de780967db951b234b86c091aa60f9eb1ed

See more details on using hashes here.

File details

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

File metadata

  • Download URL: csh256-1.0.4-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 30.0 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.4-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 00b97b334fb6e45b8c380fc07bbce95a2fafb472d9a4cb908834c805fa784122
MD5 de77c50933cdec6bd7771a4fb5b6a5f8
BLAKE2b-256 f802c3b87d2880b721ca4611e48e8992a3ad93b95fc2ed1c2fbde4be08039158

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csh256-1.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2f89a674daa2de4b6ca7b0d0960de32c974281ea68fbb253e44d732682a86e16
MD5 73a554259a4d5486a3be5b9a15f825ff
BLAKE2b-256 ccb7ae2d63ebf37d9aaef615ad7ba58877e1b463c978aeaa16b685e0201ee9ea

See more details on using hashes here.

File details

Details for the file csh256-1.0.4-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.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 37974fa6755da492121acc2232a7c82520be0c4f3401de4ad1e8c1b5251f1539
MD5 2037c54275be843849788b75ba6b71c2
BLAKE2b-256 bfcf1d494a724bd268b739ade55e5b1ee66f2f439d2ddaf415578ecfede0dd68

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csh256-1.0.4-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 773bd727e64dbe4b1a9ec3eeb10755fe848402ae3a7d234100023e69c63b1ddc
MD5 f7f2db2d81dab4b5c164c62962d9cd16
BLAKE2b-256 4aeae9a8326bd86bbca835439ec5917e2ec56b63ad16e292f1b35c9779d8619d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: csh256-1.0.4-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.4-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 53dcdefa3a3cb9162e43d9678bdbb3d6c7af611395e8c43eb47dfa5d8c5a4775
MD5 109010c501dce00d2c6c9368ebfd9338
BLAKE2b-256 c99df7021a102885078c0a40dac282cea65b4abad18967363c2adabf17ad514f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csh256-1.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 977615b1f6acd4bde7957838deba652858d34bcba70e7e2099f5406ba8a51206
MD5 aa6f64451e8c5bf3ae0028d01a934af9
BLAKE2b-256 318e88f73f020a64cd223f033ac522d33756845ac2680b5b74789affe8e0101a

See more details on using hashes here.

File details

Details for the file csh256-1.0.4-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.4-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 77b12fbc6e1d5f78b0572b0e14ef83ad8aebec00ec6e5207aca652468e1b63ff
MD5 1d2ea03ff7c43b818485a32d3569f5b7
BLAKE2b-256 6e4ed225ecacf201c4d3fc8729bf5b3b8771d45f8b5fd0846a425ff97c6257ea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for csh256-1.0.4-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2b959abf704150e9362078510ed973c209f620a63e583da5ef859839cee980cb
MD5 5fd1b53a26d5e31c2949caaee02e2dd3
BLAKE2b-256 77ee7ba2db4d8b128e1cf342abeb23644d1648182f45154b1c1b5a0b442adff2

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