package Ġio . aar on sp ook y . bio metric authentication Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġandroid . security . keystore . Key Gen Parameter Spec Ċ import Ġandroid . security . keystore . Key Properties Ċ import Ġandroid . support . v 4 . hardware . fingerprint . Fingerprint Manager Compat Ċ import Ġandroid . support . v 4 . os . Cancellation Signal Ċ import Ġjava . lang . Exception Ċ import Ġjava . lang . RuntimeException Ċ import Ġjava . security . KeyStore Ċ import Ġjava . util .* Ċ import Ġjavax . crypto . Cipher Ċ import Ġjavax . crypto . Key Generator Ċ Ċ @ Target Api ( Build . VERSION _ CODES . M ) Ċ class ĠBio metric Prompt V 2 3 ( private Ġval Ġcontext : ĠContext ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠKEY _ NAME Ġ= ĠUUID . randomUUID (). toString () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcipher : ĠCipher ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġkey Store : ĠKey Store ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġkey Generator : ĠKey Generator ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcrypto Object : ĠF ingerprint Manager Compat . Crypto Object ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcallback : ĠBio metric Callback ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcancellation Signal : ĠC ancellation Signal ĊĠĠĠ Ġprivate Ġvar Ġdialog : ĠBio metric Dialog Ġ= ĠBio metric Dialog ( context ) ĊĊĠĠĠ Ġ// Ġregion ĠBuilder ĊĊĠĠĠ Ġfun Ġwith Title ( title : ĠString ): ĠBio metric Prompt V 2 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġdialog . setTitle ( title ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Subtitle ( subtitle : ĠString ): ĠBio metric Prompt V 2 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġdialog . set Subtitle ( subtitle ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Description ( description : ĠString ): ĠBio metric Prompt V 2 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġdialog . setDescription ( description ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Negative Text Button ( negative Text : ĠString ): ĠBio metric Prompt V 2 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġdialog . set Negative Text ( negative Text ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Callback ( callback : ĠBio metric Callback ): ĠBio metric Prompt V 2 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġdialog . set Callback ( callback ) ĊĠĠĠĠĠĠĠ Ġthis . callback Ġ= Ġcallback ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Cancellation Signal ( c ancellation Signal : ĠC ancellation Signal ): ĠBio metric Prompt V 2 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġdialog . set Cancellation Signal ( c ancellation Signal ) ĊĠĠĠĠĠĠĠ Ġthis . c ancellation Signal Ġ= Ġcancellation Signal ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild (): ĠBio metric Prompt V 2 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġauthenticate () Ġ{ ĊĠĠĠĠĠĠĠ Ġgenerate Key () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( init Cipher ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcrypto Object Ġ= ĠF ingerprint Manager Compat . Crypto Object ( cipher ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfingerprint Manager Compat Ġ= ĠF ingerprint Manager Compat . from ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfingerprint Manager Compat . authenticate ( crypto Object , Ġ 0 , Ġcancellation Signal , ĠBio metric Callback V 2 3 ( callback , Ġdialog ), Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġend region ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Key () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Store Ġ= ĠKey Store . getInstance (" Android KeyStore ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Store . load ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Generator Ġ= ĠKey Generator . getInstance ( Key Properties . KEY _ ALGORITHM _ AES , Ġ" Android KeyStore ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Generator . init ( Key Gen Parameter Spec . Builder ( KEY _ NAME , ĠKey Properties . P URPOSE _ ENCRYPT . or ( Key Properties . P URPOSE _ DE CRYPT )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Block Modes ( Key Properties . BLOCK _ MODE _ CBC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setUser Authentication Required ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Encryption P add ings ( Key Properties . ENCRYPT ION _ P ADDING _ PKCS 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Generator . generate Key () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exc : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexc . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Cipher (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcipher Ġ= ĠCipher . getInstance ( Key Properties . KEY _ ALGORITHM _ AES Ġ+ Ġ"/" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ĠKey Properties . BLOCK _ MODE _ CBC Ġ+ Ġ"/" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ĠKey Properties . ENCRYPT ION _ P ADDING _ PKCS 7 ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Failed Ġto Ġget Ġcipher ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Store . load ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġkey Store . getKey ( KEY _ NAME , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcipher . init ( Cipher . ENCRYPT _ MODE , Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRuntimeException (" Failed Ġto Ġinit Ġcipher ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }