B
    ª0H[  ã               @   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 ye 	¡ ZdZ
W n* ek
rv   ddlZe d¡ dZ
Y nX 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k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)Zkey_saltÚvalueZsecretÚkey© r   úWC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-6bm3nxem\django\django\utils\crypto.pyÚsalted_hmac   s    r   é   Ú>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789c                sL   t s0t 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   )Zval1Zval2r   r   r   Úconstant_time_compareH   s    r%   c             C   s<   |dkrt j}|sd}t| ƒ} t|ƒ}t  |ƒ j| |||¡S )z)Return the hash of password using pbkdf2.N)r   r   r   Úpbkdf2_hmacÚname)ÚpasswordZsaltZ
iterationsZdklenr	   r   r   r   Úpbkdf2M   s    r)   )N)r   r   )r   N)Ú__doc__r   r
   r   r   Zdjango.confr   Zdjango.utils.encodingr   ÚSystemRandomr   ÚNotImplementedErrorÚwarningsÚwarnr   r#   r%   r)   r   r   r   r   Ú<module>   s$   


 
