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