package Ġrc 4 Ċ Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . JUnit Core Ċ import Ġorg . junit . Assert . assertArrayEquals Ċ import Ġorg . junit . Assert . assertTrue Ċ Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . OutputStream Ċ import Ġjava . io . FileInputStream Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . ByteArray InputStream Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . util . Random ĊĊ Ċ class ĠRC 4 Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġrnd Ġ= ĠRandom () ĊĊĠĠĠ Ġfun ĠbyteArray Test ( key : ĠByteArray , Ġinput : ĠByteArray ) Ġ{ ĊĠĠĠĠĠĠĠ ĠByteArrayOutputStream ( input . size ). use Ġ{ Ġba os Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencrypt ( key , ĠByteArrayInputStream ( input ), Ġba os ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠByteArrayOutputStream ( input . size ). use Ġ{ Ġba os Two Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencrypt ( key , ĠByteArrayInputStream ( ba os . toByteArray ()), Ġba os Two ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ArrayEquals ( input , Ġba os Two . toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġencoded ( key : ĠByteArray , Ġinput : ĠByteArray ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ ĠByteArrayOutputStream (). use Ġ{ Ġba os Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencrypt ( key , ĠByteArrayInputStream ( input ), Ġba os ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġba os . toByteArray () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġencoded Test ( key : ĠByteArray , Ġinput : ĠString , Ġoutput : ĠByteArray ) Ġ= ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( output , Ġencoded ( key , Ġinput . toByteArray ())) ĊĊĠĠĠ Ġfun Ġkey String Test ( key : ĠString , Ġinput : ĠString , Ġoutput : ĠByteArray ) Ġ= ĊĠĠĠĠĠĠĠ Ġencoded Test ( key . toByteArray (), Ġinput , Ġoutput ) ĊĊĠĠĠ Ġfun Ġrandom Tests ( re pet itions : ĠInt , Ġinput Size : ĠInt , Ġkey Size : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrepeat ( re pet itions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠByteArray ( input Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= ĠByteArray ( key Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrnd . next Bytes ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrnd . next Bytes ( input ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠbyteArray Test ( key , Ġinput ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` test Ġ 1 Ġeasy Ġtests `() Ġ{ ĊĠĠĠĠĠĠĠ Ġkey String Test (" Key ", Ġ" Pl aintext ", ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 xBB , Ġ 0 xF 3 , Ġ 0 x 1 6 , Ġ 0 xE 8 , Ġ 0 xD 9 , Ġ 0 x 4 0 , Ġ 0 x AF , Ġ 0 x 0 A , Ġ 0 xD 3 ĊĠĠĠĠĠĠĠ Ġ). map ( Int :: to Byte ). toByteArray ()) ĊĊĠĠĠĠĠĠĠ Ġkey String Test (" Wiki ", Ġ" pedia ", ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 0 , Ġ 0 x 2 1 , Ġ 0 xB F , Ġ 0 x 0 4 , Ġ 0 x 2 0 ĊĠĠĠĠĠĠĠ Ġ). map ( Int :: to Byte ). toByteArray ()) ĊĊĠĠĠĠĠĠĠ Ġkey String Test (" Secret ", Ġ" Attack Ġat Ġd awn ", ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 4 5 , Ġ 0 xA 0 , Ġ 0 x 1 F , Ġ 0 x 6 4 , Ġ 0 x 5 F , Ġ 0 xC 3 , Ġ 0 x 5 B , Ġ 0 x 3 8 , Ġ 0 x 3 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 5 2 , Ġ 0 x 5 4 , Ġ 0 x 4 B , Ġ 0 x 9 B , Ġ 0 xF 5 ĊĠĠĠĠĠĠĠ Ġ). map ( Int :: to Byte ). toByteArray ()) ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġ@ Test Ġfun Ġ` test Ġ 2 Ġrandom Ġmedium Ġtests `() Ġ= Ġrandom Tests ( 1 0 0 , Ġ 1 0 0 0 , Ġ 1 2 8 ) ĊĠĠĠ Ġ@ Test Ġfun Ġ` test Ġ 3 Ġrandom Ġheavy Ġtests `() Ġ= Ġrandom Tests ( 1 0 0 0 , Ġ 1 0 0 0 0 0 0 , Ġ 2 5 6 ) Ċ } Ċ