
    XR_                     ^   d Z ddlZddlZ ej        e          ZddlmZmZm	Z	m
Z
 ddlmZmZ ddlmc mZ ddlmZ g dZ G d dej                  Zedd	fd
Z edd          Z eddd          Z edd          Z ed          Z ed          Z G 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                   H    e Zd ZdZdZdZej        ZdZ	e
d             Zd ZdS )HexDigestHashzTthis provides a template for supporting passwords stored as plain hexadecimal hashesNTc                 *    |                                 S N)lowerclshashs     :/usr/lib/python3/dist-packages/passlib/handlers/digests.py
_norm_hashzHexDigestHash._norm_hash+   s    zz||    c                     t          |t                    r|                    d          }t          |                     |                                                    S )Nutf-8)
isinstancer   encoder   
_hash_func	hexdigest)selfsecrets     r   _calc_checksumzHexDigestHash._calc_checksum/   sK    fg&& 	,]]7++FT__V44>>@@AAAr   )__name__
__module____qualname____doc__r   checksum_sizeuh	HEX_CHARSchecksum_chars	supportedclassmethodr   r#    r   r   r   r      sc        ^^ JM\N I
   [B B B B Br   r   Tc                    t          | |          }d|j        z   }|j        sd|_        t	          |t
          ft          ||t          |j                  |j        dz  d|j        d                    }|j        sd|_        |r||_	        |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      z*This class implements a plain hexadecimal zb hash, and follows the :ref:`password-hash-api`.

It supports no optional or contextual keywords.
)namer%   r   r(   r'   F)
r	   r4   r,   digest_sizetyper   dictstaticmethodconstdjango_name)digestmoduler:   r1   infor4   hashers          r   r
   r
   8   s     v111DDID> $($
++&q(( yyy	+ 	+ 	+ 	 	F > !  )(Mr   md4Fr0   md5unsalted_md5)r:   r1   sha1sha256sha512c                      e Zd ZdZd ZdZdZdZedd            Z	ed             Z
edd            Zed	             Z ej        d
d          ed                         Z ej        d
d          edd                        ZdS )htdigestzFhtdigest hash function.

    .. todo::
        document this hash
    r.   )userrealmencodingr   Nc                 D   |s| j         }t          j        |           t          |t                    r|                    |          }t          ||d          }t          ||d          }t          d|||          }t          j	        |          
                                S )NrG   rH   z%s:%s:%s)default_encodingr)   validate_secretr   r   r   r   r   hashlibr@   r    )r   r"   rG   rH   rI   datas         r   r   zhtdigest.hashr   s      	,+H
6"""fg&& 	-]]8,,Fh//'22JeV<<{4  **,,,r   c                     t          |d          }t          |          dk    r t          j                            | d          |D ]0}|t          j        vr t          j                            | d          1|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   chars      r   r   zhtdigest._norm_hash   s~     T000t99??&++C>>> 	N 	ND2?**f//5LMMM +r   c                 |    |                      |          }|                     ||||          }t          ||          S r   )r   r   r   )r   r"   r   rG   rH   rI   others          r   verifyzhtdigest.verify   s:    ~~d##uh77tU###r   c                 V    	 |                      |           n# t          $ r Y dS w xY wdS )NFT)r   
ValueErrorr   s     r   identifyzhtdigest.identify   sC    	NN4     	 	 	55	ts    
&&z1.7z2.0)
deprecatedremovedc                 0    |                      ddd          S )N )r   )r   s    r   	genconfigzhtdigest.genconfig   s     xxB###r   c                 \    |                      |           |                     ||||          S r   )r   r   )r   r"   configrG   rH   rI   s         r   genhashzhtdigest.genhash   s.    
 	vxxeX666r   r   )r   )r$   r%   r&   r'   r4   setting_kwdscontext_kwdsrK   r-   r   r   rY   r\   r)   deprecated_methodra   rd   r.   r   r   rF   rF   g   s        
 DL0L- - - [-   [ $ $ $ [$
   [ RUE:::$ $ [ ;:$ RUE:::7 7 7 [ ;:7 7 7r   rF   )r'   rM   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   MinimalHandlerrF   r.   r   r   <module>rt      s     'g'11 I H H H H H H H H H H H 7 7 7 7 7 7 7 7 # # # # # # # # # - - - - - -  B B B B BB$ B B B8 $,    L oee444oe%PPPofu555oh''
oh''

=7 =7 =7 =7 =7r  =7 =7 =7 =7 =7r   