Home | History | Annotate | Download | only in library
      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 (a] krypto.org>
      8 .. sectionauthor:: Gregory P. Smith <greg (a] 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 
     23 This module implements a common interface to many different secure hash and
     24 message digest algorithms.  Included are the FIPS secure hash algorithms SHA1,
     25 SHA224, SHA256, SHA384, and SHA512 (defined in FIPS 180-2) as well as RSA's MD5
     26 algorithm (defined in Internet :rfc:`1321`).  The terms "secure hash" and
     27 "message digest" are interchangeable.  Older algorithms were called message
     28 digests.  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 
     43 Hash algorithms
     44 ---------------
     45 
     46 There is one constructor method named for each type of :dfn:`hash`.  All return
     47 a hash object with the same simple interface. For example: use :func:`sha256` to
     48 create a SHA-256 hash object. You can now feed this object with :term:`bytes-like
     49 objects <bytes-like object>` (normally :class:`bytes`) using the :meth:`update` method.
     50 At any point you can ask it for the :dfn:`digest` of the
     51 concatenation 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 
     66 Constructors 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
     70 may be missing if you are using a rare "FIPS compliant" build of Python.
     71 Additional algorithms may also be available depending upon the OpenSSL
     72 library 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 For example, to obtain the digest of the byte string ``b'Nobody inspects the
     84 spammish 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 
     97 More 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 
    110 Using :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 
    117 Hashlib 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 
    138 The following values are provided as constant attributes of the hash objects
    139 returned 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 
    150 A 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 
    162 A 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 
    198 SHAKE variable length digests
    199 -----------------------------
    200 
    201 The :func:`shake_128` and :func:`shake_256` algorithms provide variable
    202 length digests with length_in_bits//2 up to 128 or 256 bits of security.
    203 As such, their digest methods require a length. Maximum length is not limited
    204 by 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 
    220 Key derivation
    221 --------------
    222 
    223 Key derivation and key stretching algorithms are designed for secure password
    224 hashing. Naive algorithms such as ``sha1(password)`` are not resistant against
    225 brute-force attacks. A good password hashing function must be tunable, slow, and
    226 include 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 
    278 BLAKE2
    279 ------
    280 
    281 .. sectionauthor:: Dmitry Chestnykh
    282 
    283 .. index::
    284    single: blake2b, blake2s
    285 
    286 BLAKE2_ is a cryptographic hash function defined in RFC-7693_ that comes in two
    287 flavors:
    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 
    295 BLAKE2 supports **keyed mode** (a faster and simpler replacement for HMAC_),
    296 **salted hashing**, **personalization**, and **tree hashing**.
    297 
    298 Hash objects from this module follow the API of standard library's
    299 :mod:`hashlib` objects.
    300 
    301 
    302 Creating hash objects
    303 ^^^^^^^^^^^^^^^^^^^^^
    304 
    305 New 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 
    317 These functions return the corresponding hash objects for calculating
    318 BLAKE2b 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 
    334 The following table shows limits for general parameters (in bytes):
    335 
    336 ======= =========== ======== ========= ===========
    337 Hash    digest_size len(key) len(salt) len(person)
    338 ======= =========== ======== ========= ===========
    339 BLAKE2b     64         64       16        16
    340 BLAKE2s     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 
    352 These sizes are available as module `constants`_ described below.
    353 
    354 Constructor 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 
    378 See section 2.10 in `BLAKE2 specification
    379 <https://blake2.net/blake2_20130129.pdf>`_ for comprehensive review of tree
    380 hashing.
    381 
    382 
    383 Constants
    384 ^^^^^^^^^
    385 
    386 .. data:: blake2b.SALT_SIZE
    387 .. data:: blake2s.SALT_SIZE
    388 
    389 Salt length (maximum length accepted by constructors).
    390 
    391 
    392 .. data:: blake2b.PERSON_SIZE
    393 .. data:: blake2s.PERSON_SIZE
    394 
    395 Personalization string length (maximum length accepted by constructors).
    396 
    397 
    398 .. data:: blake2b.MAX_KEY_SIZE
    399 .. data:: blake2s.MAX_KEY_SIZE
    400 
    401 Maximum key size.
    402 
    403 
    404 .. data:: blake2b.MAX_DIGEST_SIZE
    405 .. data:: blake2s.MAX_DIGEST_SIZE
    406 
    407 Maximum digest size that the hash function can output.
    408 
    409 
    410 Examples
    411 ^^^^^^^^
    412 
    413 Simple hashing
    414 """"""""""""""
    415 
    416 To calculate hash of some data, you should first construct a hash object by
    417 calling the appropriate constructor function (:func:`blake2b` or
    418 :func:`blake2s`), then update it with the data by calling :meth:`update` on the
    419 object, 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 
    429 As a shortcut, you can pass the first chunk of data to update directly to the
    430 constructor as the first argument (or as *data* keyword argument):
    431 
    432     >>> from hashlib import blake2b
    433     >>> blake2b(b'Hello world').hexdigest()
    434     '6ff843ba685842aa82031d3f53c48b66326df7639a63d128974c5c14f31a0f33343a8c65551134ed1ae0f2b0dd2bb495dc81039e3eeb0aa1bb0388bbeac29183'
    435 
    436 You can call :meth:`hash.update` as many times as you need to iteratively
    437 update 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 
    448 Using different digest sizes
    449 """"""""""""""""""""""""""""
    450 
    451 BLAKE2 has configurable size of digests up to 64 bytes for BLAKE2b and up to 32
    452 bytes for BLAKE2s. For example, to replace SHA-1 with BLAKE2b without changing
    453 the 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 
    465 Hash objects with different digest sizes have completely different outputs
    466 (shorter hashes are *not* prefixes of longer hashes); BLAKE2b and BLAKE2s
    467 produce 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 
    480 Keyed hashing
    481 """""""""""""
    482 
    483 Keyed hashing can be used for authentication as a faster and simpler
    484 replacement for `Hash-based message authentication code
    485 <http://en.wikipedia.org/wiki/Hash-based_message_authentication_code>`_ (HMAC).
    486 BLAKE2 can be securely used in prefix-MAC mode thanks to the
    487 indifferentiability property inherited from BLAKE.
    488 
    489 This example shows how to get a (hex-encoded) 128-bit authentication code for
    490 message ``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 
    499 As a practical example, a web application can symmetrically sign cookies sent
    500 to 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 
    523 Even though there's a native keyed hashing mode, BLAKE2 can, of course, be used
    524 in 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 
    533 Randomized hashing
    534 """"""""""""""""""
    535 
    536 By setting *salt* parameter users can introduce randomization to the hash
    537 function. Randomized hashing is useful for protecting against collision attacks
    538 on 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 
    562 In BLAKE2 the salt is processed as a one-time input to the hash function during
    563 initialization, 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 
    589 Personalization
    590 """""""""""""""
    591 
    592 Sometimes it is useful to force hash function to produce different digests for
    593 the same input for different purposes. Quoting the authors of the Skein hash
    594 function:
    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 
    607 BLAKE2 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 
    621 Personalization together with the keyed mode can also be used to derive different
    622 keys 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 
    634 Tree mode
    635 """""""""
    636 
    637 Here's an example of hashing a minimal tree with two leaf nodes::
    638 
    639        10
    640       /  \
    641      00  01
    642 
    643 This example uses 64-byte internal digests, and returns the 32-byte final
    644 digest::
    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 
    672 Credits
    673 ^^^^^^^
    674 
    675 BLAKE2_ was designed by *Jean-Philippe Aumasson*, *Samuel Neves*, *Zooko
    676 Wilcox-O'Hearn*, and *Christian Winnerlein* based on SHA-3_ finalist BLAKE_
    677 created by *Jean-Philippe Aumasson*, *Luca Henzen*, *Willi Meier*, and
    678 *Raphael C.-W. Phan*.
    679 
    680 It uses core algorithm from ChaCha_ cipher designed by *Daniel J.  Bernstein*.
    681 
    682 The stdlib implementation is based on pyblake2_ module. It was written by
    683 *Dmitry Chestnykh* based on C implementation written by *Samuel Neves*. The
    684 documentation was copied from pyblake2_ and written by *Dmitry Chestnykh*.
    685 
    686 The C code was partly rewritten for Python by *Christian Heimes*.
    687 
    688 The following public domain dedication applies for both C hash function
    689 implementation, 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 
    699 The following people have helped with development or contributed their changes
    700 to the project and the public domain according to the Creative Commons Public
    701 Domain 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