§
    HŠtj·  ã                   ó^  — 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     úV/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/passlib/handlers/digests.pyÚ
_norm_hashzHexDigestHash._norm_hash+   s   € à�zŠz‰|Œ|Ðó    c                 ó¾   — t          |t          ¦  «        r|                     d¦  «        }t          |                      |¦  «                             ¦   «         ¦  «        S )Núutf-8)Ú
isinstancer   Úencoder   Ú
_hash_funcÚ	hexdigest)ÚselfÚsecrets     r   Ú_calc_checksumzHexDigestHash._calc_checksum/   sK   € Ý�f�gÑ&Ô&ð 	,Ø—]’] 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Ô1€DØ�D”IÑ€DØŒ>ð ØˆÔÝ�$�Ð(­$ØØÝ ¤
Ñ+Ô+ØÔ& qÑ(Ð(ð „y€y€yðð	+ñ 	+ô 	+ñ 	ô 	€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Ñ"Ô"Ð"Ý�f�gÑ&Ô&ð 	-Ø—]’] 8Ñ,Ô,ˆFÝ˜˜h¨Ñ/Ô/ˆÝ˜ ¨'Ñ2Ô2ˆÝ˜J¨¨e°VÑ<Ô<ˆÝŒ{˜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ˆÝˆt‰9Œ9˜Š?ˆ?Ý”&×+Ò+¨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Ñ#Ô#ˆØ—’˜  u¨hÑ7Ô7ˆÝ�t˜UÑ#Ô#Ð#r   c                 óV   — 	 |                       |¦  «         n# t          $ r Y dS w xY wdS )NFT)r   Ú
ValueErrorr   s     r   Úidentifyzhtdigest.identify‘   sC   € ð	Ø�NŠN˜4Ñ Ô Ð Ð øÝð 	ð 	ð 	Ø�5�5ð	øøøàˆts   ‚ ˜
&¥&z1.7z2.0)Ú
deprecatedÚremovedc                 ó0   — |                       ddd¦  «        S )NÚ )r   )r   s    r   Ú	genconfigzhtdigest.genconfig™   s   € ð �xŠx˜˜B Ñ#Ô#Ð#r   c                 ó\   — |                       |¦  «         |                      ||||¦  «        S r   )r   r   )r   r"   ÚconfigrG   rH   rI   s         r   Úgenhashzhtdigest.genhashž   s.   € ð
 	�Š�vÑÔÐØ�xŠx˜  e¨XÑ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Ø0€LØÐàð-ð -ð -ñ „[ð-ð ðð ñ „[ðð ð$ð $ð $ñ „[ð$ð
 ðð ñ „[ðð €RÔ U°EÐ:Ñ:Ô:Øð$ð $ñ „[ñ ;Ô:ð$ð €RÔ U°EÐ:Ñ:Ô:Øð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 ˆo˜e¨eÐ4Ñ4Ô4€Øˆo˜e°È%ÐPÑPÔP€Øˆo˜f¨uÐ5Ñ5Ô5€Øˆo˜hÑ'Ô'€
Øˆo˜hÑ'Ô'€
ð
=7ð =7ð =7ð =7ð =7ˆrÔ ñ =7ô =7ð =7ð =7ð =7r   