<s> '''<STR_LIT>''' <EOL> import ctypes <EOL> class EAHashingAlgorithm ( ) : <EOL> def __init__ ( self ) : <EOL> self . r1Shifts = [ <NUM_LIT:7> , <NUM_LIT:12> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:7> , <NUM_LIT:12> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:7> , <NUM_LIT:12> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:7> , <NUM_LIT:12> , <NUM_LIT> , <NUM_LIT> ] <EOL> self . r2Shifts = [ <NUM_LIT:5> , <NUM_LIT:9> , <NUM_LIT> , <NUM_LIT:20> , <NUM_LIT:5> , <NUM_LIT:9> , <NUM_LIT> , <NUM_LIT:20> , <NUM_LIT:5> , <NUM_LIT:9> , <NUM_LIT> , <NUM_LIT:20> , <NUM_LIT:5> , <NUM_LIT:9> , <NUM_LIT> , <NUM_LIT:20> ] <EOL> self . r3Shifts = [ <NUM_LIT:4> , <NUM_LIT:11> , <NUM_LIT:16> , <NUM_LIT> , <NUM_LIT:4> , <NUM_LIT:11> , <NUM_LIT:16> , <NUM_LIT> , <NUM_LIT:4> , <NUM_LIT:11> , <NUM_LIT:16> , <NUM_LIT> , <NUM_LIT:4> , <NUM_LIT:11> , <NUM_LIT:16> , <NUM_LIT> ] <EOL> self . r4Shifts = [ <NUM_LIT:6> , <NUM_LIT:10> , <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT:6> , <NUM_LIT:10> , <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT:6> , <NUM_LIT:10> , <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT:6> , <NUM_LIT:10> , <NUM_LIT:15> , <NUM_LIT> ] <EOL> self . hexChars = "<STR_LIT>" <EOL> def zero_fill_right_shit ( self , data , bits ) : <EOL> return ( data & <NUM_LIT> ) >> bits <EOL> def num2hex ( self , num ) : <EOL> '''<STR_LIT>''' <EOL> temp = '<STR_LIT>' <EOL> for i in range ( <NUM_LIT:0> , <NUM_LIT:4> ) : <EOL> x = self . hexChars [ ( num >> ( i * <NUM_LIT:8> + <NUM_LIT:4> ) ) & <NUM_LIT> ] <EOL> y = self . hexChars [ ( num >> ( i * <NUM_LIT:8> ) ) & <NUM_LIT> ] <EOL> temp += ( x + y ) <EOL> return temp <EOL> def chunkMessage ( self , string ) : <EOL> nblk = ( ( len ( string ) + <NUM_LIT:8> ) >> <NUM_LIT:6> ) + <NUM_LIT:1> <EOL> blks = [ <NUM_LIT:0> ] * ( nblk * <NUM_LIT:16> ) <EOL> for i in range ( <NUM_LIT:0> , len ( string ) ) : <EOL> blks [ i >> <NUM_LIT:2> ] |= ord ( string [ i ] ) << ( ( i % <NUM_LIT:4> ) * <NUM_LIT:8> ) <EOL> i = i + <NUM_LIT:1> <EOL> blks [ i >> <NUM_LIT:2> ] |= <NUM_LIT> << ( ( i % <NUM_LIT:4> ) * <NUM_LIT:8> ) <EOL> blks [ nblk * <NUM_LIT:16> - <NUM_LIT:2> ] = len ( string ) * <NUM_LIT:8> <EOL> return blks <EOL> def add ( self , x , y ) : <EOL> lsw = ( x & <NUM_LIT> ) + ( y & <NUM_LIT> ) <EOL> msw = ( ctypes . c_int32 ( x >> <NUM_LIT:16> ) . value ) + ( ctypes . c_int32 ( y >> <NUM_LIT:16> ) . value ) + ( ctypes . c_int32 ( lsw >> <NUM_LIT:16> ) . value ) <EOL> return ctypes . c_int32 ( ( ctypes . c_int32 ( msw << <NUM_LIT:16> ) . value ) | ( lsw & <NUM_LIT> ) ) . value <EOL> def bitwiseRotate ( self , x , c ) : <EOL> return ctypes . c_int32 ( ctypes . c_int32 ( x << c ) . value | self . zero_fill_right_shit ( x , <NUM_LIT:32> - c ) ) . value <EOL> def cmn ( self , q , a , b , x , s , t ) : <EOL> z1 = self . add ( a , q ) <EOL> z2 = self . add ( x , t ) <EOL> a1 = self . add ( z1 , z2 ) <EOL> x1 = self . bitwiseRotate ( a1 , s ) <EOL> return self . add ( x1 , b ) <EOL> def md5_f ( self , a , b , c , d , x , s , t ) : <EOL> return self . cmn ( ctypes . c_int32 ( ( b & c ) | ( ( ~ b ) & d ) ) . value , a , b , x , s , t ) <EOL> def md5_g ( self , a , b , c , d , x , s , t ) : <EOL> return self . cmn ( ctypes . c_int32 ( ( b & d ) | ( c & ( ~ d ) ) ) . value , a , b , x , s , t ) <EOL> def md5_h ( self , a , b , c , d , x , s , t ) : <EOL> return self . cmn ( ctypes . c_int32 ( b ^ c ^ d ) . value , a , b , x , s , t ) <EOL> def md5_i ( self , a , b , c , d , x , s , t ) : <EOL> return self . cmn ( ctypes . c_int32 ( c ^ ( b | ( ~ d ) ) ) . value , a , b , x , s , t ) <EOL> def EAHash ( self , string ) : <EOL> x = self . chunkMessage ( string ) <EOL> a = <NUM_LIT> <EOL> b = - <NUM_LIT> <EOL> c = - <NUM_LIT> <EOL> d = <NUM_LIT> <EOL> for i in range ( <NUM_LIT:0> , <NUM_LIT:16> , <NUM_LIT:16> ) : <EOL> tempA = a <EOL> tempB = b <EOL> tempC = c <EOL> tempD = d <EOL> a = self . md5_f ( a , b , c , d , x [ i + <NUM_LIT:0> ] , self . r1Shifts [ <NUM_LIT:0> ] , - <NUM_LIT> ) <EOL> d = self . md5_f ( d , a , b , c , x [ i + <NUM_LIT:1> ] , self . r1Shifts [ <NUM_LIT:1> ] , - <NUM_LIT> ) <EOL> c = self . md5_f ( c , d , a , b , x [ i + <NUM_LIT:2> ] , self . r1Shifts [ <NUM_LIT:2> ] , <NUM_LIT> ) <EOL> b = self . md5_f ( b , c , d , a , x [ i + <NUM_LIT:3> ] , self . r1Shifts [ <NUM_LIT:3> ] , - <NUM_LIT> ) <EOL> a = self . md5_f ( a , b , c , d , x [ i + <NUM_LIT:4> ] , self . r1Shifts [ <NUM_LIT:4> ] , - <NUM_LIT> ) <EOL> d = self . md5_f ( d , a , b , c , x [ i + <NUM_LIT:5> ] , self . r1Shifts [ <NUM_LIT:5> ] , <NUM_LIT> ) <EOL> c = self . md5_f ( c , d , a , b , x [ i + <NUM_LIT:6> ] , self . r1Shifts [ <NUM_LIT:6> ] , - <NUM_LIT> ) <EOL> b = self . md5_f ( b , c , d , a , x [ i + <NUM_LIT:7> ] , self . r1Shifts [ <NUM_LIT:7> ] , - <NUM_LIT> ) <EOL> a = self . md5_f ( a , b , c , d , x [ i + <NUM_LIT:8> ] , self . r1Shifts [ <NUM_LIT:8> ] , <NUM_LIT> ) <EOL> d = self . md5_f ( d , a , b , c , x [ i + <NUM_LIT:9> ] , self . r1Shifts [ <NUM_LIT:9> ] , - <NUM_LIT> ) <EOL> c = self . md5_f ( c , d , a , b , x [ i + <NUM_LIT:10> ] , self . r1Shifts [ <NUM_LIT:10> ] , - <NUM_LIT> ) <EOL> b = self . md5_f ( b , c , d , a , x [ i + <NUM_LIT:11> ] , self . r1Shifts [ <NUM_LIT:11> ] , - <NUM_LIT> ) <EOL> a = self . md5_f ( a , b , c , d , x [ i + <NUM_LIT:12> ] , self . r1Shifts [ <NUM_LIT:12> ] , <NUM_LIT> ) <EOL> d = self . md5_f ( d , a , b , c , x [ i + <NUM_LIT> ] , self . r1Shifts [ <NUM_LIT> ] , - <NUM_LIT> ) <EOL> c = self . md5_f ( c , d , a , b , x [ i + <NUM_LIT> ] , self . r1Shifts [ <NUM_LIT> ] , - <NUM_LIT> ) <EOL> b = self . md5_f ( b , c , d , a , x [ i + <NUM_LIT:15> ] , self . r1Shifts [ <NUM_LIT:15> ] , <NUM_LIT> ) <EOL> a = self . md5_g ( a , b , c , d , x [ i + <NUM_LIT:1> ] , self . r2Shifts [ <NUM_LIT:0> ] , - <NUM_LIT> ) <EOL> d = self . md5_g ( d , a , b , c , x [ i + <NUM_LIT:6> ] , self . r2Shifts [ <NUM_LIT:1> ] , - <NUM_LIT> ) <EOL> c = self . md5_g ( c , d , a , b , x [ i + <NUM_LIT:11> ] , self . r2Shifts [ <NUM_LIT:2> ] , <NUM_LIT> ) <EOL> b = self . md5_g ( b , c , d , a , x [ i + <NUM_LIT:0> ] , self . r2Shifts [ <NUM_LIT:3> ] , - <NUM_LIT> ) <EOL> a = self . md5_g ( a , b , c , d , x [ i + <NUM_LIT:5> ] , self . r2Shifts [ <NUM_LIT:4> ] , - <NUM_LIT> ) <EOL> d = self . md5_g ( d , a , b , c , x [ i + <NUM_LIT:10> ] , self . r2Shifts [ <NUM_LIT:5> ] , <NUM_LIT> ) <EOL> c = self . md5_g ( c , d , a , b , x [ i + <NUM_LIT:15> ] , self . r2Shifts [ <NUM_LIT:6> ] , - <NUM_LIT> ) <EOL> b = self . md5_g ( b , c , d , a , x [ i + <NUM_LIT:4> ] , self . r2Shifts [ <NUM_LIT:7> ] , - <NUM_LIT> ) <EOL> a = self . md5_g ( a , b , c , d , x [ i + <NUM_LIT:9> ] , self . r2Shifts [ <NUM_LIT:8> ] , <NUM_LIT> ) <EOL> d = self . md5_g ( d , a , b , c , x [ i + <NUM_LIT> ] , self . r2Shifts [ <NUM_LIT:9> ] , - <NUM_LIT> ) <EOL> c = self . md5_g ( c , d , a , b , x [ i + <NUM_LIT:3> ] , self . r2Shifts [ <NUM_LIT:10> ] , - <NUM_LIT> ) <EOL> b = self . md5_g ( b , c , d , a , x [ i + <NUM_LIT:8> ] , self . r2Shifts [ <NUM_LIT:11> ] , <NUM_LIT> ) <EOL> a = self . md5_g ( a , b , c , d , x [ i + <NUM_LIT> ] , self . r2Shifts [ <NUM_LIT:12> ] , - <NUM_LIT> ) <EOL> d = self . md5_g ( d , a , b , c , x [ i + <NUM_LIT:2> ] , self . r2Shifts [ <NUM_LIT> ] , - <NUM_LIT> ) <EOL> c = self . md5_g ( c , d , a , b , x [ i + <NUM_LIT:7> ] , self . r2Shifts [ <NUM_LIT> ] , <NUM_LIT> ) <EOL> b = self . md5_g ( b , c , d , a , x [ i + <NUM_LIT:12> ] , self . r2Shifts [ <NUM_LIT:15> ] , - <NUM_LIT> ) <EOL> a = self . md5_h ( a , b , c , d , x [ i + <NUM_LIT:5> ] , self . r3Shifts [ <NUM_LIT:0> ] , - <NUM_LIT> ) <EOL> d = self . md5_h ( d , a , b , c , x [ i + <NUM_LIT:8> ] , self . r3Shifts [ <NUM_LIT:1> ] , - <NUM_LIT> ) <EOL> c = self . md5_h ( c , d , a , b , x [ i + <NUM_LIT:11> ] , self . r2Shifts [ <NUM_LIT:2> ] , <NUM_LIT> ) <EOL> b = self . md5_h ( b , c , d , a , x [ i + <NUM_LIT> ] , self . r3Shifts [ <NUM_LIT:3> ] , - <NUM_LIT> ) <EOL> a = self . md5_h ( a , b , c , d , x [ i + <NUM_LIT:1> ] , self . r3Shifts [ <NUM_LIT:4> ] , - <NUM_LIT> ) <EOL> d = self . md5_h ( d , a , b , c , x [ i + <NUM_LIT:4> ] , self . r3Shifts [ <NUM_LIT:5> ] , <NUM_LIT> ) <EOL> c = self . md5_h ( c , d , a , b , x [ i + <NUM_LIT:7> ] , self . r3Shifts [ <NUM_LIT:6> ] , - <NUM_LIT> ) <EOL> b = self . md5_h ( b , c , d , a , x [ i + <NUM_LIT:10> ] , self . r3Shifts [ <NUM_LIT:7> ] , - <NUM_LIT> ) <EOL> a = self . md5_h ( a , b , c , d , x [ i + <NUM_LIT> ] , self . r3Shifts [ <NUM_LIT:8> ] , <NUM_LIT> ) <EOL> d = self . md5_h ( d , a , b , c , x [ i + <NUM_LIT:0> ] , self . r3Shifts [ <NUM_LIT:9> ] , - <NUM_LIT> ) <EOL> c = self . md5_h ( c , d , a , b , x [ i + <NUM_LIT:3> ] , self . r3Shifts [ <NUM_LIT:10> ] , - <NUM_LIT> ) <EOL> b = self . md5_h ( b , c , d , a , x [ i + <NUM_LIT:6> ] , self . r3Shifts [ <NUM_LIT:11> ] , <NUM_LIT> ) <EOL> a = self . md5_h ( a , b , c , d , x [ i + <NUM_LIT:9> ] , self . r3Shifts [ <NUM_LIT:12> ] , - <NUM_LIT> ) <EOL> d = self . md5_h ( d , a , b , c , x [ i + <NUM_LIT:12> ] , self . r3Shifts [ <NUM_LIT> ] , - <NUM_LIT> ) <EOL> c = self . md5_h ( c , d , a , b , x [ i + <NUM_LIT:15> ] , self . r3Shifts [ <NUM_LIT> ] , <NUM_LIT> ) <EOL> b = self . md5_h ( b , c , d , a , x [ i + <NUM_LIT:2> ] , self . r3Shifts [ <NUM_LIT:15> ] , - <NUM_LIT> ) <EOL> a = self . md5_i ( a , b , c , d , x [ i + <NUM_LIT:0> ] , self . r4Shifts [ <NUM_LIT:0> ] , - <NUM_LIT> ) <EOL> d = self . md5_i ( d , a , b , c , x [ i + <NUM_LIT:7> ] , self . r4Shifts [ <NUM_LIT:1> ] , <NUM_LIT> ) <EOL> c = self . md5_i ( c , d , a , b , x [ i + <NUM_LIT> ] , self . r4Shifts [ <NUM_LIT:2> ] , - <NUM_LIT> ) <EOL> b = self . md5_i ( b , c , d , a , x [ i + <NUM_LIT:5> ] , self . r4Shifts [ <NUM_LIT:3> ] , - <NUM_LIT> ) <EOL> a = self . md5_i ( a , b , c , d , x [ i + <NUM_LIT:12> ] , self . r4Shifts [ <NUM_LIT:4> ] , <NUM_LIT> ) <EOL> d = self . md5_i ( d , a , b , c , x [ i + <NUM_LIT:3> ] , self . r4Shifts [ <NUM_LIT:5> ] , - <NUM_LIT> ) <EOL> c = self . md5_i ( c , d , a , b , x [ i + <NUM_LIT:10> ] , self . r4Shifts [ <NUM_LIT:6> ] , - <NUM_LIT> ) <EOL> b = self . md5_i ( b , c , d , a , x [ i + <NUM_LIT:1> ] , self . r4Shifts [ <NUM_LIT:7> ] , - <NUM_LIT> ) <EOL> a = self . md5_i ( a , b , c , d , x [ i + <NUM_LIT:8> ] , self . r4Shifts [ <NUM_LIT:8> ] , <NUM_LIT> ) <EOL> d = self . md5_i ( d , a , b , c , x [ i + <NUM_LIT:15> ] , self . r4Shifts [ <NUM_LIT:9> ] , - <NUM_LIT> ) <EOL> c = self . md5_i ( c , d , a , b , x [ i + <NUM_LIT:6> ] , self . r4Shifts [ <NUM_LIT:10> ] , - <NUM_LIT> ) <EOL> b = self . md5_i ( b , c , d , a , x [ i + <NUM_LIT> ] , self . r4Shifts [ <NUM_LIT:11> ] , <NUM_LIT> ) <EOL> a = self . md5_i ( a , b , c , d , x [ i + <NUM_LIT:4> ] , self . r4Shifts [ <NUM_LIT:12> ] , - <NUM_LIT> ) <EOL> d = self . md5_i ( d , a , b , c , x [ i + <NUM_LIT:11> ] , self . r4Shifts [ <NUM_LIT> ] , - <NUM_LIT> ) <EOL> c = self . md5_i ( c , d , a , b , x [ i + <NUM_LIT:2> ] , self . r4Shifts [ <NUM_LIT> ] , <NUM_LIT> ) <EOL> b = self . md5_i ( b , c , d , a , x [ i + <NUM_LIT:9> ] , self . r4Shifts [ <NUM_LIT:15> ] , - <NUM_LIT> ) <EOL> b = self . md5_i ( b , c , d , a , x [ i + <NUM_LIT:9> ] , self . r4Shifts [ <NUM_LIT:15> ] , - <NUM_LIT> ) <EOL> a = self . add ( a , tempA ) <EOL> b = self . add ( b , tempB ) <EOL> c = self . add ( c , tempC ) <EOL> d = self . add ( d , tempD ) <EOL> return self . num2hex ( a ) + self . num2hex ( b ) + self . num2hex ( c ) + self . num2hex ( d ) </s>
