Skip to main content

hashcodecs

CI PyPI Python License Downloads

hashcodecs provides runtime-dispatched SIMD Base64 codecs and fast, reference-compatible MurmurHash3 functions for Rust and Python.

Design

  • Runtime-dispatched SIMD Base64 with portable scalar fallbacks.
  • Reference-compatible MurmurHash3 with SIMD acceleration.
  • Rust and Python *_into APIs for caller-managed output buffers.
  • A familiar Python Base64 API, including native batch encode and decode operations.

Install

pip3 install hashcodecs

Usage

Rust

let encoded = hashcodecs::b64encode(b"hello");
assert_eq!(encoded, "aGVsbG8=");

let mut output = [0_u8; 8];
let written = hashcodecs::b64encode_into(b"hello", &mut output).unwrap();
assert_eq!(&output[..written], b"aGVsbG8=");
assert_eq!(hashcodecs::murmur3_x86_32(b"hello", 0), 0x248b_fa47);

Python

import hashcodecs.base64 as base64
from hashcodecs import murmur3_32, murmur3_x64_128

assert base64.b64encode(b'hello') == b'aGVsbG8='
assert base64.b64decode(b'aGVsbG8=') == b'hello'
assert base64.b64encode_batch([b'hello', b'world']) == [b'aGVsbG8=', b'd29ybGQ=']
assert base64.b64decode_batch([b'aGVsbG8=', 'd29ybGQ=']) == [b'hello', b'world']
assert base64.b64encode(b'hello', padded=False) == b'aGVsbG8'
assert base64.b64decode(b'aGVsbG8', padded=False, canonical=True) == b'hello'
assert murmur3_32(b'hello') == 0x248BFA47

payload = b'hello'
encoded = bytearray(4 * ((len(payload) + 2) // 3))
encoded_len = base64.b64encode_into(payload, encoded)
decoded = bytearray(len(encoded))
decoded_len = base64.b64decode_into(encoded, decoded, validate=True)
assert encoded[:encoded_len] == b'aGVsbG8='
assert decoded[:decoded_len] == payload

hasher = murmur3_x64_128(seed=42)
hasher.update(b'hello')
assert hasher.hexdigest() == hasher.digest().hex()

Build an installable wheel and source distribution with:

uv build

Benchmark

Environment: Windows 10 x64 and Intel Core Ultra 7 265K.

Conditions: clean builds, one pinned logical CPU, single-threaded execution, 50 Rust samples, and 15 Python samples. Returned-output allocation is included except in the reusable-buffer table. Higher is better.

Run Locally

Comparison crates are development-only dependencies and are not included in consumer builds.

cargo bench --bench base64
cargo bench --bench murmur3
uv sync --group benchmark --no-install-project
uv run --no-project --with . python benchmarks/python_base64.py
uv run --no-project --with . python benchmarks/python_base64.py --into
uv run --no-project --with . python benchmarks/python_base64.py --bytearray-input
uv run --no-project --with . python benchmarks/python_base64_batch.py
uv run --no-project --with . python benchmarks/python_murmur3.py
uv run --no-project --with . python benchmarks/python_murmur3.py --incremental

Base64: Rust

Alphabet Input Operation hashcodecs base64 base64-turbo
Standard 4 KiB encode 20.41 GiB/s 5.81 GiB/s 18.29 GiB/s
4 KiB decode 27.11 GiB/s 4.33 GiB/s 16.95 GiB/s
1 MiB encode 42.38 GiB/s 5.16 GiB/s 19.60 GiB/s
1 MiB decode 31.07 GiB/s 4.10 GiB/s 18.17 GiB/s
32 MiB encode 11.97 GiB/s 3.28 GiB/s 10.94 GiB/s
32 MiB decode 11.51 GiB/s 3.35 GiB/s 10.45 GiB/s
URL-safe 4 KiB encode 20.46 GiB/s 5.81 GiB/s 18.31 GiB/s
4 KiB decode 25.65 GiB/s 4.35 GiB/s 16.96 GiB/s
1 MiB encode 42.56 GiB/s 5.18 GiB/s 19.66 GiB/s
1 MiB decode 29.42 GiB/s 4.08 GiB/s 18.16 GiB/s
32 MiB encode 11.86 GiB/s 3.29 GiB/s 11.09 GiB/s
32 MiB decode 11.67 GiB/s 3.36 GiB/s 10.62 GiB/s

MurmurHash3: Rust

Variant Input hashcodecs murmur3 murmurs fastmurmur3 mm3h
x86 32-bit 4 KiB 4.30 GiB/s 2.60 GiB/s 4.09 GiB/s n/a 4.30 GiB/s
1 MiB 4.26 GiB/s 2.59 GiB/s 4.04 GiB/s n/a 4.25 GiB/s
32 MiB 4.21 GiB/s 2.54 GiB/s 3.87 GiB/s n/a 4.03 GiB/s
x86 128-bit 4 KiB 9.54 GiB/s 4.97 GiB/s 8.64 GiB/s n/a n/a
1 MiB 9.84 GiB/s 5.06 GiB/s 8.77 GiB/s n/a n/a
32 MiB 9.63 GiB/s 4.84 GiB/s 6.05 GiB/s n/a n/a
x64 128-bit 4 KiB 10.76 GiB/s 6.83 GiB/s 9.45 GiB/s 10.06 GiB/s 9.54 GiB/s
1 MiB 10.84 GiB/s 6.89 GiB/s 9.51 GiB/s 10.04 GiB/s 9.51 GiB/s
32 MiB 10.12 GiB/s 6.11 GiB/s 6.64 GiB/s 7.25 GiB/s 6.70 GiB/s

Base64: Python

Python decoding uses validate=True, and hashcodecs passes bytes directly into Rust without an input copy.

Alphabet Input Operation hashcodecs CPython base64 pybase64
Standard 4 KiB encode 13.57 GiB/s 0.48 GiB/s 14.06 GiB/s
4 KiB decode 16.70 GiB/s 1.13 GiB/s 8.47 GiB/s
1 MiB encode 3.28 GiB/s 0.44 GiB/s 3.02 GiB/s
1 MiB decode 4.02 GiB/s 0.95 GiB/s 3.68 GiB/s
32 MiB encode 2.92 GiB/s 0.43 GiB/s 2.84 GiB/s
32 MiB decode 3.40 GiB/s 0.94 GiB/s 3.69 GiB/s
URL-safe 4 KiB encode 12.63 GiB/s 0.41 GiB/s 1.19 GiB/s
4 KiB decode 11.34 GiB/s 0.76 GiB/s 1.56 GiB/s
1 MiB encode 3.24 GiB/s 0.36 GiB/s 0.91 GiB/s
1 MiB decode 4.15 GiB/s 0.63 GiB/s 1.45 GiB/s
32 MiB encode 3.03 GiB/s 0.36 GiB/s 0.90 GiB/s
32 MiB decode 3.40 GiB/s 0.61 GiB/s 1.48 GiB/s

MurmurHash3: Python

Variant API Input hashcodecs mmh3
x86 32-bit one-shot 4 KiB 3.79 GiB/s 3.71 GiB/s
1 MiB 3.98 GiB/s 3.83 GiB/s
32 MiB 3.97 GiB/s 3.66 GiB/s
incremental 4 KiB 3.58 GiB/s 3.58 GiB/s
1 MiB 3.96 GiB/s 3.81 GiB/s
32 MiB 3.92 GiB/s 3.74 GiB/s
x86 128-bit one-shot 4 KiB 8.09 GiB/s 8.21 GiB/s
1 MiB 9.22 GiB/s 8.87 GiB/s
32 MiB 9.12 GiB/s 6.15 GiB/s
incremental 4 KiB 7.02 GiB/s 0.77 GiB/s
1 MiB 9.17 GiB/s 0.80 GiB/s
32 MiB 9.01 GiB/s 0.79 GiB/s
x64 128-bit one-shot 4 KiB 8.68 GiB/s 9.46 GiB/s
1 MiB 10.10 GiB/s 10.24 GiB/s
32 MiB 9.54 GiB/s 6.61 GiB/s
incremental 4 KiB 7.70 GiB/s 7.99 GiB/s
1 MiB 10.01 GiB/s 9.28 GiB/s
32 MiB 9.41 GiB/s 7.34 GiB/s

Reusable-buffer and mutable-input results are available in BENCHMARK.md.

SIMD References

The SIMD implementation follows the approach described in Faster Base64 Encoding and Decoding using AVX2 Instructions, with AVX-512 VBMI and AArch64 NEON backends selected automatically when available.

Download files

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

Source Distribution

hashcodecs-0.4.0.tar.gz (48.7 kB view details)

Uploaded Source

Built Distributions

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

hashcodecs-0.4.0-cp310-abi3-win_amd64.whl (236.2 kB view details)

Uploaded CPython 3.10+Windows x86-64

hashcodecs-0.4.0-cp310-abi3-manylinux_2_28_x86_64.whl (379.8 kB view details)

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

hashcodecs-0.4.0-cp310-abi3-macosx_11_0_arm64.whl (318.3 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

File details

Details for the file hashcodecs-0.4.0.tar.gz.

File metadata

  • Download URL: hashcodecs-0.4.0.tar.gz
  • Upload date:
  • Size: 48.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","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 hashcodecs-0.4.0.tar.gz
Algorithm Hash digest
SHA256 e16172067f8a1e18484a4d9ee126d4291e72f66be6e76ba0655664b5e194fcca
MD5 14f772e3025fdccb29b14c3ea13163bf
BLAKE2b-256 7be81aa966e634ebd89b2720b606d747710129d7c599bb4a000daf10e9ab8bea

See more details on using hashes here.

File details

Details for the file hashcodecs-0.4.0-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: hashcodecs-0.4.0-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 236.2 kB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","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 hashcodecs-0.4.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 7d04dd64e8845934e77ef667cd8b491dc1c513650be6fc3c2d92e6987350c5fb
MD5 c3f3d757492c5ea1e87d028d1e730b77
BLAKE2b-256 9410a19376389ed052f8e3ae29c563c76786426af09189e6820336bf4bfc1871

See more details on using hashes here.

File details

Details for the file hashcodecs-0.4.0-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: hashcodecs-0.4.0-cp310-abi3-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 379.8 kB
  • Tags: CPython 3.10+, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","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 hashcodecs-0.4.0-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 09f378a7cc6c7948dbbfa159d232be864396e0d176e5c2b8a4b02cb90cc0d639
MD5 9b15ee5036bdf9281caf6019b59fb951
BLAKE2b-256 ac4b49cec593225b93c22fede69fba100f9bc4e8d8e1aa8d9551af29c87eba70

See more details on using hashes here.

File details

Details for the file hashcodecs-0.4.0-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

  • Download URL: hashcodecs-0.4.0-cp310-abi3-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 318.3 kB
  • Tags: CPython 3.10+, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","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 hashcodecs-0.4.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a76789b55b7422db5ae962af914b96b8d6de59e361d1cca5c57861a5fb52e4ca
MD5 14bc1ee49f77778e17bd733562916ced
BLAKE2b-256 d374d4cb8e7b110e58fb14b5990ba51e9e4307dd52b82844be5411e3401bda3b

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