3
v^h                 @   s^   d Z ddlZddlZddlZddlmZ ddlmZ 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_bytesc             C   sF   |dkrt j}t| } t|}tj| | j }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)msgZ	digestmod)r   
SECRET_KEYr   hashlibsha1digesthmacnew)Zkey_saltvalueZsecretkey r   7/usr/lib/python3.6/site-packages/django/utils/crypto.pysalted_hmac   s    r      >abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789c                s   dj  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
     c             3   s   | ]}t j V  qd S )N)secretschoice).0i)allowed_charsr   r   	<genexpr>.   s    z$get_random_string.<locals>.<genexpr>)joinrange)lengthr   r   )r   r   get_random_string%   s    	r   c             C   s   t jt| t|S )z:Return True if the two strings are equal, False otherwise.)r   Zcompare_digestr   )Zval1Zval2r   r   r   constant_time_compare1   s    r   c             C   s<   |dkrt j}|pd}t| } t|}t j| j| |||S )z)Return the hash of password using pbkdf2.N)r   sha256r   pbkdf2_hmacname)passwordZsaltZ
iterationsZdklenr   r   r   r   pbkdf26   s    r"   )N)r   r   )r   N)__doc__r   r	   r   django.confr   django.utils.encodingr   r   r   r   r"   r   r   r   r   <module>   s   
 
