package Ġapp . cy la . util Ċ Ċ import Ġapp . cy la . api . model . Day Ċ import Ġcom . co ss ack labs . the mis . Secure Cell Ċ import Ġcom . co ss ack labs . the mis . Symmetric Key Ċ import Ġjava . nio . charset . Charset Ċ import Ġjava . security . Message Digest Ċ Ċ class ĠThe mis Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate Encrypted Symmetric Key ( pass phrase : ĠString ): ĠPair < Symmetric Key , ĠByteArray > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= ĠSym metric Key () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġencrypted Key Ġ= Ġencrypt User Key ( key , Ġpassphrase ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPair ( key , Ġencrypted Key ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġgenerate Auth Key ( pass phrase : ĠString ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstance Ġ= ĠMessage Digest . getInstance (" SHA - 5 1 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . update ( pass phrase . encode To ByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance . digest () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġencrypt User Key ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Key : ĠSym metric Key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassphrase : ĠString ĊĠĠĠĠĠĠĠ Ġ) Ġ: ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Key Cell Ġ= ĠSecure Cell . Se al With Pass phrase ( pass phrase ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġuser Key Cell . encrypt ( user Key . toByteArray ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdecrypt User Key ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencrypted User Key : ĠByteArray , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassphrase : ĠString ĊĠĠĠĠĠĠĠ Ġ): ĠSym metric Key Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Key Cell Ġ= ĠSecure Cell . Se al With Pass phrase ( pass phrase ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSym metric Key ( user Key Cell . decrypt ( encrypted User Key )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdecrypt String ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠSym metric Key , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata : ĠByteArray ĊĠĠĠĠĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdecrypt Data ( key , Ġdata ). toString ( Charset . forName (" UTF - 8 ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdecrypt String ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠSym metric Key , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata : ĠByteArray , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠByteArray ĊĠĠĠĠĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdecrypt Data ( key , Ġdata , Ġcontext ). toString ( Charset . forName (" UTF - 8 ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdecrypt Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠSym metric Key , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata : ĠByteArray , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠByteArray ? ĊĠĠĠĠĠĠĠ Ġ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Cell Ġ= ĠSecure Cell . Se al With Key ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( context Ġ== Ġnull Ġ|| Ġcontext . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Cell . decrypt ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Cell . decrypt ( data , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdecrypt Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠSym metric Key , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata : ĠByteArray ĊĠĠĠĠĠĠĠ Ġ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdecrypt Data ( key , Ġdata , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdecrypt Day Info ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Key : ĠSym metric Key , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġday : ĠDay ĊĠĠĠĠĠĠĠ Ġ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday Key Ġ= ĠSym metric Key ( decrypt Data ( user Key , Ġday . day Key )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdecrypt Data ( day Key , Ġday . day Info , Ġday . date . toString (). toByteArray ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġencrypt Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠSym metric Key , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata : ĠByteArray , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠByteArray ? ĊĠĠĠĠĠĠĠ Ġ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Cell Ġ= ĠSecure Cell . Se al With Key ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( context Ġ== Ġnull Ġ|| Ġcontext . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Cell . encrypt ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Cell . encrypt ( data , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġencrypt Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠSym metric Key , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata : ĠByteArray ĊĠĠĠĠĠĠĠ Ġ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġencrypt Data ( key , Ġdata , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠEncrypt s Ġday Ġwith Ġa Ġnew , Ġrandom Ġdate Ġkey . ĠThe Ġdate Ġkey Ġis Ġencrypted Ġusing Ġthe Ġuser Key . ĊĠĠĠĠĠĠĠĠ Ġ* ĠAdditionally , Ġthe Ġdate Ġis Ġused Ġas Ġencryption Ġcontext Ġfor Ġthe Ġday Info . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġencrypt Day Info ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Key : ĠSym metric Key , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġday Info : ĠByteArray , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Context : ĠString ĊĠĠĠĠĠĠĠ Ġ): ĠPair < ByteArray , ĠByteArray > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday Key Ġ= ĠSym metric Key (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPair ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencrypt Data ( day Key , Ġday Info , Ġdate Context . toByteArray ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencrypt Data ( user Key , Ġday Key . toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ