Metadata-Version: 2.4
Name: spookyhash
Version: 2.1.1
Summary: A Python wrapper for SpookyHash version 2
Author-email: Alen Buhanec <alen.buhanec@gmail.com>
License: MIT
Project-URL: Homepage, https://github.com/buhanec/spookyhash
Project-URL: Repository, https://github.com/buhanec/spookyhash
Project-URL: Issues, https://github.com/buhanec/spookyhash/issues
Keywords: SpookyHash,hashlib
Classifier: Topic :: Software Development :: Libraries
Classifier: Development Status :: 5 - Production/Stable
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Typing :: Typed
Description-Content-Type: text/markdown
License-File: LICENSE
Provides-Extra: test
Requires-Dist: pytest; extra == "test"
Requires-Dist: hypothesis; extra == "test"
Dynamic: license-file

# spookyhash

A Python wrapper of Bob Jenkins' [SpookyHash version 2](http://burtleburtle.net/bob/hash/spooky.html). Offers 32- 64- and 128-bit oneshot and incremental hashes.   

# License

> Licensed under the MIT license. See the LICENSE file in the repository root for more details.

# Usage

## Installation

Available through [spookyhash - PyPI](https://pypi.org/project/spookyhash/) using `pip install spookyhash`.

## Oneshot Hashes

```python
>>> import spookyhash

>>> spookyhash.hash32(b'hello world')
2617184861
>>> spookyhash.hash32(b'hello world', seed=0x12345678)
3380090220

>>> spookyhash.hash64(b'hello world')
14865987102431973981
>>> spookyhash.hash64(b'hello world', seed=123)
5719863273689036421

>>> spookyhash.hash128(b'hello world')
185933735475381961281710998418114941533
>>> spookyhash.hash128(b'hello world', seed1=123_000, seed2=456_000)
144121310386202441278894605216246194925

>>> # For a more comparable result to other libraries
>>> spookyhash.hash128_pair(b'hello world')
(14865987102431973981, 10079487997037711397)
>>> spookyhash.hash128_pair(b'hello world', seed1=123_000, seed2=456_000)
(12678109464562819821, 7812831891108919044)
```

## Incremental Hashes

```python
>>> import spookyhash

>>> sh = spookyhash.Hash32()
>>> sh.update(b'hello')
>>> sh.update(b' ')
>>> sh.update(b'world')
>>> sh.final()
2617184861
>>> sh.hexdigest()
'5d12ff9b'

>>> spookyhash.Hash64(b'hello ', seed=123).update(b'world').final()
5719863273689036421

>>> spookyhash.Hash64(b'hello ', seed=123).update(b'world').hexdigest()
'85b609a05709614f'

>>> sh = spookyhash.Hash128(seed1=123_000, seed2=456_000)
>>> sh.update(b'hello world')
>>> sh.final()
144121310386202441278894605216246194925
>>> sh.final_pair()
(12678109464562819821, 7812831891108919044)
>>> sh.hexdigest()
'ede2c8f262b1f1af04f763f735c16c6c'
```

## `memoryview` Support

Includes `memoryview` compatible types, such as NumPy arrays.

```python
>>> import spookyhash
>>> import numpy as np

>>> spookyhash.Hash64(np.arange(100)).hexdigest()
'43ab5363ad362c74'

>>> spookyhash.Hash64(memoryview(b'hello world')).hexdigest()
'5d12ff9b81984ece'
```

# Platform Independence

If run on a big-endian system, the code would produce different hashes, but of equal quality.
