Skip to main content

Python bindings for GxHash

Project description

gxhash-py

GitHub PyPi PyPI - Downloads python codecov main.yml

Python bindings for GxHash, a blazingly fast and robust non-cryptographic hashing algorithm.

Shows a bar chart with benchmark results.

Hashing a 4 MiB payload

Highlights

[^1]: Highest throughput across every payload size, compared against non-cryptographic hash algorithms that pass the SMHasher quality tests.

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 VAES and AVX2 instruction 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 hybrid feature 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 26 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, hash computations are deferred and only computed when digest or hexdigest is called

[!WARNING] GxHash is not an incremental hasher, and all inputs provided to the update method will be accumulated internally. This can lead to an unexpected increase in memory usage if you are expecting streaming behaviour.

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gxhash-0.6.0.tar.gz (12.3 kB view details)

Uploaded Source

File details

Details for the file gxhash-0.6.0.tar.gz.

File metadata

  • Download URL: gxhash-0.6.0.tar.gz
  • Upload date:
  • Size: 12.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","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

Hashes for gxhash-0.6.0.tar.gz
Algorithm Hash digest
SHA256 4e47ef497bd7af7b38c3aa381e3a22e5a8fa0c3c2221dd64ac73beaf43225a68
MD5 a991a3a6afebb99e55a6cdca7e96a3e9
BLAKE2b-256 9927c8c644d67b626ec096f802be5008d2e72f2f2ef03129205cdd85dcdf6dee

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