
    nb                        d dl mZ d dl mZ d dlZd dlZd dlZd dlZddlmZm	Z	m
Z
mZmZmZmZmZ ddlmZ g dZ ej&                  d      Zdd	ed
edefdZdededefdZdededefdZ	 ddededed	ededefdZdeddfdZy)    )absolute_import)divisionN   )
__author____copyright__	__email____license____summary__	__title____uri____version__)_bcrypt)r   r
   r   r   r   r   r	   r   gensalthashpwkdfcheckpws   ^\$2y\$roundsprefixreturnc                    |dvrt        d      | dk  s| dkD  rt        d      t        j                  d      }t        j                  j                  dd      }t        j                  j                  ||t        |             d	|z   d	z   d
| z  j                  d      z   d	z   t        j                  j                  |      z   S )N)s   2a   2bz%Supported prefixes are b'2a' or b'2b'      zInvalid rounds   char[]      $z%2.2uascii)
ValueErrorosurandomr   ffinewlibencode_base64lenencodestring)r   r   saltoutputs       1/usr/lib/python3/dist-packages/bcrypt/__init__.pyr   r   8   s    ^#@AAzVb[)**::b>D[[__Xr*FKKfdCI6 	
	
	 V
#
#G
,	- 		
 ++

V
$	%    passwordr)   c                    t        | t              st        |t              rt        d      d| v rt        d      | d d } |t        j                  d|      }}t        j                  j                  dd      }t        j                  j                  | ||t        |            }|dk7  rt        d	      |d d
 t        j                  j                  |      d
d  z   S )N&Strings must be encoded before hashing    z"password may not contain NUL bytesH   s   $2b$r      r   zInvalid saltr   )
isinstancestr	TypeErrorr   _normalize_resubr   r"   r#   r$   bcrypt_hashpassr&   r(   )r-   r)   original_salthashedretvals        r+   r   r   M   s    (C JtS$9@AA(=>> }H  1 1'4 @4M[[__Xs+F[[((4VMF{(( !w{{11&9!"===r,   hashed_passwordc                     t        | t              st        |t              rt        d      d| v sd|v rt        d      t	        | |      }t        j                  ||      S )Nz'Strings must be encoded before checkingr0   z6password and hashed_password may not contain NUL bytes)r3   r4   r5   r   r   hmaccompare_digest)r-   r<   rets      r+   r   r   s   sa    (C J$DABB(g8D
 	
 ?
+CsO44r,   desired_key_bytesignore_few_roundsc           
      v   t        | t              st        |t              rt        d      t        |       dk(  st        |      dk(  rt	        d      |dk  s|dkD  rt	        d      |dk  rt	        d      |dk  r-|s+t        j                  d	j                  |      t        d
       t        j                  j                  d|      }t        j                  j                  | t        |       |t        |      |t        |      |      }t        |dk(         t        j                  j                  ||      d d  S )Nr/   r   z#password and salt must not be emptyi   zdesired_key_bytes must be 1-512r   zrounds must be 1 or more2   zrWarning: bcrypt.kdf() called with only {0} round(s). This few is not secure: the parameter is linear, like PBKDF2.   )
stacklevelz	uint8_t[])r3   r4   r5   r&   r   warningswarnformatUserWarningr   r"   r#   r$   bcrypt_pbkdf_bcrypt_assertbuffer)r-   r)   rA   r   rB   keyress          r+   r   r      s    (C JtS$9@AA
8}SY!^>??A!2S!8:;;z344{, 	PfVn	
 ++//+'8
9C
++
"
"#h-s4y#s3xC 3!8;;c#45a88r,   okc                     | st        d      y )Nzbcrypt assertion failed)SystemError)rP   s    r+   rL   rL      s    344 r,   )   r   )F)
__future__r   r   r>   r    rerG   	__about__r   r   r   r	   r
   r   r   r    r   __all__compiler6   intbytesr   r   boolr   r   rL    r,   r+   <module>r^      s     '   	 	 	 	 	   

;'C e  *#>U #>% #>E #>L
5e 
5e 
5 
5$ $&9&9
&9 &9 	&9
 &9 &9R5t 5 5r,   