+
    S<Âj  ã                   óš   € R t ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIHtH	t	 ^ RI
Ht  ! R R]4      tRRR/R lltR	t]3R
 ltR tRR ltR# )z3
Django's standard crypto functions and utilities.
N)Úsettings)ÚRemovedInDjango70WarningÚdjango_file_prefixes)Úforce_bytesc                   ó   € ] tR t^tRtRtR# )ÚInvalidAlgorithmz&Algorithm is not supported by hashlib.© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    ÚS/var/www/html/data_capital/venv/lib/python3.14/site-packages/django/utils/crypto.pyr   r      s   † Ù0ãr   r   Ú	algorithmc               ó–  € Vf(   \         P                  ! R\        \        4       R7       RpVf   \        P
                  p\        V 4      p \        V4      p \        \        V4      pT! Y,           4      P                  4       p\        P                  ! T\        T4      TR7      #   \         d   p\        RT,          4      ThRp?ii ; i)a§  
Return the HMAC of 'value', using a key generated from key_salt and a
secret (which defaults to settings.SECRET_KEY). Default algorithm is SHA1,
but any algorithm name supported by hashlib can be passed.

Removed in Django70Warning: The default algorithm will change to SHA256
in Django 7.0, so provide an explicit algorithm to silence the warning.

A different key_salt should be passed in for every application of HMAC.
NzšThe default argument for algorithm in salted_hmac() will change from 'sha1' to 'sha256' in Django 7.0. Pass an explicit algorithm to silence this warning.)ÚcategoryÚskip_file_prefixesÚsha1z6%r is not an algorithm accepted by the hashlib module.)ÚmsgÚ	digestmod)ÚwarningsÚwarnr   r   r   Ú
SECRET_KEYr   ÚgetattrÚhashlibÚAttributeErrorr   ÚdigestÚhmacÚnew)Úkey_saltÚvalueÚsecretr   ÚhasherÚeÚkeys   &&&$   r   Úsalted_hmacr'      s¾   € ð ÒÜ�Šð1ô .Ü3Ó5õ	
ð ˆ	Ø‚~Ü×$Ñ$ˆä˜8Ó$€HÜ˜Ó €FðÜœ )Ó,ˆñ �Õ"Ó
#×
*Ñ
*Ó
,€Cô
 �8Š8�Cœ[¨Ó/¸6ÔBÐBøô ô ÜØDÀyÕPó
àð	ûðús   ÁB% Â%CÂ0CÃCÚ>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789c                óL   a€ RP                  V3R l\        V 4       4       4      # )a+  
Return a securely generated random string.

The bit length of the returned value can be calculated with the formula:
    log_2(len(allowed_chars)^length)

For example, with default `allowed_chars` (26+26+10), this gives:
  * length: 12, bit length =~ 71 bits
  * length: 22, bit length =~ 131 bits
Ú c              3   óP   <"  € T F  p\         P                  ! S4      x € K  	  R # 5i©N)ÚsecretsÚchoice)Ú.0ÚiÚallowed_charss   & €r   Ú	<genexpr>Ú$get_random_string.<locals>.<genexpr>M   s   øé € ÐH¹-°Q”7—>’> -×0Ð0»-ùs   ƒ#&)ÚjoinÚrange)Úlengthr1   s   &fr   Úget_random_stringr7   B   s   ø€ ð �7‰7ÔH¼%À¼-ÓHÓHÐHr   c                óT   € \         P                  ! \        V 4      \        V4      4      # )z:Return True if the two strings are equal, False otherwise.)r-   Úcompare_digestr   )Úval1Úval2s   &&r   Úconstant_time_comparer<   P   s   € ä×!Ò!¤+¨dÓ"3´[ÀÓ5FÓGÐGr   c                ó¼   € Vf   \         P                  pT;'       g    Rp\        V 4      p \        V4      p\         P                  ! V! 4       P                  WW#4      # )z)Return the hash of password using pbkdf2.N)r   Úsha256r   Úpbkdf2_hmacÚname)ÚpasswordÚsaltÚ
iterationsÚdklenr   s   &&&&&r   Úpbkdf2rE   U   sJ   € à‚~Ü—‘ˆØ�MˆM�T€EÜ˜8Ó$€HÜ�tÓ€DÜ×Ò™v›xŸ}™}¨h¸jÓPÐPr   r,   )é    N)r   r   r   r-   r   Údjango.confr   Údjango.utils.deprecationr   r   Údjango.utils.encodingr   Ú
ValueErrorr   r'   ÚRANDOM_STRING_CHARSr7   r<   rE   r   r   r   Ú<module>rL      s]   ðñó Û Û Û å  ß SÝ -ô	�zô 	ñ&C¸4õ &CðR WÐ ð -@ô IòHö
Qr   