+
    ‡)Ùjf
  ã                   ó‚   € R t ^ RIt^ RIt^ RIt^ RI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)Ú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   ó    ÚL/var/www/eggtrainer/venv/lib/python3.14/site-packages/django/utils/crypto.pyr   r      s   † Ù0ãr   r   Ú	algorithmÚsha1c               ó@  € 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.

A different key_salt should be passed in for every application of HMAC.
Nz6%r is not an algorithm accepted by the hashlib module.)ÚmsgÚ	digestmod)
r   Ú
SECRET_KEYr   ÚgetattrÚhashlibÚAttributeErrorr   ÚdigestÚhmacÚnew)Úkey_saltÚvalueÚsecretr   ÚhasherÚeÚkeys   &&&$   r   Úsalted_hmacr!      s•   € ð ‚~Ü×$Ñ$ˆä˜8Ó$€HÜ˜Ó €FðÜœ )Ó,ˆñ �Õ"Ó
#×
*Ñ
*Ó
,€Cô
 �8Š8�Cœ[¨Ó/¸6ÔBÐBøô ô ÜØDÀyÕPó
àð	ûðús   ¬A: Á:BÂBÂBÚ>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>>   s   øé € ÐH¹-°Q”7—>’> -×0Ð0»-ùs   ƒ#&)ÚjoinÚrange)Úlengthr+   s   &fr   Úget_random_stringr1   3   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_comparer6   A   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   Úpbkdf2r?   F   sJ   € à‚~Ü—‘ˆØ�MˆM�T€EÜ˜8Ó$€HÜ�tÓ€DÜ×Ò™v›xŸ}™}¨h¸jÓPÐPr   r&   )é    N)r   r   r   r'   Údjango.confr   Údjango.utils.encodingr   Ú
ValueErrorr   r!   ÚRANDOM_STRING_CHARSr1   r6   r?   r   r   r   Ú<module>rE      sV   ðñó Û Û å  Ý -ô	�zô 	ñC¸6õ Cð: WÐ ð -@ô IòHö
Qr   