package Ġss _ n . common _ k tx . extension Ċ Ċ import Ġandroid . Manifest . permission Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . security . keystore . Key Gen Parameter Spec Ċ import Ġandroid . security . keystore . Key Properties Ċ import Ġandroid . speech . tts . Ut ter ance Progress Listener Ċ import Ġandroid . util . Base 6 4 Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . annotation . Requires Permission Ċ import Ġandroidx . core . os . bundle Of Ċ import Ġcom . squareup . mos hi . M oshi . Builder Ċ import Ġcom . squareup . mos hi . kotlin . reflect . Kotlin Json Adapter Factory Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġretrofit 2 . Converter . Factory Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . mos hi . M oshi Converter Factory Ċ import Ġss _ n . common _ k tx . HttpClient Ċ import Ġss _ n . common _ k tx . Text ToS peech Manager Ċ import Ġss _ n . common _ k tx . Text ToS peech Manager . Error Ċ import Ġjava . io . ByteArray InputStream Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . File Ċ import Ġjava . math . BigInteger Ċ import Ġjava . security . Invalid Algorithm Parameter Exception Ċ import Ġjava . security . KeyStore Ċ import Ġjava . security . NoSuch AlgorithmException Ċ import Ġjava . security . NoSuch Provider Exception Ċ import Ġjava . text . ParseException Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util . Date Ċ import Ġjava . util . Locale Ċ import Ġjavax . crypto . Cipher Ċ import Ġjavax . crypto . Cipher InputStream Ċ import Ġjavax . crypto . Cipher OutputStream Ċ import Ġjavax . crypto . Key Generator Ċ import Ġjavax . crypto . SecretKey Ċ import Ġjavax . crypto . spec . Iv Parameter Spec Ċ import Ġjavax . security . auth . x 5 0 0 . X 5 0 0 Principal Ċ Ċ /** Ċ Ġ* ĠString Ġparse Ġto ĠDate Ċ Ġ* Ċ Ġ* Ġ@ param Ġpattern Ġdefault Ġ= Ġ" yyyy / MM / dd ĠHH : mm : ss " Ċ Ġ* Ġ@ param Ġlocale Ġdefault Ġ= Ġdevice Ġdefault Ċ Ġ* Ġ@ return Ġparsed ĠDate Ċ Ġ*/ Ċ fun ĠString . toDate ( ĊĠĠĠ Ġpattern : ĠString Ġ= Ġ" yyyy / MM / dd ĠHH : mm : ss ", ĊĠĠĠ Ġlocale : ĠLocale Ġ= ĠLocale . getDefault () Ċ ): ĠDate ? Ġ{ ĊĠĠĠ Ġval ĠdateFormat Ġ= ĠSimpleDateFormat ( pattern , Ġlocale ) ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠ ĠdateFormat . parse ( this ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠParseException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠC rate ĠFile Ġfrom ĠString Ċ Ġ* ĠIf Ġthere Ġis Ġno Ġdirectory , Ġcreate Ġit Ġtogether Ċ Ġ* Ċ Ġ* Ġ@ return ĠCreated ĠFiles Ċ Ġ*/ Ċ @ Requires Permission ( ĊĠĠĠ Ġall Of Ġ= Ġ[ permission . WRITE _ EXTERNAL _ STORAGE , Ġpermission . READ _ EXTERNAL _ STORAGE ] Ċ ) Ċ fun ĠString . make File (): ĠFile Ġ= ĠFile ( this ). apply Ġ{ ĊĠĠĠ Ġthis . mkdir s () Ċ } Ċ Ċ /** Ċ Ġ* ĠMove ĠFile Ċ Ġ* Ċ Ġ* Ġ@ param Ġtarget Ġtarget FilePath Ċ Ġ* Ġ@ return ĠM oved ĠFile Ċ Ġ*/ Ċ @ Requires Permission ( ĊĠĠĠ Ġall Of Ġ= Ġ[ permission . WRITE _ EXTERNAL _ STORAGE , Ġpermission . READ _ EXTERNAL _ STORAGE ] Ċ ) Ċ fun ĠString . move File ( target : ĠString ): ĠFile ? Ġ{ ĊĠĠĠ Ġval Ġpre File Ġ= ĠFile ( target ) ĊĠĠĠ Ġif Ġ(! pre File . exists ()) Ġreturn Ġnull ĊĊĠĠĠ Ġval Ġmoved File Ġ= ĠFile ( this ) ĊĠĠĠ Ġreturn Ġwhen Ġ( pre File . rename To ( moved File )) Ġ{ ĊĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġmoved File ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠHas ĠFile Ċ Ġ* Ċ Ġ* Ġ@ return Ġtrue : ĠFile Ġexist Ċ Ġ*/ Ċ @ Requires Permission ( ĊĠĠĠ Ġall Of Ġ= Ġ[ permission . WRITE _ EXTERNAL _ STORAGE , Ġpermission . READ _ EXTERNAL _ STORAGE ] Ċ ) Ċ fun ĠString . has File (): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( isEmpty ()) Ġreturn Ġfalse ĊĊĠĠĠ Ġval Ġtarget Ġ= ĠFile ( this ) ĊĠĠĠ Ġreturn Ġtarget . exists () Ġ&& Ġtarget . isFile Ċ } Ċ Ċ /** Ċ Ġ* ĠGet ĠFile ĠSize Ċ Ġ* Ċ Ġ* Ġ@ param Ġsize Format Ġdefault ĠKB Ġsize Ġformat Ċ Ġ* Ġ@ return ĠFile ĠSize Ċ Ġ*/ Ċ @ Requires Permission ( ĊĠĠĠ Ġall Of Ġ= Ġ[ permission . WRITE _ EXTERNAL _ STORAGE , Ġpermission . READ _ EXTERNAL _ STORAGE ] Ċ ) Ċ fun ĠString . getFile Size ( size Format : ĠLong Ġ= Ġ 1 0 2 4 ): ĠLong Ġ{ ĊĠĠĠ Ġif Ġ( isEmpty ()) Ġreturn Ġ 0 ĊĊĠĠĠ Ġval Ġtarget Ġ= ĠFile ( this ) ĊĊĠĠĠ Ġif Ġ(! target . exists () Ġ|| Ġ! target . isFile ) Ġreturn Ġ 0 ĊĊĠĠĠ Ġreturn Ġtarget . length () Ġ/ Ġsize Format Ċ } Ċ Ċ /** Ċ Ġ* ĠRegex ĠString Ċ Ġ* Ċ Ġ* Ġ@ param Ġpattern Ġregex Ġpattern Ċ Ġ* Ġ@ param ĠerrorMessage Ġerror Ġmessage Ċ Ġ* Ġ@ param Ġerror Ġresponse Ġmethod Ċ Ġ* Ġ@ return Ġtrue : matched Ċ Ġ*/ Ċ fun ĠString . match Pattern ( ĊĠĠĠ Ġpattern : ĠString , ĊĠĠĠ ĠerrorMessage : ĠString Ġ= Ġ"", ĊĠĠĠ Ġerror : Ġ(( String ) Ġ-> ĠUnit ? )? Ġ= Ġnull Ċ ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġpattern . to Regex (). match Ent ire ( this )?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠ Ġerror ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ( errorMessage ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠMat ched ĠMail Address Ċ Ġ* Ċ Ġ* Ġ@ param ĠerrorMessage Ġerror Ġmessage Ċ Ġ* Ġ@ param Ġerror Ġresponse Ġmethod Ċ Ġ* Ġ@ return Ġtrue : matched Ċ Ġ*/ Ċ fun ĠString . is Mail Address ( ĊĠĠĠ ĠerrorMessage : ĠString Ġ= Ġ"", ĊĠĠĠ Ġerror : Ġ(( String ) Ġ-> ĠUnit ? )? Ġ= Ġnull Ċ ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġpattern Ġ= Ġ"^ [ a - zA - Z 0 - 9 \\ ._ \\ - \\ + ]+ @ [ a - zA - Z 0 - 9 _ \\ - ]+ \\ .[ a - zA - Z \\. ]+ [ a - zA - Z ]\ $" ĊĠĠĠ Ġreturn Ġmatch Pattern ( pattern , ĠerrorMessage , Ġerror ) Ċ } Ċ Ċ /** Ċ Ġ* ĠMat ched ĠPhone Number Ċ Ġ* Ċ Ġ* Ġ@ param ĠerrorMessage Ġerror Ġmessage Ċ Ġ* Ġ@ param Ġerror Ġresponse Ġmethod Ċ Ġ* Ġ@ return Ġtrue : matched Ċ Ġ*/ Ċ fun ĠString . is PhoneNumber ( errorMessage : ĠString Ġ= Ġ"", Ġerror : Ġ(( String ) Ġ-> ĠUnit ? )? Ġ= Ġnull ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġpattern Ġ= Ġ"\\ d { 1 0 }| \\ d { 1 1 }" ĊĠĠĠ Ġreturn Ġmatch Pattern ( pattern , ĠerrorMessage , Ġerror ) Ċ } Ċ Ċ /** Ċ Ġ* ĠMat ched ĠNumber Ċ Ġ* Ċ Ġ* Ġ@ param ĠerrorMessage Ġerror Ġmessage Ċ Ġ* Ġ@ param Ġerror Ġresponse Ġmethod Ċ Ġ* Ġ@ return Ġtrue : matched Ċ Ġ*/ Ċ fun ĠString . isNumber ( errorMessage : ĠString Ġ= Ġ"", Ġerror : Ġ(( String ) Ġ-> ĠUnit ? )? Ġ= Ġnull ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġpattern Ġ= Ġ"^ [ 0 - 9 ]+ \ $" ĊĠĠĠ Ġreturn Ġmatch Pattern ( pattern , ĠerrorMessage , Ġerror ) Ċ } Ċ Ċ /** Ċ Ġ* ĠMat ched ĠInt Ċ Ġ* Ċ Ġ* Ġ@ param ĠerrorMessage Ġerror Ġmessage Ċ Ġ* Ġ@ param Ġerror Ġresponse Ġmethod Ċ Ġ* Ġ@ return Ġtrue : matched Ċ Ġ*/ Ċ fun ĠString . is Int ( errorMessage : ĠString Ġ= Ġ"", Ġerror : Ġ(( String ) Ġ-> ĠUnit ? )? Ġ= Ġnull ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġpattern Ġ= Ġ"^ [ 0 - 9 ]{ 1 , 1 1 }\ $" ĊĠĠĠ Ġreturn Ġmatch Pattern ( pattern , ĠerrorMessage , Ġerror ) Ċ } Ċ Ċ /** Ċ Ġ* ĠPartial ĠMat ched ĠJapanese Ċ Ġ* Ċ Ġ* Ġ@ param ĠerrorMessage Ġerror Ġmessage Ċ Ġ* Ġ@ param Ġerror Ġresponse Ġmethod Ċ Ġ* Ġ@ return Ġtrue : partial Ġmatched Ċ Ġ*/ Ċ fun ĠString . has J apanese ( errorMessage : ĠString Ġ= Ġ"", Ġerror : Ġ(( String ) Ġ-> ĠUnit ? )? Ġ= Ġnull ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġpattern Ġ= Ġ"[ ^ 0 - 9 a - zA - Z ãģ ģ - ãĤĵ ãĤ ¡ - ãĥ ¶ ä¸Ģ - é¾ ł ãĢ ħ ãĥ¼ ]" ĊĠĠĠ Ġreturn Ġmatch Pattern ( pattern , ĠerrorMessage , Ġerror ) Ċ } Ċ Ċ /** Ċ Ġ* ĠShow ĠToast Ċ Ġ* Ċ Ġ* Ġ@ param Ġcontext ĠContext Ċ Ġ* Ġ@ param Ġtoast Length ĠToast ĠLength Ċ Ġ*/ Ċ fun ĠString . show Toast ( context : ĠContext , Ġtoast Length : ĠInt Ġ= ĠToast . LENGTH _ SHORT ) Ġ{ ĊĠĠĠ ĠToast . makeText ( context , Ġthis , Ġtoast Length ). show () Ċ } Ċ Ċ /** Ċ Ġ* ĠCreate ĠBundle Ċ Ġ* Ċ Ġ* Ġ@ param Ġvalue Ġvalue Ċ Ġ* Ġ@ return Ġ[ Bundle ] Ċ Ġ*/ Ċ fun ĠString . to Bundle Key ( value : ĠAny ): ĠBundle Ġ= Ġbundle Of ( this Ġto Ġvalue ) Ċ Ċ /** Ċ Ġ* ĠCreate ĠMutable Map Ċ Ġ* Ċ Ġ* Ġ@ param Ġvalue Ġvalue Ċ Ġ* Ġ@ return Ġ[ Mutable Map ] Ċ Ġ*/ Ċ fun ĠString . to Mutable Map Key ( value : ĠAny ): ĠMutable Map < String , ĠAny > Ġ= Ġmutable Map Of ( this Ġto Ġvalue ) Ċ Ċ /** Ċ Ġ* ĠCreate ĠMap Ċ Ġ* Ċ Ġ* Ġ@ param Ġvalue Ġvalue Ċ Ġ* Ġ@ return Ġ[ Map ] Ċ Ġ*/ Ċ fun ĠString . toMap Key ( value : ĠAny ): ĠMap < String , ĠAny > Ġ= Ġmap Of ( this Ġto Ġvalue ) Ċ Ċ /** Ċ Ġ* ĠCreate ĠRet rofit ĠService Ċ Ġ* Ċ Ġ* Ġ@ param ĠT ĠService Ġinterface Ġclass Ċ Ġ* Ġ@ param Ġservice ĠService Ġinterface Ġclass Ċ Ġ* Ġ@ param Ġclient ĠOk HttpClient Ġ: default Ġ[ HttpClient ] Ċ Ġ* Ġ@ param Ġconverter Factory ĠJson ĠParser ĠConverter ĠFactory Ġ: default Ġ[ M oshi Converter Factory ] Ċ Ġ* Ġ@ return ĠService Ġinterface Ġclass ĠInstance Ċ Ġ*/ Ċ fun Ġ< T > ĠString . create Ret rofit Service ( ĊĠĠĠ Ġservice : ĠClass < T >, ĊĠĠĠ Ġclient : ĠOk HttpClient ? Ġ= ĠHttpClient . default Client , ĊĠĠĠ Ġconverter Factory : ĠFactory ? Ġ= ĠM oshi Converter Factory . create ( ĊĠĠĠĠĠĠĠ ĠBuilder (). add ( Kotlin Json Adapter Factory ()). build () ĊĠĠĠ Ġ) Ċ ): ĠT Ġ{ ĊĠĠĠ Ġreturn ĠRet rofit . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠ ĠbaseUrl ( this @ create Ret rofit Service ) ĊĠĠĠĠĠĠĠ Ġclient ?. also Ġ{ Ġclient ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġconverter Factory ?. also Ġ{ Ġadd Converter Factory ( it ) Ġ} ĊĠĠĠ Ġ}. build (). create ( service ) Ċ } Ċ Ċ /** Ċ Ġ* ĠText ĠTo ĠSpeech Ċ Ġ* Ċ Ġ* Ġ@ param Ġcontext ĠContext Ċ Ġ* Ġ@ param Ġutter ance Progress Listener ĠUt ter ance Progress Listener Ċ Ġ* Ġ@ param Ġpitch Height Ġpitch Ġheight Ġ: Ġdefault Ġ 1 . 0 Ċ Ġ* Ġ@ param Ġpitch Rate Ġpitch Ġrate Ġ: Ġdefault Ġ 1 . 0 Ċ Ġ* Ġ@ return Ċ Ġ*/ Ċ fun ĠString . to Speech ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġutter ance Progress Listener : ĠUt ter ance Progress Listener ? Ġ= Ġnull , ĊĠĠĠ Ġpitch Height : ĠFloat Ġ= Ġ 1 . 0 f , ĊĠĠĠ Ġpitch Rate : ĠFloat Ġ= Ġ 1 . 0 f Ċ ): ĠError Ġ{ ĊĠĠĠ Ġval Ġt ts Manager Ġ= ĠText ToS peech Manager ĊĠĠĠ Ġt ts Manager . context Ġ= Ġcontext ĊĠĠĠ Ġreturn Ġt ts Manager . speech ( this , Ġutter ance Progress Listener , Ġpitch Height , Ġpitch Rate ) Ċ } Ċ Ċ fun ĠString . encrypt ( ĊĠĠĠ Ġalias : ĠString , ĊĠĠĠ Ġiv Key : ĠString Ġ= Ġ"", ĊĠĠĠ Ġkey Provider : ĠString Ġ= Ġ" Android KeyStore ", ĊĠĠĠ Ġis Print Error : ĠBoolean Ġ= Ġfalse Ċ ): ĠString ? Ġ{ ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Store Ġ= ĠKey Store . getInstance ( key Provider ) ĊĠĠĠĠĠĠĠ Ġkey Store . load ( null ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! key Store . contains Alias ( alias )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate AES Key ( alias , Ġkey Provider , Ġis Print Error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsecret Key : ĠSecret Key Ġ= Ġkey Store . getKey ( alias , Ġnull ) Ġas ĠSecret Key ĊĠĠĠĠĠĠĠ Ġval Ġcipher Ġ= ĠCipher . getInstance ( CIPHER _ TRANS FORMATION _ AES ) ĊĠĠĠĠĠĠĠ Ġval Ġiv Parameter Spec Ġ= ĠI v Parameter Spec ( iv Key . toByteArray ()) ĊĠĠĠĠĠĠĠ Ġcipher . init ( Cipher . DE CRYPT _ MODE , Ġsecret Key , Ġiv Parameter Spec ) ĊĠĠĠĠĠĠĠ Ġval ĠbyteArray OutputStream Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġval Ġcipher OutputStream Ġ= ĠCipher OutputStream ( byteArray OutputStream , Ġcipher ) ĊĠĠĠĠĠĠĠ Ġcipher OutputStream . write ( this . toByteArray ()) ĊĠĠĠĠĠĠĠ Ġcipher OutputStream . close () ĊĠĠĠĠĠĠĠ ĠBase 6 4 . encode ToString ( byteArray OutputStream . toByteArray (), ĠBase 6 4 . NO _ WRAP ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Print Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠString . decrypt ( ĊĠĠĠ Ġalias : ĠString , ĊĠĠĠ Ġiv Key : ĠString Ġ= Ġ"", ĊĠĠĠ Ġkey Provider : ĠString Ġ= Ġ" Android KeyStore ", ĊĠĠĠ Ġis Print Error : ĠBoolean Ġ= Ġfalse Ċ ): ĠString ? Ġ{ ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Store Ġ= ĠKey Store . getInstance ( key Provider ) ĊĠĠĠĠĠĠĠ Ġkey Store . load ( null ) ĊĠĠĠĠĠĠĠ Ġval Ġsecret Key : ĠSecret Key Ġ= Ġkey Store . getKey ( alias , Ġnull ) Ġas ĠSecret Key ? Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġcipher Ġ= ĠCipher . getInstance ( CIPHER _ TRANS FORMATION _ AES ) ĊĠĠĠĠĠĠĠ Ġval Ġiv Parameter Spec Ġ= ĠI v Parameter Spec ( iv Key . toByteArray ()) ĊĠĠĠĠĠĠĠ Ġcipher . init ( Cipher . DE CRYPT _ MODE , Ġsecret Key , Ġiv Parameter Spec ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcipher InputStream Ġ= ĠCipher InputStream ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠByteArrayInputStream ( Base 6 4 . decode ( this , ĠBase 6 4 . NO _ WRAP )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcipher ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval ĠbyteArray OutputStream Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġvar Ġbuffer : ĠInt ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer Ġ= Ġcipher InputStream . read () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( buffer Ġ== Ġ- 1 ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ ĠbyteArray OutputStream . write ( buffer ) ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( true ) ĊĠĠĠĠĠĠĠ ĠbyteArray OutputStream . close () ĊĠĠĠĠĠĠĠ ĠbyteArray OutputStream . toString (" UTF - 8 ") ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Print Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġconst Ġval ĠC IP HER _ TRANS FORMATION _ AES Ġ= ĊĠĠĠ Ġ"${ Key Properties . KEY _ ALGORITHM _ AES }/ " Ġ+ ĊĠĠĠĠĠĠĠ Ġ"${ Key Properties . BLOCK _ MODE _ CBC }/${ Key Properties . ENCRYPT ION _ P ADDING _ PKCS 7 }" Ċ Ċ private Ġfun Ġcreate AES Key ( ĊĠĠĠ Ġalias : ĠString , ĊĠĠĠ Ġkey Provider : ĠString , ĊĠĠĠ Ġis Print Error : ĠBoolean Ġ= Ġfalse Ċ ) Ġ{ ĊĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Generator Ġ= ĠKey Generator . getInstance ( Key Properties . KEY _ ALGORITHM _ AES , Ġkey Provider ) ĊĠĠĠĠĠĠĠ Ġkey Generator . init ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKey Gen Parameter Spec . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalias , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey Properties . P URPOSE _ ENCRYPT Ġor ĠKey Properties . P URPOSE _ DE CRYPT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Certificate Subject ( X 5 0 0 Principal (" CN =$ alias ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Certificate SerialNumber ( BigInteger . ONE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Block Modes ( Key Properties . BLOCK _ MODE _ CBC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Encryption P add ings ( Key Properties . ENCRYPT ION _ P ADDING _ PKCS 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Random ized Encryption Required ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġkey Generator . generate Key () ĊĠĠĠ Ġ}. exception OrNull ()?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNoSuch Provider Exception , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNoSuch AlgorithmException , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInvalid Algorithm Parameter Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Print Error ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ