@ -166,6 +166,58 @@ class Crypt_AES extends Crypt_Rijndael { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    var  $ecb ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    /**  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  The  SubByte  S - Box  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  @ see  Crypt_AES :: _encryptBlock ()  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  @ var  Array  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  @ access  intern  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    var  $sbox  =  array (  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0x63 ,  0x7C ,  0x77 ,  0x7B ,  0xF2 ,  0x6B ,  0x6F ,  0xC5 ,  0x30 ,  0x01 ,  0x67 ,  0x2B ,  0xFE ,  0xD7 ,  0xAB ,  0x76 ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0xCA ,  0x82 ,  0xC9 ,  0x7D ,  0xFA ,  0x59 ,  0x47 ,  0xF0 ,  0xAD ,  0xD4 ,  0xA2 ,  0xAF ,  0x9C ,  0xA4 ,  0x72 ,  0xC0 ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0xB7 ,  0xFD ,  0x93 ,  0x26 ,  0x36 ,  0x3F ,  0xF7 ,  0xCC ,  0x34 ,  0xA5 ,  0xE5 ,  0xF1 ,  0x71 ,  0xD8 ,  0x31 ,  0x15 ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0x04 ,  0xC7 ,  0x23 ,  0xC3 ,  0x18 ,  0x96 ,  0x05 ,  0x9A ,  0x07 ,  0x12 ,  0x80 ,  0xE2 ,  0xEB ,  0x27 ,  0xB2 ,  0x75 ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0x09 ,  0x83 ,  0x2C ,  0x1A ,  0x1B ,  0x6E ,  0x5A ,  0xA0 ,  0x52 ,  0x3B ,  0xD6 ,  0xB3 ,  0x29 ,  0xE3 ,  0x2F ,  0x84 ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0x53 ,  0xD1 ,  0x00 ,  0xED ,  0x20 ,  0xFC ,  0xB1 ,  0x5B ,  0x6A ,  0xCB ,  0xBE ,  0x39 ,  0x4A ,  0x4C ,  0x58 ,  0xCF ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0xD0 ,  0xEF ,  0xAA ,  0xFB ,  0x43 ,  0x4D ,  0x33 ,  0x85 ,  0x45 ,  0xF9 ,  0x02 ,  0x7F ,  0x50 ,  0x3C ,  0x9F ,  0xA8 ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0x51 ,  0xA3 ,  0x40 ,  0x8F ,  0x92 ,  0x9D ,  0x38 ,  0xF5 ,  0xBC ,  0xB6 ,  0xDA ,  0x21 ,  0x10 ,  0xFF ,  0xF3 ,  0xD2 ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0xCD ,  0x0C ,  0x13 ,  0xEC ,  0x5F ,  0x97 ,  0x44 ,  0x17 ,  0xC4 ,  0xA7 ,  0x7E ,  0x3D ,  0x64 ,  0x5D ,  0x19 ,  0x73 ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0x60 ,  0x81 ,  0x4F ,  0xDC ,  0x22 ,  0x2A ,  0x90 ,  0x88 ,  0x46 ,  0xEE ,  0xB8 ,  0x14 ,  0xDE ,  0x5E ,  0x0B ,  0xDB ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0xE0 ,  0x32 ,  0x3A ,  0x0A ,  0x49 ,  0x06 ,  0x24 ,  0x5C ,  0xC2 ,  0xD3 ,  0xAC ,  0x62 ,  0x91 ,  0x95 ,  0xE4 ,  0x79 ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0xE7 ,  0xC8 ,  0x37 ,  0x6D ,  0x8D ,  0xD5 ,  0x4E ,  0xA9 ,  0x6C ,  0x56 ,  0xF4 ,  0xEA ,  0x65 ,  0x7A ,  0xAE ,  0x08 ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0xBA ,  0x78 ,  0x25 ,  0x2E ,  0x1C ,  0xA6 ,  0xB4 ,  0xC6 ,  0xE8 ,  0xDD ,  0x74 ,  0x1F ,  0x4B ,  0xBD ,  0x8B ,  0x8A ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0x70 ,  0x3E ,  0xB5 ,  0x66 ,  0x48 ,  0x03 ,  0xF6 ,  0x0E ,  0x61 ,  0x35 ,  0x57 ,  0xB9 ,  0x86 ,  0xC1 ,  0x1D ,  0x9E ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0xE1 ,  0xF8 ,  0x98 ,  0x11 ,  0x69 ,  0xD9 ,  0x8E ,  0x94 ,  0x9B ,  0x1E ,  0x87 ,  0xE9 ,  0xCE ,  0x55 ,  0x28 ,  0xDF ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0x8C ,  0xA1 ,  0x89 ,  0x0D ,  0xBF ,  0xE6 ,  0x42 ,  0x68 ,  0x41 ,  0x99 ,  0x2D ,  0x0F ,  0xB0 ,  0x54 ,  0xBB ,  0x16  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    /**  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  The  inverse  SubByte  S - Box  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  @ see  Crypt_AES :: _decryptBlock ()  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  @ var  Array  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  @ access  intern  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    var  $isbox  =  array (  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0x52 ,  0x09 ,  0x6A ,  0xD5 ,  0x30 ,  0x36 ,  0xA5 ,  0x38 ,  0xBF ,  0x40 ,  0xA3 ,  0x9E ,  0x81 ,  0xF3 ,  0xD7 ,  0xFB ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0x7C ,  0xE3 ,  0x39 ,  0x82 ,  0x9B ,  0x2F ,  0xFF ,  0x87 ,  0x34 ,  0x8E ,  0x43 ,  0x44 ,  0xC4 ,  0xDE ,  0xE9 ,  0xCB ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0x54 ,  0x7B ,  0x94 ,  0x32 ,  0xA6 ,  0xC2 ,  0x23 ,  0x3D ,  0xEE ,  0x4C ,  0x95 ,  0x0B ,  0x42 ,  0xFA ,  0xC3 ,  0x4E ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0x08 ,  0x2E ,  0xA1 ,  0x66 ,  0x28 ,  0xD9 ,  0x24 ,  0xB2 ,  0x76 ,  0x5B ,  0xA2 ,  0x49 ,  0x6D ,  0x8B ,  0xD1 ,  0x25 ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0x72 ,  0xF8 ,  0xF6 ,  0x64 ,  0x86 ,  0x68 ,  0x98 ,  0x16 ,  0xD4 ,  0xA4 ,  0x5C ,  0xCC ,  0x5D ,  0x65 ,  0xB6 ,  0x92 ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0x6C ,  0x70 ,  0x48 ,  0x50 ,  0xFD ,  0xED ,  0xB9 ,  0xDA ,  0x5E ,  0x15 ,  0x46 ,  0x57 ,  0xA7 ,  0x8D ,  0x9D ,  0x84 ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0x90 ,  0xD8 ,  0xAB ,  0x00 ,  0x8C ,  0xBC ,  0xD3 ,  0x0A ,  0xF7 ,  0xE4 ,  0x58 ,  0x05 ,  0xB8 ,  0xB3 ,  0x45 ,  0x06 ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0xD0 ,  0x2C ,  0x1E ,  0x8F ,  0xCA ,  0x3F ,  0x0F ,  0x02 ,  0xC1 ,  0xAF ,  0xBD ,  0x03 ,  0x01 ,  0x13 ,  0x8A ,  0x6B ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0x3A ,  0x91 ,  0x11 ,  0x41 ,  0x4F ,  0x67 ,  0xDC ,  0xEA ,  0x97 ,  0xF2 ,  0xCF ,  0xCE ,  0xF0 ,  0xB4 ,  0xE6 ,  0x73 ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0x96 ,  0xAC ,  0x74 ,  0x22 ,  0xE7 ,  0xAD ,  0x35 ,  0x85 ,  0xE2 ,  0xF9 ,  0x37 ,  0xE8 ,  0x1C ,  0x75 ,  0xDF ,  0x6E ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0x47 ,  0xF1 ,  0x1A ,  0x71 ,  0x1D ,  0x29 ,  0xC5 ,  0x89 ,  0x6F ,  0xB7 ,  0x62 ,  0x0E ,  0xAA ,  0x18 ,  0xBE ,  0x1B ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0xFC ,  0x56 ,  0x3E ,  0x4B ,  0xC6 ,  0xD2 ,  0x79 ,  0x20 ,  0x9A ,  0xDB ,  0xC0 ,  0xFE ,  0x78 ,  0xCD ,  0x5A ,  0xF4 ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0x1F ,  0xDD ,  0xA8 ,  0x33 ,  0x88 ,  0x07 ,  0xC7 ,  0x31 ,  0xB1 ,  0x12 ,  0x10 ,  0x59 ,  0x27 ,  0x80 ,  0xEC ,  0x5F ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0x60 ,  0x51 ,  0x7F ,  0xA9 ,  0x19 ,  0xB5 ,  0x4A ,  0x0D ,  0x2D ,  0xE5 ,  0x7A ,  0x9F ,  0x93 ,  0xC9 ,  0x9C ,  0xEF ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0xA0 ,  0xE0 ,  0x3B ,  0x4D ,  0xAE ,  0x2A ,  0xF5 ,  0xB0 ,  0xC8 ,  0xEB ,  0xBB ,  0x3C ,  0x83 ,  0x53 ,  0x99 ,  0x61 ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        0x17 ,  0x2B ,  0x04 ,  0x7E ,  0xBA ,  0x77 ,  0xD6 ,  0x26 ,  0xE1 ,  0x69 ,  0x14 ,  0x63 ,  0x55 ,  0x21 ,  0x0C ,  0x7D  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    /**  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  Default  Constructor .  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -214,8 +266,6 @@ class Crypt_AES extends Crypt_Rijndael { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        $this -> mode  =  MCRYPT_MODE_CBC ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $this -> debuffer  =  $this -> enbuffer  =  '' ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                break ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            default :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                switch  ( $mode )  {  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -244,6 +294,36 @@ class Crypt_AES extends Crypt_Rijndael { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    /**  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  Extended  Crypt_Rijndael :: _setup ()   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  Optimizing  the  key  schedule  arrays  ( $w ,  $dw )  for  _encryptBlock ()  and  _decryptBlock ()  after  Crypt_Rijndael :: _setup ()  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  @ see  Crypt_Rijndael :: _setup ()  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  @ access  private  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    function  _setup ()   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        if  ( ! $this -> changed )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            return ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $this -> w  =  $this -> dw  =  array ();  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        parent :: _setup ();  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $this -> dw  =  array_reverse ( $this -> dw );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $w   =  array_pop ( $this -> w );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $dw  =  array_pop ( $this -> dw );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        foreach  ( $this -> w  as  $r  =>  $wr )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            foreach  ( $wr  as  $c  =>  $wc )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $w []   =  $wc ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $dw []  =  $this -> dw [ $r ][ $c ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $this -> w   =  $w ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $this -> dw  =  $dw ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    /**  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  Dummy  function 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -257,7 +337,6 @@ class Crypt_AES extends Crypt_Rijndael { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        return ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    /**  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  Sets  the  initialization  vector .  ( optional )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -295,51 +374,58 @@ class Crypt_AES extends Crypt_Rijndael { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    function  encrypt ( $plaintext )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        if  (  CRYPT_AES_MODE  ==  CRYPT_AES_MODE_MCRYPT  )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $changed  =  $this -> changed ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $this -> _mcryptSetup ();  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            /*  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            if  ( $this -> mode  ==  CRYPT_AES_MODE_CTR )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $iv  =  $this -> encryptIV ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $xor  =  mcrypt_generic ( $this -> enmcrypt ,  $this -> _generate_xor ( strlen ( $plaintext ),  $iv ));  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $ciphertext  =  $plaintext  ^  $xor ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                if  ( $this -> continuousBuffer )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $this -> encryptIV  =  $iv ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                return  $ciphertext ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            // re: http://phpseclib.sourceforge.net/cfb-demo.phps
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            // using mcrypt's default handing of CFB the above would output two different things.  using phpseclib's
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            // rewritten CFB implementation the above outputs the same thing twice.
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            if  ( $this -> mode  ==  'ncfb' )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                if  ( $changed )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $this -> ecb  =  mcrypt_module_open ( MCRYPT_RIJNDAEL_128 ,  '' ,  MCRYPT_MODE_ECB ,  '' );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    mcrypt_generic_init ( $this -> ecb ,  $this -> key ,  " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 " );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            if  ( $this -> mode  ==  'ncfb'  &&  $this -> continuousBuffer )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $iv  =  & $this -> encryptIV ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $pos  =  & $this -> enbuffer [ 'pos' ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $len  =  strlen ( $plaintext );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $ciphertext  =  '' ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $i  =  0 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                if  ( $pos )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $orig_pos  =  $pos ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $max  =  16  -  $pos ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    if  ( $len  >=  $max )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        $i  =  $max ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        $len -=  $max ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        $pos  =  0 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    }  else  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        $i  =  $len ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        $pos +=  $len ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        $len  =  0 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $ciphertext  =  substr ( $iv ,  $orig_pos )  ^  $plaintext ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $iv  =  substr_replace ( $iv ,  $ciphertext ,  $orig_pos ,  $i );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $this -> enbuffer [ 'enmcrypt_init' ]  =  true ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                if  ( strlen ( $this -> enbuffer ))  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $ciphertext  =  $plaintext  ^  substr ( $this -> encryptIV ,  strlen ( $this -> enbuffer ));  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $this -> enbuffer .=  $ciphertext ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    if  ( strlen ( $this -> enbuffer )  ==  16 )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        $this -> encryptIV  =  $this -> enbuffer ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        $this -> enbuffer  =  '' ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        mcrypt_generic_init ( $this -> enmcrypt ,  $this -> key ,  $this -> encryptIV );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                if  ( $len  >=  16 )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    if  ( $this -> enbuffer [ 'enmcrypt_init' ]  ===  false  ||  $len  >  280 )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        if  ( $this -> enbuffer [ 'enmcrypt_init' ]  ===  true )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            mcrypt_generic_init ( $this -> enmcrypt ,  $this -> key ,  $iv );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            $this -> enbuffer [ 'enmcrypt_init' ]  =  false ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        $ciphertext .=  mcrypt_generic ( $this -> enmcrypt ,  substr ( $plaintext ,  $i ,  $len  -  $len  %  16 ));  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        $iv  =  substr ( $ciphertext ,  - 16 );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        $len %=  16 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    }  else  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        while  ( $len  >=  16 )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            $iv  =  mcrypt_generic ( $this -> ecb ,  $iv )  ^  substr ( $plaintext ,  $i ,  16 );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            $ciphertext .=  $iv ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            $len -=  16 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                            $i +=  16 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $plaintext  =  substr ( $plaintext ,  strlen ( $ciphertext ));  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                }  else  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $ciphertext  =  '' ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $last_pos  =  strlen ( $plaintext )  &  0xFFFFFFF0 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $ciphertext .=  $last_pos  ?  mcrypt_generic ( $this -> enmcrypt ,  substr ( $plaintext ,  0 ,  $last_pos ))  :  '' ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                if  ( strlen ( $plaintext )  &  0xF )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    if  ( strlen ( $ciphertext ))  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        $this -> encryptIV  =  substr ( $ciphertext ,  - 16 );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $this -> encryptIV  =  mcrypt_generic ( $this -> ecb ,  $this -> encryptIV );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $this -> enbuffer  =  substr ( $plaintext ,  $last_pos )  ^  $this -> encryptIV ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $ciphertext .=  $this -> enbuffer ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                if  ( $len )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $iv  =  mcrypt_generic ( $this -> ecb ,  $iv );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $block  =  $iv  ^  substr ( $plaintext ,  - $len );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $iv  =  substr_replace ( $iv ,  $block ,  0 ,  $len );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $ciphertext .=  $block ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $pos  =  $len ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                return  $ciphertext ;  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -373,49 +459,41 @@ class Crypt_AES extends Crypt_Rijndael { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    function  decrypt ( $ciphertext )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        if  (  CRYPT_AES_MODE  ==  CRYPT_AES_MODE_MCRYPT  )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $changed  =  $this -> changed ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $this -> _mcryptSetup ();  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            /*  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            if  ( $this -> mode  ==  CRYPT_AES_MODE_CTR )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $iv  =  $this -> decryptIV ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $xor  =  mcrypt_generic ( $this -> enmcrypt ,  $this -> _generate_xor ( strlen ( $ciphertext ),  $iv ));  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $plaintext  =  $ciphertext  ^  $xor ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                if  ( $this -> continuousBuffer )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $this -> decryptIV  =  $iv ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                return  $plaintext ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            if  ( $this -> mode  ==  'ncfb' )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                if  ( $changed )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $this -> ecb  =  mcrypt_module_open ( MCRYPT_RIJNDAEL_128 ,  '' ,  MCRYPT_MODE_ECB ,  '' );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    mcrypt_generic_init ( $this -> ecb ,  $this -> key ,  " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 " );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                if  ( strlen ( $this -> debuffer ))  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $plaintext  =  $ciphertext  ^  substr ( $this -> decryptIV ,  strlen ( $this -> debuffer ));  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $this -> debuffer .=  substr ( $ciphertext ,  0 ,  strlen ( $plaintext ));  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    if  ( strlen ( $this -> debuffer )  ==  16 )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        $this -> decryptIV  =  $this -> debuffer ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        $this -> debuffer  =  '' ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        mcrypt_generic_init ( $this -> demcrypt ,  $this -> key ,  $this -> decryptIV );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            if  ( $this -> mode  ==  'ncfb'  &&  $this -> continuousBuffer )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $iv  =  & $this -> decryptIV ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $pos  =  & $this -> debuffer [ 'pos' ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $len  =  strlen ( $ciphertext );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $plaintext  =  '' ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $i  =  0 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                if  ( $pos )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $orig_pos  =  $pos ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $max  =  16  -  $pos ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    if  ( $len  >=  $max )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        $i  =  $max ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        $len -=  $max ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        $pos  =  0 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    }  else  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        $i  =  $len ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        $pos +=  $len ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        $len  =  0 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $ciphertext  =  substr ( $ciphertext ,  strlen ( $plaintext ));  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                }  else  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $plaintext  =  '' ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $plaintext  =  substr ( $iv ,  $orig_pos )  ^  $ciphertext ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $iv  =  substr_replace ( $iv ,  substr ( $ciphertext ,  0 ,  $i ),  $orig_pos ,  $i ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $last_pos  =  strlen ( $ciphertext )  &  0xFFFFFFF0 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $plaintext .=  $last_pos  ?  mdecrypt_generic ( $this -> demcrypt ,  substr ( $ciphertext ,  0 ,  $last_pos ))  :  '' ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                if  ( strlen ( $ciphertext )  &  0xF )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    if  ( strlen ( $plaintext ))  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                        $this -> decryptIV  =  substr ( $ciphertext ,  $last_pos  -  16 ,  16 );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $this -> decryptIV  =  mcrypt_generic ( $this -> ecb ,  $this -> decryptIV  );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $this -> debuffer  =   substr ( $ciphertext ,  $last_pos );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $plaintext .=  $this -> debuffer  ^  $this -> decryptIV  ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                if  ( $len  >=  16 )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $cb   =  subs tr ( $ciphertext ,  $i ,  $len  -  $len  %  16 ) ; 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                     $plaintext .=  mcrypt_generic ( $this -> ecb ,  $iv  .  $cb )  ^  $cb ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $iv  =  substr ( $cb ,  - 16 );   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $len %=  16 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                if  ( $len )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $iv  =  mcrypt_generic ( $this -> ecb ,  $iv );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $plaintext .=  $iv  ^  substr ( $ciphertext ,  - $len  );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $iv  =  substr_replace ( $iv ,   substr ( $ciphertext ,  - $len ),  0 ,  $len );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                    $pos  =  $len  ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                return  $plaintext ;  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -486,11 +564,20 @@ class Crypt_AES extends Crypt_Rijndael { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $this -> demcrypt  =  mcrypt_module_open ( MCRYPT_RIJNDAEL_128 ,  '' ,  $mode ,  '' );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $this -> enmcrypt  =  mcrypt_module_open ( MCRYPT_RIJNDAEL_128 ,  '' ,  $mode ,  '' );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            if  ( $mode  ==  'ncfb' )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $this -> ecb  =  mcrypt_module_open ( MCRYPT_RIJNDAEL_128 ,  '' ,  MCRYPT_MODE_ECB ,  '' );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  // else should mcrypt_generic_deinit be called?
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        mcrypt_generic_init ( $this -> demcrypt ,  $this -> key ,  $this -> iv );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        mcrypt_generic_init ( $this -> enmcrypt ,  $this -> key ,  $this -> iv );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        if  ( $this -> mode  ==  'ncfb' )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            mcrypt_generic_init ( $this -> ecb ,  $this -> key ,  " \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 " );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $this -> changed  =  false ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -506,53 +593,154 @@ class Crypt_AES extends Crypt_Rijndael { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    function  _encryptBlock ( $in )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $state  =  unpack ( 'N*word ' ,  $in );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $state  =  unpack ( 'N*' ,  $in );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $Nr   =  $this -> Nr ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $w  =  $this -> w ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $sbox   =  $this -> sbox ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $w    =  $this -> w ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $t0  =  $this -> t0 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $t1  =  $this -> t1 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $t2  =  $this -> t2 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $t3  =  $this -> t3 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        // addRoundKey and reindex $state
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $state  =  array (  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $state [ 'word1' ]  ^  $w [ 0 ][ 0 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $state [ 'word2' ]  ^  $w [ 0 ][ 1 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $state [ 'word3' ]  ^  $w [ 0 ][ 2 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $state [ 'word4' ]  ^  $w [ 0 ][ 3 ]  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        // addRoundKey
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s0  =  $state [ 1 ]  ^  $w [ 4 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s1  =  $state [ 2 ]  ^  $w [ 5 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s2  =  $state [ 3 ]  ^  $w [ 6 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s3  =  $state [ 4 ]  ^  $w [ 7 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        // shiftRows + subWord + mixColumns + addRoundKey
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        // we could loop unroll this and use if statements to do more rounds as necessary, but, in my tests, that yields
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        // only a marginal improvement.  since that also, imho, hinders the readability of the code, i've opted not to do it.
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        for  ( $round  =  1 ;  $round  <  $this -> Nr ;  $round ++ )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $state  =  array (  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $t0 [ $state [ 0 ]  &  0xFF000000 ]  ^  $t1 [ $state [ 1 ]  &  0x00FF0000 ]  ^  $t2 [ $state [ 2 ]  &  0x0000FF00 ]  ^  $t3 [ $state [ 3 ]  &  0x000000FF ]  ^  $w [ $round ][ 0 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $t0 [ $state [ 1 ]  &  0xFF000000 ]  ^  $t1 [ $state [ 2 ]  &  0x00FF0000 ]  ^  $t2 [ $state [ 3 ]  &  0x0000FF00 ]  ^  $t3 [ $state [ 0 ]  &  0x000000FF ]  ^  $w [ $round ][ 1 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $t0 [ $state [ 2 ]  &  0xFF000000 ]  ^  $t1 [ $state [ 3 ]  &  0x00FF0000 ]  ^  $t2 [ $state [ 0 ]  &  0x0000FF00 ]  ^  $t3 [ $state [ 1 ]  &  0x000000FF ]  ^  $w [ $round ][ 2 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $t0 [ $state [ 3 ]  &  0xFF000000 ]  ^  $t1 [ $state [ 0 ]  &  0x00FF0000 ]  ^  $t2 [ $state [ 1 ]  &  0x0000FF00 ]  ^  $t3 [ $state [ 2 ]  &  0x000000FF ]  ^  $w [ $round ][ 3 ]  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e0  =  $t0 [( $s0  >>  24 )  &  0xff ]  ^  $t1 [( $s1  >>  16 )  &  0xff ]  ^  $t2 [( $s2  >>  8 )  &  0xff ]  ^  $t3 [ $s3  &  0xff ]  ^  $w [ 8 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e1  =  $t0 [( $s1  >>  24 )  &  0xff ]  ^  $t1 [( $s2  >>  16 )  &  0xff ]  ^  $t2 [( $s3  >>  8 )  &  0xff ]  ^  $t3 [ $s0  &  0xff ]  ^  $w [ 9 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e2  =  $t0 [( $s2  >>  24 )  &  0xff ]  ^  $t1 [( $s3  >>  16 )  &  0xff ]  ^  $t2 [( $s0  >>  8 )  &  0xff ]  ^  $t3 [ $s1  &  0xff ]  ^  $w [ 10 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e3  =  $t0 [( $s3  >>  24 )  &  0xff ]  ^  $t1 [( $s0  >>  16 )  &  0xff ]  ^  $t2 [( $s1  >>  8 )  &  0xff ]  ^  $t3 [ $s2  &  0xff ]  ^  $w [ 11 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s0  =  $t0 [( $e0  >>  24 )  &  0xff ]  ^  $t1 [( $e1  >>  16 )  &  0xff ]  ^  $t2 [( $e2  >>  8 )  &  0xff ]  ^  $t3 [ $e3  &  0xff ]  ^  $w [ 12 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s1  =  $t0 [( $e1  >>  24 )  &  0xff ]  ^  $t1 [( $e2  >>  16 )  &  0xff ]  ^  $t2 [( $e3  >>  8 )  &  0xff ]  ^  $t3 [ $e0  &  0xff ]  ^  $w [ 13 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s2  =  $t0 [( $e2  >>  24 )  &  0xff ]  ^  $t1 [( $e3  >>  16 )  &  0xff ]  ^  $t2 [( $e0  >>  8 )  &  0xff ]  ^  $t3 [ $e1  &  0xff ]  ^  $w [ 14 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s3  =  $t0 [( $e3  >>  24 )  &  0xff ]  ^  $t1 [( $e0  >>  16 )  &  0xff ]  ^  $t2 [( $e1  >>  8 )  &  0xff ]  ^  $t3 [ $e2  &  0xff ]  ^  $w [ 15 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e0  =  $t0 [( $s0  >>  24 )  &  0xff ]  ^  $t1 [( $s1  >>  16 )  &  0xff ]  ^  $t2 [( $s2  >>  8 )  &  0xff ]  ^  $t3 [ $s3  &  0xff ]  ^  $w [ 16 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e1  =  $t0 [( $s1  >>  24 )  &  0xff ]  ^  $t1 [( $s2  >>  16 )  &  0xff ]  ^  $t2 [( $s3  >>  8 )  &  0xff ]  ^  $t3 [ $s0  &  0xff ]  ^  $w [ 17 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e2  =  $t0 [( $s2  >>  24 )  &  0xff ]  ^  $t1 [( $s3  >>  16 )  &  0xff ]  ^  $t2 [( $s0  >>  8 )  &  0xff ]  ^  $t3 [ $s1  &  0xff ]  ^  $w [ 18 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e3  =  $t0 [( $s3  >>  24 )  &  0xff ]  ^  $t1 [( $s0  >>  16 )  &  0xff ]  ^  $t2 [( $s1  >>  8 )  &  0xff ]  ^  $t3 [ $s2  &  0xff ]  ^  $w [ 19 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s0  =  $t0 [( $e0  >>  24 )  &  0xff ]  ^  $t1 [( $e1  >>  16 )  &  0xff ]  ^  $t2 [( $e2  >>  8 )  &  0xff ]  ^  $t3 [ $e3  &  0xff ]  ^  $w [ 20 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s1  =  $t0 [( $e1  >>  24 )  &  0xff ]  ^  $t1 [( $e2  >>  16 )  &  0xff ]  ^  $t2 [( $e3  >>  8 )  &  0xff ]  ^  $t3 [ $e0  &  0xff ]  ^  $w [ 21 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s2  =  $t0 [( $e2  >>  24 )  &  0xff ]  ^  $t1 [( $e3  >>  16 )  &  0xff ]  ^  $t2 [( $e0  >>  8 )  &  0xff ]  ^  $t3 [ $e1  &  0xff ]  ^  $w [ 22 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s3  =  $t0 [( $e3  >>  24 )  &  0xff ]  ^  $t1 [( $e0  >>  16 )  &  0xff ]  ^  $t2 [( $e1  >>  8 )  &  0xff ]  ^  $t3 [ $e2  &  0xff ]  ^  $w [ 23 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e0  =  $t0 [( $s0  >>  24 )  &  0xff ]  ^  $t1 [( $s1  >>  16 )  &  0xff ]  ^  $t2 [( $s2  >>  8 )  &  0xff ]  ^  $t3 [ $s3  &  0xff ]  ^  $w [ 24 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e1  =  $t0 [( $s1  >>  24 )  &  0xff ]  ^  $t1 [( $s2  >>  16 )  &  0xff ]  ^  $t2 [( $s3  >>  8 )  &  0xff ]  ^  $t3 [ $s0  &  0xff ]  ^  $w [ 25 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e2  =  $t0 [( $s2  >>  24 )  &  0xff ]  ^  $t1 [( $s3  >>  16 )  &  0xff ]  ^  $t2 [( $s0  >>  8 )  &  0xff ]  ^  $t3 [ $s1  &  0xff ]  ^  $w [ 26 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e3  =  $t0 [( $s3  >>  24 )  &  0xff ]  ^  $t1 [( $s0  >>  16 )  &  0xff ]  ^  $t2 [( $s1  >>  8 )  &  0xff ]  ^  $t3 [ $s2  &  0xff ]  ^  $w [ 27 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s0  =  $t0 [( $e0  >>  24 )  &  0xff ]  ^  $t1 [( $e1  >>  16 )  &  0xff ]  ^  $t2 [( $e2  >>  8 )  &  0xff ]  ^  $t3 [ $e3  &  0xff ]  ^  $w [ 28 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s1  =  $t0 [( $e1  >>  24 )  &  0xff ]  ^  $t1 [( $e2  >>  16 )  &  0xff ]  ^  $t2 [( $e3  >>  8 )  &  0xff ]  ^  $t3 [ $e0  &  0xff ]  ^  $w [ 29 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s2  =  $t0 [( $e2  >>  24 )  &  0xff ]  ^  $t1 [( $e3  >>  16 )  &  0xff ]  ^  $t2 [( $e0  >>  8 )  &  0xff ]  ^  $t3 [ $e1  &  0xff ]  ^  $w [ 30 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s3  =  $t0 [( $e3  >>  24 )  &  0xff ]  ^  $t1 [( $e0  >>  16 )  &  0xff ]  ^  $t2 [( $e1  >>  8 )  &  0xff ]  ^  $t3 [ $e2  &  0xff ]  ^  $w [ 31 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e0  =  $t0 [( $s0  >>  24 )  &  0xff ]  ^  $t1 [( $s1  >>  16 )  &  0xff ]  ^  $t2 [( $s2  >>  8 )  &  0xff ]  ^  $t3 [ $s3  &  0xff ]  ^  $w [ 32 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e1  =  $t0 [( $s1  >>  24 )  &  0xff ]  ^  $t1 [( $s2  >>  16 )  &  0xff ]  ^  $t2 [( $s3  >>  8 )  &  0xff ]  ^  $t3 [ $s0  &  0xff ]  ^  $w [ 33 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e2  =  $t0 [( $s2  >>  24 )  &  0xff ]  ^  $t1 [( $s3  >>  16 )  &  0xff ]  ^  $t2 [( $s0  >>  8 )  &  0xff ]  ^  $t3 [ $s1  &  0xff ]  ^  $w [ 34 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e3  =  $t0 [( $s3  >>  24 )  &  0xff ]  ^  $t1 [( $s0  >>  16 )  &  0xff ]  ^  $t2 [( $s1  >>  8 )  &  0xff ]  ^  $t3 [ $s2  &  0xff ]  ^  $w [ 35 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s0  =  $t0 [( $e0  >>  24 )  &  0xff ]  ^  $t1 [( $e1  >>  16 )  &  0xff ]  ^  $t2 [( $e2  >>  8 )  &  0xff ]  ^  $t3 [ $e3  &  0xff ]  ^  $w [ 36 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s1  =  $t0 [( $e1  >>  24 )  &  0xff ]  ^  $t1 [( $e2  >>  16 )  &  0xff ]  ^  $t2 [( $e3  >>  8 )  &  0xff ]  ^  $t3 [ $e0  &  0xff ]  ^  $w [ 37 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s2  =  $t0 [( $e2  >>  24 )  &  0xff ]  ^  $t1 [( $e3  >>  16 )  &  0xff ]  ^  $t2 [( $e0  >>  8 )  &  0xff ]  ^  $t3 [ $e1  &  0xff ]  ^  $w [ 38 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s3  =  $t0 [( $e3  >>  24 )  &  0xff ]  ^  $t1 [( $e0  >>  16 )  &  0xff ]  ^  $t2 [( $e1  >>  8 )  &  0xff ]  ^  $t3 [ $e2  &  0xff ]  ^  $w [ 39 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e0  =  $t0 [( $s0  >>  24 )  &  0xff ]  ^  $t1 [( $s1  >>  16 )  &  0xff ]  ^  $t2 [( $s2  >>  8 )  &  0xff ]  ^  $t3 [ $s3  &  0xff ]  ^  $w [ 40 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e1  =  $t0 [( $s1  >>  24 )  &  0xff ]  ^  $t1 [( $s2  >>  16 )  &  0xff ]  ^  $t2 [( $s3  >>  8 )  &  0xff ]  ^  $t3 [ $s0  &  0xff ]  ^  $w [ 41 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e2  =  $t0 [( $s2  >>  24 )  &  0xff ]  ^  $t1 [( $s3  >>  16 )  &  0xff ]  ^  $t2 [( $s0  >>  8 )  &  0xff ]  ^  $t3 [ $s1  &  0xff ]  ^  $w [ 42 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e3  =  $t0 [( $s3  >>  24 )  &  0xff ]  ^  $t1 [( $s0  >>  16 )  &  0xff ]  ^  $t2 [( $s1  >>  8 )  &  0xff ]  ^  $t3 [ $s2  &  0xff ]  ^  $w [ 43 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        switch  ( $this -> Nr )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            case  10 :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                break ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            case  14 :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s0  =  $t0 [( $e0  >>  24 )  &  0xff ]  ^  $t1 [( $e1  >>  16 )  &  0xff ]  ^  $t2 [( $e2  >>  8 )  &  0xff ]  ^  $t3 [ $e3  &  0xff ]  ^  $w [ 44 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s1  =  $t0 [( $e1  >>  24 )  &  0xff ]  ^  $t1 [( $e2  >>  16 )  &  0xff ]  ^  $t2 [( $e3  >>  8 )  &  0xff ]  ^  $t3 [ $e0  &  0xff ]  ^  $w [ 45 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s2  =  $t0 [( $e2  >>  24 )  &  0xff ]  ^  $t1 [( $e3  >>  16 )  &  0xff ]  ^  $t2 [( $e0  >>  8 )  &  0xff ]  ^  $t3 [ $e1  &  0xff ]  ^  $w [ 46 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s3  =  $t0 [( $e3  >>  24 )  &  0xff ]  ^  $t1 [( $e0  >>  16 )  &  0xff ]  ^  $t2 [( $e1  >>  8 )  &  0xff ]  ^  $t3 [ $e2  &  0xff ]  ^  $w [ 47 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e0  =  $t0 [( $s0  >>  24 )  &  0xff ]  ^  $t1 [( $s1  >>  16 )  &  0xff ]  ^  $t2 [( $s2  >>  8 )  &  0xff ]  ^  $t3 [ $s3  &  0xff ]  ^  $w [ 48 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e1  =  $t0 [( $s1  >>  24 )  &  0xff ]  ^  $t1 [( $s2  >>  16 )  &  0xff ]  ^  $t2 [( $s3  >>  8 )  &  0xff ]  ^  $t3 [ $s0  &  0xff ]  ^  $w [ 49 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e2  =  $t0 [( $s2  >>  24 )  &  0xff ]  ^  $t1 [( $s3  >>  16 )  &  0xff ]  ^  $t2 [( $s0  >>  8 )  &  0xff ]  ^  $t3 [ $s1  &  0xff ]  ^  $w [ 50 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e3  =  $t0 [( $s3  >>  24 )  &  0xff ]  ^  $t1 [( $s0  >>  16 )  &  0xff ]  ^  $t2 [( $s1  >>  8 )  &  0xff ]  ^  $t3 [ $s2  &  0xff ]  ^  $w [ 51 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s0  =  $t0 [( $e0  >>  24 )  &  0xff ]  ^  $t1 [( $e1  >>  16 )  &  0xff ]  ^  $t2 [( $e2  >>  8 )  &  0xff ]  ^  $t3 [ $e3  &  0xff ]  ^  $w [ 52 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s1  =  $t0 [( $e1  >>  24 )  &  0xff ]  ^  $t1 [( $e2  >>  16 )  &  0xff ]  ^  $t2 [( $e3  >>  8 )  &  0xff ]  ^  $t3 [ $e0  &  0xff ]  ^  $w [ 53 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s2  =  $t0 [( $e2  >>  24 )  &  0xff ]  ^  $t1 [( $e3  >>  16 )  &  0xff ]  ^  $t2 [( $e0  >>  8 )  &  0xff ]  ^  $t3 [ $e1  &  0xff ]  ^  $w [ 54 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s3  =  $t0 [( $e3  >>  24 )  &  0xff ]  ^  $t1 [( $e0  >>  16 )  &  0xff ]  ^  $t2 [( $e1  >>  8 )  &  0xff ]  ^  $t3 [ $e2  &  0xff ]  ^  $w [ 55 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e0  =  $t0 [( $s0  >>  24 )  &  0xff ]  ^  $t1 [( $s1  >>  16 )  &  0xff ]  ^  $t2 [( $s2  >>  8 )  &  0xff ]  ^  $t3 [ $s3  &  0xff ]  ^  $w [ 56 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e1  =  $t0 [( $s1  >>  24 )  &  0xff ]  ^  $t1 [( $s2  >>  16 )  &  0xff ]  ^  $t2 [( $s3  >>  8 )  &  0xff ]  ^  $t3 [ $s0  &  0xff ]  ^  $w [ 57 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e2  =  $t0 [( $s2  >>  24 )  &  0xff ]  ^  $t1 [( $s3  >>  16 )  &  0xff ]  ^  $t2 [( $s0  >>  8 )  &  0xff ]  ^  $t3 [ $s1  &  0xff ]  ^  $w [ 58 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e3  =  $t0 [( $s3  >>  24 )  &  0xff ]  ^  $t1 [( $s0  >>  16 )  &  0xff ]  ^  $t2 [( $s1  >>  8 )  &  0xff ]  ^  $t3 [ $s2  &  0xff ]  ^  $w [ 59 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                break ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            case  12 :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s0  =  $t0 [( $e0  >>  24 )  &  0xff ]  ^  $t1 [( $e1  >>  16 )  &  0xff ]  ^  $t2 [( $e2  >>  8 )  &  0xff ]  ^  $t3 [ $e3  &  0xff ]  ^  $w [ 44 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s1  =  $t0 [( $e1  >>  24 )  &  0xff ]  ^  $t1 [( $e2  >>  16 )  &  0xff ]  ^  $t2 [( $e3  >>  8 )  &  0xff ]  ^  $t3 [ $e0  &  0xff ]  ^  $w [ 45 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s2  =  $t0 [( $e2  >>  24 )  &  0xff ]  ^  $t1 [( $e3  >>  16 )  &  0xff ]  ^  $t2 [( $e0  >>  8 )  &  0xff ]  ^  $t3 [ $e1  &  0xff ]  ^  $w [ 46 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s3  =  $t0 [( $e3  >>  24 )  &  0xff ]  ^  $t1 [( $e0  >>  16 )  &  0xff ]  ^  $t2 [( $e1  >>  8 )  &  0xff ]  ^  $t3 [ $e2  &  0xff ]  ^  $w [ 47 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e0  =  $t0 [( $s0  >>  24 )  &  0xff ]  ^  $t1 [( $s1  >>  16 )  &  0xff ]  ^  $t2 [( $s2  >>  8 )  &  0xff ]  ^  $t3 [ $s3  &  0xff ]  ^  $w [ 48 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e1  =  $t0 [( $s1  >>  24 )  &  0xff ]  ^  $t1 [( $s2  >>  16 )  &  0xff ]  ^  $t2 [( $s3  >>  8 )  &  0xff ]  ^  $t3 [ $s0  &  0xff ]  ^  $w [ 49 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e2  =  $t0 [( $s2  >>  24 )  &  0xff ]  ^  $t1 [( $s3  >>  16 )  &  0xff ]  ^  $t2 [( $s0  >>  8 )  &  0xff ]  ^  $t3 [ $s1  &  0xff ]  ^  $w [ 50 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e3  =  $t0 [( $s3  >>  24 )  &  0xff ]  ^  $t1 [( $s0  >>  16 )  &  0xff ]  ^  $t2 [( $s1  >>  8 )  &  0xff ]  ^  $t3 [ $s2  &  0xff ]  ^  $w [ 51 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                break ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            case  13 :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s0  =  $t0 [( $e0  >>  24 )  &  0xff ]  ^  $t1 [( $e1  >>  16 )  &  0xff ]  ^  $t2 [( $e2  >>  8 )  &  0xff ]  ^  $t3 [ $e3  &  0xff ]  ^  $w [ 44 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s1  =  $t0 [( $e1  >>  24 )  &  0xff ]  ^  $t1 [( $e2  >>  16 )  &  0xff ]  ^  $t2 [( $e3  >>  8 )  &  0xff ]  ^  $t3 [ $e0  &  0xff ]  ^  $w [ 45 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s2  =  $t0 [( $e2  >>  24 )  &  0xff ]  ^  $t1 [( $e3  >>  16 )  &  0xff ]  ^  $t2 [( $e0  >>  8 )  &  0xff ]  ^  $t3 [ $e1  &  0xff ]  ^  $w [ 46 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s3  =  $t0 [( $e3  >>  24 )  &  0xff ]  ^  $t1 [( $e0  >>  16 )  &  0xff ]  ^  $t2 [( $e1  >>  8 )  &  0xff ]  ^  $t3 [ $e2  &  0xff ]  ^  $w [ 47 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e0  =  $t0 [( $s0  >>  24 )  &  0xff ]  ^  $t1 [( $s1  >>  16 )  &  0xff ]  ^  $t2 [( $s2  >>  8 )  &  0xff ]  ^  $t3 [ $s3  &  0xff ]  ^  $w [ 48 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e1  =  $t0 [( $s1  >>  24 )  &  0xff ]  ^  $t1 [( $s2  >>  16 )  &  0xff ]  ^  $t2 [( $s3  >>  8 )  &  0xff ]  ^  $t3 [ $s0  &  0xff ]  ^  $w [ 49 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e2  =  $t0 [( $s2  >>  24 )  &  0xff ]  ^  $t1 [( $s3  >>  16 )  &  0xff ]  ^  $t2 [( $s0  >>  8 )  &  0xff ]  ^  $t3 [ $s1  &  0xff ]  ^  $w [ 50 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e3  =  $t0 [( $s3  >>  24 )  &  0xff ]  ^  $t1 [( $s0  >>  16 )  &  0xff ]  ^  $t2 [( $s1  >>  8 )  &  0xff ]  ^  $t3 [ $s2  &  0xff ]  ^  $w [ 51 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s0  =  $t0 [( $e0  >>  24 )  &  0xff ]  ^  $t1 [( $e1  >>  16 )  &  0xff ]  ^  $t2 [( $e2  >>  8 )  &  0xff ]  ^  $t3 [ $e3  &  0xff ]  ^  $w [ 52 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s1  =  $t0 [( $e1  >>  24 )  &  0xff ]  ^  $t1 [( $e2  >>  16 )  &  0xff ]  ^  $t2 [( $e3  >>  8 )  &  0xff ]  ^  $t3 [ $e0  &  0xff ]  ^  $w [ 53 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s2  =  $t0 [( $e2  >>  24 )  &  0xff ]  ^  $t1 [( $e3  >>  16 )  &  0xff ]  ^  $t2 [( $e0  >>  8 )  &  0xff ]  ^  $t3 [ $e1  &  0xff ]  ^  $w [ 54 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e3  =  $t0 [( $e3  >>  24 )  &  0xff ]  ^  $t1 [( $e0  >>  16 )  &  0xff ]  ^  $t2 [( $e1  >>  8 )  &  0xff ]  ^  $t3 [ $e2  &  0xff ]  ^  $w [ 55 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                // Note: Here we skip $s3 but using $e3
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e0  =  $s0 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e1  =  $s1 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e2  =  $s2 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                // $e3 = $s3;
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                break ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            default :  // 11
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s0  =  $t0 [( $e0  >>  24 )  &  0xff ]  ^  $t1 [( $e1  >>  16 )  &  0xff ]  ^  $t2 [( $e2  >>  8 )  &  0xff ]  ^  $t3 [ $e3  &  0xff ]  ^  $w [ 44 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s1  =  $t0 [( $e1  >>  24 )  &  0xff ]  ^  $t1 [( $e2  >>  16 )  &  0xff ]  ^  $t2 [( $e3  >>  8 )  &  0xff ]  ^  $t3 [ $e0  &  0xff ]  ^  $w [ 45 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s2  =  $t0 [( $e2  >>  24 )  &  0xff ]  ^  $t1 [( $e3  >>  16 )  &  0xff ]  ^  $t2 [( $e0  >>  8 )  &  0xff ]  ^  $t3 [ $e1  &  0xff ]  ^  $w [ 46 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e3  =  $t0 [( $e3  >>  24 )  &  0xff ]  ^  $t1 [( $e0  >>  16 )  &  0xff ]  ^  $t2 [( $e1  >>  8 )  &  0xff ]  ^  $t3 [ $e2  &  0xff ]  ^  $w [ 47 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                // Note: Here we skip $s3 but using $e3
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e0  =  $s0 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e1  =  $s1 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e2  =  $s2 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                // $e3 = $s3;
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        // subWord
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $state  =  array (  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $this -> _subWord ( $state [ 0 ]),  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $this -> _subWord ( $state [ 1 ]),  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $this -> _subWord ( $state [ 2 ]),  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $this -> _subWord ( $state [ 3 ])  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e0  =  $sbox [ $e0  &  0xff ]  |  ( $sbox [( $e0  >>  8 )  &  0xff ]  <<  8 )  |  ( $sbox [( $e0  >>  16 )  &  0xff ]  <<  16 )  |  ( $sbox [( $e0  >>  24 )  &  0xff ]  <<  24 );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e1  =  $sbox [ $e1  &  0xff ]  |  ( $sbox [( $e1  >>  8 )  &  0xff ]  <<  8 )  |  ( $sbox [( $e1  >>  16 )  &  0xff ]  <<  16 )  |  ( $sbox [( $e1  >>  24 )  &  0xff ]  <<  24 );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e2  =  $sbox [ $e2  &  0xff ]  |  ( $sbox [( $e2  >>  8 )  &  0xff ]  <<  8 )  |  ( $sbox [( $e2  >>  16 )  &  0xff ]  <<  16 )  |  ( $sbox [( $e2  >>  24 )  &  0xff ]  <<  24 );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e3  =  $sbox [ $e3  &  0xff ]  |  ( $sbox [( $e3  >>  8 )  &  0xff ]  <<  8 )  |  ( $sbox [( $e3  >>  16 )  &  0xff ]  <<  16 )  |  ( $sbox [( $e3  >>  24 )  &  0xff ]  <<  24 );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        // shiftRows + addRoundKey
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $state  =  array (  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            ( $state [ 0 ]  &  0xFF000000 )  ^  ( $state [ 1 ]  &  0x00FF0000 )  ^  ( $state [ 2 ]  &  0x0000FF00 )  ^  ( $state [ 3 ]  &  0x000000FF )  ^  $this -> w [ $this -> Nr ][ 0 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            ( $state [ 1 ]  &  0xFF000000 )  ^  ( $state [ 2 ]  &  0x00FF0000 )  ^  ( $state [ 3 ]  &  0x0000FF00 )  ^  ( $state [ 0 ]  &  0x000000FF )  ^  $this -> w [ $this -> Nr ][ 1 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            ( $state [ 2 ]  &  0xFF000000 )  ^  ( $state [ 3 ]  &  0x00FF0000 )  ^  ( $state [ 0 ]  &  0x0000FF00 )  ^  ( $state [ 1 ]  &  0x000000FF )  ^  $this -> w [ $this -> Nr ][ 2 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            ( $state [ 3 ]  &  0xFF000000 )  ^  ( $state [ 0 ]  &  0x00FF0000 )  ^  ( $state [ 1 ]  &  0x0000FF00 )  ^  ( $state [ 2 ]  &  0x000000FF )  ^  $this -> w [ $this -> Nr ][ 3 ]  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        return  pack ( 'N*' ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            ( $e0  &  0xFF000000 )  ^  ( $e1  &  0x00FF0000 )  ^  ( $e2  &  0x0000FF00 )  ^  ( $e3  &  0x000000FF )  ^  $w [ 0 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            ( $e1  &  0xFF000000 )  ^  ( $e2  &  0x00FF0000 )  ^  ( $e3  &  0x0000FF00 )  ^  ( $e0  &  0x000000FF )  ^  $w [ 1 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            ( $e2  &  0xFF000000 )  ^  ( $e3  &  0x00FF0000 )  ^  ( $e0  &  0x0000FF00 )  ^  ( $e1  &  0x000000FF )  ^  $w [ 2 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            ( $e3  &  0xFF000000 )  ^  ( $e0  &  0x00FF0000 )  ^  ( $e1  &  0x0000FF00 )  ^  ( $e2  &  0x000000FF )  ^  $w [ 3 ]  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        return  pack ( 'N*' ,  $state [ 0 ],  $state [ 1 ],  $state [ 2 ],  $state [ 3 ]);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    /**  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -567,43 +755,190 @@ class Crypt_AES extends Crypt_Rijndael { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    function  _decryptBlock ( $in )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $state  =  unpack ( 'N*word ' ,  $in );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $state  =  unpack ( 'N*' ,  $in );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $Nr   =  $this -> Nr ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $dw  =  $this -> dw ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $sbox   =  $this -> isbox ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $dw    =  $this -> dw ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $dt0  =  $this -> dt0 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $dt1  =  $this -> dt1 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $dt2  =  $this -> dt2 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $dt3  =  $this -> dt3 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        // addRoundKey and reindex $state
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $state  =  array (  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $state [ 'word1' ]  ^  $dw [ $this -> Nr ][ 0 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $state [ 'word2' ]  ^  $dw [ $this -> Nr ][ 1 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $state [ 'word3' ]  ^  $dw [ $this -> Nr ][ 2 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $state [ 'word4' ]  ^  $dw [ $this -> Nr ][ 3 ]  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        // addRoundKey
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s0  =  $state [ 1 ]  ^  $dw [ 4 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s1  =  $state [ 2 ]  ^  $dw [ 5 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s2  =  $state [ 3 ]  ^  $dw [ 6 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s3  =  $state [ 4 ]  ^  $dw [ 7 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        // invShiftRows + invSubBytes + invMixColumns + addRoundKey
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        for  ( $round  =  $this -> Nr  -  1 ;  $round  >  0 ;  $round -- )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $state  =  array (  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $dt0 [ $state [ 0 ]  &  0xFF000000 ]  ^  $dt1 [ $state [ 3 ]  &  0x00FF0000 ]  ^  $dt2 [ $state [ 2 ]  &  0x0000FF00 ]  ^  $dt3 [ $state [ 1 ]  &  0x000000FF ]  ^  $dw [ $round ][ 0 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $dt0 [ $state [ 1 ]  &  0xFF000000 ]  ^  $dt1 [ $state [ 0 ]  &  0x00FF0000 ]  ^  $dt2 [ $state [ 3 ]  &  0x0000FF00 ]  ^  $dt3 [ $state [ 2 ]  &  0x000000FF ]  ^  $dw [ $round ][ 1 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $dt0 [ $state [ 2 ]  &  0xFF000000 ]  ^  $dt1 [ $state [ 1 ]  &  0x00FF0000 ]  ^  $dt2 [ $state [ 0 ]  &  0x0000FF00 ]  ^  $dt3 [ $state [ 3 ]  &  0x000000FF ]  ^  $dw [ $round ][ 2 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $dt0 [ $state [ 3 ]  &  0xFF000000 ]  ^  $dt1 [ $state [ 2 ]  &  0x00FF0000 ]  ^  $dt2 [ $state [ 1 ]  &  0x0000FF00 ]  ^  $dt3 [ $state [ 0 ]  &  0x000000FF ]  ^  $dw [ $round ][ 3 ]  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e0  =  $dt0 [( $s0  >>  24 )  &  0xff ]  ^  $dt1 [( $s3  >>  16 )  &  0xff ]  ^  $dt2 [( $s2  >>  8 )  &  0xff ]  ^  $dt3 [ $s1  &  0xff ]  ^  $dw [ 8 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e1  =  $dt0 [( $s1  >>  24 )  &  0xff ]  ^  $dt1 [( $s0  >>  16 )  &  0xff ]  ^  $dt2 [( $s3  >>  8 )  &  0xff ]  ^  $dt3 [ $s2  &  0xff ]  ^  $dw [ 9 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e2  =  $dt0 [( $s2  >>  24 )  &  0xff ]  ^  $dt1 [( $s1  >>  16 )  &  0xff ]  ^  $dt2 [( $s0  >>  8 )  &  0xff ]  ^  $dt3 [ $s3  &  0xff ]  ^  $dw [ 10 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e3  =  $dt0 [( $s3  >>  24 )  &  0xff ]  ^  $dt1 [( $s2  >>  16 )  &  0xff ]  ^  $dt2 [( $s1  >>  8 )  &  0xff ]  ^  $dt3 [ $s0  &  0xff ]  ^  $dw [ 11 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s0  =  $dt0 [( $e0  >>  24 )  &  0xff ]  ^  $dt1 [( $e3  >>  16 )  &  0xff ]  ^  $dt2 [( $e2  >>  8 )  &  0xff ]  ^  $dt3 [ $e1  &  0xff ]  ^  $dw [ 12 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s1  =  $dt0 [( $e1  >>  24 )  &  0xff ]  ^  $dt1 [( $e0  >>  16 )  &  0xff ]  ^  $dt2 [( $e3  >>  8 )  &  0xff ]  ^  $dt3 [ $e2  &  0xff ]  ^  $dw [ 13 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s2  =  $dt0 [( $e2  >>  24 )  &  0xff ]  ^  $dt1 [( $e1  >>  16 )  &  0xff ]  ^  $dt2 [( $e0  >>  8 )  &  0xff ]  ^  $dt3 [ $e3  &  0xff ]  ^  $dw [ 14 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s3  =  $dt0 [( $e3  >>  24 )  &  0xff ]  ^  $dt1 [( $e2  >>  16 )  &  0xff ]  ^  $dt2 [( $e1  >>  8 )  &  0xff ]  ^  $dt3 [ $e0  &  0xff ]  ^  $dw [ 15 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e0  =  $dt0 [( $s0  >>  24 )  &  0xff ]  ^  $dt1 [( $s3  >>  16 )  &  0xff ]  ^  $dt2 [( $s2  >>  8 )  &  0xff ]  ^  $dt3 [ $s1  &  0xff ]  ^  $dw [ 16 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e1  =  $dt0 [( $s1  >>  24 )  &  0xff ]  ^  $dt1 [( $s0  >>  16 )  &  0xff ]  ^  $dt2 [( $s3  >>  8 )  &  0xff ]  ^  $dt3 [ $s2  &  0xff ]  ^  $dw [ 17 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e2  =  $dt0 [( $s2  >>  24 )  &  0xff ]  ^  $dt1 [( $s1  >>  16 )  &  0xff ]  ^  $dt2 [( $s0  >>  8 )  &  0xff ]  ^  $dt3 [ $s3  &  0xff ]  ^  $dw [ 18 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e3  =  $dt0 [( $s3  >>  24 )  &  0xff ]  ^  $dt1 [( $s2  >>  16 )  &  0xff ]  ^  $dt2 [( $s1  >>  8 )  &  0xff ]  ^  $dt3 [ $s0  &  0xff ]  ^  $dw [ 19 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s0  =  $dt0 [( $e0  >>  24 )  &  0xff ]  ^  $dt1 [( $e3  >>  16 )  &  0xff ]  ^  $dt2 [( $e2  >>  8 )  &  0xff ]  ^  $dt3 [ $e1  &  0xff ]  ^  $dw [ 20 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s1  =  $dt0 [( $e1  >>  24 )  &  0xff ]  ^  $dt1 [( $e0  >>  16 )  &  0xff ]  ^  $dt2 [( $e3  >>  8 )  &  0xff ]  ^  $dt3 [ $e2  &  0xff ]  ^  $dw [ 21 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s2  =  $dt0 [( $e2  >>  24 )  &  0xff ]  ^  $dt1 [( $e1  >>  16 )  &  0xff ]  ^  $dt2 [( $e0  >>  8 )  &  0xff ]  ^  $dt3 [ $e3  &  0xff ]  ^  $dw [ 22 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s3  =  $dt0 [( $e3  >>  24 )  &  0xff ]  ^  $dt1 [( $e2  >>  16 )  &  0xff ]  ^  $dt2 [( $e1  >>  8 )  &  0xff ]  ^  $dt3 [ $e0  &  0xff ]  ^  $dw [ 23 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e0  =  $dt0 [( $s0  >>  24 )  &  0xff ]  ^  $dt1 [( $s3  >>  16 )  &  0xff ]  ^  $dt2 [( $s2  >>  8 )  &  0xff ]  ^  $dt3 [ $s1  &  0xff ]  ^  $dw [ 24 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e1  =  $dt0 [( $s1  >>  24 )  &  0xff ]  ^  $dt1 [( $s0  >>  16 )  &  0xff ]  ^  $dt2 [( $s3  >>  8 )  &  0xff ]  ^  $dt3 [ $s2  &  0xff ]  ^  $dw [ 25 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e2  =  $dt0 [( $s2  >>  24 )  &  0xff ]  ^  $dt1 [( $s1  >>  16 )  &  0xff ]  ^  $dt2 [( $s0  >>  8 )  &  0xff ]  ^  $dt3 [ $s3  &  0xff ]  ^  $dw [ 26 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e3  =  $dt0 [( $s3  >>  24 )  &  0xff ]  ^  $dt1 [( $s2  >>  16 )  &  0xff ]  ^  $dt2 [( $s1  >>  8 )  &  0xff ]  ^  $dt3 [ $s0  &  0xff ]  ^  $dw [ 27 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s0  =  $dt0 [( $e0  >>  24 )  &  0xff ]  ^  $dt1 [( $e3  >>  16 )  &  0xff ]  ^  $dt2 [( $e2  >>  8 )  &  0xff ]  ^  $dt3 [ $e1  &  0xff ]  ^  $dw [ 28 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s1  =  $dt0 [( $e1  >>  24 )  &  0xff ]  ^  $dt1 [( $e0  >>  16 )  &  0xff ]  ^  $dt2 [( $e3  >>  8 )  &  0xff ]  ^  $dt3 [ $e2  &  0xff ]  ^  $dw [ 29 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s2  =  $dt0 [( $e2  >>  24 )  &  0xff ]  ^  $dt1 [( $e1  >>  16 )  &  0xff ]  ^  $dt2 [( $e0  >>  8 )  &  0xff ]  ^  $dt3 [ $e3  &  0xff ]  ^  $dw [ 30 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s3  =  $dt0 [( $e3  >>  24 )  &  0xff ]  ^  $dt1 [( $e2  >>  16 )  &  0xff ]  ^  $dt2 [( $e1  >>  8 )  &  0xff ]  ^  $dt3 [ $e0  &  0xff ]  ^  $dw [ 31 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e0  =  $dt0 [( $s0  >>  24 )  &  0xff ]  ^  $dt1 [( $s3  >>  16 )  &  0xff ]  ^  $dt2 [( $s2  >>  8 )  &  0xff ]  ^  $dt3 [ $s1  &  0xff ]  ^  $dw [ 32 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e1  =  $dt0 [( $s1  >>  24 )  &  0xff ]  ^  $dt1 [( $s0  >>  16 )  &  0xff ]  ^  $dt2 [( $s3  >>  8 )  &  0xff ]  ^  $dt3 [ $s2  &  0xff ]  ^  $dw [ 33 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e2  =  $dt0 [( $s2  >>  24 )  &  0xff ]  ^  $dt1 [( $s1  >>  16 )  &  0xff ]  ^  $dt2 [( $s0  >>  8 )  &  0xff ]  ^  $dt3 [ $s3  &  0xff ]  ^  $dw [ 34 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e3  =  $dt0 [( $s3  >>  24 )  &  0xff ]  ^  $dt1 [( $s2  >>  16 )  &  0xff ]  ^  $dt2 [( $s1  >>  8 )  &  0xff ]  ^  $dt3 [ $s0  &  0xff ]  ^  $dw [ 35 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s0  =  $dt0 [( $e0  >>  24 )  &  0xff ]  ^  $dt1 [( $e3  >>  16 )  &  0xff ]  ^  $dt2 [( $e2  >>  8 )  &  0xff ]  ^  $dt3 [ $e1  &  0xff ]  ^  $dw [ 36 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s1  =  $dt0 [( $e1  >>  24 )  &  0xff ]  ^  $dt1 [( $e0  >>  16 )  &  0xff ]  ^  $dt2 [( $e3  >>  8 )  &  0xff ]  ^  $dt3 [ $e2  &  0xff ]  ^  $dw [ 37 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s2  =  $dt0 [( $e2  >>  24 )  &  0xff ]  ^  $dt1 [( $e1  >>  16 )  &  0xff ]  ^  $dt2 [( $e0  >>  8 )  &  0xff ]  ^  $dt3 [ $e3  &  0xff ]  ^  $dw [ 38 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $s3  =  $dt0 [( $e3  >>  24 )  &  0xff ]  ^  $dt1 [( $e2  >>  16 )  &  0xff ]  ^  $dt2 [( $e1  >>  8 )  &  0xff ]  ^  $dt3 [ $e0  &  0xff ]  ^  $dw [ 39 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e0  =  $dt0 [( $s0  >>  24 )  &  0xff ]  ^  $dt1 [( $s3  >>  16 )  &  0xff ]  ^  $dt2 [( $s2  >>  8 )  &  0xff ]  ^  $dt3 [ $s1  &  0xff ]  ^  $dw [ 40 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e1  =  $dt0 [( $s1  >>  24 )  &  0xff ]  ^  $dt1 [( $s0  >>  16 )  &  0xff ]  ^  $dt2 [( $s3  >>  8 )  &  0xff ]  ^  $dt3 [ $s2  &  0xff ]  ^  $dw [ 41 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e2  =  $dt0 [( $s2  >>  24 )  &  0xff ]  ^  $dt1 [( $s1  >>  16 )  &  0xff ]  ^  $dt2 [( $s0  >>  8 )  &  0xff ]  ^  $dt3 [ $s3  &  0xff ]  ^  $dw [ 42 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e3  =  $dt0 [( $s3  >>  24 )  &  0xff ]  ^  $dt1 [( $s2  >>  16 )  &  0xff ]  ^  $dt2 [( $s1  >>  8 )  &  0xff ]  ^  $dt3 [ $s0  &  0xff ]  ^  $dw [ 43 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        switch  ( $this -> Nr )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            case  10 :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                break ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            case  14 :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s0  =  $dt0 [( $e0  >>  24 )  &  0xff ]  ^  $dt1 [( $e3  >>  16 )  &  0xff ]  ^  $dt2 [( $e2  >>  8 )  &  0xff ]  ^  $dt3 [ $e1  &  0xff ]  ^  $dw [ 44 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s1  =  $dt0 [( $e1  >>  24 )  &  0xff ]  ^  $dt1 [( $e0  >>  16 )  &  0xff ]  ^  $dt2 [( $e3  >>  8 )  &  0xff ]  ^  $dt3 [ $e2  &  0xff ]  ^  $dw [ 45 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s2  =  $dt0 [( $e2  >>  24 )  &  0xff ]  ^  $dt1 [( $e1  >>  16 )  &  0xff ]  ^  $dt2 [( $e0  >>  8 )  &  0xff ]  ^  $dt3 [ $e3  &  0xff ]  ^  $dw [ 46 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s3  =  $dt0 [( $e3  >>  24 )  &  0xff ]  ^  $dt1 [( $e2  >>  16 )  &  0xff ]  ^  $dt2 [( $e1  >>  8 )  &  0xff ]  ^  $dt3 [ $e0  &  0xff ]  ^  $dw [ 47 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e0  =  $dt0 [( $s0  >>  24 )  &  0xff ]  ^  $dt1 [( $s3  >>  16 )  &  0xff ]  ^  $dt2 [( $s2  >>  8 )  &  0xff ]  ^  $dt3 [ $s1  &  0xff ]  ^  $dw [ 48 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e1  =  $dt0 [( $s1  >>  24 )  &  0xff ]  ^  $dt1 [( $s0  >>  16 )  &  0xff ]  ^  $dt2 [( $s3  >>  8 )  &  0xff ]  ^  $dt3 [ $s2  &  0xff ]  ^  $dw [ 49 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e2  =  $dt0 [( $s2  >>  24 )  &  0xff ]  ^  $dt1 [( $s1  >>  16 )  &  0xff ]  ^  $dt2 [( $s0  >>  8 )  &  0xff ]  ^  $dt3 [ $s3  &  0xff ]  ^  $dw [ 50 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e3  =  $dt0 [( $s3  >>  24 )  &  0xff ]  ^  $dt1 [( $s2  >>  16 )  &  0xff ]  ^  $dt2 [( $s1  >>  8 )  &  0xff ]  ^  $dt3 [ $s0  &  0xff ]  ^  $dw [ 51 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s0  =  $dt0 [( $e0  >>  24 )  &  0xff ]  ^  $dt1 [( $e3  >>  16 )  &  0xff ]  ^  $dt2 [( $e2  >>  8 )  &  0xff ]  ^  $dt3 [ $e1  &  0xff ]  ^  $dw [ 52 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s1  =  $dt0 [( $e1  >>  24 )  &  0xff ]  ^  $dt1 [( $e0  >>  16 )  &  0xff ]  ^  $dt2 [( $e3  >>  8 )  &  0xff ]  ^  $dt3 [ $e2  &  0xff ]  ^  $dw [ 53 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s2  =  $dt0 [( $e2  >>  24 )  &  0xff ]  ^  $dt1 [( $e1  >>  16 )  &  0xff ]  ^  $dt2 [( $e0  >>  8 )  &  0xff ]  ^  $dt3 [ $e3  &  0xff ]  ^  $dw [ 54 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s3  =  $dt0 [( $e3  >>  24 )  &  0xff ]  ^  $dt1 [( $e2  >>  16 )  &  0xff ]  ^  $dt2 [( $e1  >>  8 )  &  0xff ]  ^  $dt3 [ $e0  &  0xff ]  ^  $dw [ 55 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e0  =  $dt0 [( $s0  >>  24 )  &  0xff ]  ^  $dt1 [( $s3  >>  16 )  &  0xff ]  ^  $dt2 [( $s2  >>  8 )  &  0xff ]  ^  $dt3 [ $s1  &  0xff ]  ^  $dw [ 56 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e1  =  $dt0 [( $s1  >>  24 )  &  0xff ]  ^  $dt1 [( $s0  >>  16 )  &  0xff ]  ^  $dt2 [( $s3  >>  8 )  &  0xff ]  ^  $dt3 [ $s2  &  0xff ]  ^  $dw [ 57 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e2  =  $dt0 [( $s2  >>  24 )  &  0xff ]  ^  $dt1 [( $s1  >>  16 )  &  0xff ]  ^  $dt2 [( $s0  >>  8 )  &  0xff ]  ^  $dt3 [ $s3  &  0xff ]  ^  $dw [ 58 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e3  =  $dt0 [( $s3  >>  24 )  &  0xff ]  ^  $dt1 [( $s2  >>  16 )  &  0xff ]  ^  $dt2 [( $s1  >>  8 )  &  0xff ]  ^  $dt3 [ $s0  &  0xff ]  ^  $dw [ 59 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                break ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            case  12 :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s0  =  $dt0 [( $e0  >>  24 )  &  0xff ]  ^  $dt1 [( $e3  >>  16 )  &  0xff ]  ^  $dt2 [( $e2  >>  8 )  &  0xff ]  ^  $dt3 [ $e1  &  0xff ]  ^  $dw [ 44 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s1  =  $dt0 [( $e1  >>  24 )  &  0xff ]  ^  $dt1 [( $e0  >>  16 )  &  0xff ]  ^  $dt2 [( $e3  >>  8 )  &  0xff ]  ^  $dt3 [ $e2  &  0xff ]  ^  $dw [ 45 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s2  =  $dt0 [( $e2  >>  24 )  &  0xff ]  ^  $dt1 [( $e1  >>  16 )  &  0xff ]  ^  $dt2 [( $e0  >>  8 )  &  0xff ]  ^  $dt3 [ $e3  &  0xff ]  ^  $dw [ 46 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s3  =  $dt0 [( $e3  >>  24 )  &  0xff ]  ^  $dt1 [( $e2  >>  16 )  &  0xff ]  ^  $dt2 [( $e1  >>  8 )  &  0xff ]  ^  $dt3 [ $e0  &  0xff ]  ^  $dw [ 47 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e0  =  $dt0 [( $s0  >>  24 )  &  0xff ]  ^  $dt1 [( $s3  >>  16 )  &  0xff ]  ^  $dt2 [( $s2  >>  8 )  &  0xff ]  ^  $dt3 [ $s1  &  0xff ]  ^  $dw [ 48 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e1  =  $dt0 [( $s1  >>  24 )  &  0xff ]  ^  $dt1 [( $s0  >>  16 )  &  0xff ]  ^  $dt2 [( $s3  >>  8 )  &  0xff ]  ^  $dt3 [ $s2  &  0xff ]  ^  $dw [ 49 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e2  =  $dt0 [( $s2  >>  24 )  &  0xff ]  ^  $dt1 [( $s1  >>  16 )  &  0xff ]  ^  $dt2 [( $s0  >>  8 )  &  0xff ]  ^  $dt3 [ $s3  &  0xff ]  ^  $dw [ 50 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e3  =  $dt0 [( $s3  >>  24 )  &  0xff ]  ^  $dt1 [( $s2  >>  16 )  &  0xff ]  ^  $dt2 [( $s1  >>  8 )  &  0xff ]  ^  $dt3 [ $s0  &  0xff ]  ^  $dw [ 51 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                break ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            case  13 :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s0  =  $dt0 [( $e0  >>  24 )  &  0xff ]  ^  $dt1 [( $e3  >>  16 )  &  0xff ]  ^  $dt2 [( $e2  >>  8 )  &  0xff ]  ^  $dt3 [ $e1  &  0xff ]  ^  $dw [ 44 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s1  =  $dt0 [( $e1  >>  24 )  &  0xff ]  ^  $dt1 [( $e0  >>  16 )  &  0xff ]  ^  $dt2 [( $e3  >>  8 )  &  0xff ]  ^  $dt3 [ $e2  &  0xff ]  ^  $dw [ 45 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s2  =  $dt0 [( $e2  >>  24 )  &  0xff ]  ^  $dt1 [( $e1  >>  16 )  &  0xff ]  ^  $dt2 [( $e0  >>  8 )  &  0xff ]  ^  $dt3 [ $e3  &  0xff ]  ^  $dw [ 46 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s3  =  $dt0 [( $e3  >>  24 )  &  0xff ]  ^  $dt1 [( $e2  >>  16 )  &  0xff ]  ^  $dt2 [( $e1  >>  8 )  &  0xff ]  ^  $dt3 [ $e0  &  0xff ]  ^  $dw [ 47 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e0  =  $dt0 [( $s0  >>  24 )  &  0xff ]  ^  $dt1 [( $s3  >>  16 )  &  0xff ]  ^  $dt2 [( $s2  >>  8 )  &  0xff ]  ^  $dt3 [ $s1  &  0xff ]  ^  $dw [ 48 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e1  =  $dt0 [( $s1  >>  24 )  &  0xff ]  ^  $dt1 [( $s0  >>  16 )  &  0xff ]  ^  $dt2 [( $s3  >>  8 )  &  0xff ]  ^  $dt3 [ $s2  &  0xff ]  ^  $dw [ 49 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e2  =  $dt0 [( $s2  >>  24 )  &  0xff ]  ^  $dt1 [( $s1  >>  16 )  &  0xff ]  ^  $dt2 [( $s0  >>  8 )  &  0xff ]  ^  $dt3 [ $s3  &  0xff ]  ^  $dw [ 50 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e3  =  $dt0 [( $s3  >>  24 )  &  0xff ]  ^  $dt1 [( $s2  >>  16 )  &  0xff ]  ^  $dt2 [( $s1  >>  8 )  &  0xff ]  ^  $dt3 [ $s0  &  0xff ]  ^  $dw [ 51 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s0  =  $dt0 [( $e0  >>  24 )  &  0xff ]  ^  $dt1 [( $e3  >>  16 )  &  0xff ]  ^  $dt2 [( $e2  >>  8 )  &  0xff ]  ^  $dt3 [ $e1  &  0xff ]  ^  $dw [ 52 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s1  =  $dt0 [( $e1  >>  24 )  &  0xff ]  ^  $dt1 [( $e0  >>  16 )  &  0xff ]  ^  $dt2 [( $e3  >>  8 )  &  0xff ]  ^  $dt3 [ $e2  &  0xff ]  ^  $dw [ 53 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s2  =  $dt0 [( $e2  >>  24 )  &  0xff ]  ^  $dt1 [( $e1  >>  16 )  &  0xff ]  ^  $dt2 [( $e0  >>  8 )  &  0xff ]  ^  $dt3 [ $e3  &  0xff ]  ^  $dw [ 54 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e3  =  $dt0 [( $e3  >>  24 )  &  0xff ]  ^  $dt1 [( $e2  >>  16 )  &  0xff ]  ^  $dt2 [( $e1  >>  8 )  &  0xff ]  ^  $dt3 [ $e0  &  0xff ]  ^  $dw [ 55 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                // Note: Here we skip $s3 but using $e3
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e0  =  $s0 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e1  =  $s1 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e2  =  $s2 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                // $e3 = $s3;
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                break ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            default :  // 11
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s0  =  $dt0 [( $e0  >>  24 )  &  0xff ]  ^  $dt1 [( $e3  >>  16 )  &  0xff ]  ^  $dt2 [( $e2  >>  8 )  &  0xff ]  ^  $dt3 [ $e1  &  0xff ]  ^  $dw [ 44 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s1  =  $dt0 [( $e1  >>  24 )  &  0xff ]  ^  $dt1 [( $e0  >>  16 )  &  0xff ]  ^  $dt2 [( $e3  >>  8 )  &  0xff ]  ^  $dt3 [ $e2  &  0xff ]  ^  $dw [ 45 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $s2  =  $dt0 [( $e2  >>  24 )  &  0xff ]  ^  $dt1 [( $e1  >>  16 )  &  0xff ]  ^  $dt2 [( $e0  >>  8 )  &  0xff ]  ^  $dt3 [ $e3  &  0xff ]  ^  $dw [ 46 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e3  =  $dt0 [( $e3  >>  24 )  &  0xff ]  ^  $dt1 [( $e2  >>  16 )  &  0xff ]  ^  $dt2 [( $e1  >>  8 )  &  0xff ]  ^  $dt3 [ $e0  &  0xff ]  ^  $dw [ 47 ];  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                // Note: Here we skip $s3 but using $e3
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e0  =  $s0 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e1  =  $s1 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                $e2  =  $s2 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					                // $e3 = $s3;
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        // invShiftRows + invSubWord + addRoundKey
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $state  =  array (  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $this -> _invSubWord (( $state [ 0 ]  &  0xFF000000 )  ^  ( $state [ 3 ]  &  0x00FF0000 )  ^  ( $state [ 2 ]  &  0x0000FF00 )  ^  ( $state [ 1 ]  &  0x000000FF ))  ^  $dw [ 0 ][ 0 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $this -> _invSubWord (( $state [ 1 ]  &  0xFF000000 )  ^  ( $state [ 0 ]  &  0x00FF0000 )  ^  ( $state [ 3 ]  &  0x0000FF00 )  ^  ( $state [ 2 ]  &  0x000000FF ))  ^  $dw [ 0 ][ 1 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $this -> _invSubWord (( $state [ 2 ]  &  0xFF000000 )  ^  ( $state [ 1 ]  &  0x00FF0000 )  ^  ( $state [ 0 ]  &  0x0000FF00 )  ^  ( $state [ 3 ]  &  0x000000FF ))  ^  $dw [ 0 ][ 2 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $this -> _invSubWord (( $state [ 3 ]  &  0xFF000000 )  ^  ( $state [ 2 ]  &  0x00FF0000 )  ^  ( $state [ 1 ]  &  0x0000FF00 )  ^  ( $state [ 0 ]  &  0x000000FF ))  ^  $dw [ 0 ][ 3 ]  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        // invSubWord
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e0  =  $sbox [ $e0  &  0xff ]  |  ( $sbox [( $e0  >>  8 )  &  0xff ]  <<  8 )  |  ( $sbox [( $e0  >>  16 )  &  0xff ]  <<  16 )  |  ( $sbox [( $e0  >>  24 )  &  0xff ]  <<  24 );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e1  =  $sbox [ $e1  &  0xff ]  |  ( $sbox [( $e1  >>  8 )  &  0xff ]  <<  8 )  |  ( $sbox [( $e1  >>  16 )  &  0xff ]  <<  16 )  |  ( $sbox [( $e1  >>  24 )  &  0xff ]  <<  24 );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e2  =  $sbox [ $e2  &  0xff ]  |  ( $sbox [( $e2  >>  8 )  &  0xff ]  <<  8 )  |  ( $sbox [( $e2  >>  16 )  &  0xff ]  <<  16 )  |  ( $sbox [( $e2  >>  24 )  &  0xff ]  <<  24 );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        $e3  =  $sbox [ $e3  &  0xff ]  |  ( $sbox [( $e3  >>  8 )  &  0xff ]  <<  8 )  |  ( $sbox [( $e3  >>  16 )  &  0xff ]  <<  16 )  |  ( $sbox [( $e3  >>  24 )  &  0xff ]  <<  24 );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        // invShiftRows + addRoundKey
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        return  pack ( 'N*' ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            ( $e0  &  0xFF000000 )  ^  ( $e3  &  0x00FF0000 )  ^  ( $e2  &  0x0000FF00 )  ^  ( $e1  &  0x000000FF )  ^  $dw [ 0 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            ( $e1  &  0xFF000000 )  ^  ( $e0  &  0x00FF0000 )  ^  ( $e3  &  0x0000FF00 )  ^  ( $e2  &  0x000000FF )  ^  $dw [ 1 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            ( $e2  &  0xFF000000 )  ^  ( $e1  &  0x00FF0000 )  ^  ( $e0  &  0x0000FF00 )  ^  ( $e3  &  0x000000FF )  ^  $dw [ 2 ],  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            ( $e3  &  0xFF000000 )  ^  ( $e2  &  0x00FF0000 )  ^  ( $e1  &  0x0000FF00 )  ^  ( $e0  &  0x000000FF )  ^  $dw [ 3 ]  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    /**  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  Treat  consecutive  " packets "  as  if  they  are  a  continuous  buffer .  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  The  default  behavior .  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  @ see  Crypt_Rijndael :: disableContinuousBuffer ()  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  @ access  public  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    function  enableContinuousBuffer ()  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        parent :: enableContinuousBuffer ();  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        return  pack ( 'N*' ,  $state [ 0 ],  $state [ 1 ],  $state [ 2 ],  $state [ 3 ]);  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        if  ( CRYPT_AES_MODE  ==  CRYPT_AES_MODE_MCRYPT )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $this -> enbuffer [ 'enmcrypt_init' ]  =  true ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            $this -> debuffer [ 'demcrypt_init' ]  =  true ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    /**  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  Treat  consecutive  packets  as  if  they  are  a  discontinuous  buffer .  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  The  default  behavior .  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  @ see  Crypt_Rijndael :: enableContinuousBuffer ()  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     *  @ access  public  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					     */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    function  disableContinuousBuffer ()  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        parent :: disableContinuousBuffer ();  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        if  ( CRYPT_AES_MODE  ==  CRYPT_AES_MODE_MCRYPT )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            mcrypt_generic_init ( $this -> enmcrypt ,  $this -> key ,  $this -> iv );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					            mcrypt_generic_init ( $this -> demcrypt ,  $this -> key ,  $this -> iv );  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					        }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					    }  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}