Python bindings for GxHash
Project description
gxhash-py
Python bindings for GxHash, a blazingly fast and robust non-cryptographic hashing algorithm.
Latency of 128-bit hash functions on a 4 MiB payload
Highlights
- Fastest non-cryptographic hash algorithm of its class.
- 100x faster than MD5 and up to 3x faster than xxHash on larger payloads.
- Support for async hashing with multithreaded parallelism for non-blocking applications.
- Provides a performant, drop-in replacement for the built-in hashlib module.
- Guaranteed stable hashes across all supported platforms.
- Passes all SMHasher tests and produces high-quality, hardware-accelerated 32/64/128-bit hashes.
- Fully-typed, clean API with uncompromising strict-mode conformance across all major type checkers.
- Pure Rust backend with zero additional Python runtime overhead.
- Zero-copy data access across the FFI boundary via the buffer protocol.
- SIMD-accelerated hexdigest encoding with SSSE3/NEON intrinsics.
- Zero-dependency installations on all platforms supported by maturin and puccinialin.
Installation
gxhash is available on PyPI and can be installed via pip.
pip install gxhash
For the best throughput, you can allow gxhash to use wider registers by installing with the MATURIN_PEP517_ARGS variable.
[!WARNING] This is only possible on systems that support
VAESandAVX2instruction sets. Running on unsupported hardware will result in an illegal instruction error at runtime.
MATURIN_PEP517_ARGS="--features hybrid" pip install gxhash
By default, gxhash attempts to detect and use your system's vectorisation features. You can manually control this by setting the specific RUSTFLAGS for your machine. For x64 systems, the minimum required features are aes and ssse3.
RUSTFLAGS="-C target-feature=+aes,+ssse3" pip install gxhash
For ARM64 systems, the minimum required features are aes and neon.
RUSTFLAGS="-C target-feature=+aes,+neon" pip install gxhash
gxhash compiles with a pinned nightly toolchain. If you are restricted to a minimum Rust version, you can override the default toolchain with the RUSTUP_TOOLCHAIN variable.
[!NOTE] The
hybridfeature cannot be used alongside stable Rust.
RUSTUP_TOOLCHAIN="1.83.0" pip install gxhash
Supported Platforms
gxhash is well supported across a wide range of platforms, thanks in part to maturin, and more specifically puccinialin. Therefore, gxhash supports all platforms that maturin and puccinialin support. gxhash is also actively tested on the following platforms:
- Ubuntu 24.04 x64
- Ubuntu 24.04 ARM64
- macOS 15 x64
- macOS 15 ARM64
- Windows Server 2025 x64
- Windows 11 ARM64
Usage
Hashing bytes.
from gxhash import GxHash32
def main() -> None:
gxhash = GxHash32(seed=0)
result = gxhash.hash(b"Hello, world!")
if __name__ == "__main__":
main()
Hashing bytes asynchronously.
[!IMPORTANT] As with Python's
hashlib, callers must not mutate the input buffer during a hash operation.
from asyncio import run
from gxhash import GxHash128
async def main() -> None:
gxhash = GxHash128(seed=0)
result = await gxhash.hash_async(b"Hello, world!")
if __name__ == "__main__":
run(main())
As a drop-in replacement for hashlib.
[!WARNING] GxHash is not an incremental hasher, and all inputs provided to the
updatemethod will be accumulated internally. This can lead to an unexpected increase in memory usage if you are expecting streaming behaviour. Also note that hash computation ingxhash.hashlibfunctions are deferred and only computed whendigestorhexdigestis called.
from gxhash.hashlib import gxhash128
def main() -> None:
hasher = gxhash128(data=b"Hello, world!", seed=0)
result = hasher.hexdigest()
if __name__ == "__main__":
main()
Contribute
Read the CONTRIBUTING.md docs for development setup and guidelines.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file gxhash-0.5.2.tar.gz.
File metadata
- Download URL: gxhash-0.5.2.tar.gz
- Upload date:
- Size: 12.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9327fbc2a66359a8d3cdb4fb5d277265667b39d4d8a5f18d41db07a260e64cf0
|
|
| MD5 |
314c00d1082712a74248d6979c80de7b
|
|
| BLAKE2b-256 |
22cb4b56bbe3da5a6937e8bc97d486dfa0fb45a7bbe7eae2f747f0eb3ca43469
|