package Ġcom . viv y . e 2 e Ċ Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġcom . google . gson . reflect . Type Token Ċ import Ġcom . viv y . as ymmetric . As ymmetric Encryption Ċ import Ġcom . viv y . support . Base 6 4 Encoder Ċ import Ġcom . viv y . support . Secure Random Generator Ċ import Ġcom . viv y . symmetric . Symmetric Encryption Ċ import Ġjava . lang . reflect . Type Ċ import Ġjava . security . PrivateKey Ċ import Ġjava . security . PublicKey Ċ Ċ abstract Ġclass ĠAbstract As ymmetric Symmetric Encryption ( ĊĠĠĠĠĠĠĠ Ġval Ġas ymmetric Encryption : ĠAs ymmetric Encryption , ĊĠĠĠĠĠĠĠ Ġval Ġsymmetric Encryption : ĠSym metric Encryption Ċ ) Ġ: ĠE 2 E Encryption Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbase 6 4 Encoder Ġ= ĠBase 6 4 Encoder ĊĠĠĠ Ġprivate Ġval Ġsecure Random Generator Ġ= ĠSecure Random Generator () ĊĊĠĠĠ Ġprivate Ġval Ġgson Ġ= ĠGson Builder (). disable Html Esc aping (). create () ĊĊĠĠĠ Ġoverride Ġfun Ġencrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpublicKey : ĠPublicKey , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplain Data : ĠByteArray ĊĠĠĠ Ġ): ĠE 2 E Encryption . Encrypted Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġsecure Random Generator . bytes ( 3 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġiv Ġ= Ġsecure Random Generator . bytes ( 1 6 ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaes Encrypted Bytes Ġ= Ġsymmetric Encryption . encrypt ( plain Data , Ġkey , Ġiv ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcipher Keys Json Ġ= Ġgson . toJson ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of < String , ĠString >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" base 6 4 Encoded Key " Ġto Ġbase 6 4 Encoder . base 6 4 ( key ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" base 6 4 Encoded IV " Ġto Ġbase 6 4 Encoder . base 6 4 ( iv ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġencrypted Cipher Keys Ġ= Ġas ymmetric Encryption . encrypt Text ( publicKey , Ġcipher Keys Json ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠE 2 E Encryption . Encrypted ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaes Encrypted Bytes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencrypted Cipher Keys , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠEncryption Failed ( if Ġ( debug Mode ) Ġe Ġelse Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprivateKey : ĠPrivate Key , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencrypted : ĠE 2 E Encryption . Encrypted ĊĠĠĠ Ġ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġencrypted Cipher Keys Ġ= Ġencrypted . cipher ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcipher Keys Json Ġ= Ġas ymmetric Encryption . decrypt Text ( privateKey , Ġencrypted Cipher Keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype : ĠType Ġ= Ġobject Ġ: ĠType Token < Map < String , ĠString >>() Ġ{} . type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcipher Keys Map Ġ= Ġgson . fromJson < Map < String , ĠString >>( cipher Keys Json , Ġtype ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsymmetric Encryption . decrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencrypted . data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase 6 4 Encoder . de base 6 4 ( cipher Keys Map [" base 6 4 Encoded Key "]. toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase 6 4 Encoder . de base 6 4 ( cipher Keys Map [" base 6 4 Encoded IV "]. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠDec ryption Failed ( if Ġ( debug Mode ) Ġe Ġelse Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġdebug Mode : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġfun Ġset Debug Mode To ( debug : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . debug Mode Ġ= Ġdebug ĊĠĠĠ Ġ} Ċ Ċ } Ċ