Ë
    £2Úi®  ã                  óä   — 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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     úH/var/www/html/acx/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—>‘>¤*×-ÑEùs   ‚#%)Ú
ValueErrorÚjoinÚrange)Úlengths    r
   Úgen_saltr      s.   € à�‚{ÜÐ:Ó;Ð;à�7‰7ÑE´u¸V³}ÔEÓEÐEó    c                ó‚  — | 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	        d| › d�«      ‚# t        $ r t	        d«      d ‚w xY w)Nú: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Invalid hash method 'z'.)ÚsplitÚencodeÚmapÚintr   Úhashlibr   ÚhexÚlenÚDEFAULT_PBKDF2_ITERATIONSÚpbkdf2_hmac)Úmethodr!   ÚpasswordÚargsr"   r#   r$   r%   Úlen_argsÚ	hash_nameÚ
iterationss              r
   Ú_hash_internalr8      s†  € Ø—L‘L Ó%€M€FˆTØ�;‰;�wÓ€DØ�‰˜wÓ'€Hà�ÒÙØˆAØˆAØ‰AðJÜœc 4›.‘��1�að �q‘˜1‘˜q‘ˆä�N‰N˜8¨$°!°q¸AÀfÔM×QÑQÓSØ�a�S˜˜!˜˜A˜a˜SÐ!ð
ð 	
ð 
�8Ò	Ü�t“9ˆà�qŠ=Ø ˆIÜ2‰JØ˜Š]Ø˜Q™ˆIÜ2‰JØ˜Š]Ø˜Q™ˆIÜ˜T !™W›‰JäÐ:Ó;Ð;ô ×Ñ 	¨8°T¸:ÓF×JÑJÓLØ�i�[  * Ð.ð
ð 	
ô
 Ð0°°¸Ð;Ó<Ð<øô9 ò JÜ Ð!>Ó?ÀTÐIðJús   ÁD( Ä(D>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``, the default. The parameters are ``n``, ``r``, and ``p``, the default
        is ``scrypt:32768:8:1``. See :func:`hashlib.scrypt`.
    -   ``pbkdf2``, less secure. 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   r8   )r3   r2   Úsalt_lengthr!   ÚhÚactual_methods         r
   Úgenerate_password_hashr>   E   s8   € ô> �KÓ €DÜ% f¨d°HÓ=Ñ€A€}Øˆ_˜A˜d˜V 1 Q CÐ(Ð(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.
    r:   r(   Fr   )r)   r   ÚhmacÚcompare_digestr8   )Úpwhashr3   r2   r!   Úhashvals        r
   Úcheck_password_hashrD   i   sU   € ðØ &§¡¨S°!Ó 4Ñˆ��gô ×Ñœ~¨f°d¸HÓEÀaÑ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   øè ø€ Ò8 C��x”Ñ8ùs   ƒz..z../N)
Ú	posixpathÚnormpathÚanyr   ÚosÚpathÚisabsÚ
startswithÚappendr   )Ú	directoryÚ	pathnamesÚpartsrH   s      @r
   Ú	safe_joinrT      s’   ø€ ñ ð ˆ	àˆK€Eàò ˆØ�rŠ>Ü ×)Ñ)¨(Ó3ˆHô Ó8¬<Ô8Ô8Ü�w‰w�}‰}˜XÔ&Ø˜4ÒØ×"Ñ" 5Ô)áà�‰�XÕðô �>‰>˜5Ð!Ð!r   )r   r,   ÚreturnÚstr)r2   rV   r!   rV   r3   rV   rU   ztuple[str, str])r   é   )r3   rV   r2   rV   r;   r,   rU   rV   )rB   rV   r3   rV   rU   Úbool)rQ   rV   rR   rV   rU   z
str | None)Ú
__future__r   r-   r@   rL   rI   r   r   r0   Úlistr	   rM   Úaltsepr   Ú__annotations__r   r8   r>   rD   rT   r   r   r
   ú<module>r]      s”   ðÞ "ã Û Û 	Û Û àM€
Ø"Ð áñ Ø—F‘F˜BŸG™GŸN™NÐ+ôó €ˆió ó
Fó)=ðZ ?Að!)Øð!)Øð!)Ø8;ð!)àó!)óHSô,"r   