package Ġcom . it l . kg . android lab kt . bio metrics Lab . tools Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . security . keystore . Key Gen Parameter Spec Ċ import Ġandroid . security . keystore . Key Properties Ċ import Ġandroidx . bio metric . Bio metric Manager Ċ import Ġandroidx . bio metric . Bio metric Prompt Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ import Ġjava . security . KeyStore Ċ import Ġjava . util . concurrent . Executor Ċ import Ġjavax . crypto . Cipher Ċ import Ġjavax . crypto . Key Generator Ċ import Ġjavax . crypto . SecretKey Ċ Ċ /** Ċ Ġ* Ċ Ġ* ĠCreated Ġby Ġk eng u err illa Ġon Ġ 2 0 2 0 / 9 / 2 . Ċ Ġ* Ċ Ġ* ĠBio metrics å·¥åħ· Ċ Ġ* Ċ Ġ* Ċ Ġ* Ġ åĤ Ļ è¨ » ï¼ļ å®ĺæĸ¹ æĸĩä»¶ è¡¨ç¤º Android Ġ 1 0 åı¯ ä½¿çĶ¨ Bio metrics Manager ï¼Į èĢĮ Bio metric Prompt äº ¦ åı¯ ãĢĤ Ċ Ġ* Ċ Ġ* Ġ åı ĥ èĢĥ è³ĩæĸĻ ï¼ļ https :// developer . android . com / training / sign - in / bio metric - auth Ċ Ġ* Ċ Ġ*/ Ċ Ċ class ĠBio metrics Tools ( ĊĠĠĠ Ġprivate Ġval Ġtitle : ĠString , ĊĠĠĠ Ġprivate Ġval Ġsub Title : ĠString , ĊĠĠĠ Ġprivate Ġval Ġneg Btn Text : ĠString ) Ġ{ ĊĊĠĠĠ Ġfun Ġstart Auth ( activity : ĠFragment Activity , Ġcallback : ĠBio Tools Callback ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġbio metric Prompt Ġ= ĠBio metric Prompt ( activity , Ġget Executor ( activity ), Ġobject Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBio metric Prompt . Authentication Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Authentication Error ( errorCode : ĠInt , Ġerr String : ĠCharSequence ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Authentication Error ( errorCode , Ġerr String ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġ" Error : Ġ$ errorCode ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . result ( errorCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Authentication Succeeded ( result : ĠBio metric Prompt . Authentication Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Authentication Succeeded ( result ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġ" Success ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . result ( BIO _ AUTH _ SUCCESS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Authentication Failed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Authentication Failed () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġ" Failed ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . result ( BIO _ AUTH _ FAILED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġcrypto Tool Ġ= ĠBio Crypto Tool () Ġ// Ġä½¿çĶ¨ Crypto å·¥åħ· åıĸå¾Ĺ Cipher ĊĊĠĠĠĠĠĠĠ Ġbio metric Prompt . authenticate ( get Prompt Info (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBio metric Prompt . Crypto Object ( crypto Tool . getC rypto Cipher ())) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Prompt Info (): ĠBio metric Prompt . Prompt Info Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBio metric Prompt . Prompt Info . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Subtitle ( sub Title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative ButtonText ( neg Btn Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Executor ( context : ĠContext ): ĠExecutor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠContext Compat . get Main Executor ( context ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠBIO _ AUTH _ SUCCESS Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠBIO _ AUTH _ FAILED Ġ= Ġ 9 0 1 ĊĊĠĠĠĠĠĠĠ Ġfun Ġcheck Device Support ( context : ĠContext ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbio metric Manager Ġ= ĠBio metric Manager . from ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbio metric Manager . can Authenticate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠBio Tools Callback Ġ{ ĊĠĠĠ Ġfun Ġresult ( result : ĠInt ) Ċ } ĊĊ Ċ /** Ċ Ġ* Ċ Ġ* ĠBio metric é© Ĺ èŃ ī ä¹ĭ Crypto Object çĶ ¢ çĶŁ å·¥åħ· Ċ Ġ* Ċ Ġ* Ġ ç¨ĭå¼ı ç¢ ¼ ä¾Ŀ çħ§ å®ĺæĸ¹ æķĻ åŃ ¸ ä¿®æĶ¹ èĢĮ æĪĲ ï¼Į åı¯ åı ĥ éĸ ± åı ĥ èĢĥ è³ĩæĸĻ Ċ Ġ* Ċ Ġ* Ċ Ġ* Ġ åı ĥ èĢĥ è³ĩæĸĻ ï¼ļ https :// developer . android . com / training / sign - in / bio metric - auth # kotlin Ċ Ġ* Ċ Ġ*/ Ċ Ċ class ĠBio Crypto Tool Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbio KeyName Ġ= Ġ" Bio Android Lab KT " ĊĠĠĠ Ġprivate Ġval Ġandroid KeyStore Name Ġ= Ġ" Android KeyStore " ĊĠĠĠ Ġprivate Ġval Ġkey Store Ġ= ĠKey Store . getInstance ( android KeyStore Name ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠKey Store ä¸Ģå®ļ è¦ģ load ï¼Į åĲ¦ åī ĩ æľĥ æİ Ľ æİī åĻ ´ Invocation TargetException ĊĠĠĠĠĠĠĠ Ġkey Store . load ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ åıĸå¾Ĺ è¨Ńå®ļ å®ĮæĪĲ ä¹ĭ Cipher ĊĠĠĠ Ġfun Ġget Crypto Cipher (): ĠCipher Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( isNot ContainsKey ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate SecretKey ( getKey Gen Parameter Spec ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcipher Ġ= Ġget Cipher () ĊĠĠĠĠĠĠĠ Ġval Ġsecret Key Ġ= Ġget SecretKey () ĊĠĠĠĠĠĠĠ Ġcipher . init ( Cipher . ENCRYPT _ MODE , Ġsecret Key ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcipher ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġæ ª ¢ æŁ¥ KeyStore æĺ¯åĲ¦ æľī å°į æĩ ī çļĦ Key ï¼Į éģ¿åħį éĩį è¤ĩ çĶ ¢ çĶŁ Key çļĦ åķıé¡Į ĊĠĠĠ Ġprivate Ġfun Ġis Not ContainsKey (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ! key Store . contains Alias ( bio KeyName ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ çĶ ¢ çĶŁ Key ĊĠĠĠ Ġprivate Ġfun Ġgenerate SecretKey ( key Gen Parameter Spec : ĠKey Gen Parameter Spec ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Generator Ġ= ĠKey Generator . getInstance ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKey Properties . KEY _ ALGORITHM _ AES , Ġandroid KeyStore Name ) ĊĠĠĠĠĠĠĠ Ġkey Generator . init ( key Gen Parameter Spec ) ĊĠĠĠĠĠĠĠ Ġkey Generator . generate Key () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ å¾ ŀ KeyStore åıĸå¾Ĺ SecretKey ĊĠĠĠ Ġprivate Ġfun Ġget SecretKey (): ĠSecret Key Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġkey Store . getKey ( bio KeyName , Ġnull ) Ġas ĠSecret Key ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// Ġ çĶ ¢ çĶŁ Cipher ĊĠĠĠ Ġprivate Ġfun Ġget Cipher (): ĠCipher Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠCipher . getInstance ( Key Properties . KEY _ ALGORITHM _ AES Ġ+ Ġ"/" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ĠKey Properties . BLOCK _ MODE _ CBC Ġ+ Ġ"/" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ĠKey Properties . ENCRYPT ION _ P ADDING _ PKCS 7 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetKey Gen Parameter Spec (): ĠKey Gen Parameter Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠKey Gen Parameter Spec . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbio KeyName , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKey Properties . P URPOSE _ ENCRYPT Ġor ĠKey Properties . P URPOSE _ DE CRYPT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Block Modes ( Key Properties . BLOCK _ MODE _ CBC ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Encryption P add ings ( Key Properties . ENCRYPT ION _ P ADDING _ PKCS 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setUser Authentication Required ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn validate Ġthe Ġkeys Ġif Ġthe Ġuser Ġhas Ġregistered Ġa Ġnew Ġbio metric ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcredential , Ġsuch Ġas Ġa Ġnew Ġfingerprint . ĠCan Ġcall Ġthis Ġmethod Ġonly ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġon ĠAndroid Ġ 7 . 0 Ġ( API Ġlevel Ġ 2 4 ) Ġor Ġhigher . ĠThe Ġvariable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ" invalid ated By Bio metric Enrollment " Ġis Ġtrue Ġby Ġdefault . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Invalid ated By Bio metric Enrollment ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ Ċ }