package Ġcom . th om ask io ko . pay bill manager . remote . util Ċ Ċ import Ġandroid . util . Base 6 4 Ċ import Ġjava . io . IOException Ċ import Ġjava . io . Unsupported EncodingException Ċ import Ġjava . security .* Ċ import Ġjava . security . interfaces . RS AP rivate Key Ċ import Ġjava . security . spec . PKCS 8 Encoded KeySpec ĊĊ Ċ object ĠSignature Util Ġ{ ĊĊĠĠĠ Ġfun Ġgenerate Signature ( data StringTo Sign : ĠString , ĠprivateKey : ĠString ): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġbase 6 4 Signature Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrsa PrivateKey Ġ= Ġget PrivateKey FromString ( privateKey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Sign ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase 6 4 Signature Ġ= Ġsign ( rsa PrivateKey , Ġdata StringTo Sign ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠGeneral Security Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbase 6 4 Signature ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate ĠRS AP rivate Key ĠObject Ġfrom Ġthe ĠPrivate ĠKey ĠString Ġusing ĠPKCS 8 Encoded KeySpec ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( IOException :: class , ĠGeneral Security Exception :: class ) ĊĠĠĠ Ġprivate Ġfun Ġget PrivateKey FromString ( privateKey : ĠString ): ĠRS AP rivate Key Ġ{ ĊĊĠĠĠĠĠĠĠ ĠprivateKey . replace (" ----- BEGIN ĠPRIVATE ĠKEY ----- \ n ", Ġ"") ĊĠĠĠĠĠĠĠ ĠprivateKey . replace (" ----- END ĠPRIVATE ĠKEY ----- ", Ġ"") ĊĠĠĠĠĠĠĠ Ġval Ġencoded Ġ= ĠBase 6 4 . decode ( privateKey , ĠBase 6 4 . DEFAULT ) ĊĠĠĠĠĠĠĠ Ġval Ġkey Factory Ġ= ĠKey Factory . getInstance (" RSA ") ĊĠĠĠĠĠĠĠ Ġval Ġkey Spec Ġ= ĠPKCS 8 Encoded KeySpec ( encoded ) ĊĠĠĠĠĠĠĠ Ġreturn Ġkey Factory . generate Private ( key Spec ) Ġas ĠRS AP rivate Key ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġbase 6 4 Ġencoded Ġsignature Ġusing ĠSHA 2 5 6 / RSA . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNoSuch AlgorithmException :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInvalid Key Exception :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSignature Exception :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnsupported EncodingException :: class ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġfun Ġsign ( privateKey : ĠPrivate Key , Ġmessage : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsign Ġ= ĠSignature . getInstance (" SHA 2 5 6 with RSA ") ĊĠĠĠĠĠĠĠ Ġsign . init Sign ( privateKey ) ĊĠĠĠĠĠĠĠ Ġsign . update ( message . toByteArray ( charset (" UTF - 8 "))) ĊĠĠĠĠĠĠĠ Ġreturn ĠBase 6 4 . encode ToString ( sign . sign (), ĠBase 6 4 . DEFAULT ) ĊĠĠĠ Ġ} Ċ }