U
    ;g                     @   s4  d dl Z d dlZdddddddd	gZd
d Zdd Zdd Zdd Zze W n0 ek
r|   e	Zdd Zdd Zdd ZY nX G dd de
ZG dd	 d	e
ZG dd de
ZG dd deZG dd deZG dd deZG dd deZG dd deZG d d deZG d!d deZeeeeeed"ZdS )#    NAESAESModeOfOperationCTRAESModeOfOperationCBCAESModeOfOperationCFBAESModeOfOperationECBAESModeOfOperationOFBAESModesOfOperationCounterc                 C   s,   | d d> | d d> B | d d> B | d B S )Nr                      )wordr   r   I/opt/bot/vods_filmes/script/venv/lib/python3.8/site-packages/pyaes/aes.py_compact_word=   s    r   c                 C   s   t dd | D S )Nc                 s   s   | ]}t |V  qd S Nord.0cr   r   r   	<genexpr>A   s     z#_string_to_bytes.<locals>.<genexpr>)listtextr   r   r   _string_to_bytes@   s    r   c                 C   s   d dd | D S )N c                 s   s   | ]}t |V  qd S r   )chr)r   br   r   r   r   D   s     z#_bytes_to_string.<locals>.<genexpr>)joinbinaryr   r   r   _bytes_to_stringC   s    r%   c                 C   s   | | S r   r   ar!   r   r   r   _concat_listF   s    r(   c                 C   s   t | tr| S dd | D S )Nc                 S   s   g | ]}t |qS r   r   r   r   r   r   
<listcomp>T   s     z$_string_to_bytes.<locals>.<listcomp>)
isinstancebytesr   r   r   r   r   Q   s    
c                 C   s   t | S r   r+   r#   r   r   r   r%   W   s    c                 C   s   | t | S r   r,   r&   r   r   r   r(   [   s    c                   @   s4  e Zd ZdZddddZdddd	d
dddddddddddddddddddddd d!d"d#gZdd$d%d&d'd(d)d"d*dd+d,d-d.dd/d0d1d2dd d3d4d5d6dd7d8d9d:d;d<d=d>d?d@ddAdBdCdDdEdFdGdHddIdJddKdLdMdNdOdPddQdRddSdTdUdVdWdXdYdZd[dd\d]d^d_d`daddbdcddddedfdgdhddidjdkddldmdndodpdqdrdsd!dtdudvddwdxdydzdd{d|d}d~dddddddddddddd
dddddddddddddddddddddddddddddddddddddddddddddddd#ddddddddddddddddddd	dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd ddg Zd_dXddd*ddEdddddddd.dud$dcdnd1dddddDddvdddddld d&dddddLdddpdddd dMdd	dddddddVd/dkd7ddddfdd;ddddddddd:ddCdddddddd|d>dhddddJdddddddddddgdddddBddqdPdddyddsdZddd0dAdddd8dddddd(dd#dddd+dddd'drdd5ddddOddddd6ddxdSdzddddWdd\d4dGd[dHddbd"dd)d=dddtdNdmddidddddddddd<d-ddd]dddddwddQdKdIdjdRd
d3dUdddddd{ddddodddFdd~d?d2d9d!d^dd`dddddddTdd}dYdedddd,dddd%dad@ddddddddg Zddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdgdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddÐdĐdŐdƐdǐdȐdɐdʐdːd̐d͐dΐdϐdАdѐdҐdӐdԐdՐd֐dאdؐdِdڐdېdܐdݐdސdߐddddddddddddddddddddddddddddddddd dg Zdddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdgdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddÐdĐdŐdƐdǐdȐdɐdʐdːd̐d͐dΐdϐdАdѐdҐdӐdԐdՐd֐dאdؐdِdڐdېdܐdݐdސdߐddddddddddddddddddddddddddddddddd g Z	ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdgdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddÐdĐdŐdƐdǐdȐdɐdʐdːd̐d͐dΐdϐdАdѐdҐdӐdԐdՐd֐dאdؐdِdڐdېdܐdݐdސdߐddddddddddddddddddddddddddddddddg Z
d ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdgdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddÐdĐdŐdƐdǐdȐdɐdʐdːd̐d͐dΐdϐdАdѐdҐdӐdԐdՐd֐dאdؐdِdڐdېdܐdݐdސdߐdddddddddddddddddddddddddddddddg Zdd ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadgdbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddÐdĐdŐdƐdǐdȐdɐdʐdːd̐d͐dΐdϐdАdѐdҐdӐdԐdՐd֐dאdؐdِdڐdېdܐdݐdސdߐddddddddddddddddddddddddddddddg Zddd ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dgdadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddÐdĐdŐdƐdǐdȐdɐdʐdːd̐d͐dΐdϐdАdѐdҐdӐdԐdՐd֐dאdؐdِdڐdېdܐdݐdސdߐdddddddddddddddddddddddddddddg Zdddd ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_dgd`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddÐdĐdŐdƐdǐdȐdɐdʐdːd̐d͐dΐdϐdАdѐdҐdӐdԐdՐd֐dאdؐdِdڐdېdܐdݐdސdߐddddddddddddddddddddddddddddg Zddddd ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^dgd_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddÐdĐdŐdƐdǐdȐdɐdʐdːd̐d͐dΐdϐdАdѐdҐdӐdԐdՐd֐dאdؐdِdڐdېdܐdݐdސdߐdddddddddddddddddddddddddddg ZdgdzdudyddidmdÐd/d ded*ddՐddtdȐddǐd{ddXdFdddҐdddddpddddd%d5d>ddʐd3ddddod֐d0dddŐd"dddddddd~ddd&ddsddd+dddldYddQd:dԐdd(dd.ddRdϐddddddZdhdɐdd8dIdKdWd͐dΐddddBdLd2ddDddd}dOd;dddPdd?dddd7ddddؐd ddddАdːdddd^ddCdddd|d<dbd\ddqd_ddNdڐd!d)dddEddddܐd]d
dِdސd1d9d	dHdd#d[ddѐddaddddwddƐd6dkddӐdMddjdUdddcdxddddvd$d-ddddĐddېdrddJddddnd=ddddGdddd`d4dVddddddߐddddgdאddddddd̐dTd'dݐdddddddAdfd@dd,dddSddg Zdgdydtdxddhdldd.dddd)ddԐddsdǐddƐdzddWdEdddѐdddddoddddd$d4d=ddɐd2ddddndՐd/dddĐd!dddddddd}dߐdd%ddrddd*dddkdXddPd9dӐdd'dd-ddQdΐddddddYdgdȐdd7dHdJdVd̐d͐ddddAdKd1ddCdd d|dNd:dddOdd>dddd6ddddאdddddϐdʐd
ddd]ddBdddd{d;dad[ddpd^d~dMdِd d(dddDddddېd\d	dؐdݐd0d8ddGdd"dZddАdd`ddddvddŐd5djddҐdLddidTdddbdwddddud#d,ddddÐddڐdqddIddddmd<ddcdFdddd_d3dUddddddސddddfd֐dddddddːdSd&dܐddddddd@ded?dd+dddRddg Zdgdxdsdwddgdkdd-ddcd(ddӐddrdƐd~dŐdyddVdDdddАdddddnddddd#d3d<ddȐd1ddddmdԐd.dddÐd dddddddd|dސdd$ddqddd)dddjdWddOd8dҐdd&dߐd,ddPd͐ddddddXdfdǐdd6dGdIdUdːd̐dddd@dJd0ddBddd{dMd9dddNdd=dddd5dddd֐dddddΐdɐd	ddd\ddAddddzd:d`dZddod]d}dLdؐdd'dddCddddڐd[ddאdܐd/d7ddFdd!dYddϐdd_dddduddĐd4diddѐdKddhdSdddadvddddtd"d+ddddddِdpddHddddld;ddbdEd ddd^d2dTddddddݐddddedՐdddddddʐdRd%dېdddd
ddd?ddd>dd*dddQddg Zdgdwdrdvddfdjdd,ddbd'ddҐddqdŐd}dĐdxddUdCdddϐdddddmddddd"d2d;ddǐd0ddddldӐd-dd dddddddddd{dݐdd#ddpdd~d(dddidVddNd7dѐdd%dސd+ddOd̐ddddddWdedƐdd5dFdHdTdʐdːdddd?dId/ddAdddzdLd8dddMdd<dddd4ddddՐddddd͐dȐdddd[dd@ddddyd9d_dYddnd\d|dKdאdd&dddBddddِdZdd֐dېd.d6ddEdd dXddΐdd^dddߐdtddÐd3dhddАdJddgdRddd`duddddsd!d*ddddddؐdoddGddddkd:ddadDddd
d]d1dSddddddܐddddddԐdddddddɐdQd$dڐdddd	ddd>dcd=dd)dddPddg Zdd Zdd Zd	d  Z	dS (	  r   zEncapsulates the AES block cipher.

    You generally should not need this. Use the AESModeOfOperation classes
    below instead.
         r   r
       r   r      r   r   r1   @         6   l         M      /   ^      c         5   j         }               |   w   {      k   o   0   g   +         v            Y   G                     r               &   ?         4            q   1         #      r
                     '      u   	      ,      n   Z      R   ;      )         S      r            [         9   J   L   X               C   3      E         P   <         Q               8            !                     _   D            ~   =   d   ]      s   `      O      "   *         F                        2   :   I      $   \            b         y         7   m         N      V         e   z         x   %   .                  t      K            p   >      f   H   r      a   W                              i                           U   (                        B   h   A      -         T         l   c l   |p l   w\ l   {l l   r l   k, l   o< l   TE# iP00`il   g i}++Vl   ~O l   bWk i櫫Ml   vX l   EJ il   @I l   }t l   z_ l   Yd l   G l   pw i쭭Al   gTg i_i꯯Ei#iSl   rH l   [@7 i·ul   }C i=ij&&LiZ66liA??~l   wk l   OL i\44hiQl   4e# l   qs l   qD l   sXW iS11bi?*il   RG+ ie##Fl   ^C; i(0i7i
i/i	i6$il   =b? l   &k ii''NiͲl   uT i		iit,,Xi.4i-6l   n8 l   Zh i[l   RH iM;;vl   aVo iγ}i{))Rl   >c; iq//^il   SL l   hQs l   ,m i`  @l   |G iȱyl   [l l   j( l   FK iپgiK99rl   J( l   L0 l   X` l   JO l   kPw l   *o i媪Ol   {[ l   C l   M4 iU33fil   E l   yS il   | l   P@ iD<<xi%i㨨Kl   QD i]l   @  ii?i!iH88pl   uc i߼ciwl   uZ_ ic!!Bi0 l   K l   s{ l   mR l   LM ii5&l   /l l   _| i5l   D i9.l   WD' iUl   ~x iG==zl   d l   ]t i+2l   sL l   `  il   O< l   \G if""Di~**Ti;il   F l   )n iӸki<(l   y^O l   ^x il   v[[ l   ;`7 iV22diN::ti

l   I$ i
il$$Hl   \p l   ]B? l   nS{ iשּׁCl   b i9i1l   7d' l   yd l   2g+ l   CH iY77nl   m4 il   dUc l   N8 i੩Il   l0 l   VX l   tg l   %j l   e l   zh i鮮Giiպol   x` io%%Jir..\i$8iWiǴsl   QF/ l   #h l   |]C l   tP i!>l   K, iܽaiil   p@ iB>>|iĵql   f l   H  il   vo il   a i_55jl   W\ iйiil   XA3 i':i'l   8a3 l   xW i+i3"l   i$ l   pYS ii3i-i"<il    i l   IN l   UT ix((Pl   z_K iiYi	iiڿel   1f/ l   B l   h  l   A i)iw--Zii˰{l   TP iֻmi:,l   ccK l   ||	 l   ww3 l   {{ il   kk{ l   ooc iőTi00`Pil   ggS i++V}ii׵bl   +L l   vv5 iʏEl   ?: iɉ@l   }} il   YYdW l   GG il   -X iԳgl   "z l   /T l   G~ l   $n l   rr- i[l   7 il   {\ i&&Lji66lZi??~AiĩOi44h\l   %h i4il   qq' iثsi11bSi*?iiǕRi##FeiÝ^i0(l   oB i
l   _j i	i$6l    76 i=i&i''Nil   2 l   uu? i		l   ;< i,,Xti4.i6-l   nne l   ZZh] l    v l   RRHm i;;vMiַal   3 i))R{i>i//^ql   '. l   SSLk iѹhi,i  @`il   1 l   [[l[ l   jj} iˍFl   >2 i99rKl   JJ(= l   LL0) l   XX`Q iυJiлki*l   *J il   CC l   MM4/ i33fUl   #( l   EE iil    l   PP@a i<<xDl   Kt l   (F l   QQDg l   #| l   @@  l    l   Z l   Cx i88pHil   <> l   6 iگui!!Bci 0iiiҿmíLii&5i/l   __|C l   kD l   DD i.9iēWl   'd l   ~~ i==zGl   ddY l   ]]tO i2+l   ss+ l   ``A l   30 l   OO<# iܣi""Dfi**T~l   wV l    l   FF i)l   8& i(<iާyl   ^^xE iiۭvi;i22dVi::tNi

l   II$7 i
i$$Hll   \\pI i]iӽnl   ,^ l   bbM l   sP l   cH i7l   yy i2iȋCi77nYl   mmo l    iձdl   NN8% l   )@ l   lli l   VVXu ii%l   ee_ l   zz l   .R il   :* l   xx i%%Joi..\ri8$l   &b l   4 iƗQi#iݡ|l   tt9 i>!l   KK,; l   =8 l    l   

 l   pp! i>>|Bl   5 l   ffU l   HH 1 iiil   aaG i55j_l   WW\s l   9  l   /" iXi:'l   Or i8il   Wf i"3l   iiw i٩pl    l   gN l   [l i<"l   +$ i i·Il   UUT i((Pxiߥzl    l   !p l   	  il   ?4 i1l   BB l   hhq l   AA l   S` i--Zwil   0 l   TTPy l   ;, i,:icƥci||iwwi{{l   d ikֽkioޱol   
 i0`P0iigΩgi+V}+l   g3| l   5. l   MW ivvl    l   : l   	 i}}l   o+t iYYiGGl   {` l   A[ l   3( l   _E l   E_ l   #~9 l   SI irrl     l   uo l   a9z l   =\' i&Lj&i6lZ6i?~A?l   un l    i4h\4l   QK l   QiJ l   yb iqql   +0 i1bS1i*?il    i#Fe#l    i0(l   7B- i
l   /j5 i	i$6l   6 l   _{D l   MMV i'Ni'l   e iuui		l   < i,Xt,i4.i6-inܲniZZl   [A iRRi;vM;l   7, l   }g i)R{)l   ]}F i/^q/l   .	 iSSl   9" l   AYZ i @` l   c?x l   yc i[[ijԾjl    l   g} i9rK9iJJiLLiXXl    l   ;  l   EU^ l   OU l   m-v iCCiMMi3fU3l   ( iEEl   i!r iiiPPi<xD<l   %t? l   KQ iQQl   ]G i@@l    l   ?Z% l   !x; i8pH8l   q	j l   cy l   wm l   /4 i!Bc!i 0l   e5~ l   }f l   ?$ l    ii&5l   C_X i__l   5D/ iDDi.9l    l   UO i~~i=zG=idȬdi]]i2+issi``l   0 iOOl   #8 i"Df"i*T~*l   ;V! l    iFFl   GS\ l   kq i(<l   '< i^^il   -6 l   [w@ i2dV2i:tN:i

iIIi
i$Hl$i\\l    l   =& l   CY ibĦbl   9P# l   1H+ l   SoH iyyl   UeN l    i7nY7imڷml    l   1* iNNl   IS ilشliVVl   sh l   OKT ieʯeizzl   G] il   ou ixxi%Jo%i.\r.i8$l   WM l   si l    l   KGP l   !: itti>!iKKl   a{ l    l   
 ippi>|B>l   qk if̪fiHHil   wl iia£ai5j_5iWWl   is l   " l    i:'l   'r= l   YqB l   k'p l   +f1 i"3iiһil   )2 l    l   3N) l   -l7 i<"l   $ l   IAR l    iUUi(Px(l   %> l    l   YC l   	  il   e l   WcL iBBihиhiAAl   )`3 i-Zw-il   {a iTTl   mw i,:iƥcci||iwwi{{l   e iֽkkiޱool   T i`P00iiΩggiV}++l   } l   b/ l   MfWW ivvl   E l    l   @ i}}l   u iYYiGGl   a l   Al[[ l   g) l   _}EE l   Ej__ l   #?99 l   SwII irrl   [ l   uBoo l   { l   =.'' iLj&&ilZ66i~A??l   o l   O ih\44l   QtKK l   4K l   c iqql   s1 ibS11i*?il   R iFe##l   ^ i0(l   7!-- i
l   /555 i	i$6l    l   =E l   &W iNi''l   Mee iuui		l    iXt,,i4.i6-iܲnniZZl   [{AA iRRivM;;l   a- l   }Ngg iR{))l   >G i^q//l   		 iSSl   h# l   ,[ i@`  l   y l   yHcc i[[iԾjjl   F l   gY}} irK99iJJiLLiXXl   J l   k! l   *_ l   OeUU l   w iCCiMMifU33l    iEEl   s iiiPPixD<<l   %:?? l   KcQQ iQQl   ]~GG i@@l   
 l   ?-%% l   !<;; ipH88l   k l   c_yy l   wAmm l   u5 iBc!!i 0l    l   g l   m% l   L ii&5l   /Y i__l   5"// iDDi.9l   W	 l   UrOO i~~izG==iȬddi]]i2+issi``l    iOOl   9 iDf""iT~**l   ;+!! l    iFFl   )] l   kSqq i(<l   y= i^^il   v7 l   ;A idV22itN::i

iIIi
iHl$$i\\l   ] l   n' l   CoYY iĦbbl   9(## l   1$++ l   7I iyyl   2O l   C inY77iڷmml    l   d+ iNNl   I`SS iشlliVVl   i l   %U iʯeeizzl   Gi]] il   oUuu ixxiJo%%i\r..i8$l   WqMM l   sGii l   Q l   #Q l   |; itti>!iKKl   a\{{ l    l    ippi|B>>l   qDkk i̪ffiHHil   m ii£aaij_55iWWl   iPss l    l   X i:'l   '9== l   8C l   q l   +311 i"3iһiil   p3 l   	 l   3')) l   -677 i<"l    l    S l   I iUUiPx((l   z? l    l   YxCC l   	  il   eZ l   1M iBBiиhhiAAl   )033 iZw--il   {Kaa iTTl   mVww i,:iPQiSeA~iäi^':ik;iEl   XY iKiU0 l   mZ l   v l   %Lj iOl   KU
 iD5&l   #j l   IZb= ig%iEi]l   u^ l   p l    iki_il   z~ l   Y* l   -}) i!tXi)iIl   DH ijul   xyi l   k>2 iq'l   O} l   -a l   f,A i:}iJcl   14J l   `3. iESbl   wb l   .v l    } l   +r iXhHpl   } l   l) i{Rl   #SV iKrl   W?F i*Ufl   (e iµ/l   { l   n& i(0i#ijl   \-Z l   + l   4N l   rf iiNieiվl   bh" l   ~M	 iS.4l   UE i2l   ukI i9i`@iq^l   Qz i!>l   =- l   |: iFMl   " i]qioiP`i$l   i{- l   C iwgl   Ba il   8[2N iyl   G
B iB|l   q i	iH+2ipiNrZll   z iV8iծ=i'9-6id
i!\hl   T6 i:.6$ig
l   g& l   i il   OE i aiiKwZil   
:'E l   *@ iC"<ii	l   Ge i-iȩiWl   L^ l   ]3] l   `F l   &n ir\i;fDi4~[l   v) l   FG l   h|m l   cqq l   \c. icBi@"l    	 l   }$
 l   =v% l   2] l   m!S iK/l   0d9 iRiwil+l   9R iHi"dGl   Q l   ?A i,}Vi3"l   N l   Qq2 l   " l   61 l   M l   (^J l   &o5 i?i:,ixPi_jibF~Tl   m l   8! i^9.l   / l    > i|ii-ol   J l   ;Y i}l   nc8Q l   {;w6 l   	xL iYnl   75Y l    l   en*M l   ~fU iϼ!l   h+^ l   u i6oJl   	>U i|)i1i1#?*l   0K if5i7Ntl   Jy l   P!A iا3l   J	b iAiPi/iMviMCl   TMT l   ,I l   5= ijLl   X iQeFl   j: i]5l   stu l   .Av l   Zf l   RR% l   3V R iGml   a5 iz7iYl   <&V l   'R l   5In l   e9B i<Gzl   Y_9 i?sUiyi7siSi[_l   oz> iDxl   s_ l   >Dr i,4$8l   _@F irl   %y iI<(l   A~ iq9i޳l   di1 iVdia{l   p6e* it\lHl   BWp! iQPieA~Sl   4 l   ^'t, l   k+w l   E?b l   XzYW l   c& i0 Ul   mvZm l   vL# iL%l   ex l   */ l   D5L  l   bj iZIi%gl   j0 l   ~B iu/iLl   FG l   S l   _N l   +* l   zm~W l   YR*5 i-l   !t& iiI)iɎDiujiyxi>Xkl   q9O: l   Oa}m ii fl   :Nh iJcl   1 i3Q`iSbEl   wdbA l   kv	 il   +) ihHpXiEl   l^) l   {n is#l   KD iWiUf*i(iµ/l   {E5 l   7K l   (`d l   ?Gd l   jt i\iϊ+l   yN% l   a l   iB l   Z l   * ib4l   & l   S.h: l   UsEA i2iui9l   `T iq^inQl   !|r iݖ=l   >] iMFl   T"k i]qiol   P~ i$l   =/ l   C@ igwl   Bha{ l   	 i[8l   H6 i
|Gl   BR l    l     i+2Hl   p<X irZlNl   w i8Viծ=i9-6'i
di\h!l   T[6# i.6$:l   g
b iWl   ni% l   7< iOl    \D iKwZiii
l   * K i"<Cii	l   [ l   6[r l   ( l   q
 iuLl   w l   `F{ l   &? l   rx l   ;f
 i~[4i)Cvl   #9 ihicl   1 icBi"@iƄ i$J}l   =;q i2i)mi/Kl   02g l   RX l   A  i+ll   pR3 l   H#t idG"l   |Q	 i?l   ,}0 l   3D^ l   NI l   8 l   J} iԘ6l   uM iz(i&l   -H l   :XH ixPl   _6 iF~Tbl    l   X!Q i9.^l   Ck l   ]>} ii|l   -UR l   %g i;l   } N icni;{ix&	l   Yh il   OQ inei~iϼ!l   M l   gu3 l   6o l   	) l   |0S, l   $c^ i#?*1i0l   f"k  iNt7l   M l   a iا3iJl   ln iPi/l   M iCMiMTl   ? l   Q=G ijLl   ,q iQeFi^i5]itsiA.igZiےRiV3iGml   aW5 i7zl   x l   < l   ')] ia5l   [ iGz<iҜYisU?iyl   7G~ l   wT i_[io=l   D l   / ih>i4$8,i@_iri%l   I<P iAi9ql   < l   49 l   V  i{ai2pi\lHtiWBl   QN iA~Sel   I i':^i;kiEiXiKl   0 t ivmïvi%Ll   O/ l   *E i5&Dl   b5G iIZi%giEl   ] i/ul   L%` l   FG/ l   ks i_l   *9 imziRYl   T[ itX!iI)il    l   u ixyiXk>i'qiᾶOl   p/Z l    IX i}:icJi1iQ`3iSbEidwl   k;	] l   ~9@ i+iHpXhl   E3z iޔll   {Rnq l   s+G& iKrl   c l   UfTV i(l   / iņ{i7ӥl   (0 l   #dK ijl   m iϊ+l   y'%i l   se l   iNBE l   ei l   } i4bl   D} i.4SiUl   dB l   $V l   rX l   `@T_ l   q^> inQl   !> iݖ=i>ݮl   Mz l   Tk iq]l   ( iP`l   Hv l   V/S i@Cl   g< i谽Bl    i8[l   y] i|G
iB|il   	 l   +2Z ipiZlNrl   } iV8l   =<* i-6'9l   
2 l   \hBL i[Ti6$:.i
gl   WN l   4- l   <# l    
 ia iwZiKil   bt i*l   "<@ ii	l   r[ l   -rQ l   S iWiuLl   nw; i`i&l   r\xk ifD;i[4~iCv)l   #K l   6x l   8b l   1W9 l   cB 
 i@"iƄ iJ}$i=i2l   )GB iK/i0iRl   wG i+ll   p)3s iHiG"dl   ( i?i}V,l   3"! iINl   8Y# l   E iԘ6l   & l   z%Q< l   ZM l   ?H l   :,; l   xP$ l   _j6 i~TbFil   q l   9.n l   _ l   ]} l   i& io-i%ϳl   Hw2 i}incl   ;[v i&	xiYnl   ln l   OQ5 ienl   *L l   ! l   oQ l   :7 ioJ6i	i)|l   1^e i?*1#l   Fa( i5fl   Ntnx l   |M l   `a! l   3*0 l   q0 l   A5 iPl   ^l l   Mv- l   C` iTMil   k l   jL6 i,ieFQl   ^	T i]5isti.AigZl   $ i3VimGiךai7ziYi<i'l   a7k l   aK l   Gzxb l   > iU?sl    is7l   S l   _T i=ol   Dx7 l   Jg l   h9} i$8,4i_@l    i%i<(Il   * i9ql   g l   X9I l   Vd  l   { l   2Ul ilHt\iBWl   QPNi i~SeAiäi:^'l   ;KV l   q: l   +t l   KF i U0imvl    i%Ll   O|K i*i&D5ibl   Ib l   %g6t l   ET l   ]a} iu/iLiFl   kF' l   g l   9% izmiYRl   -} iX!tl   I)@ l   D l   uj l   x ik>Xl   ']r l   6B l   Z if l   }4u l   c> i1i`3QibESiwdikl   @ i+ipXhHiEl   < iR{i#sirKiWif*Ul   PV l   /k l   
 iӥ7i0(l   #2K iji\l   +8 iyiiNil   eM5 iվib4l   
M i4S.l    f l   2 l   um l   9 i@`i^qiQni>!l   =: iݮ>l   MFzM iTl   q ioi`Pl   $1 l   { iC@l   gw<3 l   =P l    i8[l   y[ iG
|i|Bl   I= l   	 i2H+ipilNrZil   Vp
 l   =] i6'9-i
dih!\iT[i$:.6ig
iWl   R-] l   #7 l   O l   a"A8 iZiKwil   
t' l   eU@ i<C"ii	l   - l   -9Qm iȩl   W3b iLul   ;3 i`i&i\riD;fl   [4v iv)Ci#l   h[ l   cI i1iBcl   @D. l    " i}$Jl   x{v l   dr im)l   K^< l   sad l   l l   wP l   +l,f ipl   z( l   G"R l   Dy l   ~` iV,}i"3iNIi8l   ~E l   6( l   Ok i(zl   &o l   ?$[ i,:iPxij_iTbF~l   B' l   hq1 i.^9l   u_ i]l   i|&! l   o)[* iϳ%l   ;2Y i}l   n8 i{;i	x&inYl   n5 iOl   e* l   ~ l   !y il   Y7O iJ6ol   T> l   )V` l   1/eI i*1#?l   0(K l   5@D it7Nl   & l   0! l   3O iJl   AwY l    l   /# ivMl   CM`_ l   TT l   _	, l   ck# iLji,iFQei^l   ]j l   s i.AiZgl   R7 i3Vl   m, l   . l   7zB l   Y)p i<l   nOR i5aiiz<Gl   Y% l   U?d iyl   s?o l   Sjo l   _[T{ io=ixDl   _ i>hi8,4$l   _F irl   JD i(I<iAl   9qP i޳l   i idVl   {a ip2iHt\ll   Bp c                    sL  t  dkrtd| jt   }dd t|d D | _dd t|d D | _|d d }t  d } fddtd	t  dD }td	|D ]<}|| | j|d  |d < || | j||d   |d < qd	}|}||k r||d  }	|d	  | j|	d
? d@  d> | j|	d? d@  d
> A | j|	d@  d> A | j|	d? d@  A | j| d> A N  < |d7 }|dkrtd|D ]}||  ||d  N  < qtntd|d D ]}||  ||d  N  < q||d d  }	||d   | j|	d@  | j|	d? d@  d> A | j|	d
? d@  d
> A | j|	d? d@  d> A N  < t|d d |D ]}||  ||d  N  < qFd	}
|
|k r||k r||
 | j|d  |d < ||
 | j||d   |d < |
d7 }
|d7 }qjqtd|D ]t}td	dD ]b}
| j| |
 }	| j|	d? d@  | j	|	d
? d@  A | j
|	d? d@  A | j|	d@  A | j| |
< qqd S )Nr0   zInvalid key sizec                 S   s   g | ]}d gd qS r   r2   r   r   ir   r   r   r)      s     z AES.__init__.<locals>.<listcomp>r   c                 S   s   g | ]}d gd qS r'  r   r(  r   r   r   r)      s     r2   c              	      s(   g | ] }t d  ||d  d qS )z>ir2   r   )structunpackr(  keyr   r   r)      s     r   r   r   r
   r   r   )len
ValueErrornumber_of_roundsxrange_Ke_KdSrconU1U2U3U4)selfr-  roundsZround_key_countZKCZtkr)  Zrconpointertttjrr   r,  r   __init__   sp     

zAES.__init__c                    s  t  dkrtdt jd }dddg\}}}ddddg} fddtdd	D }td|D ]}tdd	D ]}	j||	 d
? d@  j||	| d	  d? d@  A j||	| d	  d? d@  A j||	| d	  d@  A j| |	 A ||	< qpt|}qbg }
tdd	D ]}	j| |	 }|
	j
||	 d
? d@  |d
? A d@  |
	j
||	| d	  d? d@  |d? A d@  |
	j
||	| d	  d? d@  |d? A d@  |
	j
||	| d	  d@  |A d@  q|
S )z9Encrypt a block of plain text using the AES block cipher.r   wrong block lengthr   r   r   r   c                    s6   g | ].}t  d | d | d   jd | A qS r2   r   )r   r2  r(  	plaintextr:  r   r   r)      s     zAES.encrypt.<locals>.<listcomp>r2   r
   r   r   )r.  r/  r2  r1  T1T2T3T4copyappendr4  )r:  rD  r;  s1s2s3r'   r<  r?  r)  resultr=  r   rC  r   encrypt   s4    
(00,zAES.encryptc                    s  t  dkrtdt jd }dddg\}}}ddddg} fddtdd	D }td|D ]}tdd	D ]}	j||	 d
? d@  j||	| d	  d? d@  A j||	| d	  d? d@  A j||	| d	  d@  A j| |	 A ||	< qpt|}qbg }
tdd	D ]}	j| |	 }|
	j
||	 d
? d@  |d
? A d@  |
	j
||	| d	  d? d@  |d? A d@  |
	j
||	| d	  d? d@  |d? A d@  |
	j
||	| d	  d@  |A d@  q|
S )z:Decrypt a block of cipher text using the AES block cipher.r   rA  r   r   r   r   c                    s6   g | ].}t  d | d | d   jd | A qS rB  )r   r3  r(  
ciphertextr:  r   r   r)      s     zAES.decrypt.<locals>.<listcomp>r2   r
   r   r   )r.  r/  r3  r1  T5T6T7T8rI  rJ  Si)r:  rQ  r;  rK  rL  rM  r'   r<  r?  r)  rN  r=  r   rP  r   decrypt   s4    
(00,zAES.decryptN)__name__
__module____qualname____doc__r0  r5  r4  rV  rE  rF  rG  rH  rR  rS  rT  rU  r6  r7  r8  r9  r@  rO  rW  r   r   r   r   r   a   s   @                                                    H"c                   @   s.   e Zd ZdZd
ddZedd Zdd Zd	S )r	   zA counter object for the Counter (CTR) mode of operation.

       To create a custom counter, you can usually just override the
       increment method.r   c                    s     fddt dddD | _d S )Nc                    s   g | ]} |? d  qS )   r   r(  initial_valuer   r   r)     s     z$Counter.__init__.<locals>.<listcomp>r   i)r1  _counter)r:  r^  r   r]  r   r@    s    zCounter.__init__c                 C   s   | j S r   )r`  sr   r   r   <lambda>      zCounter.<lambda>c                 C   s`   t t| jd ddD ]2}| j|  d7  < | j| dk r> q\d| j|< qdgt| j | _dS )z1Increment the counter (overflow rolls back to 0).r   r_  r\  r   N)r1  r.  r`  )r:  r)  r   r   r   	increment  s     zCounter.incrementN)r   )rX  rY  rZ  r[  r@  propertyvaluere  r   r   r   r   r	     s   
c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	AESBlockModeOfOperationz;Super-class for AES modes of operation that require blocks.c                 C   s   t || _d S r   )r   _aes)r:  r-  r   r   r   r@  /  s    z AESBlockModeOfOperation.__init__c                 C   s   t dd S Nznot implemented	Exceptionr:  rQ  r   r   r   rW  2  s    zAESBlockModeOfOperation.decryptc                 C   s   t dd S rj  rk  r:  rD  r   r   r   rO  5  s    zAESBlockModeOfOperation.encryptN)rX  rY  rZ  r[  r@  rW  rO  r   r   r   r   rh  -  s   rh  c                   @   s   e Zd ZdZdS )AESStreamModeOfOperationz?Super-class for AES modes of operation that are stream-ciphers.N)rX  rY  rZ  r[  r   r   r   r   ro  9  s   ro  c                   @   s   e Zd ZdZdZdS )AESSegmentModeOfOperationz9Super-class for AES modes of operation that segment data.r   N)rX  rY  rZ  r[  segment_bytesr   r   r   r   rp  <  s   rp  c                   @   s$   e Zd ZdZdZdd Zdd ZdS )r   a  AES Electronic Codebook Mode of Operation.

       o Block-cipher, so data must be padded to 16 byte boundaries

   Security Notes:
       o This mode is not recommended
       o Any two identical blocks produce identical encrypted values,
         exposing data patterns. (See the image of Tux on wikipedia)

   Also see:
       o https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_codebook_.28ECB.29
       o See NIST SP800-38A (http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf); section 6.1zElectronic Codebook (ECB)c                 C   s,   t |dkrtdt|}t| j|S )Nr    plaintext block must be 16 bytes)r.  r/  r   r%   ri  rO  rn  r   r   r   rO  T  s    zAESModeOfOperationECB.encryptc                 C   s,   t |dkrtdt|}t| j|S )Nr   !ciphertext block must be 16 bytes)r.  r/  r   r%   ri  rW  rm  r   r   r   rW  [  s    zAESModeOfOperationECB.decryptN)rX  rY  rZ  r[  namerO  rW  r   r   r   r   r   C  s   c                   @   s.   e Zd ZdZdZd
ddZdd Zdd	 ZdS )r   a  AES Cipher-Block Chaining Mode of Operation.

       o The Initialization Vector (IV)
       o Block-cipher, so data must be padded to 16 byte boundaries
       o An incorrect initialization vector will only cause the first
         block to be corrupt; all other blocks will be intact
       o A corrupt bit in the cipher text will cause a block to be
         corrupted, and the next block to be inverted, but all other
         blocks will be intact.

   Security Notes:
       o This method (and CTR) ARE recommended.

   Also see:
       o https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher-block_chaining_.28CBC.29
       o See NIST SP800-38A (http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf); section 6.2zCipher-Block Chaining (CBC)Nc                 C   sF   |d krdgd | _ n t|dkr,tdn
t|| _ t| | d S Nr   r   &initialization vector must be 16 bytes)_last_cipherblockr.  r/  r   rh  r@  r:  r-  ivr   r   r   r@  y  s    

zAESModeOfOperationCBC.__init__c                 C   sJ   t |dkrtdt|}dd t|| jD }| j|| _t| jS )Nr   rr  c                 S   s   g | ]\}}||A qS r   r   r   plr   r   r   r)     s     z1AESModeOfOperationCBC.encrypt.<locals>.<listcomp>)r.  r/  r   ziprw  ri  rO  r%   )r:  rD  Zprecipherblockr   r   r   rO    s    zAESModeOfOperationCBC.encryptc                 C   sH   t |dkrtdt|}dd t| j|| jD }|| _t|S )Nr   rs  c                 S   s   g | ]\}}||A qS r   r   rz  r   r   r   r)     s     z1AESModeOfOperationCBC.decrypt.<locals>.<listcomp>)r.  r/  r   r}  ri  rW  rw  r%   )r:  rQ  ZcipherblockrD  r   r   r   rW    s    zAESModeOfOperationCBC.decrypt)NrX  rY  rZ  r[  rt  r@  rO  rW  r   r   r   r   r   d  s
   


c                   @   s:   e Zd ZdZdZdddZedd Zdd	 Zd
d Z	dS )r   a  AES Cipher Feedback Mode of Operation.

       o A stream-cipher, so input does not need to be padded to blocks,
         but does need to be padded to segment_size

    Also see:
       o https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_feedback_.28CFB.29
       o See NIST SP800-38A (http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf); section 6.3zCipher Feedback (CFB)r   c                 C   sX   |dkrd}|d kr"dgd | _ n t|dkr8tdn
t|| _ || _t| | d S )Nr   r   r   rv  )_shift_registerr.  r/  r   _segment_bytesrh  r@  )r:  r-  ry  Zsegment_sizer   r   r   r@    s     

zAESModeOfOperationCFB.__init__c                 C   s   | j S r   )r  ra  r   r   r   rc    rd  zAESModeOfOperationCFB.<lambda>c                 C   s   t || j dkrtdt|}g }tdt || jD ]h}|||| j  }| j| jd t | }dd t||D }t	| jt |d  || _|
| q8t|S )Nr   z2plaintext block must be a multiple of segment_sizec                 S   s   g | ]\}}||A qS r   r   r   r{  xr   r   r   r)     s     z1AESModeOfOperationCFB.encrypt.<locals>.<listcomp>r.  r  r/  r   r1  ri  rO  r  r}  r(   extendr%   )r:  rD  	encryptedr)  plaintext_segmentxor_segmentcipher_segmentr   r   r   rO    s    zAESModeOfOperationCFB.encryptc                 C   s   t || j dkrtdt|}g }tdt || jD ]h}|||| j  }| j| jd t | }dd t||D }t	| jt |d  || _|
| q8t|S )Nr   z3ciphertext block must be a multiple of segment_sizec                 S   s   g | ]\}}||A qS r   r   r  r   r   r   r)     s     z1AESModeOfOperationCFB.decrypt.<locals>.<listcomp>r  )r:  rQ  Z	decryptedr)  r  r  r  r   r   r   rW    s    zAESModeOfOperationCFB.decryptN)r   )
rX  rY  rZ  r[  rt  r@  rf  rq  rO  rW  r   r   r   r   r     s   

c                   @   s.   e Zd ZdZdZd
ddZdd Zdd	 ZdS )r   a   AES Output Feedback Mode of Operation.

       o A stream-cipher, so input does not need to be padded to blocks,
         allowing arbitrary length data.
       o A bit twiddled in the cipher text, twiddles the same bit in the
         same bit in the plain text, which can be useful for error
         correction techniques.

    Also see:
       o https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Output_feedback_.28OFB.29
       o See NIST SP800-38A (http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf); section 6.4zOutput Feedback (OFB)Nc                 C   sL   |d krdgd | _ n t|dkr,tdn
t|| _ g | _t| | d S ru  )_last_precipherblockr.  r/  r   _remaining_blockrh  r@  rx  r   r   r   r@    s    

zAESModeOfOperationOFB.__init__c                 C   sh   g }t |D ]R}t| jdkr4| j| j| _g | _| jd}| j| ||A }|| qt|S )Nr   )	r   r.  r  ri  rO  r  poprJ  r%   )r:  rD  r  r{  ZprecipherbyteZ
cipherbyter   r   r   rO    s    zAESModeOfOperationOFB.encryptc                 C   s
   |  |S r   rO  rm  r   r   r   rW  	  s    zAESModeOfOperationOFB.decrypt)Nr~  r   r   r   r   r     s
   
c                   @   s.   e Zd ZdZdZd
ddZdd Zdd	 ZdS )r   aU  AES Counter Mode of Operation.

       o A stream-cipher, so input does not need to be padded to blocks,
         allowing arbitrary length data.
       o The counter must be the same size as the key size (ie. len(key))
       o Each block independant of the other, so a corrupt byte will not
         damage future blocks.
       o Each block has a uniue counter value associated with it, which
         contributes to the encrypted value, so no data patterns are
         leaked.
       o Also known as: Counter Mode (CM), Integer Counter Mode (ICM) and
         Segmented Integer Counter (SIC

   Security Notes:
       o This method (and CBC) ARE recommended.
       o Each message block is associated with a counter value which must be
         unique for ALL messages with the same key. Otherwise security may be
         compromised.

    Also see:

       o https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Counter_.28CTR.29
       o See NIST SP800-38A (http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf); section 6.5
         and Appendix B for managing the initial counterzCounter (CTR)Nc                 C   s*   t | | |d krt }|| _g | _d S r   )rh  r@  r	   r`  _remaining_counter)r:  r-  counterr   r   r   r@  ,  s
    zAESModeOfOperationCTR.__init__c                 C   sr   t | jt |k r8|  j| j| jj7  _| j  q t|}dd t|| jD }| jt |d  | _t	|S )Nc                 S   s   g | ]\}}||A qS r   r   )r   r{  r   r   r   r   r)   <  s     z1AESModeOfOperationCTR.encrypt.<locals>.<listcomp>)
r.  r  ri  rO  r`  rg  re  r   r}  r%   )r:  rD  r  r   r   r   rO  5  s    zAESModeOfOperationCTR.encryptc                 C   s
   |  |S r   r  )r:  Z	crypttextr   r   r   rW  A  s    zAESModeOfOperationCTR.decrypt)Nr~  r   r   r   r   r     s
   
	)ZctrZcbcZcfbZecbZofb)rI  r*  __all__r   r   r%   r(   r1  rl  rangeobjectr   r	   rh  ro  rp  r   r   r   r   r   dictr   r   r   r   r   <module>6   sH       0!5G/8