
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	 d
  Z	 d d   Z
 d d d d  Z d S)z3
Django's standard crypto functions and utilities.
    N)settings)force_bytesc             C   sh   | d k r t  j } t |   }  t |  } t j |  |  j   } t j | d t |  d t j 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   Z
SECRET_KEYr   hashlibsha1digesthmacnew)Zkey_saltvalueZsecretkey r   5/tmp/pip-build-8lau8j11/django/django/utils/crypto.pysalted_hmac   s    	r      Z>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   compare_digestr   )Zval1Zval2r   r   r   constant_time_compare1   s    r   c             C   sX   | 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"   )__doc__r   r	   r   Zdjango.confr   Zdjango.utils.encodingr   r   r   r   r"   r   r   r   r   <module>   s   