blob: 773d97f6eab80f0d686374d0759d75666cd380f3 [file] [log] [blame]
Alex Gaynoraf82d5e2013-10-29 17:07:24 -07001.. hazmat::
Donald Stufftd8f01182013-10-27 16:59:56 -04002
Alex Stapletonc5fffd32014-03-18 15:29:00 +00003Message digests
Donald Stuffte51fb932013-10-27 17:26:17 -04004===============
5
Donald Stufftf04317a2013-10-27 16:44:30 -04006.. currentmodule:: cryptography.hazmat.primitives.hashes
David Reid1f3d7182013-10-22 16:55:18 -07007
David Reidef0fcf22013-11-06 11:12:45 -08008.. class:: Hash(algorithm, backend)
Matthew Iversen505491b2013-10-19 15:56:17 +11009
David Reid55602982013-11-01 13:34:05 -070010 A cryptographic hash function takes an arbitrary block of data and
11 calculates a fixed-size bit string (a digest), such that different data
12 results (with a high probability) in different digests.
Matthew Iversen505491b2013-10-19 15:56:17 +110013
David Reid55602982013-11-01 13:34:05 -070014 This is an implementation of
Alex Gaynorab5f0112013-11-08 10:34:00 -080015 :class:`~cryptography.hazmat.primitives.interfaces.HashContext` meant to
David Reid55602982013-11-01 13:34:05 -070016 be used with
Alex Gaynorab5f0112013-11-08 10:34:00 -080017 :class:`~cryptography.hazmat.primitives.interfaces.HashAlgorithm`
David Reid55602982013-11-01 13:34:05 -070018 implementations to provide an incremental interface to calculating
19 various message digests.
Alex Gaynor23d01a22013-10-28 10:14:46 -070020
21 .. doctest::
David Reid846460a2013-11-06 11:24:50 -080022
Alex Gaynorf8796b12013-12-13 20:28:55 -080023 >>> from cryptography.hazmat.backends import default_backend
Alex Gaynor23d01a22013-10-28 10:14:46 -070024 >>> from cryptography.hazmat.primitives import hashes
David Reid63fa19a2013-11-20 10:49:13 -080025 >>> digest = hashes.Hash(hashes.SHA256(), backend=default_backend())
Alex Gaynor23d01a22013-10-28 10:14:46 -070026 >>> digest.update(b"abc")
27 >>> digest.update(b"123")
David Reid30b16132013-10-31 13:37:24 -070028 >>> digest.finalize()
29 'l\xa1=R\xcap\xc8\x83\xe0\xf0\xbb\x10\x1eBZ\x89\xe8bM\xe5\x1d\xb2\xd29%\x93\xafj\x84\x11\x80\x90'
Alex Gaynorf3b06cd2013-10-21 21:49:50 -070030
Alex Stapleton1b1327c2013-12-21 15:16:57 +000031 If the backend doesn't support the requested ``algorithm`` an
Alex Gaynor7a489db2014-03-22 15:09:34 -070032 :class:`~cryptography.exceptions.UnsupportedAlgorithm` exception will be
33 raised.
Alex Stapleton1b1327c2013-12-21 15:16:57 +000034
Alex Gaynor94801292013-11-13 10:33:01 -080035 Keep in mind that attacks against cryptographic hashes only get stronger
36 with time, and that often algorithms that were once thought to be strong,
37 become broken. Because of this it's important to include a plan for
38 upgrading the hash algorithm you use over time. For more information, see
39 `Lifetimes of cryptographic hash functions`_.
40
David Reid663295d2013-11-20 13:55:08 -080041 :param algorithm: A
42 :class:`~cryptography.hazmat.primitives.interfaces.HashAlgorithm`
43 provider such as those described in
44 :ref:`below <cryptographic-hash-algorithms>`.
45 :param backend: A
Alex Gaynorf8796b12013-12-13 20:28:55 -080046 :class:`~cryptography.hazmat.backends.interfaces.HashBackend`
David Reid663295d2013-11-20 13:55:08 -080047 provider.
48
Alex Gaynor7a489db2014-03-22 15:09:34 -070049 :raises cryptography.exceptions.UnsupportedAlgorithm: This is raised if the
Ayrxb482ca12014-03-16 13:06:25 +080050 provided ``backend`` does not implement
51 :class:`~cryptography.hazmat.backends.interfaces.HashBackend`
52
Paul Kehrer6b9ddeb2013-10-19 12:28:15 -050053 .. method:: update(data)
Matthew Iversen505491b2013-10-19 15:56:17 +110054
Alex Stapleton79043462014-03-09 16:46:26 +000055 :param bytes data: The bytes to be hashed.
56 :raises cryptography.exceptions.AlreadyFinalized: See :meth:`finalize`.
Matthew Iversen505491b2013-10-19 15:56:17 +110057
58 .. method:: copy()
59
Alex Stapleton79043462014-03-09 16:46:26 +000060 Copy this :class:`Hash` instance, usually so that you may call
61 :meth:`finalize` to get an intermediate digest value while we continue
62 to call :meth:`update` on the original instance.
David Reid6392a9c2013-11-13 10:01:15 -080063
Alex Stapleton63b3de22014-02-08 09:43:16 +000064 :return: A new instance of :class:`Hash` that can be updated
Alex Stapleton79043462014-03-09 16:46:26 +000065 and finalized independently of the original instance.
66 :raises cryptography.exceptions.AlreadyFinalized: See :meth:`finalize`.
Matthew Iversen505491b2013-10-19 15:56:17 +110067
David Reid30b16132013-10-31 13:37:24 -070068 .. method:: finalize()
Alex Gaynor14968452013-11-01 14:05:14 -070069
David Reid55602982013-11-01 13:34:05 -070070 Finalize the current context and return the message digest as bytes.
71
Alex Stapleton79043462014-03-09 16:46:26 +000072 After ``finalize`` has been called this object can no longer be used
73 and :meth:`update`, :meth:`copy`, and :meth:`finalize` will raise an
74 :class:`~cryptography.exceptions.AlreadyFinalized` exception.
Matthew Iversen505491b2013-10-19 15:56:17 +110075
76 :return bytes: The message digest as bytes.
77
Matthew Iversen505491b2013-10-19 15:56:17 +110078
David Reid663295d2013-11-20 13:55:08 -080079.. _cryptographic-hash-algorithms:
80
Paul Kehrer36e7d0d2013-10-18 18:54:40 -050081SHA-1
Matthew Iversen505491b2013-10-19 15:56:17 +110082~~~~~
Paul Kehrer36e7d0d2013-10-18 18:54:40 -050083
84.. attention::
85
86 NIST has deprecated SHA-1 in favor of the SHA-2 variants. New applications
87 are strongly suggested to use SHA-2 over SHA-1.
88
David Reid1f3d7182013-10-22 16:55:18 -070089.. class:: SHA1()
Paul Kehrer36e7d0d2013-10-18 18:54:40 -050090
Alex Stapleton79043462014-03-09 16:46:26 +000091 SHA-1 is a cryptographic hash function standardized by NIST. It produces an
Paul Kehrer36e7d0d2013-10-18 18:54:40 -050092 160-bit message digest.
93
Alex Stapletonc5fffd32014-03-18 15:29:00 +000094SHA-2 family
Matthew Iversen505491b2013-10-19 15:56:17 +110095~~~~~~~~~~~~
Paul Kehrer36e7d0d2013-10-18 18:54:40 -050096
David Reid1f3d7182013-10-22 16:55:18 -070097.. class:: SHA224()
Paul Kehrer36e7d0d2013-10-18 18:54:40 -050098
Alex Stapleton79043462014-03-09 16:46:26 +000099 SHA-224 is a cryptographic hash function from the SHA-2 family and is
100 standardized by NIST. It produces a 224-bit message digest.
Paul Kehrer36e7d0d2013-10-18 18:54:40 -0500101
David Reid1f3d7182013-10-22 16:55:18 -0700102.. class:: SHA256()
Paul Kehrer36e7d0d2013-10-18 18:54:40 -0500103
Alex Stapleton79043462014-03-09 16:46:26 +0000104 SHA-256 is a cryptographic hash function from the SHA-2 family and is
105 standardized by NIST. It produces a 256-bit message digest.
Paul Kehrer36e7d0d2013-10-18 18:54:40 -0500106
David Reid1f3d7182013-10-22 16:55:18 -0700107.. class:: SHA384()
Paul Kehrer36e7d0d2013-10-18 18:54:40 -0500108
Alex Stapleton79043462014-03-09 16:46:26 +0000109 SHA-384 is a cryptographic hash function from the SHA-2 family and is
110 standardized by NIST. It produces a 384-bit message digest.
Paul Kehrer36e7d0d2013-10-18 18:54:40 -0500111
David Reid1f3d7182013-10-22 16:55:18 -0700112.. class:: SHA512()
Paul Kehrer36e7d0d2013-10-18 18:54:40 -0500113
Alex Stapleton79043462014-03-09 16:46:26 +0000114 SHA-512 is a cryptographic hash function from the SHA-2 family and is
115 standardized by NIST. It produces a 512-bit message digest.
Paul Kehrer36e7d0d2013-10-18 18:54:40 -0500116
Paul Kehrer36e7d0d2013-10-18 18:54:40 -0500117RIPEMD160
Matthew Iversen505491b2013-10-19 15:56:17 +1100118~~~~~~~~~
Paul Kehrer36e7d0d2013-10-18 18:54:40 -0500119
David Reid1f3d7182013-10-22 16:55:18 -0700120.. class:: RIPEMD160()
Paul Kehrer36e7d0d2013-10-18 18:54:40 -0500121
122 RIPEMD160 is a cryptographic hash function that is part of ISO/IEC
Alex Stapleton79043462014-03-09 16:46:26 +0000123 10118-3:2004. It produces a 160-bit message digest.
Paul Kehrer36e7d0d2013-10-18 18:54:40 -0500124
Paul Kehrer36e7d0d2013-10-18 18:54:40 -0500125Whirlpool
Matthew Iversen505491b2013-10-19 15:56:17 +1100126~~~~~~~~~
Paul Kehrer36e7d0d2013-10-18 18:54:40 -0500127
David Reid1f3d7182013-10-22 16:55:18 -0700128.. class:: Whirlpool()
Paul Kehrer36e7d0d2013-10-18 18:54:40 -0500129
130 Whirlpool is a cryptographic hash function that is part of ISO/IEC
Alex Stapleton79043462014-03-09 16:46:26 +0000131 10118-3:2004. It produces a 512-bit message digest.
Paul Kehrer36e7d0d2013-10-18 18:54:40 -0500132
Paul Kehrer36e7d0d2013-10-18 18:54:40 -0500133MD5
Matthew Iversen505491b2013-10-19 15:56:17 +1100134~~~
Paul Kehrer36e7d0d2013-10-18 18:54:40 -0500135
136.. warning::
137
138 MD5 is a deprecated hash algorithm that has practical known collision
Alex Gaynorab5f0112013-11-08 10:34:00 -0800139 attacks. You are strongly discouraged from using it. Existing applications
140 should strongly consider moving away.
Paul Kehrer36e7d0d2013-10-18 18:54:40 -0500141
David Reid1f3d7182013-10-22 16:55:18 -0700142.. class:: MD5()
Paul Kehrer36e7d0d2013-10-18 18:54:40 -0500143
Alex Stapleton79043462014-03-09 16:46:26 +0000144 MD5 is a deprecated cryptographic hash function. It produces a 128-bit
145 message digest and has practical known collision attacks.
Alex Gaynor94801292013-11-13 10:33:01 -0800146
147
148.. _`Lifetimes of cryptographic hash functions`: http://valerieaurora.org/hash.html