a fWcO@sBdZddlZddlmZdgZdaaddZGdddeZ dS)zGpasslib.crypto._blowfish.base - unoptimized pure-python blowfish engineN) repeat_stringBlowfishEnginecCs(gdagdgdgdgdgadS)N)ij?$lF i.iDspl"8Hi1)i.llXi!(Eiw8lf|il 4l)XlPiՄ?l jlU-$l{(l b"l51ir/l_5 l/qi~&jlEtlXbiG$ll"gil| i iciiNWql~Hl~=&iit iXriX͋qlJ*iT{lYl9Ua8i`*l#0 i`(lyl8ql\i:`ill> =`lw*.l'Kbzi/xi`\`Ul%Ll+TibHWi@cij9Ui*l4\iiAlBir|lgi*oci]ũ+i1tl>l7l3:_i\$liS2ziw(iH;iKklh i!(fi al)Cvi`|Hi2]l]]_lu Sl#L8lVi>#l,-'ioml9BiD .l IiJil^?<iBh!llmia glWiҠQjlh/0l(',l3Vil ni;zlPpwti*~leCiv9i>YfllioEiå}i^;lu@ls iD@ijVibNiw?6iri=Bi$7lH lj6iIirSl{2iy%l^mlPGl;Lll`.ilORi`@iž\^ic$jiohiSl>i9ioR;iQml,a6lDEl =^lP}lJf<i(fiK.lW(itEl9_$l{siyUi 2`lB-iyr,@i%gl#?vliKl"d6iulW<l i.Vli.>l(*i~(l2XlsUi'[ilXwl]#Clqi=lCzilJi[-lyd4leEmlI%iKlrCl3~IiAblFlJA^iLw6l i+lMZ+l!]lq[UiՓklQ!l%_l/[xllbld+$dl8lp i^OiÏhlq#lAQgi"//lw|l-TllLAKltjilblOPil`'zi;|l([%if_lw*ls'iw!le ZMiwlBl5:wl /Wi>{l,lI~<\i-%i^q ih"iWi6d$l9`icUiYiCxlS2i[} iŹlvLiϕbihiAJsNl-fiJ{iRQl)4l?W,lF7yiv`+ltioiWlkl-ei *l!ellysOl.h~ldV i]-Sl?SiGijn(ipzKlD)fkl. 6l#&2l&Zi}ߧIl`9lf2lq UYiiilRdVlci6i)L ul@@l>:0HiT?ieB[ikl?3lCl0_i8-Ml]J`i Ll&kici^i?kh i>ii\lDiWl7Zu`l `l8`ilu\itGYlAHlMqDi/;i2i1>i8TNimOi Bolli,iy|$iryVl _ylw4=l&3l.gl.?9irUi$qk.iPlM ?iGXzitl?yl}Rl:lXl 7ifC clClG8^i2l7;:i$iCMiQe*iPi:iqiUN1lwXi_iV5lkGG/i;Ziwi=Nie)l3l }i%fRixL.lj3!8l* lxj)lS iEl+UGlO6lOulBtl;^i;Oei!Aly<0lM ljGHiPb=l!iF&[lyl6i$itii GiVi[ lH2Zitbi#i*BXiU i>iap?#ir3lA~&ll,i;"liY7|l`ti@ln2lLiPlUXQi5al'Rl iZlJl.z<l4lg{iɞl[6i͈Uiy_gl@CFle4 i8>qi(=l bi!>lJ=`l+Ml-7(lhZzRl@)l&ll4)(i Aivl.kylhD)lq$(ij 3iԷCiaPi.9lFEH.itO!l@iMlk-ipiE/fl xiimi1l'-iA9UlGJ4l Wi%xP(i)Siچ, lmlSibhli.ihi'i?Ol-Ql`kizl|Ul_n&l#iB*k@i5 l3lWs\iN;iiVmKi1f&lUitn:l2C:iAhl lNuvl31iV@El'ti::SUi l)|lK-!igUlX+Blc)Rl3[3lVJTLi%1?i~^l|1R lh{ip/'l\vi,(lH+l"mIi?HliiAiyG@in]iQ_2l@7+lAyeid5Ai4x{%i`*`lh?ilci´i2lO^li#ki>3ib $;l"9}]l"e l tMl <i(-lEx$ lo+ib}dluOioITlHl'};l }fiAcG lt]2ino:l7}il`\%Pl]ClLa72l k6lU i7,gmi;e'lh9l Rbllrji ii{fl}l O#Al^*2l/&vi$[Qiy{i;vi.97lyY"lbMl-1\hiBhl;+ iLui.xi7BjlQ$oi满iPcKikiiؽ%=lCEiYBDi lnl2l*jW+iNgdl_( 5li}idlWy;l@ai{x`iM``lF#lpliEwl|m.l3klq+=`lAai_^;lZ}!SlWi<iٷ,iQ+l:,-i}}l>#i(-}|i%l8[irZiLZlq,S@l%3@iGlz'[lDQiW;(l)fqi(.yi_xlU`ZlD,ol^Gimlmi%aidliWlMiyirltllGox~lcd7%i]/Tlw]lpcli tlWNlqpl]}^i@@iNijF4il(`Cl:0+ilH i;?oi 5iKi'r'i`al?&Ol+ytvi%E4l9AiKyQi2/l:?@l~H9@lQyll*CiIl=(l^!l8Z*i*9lg6" l|1lO+bAlYlAl+4@'lriAt i4Kl q| l2lk>l./27lGoLilTZJilylo~|iflXzlR l"mlWsGjl#vdLl15P'iVlbYiuZi6nlslb,=lIriPLiVqlGMi z2iEl{lSTibl?Kviҽ5iiql"dl|Oml+i>Si@i`8iG%l ptlvNnišwi``u lN~ l izi~Li\Hiijla-lix!l^Li-% ?lfl2anl[biߏWir:) BLOWFISH_P BLOWFISH_SrrA/usr/lib/python3.9/site-packages/passlib/crypto/_blowfish/base.py_init_constantss CCCrc@sJeZdZddZedddZddZdd Zd d Zd d Z ddZ dS)rcCs,tdurttt|_ddtD|_dS)NcSsg|] }t|qSr)list).0boxrrr ;z+BlowfishEngine.__init__..)rrr PrS)selfrrr__init__7s zBlowfishEngine.__init__cCsDt|tsJt|}|s$dg|St||d>}td|f|S)zwconvert data to tuple of 4-byte integers, repeating or truncating data as needed to reach specified sizerz>%dI) isinstancebyteslenrstructunpack)datasizeZdlenrrr key_to_words@s  zBlowfishEngine.key_to_wordscCs|j|j}}||dN}d}|dkr|d|d?|d|d?d@|d|d?d@A|d |d@d @||A|A}||}}|d7}q||dA|fS) z)loop version of blowfish encipher routinerrl)rr)rlrrrirrrencipherTs  6  zBlowfishEngine.encipherc Cst|dksJd|j|j|j}}}d}|dkrT||||N<|d7}q.d}}}|dkr|||\||<||d<\}}|d7}q`|D]<}d}|dkr|||\||<||d<\}}|d7}qqdS)z(perform stock Blowfish keyschedule setupr(key_words must be at least as large as PrrrNrrrr&) r key_wordsrrr&r%r#r$r rrrexpandds  " "zBlowfishEngine.expandc Csdt|dksJdt|}|s(Jd|d@r8Jd|j|j|j}}}d}|dkrx||||N<|d7}qRd}}} } |dkr| ||N} | ||dN} |d7}||krd}|| | \||<||d<\} } |d7}q|D]n} d}|dkr| ||N} | ||dN} |d7}||kr2d}|| | \| |<| |d<\} } |d7}qqd S) z9perform EKS' salted version of Blowfish keyschedule setuprr'zsalt_words must not be emptyrz salt_words must have even lengthrrr(Nr)) rr* salt_wordsZ salt_sizerrr&r%sr#r$r rrreks_salted_expand|s8   "   "z BlowfishEngine.eks_salted_expandcCs0|j}d}||kr,|||||d7}q dS)z-perform rounds stage of EKS keyschedule setuprrN)r+)rr*r,roundsr+nrrreks_repeated_expands z"BlowfishEngine.eks_repeated_expandcCs2|j}d}||kr*|||\}}|d7}q ||fS)z.repeatedly apply encipher operation to a blockrr)r&)rr#r$countr&r0rrrrepeat_enciphers  zBlowfishEngine.repeat_encipherN)r) __name__ __module__ __qualname__r staticmethodrr&r+r.r1r3rrrrr5s  % ) __doc__rZ passlib.utilsr__all__rrrobjectrrrrrs $