/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠPro ton ĠChain ĠLLC , ĠDel aware Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġcom . metal lic us . pro ton sdk . common Ċ Ċ import Ġandroid . content . Context Ċ import Ġcom . metal lic us . pro ton sdk . eos io . command er . ec . E os PrivateKey Ċ import Ġcom . metal lic us . pro ton sdk . secure storage . Secure Preferences Ċ import Ġcom . metal lic us . pro ton sdk . secure storage . Secure Storage Exception Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠSecure Keys ( private Ġval Ġcontext : ĠContext ) Ġ{ Ċ ĉ comp anion Ġobject Ġ{ Ċĉ ĉ const Ġval ĠSHARE D _ PRE FS _ FILENAME Ġ= Ġ" pro ton sdk . secure _ keys " Ċ ĉ } ĊĊ ĉ // private Ġval Ġbackup Manager : ĠBackup Manager Ġ= ĠBackup Manager ( context ) ĊĊ ĉ fun Ġhas Keys (): ĠBoolean Ġ{ Ċĉ ĉ Secure Preferences . set SharedPreferences Name ( SHARED _ PRE FS _ FILENAME ) Ċĉ ĉ val Ġsecure Prefs Ġ= ĠSecure Preferences . get SharedPreferences ( context ) Ċĉ ĉ return Ġsecure Prefs . all . isNotEmpty () Ċ ĉ } ĊĊ ĉ fun Ġcheck Pin ( pin : ĠString ): ĠBoolean Ġ{ Ċĉ ĉ var ĠisValid Ġ= Ġfalse ĊĊĉ ĉ Secure Preferences . set SharedPreferences Name ( SHARED _ PRE FS _ FILENAME ) Ċĉ ĉ val Ġsecure Prefs Ġ= ĠSecure Preferences . get SharedPreferences ( context ) ĊĊĉ ĉ // Ġmake Ġsure Ġat Ġleast Ġone Ġkey Ġis Ġset Ġwith ĠPIN Ċĉ ĉ run Ġloop @ Ġ{ Ċĉĉ ĉ secure Prefs . all . forEach Ġ{ Ġsecure Key Ġ-> Ċĉĉĉ ĉ isValid Ġ= Ġtry Ġ{ Ċĉĉĉĉ ĉ val ĠpublicKey Ġ= Ġsecure Key . key Ċĉĉĉĉ ĉ val ĠprivateKey Ġ= ĠSecure Preferences . getString Value ( context , ĠpublicKey , Ġpin , Ġ"") Ċĉĉĉĉ ĉ E os PrivateKey ( privateKey ). publicKey . toString () Ġ== ĠpublicKey Ċĉĉĉ ĉ } Ġcatch Ġ( e : ĠException ) Ġ{ Ċĉĉĉĉ ĉ false Ċĉĉĉ ĉ } ĊĊĉĉĉ ĉ if Ġ( isValid ) Ġ{ Ċĉĉĉĉ ĉ return @ loop Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ return ĠisValid Ċ ĉ } ĊĊ ĉ fun Ġreset Keys ( old Pin : ĠString , Ġnew Pin : ĠString ): ĠBoolean Ġ{ Ċĉ ĉ return Ġtry Ġ{ Ċĉĉ ĉ Secure Preferences . set SharedPreferences Name ( SHARED _ PRE FS _ FILENAME ) Ċĉĉ ĉ val Ġsecure Prefs Ġ= ĠSecure Preferences . get SharedPreferences ( context ) Ċĉĉ ĉ secure Prefs . all . forEach Ġ{ Ġsecure Key Ġ-> Ċĉĉĉ ĉ val ĠpublicKey Ġ= Ġsecure Key . key Ċĉĉĉ ĉ val ĠprivateKey Ġ= ĠSecure Preferences . getString Value ( context , ĠpublicKey , Ġold Pin , Ġ"") Ċĉĉĉ ĉ privateKey ?. let Ġ{ Ċĉĉĉĉ ĉ Secure Preferences . setValue ( context , ĠpublicKey , Ġit , Ġnew Pin ) Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉĉ ĉ true Ċĉ ĉ } Ġcatch Ġ( e : ĠSecure Storage Exception ) Ġ{ Ċĉĉ ĉ Tim ber . d ( e ) Ċĉĉ ĉ false Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ fun Ġkey Exists ( publicKey : ĠString ): ĠBoolean Ġ{ Ċĉ ĉ Secure Preferences . set SharedPreferences Name ( SHARED _ PRE FS _ FILENAME ) Ċĉ ĉ return ĠSecure Preferences . contains ( context , ĠpublicKey ) Ċ ĉ } ĊĊ ĉ fun Ġget PrivateKey ( publicKey : ĠString , Ġpin : ĠString ): ĠString ? Ġ{ Ċĉ ĉ Secure Preferences . set SharedPreferences Name ( SHARED _ PRE FS _ FILENAME ) Ċĉ ĉ return ĠSecure Preferences . getString Value ( context , ĠpublicKey , Ġpin , Ġ"") Ċ ĉ } ĊĊ ĉ fun Ġadd Key ( publicKey : ĠString , ĠprivateKey : ĠString , Ġpin : ĠString ): ĠBoolean Ġ{ Ċĉ ĉ return Ġtry Ġ{ Ċĉĉ ĉ Secure Preferences . set SharedPreferences Name ( SHARED _ PRE FS _ FILENAME ) Ċĉĉ ĉ Secure Preferences . setValue ( context , ĠpublicKey , ĠprivateKey , Ġpin ) Ċĉĉ ĉ // backup Manager . data Changed () Ċĉĉ ĉ true Ċĉ ĉ } Ġcatch Ġ( e : ĠSecure Storage Exception ) Ġ{ Ċĉĉ ĉ Tim ber . d ( e ) Ċĉĉ ĉ false Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ fun Ġremove Key ( publicKey : ĠString ) Ġ{ Ċĉ ĉ try Ġ{ Ċĉĉ ĉ Secure Preferences . set SharedPreferences Name ( SHARED _ PRE FS _ FILENAME ) Ċĉĉ ĉ Secure Preferences . remove Value ( context , ĠpublicKey ) Ċĉĉ ĉ // backup Manager . data Changed () Ċĉ ĉ } Ġcatch Ġ( e : ĠSecure Storage Exception ) Ġ{ Ċĉĉ ĉ Tim ber . d ( e ) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ fun Ġremove All () Ġ{ Ċĉ ĉ try Ġ{ Ċĉĉ ĉ Secure Preferences . set SharedPreferences Name ( SHARED _ PRE FS _ FILENAME ) Ċĉĉ ĉ Secure Preferences . clear All Values ( context ) Ċĉĉ ĉ // backup Manager . data Changed () Ċĉ ĉ } Ġcatch Ġ( e : ĠSecure Storage Exception ) Ġ{ Ċĉĉ ĉ Tim ber . d ( e ) Ċĉ ĉ } Ċ ĉ } Ċ }