| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542 |
- Metadata-Version: 2.4
- Name: xxhash
- Version: 3.6.0
- Summary: Python binding for xxHash
- Home-page: https://github.com/ifduyue/python-xxhash
- Author: Yue Du
- Author-email: ifduyue@gmail.com
- License: BSD
- Classifier: Development Status :: 5 - Production/Stable
- Classifier: License :: OSI Approved :: BSD License
- Classifier: Intended Audience :: Developers
- Classifier: Programming Language :: Python
- Classifier: Programming Language :: Python :: 3
- Classifier: Programming Language :: Python :: 3 :: Only
- 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: Programming Language :: Python :: Implementation :: CPython
- Classifier: Programming Language :: Python :: Free Threading :: 1 - Unstable
- Requires-Python: >=3.7
- Description-Content-Type: text/x-rst
- License-File: LICENSE
- Dynamic: author
- Dynamic: author-email
- Dynamic: classifier
- Dynamic: description
- Dynamic: description-content-type
- Dynamic: home-page
- Dynamic: license
- Dynamic: license-file
- Dynamic: requires-python
- Dynamic: summary
- python-xxhash
- =============
- .. image:: https://github.com/ifduyue/python-xxhash/actions/workflows/test.yml/badge.svg
- :target: https://github.com/ifduyue/python-xxhash/actions/workflows/test.yml
- :alt: Github Actions Status
- .. image:: https://img.shields.io/pypi/v/xxhash.svg
- :target: https://pypi.org/project/xxhash/
- :alt: Latest Version
- .. image:: https://img.shields.io/pypi/pyversions/xxhash.svg
- :target: https://pypi.org/project/xxhash/
- :alt: Supported Python versions
- .. image:: https://img.shields.io/pypi/l/xxhash.svg
- :target: https://pypi.org/project/xxhash/
- :alt: License
- .. _HMAC: http://en.wikipedia.org/wiki/Hash-based_message_authentication_code
- .. _xxHash: https://github.com/Cyan4973/xxHash
- .. _Cyan4973: https://github.com/Cyan4973
- xxhash is a Python binding for the xxHash_ library by `Yann Collet`__.
- __ Cyan4973_
- Installation
- ------------
- .. code-block:: bash
- $ pip install xxhash
-
- You can also install using conda:
- .. code-block:: bash
- $ conda install -c conda-forge python-xxhash
- Installing From Source
- ~~~~~~~~~~~~~~~~~~~~~~~
- .. code-block:: bash
- $ pip install --no-binary xxhash xxhash
- Prerequisites
- ++++++++++++++
- On Debian/Ubuntu:
- .. code-block:: bash
- $ apt-get install python-dev gcc
- On CentOS/Fedora:
- .. code-block:: bash
- $ yum install python-devel gcc redhat-rpm-config
- Linking to libxxhash.so
- ~~~~~~~~~~~~~~~~~~~~~~~~
- By default python-xxhash will use bundled xxHash,
- we can change this by specifying ENV var ``XXHASH_LINK_SO``:
- .. code-block:: bash
- $ XXHASH_LINK_SO=1 pip install --no-binary xxhash xxhash
- Usage
- --------
- Module version and its backend xxHash library version can be retrieved using
- the module properties ``VERSION`` AND ``XXHASH_VERSION`` respectively.
- .. code-block:: python
- >>> import xxhash
- >>> xxhash.VERSION
- '2.0.0'
- >>> xxhash.XXHASH_VERSION
- '0.8.0'
- This module is hashlib-compliant, which means you can use it in the same way as ``hashlib.md5``.
- | update() -- update the current digest with an additional string
- | digest() -- return the current digest value
- | hexdigest() -- return the current digest as a string of hexadecimal digits
- | intdigest() -- return the current digest as an integer
- | copy() -- return a copy of the current xxhash object
- | reset() -- reset state
- md5 digest returns bytes, but the original xxh32 and xxh64 C APIs return integers.
- While this module is made hashlib-compliant, ``intdigest()`` is also provided to
- get the integer digest.
- Constructors for hash algorithms provided by this module are ``xxh32()`` and ``xxh64()``.
- For example, to obtain the digest of the byte string ``b'Nobody inspects the spammish repetition'``:
- .. code-block:: python
- >>> import xxhash
- >>> x = xxhash.xxh32()
- >>> x.update(b'Nobody inspects')
- >>> x.update(b' the spammish repetition')
- >>> x.digest()
- b'\xe2);/'
- >>> x.digest_size
- 4
- >>> x.block_size
- 16
- More condensed:
- .. code-block:: python
- >>> xxhash.xxh32(b'Nobody inspects the spammish repetition').hexdigest()
- 'e2293b2f'
- >>> xxhash.xxh32(b'Nobody inspects the spammish repetition').digest() == x.digest()
- True
- An optional seed (default is 0) can be used to alter the result predictably:
- .. code-block:: python
- >>> import xxhash
- >>> xxhash.xxh64('xxhash').hexdigest()
- '32dd38952c4bc720'
- >>> xxhash.xxh64('xxhash', seed=20141025).hexdigest()
- 'b559b98d844e0635'
- >>> x = xxhash.xxh64(seed=20141025)
- >>> x.update('xxhash')
- >>> x.hexdigest()
- 'b559b98d844e0635'
- >>> x.intdigest()
- 13067679811253438005
- Be careful that xxh32 takes an unsigned 32-bit integer as seed, while xxh64
- takes an unsigned 64-bit integer. Although unsigned integer overflow is
- defined behavior, it's better not to make it happen:
- .. code-block:: python
- >>> xxhash.xxh32('I want an unsigned 32-bit seed!', seed=0).hexdigest()
- 'f7a35af8'
- >>> xxhash.xxh32('I want an unsigned 32-bit seed!', seed=2**32).hexdigest()
- 'f7a35af8'
- >>> xxhash.xxh32('I want an unsigned 32-bit seed!', seed=1).hexdigest()
- 'd8d4b4ba'
- >>> xxhash.xxh32('I want an unsigned 32-bit seed!', seed=2**32+1).hexdigest()
- 'd8d4b4ba'
- >>>
- >>> xxhash.xxh64('I want an unsigned 64-bit seed!', seed=0).hexdigest()
- 'd4cb0a70a2b8c7c1'
- >>> xxhash.xxh64('I want an unsigned 64-bit seed!', seed=2**64).hexdigest()
- 'd4cb0a70a2b8c7c1'
- >>> xxhash.xxh64('I want an unsigned 64-bit seed!', seed=1).hexdigest()
- 'ce5087f12470d961'
- >>> xxhash.xxh64('I want an unsigned 64-bit seed!', seed=2**64+1).hexdigest()
- 'ce5087f12470d961'
- ``digest()`` returns bytes of the **big-endian** representation of the integer
- digest:
- .. code-block:: python
- >>> import xxhash
- >>> h = xxhash.xxh64()
- >>> h.digest()
- b'\xefF\xdb7Q\xd8\xe9\x99'
- >>> h.intdigest().to_bytes(8, 'big')
- b'\xefF\xdb7Q\xd8\xe9\x99'
- >>> h.hexdigest()
- 'ef46db3751d8e999'
- >>> format(h.intdigest(), '016x')
- 'ef46db3751d8e999'
- >>> h.intdigest()
- 17241709254077376921
- >>> int(h.hexdigest(), 16)
- 17241709254077376921
- Besides xxh32/xxh64 mentioned above, oneshot functions are also provided,
- so we can avoid allocating XXH32/64 state on heap:
- | xxh32_digest(bytes, seed=0)
- | xxh32_intdigest(bytes, seed=0)
- | xxh32_hexdigest(bytes, seed=0)
- | xxh64_digest(bytes, seed=0)
- | xxh64_intdigest(bytes, seed=0)
- | xxh64_hexdigest(bytes, seed=0)
- .. code-block:: python
- >>> import xxhash
- >>> xxhash.xxh64('a').digest() == xxhash.xxh64_digest('a')
- True
- >>> xxhash.xxh64('a').intdigest() == xxhash.xxh64_intdigest('a')
- True
- >>> xxhash.xxh64('a').hexdigest() == xxhash.xxh64_hexdigest('a')
- True
- >>> xxhash.xxh64_hexdigest('xxhash', seed=20141025)
- 'b559b98d844e0635'
- >>> xxhash.xxh64_intdigest('xxhash', seed=20141025)
- 13067679811253438005L
- >>> xxhash.xxh64_digest('xxhash', seed=20141025)
- '\xb5Y\xb9\x8d\x84N\x065'
- .. code-block:: python
- In [1]: import xxhash
- In [2]: %timeit xxhash.xxh64_hexdigest('xxhash')
- 268 ns ± 24.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
- In [3]: %timeit xxhash.xxh64('xxhash').hexdigest()
- 416 ns ± 17.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
- XXH3 hashes are available since v2.0.0 (xxHash v0.8.0), they are:
- Streaming classes:
- | xxh3_64
- | xxh3_128
- Oneshot functions:
- | xxh3_64_digest(bytes, seed=0)
- | xxh3_64_intdigest(bytes, seed=0)
- | xxh3_64_hexdigest(bytes, seed=0)
- | xxh3_128_digest(bytes, seed=0)
- | xxh3_128_intdigest(bytes, seed=0)
- | xxh3_128_hexdigest(bytes, seed=0)
- And aliases:
- | xxh128 = xxh3_128
- | xxh128_digest = xxh3_128_digest
- | xxh128_intdigest = xxh3_128_intdigest
- | xxh128_hexdigest = xxh3_128_hexdigest
- Caveats
- -------
- SEED OVERFLOW
- ~~~~~~~~~~~~~~
- xxh32 takes an unsigned 32-bit integer as seed, and xxh64 takes
- an unsigned 64-bit integer as seed. Make sure that the seed is greater than
- or equal to ``0``.
- ENDIANNESS
- ~~~~~~~~~~~
- As of python-xxhash 0.3.0, ``digest()`` returns bytes of the
- **big-endian** representation of the integer digest. It used
- to be little-endian.
- DONT USE XXHASH IN HMAC
- ~~~~~~~~~~~~~~~~~~~~~~~
- Though you can use xxhash as an HMAC_ hash function, but it's
- highly recommended not to.
- xxhash is **NOT** a cryptographic hash function, it is a
- non-cryptographic hash algorithm aimed at speed and quality.
- Do not put xxhash in any position where cryptographic hash
- functions are required.
- Copyright and License
- ---------------------
- Copyright (c) 2014-2025 Yue Du - https://github.com/ifduyue
- Licensed under `BSD 2-Clause License <http://opensource.org/licenses/BSD-2-Clause>`_
- CHANGELOG
- -----------
- v3.6.0 2025-10-02
- ~~~~~~~~~~~~~~~~~
- - Build wheels for Python 3.14
- - Python free-threading support
- - Typing: Use Buffer type stubs
- - Deprecate xxhash.VERSION_TUPLE, it will be removed in the next major release
- v3.5.0 2024-08-17
- ~~~~~~~~~~~~~~~~~
- - Build wheels for Python 3.13
- v3.4.1 2023-10-05
- ~~~~~~~~~~~~~~~~~
- - Build wheels for Python 3.12
- - Remove setuptools_scm
- v3.4.0 2023-10-05
- ~~~~~~~~~~~~~~~~~
- *Yanked* due to wheels building problem.
- v3.3.0 2023-07-29
- ~~~~~~~~~~~~~~~~~
- - Upgrade xxHash to v0.8.2
- - Drop support for Python 3.6
- v3.2.0 2022-12-28
- ~~~~~~~~~~~~~~~~~
- This is the last version to support Python 3.6
- - Build Python 3.11 wheels.
- - Remove setup.py test_suites, call unittest directly
- v3.1.0 2022-10-19
- ~~~~~~~~~~~~~~~~~
- - Type annotations.
- - Enabled muslinux wheels building.
- v3.0.0 2022-02-25
- ~~~~~~~~~~~~~~~~~
- - New set `algorithms_available` lists all implemented algorithms in `xxhash`
- package.
- - Upgrade xxHash to v0.8.1.
- - Drop support for EOL Python versions, require python >= 3.6 from now on.
- - Migrate to github actions and build arm64 wheels for macOS.
- - Always release GIL.
- v2.0.2 2021-04-15
- ~~~~~~~~~~~~~~~~~
- - Fix Travis CI OSX dpl python2.7 get-pip.py error
- v2.0.1 2021-04-15
- ~~~~~~~~~~~~~~~~~
- - Only to trigger Python 3.9 wheels building.
- v2.0.0 2020-08-03
- ~~~~~~~~~~~~~~~~~
- - **Require xxHash version >= v0.8.0**
- - Upgrade xxHash to v0.8.0
- - XXH3 hashes: `xxh3_64`, `xxh3_128`, and their oneshot functions
- v1.4.4 2020-06-20
- ~~~~~~~~~~~~~~~~~
- - Upgrade xxHash to v0.7.3
- - Stop using PEP393 deprecated APIs
- - Use XXH(32|64)_canonicalFromHash to replace u2bytes and ull2bytes
- v1.4.3 2019-11-12
- ~~~~~~~~~~~~~~~~~
- - Upgrade xxHash to v0.7.2
- - Python 3.8 wheels
- v1.4.2 2019-10-13
- ~~~~~~~~~~~~~~~~~
- - Fixed: setup.py fails when reading README.rst and the default encoding is not UTF-8
- v1.4.1 2019-08-27
- ~~~~~~~~~~~~~~~~~
- - Fixed: xxh3.h in missing from source tarball
- v1.4.0 2019-08-25
- ~~~~~~~~~~~~~~~~~
- - Upgrade xxHash to v0.7.1
- v1.3.0 2018-10-21
- ~~~~~~~~~~~~~~~~~
- - Wheels are now built automatically
- - Split CFFI variant into a separate package `ifduyue/python-xxhash-cffi <https://github.com/ifduyue/python-xxhash-cffi>`_
- v1.2.0 2018-07-13
- ~~~~~~~~~~~~~~~~~
- - Add oneshot functions xxh{32,64}_{,int,hex}digest
- v1.1.0 2018-07-05
- ~~~~~~~~~~~~~~~~~
- - Allow input larger than 2GB
- - Release the GIL on sufficiently large input
- - Drop support for Python 3.2
- v1.0.1 2017-03-02
- ~~~~~~~~~~~~~~~~~~
- - Free state actively, instead of delegating it to ffi.gc
- v1.0.0 2017-02-10
- ~~~~~~~~~~~~~~~~~~
- - Fixed copy() segfault
- - Added CFFI variant
- v0.6.3 2017-02-10
- ~~~~~~~~~~~~~~~~~~
- - Fixed copy() segfault
- v0.6.2 2017-02-10
- ~~~~~~~~~~~~~~~~~~
- - Upgrade xxHash to v0.6.2
- v0.6.1 2016-06-26
- ~~~~~~~~~~~~~~~~~~
- - Upgrade xxHash to v0.6.1
- v0.5.0 2016-03-02
- ~~~~~~~~~~~~~~~~~~
- - Upgrade xxHash to v0.5.0
- v0.4.3 2015-08-21
- ~~~~~~~~~~~~~~~~~~
- - Upgrade xxHash to r42
- v0.4.1 2015-08-16
- ~~~~~~~~~~~~~~~~~~
- - Upgrade xxHash to r41
- v0.4.0 2015-08-05
- ~~~~~~~~~~~~~~~~~~
- - Added method reset
- - Upgrade xxHash to r40
- v0.3.2 2015-01-27
- ~~~~~~~~~~~~~~~~~~
- - Fixed some typos in docstrings
- v0.3.1 2015-01-24
- ~~~~~~~~~~~~~~~~~~
- - Upgrade xxHash to r39
- v0.3.0 2014-11-11
- ~~~~~~~~~~~~~~~~~~
- - Change digest() from little-endian representation to big-endian representation of the integer digest.
- This change breaks compatibility (digest() results are different).
- v0.2.0 2014-10-25
- ~~~~~~~~~~~~~~~~~~
- - Make this package hashlib-compliant
- v0.1.3 2014-10-23
- ~~~~~~~~~~~~~~~~~~
- - Update xxHash to r37
- v0.1.2 2014-10-19
- ~~~~~~~~~~~~~~~~~~
- - Improve: Check XXHnn_init() return value.
- - Update xxHash to r36
- v0.1.1 2014-08-07
- ~~~~~~~~~~~~~~~~~~
- - Improve: Can now be built with Visual C++ Compiler.
- v0.1.0 2014-08-05
- ~~~~~~~~~~~~~~~~~~
- - New: XXH32 and XXH64 type, which support partially update.
- - Fix: build under Python 3.4
- v0.0.2 2014-08-03
- ~~~~~~~~~~~~~~~~~~
- - NEW: Support Python 3
- v0.0.1 2014-07-30
- ~~~~~~~~~~~~~~~~~~
- - NEW: xxh32 and xxh64
|