o
    uvXj  ã                   @   s¤   d Z ddlZddlZddlZddlZddlmZ ddlmZ ze 	¡ ZdZ
W n ey:   ddlZe d¡ dZ
Y nw ddd	„Z	
	ddd„Zdd„ Zddd„ZdS )z3
Django's standard crypto functions and utilities.
é    N)Úsettings)Úforce_bytesTzjA secure pseudo-random number generator is not available on your system. Falling back to Mersenne Twister.Fc                 C   sF   |du rt j}t| ƒ} t|ƒ}t | | ¡ ¡ }tj|t|ƒtjd�S )zÕ
    Return the HMAC-SHA1 of 'value', using a key generated from key_salt and a
    secret (which defaults to settings.SECRET_KEY).

    A different key_salt should be passed in for every application of HMAC.
    N)ÚmsgÚ	digestmod)r   Ú
SECRET_KEYr   ÚhashlibÚsha1ÚdigestÚhmacÚnew)Úkey_saltÚvalueÚsecretÚkey© r   úP/var/www/html/myproject/venv/lib/python3.10/site-packages/django/utils/crypto.pyÚsalted_hmac   s   r   é   Ú>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789c                    sL   t st t dt ¡ t ¡ tjf  	¡ ¡ 
¡ ¡ d ‡ fdd„t| ƒD ƒ¡S )z³
    Return a securely generated random string.

    The default length of 12 with the a-z, A-Z, 0-9 character set returns
    a 71-bit value. log_2((26+26+10)^12) =~ 71 bits
    z%s%s%sÚ c                 3   s   � | ]}t  ˆ ¡V  qd S ©N)ÚrandomÚchoice)Ú.0Úi©Úallowed_charsr   r   Ú	<genexpr>E   s   € z$get_random_string.<locals>.<genexpr>)Úusing_sysrandomr   Úseedr   Úsha256ÚgetstateÚtimer   r   Úencoder	   ÚjoinÚrange)Úlengthr   r   r   r   Úget_random_string0   s   	ÿýr'   c                 C   s   t  t| ƒt|ƒ¡S )z:Return True if the two strings are equal, False otherwise.)r
   Úcompare_digestr   )Úval1Úval2r   r   r   Úconstant_time_compareH   s   r+   c                 C   s<   |du rt j}|p
d}t| ƒ} t|ƒ}t  |ƒ j| |||¡S )z)Return the hash of password using pbkdf2.N)r   r    r   Úpbkdf2_hmacÚname)ÚpasswordÚsaltÚ
iterationsÚdklenr	   r   r   r   Úpbkdf2M   s   r2   r   )r   r   )r   N)Ú__doc__r   r
   r   r"   Údjango.confr   Údjango.utils.encodingr   ÚSystemRandomr   ÚNotImplementedErrorÚwarningsÚwarnr   r'   r+   r2   r   r   r   r   Ú<module>   s*    
ü

ÿ