Current File : //usr/lib/python2.7/site-packages/passlib/crypto/_md4.pyo |
�
�
5Xc @ sy d Z d d l m Z d d l Z d d l m Z m Z m Z d g Z d � Z d � Z
d
Z d e f d � � YZ
d S( s�
passlib.crypto._md4 -- fallback implementation of MD4
Helper implementing insecure and obsolete md4 algorithm.
used for NTHASH format, which is also insecure and broken,
since it's just md4(password).
Implementated based on rfc at http://www.faqs.org/rfcs/rfc1320.html
.. note::
This shouldn't be imported directly, it's merely used conditionally
by ``passlib.crypto.lookup_hash()`` when a native implementation can't be found.
i����( t hexlifyN( t
bascii_to_strt iranget PY3t md4c C s | | @| | @BS( N( ( t xt yt z( ( s7 /usr/lib/python2.7/site-packages/passlib/crypto/_md4.pyt F s c C s | | @| | @B| | @BS( N( ( R R R ( ( s7 /usr/lib/python2.7/site-packages/passlib/crypto/_md4.pyt G! s i i i c B sq e Z d Z d Z d Z Z d Z d Z d Z d Z
d d � Z d d d d d d g d d d d d d g d d d d d d
g d d d d d d g d d d d d d g d d d d d
d g d d d d d d
g d d d d d d g d d d d d d g d d d d d d g d d d d d d
g d d d d d
d g d d d d d d g d d d d d d g d d d d d d
g d d d d d d g g Z d d d d d d g d d d d d d
g d d d d d d g d d d d d d g d d d d d d g d d d d d
d
g d d d d d d g d d d d d d g d d d d d d g d d d d d d
g d d d d d d g d d d d d d g d d d d d d g d d d d d d
g d d d d d
d g d d d d d d g g Z
d d d d d d g d d d d d d g d d d d d d
g d d d d d d g d d d d d d g d d d d d d g d d d d d d
g d d d d d d g d d d d d d g d d d d d d g d d d d d
d
g d d d d d d g d d d d d d g d d d d d
d g d d d d d d
g d d d d d d g g Z d � Z d � Z d � Z d � Z d � Z RS( s� pep-247 compatible implementation of MD4 hash algorithm
.. attribute:: digest_size
size of md4 digest in bytes (16 bytes)
.. method:: update
update digest by appending additional content
.. method:: copy
create clone of digest object, including current state
.. method:: digest
return bytes representing md4 digest of current content
.. method:: hexdigest
return hexadecimal version of digest
R i i@ i c C sA d | _ d d d d g | _ d | _ | r= | j | � n d S( Ni i#EgI���� I�ܺ� ivT2t ( t _countt _statet _buft update( t selft content( ( s7 /usr/lib/python2.7/site-packages/passlib/crypto/_md4.pyt __init__N s
i i i i i i i i i i i i
i i
i i c
C s� t j d | � } | j } t | � } xs | j D]h \ } } } } } }
| | t | | | | | | � | | t @} | |
>t @| d |
?| | <q1 Wxw | j D]l \ } } } } } }
| | t | | | | | | � | | d t @} | |
>t @| d |
?| | <q� Wxs | j D]h \ } } } } } }
| | | | | | A| | A| | d t @} | |
>t @| d |
?| | <q!Wx. t
d � D] } | | | | t @| | <q�Wd S( s process 64 byte blocks <16Ii i�y�Zi���ni N( t structt unpackR t listt _round1R t MASK_32t _round2R t _round3R (
R t blockt Xt origt statet at bt ct dt kt st tt i( ( s7 /usr/lib/python2.7/site-packages/passlib/crypto/_md4.pyt _process� s "2""6""2"c C s� t | t � s6 t r$ t d � � q6 | j d � } n | j } | rR | | } n d } t | � } x] t r� | d } | | k r� | j | | | !� | j d 7_ | } qg | | | _ d Sqg Wd S( Ns expected bytest asciii i@ i (
t
isinstancet bytesR t TypeErrort encodeR
t lent TrueR% R ( R R t buft idxt endt next( ( s7 /usr/lib/python2.7/site-packages/passlib/crypto/_md4.pyR � s"