• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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('ripemd160')
113   >>> h.update(b"Nobody inspects the spammish repetition")
114   >>> h.hexdigest()
115   'cc4a5ce1b3df48aec5d22d1f16b894a0b894eccc'
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(arg)
166
167   Update the hash object with the object *arg*, which must be interpretable as
168   a buffer of bytes.  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, binascii
248   >>> dk = hashlib.pbkdf2_hmac('sha256', b'password', b'salt', 100000)
249   >>> binascii.hexlify(dk)
250   b'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 bytes-like objects. Applications and
266   libraries should limit *password* to a sensible length (e.g. 1024). *salt*
267   should be about 16 or more bytes from a proper source, e.g. :func:`os.urandom`.
268
269   *n* is the CPU/Memory cost factor, *r* the block size, *p* parallelization
270   factor and *maxmem* limits memory (OpenSSL 1.1.0 defaults to 32 MB).
271   *dklen* is the length of the derived key.
272
273   Availability: OpenSSL 1.1+
274
275   .. versionadded:: 3.6
276
277
278BLAKE2
279------
280
281.. sectionauthor:: Dmitry Chestnykh
282
283.. index::
284   single: blake2b, blake2s
285
286BLAKE2_ is a cryptographic hash function defined in RFC-7693_ that comes in two
287flavors:
288
289* **BLAKE2b**, optimized for 64-bit platforms and produces digests of any size
290  between 1 and 64 bytes,
291
292* **BLAKE2s**, optimized for 8- to 32-bit platforms and produces digests of any
293  size between 1 and 32 bytes.
294
295BLAKE2 supports **keyed mode** (a faster and simpler replacement for HMAC_),
296**salted hashing**, **personalization**, and **tree hashing**.
297
298Hash objects from this module follow the API of standard library's
299:mod:`hashlib` objects.
300
301
302Creating hash objects
303^^^^^^^^^^^^^^^^^^^^^
304
305New hash objects are created by calling constructor functions:
306
307
308.. function:: blake2b(data=b'', digest_size=64, key=b'', salt=b'', \
309                person=b'', fanout=1, depth=1, leaf_size=0, node_offset=0,  \
310                node_depth=0, inner_size=0, last_node=False)
311
312.. function:: blake2s(data=b'', digest_size=32, key=b'', salt=b'', \
313                person=b'', fanout=1, depth=1, leaf_size=0, node_offset=0,  \
314                node_depth=0, inner_size=0, last_node=False)
315
316
317These functions return the corresponding hash objects for calculating
318BLAKE2b or BLAKE2s. They optionally take these general parameters:
319
320* *data*: initial chunk of data to hash, which must be interpretable as buffer
321  of bytes.
322
323* *digest_size*: size of output digest in bytes.
324
325* *key*: key for keyed hashing (up to 64 bytes for BLAKE2b, up to 32 bytes for
326  BLAKE2s).
327
328* *salt*: salt for randomized hashing (up to 16 bytes for BLAKE2b, up to 8
329  bytes for BLAKE2s).
330
331* *person*: personalization string (up to 16 bytes for BLAKE2b, up to 8 bytes
332  for BLAKE2s).
333
334The following table shows limits for general parameters (in bytes):
335
336======= =========== ======== ========= ===========
337Hash    digest_size len(key) len(salt) len(person)
338======= =========== ======== ========= ===========
339BLAKE2b     64         64       16        16
340BLAKE2s     32         32       8         8
341======= =========== ======== ========= ===========
342
343.. note::
344
345    BLAKE2 specification defines constant lengths for salt and personalization
346    parameters, however, for convenience, this implementation accepts byte
347    strings of any size up to the specified length. If the length of the
348    parameter is less than specified, it is padded with zeros, thus, for
349    example, ``b'salt'`` and ``b'salt\x00'`` is the same value. (This is not
350    the case for *key*.)
351
352These sizes are available as module `constants`_ described below.
353
354Constructor functions also accept the following tree hashing parameters:
355
356* *fanout*: fanout (0 to 255, 0 if unlimited, 1 in sequential mode).
357
358* *depth*: maximal depth of tree (1 to 255, 255 if unlimited, 1 in
359  sequential mode).
360
361* *leaf_size*: maximal byte length of leaf (0 to 2**32-1, 0 if unlimited or in
362  sequential mode).
363
364* *node_offset*: node offset (0 to 2**64-1 for BLAKE2b, 0 to 2**48-1 for
365  BLAKE2s, 0 for the first, leftmost, leaf, or in sequential mode).
366
367* *node_depth*: node depth (0 to 255, 0 for leaves, or in sequential mode).
368
369* *inner_size*: inner digest size (0 to 64 for BLAKE2b, 0 to 32 for
370  BLAKE2s, 0 in sequential mode).
371
372* *last_node*: boolean indicating whether the processed node is the last
373  one (`False` for sequential mode).
374
375.. figure:: hashlib-blake2-tree.png
376   :alt: Explanation of tree mode parameters.
377
378See section 2.10 in `BLAKE2 specification
379<https://blake2.net/blake2_20130129.pdf>`_ for comprehensive review of tree
380hashing.
381
382
383Constants
384^^^^^^^^^
385
386.. data:: blake2b.SALT_SIZE
387.. data:: blake2s.SALT_SIZE
388
389Salt length (maximum length accepted by constructors).
390
391
392.. data:: blake2b.PERSON_SIZE
393.. data:: blake2s.PERSON_SIZE
394
395Personalization string length (maximum length accepted by constructors).
396
397
398.. data:: blake2b.MAX_KEY_SIZE
399.. data:: blake2s.MAX_KEY_SIZE
400
401Maximum key size.
402
403
404.. data:: blake2b.MAX_DIGEST_SIZE
405.. data:: blake2s.MAX_DIGEST_SIZE
406
407Maximum digest size that the hash function can output.
408
409
410Examples
411^^^^^^^^
412
413Simple hashing
414""""""""""""""
415
416To calculate hash of some data, you should first construct a hash object by
417calling the appropriate constructor function (:func:`blake2b` or
418:func:`blake2s`), then update it with the data by calling :meth:`update` on the
419object, and, finally, get the digest out of the object by calling
420:meth:`digest` (or :meth:`hexdigest` for hex-encoded string).
421
422    >>> from hashlib import blake2b
423    >>> h = blake2b()
424    >>> h.update(b'Hello world')
425    >>> h.hexdigest()
426    '6ff843ba685842aa82031d3f53c48b66326df7639a63d128974c5c14f31a0f33343a8c65551134ed1ae0f2b0dd2bb495dc81039e3eeb0aa1bb0388bbeac29183'
427
428
429As a shortcut, you can pass the first chunk of data to update directly to the
430constructor as the first argument (or as *data* keyword argument):
431
432    >>> from hashlib import blake2b
433    >>> blake2b(b'Hello world').hexdigest()
434    '6ff843ba685842aa82031d3f53c48b66326df7639a63d128974c5c14f31a0f33343a8c65551134ed1ae0f2b0dd2bb495dc81039e3eeb0aa1bb0388bbeac29183'
435
436You can call :meth:`hash.update` as many times as you need to iteratively
437update the hash:
438
439    >>> from hashlib import blake2b
440    >>> items = [b'Hello', b' ', b'world']
441    >>> h = blake2b()
442    >>> for item in items:
443    ...     h.update(item)
444    >>> h.hexdigest()
445    '6ff843ba685842aa82031d3f53c48b66326df7639a63d128974c5c14f31a0f33343a8c65551134ed1ae0f2b0dd2bb495dc81039e3eeb0aa1bb0388bbeac29183'
446
447
448Using different digest sizes
449""""""""""""""""""""""""""""
450
451BLAKE2 has configurable size of digests up to 64 bytes for BLAKE2b and up to 32
452bytes for BLAKE2s. For example, to replace SHA-1 with BLAKE2b without changing
453the size of output, we can tell BLAKE2b to produce 20-byte digests:
454
455    >>> from hashlib import blake2b
456    >>> h = blake2b(digest_size=20)
457    >>> h.update(b'Replacing SHA1 with the more secure function')
458    >>> h.hexdigest()
459    'd24f26cf8de66472d58d4e1b1774b4c9158b1f4c'
460    >>> h.digest_size
461    20
462    >>> len(h.digest())
463    20
464
465Hash objects with different digest sizes have completely different outputs
466(shorter hashes are *not* prefixes of longer hashes); BLAKE2b and BLAKE2s
467produce different outputs even if the output length is the same:
468
469    >>> from hashlib import blake2b, blake2s
470    >>> blake2b(digest_size=10).hexdigest()
471    '6fa1d8fcfd719046d762'
472    >>> blake2b(digest_size=11).hexdigest()
473    'eb6ec15daf9546254f0809'
474    >>> blake2s(digest_size=10).hexdigest()
475    '1bf21a98c78a1c376ae9'
476    >>> blake2s(digest_size=11).hexdigest()
477    '567004bf96e4a25773ebf4'
478
479
480Keyed hashing
481"""""""""""""
482
483Keyed hashing can be used for authentication as a faster and simpler
484replacement for `Hash-based message authentication code
485<http://en.wikipedia.org/wiki/Hash-based_message_authentication_code>`_ (HMAC).
486BLAKE2 can be securely used in prefix-MAC mode thanks to the
487indifferentiability property inherited from BLAKE.
488
489This example shows how to get a (hex-encoded) 128-bit authentication code for
490message ``b'message data'`` with key ``b'pseudorandom key'``::
491
492    >>> from hashlib import blake2b
493    >>> h = blake2b(key=b'pseudorandom key', digest_size=16)
494    >>> h.update(b'message data')
495    >>> h.hexdigest()
496    '3d363ff7401e02026f4a4687d4863ced'
497
498
499As a practical example, a web application can symmetrically sign cookies sent
500to users and later verify them to make sure they weren't tampered with::
501
502    >>> from hashlib import blake2b
503    >>> from hmac import compare_digest
504    >>>
505    >>> SECRET_KEY = b'pseudorandomly generated server secret key'
506    >>> AUTH_SIZE = 16
507    >>>
508    >>> def sign(cookie):
509    ...     h = blake2b(data=cookie, digest_size=AUTH_SIZE, key=SECRET_KEY)
510    ...     return h.hexdigest()
511    >>>
512    >>> cookie = b'user:vatrogasac'
513    >>> sig = sign(cookie)
514    >>> print("{0},{1}".format(cookie.decode('utf-8'), sig))
515    user:vatrogasac,349cf904533767ed2d755279a8df84d0
516    >>> compare_digest(cookie, sig)
517    True
518    >>> compare_digest(b'user:policajac', sig)
519    False
520    >>> compare_digesty(cookie, '0102030405060708090a0b0c0d0e0f00')
521    False
522
523Even though there's a native keyed hashing mode, BLAKE2 can, of course, be used
524in HMAC construction with :mod:`hmac` module::
525
526    >>> import hmac, hashlib
527    >>> m = hmac.new(b'secret key', digestmod=hashlib.blake2s)
528    >>> m.update(b'message')
529    >>> m.hexdigest()
530    'e3c8102868d28b5ff85fc35dda07329970d1a01e273c37481326fe0c861c8142'
531
532
533Randomized hashing
534""""""""""""""""""
535
536By setting *salt* parameter users can introduce randomization to the hash
537function. Randomized hashing is useful for protecting against collision attacks
538on the hash function used in digital signatures.
539
540    Randomized hashing is designed for situations where one party, the message
541    preparer, generates all or part of a message to be signed by a second
542    party, the message signer. If the message preparer is able to find
543    cryptographic hash function collisions (i.e., two messages producing the
544    same hash value), then she might prepare meaningful versions of the message
545    that would produce the same hash value and digital signature, but with
546    different results (e.g., transferring $1,000,000 to an account, rather than
547    $10). Cryptographic hash functions have been designed with collision
548    resistance as a major goal, but the current concentration on attacking
549    cryptographic hash functions may result in a given cryptographic hash
550    function providing less collision resistance than expected. Randomized
551    hashing offers the signer additional protection by reducing the likelihood
552    that a preparer can generate two or more messages that ultimately yield the
553    same hash value during the digital signature generation process --- even if
554    it is practical to find collisions for the hash function. However, the use
555    of randomized hashing may reduce the amount of security provided by a
556    digital signature when all portions of the message are prepared
557    by the signer.
558
559    (`NIST SP-800-106 "Randomized Hashing for Digital Signatures"
560    <http://csrc.nist.gov/publications/nistpubs/800-106/NIST-SP-800-106.pdf>`_)
561
562In BLAKE2 the salt is processed as a one-time input to the hash function during
563initialization, rather than as an input to each compression function.
564
565.. warning::
566
567    *Salted hashing* (or just hashing) with BLAKE2 or any other general-purpose
568    cryptographic hash function, such as SHA-256, is not suitable for hashing
569    passwords.  See `BLAKE2 FAQ <https://blake2.net/#qa>`_ for more
570    information.
571..
572
573    >>> import os
574    >>> from hashlib import blake2b
575    >>> msg = b'some message'
576    >>> # Calculate the first hash with a random salt.
577    >>> salt1 = os.urandom(blake2b.SALT_SIZE)
578    >>> h1 = blake2b(salt=salt1)
579    >>> h1.update(msg)
580    >>> # Calculate the second hash with a different random salt.
581    >>> salt2 = os.urandom(blake2b.SALT_SIZE)
582    >>> h2 = blake2b(salt=salt2)
583    >>> h2.update(msg)
584    >>> # The digests are different.
585    >>> h1.digest() != h2.digest()
586    True
587
588
589Personalization
590"""""""""""""""
591
592Sometimes it is useful to force hash function to produce different digests for
593the same input for different purposes. Quoting the authors of the Skein hash
594function:
595
596    We recommend that all application designers seriously consider doing this;
597    we have seen many protocols where a hash that is computed in one part of
598    the protocol can be used in an entirely different part because two hash
599    computations were done on similar or related data, and the attacker can
600    force the application to make the hash inputs the same. Personalizing each
601    hash function used in the protocol summarily stops this type of attack.
602
603    (`The Skein Hash Function Family
604    <http://www.skein-hash.info/sites/default/files/skein1.3.pdf>`_,
605    p. 21)
606
607BLAKE2 can be personalized by passing bytes to the *person* argument::
608
609    >>> from hashlib import blake2b
610    >>> FILES_HASH_PERSON = b'MyApp Files Hash'
611    >>> BLOCK_HASH_PERSON = b'MyApp Block Hash'
612    >>> h = blake2b(digest_size=32, person=FILES_HASH_PERSON)
613    >>> h.update(b'the same content')
614    >>> h.hexdigest()
615    '20d9cd024d4fb086aae819a1432dd2466de12947831b75c5a30cf2676095d3b4'
616    >>> h = blake2b(digest_size=32, person=BLOCK_HASH_PERSON)
617    >>> h.update(b'the same content')
618    >>> h.hexdigest()
619    'cf68fb5761b9c44e7878bfb2c4c9aea52264a80b75005e65619778de59f383a3'
620
621Personalization together with the keyed mode can also be used to derive different
622keys from a single one.
623
624    >>> from hashlib import blake2s
625    >>> from base64 import b64decode, b64encode
626    >>> orig_key = b64decode(b'Rm5EPJai72qcK3RGBpW3vPNfZy5OZothY+kHY6h21KM=')
627    >>> enc_key = blake2s(key=orig_key, person=b'kEncrypt').digest()
628    >>> mac_key = blake2s(key=orig_key, person=b'kMAC').digest()
629    >>> print(b64encode(enc_key).decode('utf-8'))
630    rbPb15S/Z9t+agffno5wuhB77VbRi6F9Iv2qIxU7WHw=
631    >>> print(b64encode(mac_key).decode('utf-8'))
632    G9GtHFE1YluXY1zWPlYk1e/nWfu0WSEb0KRcjhDeP/o=
633
634Tree mode
635"""""""""
636
637Here's an example of hashing a minimal tree with two leaf nodes::
638
639       10
640      /  \
641     00  01
642
643This example uses 64-byte internal digests, and returns the 32-byte final
644digest::
645
646    >>> from hashlib import blake2b
647    >>>
648    >>> FANOUT = 2
649    >>> DEPTH = 2
650    >>> LEAF_SIZE = 4096
651    >>> INNER_SIZE = 64
652    >>>
653    >>> buf = bytearray(6000)
654    >>>
655    >>> # Left leaf
656    ... h00 = blake2b(buf[0:LEAF_SIZE], fanout=FANOUT, depth=DEPTH,
657    ...               leaf_size=LEAF_SIZE, inner_size=INNER_SIZE,
658    ...               node_offset=0, node_depth=0, last_node=False)
659    >>> # Right leaf
660    ... h01 = blake2b(buf[LEAF_SIZE:], fanout=FANOUT, depth=DEPTH,
661    ...               leaf_size=LEAF_SIZE, inner_size=INNER_SIZE,
662    ...               node_offset=1, node_depth=0, last_node=True)
663    >>> # Root node
664    ... h10 = blake2b(digest_size=32, fanout=FANOUT, depth=DEPTH,
665    ...               leaf_size=LEAF_SIZE, inner_size=INNER_SIZE,
666    ...               node_offset=0, node_depth=1, last_node=True)
667    >>> h10.update(h00.digest())
668    >>> h10.update(h01.digest())
669    >>> h10.hexdigest()
670    '3ad2a9b37c6070e374c7a8c508fe20ca86b6ed54e286e93a0318e95e881db5aa'
671
672Credits
673^^^^^^^
674
675BLAKE2_ was designed by *Jean-Philippe Aumasson*, *Samuel Neves*, *Zooko
676Wilcox-O'Hearn*, and *Christian Winnerlein* based on SHA-3_ finalist BLAKE_
677created by *Jean-Philippe Aumasson*, *Luca Henzen*, *Willi Meier*, and
678*Raphael C.-W. Phan*.
679
680It uses core algorithm from ChaCha_ cipher designed by *Daniel J.  Bernstein*.
681
682The stdlib implementation is based on pyblake2_ module. It was written by
683*Dmitry Chestnykh* based on C implementation written by *Samuel Neves*. The
684documentation was copied from pyblake2_ and written by *Dmitry Chestnykh*.
685
686The C code was partly rewritten for Python by *Christian Heimes*.
687
688The following public domain dedication applies for both C hash function
689implementation, extension code, and this documentation:
690
691   To the extent possible under law, the author(s) have dedicated all copyright
692   and related and neighboring rights to this software to the public domain
693   worldwide. This software is distributed without any warranty.
694
695   You should have received a copy of the CC0 Public Domain Dedication along
696   with this software. If not, see
697   http://creativecommons.org/publicdomain/zero/1.0/.
698
699The following people have helped with development or contributed their changes
700to the project and the public domain according to the Creative Commons Public
701Domain Dedication 1.0 Universal:
702
703* *Alexandr Sokolovskiy*
704
705.. _RFC-7693: https://tools.ietf.org/html/rfc7693
706.. _BLAKE2: https://blake2.net
707.. _HMAC: https://en.wikipedia.org/wiki/Hash-based_message_authentication_code
708.. _BLAKE: https://131002.net/blake/
709.. _SHA-3: https://en.wikipedia.org/wiki/NIST_hash_function_competition
710.. _ChaCha: https://cr.yp.to/chacha.html
711.. _pyblake2: https://pythonhosted.org/pyblake2/
712
713
714
715.. seealso::
716
717   Module :mod:`hmac`
718      A module to generate message authentication codes using hashes.
719
720   Module :mod:`base64`
721      Another way to encode binary hashes for non-binary environments.
722
723   https://blake2.net
724      Official BLAKE2 website.
725
726   http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf
727      The FIPS 180-2 publication on Secure Hash Algorithms.
728
729   https://en.wikipedia.org/wiki/Cryptographic_hash_function#Cryptographic_hash_algorithms
730      Wikipedia article with information on which algorithms have known issues and
731      what that means regarding their use.
732
733   https://www.ietf.org/rfc/rfc2898.txt
734      PKCS #5: Password-Based Cryptography Specification Version 2.0
735