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