§
    HŠtjñ  ã                   óÒ   — d Z ddlZ ej        e¦  «        ZddlmZmZ ddlm	Z	 ddl
mZmZmZ ddlmZ ddlmc mZ g ZdZ G d„ d	ej        ej        ej        ej        ¦  «        ZdS )
zpasslib.handlers.sha1_crypt
é    N)Ú
safe_cryptÚ
test_crypt)Úh64)ÚuÚunicodeÚirange)Úcompile_hmacó    c                   óÊ   — e Zd ZdZd ZdZ ed¦  «        ZdZe	j
        ZdZdZe	j
        ZdZdZd	Zd
Zed„ ¦   «         Zdd„ZdZed„ ¦   «         Zd„ Zed„ ¦   «         Zd„ Zg d¢ZdS )Ú
sha1_crypta&  This class implements the SHA1-Crypt password hash, and follows the :ref:`password-hash-api`.

    It supports a variable-length salt, and a variable number of rounds.

    The :meth:`~passlib.ifc.PasswordHash.using` method accepts the following optional keywords:

    :type salt: str
    :param salt:
        Optional salt string.
        If not specified, an 8 character one will be autogenerated (this is recommended).
        If specified, it must be 0-64 characters, drawn from the regexp range ``[./0-9A-Za-z]``.

    :type salt_size: int
    :param salt_size:
        Optional number of bytes to use when autogenerating new salts.
        Defaults to 8 bytes, but can be any value between 0 and 64.

    :type rounds: int
    :param rounds:
        Optional number of rounds to use.
        Defaults to 480000, must be between 1 and 4294967295, inclusive.

    :type relaxed: bool
    :param relaxed:
        By default, providing an invalid value for one of the other
        keywords will result in a :exc:`ValueError`. If ``relaxed=True``,
        and the error can be corrected, a :exc:`~passlib.exc.PasslibHashWarning`
        will be issued instead. Correctable errors include ``rounds``
        that are too small or too large, and ``salt`` strings that are too long.

        .. versionadded:: 1.6
    )ÚsaltÚ	salt_sizeÚroundsz$sha1$é   é   é@   i S é   l   ÿÿ Úlinearc                 ó^   — t          j        || j        | ¬¦  «        \  }}} | |||¬¦  «        S )N)Úhandler)r   r   Úchecksum)ÚuhÚ	parse_mc3Úident)ÚclsÚhashr   r   Úchks        úY/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/passlib/handlers/sha1_crypt.pyÚfrom_stringzsha1_crypt.from_stringS   s8   € åœL¨¨s¬yÀ#ÐFÑFÔFÑˆ��cØˆs˜& t°cÐ:Ñ:Ô:Ð:ó    Fc                 ód   — |rd n| j         }t          j        | j        | j        | j        |¦  «        S )N)r   r   Ú
render_mc3r   r   r   )ÚselfÚconfigr   s      r   Ú	to_stringzsha1_crypt.to_stringX   s.   € ØÐ/ˆdˆd $¤-ˆÝŒ}˜TœZ¨¬°d´iÀÑEÔEÐEr    )Úos_cryptÚbuiltinc                 ó^   — t          dd¦  «        r|                      | j        ¦  «         dS dS )NÚtestz-$sha1$1$Wq3GL2Vp$C8U25GvfHS8qGHimExLaiSFlGkAeTF)r   Ú_set_calc_checksum_backendÚ_calc_checksum_os_crypt©r   s    r   Ú_load_backend_os_cryptz!sha1_crypt._load_backend_os_cryptd   s<   € å�fð -ñ .ô .ð 	à×*Ò*¨3Ô+FÑGÔGÐGØ�4à�5r    c                 óB  — |                       d¬¦  «        }t          ||¦  «        }|€|                      |¦  «        S |                     |¦  «        r#t	          |¦  «        t	          |¦  «        dz   k    r!t
          j                             | ||¦  «        ‚|dd …         S )NT)r$   é   iäÿÿÿ)r%   r   Ú_calc_checksum_builtinÚ
startswithÚlenr   ÚexcÚCryptBackendError)r#   Úsecretr$   r   s       r   r+   z"sha1_crypt._calc_checksum_os_cryptm   s–   € Ø—’ t�Ñ,Ô,ˆÝ˜& &Ñ)Ô)ˆØˆ<ð ×.Ò.¨vÑ6Ô6Ð6Ø�Š˜vÑ&Ô&ð 	?­#¨d©)¬)µs¸6±{´{ÀRÑ7GÒ*GÐ*GÝ”&×*Ò*¨4°¸Ñ>Ô>Ð>Ø�C�D�DŒzÐr    c                 ó:   — |                       | j        ¦  «         dS )NT)r*   r0   r,   s    r   Ú_load_backend_builtinz sha1_crypt._load_backend_builtin{   s   € à×&Ò& sÔ'AÑBÔBÐBØˆtr    c                 óÀ  — t          |t          ¦  «        r|                     d¦  «        }t          |v rt          j                             | ¦  «        ‚| j        }t          d¦  «        | j	        |fz                       d¦  «        }t          d|¦  «        }t          |¦  «        D ]} ||¦  «        }Œt          j        || j        ¦  «                             d¦  «        S )Nzutf-8z
%s$sha1$%sÚasciiÚsha1)Ú
isinstancer   ÚencodeÚ_BNULLr   r3   ÚNullPasswordErrorr   r   r   r	   r   r   Úencode_transposed_bytesÚ_chk_offsetsÚdecode)r#   r5   r   ÚresultÚ
keyed_hmacÚ_s         r   r0   z!sha1_crypt._calc_checksum_builtin€   sË   € Ý�f�gÑ&Ô&ð 	,Ø—]’] 7Ñ+Ô+ˆFÝ�VÐÐÝ”&×*Ò*¨4Ñ0Ô0Ð0Ø”ˆå�L‘/”/ T¤Y°Ð$7Ñ7×?Ò?ÀÑHÔHˆå! &¨&Ñ1Ô1ˆ
Ý˜‘”ð 	(ð 	(ˆAØ�Z Ñ'Ô'ˆFˆFÝÔ*¨6°4Ô3DÑEÔE×LÒLÈWÑUÔUÐUr    )é   r   r   é   é   é   r   é   é   é   é
   é	   é   é   é   é   é   é   r   é   é   N)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚnameÚsetting_kwdsr   r   Úchecksum_sizer   ÚHASH64_CHARSÚchecksum_charsÚdefault_salt_sizeÚmax_salt_sizeÚ
salt_charsÚdefault_roundsÚ
min_roundsÚ
max_roundsÚrounds_costÚclassmethodr   r%   Úbackendsr-   r+   r7   r0   r@   © r    r   r   r      s
  € € € € € ðð ðJ €DØ2€LØˆAˆh‰KŒK€EØ€MØ”_€Nð ÐØ€MØ”€Jð €NØ€JØ€JØ€Kð
 ð;ð ;ñ „[ð;ðFð Fð Fð Fð '€Hð
 ðð ñ „[ðð	ð 	ð 	ð ðð ñ „[ððVð Vð Vðð ð €L€L€Lr    r   )rY   ÚloggingÚ	getLoggerrV   ÚlogÚpasslib.utilsr   r   Úpasslib.utils.binaryr   Úpasslib.utils.compatr   r   r   Úpasslib.crypto.digestr	   Úpasslib.utils.handlersÚutilsÚhandlersr   Ú__all__r=   ÚHasManyBackendsÚ	HasRoundsÚHasSaltÚGenericHandlerr   rh   r    r   ú<module>rx      sÿ   ððð ð €€€Ð'�gÔ'¨Ñ1Ô1�ð 1Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø $Ð $Ð $Ð $Ð $Ð $Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø .Ð .Ð .Ð .Ð .Ð .Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ð #ð€ð
 
€ð}ð }ð }ð }ð }�Ô# R¤\°2´:¸rÔ?Pñ }ô }ð }ð }ð }r    