U q` @sddlmZddlmZddlZddlZddlZddlZddlmZddl m Z m Z m Z m Z mZmZmZmZddd d d d d dddddg ZedZd"eeedddZeeedddZeeedddZd#eeeeeedddZeddd d!ZdS)$)absolute_import)divisionN)_bcrypt) __author__ __copyright__ __email__ __license__ __summary__ __title____uri__ __version__r r r r rrr rgensalthashpwkdfcheckpws^\$2y\$ 2b)roundsprefixreturncCs~|dkrtd|dks |dkr(tdtd}tjdd}tj||t|d |d d | d d tj |S) N)s2arz%Supported prefixes are b'2a' or b'2b'zInvalid roundschar[]$z%2.2uascii) ValueErrorosurandomrffinewlib encode_base64lenencodestring)rrsaltoutputr*6/tmp/pip-target-nv4zd3e_/lib/python/bcrypt/__init__.pyr9s&   )passwordr(rcCst|tjst|tjr tdd|kr0td|dd}|td|}}tj dd}tj |||t |}|dkrtd |dd tj |d dS) N.Unicode-objects must be encoded before hashingz"password may not contain NUL bytesHs$2b$rrz Invalid saltr) isinstancesix text_type TypeErrorr _normalize_resubrr!r"r#Zbcrypt_hashpassr%r')r,r(Z original_salthashedretvalr*r*r+rNs )r,hashed_passwordrcCsnt|tjst|tjr tdd|ks0d|kr8tdt||}t|t|krVdStj ||t|dkS)Nz/Unicode-objects must be encoded before checkingr.z6password and hashed_password may not contain NUL bytesFr) r1r2r3r4rrr%rr#Ztimingsafe_bcmp)r,r9retr*r*r+rts F)r,r(desired_key_bytesrignore_few_roundsrc Cst|tjst|tjr tdt|dks8t|dkr@td|dksP|dkrXtd|dkrhtd|dkr|stjd |t d d t j d |}t j |t||t||t||}t|dkt j ||ddS) Nr-rz#password and salt must not be emptyizdesired_key_bytes must be 1-512rzrounds must be 1 or more2zrWarning: bcrypt.kdf() called with only {0} round(s). This few is not secure: the parameter is linear, like PBKDF2.) stacklevelz uint8_t[])r1r2r3r4r%rwarningswarnformat UserWarningrr!r"r#Z bcrypt_pbkdf_bcrypt_assertbuffer)r,r(r;rr<keyresr*r*r+rs:   )okrcCs|s tddS)Nzbcrypt assertion failed) SystemError)rHr*r*r+rDsrD)rr)F) __future__rrrrer@r2r __about__rrrr r r r r __all__compiler5intbytesrrboolrrrDr*r*r*r+sD   (  & )