PNG  IHDRQgAMA a cHRMz&u0`:pQ<bKGDgmIDATxwUﹻ& ^CX(J I@ "% (** BX +*i"]j(IH{~R)[~>h{}gy)I$Ij .I$I$ʊy@}x.: $I$Ii}VZPC)I$IF ^0ʐJ$I$Q^}{"r=OzI$gRZeC.IOvH eKX $IMpxsk.쒷/&r[޳<v| .I~)@$updYRa$I |M.e JaֶpSYR6j>h%IRز if&uJ)M$I vLi=H;7UJ,],X$I1AҒJ$ XY XzI@GNҥRT)E@;]K*Mw;#5_wOn~\ DC&$(A5 RRFkvIR}l!RytRl;~^ǷJj اy뷦BZJr&ӥ8Pjw~vnv X^(I;4R=P[3]J,]ȏ~:3?[ a&e)`e*P[4]T=Cq6R[ ~ޤrXR Հg(t_HZ-Hg M$ãmL5R uk*`%C-E6/%[t X.{8P9Z.vkXŐKjgKZHg(aK9ڦmKjѺm_ \#$5,)-  61eJ,5m| r'= &ڡd%-]J on Xm|{ RҞe $eڧY XYrԮ-a7RK6h>n$5AVڴi*ֆK)mѦtmr1p| q:흺,)Oi*ֺK)ܬ֦K-5r3>0ԔHjJئEZj,%re~/z%jVMڸmrt)3]J,T K֦OvԒgii*bKiNO~%PW0=dii2tJ9Jݕ{7"I P9JKTbu,%r"6RKU}Ij2HKZXJ,妝 XYrP ެ24c%i^IK|.H,%rb:XRl1X4Pe/`x&P8Pj28Mzsx2r\zRPz4J}yP[g=L) .Q[6RjWgp FIH*-`IMRaK9TXcq*I y[jE>cw%gLRԕiFCj-ďa`#e~I j,%r,)?[gp FI˨mnWX#>mʔ XA DZf9,nKҲzIZXJ,L#kiPz4JZF,I,`61%2s $,VOϚ2/UFJfy7K> X+6 STXIeJILzMfKm LRaK9%|4p9LwJI!`NsiazĔ)%- XMq>pk$-$Q2x#N ؎-QR}ᶦHZډ)J,l#i@yn3LN`;nڔ XuX5pF)m|^0(>BHF9(cզEerJI rg7 4I@z0\JIi䵙RR0s;$s6eJ,`n 䂦0a)S)A 1eJ,堌#635RIgpNHuTH_SԕqVe ` &S)>p;S$魁eKIuX`I4춒o}`m$1":PI<[v9^\pTJjriRŭ P{#{R2,`)e-`mgj~1ϣLKam7&U\j/3mJ,`F;M'䱀 .KR#)yhTq;pcK9(q!w?uRR,n.yw*UXj#\]ɱ(qv2=RqfB#iJmmL<]Y͙#$5 uTU7ӦXR+q,`I}qL'`6Kͷ6r,]0S$- [RKR3oiRE|nӦXR.(i:LDLTJjY%o:)6rxzҒqTJjh㞦I.$YR.ʼnGZ\ֿf:%55 I˼!6dKxm4E"mG_ s? .e*?LRfK9%q#uh$)i3ULRfK9yxm܌bj84$i1U^@Wbm4uJ,ҪA>_Ij?1v32[gLRD96oTaR׿N7%L2 NT,`)7&ƝL*꽙yp_$M2#AS,`)7$rkTA29_Iye"|/0t)$n XT2`YJ;6Jx".e<`$) PI$5V4]29SRI>~=@j]lp2`K9Jaai^" Ԋ29ORI%:XV5]JmN9]H;1UC39NI%Xe78t)a;Oi Ҙ>Xt"~G>_mn:%|~ޅ_+]$o)@ǀ{hgN;IK6G&rp)T2i୦KJuv*T=TOSV>(~D>dm,I*Ɛ:R#ۙNI%D>G.n$o;+#RR!.eU˽TRI28t)1LWϚ>IJa3oFbu&:tJ*(F7y0ZR ^p'Ii L24x| XRI%ۄ>S1]Jy[zL$adB7.eh4%%누>WETf+3IR:I3Xה)3אOۦSRO'ٺ)S}"qOr[B7ϙ.edG)^ETR"RtRݜh0}LFVӦDB^k_JDj\=LS(Iv─aTeZ%eUAM-0;~˃@i|l @S4y72>sX-vA}ϛBI!ݎߨWl*)3{'Y|iSlEڻ(5KtSI$Uv02,~ԩ~x;P4ցCrO%tyn425:KMlD ^4JRxSهF_}شJTS6uj+ﷸk$eZO%G*^V2u3EMj3k%)okI]dT)URKDS 7~m@TJR~荪fT"֛L \sM -0T KfJz+nإKr L&j()[E&I ߴ>e FW_kJR|!O:5/2跌3T-'|zX ryp0JS ~^F>-2< `*%ZFP)bSn"L :)+pʷf(pO3TMW$~>@~ū:TAIsV1}S2<%ޟM?@iT ,Eūoz%i~g|`wS(]oȤ8)$ ntu`өe`6yPl IzMI{ʣzʨ )IZ2= ld:5+請M$-ї;U>_gsY$ÁN5WzWfIZ)-yuXIfp~S*IZdt;t>KūKR|$#LcԀ+2\;kJ`]YǔM1B)UbG"IRߊ<xܾӔJ0Z='Y嵤 Leveg)$znV-º^3Ւof#0Tfk^Zs[*I꯳3{)ˬW4Ւ4 OdpbZRS|*I 55#"&-IvT&/윚Ye:i$ 9{LkuRe[I~_\ؠ%>GL$iY8 9ܕ"S`kS.IlC;Ҏ4x&>u_0JLr<J2(^$5L s=MgV ~,Iju> 7r2)^=G$1:3G< `J3~&IR% 6Tx/rIj3O< ʔ&#f_yXJiގNSz; Tx(i8%#4 ~AS+IjerIUrIj362v885+IjAhK__5X%nV%Iͳ-y|7XV2v4fzo_68"S/I-qbf; LkF)KSM$ Ms>K WNV}^`-큧32ŒVؙGdu,^^m%6~Nn&͓3ŒVZMsRpfEW%IwdǀLm[7W&bIRL@Q|)* i ImsIMmKmyV`i$G+R 0tV'!V)֏28vU7͒vHꦼtxꗞT ;S}7Mf+fIRHNZUkUx5SAJㄌ9MqμAIRi|j5)o*^'<$TwI1hEU^c_j?Е$%d`z cyf,XO IJnTgA UXRD }{H}^S,P5V2\Xx`pZ|Yk:$e ~ @nWL.j+ϝYb퇪bZ BVu)u/IJ_ 1[p.p60bC >|X91P:N\!5qUB}5a5ja `ubcVxYt1N0Zzl4]7­gKj]?4ϻ *[bg$)+À*x쳀ogO$~,5 زUS9 lq3+5mgw@np1sso Ӻ=|N6 /g(Wv7U;zωM=wk,0uTg_`_P`uz?2yI!b`kĸSo+Qx%!\οe|އԁKS-s6pu_(ֿ$i++T8=eY; צP+phxWQv*|p1. ά. XRkIQYP,drZ | B%wP|S5`~́@i޾ E;Չaw{o'Q?%iL{u D?N1BD!owPHReFZ* k_-~{E9b-~P`fE{AܶBJAFO wx6Rox5 K5=WwehS8 (JClJ~ p+Fi;ŗo+:bD#g(C"wA^ r.F8L;dzdIHUX݆ϞXg )IFqem%I4dj&ppT{'{HOx( Rk6^C٫O.)3:s(۳(Z?~ٻ89zmT"PLtw䥈5&b<8GZ-Y&K?e8,`I6e(֍xb83 `rzXj)F=l($Ij 2*(F?h(/9ik:I`m#p3MgLaKjc/U#n5S# m(^)=y=đx8ŬI[U]~SцA4p$-F i(R,7Cx;X=cI>{Km\ o(Tv2vx2qiiDJN,Ҏ!1f 5quBj1!8 rDFd(!WQl,gSkL1Bxg''՞^ǘ;pQ P(c_ IRujg(Wz bs#P­rz> k c&nB=q+ؔXn#r5)co*Ũ+G?7< |PQӣ'G`uOd>%Mctz# Ԫڞ&7CaQ~N'-P.W`Oedp03C!IZcIAMPUۀ5J<\u~+{9(FbbyAeBhOSܳ1 bÈT#ŠyDžs,`5}DC-`̞%r&ڙa87QWWp6e7 Rϫ/oY ꇅ Nܶըtc!LA T7V4Jsū I-0Pxz7QNF_iZgúWkG83 0eWr9 X]㾮݁#Jˢ C}0=3ݱtBi]_ &{{[/o[~ \q鯜00٩|cD3=4B_b RYb$óBRsf&lLX#M*C_L܄:gx)WΘsGSbuL rF$9';\4Ɍq'n[%p.Q`u hNb`eCQyQ|l_C>Lb꟟3hSb #xNxSs^ 88|Mz)}:](vbۢamŖ࿥ 0)Q7@0=?^k(*J}3ibkFn HjB׻NO z x}7p 0tfDX.lwgȔhԾŲ }6g E |LkLZteu+=q\Iv0쮑)QٵpH8/2?Σo>Jvppho~f>%bMM}\//":PTc(v9v!gոQ )UfVG+! 35{=x\2+ki,y$~A1iC6#)vC5^>+gǵ@1Hy٪7u;p psϰu/S <aʸGu'tD1ԝI<pg|6j'p:tպhX{o(7v],*}6a_ wXRk,O]Lܳ~Vo45rp"N5k;m{rZbΦ${#)`(Ŵg,;j%6j.pyYT?}-kBDc3qA`NWQū20/^AZW%NQ MI.X#P#,^Ebc&?XR tAV|Y.1!؅⨉ccww>ivl(JT~ u`ٵDm q)+Ri x/x8cyFO!/*!/&,7<.N,YDŽ&ܑQF1Bz)FPʛ?5d 6`kQձ λc؎%582Y&nD_$Je4>a?! ͨ|ȎWZSsv8 j(I&yj Jb5m?HWp=g}G3#|I,5v珿] H~R3@B[☉9Ox~oMy=J;xUVoj bUsl_35t-(ՃɼRB7U!qc+x4H_Qo֮$[GO<4`&č\GOc[.[*Af%mG/ ňM/r W/Nw~B1U3J?P&Y )`ѓZ1p]^l“W#)lWZilUQu`-m|xĐ,_ƪ|9i:_{*(3Gѧ}UoD+>m_?VPۅ15&}2|/pIOʵ> GZ9cmíتmnz)yߐbD >e}:) r|@R5qVSA10C%E_'^8cR7O;6[eKePGϦX7jb}OTGO^jn*媓7nGMC t,k31Rb (vyܴʭ!iTh8~ZYZp(qsRL ?b}cŨʊGO^!rPJO15MJ[c&~Z`"ѓޔH1C&^|Ш|rʼ,AwĴ?b5)tLU)F| &g٣O]oqSUjy(x<Ϳ3 .FSkoYg2 \_#wj{u'rQ>o;%n|F*O_L"e9umDds?.fuuQbIWz |4\0 sb;OvxOSs; G%T4gFRurj(֍ڑb uԖKDu1MK{1^ q; C=6\8FR艇!%\YÔU| 88m)֓NcLve C6z;o&X x59:q61Z(T7>C?gcļxѐ Z oo-08jہ x,`' ҔOcRlf~`jj".Nv+sM_]Zk g( UOPyεx%pUh2(@il0ݽQXxppx-NS( WO+轾 nFߢ3M<;z)FBZjciu/QoF 7R¥ ZFLF~#ȣߨ^<쩡ݛкvџ))ME>ώx4m#!-m!L;vv#~Y[đKmx9.[,UFS CVkZ +ߟrY٧IZd/ioi$%͝ب_ֶX3ܫhNU ZZgk=]=bbJS[wjU()*I =ώ:}-蹞lUj:1}MWm=̛ _ ¾,8{__m{_PVK^n3esw5ӫh#$-q=A̟> ,^I}P^J$qY~Q[ Xq9{#&T.^GVj__RKpn,b=`żY@^՝;z{paVKkQXj/)y TIc&F;FBG7wg ZZDG!x r_tƢ!}i/V=M/#nB8 XxЫ ^@CR<{䤭YCN)eKOSƟa $&g[i3.C6xrOc8TI;o hH6P&L{@q6[ Gzp^71j(l`J}]e6X☉#͕ ׈$AB1Vjh㭦IRsqFBjwQ_7Xk>y"N=MB0 ,C #o6MRc0|$)ف"1!ixY<B9mx `,tA>)5ػQ?jQ?cn>YZe Tisvh# GMމȇp:ԴVuږ8ɼH]C.5C!UV;F`mbBk LTMvPʍϤj?ԯ/Qr1NB`9s"s TYsz &9S%U԰> {<ؿSMxB|H\3@!U| k']$U+> |HHMLޢ?V9iD!-@x TIî%6Z*9X@HMW#?nN ,oe6?tQwڱ.]-y':mW0#!J82qFjH -`ѓ&M0u Uγmxϵ^-_\])@0Rt.8/?ٰCY]x}=sD3ojަЫNuS%U}ԤwHH>ڗjܷ_3gN q7[q2la*ArǓԖ+p8/RGM ]jacd(JhWko6ڎbj]i5Bj3+3!\j1UZLsLTv8HHmup<>gKMJj0@H%,W΃7R) ">c, xixј^ aܖ>H[i.UIHc U1=yW\=S*GR~)AF=`&2h`DzT󑓶J+?W+}C%P:|0H܆}-<;OC[~o.$~i}~HQ TvXΈr=b}$vizL4:ȰT|4~*!oXQR6Lk+#t/g lԁߖ[Jڶ_N$k*". xsxX7jRVbAAʯKҎU3)zSNN _'s?f)6X!%ssAkʱ>qƷb hg %n ~p1REGMHH=BJiy[<5 ǁJҖgKR*倳e~HUy)Ag,K)`Vw6bRR:qL#\rclK/$sh*$ 6덤 KԖc 3Z9=Ɣ=o>X Ώ"1 )a`SJJ6k(<c e{%kϊP+SL'TcMJWRm ŏ"w)qc ef꒵i?b7b('"2r%~HUS1\<(`1Wx9=8HY9m:X18bgD1u ~|H;K-Uep,, C1 RV.MR5άh,tWO8WC$ XRVsQS]3GJ|12 [vM :k#~tH30Rf-HYݺ-`I9%lIDTm\ S{]9gOڒMNCV\G*2JRŨ;Rҏ^ڽ̱mq1Eu?To3I)y^#jJw^Ńj^vvlB_⋌P4x>0$c>K†Aļ9s_VjTt0l#m>E-,,x,-W)سo&96RE XR.6bXw+)GAEvL)͞K4$p=Ũi_ѱOjb HY/+@θH9޼]Nԥ%n{ &zjT? Ty) s^ULlb,PiTf^<À] 62R^V7)S!nllS6~͝V}-=%* ʻ>G DnK<y&>LPy7'r=Hj 9V`[c"*^8HpcO8bnU`4JȪAƋ#1_\ XϘHPRgik(~G~0DAA_2p|J묭a2\NCr]M_0 ^T%e#vD^%xy-n}-E\3aS%yN!r_{ )sAw ڼp1pEAk~v<:`'ӭ^5 ArXOI驻T (dk)_\ PuA*BY]yB"l\ey hH*tbK)3 IKZ򹞋XjN n *n>k]X_d!ryBH ]*R 0(#'7 %es9??ښFC,ՁQPjARJ\Ρw K#jahgw;2$l*) %Xq5!U᢯6Re] |0[__64ch&_}iL8KEgҎ7 M/\`|.p,~`a=BR?xܐrQ8K XR2M8f ?`sgWS%" Ԉ 7R%$ N}?QL1|-эټwIZ%pvL3Hk>,ImgW7{E xPHx73RA @RS CC !\ȟ5IXR^ZxHл$Q[ŝ40 (>+ _C >BRt<,TrT {O/H+˟Pl6 I B)/VC<6a2~(XwV4gnXR ϱ5ǀHٻ?tw똤Eyxp{#WK qG%5],(0ӈH HZ])ג=K1j&G(FbM@)%I` XRg ʔ KZG(vP,<`[ Kn^ SJRsAʠ5xՅF`0&RbV tx:EaUE/{fi2;.IAwW8/tTxAGOoN?G}l L(n`Zv?pB8K_gI+ܗ #i?ޙ.) p$utc ~DžfՈEo3l/)I-U?aԅ^jxArA ΧX}DmZ@QLےbTXGd.^|xKHR{|ΕW_h] IJ`[G9{).y) 0X YA1]qp?p_k+J*Y@HI>^?gt.06Rn ,` ?);p pSF9ZXLBJPWjgQ|&)7! HjQt<| ؅W5 x W HIzYoVMGP Hjn`+\(dNW)F+IrS[|/a`K|ͻ0Hj{R,Q=\ (F}\WR)AgSG`IsnAR=|8$}G(vC$)s FBJ?]_u XRvύ6z ŨG[36-T9HzpW̞ú Xg큽=7CufzI$)ki^qk-) 0H*N` QZkk]/tnnsI^Gu't=7$ Z;{8^jB% IItRQS7[ϭ3 $_OQJ`7!]W"W,)Iy W AJA;KWG`IY{8k$I$^%9.^(`N|LJ%@$I}ֽp=FB*xN=gI?Q{٥4B)mw $Igc~dZ@G9K X?7)aK%݅K$IZ-`IpC U6$I\0>!9k} Xa IIS0H$I H ?1R.Чj:4~Rw@p$IrA*u}WjWFPJ$I➓/6#! LӾ+ X36x8J |+L;v$Io4301R20M I$-E}@,pS^ޟR[/s¹'0H$IKyfŸfVOπFT*a$I>He~VY/3R/)>d$I>28`Cjw,n@FU*9ttf$I~<;=/4RD~@ X-ѕzἱI$: ԍR a@b X{+Qxuq$IЛzo /~3\8ڒ4BN7$IҀj V]n18H$IYFBj3̵̚ja pp $Is/3R Ӻ-Yj+L;.0ŔI$Av? #!5"aʄj}UKmɽH$IjCYs?h$IDl843.v}m7UiI=&=0Lg0$I4: embe` eQbm0u? $IT!Sƍ'-sv)s#C0:XB2a w I$zbww{."pPzO =Ɔ\[ o($Iaw]`E).Kvi:L*#gР7[$IyGPI=@R 4yR~̮´cg I$I/<tPͽ hDgo 94Z^k盇΄8I56^W$I^0̜N?4*H`237}g+hxoq)SJ@p|` $I%>-hO0eO>\ԣNߌZD6R=K ~n($I$y3D>o4b#px2$yڪtzW~a $I~?x'BwwpH$IZݑnC㧄Pc_9sO gwJ=l1:mKB>Ab<4Lp$Ib o1ZQ@85b̍ S'F,Fe,^I$IjEdù{l4 8Ys_s Z8.x m"+{~?q,Z D!I$ϻ'|XhB)=…']M>5 rgotԎ 獽PH$IjIPhh)n#cÔqA'ug5qwU&rF|1E%I$%]!'3AFD/;Ck_`9 v!ٴtPV;x`'*bQa w I$Ix5 FC3D_~A_#O݆DvV?<qw+I$I{=Z8".#RIYyjǪ=fDl9%M,a8$I$Ywi[7ݍFe$s1ՋBVA?`]#!oz4zjLJo8$I$%@3jAa4(o ;p,,dya=F9ً[LSPH$IJYЉ+3> 5"39aZ<ñh!{TpBGkj}Sp $IlvF.F$I z< '\K*qq.f<2Y!S"-\I$IYwčjF$ w9 \ߪB.1v!Ʊ?+r:^!I$BϹB H"B;L'G[ 4U#5>੐)|#o0aڱ$I>}k&1`U#V?YsV x>{t1[I~D&(I$I/{H0fw"q"y%4 IXyE~M3 8XψL}qE$I[> nD?~sf ]o΁ cT6"?'_Ἣ $I>~.f|'!N?⟩0G KkXZE]ޡ;/&?k OۘH$IRۀwXӨ<7@PnS04aӶp.:@\IWQJ6sS%I$e5ڑv`3:x';wq_vpgHyXZ 3gЂ7{{EuԹn±}$I$8t;b|591nءQ"P6O5i }iR̈́%Q̄p!I䮢]O{H$IRϻ9s֧ a=`- aB\X0"+5"C1Hb?߮3x3&gşggl_hZ^,`5?ߎvĸ%̀M!OZC2#0x LJ0 Gw$I$I}<{Eb+y;iI,`ܚF:5ܛA8-O-|8K7s|#Z8a&><a&/VtbtLʌI$I$I$I$I$I$IRjDD%tEXtdate:create2022-05-31T04:40:26+00:00!Î%tEXtdate:modify2022-05-31T04:40:26+00:00|{2IENDB`Mini Shell

HOME


Mini Shell 1.0
DIR:/lib/python2.7/site-packages/passlib/crypto/
Upload File :
Current File : //lib/python2.7/site-packages/passlib/crypto/des.pyc
�
�
5Xc@sdZddlZddlmZddlmZmZmZmZmZddgZ	dZ
dZd	Zd
Z
dZdZeaaaad
�Zd�Zejd�Zd�Zd�Zd�Zd�Zeddd�Zd�Zd�Zddd�Z ddd�Z!dS(s�passlib.crypto.des -- DES block encryption routines

History
=======
These routines (which have since been drastically modified for python)
are based on a Java implementation of the des-crypt algorithm,
found at `<http://www.dynamic.net.au/christos/crypt/UnixCrypt2.txt>`_.

The copyright & license for that source is as follows::

    UnixCrypt.java 0.9 96/11/25
    Copyright (c) 1996 Aki Yoshida. All rights reserved.
    Permission to use, copy, modify and distribute this software
    for non-commercial or commercial purposes and without fee is
    hereby granted provided that this copyright notice appears in
    all copies.

    ---

    Unix crypt(3C) utility
    @version 0.9, 11/25/96
    @author  Aki Yoshida

    ---

    modified April 2001
    by Iris Van den Broeke, Daniel Deville

    ---
    Unix Crypt.
    Implements the one way cryptography used by Unix systems for
    simple password protection.
    @version $Id: UnixCrypt2.txt,v 1.1.1.1 2005/09/13 22:20:13 christos Exp $
    @author Greg Wilkins (gregw)

The netbsd des-crypt implementation has some nice notes on how this all works -
    http://fxr.googlebit.com/source/lib/libcrypt/crypt.c?v=NETBSD-CURRENT
i����N(texc(tjoin_byte_valuestbyte_elem_valuetirangeRt	int_typestexpand_des_keytdes_encrypt_blocki���I�������l����l�~�}�{�wIl���s�gcGCsfd�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�f}d�d�dddddddddd	d
ddd
f}ddddddddddddddddf}||f||f||f||f||f||f||f||ffaddd d!d"d#d$d%fad&d'd(d)d*d+d,d-fad.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=fad�S(>s3delay loading tables until they are actually neededii i i  ii$i i $I II I�I� I�I� II II I�I� I�I� i@i i@ i i@ i  i@  IIIIII	I	I@I@IHIHIAIAIIIIiIIiiIII@II@I�I@�I�I@�I�I�@I�I�@I��I�@�I��I�@�iiii@iPi@iPIIIIIIIIIIIIIIIi�ii�i�i��i�i��iI I III I I I I  I  I0I0I 0I 0i@ii@ii@ii@i�I@I�@I@I�@I@@I�@@lllllllli@ii@ii@ii@IIIIIIII I I!I!I I I!I!IIIiIIII�II�II�II�II�II�II�II�i Ii(I I(iIIi i(I I(I�I�I@I@�I@�II�I�i@I@I@�I@�i@ii�i�i�i@i@i@i�@i�@i�@i�@ii i$i$II I III$I$i�II�I�I I� I� I0I0I�0I�0IHIPIIXI@@I@IH@I@IP@I@IX@i@ I@I I@ I@I I@ II@I I@ IIIIIIIIIII@ I�@I� I�@ I@I I@ I�I�@I� I�@ l I l�l� Ill(I I l�l�(I�I@�I@I@�II�IDID�IDID�I�I�II�I �I$I$�I I �I$I$�ii@�I��I@�I@��i�i@i@�I�I��I@�I@��i@I i� I�I� i II i�i� I�I� I IIIiIIiiIIiI@I I@ i@�I�I@�i� i@� I� I@� iIIIllll l l IIII
II
II
II
i @I@@I @I @@I@I I @I@I@@I @I @@I� I�� I�I� I��I  I� I�  I�� I I @I@I @I @IDI DI @@ID@I D@I@ I@I(I@(I�I@�I�I@�I�I@�IIIIIIIIIIIIIIIIIIIIi�i��I�I��I��I���I�I��I��I���I��I���I���I����I�I�I��I�I��I��I���l@l @l Dl  Dl�@@l� @Dl� D@l�  DDiiiiiiiiiIIIIIIIIIi  i  i   i  i  i   i   i   i    I  I  I   I  I  I   I   I   I    i@I@ID@i@i@@I@@ID@@i@iD@I@@IDD@iD@iDD@I@D@IDDD@I@I@ID@I@I@@I@@ID@@I@ID@I@@IDD@ID@IDD@I@D@IDDD@I ��I  ��I ��I �I �I �I  �I �I��I  �I@�I�i@I@I�I@�I@II@�I@�I�i@I@@I@I@I@I@I@@I@@II@@I@I�@II�@i@I�I�@I@I�I�I�@I@I�@ I� I�@I@ I�I� I@I�@ I�@I@ I�@I @I�  I� @I @I�  @I  I� i� I  @I� @I I@I@@ I@@I@ I@ I@ I@I@ I@@I@@ l @I � l�@I  l@I �l �@I� l�@l �@l @IIIIIIIIIIiiiiiiiiiiiiiiiI��I��I���lllllllIIIIIIIIIIIi��i��i���I��I��I���I���I���I����iiiiiiiiiiiIIIIIIIIIiiiiiiiiiiiiiiiI@@I@@I@@@I@@I@@@I@@I@@@I@@@I@@@@IIIIIIIIIIIi@@i@@i@@i@@@i@@i@@i@@@i@@i@@@i@@@i@@@@iiiiiiiiiiN(iii i i i i  i  iii$i$i i i $i $(iI II I�I� I�I� II II I�I� I�I� (iii@i@i i i@ i@ i i i@ i@ i  i  i@  i@  (iIIIIII	I	I@I@IHIHIAIAIIII(iiiiIIIIiiiiIIII(iI@II@I�I@�I�I@�I�I�@I�I�@I��I�@�I��I�@�(iiiiiiiii@i@iPiPi@i@iPiP(iIIIIIIIIIIIIIII(iii�i�iii�i�i�i�i��i��i�i�i��i��(iiI I III I I I I  I  I0I0I 0I 0(iii@i@iii@i@iii@i@iii@i@(ii�I@I�@I@I�@I@@I�@@llllllll(iii@i@iii@i@iii@i@iii@i@(iIIIIIIII I I!I!I I I!I!(iiIIIIIIiiIIIIII(iI�II�II�II�II�II�II�II�(iiiii i i i iiiii i i i (iiIIi i(I I(iiIIi i(I I((iiiiIIIIi�i�i�i�I�I�I�I�(iII�I�i@I@I@�I@�iII�I�i@I@I@�I@�(iiiii@i@i@i@iiiii@i@i@i@(iiiii�i�i�i�i@i@i@i@i�@i�@i�@i�@(iiiiiiiiiiiiiiii(iii i iii$i$III I III$I$(iii�i�III�I�I I I� I� I0I0I�0I�0(iI@IIHIIPIIXI@I@@I@IH@I@IP@I@IX@(ii@i i@ II@I I@ II@I I@ II@I I@ (iIIIIIIIIIIIIIII(iI@I I@ I�I�@I� I�@ II@I I@ I�I�@I� I�@ (iIll I I l�l� IIll(I I l�l�((iI�II�I@I@�I@I@�II�II�IDID�IDID�(iI�II�II�II�I I �I$I$�I I �I$I$�(iiiiiiiiiiiiiiii(ii�i@i@�I�I��I@�I@��ii�i@i@�I�I��I@�I@��(iiiiiiiii@i@i@i@i@i@i@i@(ii II i�i� I�I� ii II i�i� I�I� (iiiii i i i IIIII I I I (iiIIiiIIiiIIiiII(iiiiiiiiiiiiiiii(ii@II@i i@ I I@ i�i@�I�I@�i� i@� I� I@� (iiiiIIIIlllll l l l (iIIIIIIIII
II
II
II
(ii@i i @I@I@@I @I @@II@I I @I@I@@I @I @@(iI�I�I��I I� I� I�� I I�I� I��I  I� I�  I�� (iI II I@I @I@I @I@I @IDI DI@@I @@ID@I D@(iI@I I@ II@I(I@(I�I@�I�I@�I�I@�I�I@�(iIIIIIIIIIIIIIII(iIIIIIIIIIIIIIII(ii�i�i��I�I��I��I���I�I��I��I���I��I���I���I����(iI�I�I��I�I��I��I���l@l @l Dl  Dl�@@l� @Dl� D@l�  DD(iiiiiiiiiiiiiiii(iIIIIIIIIIIIIIII(ii i i  i i  i  i   i i  i  i   i  i   i   i    (iI I I  I I  I  I   I I  I  I   I  I   I   I    (ii@I@ID@i@i@@I@@ID@@i@iD@I@@IDD@iD@iDD@I@D@IDDD@(iI@I@ID@I@I@@I@@ID@@I@ID@I@@IDD@ID@IDD@I@D@IDDD@(@I ��I�i  I  ��i I ��I �i  I ��I ��I �I �I  �i iI �I�i I �I��I  ��I �I �I �i I�I��I  �I�I  �I  �iiI  ��I �I �I ��I�I �I �I  �I�I��i  I ��i i  I �I  ��I��I �I  �i I �I �iI�i I  �I ��i I  �I�I ��(@I@�iI�i@I@I�I@�I�I�I@II@�II@�i@IiI@�I@I�I�i@iII@�I�I@�I@i@iI�I@�II@�I@�I�I@�II@ii@I�iI@I�i@I�I@�I@�I�iI@II@�I�i@I@iI�I@�I@�Ii@I�(@i@I@@II@I@i@I@I@I@I@I@@iI@@IiI@@iI@I@@III@@I@i@I@@I@I@I@@I@ii@I@I@@IiI@II@I@@I@iI@@I@I@@I@i@I@@iI@i@i@I@@I@I@I@I@I@iI@@Ii@I@II@@(@I�@II�I�@ii@I�I�@I@I�iI�I�I�@i@iI�@I@II�I@I�i@II�iI�@I@II�@I�@i@I�@I�i@I�I@II�i@I�iII�@iI�@I@IiI�@I�@i@I�@I�II�@I�@I@i@I�I�iI�I@(@i�II@I�@ I� I�@I@ I�II I� I@I�@ I� I�@iI@i�I I@ I�@I@ iI� I I�@ I�@ I I�I@I@ I�@I�@I�@ I I�II I� I�@i�I@I�@ iI@ i�I@I I�@ I@iI�@ I� I�@I@ II@I� I�@I@ I I@ I�I� (@I�@I @iI�  I @I I� @i I @I�  @I  i�I� I�@i� I  @i I� @I� @iI I@I�  I� @I�  @i� i�I @I@I  I  @I� I @i�I� I  @I�  I @iI� i�I I� @i I @I�  @I  I@I�  @I  i I� @I�@i� I  @iI I�@I� @I�  i� I @I@I� @(@I@I I I@I@@ I@@I@ iiI@ I@ I@I@I@ I@I@ I@ I@I@@I@@ iI I@I@ I@@I@@ I@ I@I@@ I@@I iI@@ I@I@@I@ I@I iI@@I@ I@@ I@ iI I@I@I iI@ I I@ I@ I@I@@ iI@ I@I@@I@@ I@I@ I@I@@(@l @I � l�@iI  l@I �l �@l@i I� l�@l�@l �@l @I �I l�@l@I  l �@l @iI� i I�l �@l @I�I I � l@I�I l @l �@l�@i iI� l @l �@I  l@I � l@l@I  l �@I�I �l @I� l�@l �@I �l@I � l�@ii l @I l�@(iI I I  I I  I  I   I I  I  I   I  I   I   I    (iIIIIIIIIIIIIIII(ii i i  i i  i  i   i i  i  i   i  i   i   i    (iiiiiiiiiiiiiiii(iI�I�I��I�I��I��I���llllllll(iIIIIIIIIIIIIIII(ii�i�i��i�i��i��i���I�I��I��I���I��I���I���I����(iiiiiiiiiiiiiiii(iIIIIIIIIIIIIIII(iIIIIIIIIIIIIIII(iiiiiiiiiiiiiiii(iiiiiiiiiiiiiiii(iI@I@I@@I@I@@I@@I@@@I@I@@I@@I@@@I@@I@@@I@@@I@@@@(iIIIIIIIIIIIIIII(ii@i@i@@i@i@@i@@i@@@i@i@@i@@i@@@i@@i@@@i@@@i@@@@(iiiiiiiiiiiiiiii(tPCXROTtIE3264tSPEtCF6464(tPC1ROTtPC2ROTAtPC2ROTB((s6/usr/lib/python2.7/site-packages/passlib/crypto/des.pyt_load_tablesQsH
							cCs7d}x*|D]"}|||d@O}|dL}q
W|S(sdReturns the permutation of the given 32-bit or 64-bit code with
    the specified permutation table.iii((tctptouttr((s6/usr/lib/python2.7/site-packages/passlib/crypto/des.pyt_permute9s

s>QcCs
tj|�S(N(t_uint64_structtpack(tvalue((s6/usr/lib/python2.7/site-packages/passlib/crypto/des.pyt_pack64JscCstj|�dS(Ni(Rtunpack(R((s6/usr/lib/python2.7/site-packages/passlib/crypto/des.pyt	_unpack64MscCstj|�dS(Ni(RR(R((s6/usr/lib/python2.7/site-packages/passlib/crypto/des.pyt_pack56PscCstjd|�dS(Nti(RR(R((s6/usr/lib/python2.7/site-packages/passlib/crypto/des.pyt	_unpack56Ssi1i����cs�t�t�r3t��dkr�td��q�nat�t�r�dksZ�tkritd��nttt����St	j
�dd��t���t�fd�t
D��S(sDconvert DES from 7 bytes to 8 bytes (by inserting empty parity bits)iskey must be 7 bytes in sizeis'key must be 56-bit non-negative integersbytes or inttkeyc3s!|]}�|?d@d>VqdS(iiN((t.0tshift(R(s6/usr/lib/python2.7/site-packages/passlib/crypto/des.pys	<genexpr>us(t
isinstancetbytestlent
ValueErrorRtINT_56_MASKRRRRtExpectedTypeErrorRRt_EXPAND_ITER(R((Rs6/usr/lib/python2.7/site-packages/passlib/crypto/des.pyRcscCs�t|t�rFt|�dkr0td��nttt|���St|t�r|dksm|tkr�td��q�nt	j
|dd��|dL}d}d}x6|dkr�||d	@|>O}|dL}|d
7}q�W|t@s�t�|S(sGconvert DES key from 8 bytes to 7 bytes (by discarding the parity bits)iskey must be 8 bytes in sizeis'key must be 64-bit non-negative integersbytes or intRii8ii(R R!R"R#Rtshrink_des_keyRRtINT_64_MASKRR%tAssertionError(Rtresulttoffset((s6/usr/lib/python2.7/site-packages/passlib/crypto/des.pyR'ws"

iicCs�t|t�r`t|�dkr0t|�}n!t|�dkrQtd��nt|�}ntj|dd��t|t�r�t|�dkr�td��nt|�}ntj|dd��t||||�}t	|�S(s�encrypt single block of data using DES, operates on 8-byte strings.

    :arg key:
        DES key as 7 byte string, or 8 byte string with parity bits
        (parity bit values are ignored).

    :arg input:
        plaintext block to encrypt, as 8 byte string.

    :arg salt:
        Optional 24-bit integer used to mutate the base DES algorithm in a
        manner specific to :class:`~passlib.hash.des_crypt` and its variants.
        The default value ``0`` provides the normal (unsalted) DES behavior.
        The salt functions as follows:
        if the ``i``'th bit of ``salt`` is set,
        bits ``i`` and ``i+24`` are swapped in the DES E-box output.

    :arg rounds:
        Optional number of rounds of to apply the DES key schedule.
        the default (``rounds=1``) provides the normal DES behavior,
        but :class:`~passlib.hash.des_crypt` and its variants use
        alternate rounds values.

    :raises TypeError: if any of the provided args are of the wrong type.
    :raises ValueError:
        if any of the input blocks are the wrong size,
        or the salt/rounds values are out of range.

    :returns:
        resulting 8-byte ciphertext block.
    iiskey must be 7 or 8 bytesR!Rsinput block must be 8 bytestinput(
R R!R"RR#RRR%tdes_encrypt_int_blockR(RR,tsalttroundsR*((s6/usr/lib/python2.7/site-packages/passlib/crypto/des.pyR�s!cCs�|dkrtd��n|dks3|tkrBtd��nt|t�sitj|dd��n'|dks�|tkr�td��nt|t�s�tj|dd��n'|dks�|tkr�td	��ntd$kr�t	�nt
\}}}}}}	}
}d
�}t||��}
|d@d>|d
@d>B|d@d?B|d@d?B}|dkrxd}}nN|d?d@|d@B}t|t
�}|d?d@|d?d@B}t|t
�}x�|r\|d8}xp|
D]h\}}|d?|A|@}|d>|A|A|A}|||d?d@||d?d@A||d?d@A||d?d@A||d?d@A|	|d?d@A|
|d?d@A||d?d@AN}|d?|A|@}|d>|A|A|A}|||d?d@||d?d@A||d?d@A||d?d@A||d?d@A|	|d?d@A|
|d?d@A||d?d@AN}q�W||}}q�W|d?d@|d>d @B|d!?d"@B|d>d#@B}t|t�S(%s�encrypt single block of data using DES, operates on 64-bit integers.

    this function is essentially the same as :func:`des_encrypt_block`,
    except that it operates on integers, and will NOT automatically
    expand 56-bit keys if provided (since there's no way to detect them).

    :arg key:
        DES key as 64-bit integer (the parity bits are ignored).

    :arg input:
        input block as 64-bit integer

    :arg salt:
        optional 24-bit integer used to mutate the base DES algorithm.
        defaults to ``0`` (no mutation applied).

    :arg rounds:
        optional number of rounds of to apply the DES key schedule.
        defaults to ``1``.

    :raises TypeError: if any of the provided args are of the wrong type.
    :raises ValueError:
        if any of the input blocks are the wrong size,
        or the salt/rounds values are out of range.

    :returns:
        resulting ciphertext as 64-bit integer.
    isrounds must be positive integeris(salt must be 24-bit non-negative integertintRs'key must be 64-bit non-negative integerR,s)input must be 64-bit non-negative integercssLxEtD]=\}}t||�}t||�}|t@|t@fVqWdS(sCgiven 64-bit key, iterates over the 8 (even,odd) key schedule pairsN(RRt_KS_MASK(tks_oddtp_eventp_oddtks_even((s6/usr/lib/python2.7/site-packages/passlib/crypto/des.pyt_iter_key_schedulesi?ii�ii�ii�iiI����iUUUUi i:i2i*i"ii
iIi!l�C�i#iI����N(R#tINT_24_MASKR RRR%R(RtNoneRR	tlistRRR
(RR,R.R/tSPE0tSPE1tSPE2tSPE3tSPE4tSPE5tSPE6tSPE7R6tks_listtLtRR5R2tktBtC((s6/usr/lib/python2.7/site-packages/passlib/crypto/des.pyR-�sP"
	#
	
��#("t__doc__tstructtpasslibRtpasslib.utils.compatRRRRt__all__R7R$R(t_KDATA_MASKt
_KPARITY_MASKR1R8RRR	R
RRtStructRRRRRR&RR'RR-(((s6/usr/lib/python2.7/site-packages/passlib/crypto/des.pyt<module>&s2	(		��							8