o
    _6d                     @   s   d Z ddlZe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  mZ g ZdZG d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                   @   s   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d ZdddZdZedd Zdd Zedd Zd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
    )saltZ	salt_sizeroundsz$sha1$      @   i S    l    Zlinearc                 C   s&   t j|| j| d\}}}| |||dS )N)handler)r   r   checksum)uhZ	parse_mc3ident)clshashr   r   chk r   rC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\site-packages\passlib/handlers/sha1_crypt.pyfrom_stringS   s   zsha1_crypt.from_stringFc                 C   s$   |rd n| j }t| j| j| j|S )N)r   r   Z
render_mc3r   r   r   )selfconfigr   r   r   r   	to_stringX   s   zsha1_crypt.to_string)Zos_cryptbuiltinc                 C   s   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   r   r   r   _load_backend_os_cryptd   s   
z!sha1_crypt._load_backend_os_cryptc                 C   sb   | j dd}t||}|d u r| |S ||r#t|t|d kr+tj| |||dd  S )NT)r      i)r   r   _calc_checksum_builtin
startswithlenr   excZCryptBackendError)r   secretr   r   r   r   r   r!   m   s   

z"sha1_crypt._calc_checksum_os_cryptc                 C   s   |  | j dS )NT)r    r%   r"   r   r   r   _load_backend_builtin{   s   z sha1_crypt._load_backend_builtinc                 C   sz   t |tr
|d}t|v rtj| | j}td| j	|f d}t
d|}t|D ]}||}q,t|| jdS )Nzutf-8z
%s$sha1$%sasciisha1)
isinstancer   encode_BNULLr   r(   ZNullPasswordErrorr   r   r   r   r   r   Zencode_transposed_bytes_chk_offsetsdecode)r   r)   r   resultZ
keyed_hmac_r   r   r   r%      s   



z!sha1_crypt._calc_checksum_builtin)   r   r            r            
   	                     r         N)F)__name__
__module____qualname____doc__nameZsetting_kwdsr   r   Zchecksum_sizer   ZHASH64_CHARSZchecksum_charsZdefault_salt_sizeZmax_salt_sizeZ
salt_charsZdefault_roundsZ
min_rounds
max_roundsZrounds_costclassmethodr   r   backendsr#   r!   r*   r%   r0   r   r   r   r   r
      s2    %



r
   )rH   logging	getLoggerrE   logZpasslib.utilsr   r   Zpasslib.utils.binaryr   Zpasslib.utils.compatr   r   r   Zpasslib.crypto.digestr   Zpasslib.utils.handlersutilshandlersr   __all__r/   ZHasManyBackendsZ	HasRoundsZHasSaltZGenericHandlerr
   r   r   r   r   <module>   s    "