
    +h                        U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZdZdZ	 e
d ej                  ej                  j                  fD              Zded<   ddZdd	Z	 d	 	 	 	 	 	 	 dd
ZddZddZy)    )annotationsN>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789i'	 c              #  2   K   | ]  }||dk7  s|  y w)N/ ).0seps     D/var/www/html/venv/lib/python3.12/site-packages/werkzeug/security.py	<genexpr>r      s      s3#:Cs   z	list[str]_os_alt_sepsc                d    | dk  rt        d      dj                  d t        |       D              S )zAGenerate a random string of SALT_CHARS with specified ``length``.r   zSalt length must be at least 1. c              3  N   K   | ]  }t        j                  t                y wN)secretschoice
SALT_CHARS)r   _s     r
   r   zgen_salt.<locals>.<genexpr>   s     E!7>>*-Es   #%)
ValueErrorjoinrange)lengths    r
   gen_saltr      s.    {:;;77EuV}EEE    c                (   | dk(  rt        j                  dd       || fS | j                  d      ^} }|j                  d      }|j                  d      }| dk(  r]|sd}d	}d
}n	 t	        t
        |      \  }}}d|z  |z  |z  }t        j                  ||||||      j                         d| d| d| fS | dk(  r|t        |      }|dk(  r	d}	t        }
n5|d
k(  r|d   }	t        }
n$|dk(  r|d   }	t        |d
         }
nt        d      t        j                  |	|||
      j                         d|	 d|
 fS t        j                  d|  dd       t        j                  |||       j                         | fS # t        $ r t        d      d w xY w)NplainznThe 'plain' password method is deprecated and will be removed in Werkzeug 3.0. Migrate to the 'scrypt' method.   )
stacklevel:zutf-8scrypti         z'scrypt' takes 3 arguments.   )saltnrpmaxmemzscrypt:pbkdf2r   sha256   z'pbkdf2' takes 2 arguments.zpbkdf2:zThe 'zd' password method is deprecated and will be removed in Werkzeug 3.0. Migrate to the 'scrypt' method.)warningswarnsplitencodemapintr   hashlibr    hexlenDEFAULT_PBKDF2_ITERATIONSpbkdf2_hmachmacnew	hexdigest)methodr$   passwordargsr%   r&   r'   r(   len_args	hash_name
iterationss              r
   _hash_internalr@      s   =	

 LL%MFT;;wDw'HAAAJc4.1a q1qNN8$!qAfMQQSaS!AaS!
 	
 
8	t9q= I2J]QI2J]QIT!WJ:;; 	8T:FJJLi[*.
 	

 	F8 = =	

 xxh/99;VCCC  J !>?TIJs   %E; ;Fc                L    t        |      }t        |||       \  }}| d| d| S )a  Securely hash a password for storage. A password can be compared to a stored hash
    using :func:`check_password_hash`.

    The following methods are supported:

    -   ``scrypt``, more secure but not available on PyPy. The parameters are ``n``,
        ``r``, and ``p``, the default is ``scrypt:32768:8:1``. See
        :func:`hashlib.scrypt`.
    -   ``pbkdf2``, the default. The parameters are ``hash_method`` and ``iterations``,
        the default is ``pbkdf2:sha256:600000``. See :func:`hashlib.pbkdf2_hmac`.

    Default parameters may be updated to reflect current guidelines, and methods may be
    deprecated and removed if they are no longer considered secure. To migrate old
    hashes, you may generate a new hash when checking an old hash, or you may contact
    users with a link to reset their password.

    :param password: The plaintext password.
    :param method: The key derivation function and parameters.
    :param salt_length: The number of characters to generate for the salt.

    .. versionchanged:: 2.3
        Scrypt support was added.

    .. versionchanged:: 2.3
        The default iterations for pbkdf2 was increased to 600,000.

    .. versionchanged:: 2.3
        All plain hashes are deprecated and will not be supported in Werkzeug 3.0.
    $)r   r@   )r;   r:   salt_lengthr$   hactual_methods         r
   generate_password_hashrF   S   s9    @ K D%fdH=A}_AdV1QC((r   c                    	 | j                  dd      \  }}}t        j                  t	        |||      d   |      S # t        $ r Y yw xY w)aA  Securely check that the given stored password hash, previously generated using
    :func:`generate_password_hash`, matches the given password.

    Methods may be deprecated and removed if they are no longer considered secure. To
    migrate old hashes, you may generate a new hash when checking an old hash, or you
    may contact users with a link to reset their password.

    :param pwhash: The hashed password.
    :param password: The plaintext password.

    .. versionchanged:: 2.3
        All plain hashes are deprecated and will not be supported in Werkzeug 3.0.
    rB   r+   Fr   )r.   r   r7   compare_digestr@   )pwhashr;   r:   r$   hashvals        r
   check_password_hashrK   x   sU     &S! 4g ~fdHEaH'RR  s   < 	AAc                8   | sd} | g}|D ]|  dk7  rt        j                        t        fdt        D              s5t        j
                  j                        sdk(  sj                  d      r y|j                         ~ t        j                  | S )a2  Safely join zero or more untrusted path components to a base
    directory to avoid escaping the base directory.

    :param directory: The trusted base directory.
    :param pathnames: The untrusted path components relative to the
        base directory.
    :return: A safe path, otherwise ``None``.
    .r   c              3  &   K   | ]  }|v  
 y wr   r   )r   r	   filenames     r
   r   zsafe_join.<locals>.<genexpr>   s     8Cx8s   z..z../N)
	posixpathnormpathanyr   ospathisabs
startswithappendr   )	directory	pathnamespartsrO   s      @r
   	safe_joinr[      s      	KE r> ))(3H 8<88ww}}X&4""5)X >>5!!r   )r   r1   returnstr)r:   r]   r$   r]   r;   r]   r\   ztuple[str, str])r)      )r;   r]   r:   r]   rC   r1   r\   r]   )rI   r]   r;   r]   r\   bool)rX   r]   rY   r]   r\   z
str | None)
__future__r   r2   r7   rS   rP   r   r,   r   r5   listr	   rT   altsepr   __annotations__r   r@   rF   rK   r[   r   r   r
   <module>rd      s    "   	   M
"  FFBGGNN+ i 
F6Dt ?A")")")8;")")JS,"r   