a
    9׿h                     @   s   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dZdeeedddZeeedddZeeedddZdeeeeeedddZeddddZdS )    )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\$      2b)roundsprefixreturnc                 C   s~   |dvrt d| dk s | dkr(t dtd}tjdd}tj||t| d	| d	 d
|  	d d	 tj
| S )N)s   2ar   z%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output r*   J/wd/webapps/venvs/v2025_4um/lib/python3.9/site-packages/bcrypt/__init__.pyr   8   s&    

r   )passwordr(   r   c                 C   s   t | tst |trtdd| v r,td| d d } |td| }}tjdd}tj	
| ||t|}|dkr~td	|d d
 tj|d
d   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#   Zbcrypt_hashpassr%   r'   )r,   r(   Zoriginal_salthashedretvalr*   r*   r+   r   M   s    r   )r,   hashed_passwordr   c                 C   sJ   t | tst |trtdd| v s,d|v r4tdt| |}t||S )Nz'Strings must be encoded before checkingr.   z6password and hashed_password may not contain NUL bytes)r1   r2   r3   r   r   hmaccompare_digest)r,   r8   retr*   r*   r+   r   s   s    
r   F)r,   r(   desired_key_bytesr   ignore_few_roundsr   c              	   C   s   t | tst |trtdt| dks4t|dkr<td|dksL|dkrTtd|dk rdtd|dk r|stjd	|td
d t	j
d|}t	j| t| |t||t||}t|dk t	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[])r1   r2   r3   r%   r   warningswarnformatUserWarningr   r!   r"   r#   Zbcrypt_pbkdf_bcrypt_assertbuffer)r,   r(   r<   r   r=   keyresr*   r*   r+   r      s.    	r   )okr   c                 C   s   | st dd S )Nzbcrypt assertion failed)SystemError)rI   r*   r*   r+   rE      s    rE   )r   r   )F)
__future__r   r   r9   r   rerA   	__about__r   r   r   r   r	   r
   r   r    r   __all__compiler4   intbytesr   r   boolr   r   rE   r*   r*   r*   r+   <module>   s,   (

& )