o
    jTteC                     @   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 ddl	m
Z
 G dd deZddd	d
dZe ZdZeefddZdd ZdddZdS )z3
Django's standard crypto functions and utilities.
    N)settings)RemovedInDjango40Warning)force_bytesc                   @   s   e Zd ZdZdS )InvalidAlgorithmz&Algorithm is not supported by hashlib.N)__name__
__module____qualname____doc__ r
   r
   _/var/www/social.2tendo.club/virtuCedar/venv/lib/python3.10/site-packages/django/utils/crypto.pyr      s    r   sha1)	algorithmc             
   C   sx   |du rt j}t| } t|}ztt|}W n ty) } ztd| |d}~ww || |  }tj	|t||dS )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keyr
   r
   r   salted_hmac   s$   r   >abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789c                    s4   | t u rtdt d} d fddt| D S )aG  
    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
    z.Not providing a length argument is deprecated.    c                 3   s    | ]}t  V  qd S N)secretschoice).0iallowed_charsr
   r   	<genexpr>H   s    z$get_random_string.<locals>.<genexpr>)NOT_PROVIDEDwarningswarnr   joinrange)lengthr'   r
   r&   r   get_random_string7   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_compareK   s   r3   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   sha256r   pbkdf2_hmacname)passwordsalt
iterationsdklenr   r
   r
   r   pbkdf2P   s   r;   r!   )r   N)r	   r   r   r"   r*   django.confr   django.utils.deprecationr   django.utils.encodingr   
ValueErrorr   r   objectr)   RANDOM_STRING_CHARSr/   r3   r;   r
   r
   r
   r   <module>   s    