mò ØlÊ=c@sÙdklZd„Zd„Zd„Zd„Zd„Zd„ZdklZl Z d„Z d „Z d „Z d d d d d d d d d d d d d d d d gZ d fd„ƒYZd„Zd„Zd„ZdS((sU32cCs\t|dƒ}|t|dƒd>B}|t|dƒd>B}|t|dƒd>B}|S( schar[4] to unsigned longiiiiiiiN(tU32tctl(RR((t ntlm\des_c.pytc2ls cCsÎ||}tdƒtdƒ}}d}|djo"|t|dƒd>B}d}n|p |djo"|t|dƒd>B}d}n|p |djo"|t|dƒd>B}d}n|p |djo|t|d ƒB}d}n|p |d jo"|t|d ƒd>B}d}n|p |d jo"|t|d ƒd>B}d}n|p |d jo"|t|dƒd>B}d}n|p |djo|t|dƒB}n||fS( schar[n] to two unsigned long???iiiiiiiiiiiN(RtnRtl1tl2tf(RRRRR((Rtc2ln"s8         cCsŠg}|it|tdƒ@ƒƒ|it|d?tdƒ@ƒƒ|it|d?tdƒ@ƒƒ|it|d?tdƒ@ƒƒ|S(sunsigned long to char[4]iÿiiiN(RtappendtintRR(RR((Rtl2cAs!!!cCs\t|dd>ƒ}|t|dƒd>B}|t|dƒd>B}|t|dƒB}|S( snetwork to host longiiiiiiiN(RRR(RR((Rtn2lJs cCsŠg}|it|d?tdƒ@ƒƒ|it|d?tdƒ@ƒƒ|it|d?tdƒ@ƒƒ|it|tdƒ@ƒƒ|S(shost to network longiiÿiiN(RR R RR(RR((Rtl2nRs!!!cCs x!t|ƒD]}|idƒq Wd}|p |djo(t|d?tdƒ@ƒ|d}|tdt|t dƒ@ƒtdt|d?t dƒ@ƒBtdt|d?t dƒ@ƒBtd t|d ?t dƒ@ƒBtd t|t dƒ@ƒBtd t|d?t dƒ@ƒBtdt|d?t dƒ@ƒBtd t|d ?t dƒ@ƒBA}|||f|||fS(Niiii?iiiiiiiii( ttuptLtRtStstuttt des_SPtransR R(RRRRRRR((Rt D_ENCRYPT~s þ cCsF|\}}}||?|A|@}||A}|||>A}|||fS(stup - (a, b, t)N(RtatbRRtm(RRRRRR((RtPERM_OPs  cCsB|\}}|d|>|A|@}||A|d|?A}||fS(s tup - (a, t)iN(RRRRR(RRRRR((RtHPERM_OP˜s  iitDEScBs)tZdZd„Zd„Zd„ZRS(NcCs=g}x!|D]}|it|ƒƒq Wt|ƒ|_dS(N(tkeytkey_strRR tordt des_set_keytselftKeySched(R&R#RR"((Rt__init__¤s cCsjg}x!|D]}|it|ƒƒq Wt||idƒ}d}x|D]}|t |ƒ}qLW|S(NiR( tblocktstrRR R$tdes_ecb_encryptR&R'trestchr(R&R*RR,R)((Rtdecrypt¬scCsjg}x!|D]}|it|ƒƒq Wt||idƒ}d}x|D]}|t |ƒ}qLW|S(NiR( R)R*RR R$R+R&R'R,R-(R&R*RR,R)((Rtencrypt¶s(t__name__t __module__tNoneR'R(R.R/(((RR!¡s  c CsÁ|d}|d}tdƒ} tdƒ}t||| fdtdƒƒ\}}} t||| fdtdƒƒ\}}} t||| fdtdƒƒ\}}} t||| fd td ƒƒ\}}} t||| fdtd ƒƒ\}}} |d>|d ?B} |d>|d ?B}| }|}|o¥xCt dd dƒD]Š}t |||df|| |ƒ\}}} }|d}|d}t |||df|| |ƒ\}}} }|d}|d}qHWn¢xžt dddƒD]Š}t |||df|| |ƒ\}}} }|d}|d}t |||df|| |ƒ\}}} }|d}|d}qíW|d?|d >B}|d?|d >B}t||| fdtd ƒƒ\}}} t||| fd td ƒƒ\}}} t||| fdtdƒƒ\}}} t||| fdtdƒƒ\}}} t||| fdtdƒƒ\}}} |g} | i|ƒtdƒtdƒtdƒtdƒf\}}} }| S(Niiililÿil33ffilÿþlUUª*ii iiüÿÿÿ(tinputRtrRRRRtksRR/RRRtrtuptoutputR ( R3R5R/RRR6RR4RRR7((Rt des_encriptÅsR    *****.  . .  . *****  6cCsÀt|dd!ƒ}t|dd!ƒ}|g}|i|ƒt|||ƒ}|d}|d}t |ƒ}|t |ƒ}t dƒt dƒt dƒt dƒf\}}|d<|d<|S(Niiii( RR3tl0RtllR R8R5R/R R7R(R3R5R/R7R:R9R((RR+þs     >cCsèg}t|dd!ƒ}t|dd!ƒ}tdƒ}t|||fdtdƒƒ\}}}t||fdtdƒƒ\}}t||fdtdƒƒ\}}t|||fdtdƒƒ\}}}t|||fdtd ƒƒ\}}}t|||fdtdƒƒ\}}}|td ƒ@d >|td ƒ@B|td ƒ@d ?B|tdƒ@d?B}|tdƒ@}x]t d ƒD]O}t |o(|d?|d>B}|d?|d>B}n%|d?|d>B}|d?|d>B}|tdƒ@}|tdƒ@}t dt |tdƒ@ƒt dt |d?tdƒ@|d?tdƒ@BƒBt dt |d?tdƒ@|d?tdƒ@BƒBt dt |d?tdƒ@|d?tdƒ@B|d?tdƒ@BƒB}t dt |tdƒ@ƒt d t |d?tdƒ@|d?tdƒ@BƒBt dt |d?tdƒ@ƒBt dt |d?tdƒ@|d?tdƒ@BƒB}|i|d >|td!ƒ@Btd"ƒ@ƒ|d ?|td#ƒ@B}|d>|d$?B}|i|td"ƒ@ƒq‹W|}|S(%Niiiliþÿÿÿl˜ilUUª*lÿþlÿillþl`lÿÿiiii?iiii<i iii0iiii8ilÿlÿÿlþi(tkRR"RtdRRRR RRtshifts2tdes_skbR RR tschedule(R"RR<R?RR;RR((RR%s:  *$$***F  Æ¢)N(RRR R R RRtdes_dataRR>RRR R=R!R8R+R%(R RR RR+R!R>RR=RR RR8R%RR R((Rt?s     !   6$ 9