§
    ¤”jf
  ã                   ó€   — 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__© ó    úb/var/www/finuniver-perm.ru/html/portfolio/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ðÝ� )Ñ,Ô,ˆˆøÝð ð ð ÝØDÀyÑPñ
ô 
àð	øøøøðøøøð ˆ&�˜FÑ"Ñ
#Ô
#×
*Ò
*Ñ
,Ô
,€Cõ
 Œ8�C�[¨Ñ/Ô/¸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ÐH°Q•7”> -Ñ0Ô0ÐHÐHÐHÐHÐHÐHr   )ÚjoinÚrange)Úlengthr*   s    `r   Úget_random_stringr/   3   s2   ø€ ð �7Š7Ð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µ[ÀÑ5FÔ5FÑ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   € à€~Ý”ˆØˆM�T€EÝ˜8Ñ$Ô$€HÝ�tÑÔ€DÝÔ˜v˜v™xœxœ}¨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   