package Ġcom . uport . sdk . signer . encryption Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Build . VERSION _ CODES . LO L LI POP Ċ Ċ /** Ċ Ġ* ĠEx poses Ġa Ġmethod Ġof Ġobtaining Ġa Ġ[ Key Protection ] Ġimplementation Ġbased Ġon Ġa Ġrequired Ġlevel Ċ Ġ*/ Ċ object ĠKey Protection Factory Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġreturns Ġa Ġ[ Key Protection ] Ġimplementation Ġbased Ġon Ġthe Ġprovided Ġ[ level ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġmethod Ġrequires Ġan ĠApplication Ġ[ context ] Ġthat Ġwill Ġbe Ġused Ġto Ġdetermine Ġdevice Ġsecurity ĊĠĠĠĠ Ġ* Ġcapabilities Ġand Ġto Ġinitialize Ġkey Ġstores Ġwhen Ġneeded . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" Complex Method ") ĊĠĠĠ Ġfun Ġobtain ( context : ĠContext , Ġlevel : ĠKey Protection . Level ): ĠKey Protection Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" Move Variable Declaration Into When ") ĊĠĠĠĠĠĠĠ Ġval Ġapi Adjust ed Level Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠL OL LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlevel ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġonly Ġsimple Ġprotection Ġis Ġavailable Ġfor ĠKit K at ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKey Protection . Level . SIMPLE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġstore Ġ= Ġwhen Ġ( api Adjust ed Level ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠKey Protection . Level . SINGLE _ PROMPT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey guard As ymmetric Protection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠKey Protection . Level . PROMPT Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Key Protection . has Setup Fingerprint ( context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF ingerprint As ymmetric Protection () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpop Ġkey guard Ġwith Ġ 1 Ġsecond Ġauthentication Ġwindow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsession Time Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġreason Ġfor Ġthis Ġbehavior : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠOn Ġdevices Ġthat Ġhave Ġfingerprint Ġhardware Ġbut Ġhaven 't Ġsetup Ġfingerprint s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġan ĠIllegal BlockSize Exception Ġis Ġthrown Ġif Ġthe Ġrequested Ġsession Ġtime Ġis Ġ"- 1 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġwith Ġthe Ġcause Ġbeing ĠKey Store Exception (" Key Ġuser Ġnot Ġauthenticated ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠAlso , Ġon Ġsome Ġdevices Ġthat ĠDO ĠNOT ĠHAVE Ġfingerprint Ġhardware , Ġusing Ġa Ġ"- 1 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġsession Ġtime Ġwould Ġthrow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ Ġ> Ġjava . lang . IllegalStateException : ĠAt Ġleast Ġone Ġfingerprint Ġmust Ġbe Ġen rolled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ Ġ> Ġto Ġcreate Ġkeys Ġrequiring Ġuser Ġauthentication Ġfor Ġevery Ġuse " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠTherefore , Ġwe Ġneed Ġto Ġem ulate Ġthis Ġby Ġa Ġ 1 Ġsecond Ġauthentication Ġwindow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġwhich Ġshould Ġbe Ġenough Ġto Ġperform Ġthe Ġde cryption . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey guard As ymmetric Protection ( session Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠKey Protection . Level . SIMPLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimple As ymmetric Protection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimple As ymmetric Protection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġensure Ġstore Ġis Ġsetup ĊĠĠĠĠĠĠĠ Ġstore . gen Key ( context ) ĊĠĠĠĠĠĠĠ Ġreturn Ġstore ĊĠĠĠ Ġ} Ċ } Ċ