b-Qc@sdZdZdZddlZddlZddZdZdZd Zd Z d Z d Z ee e e gZ d dddgZ dddYZdZdZdZddZedkrdZeeZejendS(sA sample implementation of SHA-1 in pure Python. Framework adapted from Dinu Gherman's MD5 implementation by J. Hallén and L. Creighton. SHA-1 implementation based directly on the text of the NIST standard FIPS PUB 180-1. s 2004-11-17gQ?iNicCsd}tj}x1|dkrB|d|d@|}|d?}qWx:tt|D]}||dkrVPqVqVWd}d}||}|dkrt||r|t||d|}n|S(sConvert a long integer to a byte string. If optional blocksize is given and greater than zero, pad the front of the byte string with binary zeros so that the length is a multiple of blocksize. tis>Ili t(tstructtpacktrangetlen(tnt blocksizetsRti((sE/usr/lib/python2.7/site-packages/setuptools/_backport/hashlib/_sha.pyt_long2bytesBigEndians   c Cst|d}dg|}d}d}x||krt||d>}t||dd>}t||dd>}t||d}||B|B|B||<|d}|d}q,W|S( s4Transform a list of characters into a list of longs.iiiiiiii(Rtord( tlisttimaxthltjR tb0tb1tb2tb3((sE/usr/lib/python2.7/site-packages/setuptools/_backport/hashlib/_sha.pyt_bytelist2longBigEndian:s  cCs||>|d|?BS(s)Rotate x (32 bit) left n bits circularly.i ((txR((sE/usr/lib/python2.7/site-packages/setuptools/_backport/hashlib/_sha.pyt _rotateLeftNscCs||@||@BS(N((tBtCtD((sE/usr/lib/python2.7/site-packages/setuptools/_backport/hashlib/_sha.pytf0_19YscCs ||A|AS(N((RRR((sE/usr/lib/python2.7/site-packages/setuptools/_backport/hashlib/_sha.pytf20_39\scCs||@||@B||@BS(N((RRR((sE/usr/lib/python2.7/site-packages/setuptools/_backport/hashlib/_sha.pytf40_59_scCs ||A|AS(N((RRR((sE/usr/lib/python2.7/site-packages/setuptools/_backport/hashlib/_sha.pytf60_79bsiyZinl<7lAtshacBs]eZdZdZZdZdZdZdZdZ dZ dZ d Z RS( s:An implementation of the MD5 hash function in pure Python.iicCs/d|_ddg|_g|_|jdS(sInitialisation.iN(tlengthtcounttinputtinit(tself((sE/usr/lib/python2.7/site-packages/setuptools/_backport/hashlib/_sha.pyt__init__vs  cCsCd|_g|_d|_d|_d|_d|_d|_dS(s9Initialize the message-digest and set all fields to zero.ii#Egl+_l\u1ivT2laN(RR!tH0tH1tH2tH3tH4(R#((sE/usr/lib/python2.7/site-packages/setuptools/_backport/hashlib/_sha.pyR"s      c Csx]tddD]L}|jt||d||dA||dA||dAdd@qW|j}|j}|j}|j}|j}xztdd D]i}t|d ||@||@B|||td}|}|}t|d d@}|}|d@}qWxutd d D]d}t|d ||A|A|||td}|}|}t|d d@}|}|d@}qWxtd d D]p}t|d ||@||@B||@B|||td}|}|}t|d d@}|}|d@}qWxutd dD]d}t|d ||A|A|||td}|}|}t|d d@}|}|d@}qW|j|d@|_|j|d@|_|j|d@|_|j|d@|_|j|d@|_dS(NiiPiiiiliiiii(i<i( RtappendRR%R&R'R(R)tK( R#tWtttARRRtEtTEMP((sE/usr/lib/python2.7/site-packages/setuptools/_backport/hashlib/_sha.pyt _transformsR A     4/;/cCsRt|}|jdd?d@}|jd|d>|jd<|jd|d>kro|jdd|jd:s( t__name__t __module__t__doc__t digest_sizet digestsizet block_sizeR$R"R1R6R:R=R>(((sE/usr/lib/python2.7/site-packages/setuptools/_backport/hashlib/_sha.pyRps   B + 1 iicCs#t}|r|j|n|S(saReturn a new sha crypto object. If arg is present, the method call update(arg) is made. (RR6(targtcrypto((sE/usr/lib/python2.7/site-packages/setuptools/_backport/hashlib/_sha.pytnewQs t__main__sjust a test string((RBt__date__t __version__RR>R RRRRRRtfR+RRCRDRtNoneRHR@ta_strRR6(((sE/usr/lib/python2.7/site-packages/setuptools/_backport/hashlib/_sha.pyts2 "