package Ġcom . nim ble . nim b ler ew ards . data . gate ways Ċ Ċ import Ġandroid . content . Context Ċ import Ġcom . nim ble . nim b ler ew ards . data . gate ways . Wallet Helper . Companion . WAL LET _ FILE _ PASSWORD Ċ import Ġorg . bouncycastle . j ce . provider . Bo unc y Castle Provider Ċ import Ġorg . web 3 j . crypto . Credentials Ċ import Ġorg . web 3 j . crypto . EC KeyPair Ċ import Ġorg . web 3 j . crypto . Wallet Utils Ċ import Ġjava . io . File Ċ import Ġjava . math . BigInteger Ċ import Ġjava . security . Security Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ interface ĠWallet Helper Ġ{ ĊĠĠĠ Ġfun Ġgenerate Light New Wallet File (): ĠString ĊĠĠĠ Ġfun Ġimport Wallet ( privateKey : ĠString ): ĠString ĊĠĠĠ Ġfun Ġload Credentials ( from : ĠString ): ĠCredentials ĊĠĠĠ Ġfun Ġload Credentials ( wallet File : ĠFile ): ĠCredentials ĊĠĠĠ Ġfun Ġdelete All Wallet s () ĊĊĠĠĠ Ġval Ġwallet Files : ĠList < File > ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// TODO Ġsecure Ġthe Ġpassword ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval ĠW AL LET _ FILE _ PASSWORD Ġ= Ġ" wallet _ file _ password " ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval ĠW AL LET _ DIRECTORY Ġ= Ġ" wallet s " ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Singleton Ċ class ĠWallet Helper Impl Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext Ċ ) Ġ: ĠWallet Helper Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠsetUp Bo unc y Castle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate Light New Wallet File (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠWallet Utils . generate Light New Wallet File ( WAL LET _ FILE _ PASSWORD , Ġwallet Directory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġimport Wallet ( privateKey : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠWallet Utils . generate Wallet File ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠW AL LET _ FILE _ PASSWORD , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEC KeyPair . create ( BigInteger ( privateKey , Ġ 1 6 )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwallet Directory , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Credentials ( from : ĠString ): ĠCredentials Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġload Credentials ( require NotNull ( get Wallet File ( from ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Credentials ( wallet File : ĠFile ): ĠCredentials Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠWallet Utils . load Credentials ( WAL LET _ FILE _ PASSWORD , Ġwallet File ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete All Wallet s () Ġ{ ĊĠĠĠĠĠĠĠ Ġwallet Directory . delete Re cursively () ĊĠĠĠĠĠĠĠ Ġwallet Directory . mkdir s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġwallet Files : ĠList < File > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwallet Directory . list Files ()?. asList () Ġ?: Ġempty List () ĊĊĠĠĠ Ġprivate Ġfun Ġget Wallet File ( wallet Address : ĠString ): ĠFile ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwallet Directory . list Files Ġ{ Ġ_, Ġname Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname . contains ( wallet Address . substring ( 2 ). toLowerCase ()) ĊĠĠĠĠĠĠĠ Ġ} ?. first OrNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġwallet Directory : ĠFile ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠFile ("${ context . files Dir . absolute Path }/${ Wallet Helper . WAL LET _ DIRECTORY } "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! exists () Ġ|| Ġ! isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp Bo unc y Castle () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= ĠSecurity . get Provider ( Bo unc y Castle Provider . PROVIDER _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ// ĠWeb 3 j Ġwill Ġset Ġup Ġthe Ġprovider Ġl az ily Ġwhen Ġit 's Ġfirst Ġused . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( provider Ġis ĠBo unc y Castle Provider ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBC Ġwith Ġsame Ġpackage Ġname , Ġshouldn 't Ġhappen Ġin Ġreal Ġlife . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠAndroid Ġregisters Ġits Ġown ĠBC Ġprovider . ĠAs Ġit Ġmight Ġbe Ġoutdated Ġand Ġmight Ġnot Ġinclude ĊĠĠĠĠĠĠĠ Ġ// Ġall Ġneeded Ġciph ers , Ġwe Ġsubstitute Ġit Ġwith Ġa Ġknown ĠBC Ġbundled Ġin Ġthe Ġapp . ĊĠĠĠĠĠĠĠ Ġ// ĠAndroid 's ĠBC Ġhas Ġits Ġpackage Ġre written Ġto Ġ" com . android . org . bouncycastle " Ġand Ġbecause ĊĠĠĠĠĠĠĠ Ġ// Ġof Ġthat Ġit 's Ġpossible Ġto Ġhave Ġanother ĠBC Ġimplementation Ġloaded Ġin ĠVM . ĊĠĠĠĠĠĠĠ ĠSecurity . remove Provider ( Bo unc y Castle Provider . PROVIDER _ NAME ) ĊĠĠĠĠĠĠĠ ĠSecurity . insert Provider At ( Bo unc y Castle Provider (), Ġ 1 ) ĊĠĠĠ Ġ} Ċ } Ċ