a b@sddlmZddlmZddlZddlZddlZddlZddlmZm Z m Z m Z m Z m Z mZmZddlmZgdZedZdeeed d d ZeeedddZeeedddZdeeeeeedddZeddddZdS))absolute_import)divisionN) __author__ __copyright__ __email__ __license__ __summary__ __title____uri__ __version__)_bcrypt) r r r r rrrrgensalthashpwkdfcheckpws^\$2y\$ 2b)roundsprefixreturncCs~|dvrtd|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) ValueErrorosurandomr ffinewlib encode_base64lenencodestring)rrsaltoutputr*6/tmp/pip-target-98j97qn4/lib/python/bcrypt/__init__.pyr8s&   r)passwordr(rcCst|tst|trtdd|vr,td|dd}|td|}}tjdd}tj |||t |}|dkr~td |dd tj |d dS) N&Strings must be encoded before hashingz"password may not contain NUL bytesHs$2b$rrz Invalid saltr) isinstancestr TypeErrorr _normalize_resubr r!r"r#Zbcrypt_hashpassr%r')r,r(Z original_salthashedretvalr*r*r+rMs r)r,hashed_passwordrcCsJt|tst|trtdd|vs,d|vr4tdt||}t||S)Nz'Strings must be encoded before checkingr.z6password and hashed_password may not contain NUL bytes)r1r2r3rrhmaccompare_digest)r,r8retr*r*r+rss rF)r,r(desired_key_bytesrignore_few_roundsrc Cst|tst|trtdt|dks4t|dkrs,  (  & )