o
    5hO                     @   sB   d Z ddlZddlmZ dgZd aadd ZG dd deZ	dS )zGpasslib.crypto._blowfish.base - unoptimized pure-python blowfish engine    N)repeat_stringBlowfishEnginec                   C   s(   g da g dg dg dg dgad S )N)ij?$l   F i.iDspl   "8H i1)i.l   lX i!(Eiw8l   f| il4l   )X l   P iՄ?l   	j l   U-$ l   { (   l   b" l   51 ir/l   _5  l   /q i~&jl   Et l   Xb iG$l   l"g il   | i iciiNWql   ~H l   ~=&i itiXriX͋ql   J* iT{l   Y l   9Ua8 i`*l   #0 i`(l   y l   8q l   \ i:`ill   >
=` l   w*. l   'Kbz i/xi`\`Ul   %L l   +T ibHWi@cij9Ui*l   4\i iAl   B ir|l   g i*oci]ũ+i1tl   > l   7 l   3:_ i\$liS2ziw(iH;iKkl   h	 i!(fi	al   )Cv i`|Hi2]l   ]]_ l   u
S l   #L8 l   V i>#l   ,-' ioml   9B iD.l    I iJil   ^?< iBh!l   lm iagl   W iҠQjl   h/0 l   (', l   3V ilni;zl   Ppwt i*~l   eC iv9i>Yfl    l    ioEiå}i^;l   u@ l   s  iD@ijVibNiw?6iri=Bi$7l   H  l   j6 iIirSl   {2 iy%l   ^m l   PG l   ;Ll l   `. il   OR i`@i\^ic$jiohiSl>i9ioR;iQml   ,a6 l   DE l   	=^ l   P} l   Jf< i(fiK.l   W( itEl   9_$ l   {s iyUi
2`l    B- iyr,@i%gl   #?v l   iK l   "d6 iu<l   kz iP/l   R
Z i=2l   `Gz iH{1Si >l   W< l    i.Vl   i.> l   (* i~(l   2X l   sU i'[il   Xw l   ]#C l   q i=l   Cz ilJi[-l   yd4 l   eEm l   I% iKl   rC l   3~I iAbl   F l   JA^ iLw6l     i+l   MZ+ l   !] l   q[U iՓkl   Q! l   %_ l   /[x l    l   b l   d+$d l   8 l   p  i^OiÏhl   q# l   AQg i"//l   w| l   -T l    l   LAK l   tj il   b l   OPi l   `'z i;|l   ([% if_l   w* l   s' iw!l   e ZM iwl   B l   5:w l   /W i>{l   , l   I~<\ i-% i^q i h"iWi6d$l   9` icUiYiCxl   S2 i[} iŹl   vL iϕbihiAJsNl   -f iJ{iR Ql   )4 l   ?W, l   F7y iv`+l    t ioiWl   kl-e i*l   !el l   ysO l   .h~ l   dV
 i]-Sl   ?S iGijn(   ipzKl   D)fk l   .	6 l   #&2 l   &Z i}ߧIl   `9 l   f2 l   qUY iiilRdVl   c i6i)L	ul   @@ l   >:0H iT?ieB[ikl   ?3 l   C l   0_ i8-Ml   ]J` i Ll   &k ici^i?kh	i>i<ipjki5hiRl   S8o l   7T i>i\l   D iWl   7Zu` l   ` l   8` i l   u\ it<iXz%l   !8 l   "# i/|l   sGd( iG"i:i7l   4vj l   ]5 l   FaR il   >GY l   AH l   MqD i/;i2i1>i8TNimOiBol   l i,iy|$iryVl   	_y l   w4= l   &3 l   .g l   .?9 irUi$qk.iPl   M	? iGXzitl   ?y l   }R l   :lX l   
7 ifC	cl   C l   G8^ i2l   7;: i$iCMiQe*i Pi:iqiUN1l   wX i_iV5l   kGG/ i;<i	$Yl   fe l   {/ l   ,?u= in<l   pE l   oU l   
^ i*>Ziwi=Nie)l   3 l   	}  i%fRixL.l   j3!8 l   * l   xj) l   S<K i-
l   Ne i=+6i&9i`yi#Rl   &n l   n~[W l   fU l   ExG l   HL l   7b i(l   ]e l   Z| i!Xeihl   %] l   ;_6 i}*i/n[i(!ipa)l   uGY iai0l   =V i4l   cT l   \j i9pLl   =+ l   ^U l   ] i,b`l   \V9 l   ne idil   iF@ iPZei2Zh@i*<i1l   8C  l   6 l     l   ~+ i}=bl   op l   w-/ i_ihi)5l    l   _- iXxiWicr"l   C7 iFl   
f iT0.Sl   H i(1miXi4l   amQ| l   s<\ iJ]l   7P i]Bi> iEl   +UG l   O6 l   Ou l   Bt l   ;^ i;Oei!Al   y<0 l   M
 l   jGH iPb=l   ! iF&[l   y l   6 i$itiiGiVi [	l   H2Z itbi #i*BXiUi>iap?#ir3l   A~& l   l, i;"liY7|l   `t i@l   n2 l    L iPl   UXQ i5al   'R l   
 iZl   J  l   .z< l   4 l   g{ iɞl   [6 i͈Uiy_gl   @CF l   e4 i8>qi(=l    b i!>l   J=` l   +M l   -7 (   l   hZzR l   @) l   &l l   4)( i Aivl   .ky l   h D) l   q$( ij 3iԷCia Pi.9l   FEH. itO!l   @ iMl   k- ipiE/fl   	x iimi1l   '- iA9Ul   GJ4 l   
W i%xP(i)Siچ,
l   mlS ibhl    i. ihi'i?Ol   -Q l   `k izl   |U l   _n& l   # iB*k@i5 l   3 l   Ws\ iN;iiVmKi1f&l   U itn:l   2C: iAhl     l   Nuv l   31 iV@El   't i::SUi l   )| l   K-! igUl   X+B l   c)R l   3[3 l   VJTL i%1?i~^l   |1R  l   h{ ip/'l   \v i,(l   H+ l   "mI i?Hl    iiAiyG@in]iQ_2l   @7+ l   Aye id5Ai4x{%i`*`l   h? ilci´i2l   O^ l    i#ki>3ib$;l   "9}] l   "e l   tM l   < i(-l   Ex$  l   o+ ib}dl   uO ioITl   H l   '}; l   }f iAcG
l   t]2 ino:l   7}i l   `\%P l   ]C l   La72 l   k6 l   U i7,gmi;e'l   h9 l   Rb l    l   rj iii{fl   } l   O#A l   ^*2 l   /&v i$[Qiy{i;vi.97l   yY" l   bM  l   -1\h iBhl   ;+ iLui.xi7Bjl   Q$o i满iPcKikiiؽ%=l   CE iYBDi
l   nl2 l   *jW+ iNgdl   _(5 l   i} idl   W y; l   @a i{x`iM``l   F# l   pl iEwl   |m. l   3k l   q+=` l   A a i_^ <iWwl   $.{ iBFUl   a.~ iXNl   }e l   8oh l   = ifSl   tg l   Urh iFia&zl   _; l   y l   " iYnFipW l   U l   L^ l   ,r l   w iHbitul   n l   	\SA i	-fl   3Fd l   P i	i%Jini=iߤl   rC iih(l   Zo9 i9Wl   NC iROi^Pl   N l   5@ i'l   '5 iA?wl   L ial   (z.` l    iX` ib}0iמic8#iSl   4 l   Vnw l   6y! l   }W l   v i	oi|Ki=
r9i$||l   _r iMri[l   8=' l   xUZ il   |z0 iMi^Pl   fb l   
E i<QlioiNViο*6l   7H; l   424/ l   $ igi `@(   i79:l   u' l   7wW i-Zig\iB7Ol   @'' l   y3 l   #* l   s~ l   ~Z, l   {D l   ko iE!l   1d in6ji/HWl   yn(y l   vF iIeiSi}ލFl   
* iMLiۻ9)l   PFtS l   &*Y l   c| l   UC iQ-jicl   "n5 l   B i.$Cl   <J l   P9 l   a l   Mj7 l   P l   [t i&(l   :tN iKl   b^ l   o_ l   wn iio?iY
wl   ) l   a l   f6 i>;l   Z}!S l   Wi< iٷ,iQ+l   :,- i}}l   ># i(-}|i%l   8[ irZiLZl   q,S@ l   %3@ iGl   z'[ l   DQ iW;(l   )fq i(.yi_xl   U`Z l   D,o l   ^G iml   m i%aidl    iW<l   N. l   *tR im?i!cl   f8k i&i(3ul   }b i4Vl   <t iwQ(l   Y l   gQW l   _[ iQMi08ibX7l   yA& l   T l   {|v id!Qi2Owl   ~cmQ l   F=R iiSHidl   \E l   $2: i-iif!	l   
F4g iEdilXi i[i@Xl    ikl   ~jD; iEY:iD
5>l   Miy irl   t l    l   Gox~ l   cd7% i]/Tl   w] l   pcl itl   WN l   qp l   ]}^ i@@iNijF4il   (`C l   :0+ il   H  i;?oi 5iKi'r'i`al   ?&O l   +ytv i%E4l   9A iKyQi2/l   :?@ l   ~H9@ l   Qy l    l   *C iIl   =( l   ^! l   8Z* i*9l   g6" l   |1 l   O+bA l   Y<o i:Cl   e iE'l   ,". i*iql   %(7 l   au l   m l   YdP iѨl   ^m l   j
F iePl   B$ l   nA i;ۘiLidx2l   2?> l   A l   +4@' l   r iAt
i4Kl    q| l   2 l   k> l   ./27 l   GoL il   TZJ il   y l   o~| ifl   Xz l   R	 l   "m l   WsGj l   #vdL l   15P' iVl   bY iuZi6nl   s l   b,= l   Ir iPLiVql   GM i
z2iEl   { l   ST i bl   ?Kv iҽ5iiql   "d l   |Om l   + i>Si@i`8iG%l    pt l   vNn išwi``u l   N~ l    izi~Li\Hiijl   a- l   ix! l   ^L i-%	?l   f l   2an l   [b iߏWir:)
BLOWFISH_P
BLOWFISH_S r   r   q/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/passlib/crypto/_blowfish/base.py_init_constants   s   CCC r   c                   @   sJ   e Zd Zdd ZedddZdd Zdd	 Zd
d Zdd Z	dd Z
dS )r   c                 C   s,   t d u rt  tt | _dd tD | _d S )Nc                 S   s   g | ]}t |qS r   )list).0boxr   r   r   
<listcomp>;  s    z+BlowfishEngine.__init__.<locals>.<listcomp>)r   r   r	   Pr   S)selfr   r   r   __init__7  s   
zBlowfishEngine.__init__   c                 C   sD   t | tsJ t| }|sdg| S t| |d> } td|f | S )zwconvert data to tuple of <size> 4-byte integers, repeating or
        truncating data as needed to reach specified sizer      z>%dI)
isinstancebyteslenr   structunpack)datasizedlenr   r   r   key_to_words@  s   
zBlowfishEngine.key_to_wordsc                 C   s   | j | j}}||d N }d}|dk rL|d |d?  |d |d? d@   |d |d? d@  A |d	 |d@   d
@ || A |A }||}}|d7 }|dk s||d A |fS )z)loop version of blowfish encipher routiner                  r         l    )r   r   )r   lrr   r   ir   r   r   encipherT  s"   6
zBlowfishEngine.encipherc           	      C   s   t |dks
J d| j| j| j}}}d}|dk r-||  || N  < |d7 }|dk sd } }}|dk rP||| \||< ||d < \}}|d7 }|dk s7|D ]!}d}|dk rs||| \||< ||d < \}}|d7 }|dk sZqRdS )z(perform stock Blowfish keyschedule setupr   (key_words must be at least as large as Pr   r   r      Nr   r   r   r&   )	r   	key_wordsr   r   r&   r%   r#   r$   r   r   r   r   expandd  s(   ""zBlowfishEngine.expandc                 C   st  t |dks
J dt |}|sJ d|d@ rJ d| j| j| j}}}d}|dk r?||  || N  < |d7 }|dk s-d } } }	}
|dk r||	|| N }	|
||d  N }
|d7 }||krcd}||	|
 \||< ||d < \}	}
|d7 }|dk sK|D ]9}d}|dk r|	|| N }	|
||d  N }
|d7 }||krd}||	|
 \||< ||d < \}	}
|d7 }|dk sq~d	S )
z9perform EKS' salted version of Blowfish keyschedule setupr   r'   zsalt_words must not be emptyr   z salt_words must have even lengthr   r   r(   Nr)   )r   r*   
salt_words	salt_sizer   r   r&   r%   sr#   r$   r   r   r   r   eks_salted_expand|  sB   "	"z BlowfishEngine.eks_salted_expandc                 C   s:   | j }d}||k r|| || |d7 }||k s	dS dS )z-perform rounds stage of EKS keyschedule setupr   r   N)r+   )r   r*   r,   roundsr+   nr   r   r   eks_repeated_expand  s   z"BlowfishEngine.eks_repeated_expandc                 C   s8   | j }d}||k r|||\}}|d7 }||k s	||fS )z.repeatedly apply encipher operation to a blockr   r   )r&   )r   r#   r$   countr&   r1   r   r   r   repeat_encipher  s   zBlowfishEngine.repeat_encipherN)r   )__name__
__module____qualname__r   staticmethodr   r&   r+   r/   r2   r4   r   r   r   r   r   5  s    	%	)
__doc__r   passlib.utilsr   __all__r   r   r   objectr   r   r   r   r   <module>   s      $