package Ġgg . r sm od . util . io Ċ Ċ import Ġio . netty . buffer . Byte Buf Ċ import Ġjava . nio . ByteBuffer Ċ Ċ /** Ċ Ġ* ĠCred its Ġto ĠPol ar Ġfor Ġsharing Ġcode ! Ċ Ġ*/ Ċ object ĠX tea Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġgold en Ġratio ĠX TE A Ġuses . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġconst Ġval ĠG OLD EN _ RATIO Ġ= Ġ- 1 6 4 0 5 3 1 5 2 7 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġnumber Ġof Ġrounds ĠX TE A Ġuses . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġconst Ġval ĠRO UN DS Ġ= Ġ 3 2 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDec iph ers Ġthe Ġx tea Ġencryption Ġusing Ġthe Ġgiven Ġ[ key ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdec ipher ( key : ĠInt Array , Ġdata : ĠByteArray , Ġstart : ĠInt , Ġend : ĠInt ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnum Blocks Ġ= Ġ( end Ġ- Ġstart ) Ġ/ Ġ 8 ĊĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteBuffer . wrap ( data ) ĊĠĠĠĠĠĠĠ Ġbuffer . position ( start ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġnum Blocks ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy Ġ= Ġbuffer . int ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġz Ġ= Ġbuffer . int ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsum Ġ= ĠG OLD EN _ RATIO Ġ* ĠRO UN DS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelta Ġ= ĠG OLD EN _ RATIO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin ĠRO UN DS Ġdown To Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġz Ġ-= Ġ( y . ush r ( 5 ) Ġxor Ġ( y Ġshl Ġ 4 )) Ġ+ Ġy Ġxor Ġsum Ġ+ Ġkey [ sum . ush r ( 1 1 ) Ġand Ġ 0 x 5 6 c 0 0 0 0 3 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ-= Ġdelta ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ-= Ġ( z . ush r ( 5 ) Ġxor Ġ( z Ġshl Ġ 4 )) Ġ- Ġ- z Ġxor Ġsum Ġ+ Ġkey [ sum Ġand Ġ 0 x 3 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . position ( buffer . position () Ġ- Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . put Int ( y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . put Int ( z ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbuffer . array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEn ciph ers Ġthe Ġspecified Ġ[ Byte Buf ] Ġwith Ġthe Ġgiven Ġkey . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġen cipher ( buffer : ĠByte Buf , Ġstart : ĠInt , Ġend : ĠInt , Ġkey : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnum Qu ads Ġ= Ġ( end Ġ- Ġstart ) Ġ/ Ġ 8 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġnum Qu ads ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsum Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġv 0 Ġ= Ġbuffer . getInt ( start Ġ+ Ġi Ġ* Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġv 1 Ġ= Ġbuffer . getInt ( start Ġ+ Ġi Ġ* Ġ 8 Ġ+ Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil ĠRO UN DS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv 0 Ġ+= Ġ( v 1 Ġshl Ġ 4 Ġxor Ġv 1 . ush r ( 5 )) Ġ+ Ġv 1 Ġxor Ġsum Ġ+ Ġkey [ sum Ġand Ġ 3 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ+= ĠG OLD EN _ RATIO ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv 1 Ġ+= Ġ( v 0 Ġshl Ġ 4 Ġxor Ġv 0 . ush r ( 5 )) Ġ+ Ġv 0 Ġxor Ġsum Ġ+ Ġkey [ sum . ush r ( 1 1 ) Ġand Ġ 3 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . setInt ( start Ġ+ Ġi Ġ* Ġ 8 , Ġv 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . setInt ( start Ġ+ Ġi Ġ* Ġ 8 Ġ+ Ġ 4 , Ġv 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }