package Ġcom . lt an . sign . util Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . content . pm . Signature Ċ import Ġjava . security . Message Digest Ċ import Ġjava . security . NoSuch AlgorithmException Ċ Ċ /** Ċ Ġ* Ċ Ġ* Ġ@ desc Ċ Ġ* Ġ@ author Ġ Ġtan lin Ċ Ġ* Ġ@ since ĠĠ 2 0 2 0 / 5 / 9 Ċ Ġ* Ġ@ version Ġ 1 . 0 Ċ Ġ*/ Ċ object ĠApp Util Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Sign / App Util " ĊĊĠĠĠ Ġfun Ġget Signature ( context : ĠContext ?, ĠpackageName : ĠString , Ġtype : ĠString , Ġwith Colon : ĠBoolean Ġ= Ġfalse ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtmp Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtmp ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsigns Ġ= Ġget Signatures ( context , ĠpackageName ) Ġ?: Ġreturn Ġtmp ĊĠĠĠĠĠĠĠ Ġfor Ġ( sig Ġin Ġsigns ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtmp Ġ= Ġget Signature String ( sig , Ġtype , Ġwith Colon ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtmp ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Signatures ( context : ĠContext , ĠpackageName : ĠString ): ĠArray < Signature >? Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpackage Info Ġ= Ġcontext . package Manager . get Package Info ( packageName , ĠPackage Manager . GET _ SIGNATURE S ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpackage Info . signatures ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠPackage Manager . Name NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Util . e ( TAG , Ġ" get Signatures Ġe :$ e ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Signature String ( sign : ĠSignature , Ġtype : ĠString , Ġwith Colon : ĠBoolean Ġ= Ġfalse ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhex Bytes Ġ= Ġsign . toByteArray () ĊĠĠĠĠĠĠĠ Ġvar Ġfingerprint Ġ= Ġ" error !" ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdigest : ĠMessage Digest Ġ= ĠMessage Digest . getInstance ( type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdigest Bytes : ĠByteArray Ġ= Ġdigest . digest ( hex Bytes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( byte Ġin Ġdigest Bytes ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb : ĠInt Ġ= Ġbyte . toInt (). and ( 0 xFF ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= ĠInteger . to HexString ( b )// . toUpperCase ( Locale . US ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s . length Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( with Colon ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (': ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( with Colon ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . delete Char At ( sb . length Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfingerprint Ġ= Ġsb . toString () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch AlgorithmException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Util . e ( TAG , Ġ" get Signature String Ġ$ e ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfingerprint ĊĠĠĠ Ġ} Ċ } Ċ