
    Uj                         d dl Z d dlZ	 d dlZn# e$ rZddlmZ  ed          edZ[ww xY wddlmZm	Z	m
Z
mZ dZdeez  d	e j        e         dz  fd
Z G d de          ZdS )    N   )HasherNotAvailablebcrypt   )HasherProtocolensure_bytes
ensure_strvalidate_str_or_byteszd^\$(?P<prefix>2[abxy])\$(?P<rounds>\d{2})\$(?P<salt>[A-Za-z0-9+/.]{22})(?P<hash>[A-Za-z0-9+/.]{31})$hashreturnc                 P    t          j        t          t          |                     S )N)rematch_IDENTIFY_REGEXr	   )r   s    Y/var/www/app.qaans.com/backend/venv/lib/python3.11/site-packages/pwdlib/hashers/bcrypt.py_match_regex_hashr      s    8OZ%5%5666    c                       e Zd Z	 ddedej        d         ddfdZed	ee	z  de
fd
            Zdddee	z  de	dz  defdZdee	z  d	ee	z  de
fdZd	ee	z  de
fdZdS )BcryptHasher   2broundsprefix)2ar   r   Nc                 H    || _         |                    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   s      r   __init__zBcryptHasher.__init__   s"     mmG,,r   r   c                 D    t          |d           t          |          d uS )Nr   )r
   r   )clsr   s     r   identifyzBcryptHasher.identify#   s%    dF+++ &&d22r   )saltpasswordr#   c                    t          |d           |t          j        | j        | j                  }t          t          j        t          |          |                    S )Nr$   )r
   r   gensaltr   r   r	   hashpwr   )r   r$   r#   s      r   r   zBcryptHasher.hash(   sN    h
333<>$+t{;;D&-X(>(>EEFFFr   c                     t          |d           t          |d           t          j        t          |          t          |                    S )Nr$   r   )r
   r   checkpwr   )r   r$   r   s      r   verifyzBcryptHasher.verify.   sD    h
333dF+++~l844l46H6HIIIr   c                     t          |d           t          |          }|dS t          |                    d                    | j        k    p0|                    d          | j                            d          k    S )Nr   Tr   r   r   )r
   r   intgroupr   r   decode)r   r   _hash_matchs      r   check_needs_rehashzBcryptHasher.check_needs_rehash3   s    dF+++'--4;$$X..//4;> )+BSBSC
 C
[((C) 	)r   )r   r   )__name__
__module____qualname__r,   typingLiteralr   classmethodstrbytesboolr"   r   r*   r0    r   r   r   r      s*       EI	- 	-	-(.z(B	-		- 	- 	- 	- 3C%K 3D 3 3 3 [3 CG G G GS5[ G54< G3 G G G GJsU{ J#+ J$ J J J J
)sU{ )t ) ) ) ) ) )r   r   )r   r4   r   ImportErrore
exceptionsr   baser   r   r	   r
   r   r7   r8   Matchr   r   r:   r   r   <module>r@      s   				 .MMMM . . .//////

X
&
&A-.
 R Q Q Q Q Q Q Q Q Q Q QC 7C%K 7BHSMD,@ 7 7 7 7$) $) $) $) $)> $) $) $) $) $)s    +&+