
    Evgf
                         d Z ddlZddlZddlZddlmZ ddlmZ  G d de          Z	dddd	Z
d
ZefdZd ZddZdS )z3
Django's standard crypto functions and utilities.
    N)settings)force_bytesc                       e Zd ZdZdS )InvalidAlgorithmz&Algorithm is not supported by hashlib.N)__name__
__module____qualname____doc__     P/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/utils/crypto.pyr   r      s        00Dr   r   sha1)	algorithmc                Z   |t           j        }t          |           } t          |          }	 t          t          |          }n%# t
          $ r}t          d|z            |d}~ww xY w || |z                                             }t          j	        |t          |          |          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keys          r   salted_hmacr       s     ~$8$$H  F),,   DyP
 
	 &F"
#
#
*
*
,
,C
 8C[//6BBBBs   A 
A&A!!A&>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789c                 `    d                     f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
     c              3   @   K   | ]}t          j                  V  d S N)secretschoice).0iallowed_charss     r   	<genexpr>z$get_random_string.<locals>.<genexpr>>   s-      HHQ7>-00HHHHHHr   )joinrange)lengthr*   s    `r   get_random_stringr/   3   s2     77HHHH%--HHHHHHr   c                 `    t          j        t          |           t          |                    S )z:Return True if the two strings are equal, False otherwise.)r&   compare_digestr   )val1val2s     r   constant_time_comparer4   A   s%    !+d"3"3[5F5FGGGr   c                     |t           j        }|pd}t          |           } t          |          }t          j         |            j        | |||          S )z)Return the hash of password using pbkdf2.N)r   sha256r   pbkdf2_hmacname)passwordsalt
iterationsdklenr   s        r   pbkdf2r=   F   sR    ~MTE8$$HtDvvxx}hj%PPPr   r%   )r   N)r
   r   r   r&   django.confr   django.utils.encodingr   
ValueErrorr   r    RANDOM_STRING_CHARSr/   r4   r=   r   r   r   <module>rB      s                    - - - - - -	 	 	 	 	z 	 	 	C6 C C C C C: W  -@ I I I IH H H
Q Q Q Q Q Qr   