1:mod:`hashlib` --- Secure hashes and message digests
2====================================================
3
4.. module:: hashlib
5   :synopsis: Secure hash and message digest algorithms.
6
7.. moduleauthor:: Gregory P. Smith <greg@krypto.org>
8.. sectionauthor:: Gregory P. Smith <greg@krypto.org>
9
10**Source code:** :source:`Lib/hashlib.py`
11
12.. index::
13   single: message digest, MD5
14   single: secure hash algorithm, SHA1, SHA224, SHA256, SHA384, SHA512
15
16.. testsetup::
17
18   import hashlib
19
20
21--------------
22
23This module implements a common interface to many different secure hash and
24message digest algorithms.  Included are the FIPS secure hash algorithms SHA1,
25SHA224, SHA256, SHA384, and SHA512 (defined in FIPS 180-2) as well as RSA's MD5
26algorithm (defined in Internet :rfc:`1321`).  The terms "secure hash" and
27"message digest" are interchangeable.  Older algorithms were called message
28digests.  The modern term is secure hash.
29
30.. note::
31
32   If you want the adler32 or crc32 hash functions, they are available in
33   the :mod:`zlib` module.
34
35.. warning::
36
37   Some algorithms have known hash collision weaknesses, refer to the "See
38   also" section at the end.
39
40
41.. _hash-algorithms:
42
43Hash algorithms
44---------------
45
46There is one constructor method named for each type of :dfn:`hash`.  All return
47a hash object with the same simple interface. For example: use :func:`sha256` to
48create a SHA-256 hash object. You can now feed this object with :term:`bytes-like
49objects <bytes-like object>` (normally :class:`bytes`) using the :meth:`update` method.
50At any point you can ask it for the :dfn:`digest` of the
51concatenation of the data fed to it so far using the :meth:`digest` or
52:meth:`hexdigest` methods.
53
54.. note::
55
56   For better multithreading performance, the Python :term:`GIL` is released for
57   data larger than 2047 bytes at object creation or on update.
58
59.. note::
60
61   Feeding string objects into :meth:`update` is not supported, as hashes work
62   on bytes, not on characters.
63
64.. index:: single: OpenSSL; (use in module hashlib)
65
66Constructors for hash algorithms that are always present in this module are
67:func:`sha1`, :func:`sha224`, :func:`sha256`, :func:`sha384`,
68:func:`sha512`, :func:`blake2b`, and :func:`blake2s`.
69:func:`md5` is normally available as well, though it
70may be missing if you are using a rare "FIPS compliant" build of Python.
71Additional algorithms may also be available depending upon the OpenSSL
72library that Python uses on your platform. On most platforms the
73:func:`sha3_224`, :func:`sha3_256`, :func:`sha3_384`, :func:`sha3_512`,
74:func:`shake_128`, :func:`shake_256` are also available.
75
76.. versionadded:: 3.6
77   SHA3 (Keccak) and SHAKE constructors :func:`sha3_224`, :func:`sha3_256`,
78   :func:`sha3_384`, :func:`sha3_512`, :func:`shake_128`, :func:`shake_256`.
79
80.. versionadded:: 3.6
81   :func:`blake2b` and :func:`blake2s` were added.
82
83For example, to obtain the digest of the byte string ``b'Nobody inspects the
84spammish repetition'``::
85
86   >>> import hashlib
87   >>> m = hashlib.sha256()
88   >>> m.update(b"Nobody inspects")
89   >>> m.update(b" the spammish repetition")
90   >>> m.digest()
91   b'\x03\x1e\xdd}Ae\x15\x93\xc5\xfe\\\x00o\xa5u+7\xfd\xdf\xf7\xbcN\x84:\xa6\xaf\x0c\x95\x0fK\x94\x06'
92   >>> m.digest_size
93   32
94   >>> m.block_size
95   64
96
97More condensed:
98
99   >>> hashlib.sha224(b"Nobody inspects the spammish repetition").hexdigest()
100   'a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2'
101
102.. function:: new(name[, data])
103
104   Is a generic constructor that takes the string *name* of the desired
105   algorithm as its first parameter.  It also exists to allow access to the
106   above listed hashes as well as any other algorithms that your OpenSSL
107   library may offer.  The named constructors are much faster than :func:`new`
108   and should be preferred.
109
110Using :func:`new` with an algorithm provided by OpenSSL:
111
112   >>> h = hashlib.new('sha512_256')
113   >>> h.update(b"Nobody inspects the spammish repetition")
114   >>> h.hexdigest()
115   '19197dc4d03829df858011c6c87600f994a858103bbc19005f20987aa19a97e2'
116
117Hashlib provides the following constant attributes:
118
119.. data:: algorithms_guaranteed
120
121   A set containing the names of the hash algorithms guaranteed to be supported
122   by this module on all platforms.  Note that 'md5' is in this list despite
123   some upstream vendors offering an odd "FIPS compliant" Python build that
124   excludes it.
125
126   .. versionadded:: 3.2
127
128.. data:: algorithms_available
129
130   A set containing the names of the hash algorithms that are available in the
131   running Python interpreter.  These names will be recognized when passed to
132   :func:`new`.  :attr:`algorithms_guaranteed` will always be a subset.  The
133   same algorithm may appear multiple times in this set under different names
134   (thanks to OpenSSL).
135
136   .. versionadded:: 3.2
137
138The following values are provided as constant attributes of the hash objects
139returned by the constructors:
140
141
142.. data:: hash.digest_size
143
144   The size of the resulting hash in bytes.
145
146.. data:: hash.block_size
147
148   The internal block size of the hash algorithm in bytes.
149
150A hash object has the following attributes:
151
152.. attribute:: hash.name
153
154   The canonical name of this hash, always lowercase and always suitable as a
155   parameter to :func:`new` to create another hash of this type.
156
157   .. versionchanged:: 3.4
158      The name attribute has been present in CPython since its inception, but
159      until Python 3.4 was not formally specified, so may not exist on some
160      platforms.
161
162A hash object has the following methods:
163
164
165.. method:: hash.update(data)
166
167   Update the hash object with the :term:`bytes-like object`.
168   Repeated calls are equivalent to a single call with the
169   concatenation of all the arguments: ``m.update(a); m.update(b)`` is
170   equivalent to ``m.update(a+b)``.
171
172   .. versionchanged:: 3.1
173      The Python GIL is released to allow other threads to run while hash
174      updates on data larger than 2047 bytes is taking place when using hash
175      algorithms supplied by OpenSSL.
176
177
178.. method:: hash.digest()
179
180   Return the digest of the data passed to the :meth:`update` method so far.
181   This is a bytes object of size :attr:`digest_size` which may contain bytes in
182   the whole range from 0 to 255.
183
184
185.. method:: hash.hexdigest()
186
187   Like :meth:`digest` except the digest is returned as a string object of
188   double length, containing only hexadecimal digits.  This may be used to
189   exchange the value safely in email or other non-binary environments.
190
191
192.. method:: hash.copy()
193
194   Return a copy ("clone") of the hash object.  This can be used to efficiently
195   compute the digests of data sharing a common initial substring.
196
197
198SHAKE variable length digests
199-----------------------------
200
201The :func:`shake_128` and :func:`shake_256` algorithms provide variable
202length digests with length_in_bits//2 up to 128 or 256 bits of security.
203As such, their digest methods require a length. Maximum length is not limited
204by the SHAKE algorithm.
205
206.. method:: shake.digest(length)
207
208   Return the digest of the data passed to the :meth:`update` method so far.
209   This is a bytes object of size *length* which may contain bytes in
210   the whole range from 0 to 255.
211
212
213.. method:: shake.hexdigest(length)
214
215   Like :meth:`digest` except the digest is returned as a string object of
216   double length, containing only hexadecimal digits.  This may be used to
217   exchange the value safely in email or other non-binary environments.
218
219
220Key derivation
221--------------
222
223Key derivation and key stretching algorithms are designed for secure password
224hashing. Naive algorithms such as ``sha1(password)`` are not resistant against
225brute-force attacks. A good password hashing function must be tunable, slow, and
226include a `salt <https://en.wikipedia.org/wiki/Salt_%28cryptography%29>`_.
227
228
229.. function:: pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None)
230
231   The function provides PKCS#5 password-based key derivation function 2. It
232   uses HMAC as pseudorandom function.
233
234   The string *hash_name* is the desired name of the hash digest algorithm for
235   HMAC, e.g. 'sha1' or 'sha256'. *password* and *salt* are interpreted as
236   buffers of bytes. Applications and libraries should limit *password* to
237   a sensible length (e.g. 1024). *salt* should be about 16 or more bytes from
238   a proper source, e.g. :func:`os.urandom`.
239
240   The number of *iterations* should be chosen based on the hash algorithm and
241   computing power. As of 2013, at least 100,000 iterations of SHA-256 are
242   suggested.
243
244   *dklen* is the length of the derived key. If *dklen* is ``None`` then the
245   digest size of the hash algorithm *hash_name* is used, e.g. 64 for SHA-512.
246
247   >>> import hashlib
248   >>> dk = hashlib.pbkdf2_hmac('sha256', b'password', b'salt', 100000)
249   >>> dk.hex()
250   '0394a2ede332c9a13eb82e9b24631604c31df978b4e2f0fbd2c549944f9d79a5'
251
252   .. versionadded:: 3.4
253
254   .. note::
255
256      A fast implementation of *pbkdf2_hmac* is available with OpenSSL.  The
257      Python implementation uses an inline version of :mod:`hmac`. It is about
258      three times slower and doesn't release the GIL.
259
260.. function:: scrypt(password, *, salt, n, r, p, maxmem=0, dklen=64)
261
262   The function provides scrypt password-based key derivation function as
263   defined in :rfc:`7914`.
264
265   *password* and *salt* must be :term:`bytes-like objects
266   <bytes-like object>`.  Applications and libraries should limit *password*
267   to a sensible length (e.g. 1024).  *salt* should be about 16 or more
268   bytes from a proper source, e.g. :func:`os.urandom`.
269
270   *n* is the CPU/Memory cost factor, *r* the block size, *p* parallelization
271   factor and *maxmem* limits memory (OpenSSL 1.1.0 defaults to 32 MiB).
272   *dklen* is the length of the derived key.
273
274   .. availability:: OpenSSL 1.1+.
275
276   .. versionadded:: 3.6
277
278
279BLAKE2
280------
281
282.. sectionauthor:: Dmitry Chestnykh
283
284.. index::
285   single: blake2b, blake2s
286
287BLAKE2_ is a cryptographic hash function defined in :rfc:`7693` that comes in two
288flavors:
289
290* **BLAKE2b**, optimized for 64-bit platforms and produces digests of any size
291  between 1 and 64 bytes,
292
293* **BLAKE2s**, optimized for 8- to 32-bit platforms and produces digests of any
294  size between 1 and 32 bytes.
295
296BLAKE2 supports **keyed mode** (a faster and simpler replacement for HMAC_),
297**salted hashing**, **personalization**, and **tree hashing**.
298
299Hash objects from this module follow the API of standard library's
300:mod:`hashlib` objects.
301
302
303Creating hash objects
304^^^^^^^^^^^^^^^^^^^^^
305
306New hash objects are created by calling constructor functions:
307
308
309.. function:: blake2b(data=b'', *, digest_size=64, key=b'', salt=b'', \
310                person=b'', fanout=1, depth=1, leaf_size=0, node_offset=0,  \
311                node_depth=0, inner_size=0, last_node=False)
312
313.. function:: blake2s(data=b'', *, digest_size=32, key=b'', salt=b'', \
314                person=b'', fanout=1, depth=1, leaf_size=0, node_offset=0,  \
315                node_depth=0, inner_size=0, last_node=False)
316
317
318These functions return the corresponding hash objects for calculating
319BLAKE2b or BLAKE2s. They optionally take these general parameters:
320
321* *data*: initial chunk of data to hash, which must be
322  :term:`bytes-like object`.  It can be passed only as positional argument.
323
324* *digest_size*: size of output digest in bytes.
325
326* *key*: key for keyed hashing (up to 64 bytes for BLAKE2b, up to 32 bytes for
327  BLAKE2s).
328
329* *salt*: salt for randomized hashing (up to 16 bytes for BLAKE2b, up to 8
330  bytes for BLAKE2s).
331
332* *person*: personalization string (up to 16 bytes for BLAKE2b, up to 8 bytes
333  for BLAKE2s).
334
335The following table shows limits for general parameters (in bytes):
336
337======= =========== ======== ========= ===========
338Hash    digest_size len(key) len(salt) len(person)
339======= =========== ======== ========= ===========
340BLAKE2b     64         64       16        16
341BLAKE2s     32         32       8         8
342======= =========== ======== ========= ===========
343
344.. note::
345
346    BLAKE2 specification defines constant lengths for salt and personalization
347    parameters, however, for convenience, this implementation accepts byte
348    strings of any size up to the specified length. If the length of the
349    parameter is less than specified, it is padded with zeros, thus, for
350    example, ``b'salt'`` and ``b'salt\x00'`` is the same value. (This is not
351    the case for *key*.)
352
353These sizes are available as module `constants`_ described below.
354
355Constructor functions also accept the following tree hashing parameters:
356
357* *fanout*: fanout (0 to 255, 0 if unlimited, 1 in sequential mode).
358
359* *depth*: maximal depth of tree (1 to 255, 255 if unlimited, 1 in
360  sequential mode).
361
362* *leaf_size*: maximal byte length of leaf (0 to 2**32-1, 0 if unlimited or in
363  sequential mode).
364
365* *node_offset*: node offset (0 to 2**64-1 for BLAKE2b, 0 to 2**48-1 for
366  BLAKE2s, 0 for the first, leftmost, leaf, or in sequential mode).
367
368* *node_depth*: node depth (0 to 255, 0 for leaves, or in sequential mode).
369
370* *inner_size*: inner digest size (0 to 64 for BLAKE2b, 0 to 32 for
371  BLAKE2s, 0 in sequential mode).
372
373* *last_node*: boolean indicating whether the processed node is the last
374  one (`False` for sequential mode).
375
376.. figure:: hashlib-blake2-tree.png
377   :alt: Explanation of tree mode parameters.
378
379See section 2.10 in `BLAKE2 specification
380<https://blake2.net/blake2_20130129.pdf>`_ for comprehensive review of tree
381hashing.
382
383
384Constants
385^^^^^^^^^
386
387.. data:: blake2b.SALT_SIZE
388.. data:: blake2s.SALT_SIZE
389
390Salt length (maximum length accepted by constructors).
391
392
393.. data:: blake2b.PERSON_SIZE
394.. data:: blake2s.PERSON_SIZE
395
396Personalization string length (maximum length accepted by constructors).
397
398
399.. data:: blake2b.MAX_KEY_SIZE
400.. data:: blake2s.MAX_KEY_SIZE
401
402Maximum key size.
403
404
405.. data:: blake2b.MAX_DIGEST_SIZE
406.. data:: blake2s.MAX_DIGEST_SIZE
407
408Maximum digest size that the hash function can output.
409
410
411Examples
412^^^^^^^^
413
414Simple hashing
415""""""""""""""
416
417To calculate hash of some data, you should first construct a hash object by
418calling the appropriate constructor function (:func:`blake2b` or
419:func:`blake2s`), then update it with the data by calling :meth:`update` on the
420object, and, finally, get the digest out of the object by calling
421:meth:`digest` (or :meth:`hexdigest` for hex-encoded string).
422
423    >>> from hashlib import blake2b
424    >>> h = blake2b()
425    >>> h.update(b'Hello world')
426    >>> h.hexdigest()
427    '6ff843ba685842aa82031d3f53c48b66326df7639a63d128974c5c14f31a0f33343a8c65551134ed1ae0f2b0dd2bb495dc81039e3eeb0aa1bb0388bbeac29183'
428
429
430As a shortcut, you can pass the first chunk of data to update directly to the
431constructor as the positional argument:
432
433    >>> from hashlib import blake2b
434    >>> blake2b(b'Hello world').hexdigest()
435    '6ff843ba685842aa82031d3f53c48b66326df7639a63d128974c5c14f31a0f33343a8c65551134ed1ae0f2b0dd2bb495dc81039e3eeb0aa1bb0388bbeac29183'
436
437You can call :meth:`hash.update` as many times as you need to iteratively
438update the hash:
439
440    >>> from hashlib import blake2b
441    >>> items = [b'Hello', b' ', b'world']
442    >>> h = blake2b()
443    >>> for item in items:
444    ...     h.update(item)
445    >>> h.hexdigest()
446    '6ff843ba685842aa82031d3f53c48b66326df7639a63d128974c5c14f31a0f33343a8c65551134ed1ae0f2b0dd2bb495dc81039e3eeb0aa1bb0388bbeac29183'
447
448
449Using different digest sizes
450""""""""""""""""""""""""""""
451
452BLAKE2 has configurable size of digests up to 64 bytes for BLAKE2b and up to 32
453bytes for BLAKE2s. For example, to replace SHA-1 with BLAKE2b without changing
454the size of output, we can tell BLAKE2b to produce 20-byte digests:
455
456    >>> from hashlib import blake2b
457    >>> h = blake2b(digest_size=20)
458    >>> h.update(b'Replacing SHA1 with the more secure function')
459    >>> h.hexdigest()
460    'd24f26cf8de66472d58d4e1b1774b4c9158b1f4c'
461    >>> h.digest_size
462    20
463    >>> len(h.digest())
464    20
465
466Hash objects with different digest sizes have completely different outputs
467(shorter hashes are *not* prefixes of longer hashes); BLAKE2b and BLAKE2s
468produce different outputs even if the output length is the same:
469
470    >>> from hashlib import blake2b, blake2s
471    >>> blake2b(digest_size=10).hexdigest()
472    '6fa1d8fcfd719046d762'
473    >>> blake2b(digest_size=11).hexdigest()
474    'eb6ec15daf9546254f0809'
475    >>> blake2s(digest_size=10).hexdigest()
476    '1bf21a98c78a1c376ae9'
477    >>> blake2s(digest_size=11).hexdigest()
478    '567004bf96e4a25773ebf4'
479
480
481Keyed hashing
482"""""""""""""
483
484Keyed hashing can be used for authentication as a faster and simpler
485replacement for `Hash-based message authentication code
486<https://en.wikipedia.org/wiki/Hash-based_message_authentication_code>`_ (HMAC).
487BLAKE2 can be securely used in prefix-MAC mode thanks to the
488indifferentiability property inherited from BLAKE.
489
490This example shows how to get a (hex-encoded) 128-bit authentication code for
491message ``b'message data'`` with key ``b'pseudorandom key'``::
492
493    >>> from hashlib import blake2b
494    >>> h = blake2b(key=b'pseudorandom key', digest_size=16)
495    >>> h.update(b'message data')
496    >>> h.hexdigest()
497    '3d363ff7401e02026f4a4687d4863ced'
498
499
500As a practical example, a web application can symmetrically sign cookies sent
501to users and later verify them to make sure they weren't tampered with::
502
503    >>> from hashlib import blake2b
504    >>> from hmac import compare_digest
505    >>>
506    >>> SECRET_KEY = b'pseudorandomly generated server secret key'
507    >>> AUTH_SIZE = 16
508    >>>
509    >>> def sign(cookie):
510    ...     h = blake2b(digest_size=AUTH_SIZE, key=SECRET_KEY)
511    ...     h.update(cookie)
512    ...     return h.hexdigest().encode('utf-8')
513    >>>
514    >>> def verify(cookie, sig):
515    ...     good_sig = sign(cookie)
516    ...     return compare_digest(good_sig, sig)
517    >>>
518    >>> cookie = b'user-alice'
519    >>> sig = sign(cookie)
520    >>> print("{0},{1}".format(cookie.decode('utf-8'), sig))
521    user-alice,b'43b3c982cf697e0c5ab22172d1ca7421'
522    >>> verify(cookie, sig)
523    True
524    >>> verify(b'user-bob', sig)
525    False
526    >>> verify(cookie, b'0102030405060708090a0b0c0d0e0f00')
527    False
528
529Even though there's a native keyed hashing mode, BLAKE2 can, of course, be used
530in HMAC construction with :mod:`hmac` module::
531
532    >>> import hmac, hashlib
533    >>> m = hmac.new(b'secret key', digestmod=hashlib.blake2s)
534    >>> m.update(b'message')
535    >>> m.hexdigest()
536    'e3c8102868d28b5ff85fc35dda07329970d1a01e273c37481326fe0c861c8142'
537
538
539Randomized hashing
540""""""""""""""""""
541
542By setting *salt* parameter users can introduce randomization to the hash
543function. Randomized hashing is useful for protecting against collision attacks
544on the hash function used in digital signatures.
545
546    Randomized hashing is designed for situations where one party, the message
547    preparer, generates all or part of a message to be signed by a second
548    party, the message signer. If the message preparer is able to find
549    cryptographic hash function collisions (i.e., two messages producing the
550    same hash value), then they might prepare meaningful versions of the message
551    that would produce the same hash value and digital signature, but with
552    different results (e.g., transferring $1,000,000 to an account, rather than
553    $10). Cryptographic hash functions have been designed with collision
554    resistance as a major goal, but the current concentration on attacking
555    cryptographic hash functions may result in a given cryptographic hash
556    function providing less collision resistance than expected. Randomized
557    hashing offers the signer additional protection by reducing the likelihood
558    that a preparer can generate two or more messages that ultimately yield the
559    same hash value during the digital signature generation process --- even if
560    it is practical to find collisions for the hash function. However, the use
561    of randomized hashing may reduce the amount of security provided by a
562    digital signature when all portions of the message are prepared
563    by the signer.
564
565    (`NIST SP-800-106 "Randomized Hashing for Digital Signatures"
566    <https://csrc.nist.gov/publications/detail/sp/800-106/final>`_)
567
568In BLAKE2 the salt is processed as a one-time input to the hash function during
569initialization, rather than as an input to each compression function.
570
571.. warning::
572
573    *Salted hashing* (or just hashing) with BLAKE2 or any other general-purpose
574    cryptographic hash function, such as SHA-256, is not suitable for hashing
575    passwords.  See `BLAKE2 FAQ <https://blake2.net/#qa>`_ for more
576    information.
577..
578
579    >>> import os
580    >>> from hashlib import blake2b
581    >>> msg = b'some message'
582    >>> # Calculate the first hash with a random salt.
583    >>> salt1 = os.urandom(blake2b.SALT_SIZE)
584    >>> h1 = blake2b(salt=salt1)
585    >>> h1.update(msg)
586    >>> # Calculate the second hash with a different random salt.
587    >>> salt2 = os.urandom(blake2b.SALT_SIZE)
588    >>> h2 = blake2b(salt=salt2)
589    >>> h2.update(msg)
590    >>> # The digests are different.
591    >>> h1.digest() != h2.digest()
592    True
593
594
595Personalization
596"""""""""""""""
597
598Sometimes it is useful to force hash function to produce different digests for
599the same input for different purposes. Quoting the authors of the Skein hash
600function:
601
602    We recommend that all application designers seriously consider doing this;
603    we have seen many protocols where a hash that is computed in one part of
604    the protocol can be used in an entirely different part because two hash
605    computations were done on similar or related data, and the attacker can
606    force the application to make the hash inputs the same. Personalizing each
607    hash function used in the protocol summarily stops this type of attack.
608
609    (`The Skein Hash Function Family
610    <http://www.skein-hash.info/sites/default/files/skein1.3.pdf>`_,
611    p. 21)
612
613BLAKE2 can be personalized by passing bytes to the *person* argument::
614
615    >>> from hashlib import blake2b
616    >>> FILES_HASH_PERSON = b'MyApp Files Hash'
617    >>> BLOCK_HASH_PERSON = b'MyApp Block Hash'
618    >>> h = blake2b(digest_size=32, person=FILES_HASH_PERSON)
619    >>> h.update(b'the same content')
620    >>> h.hexdigest()
621    '20d9cd024d4fb086aae819a1432dd2466de12947831b75c5a30cf2676095d3b4'
622    >>> h = blake2b(digest_size=32, person=BLOCK_HASH_PERSON)
623    >>> h.update(b'the same content')
624    >>> h.hexdigest()
625    'cf68fb5761b9c44e7878bfb2c4c9aea52264a80b75005e65619778de59f383a3'
626
627Personalization together with the keyed mode can also be used to derive different
628keys from a single one.
629
630    >>> from hashlib import blake2s
631    >>> from base64 import b64decode, b64encode
632    >>> orig_key = b64decode(b'Rm5EPJai72qcK3RGBpW3vPNfZy5OZothY+kHY6h21KM=')
633    >>> enc_key = blake2s(key=orig_key, person=b'kEncrypt').digest()
634    >>> mac_key = blake2s(key=orig_key, person=b'kMAC').digest()
635    >>> print(b64encode(enc_key).decode('utf-8'))
636    rbPb15S/Z9t+agffno5wuhB77VbRi6F9Iv2qIxU7WHw=
637    >>> print(b64encode(mac_key).decode('utf-8'))
638    G9GtHFE1YluXY1zWPlYk1e/nWfu0WSEb0KRcjhDeP/o=
639
640Tree mode
641"""""""""
642
643Here's an example of hashing a minimal tree with two leaf nodes::
644
645       10
646      /  \
647     00  01
648
649This example uses 64-byte internal digests, and returns the 32-byte final
650digest::
651
652    >>> from hashlib import blake2b
653    >>>
654    >>> FANOUT = 2
655    >>> DEPTH = 2
656    >>> LEAF_SIZE = 4096
657    >>> INNER_SIZE = 64
658    >>>
659    >>> buf = bytearray(6000)
660    >>>
661    >>> # Left leaf
662    ... h00 = blake2b(buf[0:LEAF_SIZE], fanout=FANOUT, depth=DEPTH,
663    ...               leaf_size=LEAF_SIZE, inner_size=INNER_SIZE,
664    ...               node_offset=0, node_depth=0, last_node=False)
665    >>> # Right leaf
666    ... h01 = blake2b(buf[LEAF_SIZE:], fanout=FANOUT, depth=DEPTH,
667    ...               leaf_size=LEAF_SIZE, inner_size=INNER_SIZE,
668    ...               node_offset=1, node_depth=0, last_node=True)
669    >>> # Root node
670    ... h10 = blake2b(digest_size=32, fanout=FANOUT, depth=DEPTH,
671    ...               leaf_size=LEAF_SIZE, inner_size=INNER_SIZE,
672    ...               node_offset=0, node_depth=1, last_node=True)
673    >>> h10.update(h00.digest())
674    >>> h10.update(h01.digest())
675    >>> h10.hexdigest()
676    '3ad2a9b37c6070e374c7a8c508fe20ca86b6ed54e286e93a0318e95e881db5aa'
677
678Credits
679^^^^^^^
680
681BLAKE2_ was designed by *Jean-Philippe Aumasson*, *Samuel Neves*, *Zooko
682Wilcox-O'Hearn*, and *Christian Winnerlein* based on SHA-3_ finalist BLAKE_
683created by *Jean-Philippe Aumasson*, *Luca Henzen*, *Willi Meier*, and
684*Raphael C.-W. Phan*.
685
686It uses core algorithm from ChaCha_ cipher designed by *Daniel J.  Bernstein*.
687
688The stdlib implementation is based on pyblake2_ module. It was written by
689*Dmitry Chestnykh* based on C implementation written by *Samuel Neves*. The
690documentation was copied from pyblake2_ and written by *Dmitry Chestnykh*.
691
692The C code was partly rewritten for Python by *Christian Heimes*.
693
694The following public domain dedication applies for both C hash function
695implementation, extension code, and this documentation:
696
697   To the extent possible under law, the author(s) have dedicated all copyright
698   and related and neighboring rights to this software to the public domain
699   worldwide. This software is distributed without any warranty.
700
701   You should have received a copy of the CC0 Public Domain Dedication along
702   with this software. If not, see
703   https://creativecommons.org/publicdomain/zero/1.0/.
704
705The following people have helped with development or contributed their changes
706to the project and the public domain according to the Creative Commons Public
707Domain Dedication 1.0 Universal:
708
709* *Alexandr Sokolovskiy*
710
711.. _BLAKE2: https://blake2.net
712.. _HMAC: https://en.wikipedia.org/wiki/Hash-based_message_authentication_code
713.. _BLAKE: https://131002.net/blake/
714.. _SHA-3: https://en.wikipedia.org/wiki/NIST_hash_function_competition
715.. _ChaCha: https://cr.yp.to/chacha.html
716.. _pyblake2: https://pythonhosted.org/pyblake2/
717
718
719
720.. seealso::
721
722   Module :mod:`hmac`
723      A module to generate message authentication codes using hashes.
724
725   Module :mod:`base64`
726      Another way to encode binary hashes for non-binary environments.
727
728   https://blake2.net
729      Official BLAKE2 website.
730
731   https://csrc.nist.gov/csrc/media/publications/fips/180/2/archive/2002-08-01/documents/fips180-2.pdf
732      The FIPS 180-2 publication on Secure Hash Algorithms.
733
734   https://en.wikipedia.org/wiki/Cryptographic_hash_function#Cryptographic_hash_algorithms
735      Wikipedia article with information on which algorithms have known issues and
736      what that means regarding their use.
737
738   https://www.ietf.org/rfc/rfc2898.txt
739      PKCS #5: Password-Based Cryptography Specification Version 2.0
740