package Ġcom . my ether wallet . me ww allet bl . key Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . security . keystore . Key Per manently Invalid ated Exception Ċ import Ġcom . my ether wallet . me ww allet bl . core . M ew Log Ċ import Ġcom . my ether wallet . me ww allet bl . key . storage . Encrypt Storage Ċ import Ġcom . my ether wallet . me ww allet bl . key . storage . Persistent Encrypt Storage Ċ import Ġcom . my ether wallet . me ww allet bl . key . util . AES Ċ import Ġjavax . crypto . Cipher Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠB Art Well Ġon Ġ 0 5 . 0 8 . 2 0 1 9 . Ċ Ġ*/ Ċ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" Bio metry Encrypt Helper " Ċ Ċ class ĠBio metry Encrypt Helper ( context : ĠContext , Ġencrypt Storage : ĠEncrypt Storage Ġ= ĠPersistent Encrypt Storage ()) Ġ: ĠBase Encrypt Helper ( context , ĠKey Type . BIO METRY , Ġencrypt Storage ) Ġ{ ĊĊĠĠĠ Ġfun Ġprepare For Init ( bio metry Callback : Ġ( Cipher , Ġ( Cipher ) Ġ-> ĠUnit ) Ġ-> ĠUnit , Ġcallback : Ġ() Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠ Ġprepare ( true , Ġ{ Ġcipher , Ġ_, Ġfunction Ġ-> Ġbio metry Callback ( cipher !! , Ġfunction ) Ġ}, Ġcallback ) ĊĊĠĠĠ Ġfun Ġprepare For Use ( bio metry Callback : Ġ( Cipher ?, ĠEncrypt Helper Error , Ġ( Cipher ) Ġ-> ĠUnit ) Ġ-> ĠUnit , Ġcallback : Ġ() Ġ-> ĠUnit ) Ġ= Ġprepare ( false , Ġbio metry Callback , Ġcallback ) ĊĊĠĠĠ Ġprivate Ġfun Ġprepare ( for Init : ĠBoolean , Ġbio metry Callback : Ġ( Cipher ?, Ġerror : ĠEncrypt Helper Error , Ġ( Cipher ) Ġ-> ĠUnit ) Ġ-> ĠUnit , Ġcallback : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcipher : ĠCipher ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġerror Ġ= ĠEncrypt Helper Error . OK ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcipher Ġ= Ġretrieve Cipher ( for Init ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠKey Per manently Invalid ated Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM ew Log . d ( TAG , Ġ" Bio metry Ġdata Ġwas Ġchanged ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ= ĠEncrypt Helper Error . KEY _ PER MAN ENT LY _ INVALID ATED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Key Per manently Invalid ated () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM ew Log . d ( TAG , Ġ" Cannot Ġretrieve Ġkey ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ= ĠEncrypt Helper Error . CAN NOT _ RE TR IE VE _ KEY ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( cipher Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbio metry Callback . invoke ( null , Ġerror ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestroy () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbio metry Callback . invoke ( cipher , Ġerror ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeystore Helper . signed Cipher Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġretrieve Cipher ( will Encrypt : ĠBoolean ) Ġ= Ġif Ġ( will Encrypt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġkeystore Helper . get Encrypt Cipher () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġkeystore Helper . get Decrypt Cipher () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Prepared () Ġ= Ġkeystore Helper . signed Cipher Ġ!= Ġnull ĊĊĠĠĠ Ġfun Ġinit ( pin : ĠString ) Ġ= Ġinit ( Pin Encrypt Helper ( context , Ġpin , Ġencrypt Storage )) ĊĊĠĠĠ Ġfun Ġinit ( encrypt Helper : ĠBase Encrypt Helper ) Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Prepared () ĊĠĠĠĠĠĠĠ Ġval Ġmaster Key Ġ= Ġencrypt Helper . retrieve Master Key ( encrypt Helper . access Key ) ĊĠĠĠĠĠĠĠ Ġencrypt Helper . destroy () ĊĠĠĠĠĠĠĠ Ġval Ġbio metry AccessKey Ġ= Ġgenerate AccessKey ( encrypt Storage . get Bio metry Salt ()) ĊĠĠĠĠĠĠĠ Ġval Ġencrypted AccessKey Ġ= Ġkeystore Helper . encrypt ( bio metry AccessKey ) ĊĠĠĠĠĠĠĠ Ġval Ġencrypted Master Key Ġ= ĠAES . encrypt ( master Key , Ġbio metry AccessKey ) ĊĠĠĠĠĠĠĠ Ġencrypt Storage . set AccessKey ( encrypted AccessKey , ĠKey Type . BIO METRY ) ĊĠĠĠĠĠĠĠ Ġencrypt Storage . set Master Key ( encrypted Master Key , ĠKey Type . BIO METRY ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġretrieve AccessKey (): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Prepared () ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . retrieve AccessKey () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert Prepared () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Prepared ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" You Ġhave Ġto Ġcall Ġprepare () Ġmethod Ġfirst ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Key Per manently Invalid ated () Ġ{ ĊĠĠĠĠĠĠĠ Ġkeystore Helper . remove () ĊĠĠĠĠĠĠĠ Ġencrypt Storage . remove Bio metry Salt () ĊĠĠĠĠĠĠĠ Ġencrypt Storage . remove AccessKey ( KeyType . BIO METRY ) ĊĠĠĠĠĠĠĠ Ġencrypt Storage . remove Master Key ( KeyType . BIO METRY ) ĊĠĠĠ Ġ} Ċ } Ċ