o
    5h                     @   s   d Z ddlZddlZeeZddlmZmZm	Z	m
Z
 ddlmZmZ ddlm  mZ ddlmZ g dZG dd dejZedd	fd
dZedddZeddddZedddZedZedZG dd dejZdS )z.passlib.handlers.digests - plain hash digests
    N)to_native_strto_bytesrender_bytesconsteq)unicodestr_to_uascii)lookup_hash)create_hex_hashhex_md4hex_md5hex_sha1
hex_sha256
hex_sha512c                   @   s6   e Zd ZdZdZdZejZdZ	e
dd Zdd ZdS )HexDigestHashzTthis provides a template for supporting passwords stored as plain hexadecimal hashesNTc                 C   s   |  S N)lowerclshash r   l/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/passlib/handlers/digests.py
_norm_hash+   s   zHexDigestHash._norm_hashc                 C   s&   t |tr
|d}t| | S )Nutf-8)
isinstancer   encoder   
_hash_func	hexdigest)selfsecretr   r   r   _calc_checksum/   s   

zHexDigestHash._calc_checksum)__name__
__module____qualname____doc__r   checksum_sizeuh	HEX_CHARSchecksum_chars	supportedclassmethodr   r   r   r   r   r   r      s    
r   Tc              
   C   sl   t | |d}d|j }|jsd|_t|tft||t|j|jd d|jf d}|js/d|_|r4||_	|S )a@  
    create hex-encoded unsalted hasher for specified digest algorithm.

    .. versionchanged:: 1.7.3
        If called with unknown/supported digest, won't throw error immediately,
        but instead return a dummy hasher that will throw error when called.

        set ``required=True`` to restore old behavior.
    requiredhex_r      zThis class implements a plain hexadecimal %s hash, and follows the :ref:`password-hash-api`.

It supports no optional or contextual keywords.
)namer!   r   r$   r#   F)
r   r.   r(   digest_sizetyper   dictstaticmethodconstdjango_name)digestmoduler4   r+   infor.   hasherr   r   r   r	   8   s$   



r	   md4Fr*   md5unsalted_md5)r4   r+   sha1sha256sha512c                   @   s   e Zd ZdZd ZdZdZdZedddZ	edd	 Z
edd
dZedd Zejdddedd ZejdddedddZdS )htdigestzFhtdigest hash function.

    .. todo::
        document this hash
    r   )userrealmencodingr   Nc                 C   s\   |s| j }t| t|tr||}t||d}t||d}td|||}t	|
 S )Nr@   rA   z%s:%s:%s)default_encodingr%   validate_secretr   r   r   r   r   hashlibr:   r   )r   r   r@   rA   rB   datar   r   r   r   r   s   


zhtdigest.hashc                 C   sL   t |dd}t|dkrtj| d|D ]}|tjvr#tj| dq|S )z0normalize hash to native string, and validate itr   )param    z
wrong sizezinvalid chars in hash)r   lenr%   excMalformedHashErrorLC_HEX_CHARS)r   r   charr   r   r   r      s   
zhtdigest._norm_hashc                 C   s$   |  |}| ||||}t||S r   )r   r   r   )r   r   r   r@   rA   rB   otherr   r   r   verify   s   

zhtdigest.verifyc                 C   s&   z|  | W dS  ty   Y dS w )NFT)r   
ValueErrorr   r   r   r   identify   s   zhtdigest.identifyz1.7z2.0)
deprecatedremovedc                 C   s   |  dddS )N )r   )r   r   r   r   	genconfig   s   zhtdigest.genconfigc                 C   s   |  | | ||||S r   )r   r   )r   r   configr@   rA   rB   r   r   r   genhash   s   
zhtdigest.genhashr   )r   )r    r!   r"   r#   r.   setting_kwdscontext_kwdsrC   r)   r   r   rO   rQ   r%   deprecated_methodrU   rW   r   r   r   r   r?   g   s(    


r?   )r#   rE   logging	getLoggerr    logpasslib.utilsr   r   r   r   passlib.utils.compatr   r   passlib.utils.handlersutilshandlersr%   passlib.crypto.digestr   __all__StaticHandlerr   r	   r
   r   r   r   r   MinimalHandlerr?   r   r   r   r   <module>   s     &