+
    ¢THi%  ã                   ó„   € R t ^ RIHt ^ RIHu Ht RR.t ! R R]P                  4      t	 ! R R]P                  4      t
R# )a8  passlib.handlers.mysql

MySQL 3.2.3 / OLD_PASSWORD()

    This implements Mysql's OLD_PASSWORD algorithm, introduced in version 3.2.3, deprecated in version 4.1.

    See :mod:`passlib.handlers.mysql_41` for the new algorithm was put in place in version 4.1

    This algorithm is known to be very insecure, and should only be used to verify existing password hashes.

    http://djangosnippets.org/snippets/1508/

MySQL 4.1.1 / NEW PASSWORD
    This implements Mysql new PASSWORD algorithm, introduced in version 4.1.

    This function is unsalted, and therefore not very secure against rainbow attacks.
    It should only be used when dealing with mysql passwords,
    for all other purposes, you should use a salted hash function.

    Description taken from http://dev.mysql.com/doc/refman/6.0/en/password-hashing.html
)Úsha1NÚmysql323Úmysql41c                   óZ   a € ] tR t^!t o RtR t^t]P                  t	]
R 4       tR tRtV tR# )r   a
  This class implements the MySQL 3.2.3 password hash, and follows the :ref:`password-hash-api`.

It has no salt and a single fixed round.

The :meth:`~passlib.ifc.PasswordHash.hash` and :meth:`~passlib.ifc.PasswordHash.genconfig` methods accept no optional keywords.
c                ó"   € VP                  4       # ©N)Úlower©ÚclsÚhashs   &&Ú8/usr/lib/python3/dist-packages/passlib/handlers/mysql.pyÚ
_norm_hashÚmysql323._norm_hash-   ó   € à�z‰z‹|Ðó    c                ór  € \        V\        4      '       d   VP                  R 4      pRpRpRpRpRp^pV Fk  pW„9   d   K  Tp	WU^?,          V,           V	,          V^,          ,           V,          ,          pWf^,          V,          ,           V,          pWy,           V,          pKm  	  WS,          R Wc,          R 2# )úutf-8l   ÿÿ iÿÿÿs    	i5W0PiqV4Ú08x)Ú
isinstanceÚstrÚencode)
ÚselfÚsecretÚMASK_32ÚMASK_31ÚWHITEÚnr1Únr2ÚaddÚcÚtmps
   &&        r   Ú_calc_checksumÚmysql323._calc_checksum1   s³   € ä�fœc×"Ò"Ø—]‘] 7Ó+ˆFàˆØˆØˆàˆØˆØˆÛˆAØŒzÙØˆCØ˜R•x 3Õ&¨#Õ-°#¸µ(Õ;¸wÕFÕFˆCØ !�8 sÕ*Õ+¨wÕ6ˆCØ•9 Õ'ŠCñ ð •- Ð$ S¥]°3Ð$7Ð8Ð8r   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚnameÚchecksum_sizeÚuhÚ	HEX_CHARSÚchecksum_charsÚclassmethodr   r!   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r   r   !   s;   ø‡ € ñð €DØ€MØ—\‘\€Nàñó ð÷9ð 9r   c                   ó^   a € ] tR t^Gt o RtR tRt]P                  t	^(t
]R 4       tR tRtV tR# )r   a  This class implements the MySQL 4.1 password hash, and follows the :ref:`password-hash-api`.

It has no salt and a single fixed round.

The :meth:`~passlib.ifc.PasswordHash.hash` and :meth:`~passlib.ifc.PasswordHash.genconfig` methods accept no optional keywords.
Ú*c                ó"   € VP                  4       # r   )Úupperr	   s   &&r   r   Úmysql41._norm_hashT   r   r   c                óÌ   € \        V\        4      '       d   VP                  R 4      p\        \        V4      P	                  4       4      P                  4       P                  4       # )r   )r   r   r   r   ÚdigestÚ	hexdigestr6   )r   r   s   &&r   r!   Úmysql41._calc_checksumX   sG   € ä�fœc×"Ò"Ø—]‘] 7Ó+ˆFÜ”D˜“L×'Ñ'Ó)Ó*×4Ñ4Ó6×<Ñ<Ó>Ð>r   r#   N)r$   r%   r&   r'   r(   r)   Ú_hash_prefixr+   r,   r-   r*   r.   r   r!   r/   r0   r1   s   @r   r   r   G   s@   ø‡ € ñð €DØ€LØ—\‘\€NØ€Màñó ð÷?ð ?r   )r(   Úhashlibr   Úpasslib.utils.handlersÚutilsÚhandlersr+   Ú__all__ÚStaticHandlerr   r   r#   r   r   Ú<module>rC      sI   ðñõ, ç #Ð #ð Øð€ô#9ˆr×Ñô #9ôL?ˆb×Ñö ?r   