package Ġorg . dex on . wallet . keystore Ċ Ċ import Ġcom . google . gson . annotations . SerializedName Ċ import Ġorg . dex on . wallet . core . model . Address Ċ import Ġorg . ke thereum . bip 3 9 . dirty Phrase To Mnemonic Words Ċ import Ġorg . ke thereum . bip 3 9 . to Key Ċ import Ġorg . ke thereum . crypto . sign Message Hash Ċ import Ġorg . ke thereum . crypto . to EC KeyPair Ċ import Ġorg . ke thereum . model . PrivateKey Ċ import Ġorg . ke thereum . model . Signature Data Ċ Ċ // ĠAccount Ġrepresents Ġa Ġspecific Ġaddress Ġin Ġa Ġwallet . Ċ data Ġclass ĠAccount ( ĊĠĠĠ Ġ@ Transient ĊĠĠĠ Ġvar Ġwallet : ĠWallet ?, ĊĠĠĠ Ġval Ġaddress : ĠAddress , ĊĠĠĠ Ġ@ SerializedName (" der ivation _ path ") ĊĠĠĠ Ġval Ġder ivation Path : ĠDer ivation Path Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġsign ( hash : ĠByteArray , Ġpassword : ĠString ): ĠSignature Data Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠprivateKey Ġ= ĠprivateKey ( password ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsign Message Hash ( hash , ĠprivateKey . to EC KeyPair ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠprivateKey ( password : ĠString ): ĠPrivate Key Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( wallet Ġ== Ġnull ) Ġthrow ĠException (" Wallet Ġno Ġlonger Ġexists ") ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġwallet !!. key ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( key . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWallet Type . PRIVATE _ KEY Ġ-> ĠPrivate Key ( key . decrypt ( password )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWallet Type . HD _ WAL LET Ġ-> ĠprivateKey ( der ivation Path , Ġpassword ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠprivateKey ( der ivation Path : ĠDer ivation Path , Ġpassword : ĠString ): ĠPrivate Key Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprivate Keys ( listOf ( der ivation Path ), Ġpassword ). first () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprivate Keys ( der ivation Paths : ĠList < Der ivation Path >, Ġpassword : ĠString ): ĠList < PrivateKey > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( wallet Ġ== Ġnull ) Ġthrow ĠException (" Wallet Ġno Ġlonger Ġexists ") ĊĠĠĠĠĠĠĠ Ġif Ġ( wallet !!. type Ġ== ĠWallet Type . PRIVATE _ KEY ) Ġthrow ĠException (" Not ĠHD Ġwallet ") ĊĠĠĠĠĠĠĠ Ġreturn Ġder ivation Paths . map Ġ{ ĠprivateKey ( wallet !!. key , Ġit , Ġpassword ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠprivateKey ( ĊĠĠĠĠĠĠĠ Ġkey : ĠKe yst ore Key , ĊĠĠĠĠĠĠĠ Ġder ivation Path : ĠDer ivation Path , ĊĠĠĠĠĠĠĠ Ġpassword : ĠString ĊĠĠĠ Ġ): ĠPrivate Key Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmnemonic String Ġ= Ġkey . decrypt ( password ). toString ( Charsets . US _ ASCII ) ĊĠĠĠĠĠĠĠ Ġval Ġmnemonic Ġ= Ġdirty Phrase To Mnemonic Words ( mn emonic String ) ĊĠĠĠĠĠĠĠ Ġval Ġextended Key Ġ= Ġmnemonic . to Key ( der ivation Path . toString ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġextended Key . key Pair . privateKey ĊĠĠĠ Ġ} Ċ Ċ }