a b0 @sddlZddlmZddlZddlmZejjZ ejj Z ejj Z ejjZejjZejjZejjZejjZejjZejjZejjZejjZGdddZ de!e!e"e"e"e"e"e!d d dZ#dS)N)NoReturn)bytes_as_stringc@seZdZdZeZeZeZ e Z dedddfe e e e e dddZee dddZee dd d Zeedd d Ze d dddZe dddZedddZddddZedddZd S)blake2bzK :py:mod:`hashlib` API compatible blake2b algorithm implementation )data digest_sizekeysaltpersoncCs*t||||d|_||_|r&||dS)ab :py:class:`.blake2b` algorithm initializer :param data: :type data: bytes :param int digest_size: the requested digest size; must be at most :py:attr:`.MAX_DIGEST_SIZE`; the default digest size is :py:data:`.BYTES` :param key: the key to be set for keyed MAC/PRF usage; if set, the key must be at most :py:data:`.KEYBYTES_MAX` long :type key: bytes :param salt: a initialization salt at most :py:attr:`.SALT_SIZE` long; it will be zero-padded if needed :type salt: bytes :param person: a personalization string at most :py:attr:`.PERSONAL_SIZE` long; it will be zero-padded if needed :type person: bytes )rr r rN) _b2b_init_state _digest_sizeupdate)selfrrrr r r3/tmp/pip-target-98j97qn4/lib/python/nacl/hashlib.py__init__0s zblake2b.__init__)returncCs|jSN)r rrrrrUszblake2b.digest_sizecCsdS)Nrrrrr block_sizeYszblake2b.block_sizecCsdS)Nrrrrrrname]sz blake2b.nameN)rrcCst|j|dSr) _b2b_updater )rrrrrraszblake2b.updatecCs|j}t|Sr)r copy _b2b_final)r_strrrdigestds zblake2b.digestcCstt|Sr)rbinasciihexlifyrrrrr hexdigesthszblake2b.hexdigestcCs$t||jd}|j}||_|S)N)r)typerr r)rZ_cprrrrrks z blake2b.copycCstd|jjdS)zc Raise the same exception as hashlib's blake implementation on copy.copy() zcan't pickle {} objectsN) TypeErrorformat __class____name__rrrr __reduce__qs zblake2b.__reduce__)r% __module__ __qualname____doc__BYTESMAX_DIGEST_SIZE KEYBYTES_MAX MAX_KEY_SIZE PERSONALBYTES PERSON_SIZE SALTBYTES SALT_SIZEbytesintrpropertyrrstrrrrr rrr&rrrrr&s8 %rr@)passwordr nrpmaxmemdklenrc Cstjj|||||||dS)a Derive a cryptographic key using the scrypt KDF. :raises nacl.exceptions.UnavailableError: If called when using a minimal build of libsodium. Implements the same signature as the ``hashlib.scrypt`` implemented in cpython version 3.6 )r?r@)naclbindingsZ%crypto_pwhash_scryptsalsa208sha256_ll)r;r r<r=r>r?r@rrrscrypt{srC)rr6r7r8r9r:)$rtypingrZ nacl.bindingsrAZ nacl.utilsrrBZcrypto_generichash_BYTESr*Zcrypto_generichash_BYTES_MINZ BYTES_MINZcrypto_generichash_BYTES_MAXZ BYTES_MAXZcrypto_generichash_KEYBYTESZKEYBYTESZcrypto_generichash_KEYBYTES_MINZ KEYBYTES_MINZcrypto_generichash_KEYBYTES_MAXr,Zcrypto_generichash_SALTBYTESr0Z crypto_generichash_PERSONALBYTESr.Z&has_crypto_pwhash_scryptsalsa208sha256ZSCRYPT_AVAILABLEZcrypto_generichash_blake2b_initr Z crypto_generichash_blake2b_finalrZ!crypto_generichash_blake2b_updaterrr2r3rCrrrrs@  W