package Ġcom . metal lic us . pro ton sdk Ċ Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġandroidx . test . platform . app . Instrumentation Registry Ċ import Ġorg . hamcrest . Core Matchers . contains String Ċ import Ġorg . junit . Assert . assertThat Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . security . Invalid Algorithm Parameter Exception Ċ import Ġjava . security . Invalid Key Exception Ċ import Ġjava . security . NoSuch AlgorithmException Ċ import Ġjava . util .* Ċ import Ġjavax . crypto . Bad Padding Exception Ċ import Ġjavax . crypto . Cipher Ċ import Ġjavax . crypto . Illegal BlockSize Exception Ċ import Ġjavax . crypto . NoSuch Padding Exception Ċ import Ġjavax . crypto . spec . Iv Parameter Spec Ċ import Ġjavax . crypto . spec . SecretKey Spec Ċ Ċ /** Ċ Ġ* ĠInstrument ed Ġtest , Ġwhich Ġwill Ġexecute Ġon Ġan ĠAndroid Ġdevice . Ċ Ġ* Ċ Ġ* ĠSee Ġ[ testing Ġdocumentation ]( http :// d . android . com / tools / testing ). Ċ Ġ*/ Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠExample Instrument ed Test Ġ{ Ċ ĉ @ Test Ċ ĉ fun Ġcheck Package () Ġ{ Ċĉ ĉ // ĠContext Ġof Ġthe Ġapp Ġunder Ġtest . Ċĉ ĉ val Ġapp Context Ġ= ĠInstrument ation Registry . get Instrumentation (). target Context Ċĉ ĉ assertThat ( app Context . packageName , Ġcontains String (" com . metal lic us . pro ton sdk ")) Ċ ĉ } ĊĊ ĉ @ Test Ċ ĉ fun Ġcheck AES Decrypt () Ġ{ Ċĉ ĉ val Ġcipher Text Hex Ġ= Ċĉĉ ĉ " 2 a 2 0 4 9 eee 1 4 c 2 bf 2 d 7 3 eae 1 6 d 8 4 aff a 1 0 8 4 e 9 4 2 f 3 6 1 ba 8 4 6 eb 7 2 6 ce 5 6 2 9 9 e 4 8 9 d 9 d 8 af dcb d 4 1 bb ca 2 fed c 3 6 c 2 ba 5 aef 9 3 7 3 d 7 5 7 2 2 5 e 4 3 6 5 4 a 2 e 9 8 c 9 9 4 1 3 c 5 f 0 3 4 f 1 5 bf 7 b 9 0 1 3 b 2 dbe 5 2 9 5 1 d 2 a 4 c 5 3 7 a 5 4 4 3 a 8 7 9 1 4 a 5 9 0 4 5 7 1 e 7 3 7 0 a 1 c 6 d 4 9 3 cb 9 ce 1 a 1 d 4 8 dd 8 0 8 5 7 a 4 d 9 0 bfe 7 2 b 5 4 ead 9 4 0 8 9 6 1 9 2 d 6 3 1 4 d 2 8 7 6 0 6 4 7 3 7 3 4 c 1 7 d 7 5 e 9 8 8 ce 6 5 1 e 8 4 6 2 8 6 b 9 d 2 a 0 6 ecf 1 0 0 fd 1 8 3 2 0 0 3 9 4 8 dd 9 1 3 e 9 7 cd de 4 7 cd 6 a 1 e 9 d 0 6 a 1 bd 6 3 9 7 c 5 5 7 1 2 7 2 1 c 6 2 7 b 9 cc 3 c 5 4 3 f 3 9 cf 6 0 4 3 da 4 2 4 1 db 2 3 a 6 e 7 dfb 1 4 afe 5 4 4 da 8 bc ffa 2 6 e 0 7 8 bf 4 a 9 5 8 0 e 5 4 e 0 4 4 ab 8 5 b 0 9 ec ab dc 5 7 ba 9 c 5 bc 7 0 0 8 3 6 5 be 5 1 " Ċĉ ĉ val Ġkey Hex Ġ= Ġ" 7 2 8 f 6 bb 2 7 af 3 6 6 6 3 bc 5 1 f 3 f 7 7 8 6 d 1 3 2 d 9 ebf 5 2 bc 7 a 4 6 a 4 0 9 0 e 6 3 a 9 1 ad 0 5 8 8 9 5 a " Ċĉ ĉ val Ġiv Hex Ġ= Ġ" 4 1 2 6 bb 1 2 1 c 0 8 9 6 ce cf 2 7 1 af 0 7 9 c 8 c 2 d 9 " ĊĊĉ ĉ val Ġcipher Text ByteArray Ġ= Ġcipher Text Hex . hex StringTo ByteArray 2 () Ċĉ ĉ val Ġkey ByteArray Ġ= Ġkey Hex . hex StringTo ByteArray 2 () Ċĉ ĉ val Ġiv ByteArray Ġ= Ġiv Hex . hex StringTo ByteArray 2 () ĊĊĉ ĉ val Ġdecrypted ByteArray : ĠByteArray Ġ= Ġtry Ġ{ Ċĉĉ ĉ cipher Text ByteArray . aes Decrypt ( key ByteArray , Ġiv ByteArray ) Ċĉ ĉ } Ġcatch Ġ( e : ĠException ) Ġ{ Ċĉĉ ĉ Tim ber . e ( e ) Ċĉĉ ĉ byte ArrayOf ( 0 ) Ċĉ ĉ } ĊĊĉ ĉ assert ( de crypted ByteArray . isNotEmpty ()) Ċ ĉ } ĊĊ ĉ private Ġfun ĠString . hex StringTo ByteArray (): ĠByteArray Ġ{ Ċĉ ĉ val Ġs Ġ= Ġto UpperCase ( Locale . ROOT ) Ċĉ ĉ val Ġlen Ġ= Ġs . length Ċĉ ĉ val Ġresult Ġ= ĠByteArray ( len Ġ/ Ġ 2 ) Ċĉ ĉ for Ġ( i Ġin Ġ 0 Ġuntil Ġlen Ġstep Ġ 2 ) Ġ{ Ċĉĉ ĉ val Ġfirst Index Ġ= ĠindexOf ( s [ i ]) Ċĉĉ ĉ val Ġsecond Index Ġ= ĠindexOf ( s [ i Ġ+ Ġ 1 ]) ĊĊĉĉ ĉ val Ġoct et Ġ= Ġfirst Index . sh l ( 4 ). or ( second Index ) Ċĉĉ ĉ result [ i . shr ( 1 )] Ġ= Ġoct et . to Byte () Ċĉ ĉ } Ċĉ ĉ return Ġresult Ċ ĉ } ĊĊ ĉ private Ġfun ĠString . hex StringTo ByteArray 2 (): ĠByteArray Ġ{ Ċĉ ĉ val Ġs Ġ= Ġto UpperCase ( Locale . ROOT ) Ċĉ ĉ val Ġlen Ġ= Ġs . length Ċĉ ĉ val Ġdata Ġ= ĠByteArray ( len Ġ/ Ġ 2 ) Ċĉ ĉ var Ġi Ġ= Ġ 0 Ċĉ ĉ while Ġ( i Ġ< Ġlen ) Ġ{ Ċĉĉ ĉ data [ i Ġ/ Ġ 2 ] Ġ= Ġ(( Character . digit ( s [ i ], Ġ 1 6 ) Ġshl Ġ 4 ) Ġ+ ĠCharacter . digit ( s [ i Ġ+ Ġ 1 ], Ġ 1 6 )). to Byte () Ċĉĉ ĉ i Ġ+= Ġ 2 Ċĉ ĉ } Ċĉ ĉ return Ġdata Ċ ĉ } ĊĊ ĉ @ Throws ( Ċĉ ĉ NoSuch AlgorithmException :: class , Ċĉ ĉ NoSuch Padding Exception :: class , Ċĉ ĉ Invalid Key Exception :: class , Ċĉ ĉ Invalid Algorithm Parameter Exception :: class , Ċĉ ĉ Illegal BlockSize Exception :: class , Ċĉ ĉ Bad Padding Exception :: class Ċ ĉ ) Ċ ĉ private Ġfun ĠByteArray . aes Decrypt ( key : ĠByteArray , Ġiv : ĠByteArray ): ĠByteArray Ġ{ Ċĉ ĉ val Ġkey Spec Ġ= ĠSecret KeySpec ( key , Ġ" AES ") Ċĉ ĉ val Ġiv Spec Ġ= ĠI v Parameter Spec ( iv ) Ċĉ ĉ val Ġcipher Ġ= ĠCipher . getInstance (" AES / CBC / PKCS 7 Padding ") Ċĉ ĉ cipher . init ( Cipher . DE CRYPT _ MODE , Ġkey Spec , Ġiv Spec ) Ċĉ ĉ return Ġcipher . do Final ( this ) Ċ ĉ } Ċ } Ċ