package Ġcom . ch amber . kotlin . library Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . Context Ċ import Ġandroid . support . annotation . Requires Permission Ċ import Ġcom . facebook . android . crypto . key chain . Android Con ce al Ċ import Ġcom . facebook . android . crypto . key chain . Shared Prefs Back ed Key Chain Ċ import Ġcom . facebook . crypto . Crypto Ċ import Ġcom . facebook . crypto . Entity Ċ import Ġcom . facebook . crypto . exception . Crypto Initialization Exception Ċ import Ġcom . facebook . crypto . exception . Key Chain Exception Ċ import Ġcom . facebook . crypto . key chain . Key Chain Ċ import Ġcom . zero one . con ce al . Build Config Ċ import Ġcom . ch amber . kotlin . library . model . Ch amber Type Ċ import Ġcom . ch amber . kotlin . library . model . Constant . DEFAULT _ DIRECTORY Ċ import Ġcom . ch amber . kotlin . library . model . Constant . DEFAULT _ FILES _ FOLDER Ċ import Ġcom . ch amber . kotlin . library . model . Constant . DEFAULT _ IMAGE _ FOLDER Ċ import Ġcom . ch amber . kotlin . library . model . Constant . DEFAULT _ MAIN _ FOLDER Ċ import Ġcom . ch amber . kotlin . library . model . Constant . DEFAULT _ PREFIX _ FILENAME Ċ import Ġjava . io .* Ċ import Ġjava . security . Message Digest Ċ import Ġjava . security . NoSuch AlgorithmException Ċ Ċ /** Ċ Ġ* Ġ@ author Ġ: Ġh af iq Ġon Ġ 2 3 / 0 3 / 2 0 1 7 . Ċ Ġ*/ Ċ class ĠSecret Ch amber Ġ{ ĊĊĠĠĠ Ġvar Ġcrypto : ĠCrypto ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġkey Chain : ĠKey Chain ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Entity Password Ġ= ĠEntity . create ( Build Config . APPLICATION _ ID ) ĊĠĠĠ Ġprivate Ġvar Ġm Entity Password Raw : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġenable Crypto Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġenable Hash Key Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġmain DirectoryName : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġconstructor ( builder : ĠSecret Builder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcrypto Ġ= Ġbuilder . crypto ĊĠĠĠĠĠĠĠ Ġm Entity Password Ġ= Ġbuilder . entity Password ĊĠĠĠĠĠĠĠ Ġm Entity Password Raw Ġ= Ġbuilder . entity Password Raw ĊĠĠĠĠĠĠĠ Ġenable Crypto Ġ= Ġbuilder . is Enable Crypto ĊĠĠĠĠĠĠĠ Ġenable Hash Key Ġ= Ġbuilder . is Enable Hash Key ĊĠĠĠĠĠĠĠ Ġmain DirectoryName Ġ= Ġbuilder . folder Name ĊĊĠĠĠĠĠĠĠ Ġif Ġ( main DirectoryName Ġ== Ġnull ) Ġmain DirectoryName Ġ= ĠDEFAULT _ MAIN _ FOLDER ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġconfig : ĠCh amber Type ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġkey Chain Ġ= ĠShared Prefs Back ed Key Chain ( context , Ġif Ġ( config Ġ== Ġnull ) ĠCh amber Type . KEY _ 2 5 6 . config Ġelse Ġconfig . config ) ĊĠĠĠĠĠĠĠ Ġcrypto Ġ= ĠAndroid Con ce al . get (). create Default Crypto ( key Chain ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Entity Password ( m Entity Password : ĠEntity ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Entity Password Ġ!= Ġnull ) Ġthis . m Entity Password Ġ= Ġm Entity Password ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Entity Password ( password : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( password Ġ!= Ġnull ) Ġthis . m Entity Password Ġ= ĠEntity . create ( Cipher Utils . ob sc ure Encode Six Four String ( password . toByteArray ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Enable Crypto ( enable Crypto : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . enable Crypto Ġ= Ġenable Crypto ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Enable Key Crypto ( enable Key Crypt : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . enable Hash Key Ġ= Ġenable Key Crypt ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake Directory (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( main DirectoryName Ġ== Ġnull ) Ġmain DirectoryName Ġ= ĠDEFAULT _ MAIN _ FOLDER ĊĊĠĠĠĠĠĠĠ Ġreturn ĠDEFAULT _ DIRECTORY Ġ+ Ġmain DirectoryName Ġ+ Ġ"/" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake File Directory (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmake Directory () Ġ+ ĠDEFAULT _ FILES _ FOLDER ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake Images Directory (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmake Directory () Ġ+ ĠDEFAULT _ IMAGE _ FOLDER ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Crypto () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( crypto !!. is Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Chain !!. destroy Keys () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** * ĊĠĠĠĠ Ġ* ĠEncryption Ġof Ġplaintext ĊĠĠĠĠ Ġ* Ġ@ param Ġplain Ġ- Ġplaintext Ġof Ġstring Ġto Ġbe Ġencrypt ĊĠĠĠĠ Ġ* Ġ@ return ĠString ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġlock Vault ( plain : ĠString ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( plain Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( enable Crypto ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġcrypto !!. encrypt ( plain . toByteArray (), Ġm Entity Password ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCipher Utils . ob sc ure Encode Six Four String ( a ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplain ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** * ĊĠĠĠĠ Ġ* ĠEncryption Ġof Ġbytes ĊĠĠĠĠ Ġ* Ġ@ param Ġbytes Ġ- Ġarray Ġbytes Ġto Ġbe Ġencrypt ĊĠĠĠĠ Ġ* Ġ@ return Ġbytes ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġlock Vault ( bytes : ĠByteArray ?): ĠByteArray ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bytes Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( enable Crypto ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġcrypto !!. encrypt ( bytes , Ġm Entity Password ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCipher Utils . ob sc ure Encode Six Four Bytes ( a ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbytes ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// encrypt Ġfiles ĊĠĠĠ Ġ@ Requires Permission ( all Of Ġ= ĠarrayOf ( Manifest . permission . READ _ EXTERNAL _ STORAGE , ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE )) ĊĠĠĠ Ġfun Ġlock Vault File ( file : ĠFile , Ġdelete Old File : ĠBoolean ): ĠFile ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( enable Crypto ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Image Ġ= ĠFileUtils . isFile For Image ( file ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Encrypted File Ġ= ĠFile ( make Directory () Ġ+ ĠDEFAULT _ PREFIX _ FILENAME Ġ+ Ġfile . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Stream Ġ= ĠBuffered OutputStream ( File OutputStream ( m Encrypted File )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= Ġcrypto !!. get Mac OutputStream ( file Stream , Ġm Entity Password ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġread : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArray ( 1 0 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbis Ġ= ĠBuffered InputStream ( FileInputStream ( file )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Ġ= Ġbis . read ( buffer ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . write ( buffer , Ġ 0 , Ġread ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} while Ġ( read Ġ!= Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbis . close () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( delete Old File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . delete () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Dir Ġ= ĠFile ( if Ġ( is Image ) Ġmake Images Directory () Ġelse Ġmake File Directory ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFileUtils . move File ( m Encrypted File , Ġpath Dir ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠKey Chain Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠCrypto Initialization Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDec ryption Ġstring ĊĠĠĠĠ Ġ* Ġ@ param Ġcipher Ġcipher Ġstring ĊĠĠĠĠ Ġ* Ġ@ return ĠString Ġplaintext ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġopen Vault ( cipher : ĠString ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( cipher Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( enable Crypto ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString ( crypto !!. decrypt ( Cipher Utils . de Ob sc ure Six Four ( cipher ), Ġm Entity Password )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcipher ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDec ryption Ġbytes ĊĠĠĠĠ Ġ* Ġ@ param Ġcipher Ġcipher Ġbytes [] ĊĠĠĠĠ Ġ* Ġ@ return ĠString Ġplaintext ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġopen Vault ( cipher : ĠByteArray ?): ĠByteArray ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( cipher Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( enable Crypto ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcrypto !!. decrypt ( Cipher Utils . de Ob sc ure Six Four ( cipher ), Ġm Entity Password ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcipher ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// decrypt Ġfile ĊĠĠĠ Ġ@ Requires Permission ( all Of Ġ= ĠarrayOf ( Manifest . permission . READ _ EXTERNAL _ STORAGE , ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE )) ĊĠĠĠ Ġfun Ġopen Vault File ( file : ĠFile , Ġdelete Old File : ĠBoolean ): ĠFile ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( enable Crypto ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . name . contains ( DEFAULT _ PREFIX _ FILENAME )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Image Ġ= ĠFileUtils . isFile For Image ( file ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm De crypted File Ġ= ĠFile ( make Directory () Ġ+ Ġfile . name . replace ( DEFAULT _ PREFIX _ FILENAME , Ġ"")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= Ġcrypto !!. get Mac InputStream ( FileInputStream ( file ), Ġm Entity Password ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠByteArrayOutputStream () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= ĠFileOutputStream ( m De crypted File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbis Ġ= ĠBuffered InputStream ( inputStream ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġm Read : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Buffer Ġ= ĠByteArray ( 1 0 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Read Ġ= Ġbis . read ( m Buffer ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . write ( m Buffer , Ġ 0 , Ġm Read ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( m Read Ġ!= Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbis . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . writeTo ( output Stream ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . close () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( delete Old File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . delete () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Dir Ġ= ĠFile ( if Ġ( is Image ) Ġmake Images Directory () Ġelse Ġmake File Directory ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFileUtils . move File ( m De crypted File , Ġpath Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠKey Chain Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠCrypto Initialization Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfile ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** * ĊĠĠĠĠ Ġ* Ġhashing Ġshared pref Ġkey ĊĠĠĠĠ Ġ* Ġ@ param Ġkey Ġ- Ġkey ĊĠĠĠĠ Ġ* Ġ@ return Ġ- Ġhash Ġkey ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhash Vault ( key : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( enable Hash Key ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠHEX _ CHARS Ġ= Ġ" 0 1 2 3 4 5 6 7 8 9 ABCDEF " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmd Ġ= ĠMessage Digest . getInstance (" SHA - 2 5 6 "). digest ( key . toByteArray ()); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠStringBuilder ( md . size Ġ* Ġ 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmd . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġit . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . append ( HEX _ CHARS [ i Ġshr Ġ 4 Ġand Ġ 0 x 0 f ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . append ( HEX _ CHARS [ i Ġand Ġ 0 x 0 f ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch AlgorithmException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġkey ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** * ĊĠĠĠĠ Ġ* Ġencrypt Ġbase 6 4 Ġwith Ġiteration ĠCon ce al ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġfun Ġlock Vault Base ( plain Text : ĠString , Ġiteration : ĠInt ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcipher : ĠString ? Ġ= Ġplain Text ĊĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġuntil Ġiteration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcipher Ġ= Ġlock Vault ( cipher ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcipher ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġopen Vault Base ( cipher : ĠString , Ġiteration : ĠInt ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġplain Text : ĠString ? Ġ= Ġcipher ĊĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġuntil Ġiteration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplain Text Ġ= Ġopen Vault ( plain Text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġplain Text ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlock Vault Aes ( plain Text : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠCipher Utils . aes Crypt ( m Entity Password Raw !! , ĠCipher Utils . getRandom String ( 1 6 ), Ġplain Text ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġopen Vault Aes ( plain Text : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠCipher Utils . aes Decrypt ( m Entity Password Raw !! , Ġplain Text ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ