ó
    pñ:iH  ã                  ó8  • % S SK Jr  S SKrS SKrS SKrS SKrS SKrSrSr\	" S \R                  \R                  R                  4 5       5      rS\S'   SS	S
S1S \" S5       5       kS \" S5       5       krSS jrSS jr S       SS jjrSS jrSS jrg)é    )ÚannotationsNÚ>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789i@B c              #  ó>   #   • U  H  oc  M  US:w  d  M  Uv •  M     g 7f)NÚ/© )Ú.0Úseps     ÚT/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/werkzeug/security.pyÚ	<genexpr>r      s   é € ð Ú+ˆCƒCÀ3È#Á:‡C�CÒ+ùs   ‚Œ”	z	list[str]Ú_os_alt_sepsÚCONÚPRNÚAUXÚNULc              #  ó,   #   • U  H
  nS U 3v •  M     g7f)ÚCOMNr   ©r   Úis     r
   r   r      ó   é € Ð#š�AˆˆAˆ3…išùó   ‚é
   c              #  ó,   #   • U  H
  nS U 3v •  M     g7f)ÚLPTNr   r   s     r
   r   r      r   r   c                óf   • U S::  a  [        S5      eSR                  S [        U 5       5       5      $ )zAGenerate a random string of SALT_CHARS with specified ``length``.r   zSalt length must be at least 1.Ú c              3  óV   #   • U  H  n[         R                  " [        5      v •  M!     g 7f©N)ÚsecretsÚchoiceÚ
SALT_CHARS)r   Ú_s     r
   r   Úgen_salt.<locals>.<genexpr>   s   é € ÐE²}°!”7—>’>¤*×-Ð-²}ùs   ‚'))Ú
ValueErrorÚjoinÚrange)Úlengths    r
   Úgen_saltr'      s.   € à�ƒ{ÜÐ:Ó;Ð;à�7‰7ÑE´u¸V´}ÓEÓEÐEó    c           	     ó„  • U R                  S5      tpUR                  5       nUR                  5       nU S:X  a\  U(       d  SnSnSnO [        [        U5      u  pgnSU-  U-  U-  n	[
        R                  " XTXgX‰S9R                  5       S	U SU SU 34$ U S
:X  a~  [        U5      n
U
S:X  a	  Sn[        nO7U
S:X  a  US   n[        nO%U
S:X  a  US   n[        US   5      nO[	        S5      e[
        R                  " XµXL5      R                  5       SU SU 34$ [	        SU  S35      e! [         a    [	        S5      S ef = f)NÚ:Ú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ÚargsÚ
salt_bytesÚpassword_bytesr0   r1   r2   r3   Úlen_argsÚ	hash_nameÚ
iterationss                r
   Ú_hash_internalrH   !   sv  € Ø—L‘L Ó%€M€FØ—‘“€JØ—_‘_Ó&€Nà�ÓÞØˆAØˆAØ‰AðJÜœc 4›.‘��að �q‘˜1‘˜q‘ˆä�NŠNØ°1¸Qñç‰c‹eØ�a�S˜˜!˜˜A˜a˜SÐ!ð	
ð 	
ð 
�8Ó	Ü�t“9ˆà�q‹=Ø ˆIÜ2‰JØ˜‹]Ø˜Q™ˆIÜ2‰JØ˜‹]Ø˜Q™ˆIÜ˜T !™W›‰JäÐ:Ó;Ð;ô ×ÒØ¨:óç‰c‹eØ�i�[  * Ð.ð	
ð 	
ô Ð0°°¸Ð;Ó<Ð<øôA ó JÜ Ð!>Ó?ÀTÐIðJús   ÁD( Ä(D?c                óH   • [        U5      n[        XU 5      u  pEU SU SU 3$ )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:: 3.1
    The default iterations for pbkdf2 was increased to 1,000,000.

.. 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'   rH   )rA   r@   Úsalt_lengthr/   ÚhÚactual_methods         r
   Úgenerate_password_hashrN   Q   s5   € ôD �KÓ €DÜ% f°HÓ=Ñ€AØˆ_˜A˜d˜V 1 Q CÐ(Ð(r(   c                ó–   •  U R                  SS5      u  p#n[        R                  " [	        X#U5      S   U5      $ ! [         a     gf = f)a  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.
rJ   r6   Fr   )r7   r#   ÚhmacÚcompare_digestrH   )ÚpwhashrA   r@   r/   Úhashvals        r
   Úcheck_password_hashrT   x   sQ   € ðØ &§¡¨S°!Ó 4Ñˆ�gô ×Òœ~¨f¸HÓEÀaÑHÈ'ÓRÐRøô ó Ùðús   ‚; »
AÁAc                ó2  ^• U (       d  Sn U /nU Hò  mTS:w  a  [         R                  " T5      m[        U4S j[         5       5      (       d¢  [        R
                  S:X  a8  [        R                  R                  T5      S   R                  5       [        ;   dV  [        R                  R                  T5      (       d2  TR                  S5      (       d  TS:X  d  TR                  S5      (       a    g	UR                  T5        Mô     [         R                  " U6 $ )
ai  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``.

.. versionchanged:: 3.1.4
    Special device names are disallowed on Windows.
Ú.r   c              3  ó,   >#   • U  H	  oT;   v •  M     g 7fr   r   )r   r	   Úfilenames     €r
   r   Úsafe_join.<locals>.<genexpr>¦   s   øé € Ð8ª< C�x–ª<ùs   ƒÚntr   r   z..z../N)Ú	posixpathÚnormpathÚanyr   ÚosÚnameÚpathÚsplitextÚupperÚ_windows_device_filesÚisabsÚ
startswithÚappendr$   )Ú	directoryÚ	pathnamesÚpartsrX   s      @r
   Ú	safe_joinrj   Ž   sØ   ø€ ö ð ˆ	àˆK€EãˆØ�r‹>Ü ×)Ò)¨(Ó3ˆHô Ô8­<Ó8×8Ñ8ä—‘˜4“Ü—G‘G×$Ñ$ XÓ.¨qÑ1×7Ñ7Ó9Ô=RÓRä�w‰w�}‰}˜X×&Ñ&à×"Ñ" 3×'Ñ'Ø˜4ÓØ×"Ñ" 5×)Ñ)áà�‰�XÖñ% ô( �>Š>˜5Ð!Ð!r(   )r&   r:   ÚreturnÚstr)r@   rl   r/   rl   rA   rl   rk   ztuple[str, str])r+   é   )rA   rl   r@   rl   rK   r:   rk   rl   )rR   rl   rA   rl   rk   Úbool)rg   rl   rh   rl   rk   z
str | None)Ú
__future__r   r;   rP   r^   r[   r   r    r>   Úlistr	   r`   Úaltsepr   Ú__annotations__r%   rc   r'   rH   rN   rT   rj   r   r(   r
   Ú<module>rs      sÐ   ðÞ "ã Û Û 	Û Û àM€
Ø%Ð áñ Ø—F‘F˜BŸG™GŸN™NÑ+óó €ˆió ð 
Ø	Ø	Ø	ð	ñ
 $™˜rœÓ#ðñ $™˜rœÓ#ðÐ ôFô-=ðb ?Að$)Øð$)Øð$)Ø8;ð$)àõ$)ôNSõ,'"r(   