a fWc@sdZddlmZddlZeeZddlmZddl m Z ddl m Z ddl mZmZmZmZmZgdZdd lmZed ee d d ed deZiadZddZdddZdddZdS)zpasslib.pbkdf2 - PBKDF2 support this module is getting increasingly poorly named. maybe rename to "kdf" since it's getting more key derivation functions added. )divisionN)ExpectedTypeError)deprecated_function)native_string_types)norm_hash_name lookup_hashpbkdf1 pbkdf2_hmac compile_hmac)rget_prfrpbkdf2)warnzthe module 'passlib.utils.pbkdf2' is deprecated as of Passlib 1.7, and will be removed in Passlib 2.0, please use 'passlib.crypto' insteadz1.7z1.8z$passlib.crypto.digest.norm_hash_name)Z deprecatedZremovedZ func_moduleZ replacement)Zhmac_zhmac-cs|tvrt|St|tr^|ts2td|ft|ddjfdd}||jj f}n,t |r~t |dd}||f}n t |dd |t|<|S) aLookup pseudo-random family (PRF) by name. :arg name: This must be the name of a recognized prf. Currently this only recognizes names with the format :samp:`hmac-{digest}`, where :samp:`{digest}` is the name of a hash function such as ``md5``, ``sha256``, etc. todo: restore text about callables. :raises ValueError: if the name is not known :raises TypeError: if the name is not a callable or string :returns: a tuple of :samp:`({prf_func}, {digest_size})`, where: * :samp:`{prf_func}` is a function implementing the specified PRF, and has the signature ``prf_func(secret, message) -> digest``. * :samp:`{digest_size}` is an integer indicating the number of bytes the function returns. Usage example:: >>> from passlib.utils.pbkdf2 import get_prf >>> hmac_sha256, dsize = get_prf("hmac-sha256") >>> hmac_sha256 >>> dsize 32 >>> digest = hmac_sha256('password', 'message') .. deprecated:: 1.7 This function is deprecated, and will be removed in Passlib 2.0. This only related replacement is :func:`passlib.crypto.digest.compile_hmac`. zunknown prf algorithm: %rNcst||S)N)r )keymsgdigest8/usr/lib/python3.9/site-packages/passlib/utils/pbkdf2.pyhmachszget_prf..hmacxyzstr or callablezprf name) _prf_cache isinstancer startswith_HMAC_PREFIXES ValueErrorrnameZ digest_info digest_sizecallablelenr)rrrecordrrrrr 9s)     r sha1cCst|||||S)aLpkcs#5 password-based key derivation v1.5 :arg secret: passphrase to use to generate key :arg salt: salt string to use when generating key :param rounds: number of rounds to use to generate key :arg keylen: number of bytes to generate (if ``None``, uses digest's native size) :param hash: hash function to use. must be name of a hash recognized by hashlib. :returns: raw bytes of generated key .. note:: This algorithm has been deprecated, new code should use PBKDF2. Among other limitations, ``keylen`` cannot be larger than the digest size of the specified hash. .. deprecated:: 1.7 This has been relocated to :func:`passlib.crypto.digest.pbkdf1`, and this version will be removed in Passlib 2.0. *Note the call signature has changed.* )_pbkdf1)secretsaltroundskeylenhashrrrrwsr hmac-sha1cCs@t|st|tr$|ts$td|dd}t|||||S)aWpkcs#5 password-based key derivation v2.0 :arg secret: passphrase to use to generate key :arg salt: salt string to use when generating key :param rounds: number of rounds to use to generate key :arg keylen: number of bytes to generate. if set to ``None``, will use digest size of selected prf. :param prf: psuedo-random family to use for key strengthening. this must be a string starting with ``"hmac-"``, followed by the name of a known digest. this defaults to ``"hmac-sha1"`` (the only prf explicitly listed in the PBKDF2 specification) .. rst-class:: warning .. versionchanged 1.7: This argument no longer supports arbitrary PRF callables -- These were rarely / never used, and created too many unwanted codepaths. :returns: raw bytes of generated key .. deprecated:: 1.7 This has been deprecated in favor of :func:`passlib.crypto.digest.pbkdf2_hmac`, and will be removed in Passlib 2.0. *Note the call signature has changed.* z1non-HMAC prfs are not supported as of Passlib 1.7rN)rrrrrNotImplementedErrorr )r$r%r&r'Zprfrrrrr s% r )Nr")Nr))__doc__Z __future__rZloggingZ getLogger__name__logZ passlib.excrZpasslib.utils.decorrZpasslib.utils.compatrZpasslib.crypto.digestrrrr#r r __all__warningsr DeprecationWarningrrr r rrrrs*     >