3
=h                 @   s$  d ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddg Z dHd@dXddd$d)dvddrdqddd~ddcddMd[dddNd}dd(ddddddddYddddddd2ddd]ddddd3ddddddddd>ddWdddddQddddddddddddd'dddydtddddld!dSddzdd/dddddudOdd-ddRddxddd&dd^d6ddKdhdd`dBddsdd%ddjddddd	ddddddddd
ddddd_dddddd5dddddddgd;didddd?ddEdd+dCd,ddLdddd dddbd4dZdDdUdddddddTd7ddddddFddddodfdd8d1d.dVd9d|dd=d:ddddpdkdddd\ddd*ddnd"dddadGddIdedddwddd<ddmdAdPddddd0ddddJd#dddd dd{ddg ZdRd dddddd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  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Z	d-d. Z
d/d0 Zd1d2 Zd3d4 Zd5d6 Zd7S (8  c   |   w   {      k   o      0      g   +            v            }      Y   G                        r               &   6   ?         4            q      1            #                                 '      u   	      ,         n   Z      R   ;         )      /      S                       [   j         9   J   L   X                  C   M   3      E            P   <         Q      @            8               !                           _      D            ~   =   d   ]      s   `      O      "   *         F               ^            2   :   
   I      $   \            b            y         7   m         N      l   V         e   z            x   %   .                     t      K            p   >      f   H            a   5   W                              i                           U   (                        B   h   A      -         T         i   i   i   i   i   i    i   @l        i   i   6i   ll      0 l      V i   Ml      4 i   /i   ^l      x i   cl       l      . i   5i   jl      ( l      f i   }l      t l      ^ l      
 l      " i   9c             C   sV   d}xLt dD ]@}|d@ r"|| N }| d@ }| dK } | dM } |rF| dN } |dL }qW |S )NrS   r   r
   r;   r~   rE   )range)abp_Z
hi_bit_set r  4/root/work/ibd2sql-ibd2sql-v2.x/ibd2sql/utils/aes.pyGMul   s    r  c             C   s   | dd  | d d  S )Nr
   r  )wordr  r  r  RotWord   s    r
  c             C   s   dd | D S )Nc             S   s   g | ]}t | qS r  )Sbox).0xr  r  r  
<listcomp>#   s    zSubWord.<locals>.<listcomp>r  )r	  r  r  r  SubWord"   s    r  c       	      C   s   dd | D }d}d}d}dg| |d  }x,t |D ] }|d| d|d   ||< q6W xt |||d  D ]}||d  d d  }|| dkrtt|}|d  t||  d? N  < n|d	kr|| dkrt|}d
d t|||  |D ||< qnW |S )Nc             S   s   g | ]}|qS r  r  )r  r  r  r  r  r  &   s    z KeyExpansion.<locals>.<listcomp>r1   r   r   rS   r
   r5   r   c             S   s   g | ]\}}||A qS r  r  )r  Zw_iZt_ir  r  r  r  4   s    )r  r  r
  Rconzip)	keyZkey_symbolsNbZNkNrwr  iZtempr  r  r  KeyExpansion%   s      $r  c             C   sD   x>t dD ]2}x,t dD ] }| | |  || | N  < qW q
W | S )Nr1   )r  )stater  r  jr  r  r  AddRoundKey7   s    $r  c             C   s@   x:t dD ].}x(t dD ]}t| | |  | | |< qW q
W | S )Nr1   )r  I_Sbox)sr  r  r  r  r  InvSubBytes=   s     r  c             C   s   | d d | d d | d d | d d f\| d d< | d d< | d d< | d d< | d d | d d | d d | d d f\| d d< | d d< | d d< | d d< | d d | d d | d d | d d f\| d d< | d d< | d d< | d d< | S )Nr
   r   rS   rk   r  )r  r  r  r  InvShiftRowsD   s    TTTr  c             C   s  x t dD ]}| d | }| d | }| d | }| d | }t|dt|dA t|dA t|d	A | d |< t|d	t|dA t|dA t|dA | d |< t|dt|d	A t|dA t|dA | d |< t|dt|dA t|d	A t|dA | d |< qW | S )
Nr1   rS   r
   rk   r   r   r   r   rA   )r  r  )r  r  r  r  cdr  r  r  InvMixColumnsJ   s    0004r!  c       	      C   s8  d}t || d }dd tdD }x:tdD ].}x(tdD ]}| |d |  || |< q>W q0W t|||| |d |  }xNt|d ddD ]:}t|}t|}t|||| |d |  }t|}qW t|}t|}t||d| }g }x8tdD ],}x$tdD ]}|j|| |  qW q W t|S )Nr1   r
   c             S   s   g | ]}d gd qS )rS   r1   r  )r  r  r  r  r  r  [   s    zAESDecrypt.<locals>.<listcomp>rS   )lenr  r  r  r  r!  appendbytes)	blockZkey_scheduler  r  r  r  r  rounddecrypted_blockr  r  r  
AESDecryptW   s(     r)  c             C   s   d S )Nr  )r  datar  r  r  aes_ecb_256_encryptp   s    r+  c             C   sD   d}t | }x2tdt|dD ]}|t|||d  |7 }qW |S )zT
	INPUT:
		key:   key
		data:  data of encryped
	RETURN:
		rdata: data of decryped
	    rS   r}   )r  r  r#  r)  )r  r*  rdataexpanded_keyr  r  r  r  aes_ecb256_decryptt   s
    r/  c       
      C   sx   d}t | }|}xbtdtt|d d dD ]B}|||d  }t||}tdd t||D }	|}||	7 }q.W |S )zr
	INPUT:
		key:   key
		data:  data of encryped
		iv:    intialization vector
	RETURN:
		rdata: data of decryped
	r,  rS   r}   c             S   s   g | ]\}}||A qS r  r  )r  r   r  r  r  r  r     s    z&aes_cbc256_decrypt.<locals>.<listcomp>)r  r  intr#  r)  r%  r  )
r  r*  ivr-  r.  Z	pre_blockr  r&  r(  Zplaintext_blockr  r  r  aes_cbc256_decrypt   s    	"
r2  N)r  r  r  r  r
  r  r  r  r  r  r!  r)  r+  r/  r2  r  r  r  r  <module>   s$       