o
    Ù­‘h/  ã                
   @   s    d dl Z d dlZzd dlZW n ey% Z zddlmZ edƒe‚dZ[ww ddlmZm	Z	m
Z
 dZdejeef d	ejeje  fd
d„ZG dd„ deƒZdS )é    Né   )ÚHasherNotAvailableÚbcrypté   )ÚHasherProtocolÚensure_bytesÚ
ensure_strzd^\$(?P<prefix>2[abxy])\$(?P<rounds>\d{2})\$(?P<salt>[A-Za-z0-9+/.]{22})(?P<hash>[A-Za-z0-9+/.]{31})$ÚhashÚreturnc                 C   s   t  tt| ƒ¡S ©N)ÚreÚmatchÚ_IDENTIFY_REGEXr   )r	   © r   úZ/var/www/html/stock_analysis/be/venv/lib/python3.10/site-packages/pwdlib/hashers/bcrypt.pyÚ_match_regex_hash   s   r   c                   @   sÂ   e Zd Z	ddedejd ddfdd	„Zed
eje	e
f defdd„ƒZddœdeje	e
f deje
df de	fdd„Zdeje	e
f d
eje	e
f defdd„Zd
eje	e
f defdd„ZdS )ÚBcryptHasheré   Ú2bÚroundsÚprefix)Ú2ar   r
   Nc                 C   s   || _ | d¡| _dS )z‡
        Args:
            rounds: The number of rounds to use for hashing.
            prefix: The prefix to use for hashing.
        úutf-8N)r   Úencoder   )Úselfr   r   r   r   r   Ú__init__   s   zBcryptHasher.__init__r	   c                 C   s   t |ƒd uS r   )r   )Úclsr	   r   r   r   Úidentify%   s   zBcryptHasher.identify)ÚsaltÚpasswordr   c                C   s,   |d u rt  | j| j¡}tt  t|ƒ|¡ƒS r   )r   Úgensaltr   r   r   Úhashpwr   )r   r   r   r   r   r   r	   )   s   zBcryptHasher.hashc                 C   s   t  t|ƒt|ƒ¡S r   )r   Úcheckpwr   )r   r   r	   r   r   r   Úverify3   s   zBcryptHasher.verifyc                 C   s>   t |ƒ}|d u r
dS t| d¡ƒ| jkp| d¡| j d¡kS )NTr   r   r   )r   ÚintÚgroupr   r   Údecode)r   r	   Ú_hash_matchr   r   r   Úcheck_needs_rehash8   s   ÿ
þzBcryptHasher.check_needs_rehash)r   r   )Ú__name__Ú
__module__Ú__qualname__r$   ÚtypingÚLiteralr   ÚclassmethodÚUnionÚstrÚbytesÚboolr   r	   r#   r(   r   r   r   r   r      s6    ÿÿÿ
þüþü
û
ÿÿ
þ r   )r   r,   r   ÚImportErrorÚeÚ
exceptionsr   Úbaser   r   r   r   r/   r0   r1   ÚOptionalÚMatchr   r   r   r   r   r   Ú<module>   s$    
€ýÿÿ
þ