| .. hazmat:: |
| |
| Message Digests |
| =============== |
| |
| .. currentmodule:: cryptography.hazmat.primitives.hashes |
| |
| .. class:: Hash(algorithm, backend) |
| |
| A cryptographic hash function takes an arbitrary block of data and |
| calculates a fixed-size bit string (a digest), such that different data |
| results (with a high probability) in different digests. |
| |
| This is an implementation of |
| :class:`~cryptography.hazmat.primitives.interfaces.HashContext` meant to |
| be used with |
| :class:`~cryptography.hazmat.primitives.interfaces.HashAlgorithm` |
| implementations to provide an incremental interface to calculating |
| various message digests. |
| |
| .. doctest:: |
| |
| >>> from cryptography.hazmat.backends import default_backend |
| >>> from cryptography.hazmat.primitives import hashes |
| >>> digest = hashes.Hash(hashes.SHA256(), backend=default_backend()) |
| >>> digest.update(b"abc") |
| >>> digest.update(b"123") |
| >>> digest.finalize() |
| 'l\xa1=R\xcap\xc8\x83\xe0\xf0\xbb\x10\x1eBZ\x89\xe8bM\xe5\x1d\xb2\xd29%\x93\xafj\x84\x11\x80\x90' |
| |
| If the backend doesn't support the requested ``algorithm`` an |
| :class:`~cryptography.exceptions.UnsupportedAlgorithm` will be raised. |
| |
| Keep in mind that attacks against cryptographic hashes only get stronger |
| with time, and that often algorithms that were once thought to be strong, |
| become broken. Because of this it's important to include a plan for |
| upgrading the hash algorithm you use over time. For more information, see |
| `Lifetimes of cryptographic hash functions`_. |
| |
| :param algorithm: A |
| :class:`~cryptography.hazmat.primitives.interfaces.HashAlgorithm` |
| provider such as those described in |
| :ref:`below <cryptographic-hash-algorithms>`. |
| :param backend: A |
| :class:`~cryptography.hazmat.backends.interfaces.HashBackend` |
| provider. |
| |
| .. method:: update(data) |
| |
| :param bytes data: The bytes you wish to hash. |
| :raises cryptography.exceptions.AlreadyFinalized: See :meth:`finalize` |
| |
| .. method:: copy() |
| |
| Copy this :class:`Hash` instance, usually so that we may call |
| :meth:`finalize` and get an intermediate digest value while we continue |
| to call :meth:`update` on the original. |
| |
| :return: A new instance of :class:`Hash` which can be updated |
| and finalized independently of the original instance. |
| :raises cryptography.exceptions.AlreadyFinalized: See :meth:`finalize` |
| |
| .. method:: finalize() |
| |
| Finalize the current context and return the message digest as bytes. |
| |
| Once ``finalize`` is called this object can no longer be used and |
| :meth:`update`, :meth:`copy`, and :meth:`finalize` will raise |
| :class:`~cryptography.exceptions.AlreadyFinalized`. |
| |
| :return bytes: The message digest as bytes. |
| |
| |
| .. _cryptographic-hash-algorithms: |
| |
| SHA-1 |
| ~~~~~ |
| |
| .. attention:: |
| |
| NIST has deprecated SHA-1 in favor of the SHA-2 variants. New applications |
| are strongly suggested to use SHA-2 over SHA-1. |
| |
| .. class:: SHA1() |
| |
| SHA-1 is a cryptographic hash function standardized by NIST. It has a |
| 160-bit message digest. |
| |
| SHA-2 Family |
| ~~~~~~~~~~~~ |
| |
| .. class:: SHA224() |
| |
| SHA-224 is a cryptographic hash function from the SHA-2 family and |
| standardized by NIST. It has a 224-bit message digest. |
| |
| .. class:: SHA256() |
| |
| SHA-256 is a cryptographic hash function from the SHA-2 family and |
| standardized by NIST. It has a 256-bit message digest. |
| |
| .. class:: SHA384() |
| |
| SHA-384 is a cryptographic hash function from the SHA-2 family and |
| standardized by NIST. It has a 384-bit message digest. |
| |
| .. class:: SHA512() |
| |
| SHA-512 is a cryptographic hash function from the SHA-2 family and |
| standardized by NIST. It has a 512-bit message digest. |
| |
| RIPEMD160 |
| ~~~~~~~~~ |
| |
| .. class:: RIPEMD160() |
| |
| RIPEMD160 is a cryptographic hash function that is part of ISO/IEC |
| 10118-3:2004. It has a 160-bit message digest. |
| |
| Whirlpool |
| ~~~~~~~~~ |
| |
| .. class:: Whirlpool() |
| |
| Whirlpool is a cryptographic hash function that is part of ISO/IEC |
| 10118-3:2004. It has a 512-bit message digest. |
| |
| MD5 |
| ~~~ |
| |
| .. warning:: |
| |
| MD5 is a deprecated hash algorithm that has practical known collision |
| attacks. You are strongly discouraged from using it. Existing applications |
| should strongly consider moving away. |
| |
| .. class:: MD5() |
| |
| MD5 is a deprecated cryptographic hash function. It has a 128-bit message |
| digest and has practical known collision attacks. |
| |
| |
| .. _`Lifetimes of cryptographic hash functions`: http://valerieaurora.org/hash.html |