package Ġcom . alternative infra structures . noise . models . signal Ċ Ċ import Ġcom . alternative infra structures . noise . models . Local Identity Ċ import Ġcom . alternative infra structures . noise . models . Remote Identity Ċ import Ġcom . alternative infra structures . noise . models . Remote Identity _ Table Ċ import Ġcom . ra iz labs . android . db flow . sql . language . SQLite Ċ Ċ import Ġorg . wh isper systems . lib signal . Identity Key Ċ import Ġorg . wh isper systems . lib signal . Identity KeyPair Ċ import Ġorg . wh isper systems . lib signal . Signal Protocol Address Ċ import Ġorg . wh isper systems . lib signal . state . Identity KeyStore Ċ Ċ class ĠNo ise Identity KeyStore Ġ: ĠIdentity KeyStore Ġ{ ĊĠĠĠ Ġ// ĠTODO : ĠCache Ġthe ĠLocal Identity ĊĠĠĠ Ġ// ĠConstructor Ġgr abs Ġa Ġcopy Ġof Ġthe ĠIdentity Ġfrom Ġthe Ġdatabase ĊĠĠĠ Ġ// ĠRegister Ġfor Ġchanges Ġto Ġthe ĠIdentity ĊĠĠĠ Ġ// ĠThis Ġway Ġwe Ġcan Ġavoid Ġquerying Ġthe Ġdatabase Ġevery Ġtime ĊĊĠĠĠ Ġ// ĠTODO : ĠSupport Ġmultiple Ġlocal Ġident ities ? ĊĠĠĠ Ġ// ĠConstructor Ġcan Ġaccept Ġarguments Ġto Ġpick Ġone ĊĊĠĠĠ Ġ// ĠTODO : ĠUse ĠRx ĊĊĠĠĠ Ġ// ĠTODO : ĠUse ĠSQL Cipher Ġor Ġsimilar Ġto Ġavoid Ġputting Ġprivate Ġkeys Ġin Ġthe Ġdatabase Ġin Ġcle art ext ĊĊĠĠĠ Ġoverride Ġfun Ġget Identity KeyPair (): ĠIdentity KeyPair ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġidentity Ġ= ĠSQLite . select (). from ( Local Identity :: class . java ). query Single () ĊĠĠĠĠĠĠĠ Ġreturn Ġidentity ?. identity KeyPair ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Local Registration Id (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġidentity Ġ= ĠSQLite . select (). from ( Local Identity :: class . java ). query Single () Ġ?: Ġthrow ĠLocal Identity . Missing Local Identity () ĊĠĠĠĠĠĠĠ Ġreturn Ġidentity . registration Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave Identity ( address : ĠSignal Protocol Address , Ġidentity Key : ĠIdentity Key ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠRemote Identity Ġidentity Ġ= Ġnew ĠRemote Identity ( address . getName (), Ġaddress . get DeviceId (), ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġidentity Key ); ĊĠĠĠĠĠĠĠ Ġ// Ġidentity . save (). subscribe (); ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠDo Ġwe Ġactually Ġneed Ġthis ? ĠIdentity Ġdiscovery Ġshould Ġhappen Ġautomatically Ġvia ĠIdentity Anno uncement Message ĊĠĠĠĠĠĠĠ Ġ// ĠOnce Ġwe Ġhave Ġsomething Ġrunning , Ġsee Ġwho Ġcalls Ġthis ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠIdentity Ġlifetime Ġmanagement ĊĠĠĠĠĠĠĠ Ġ// ĠAt Ġwhat Ġpoint Ġis Ġit Ġokay Ġto Ġupdate Ġan Ġidentity ? ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Trusted Identity ( address : ĠSignal Protocol Address , Ġidentity Key : ĠIdentity Key ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġidentity Ġ= ĠSQLite . select (). from ( Remote Identity :: class . java ). where ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRemote Identity _ Table . username . eq ( address . name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRemote Identity _ Table . deviceId . eq ( address . deviceId )). query Single () ĊĠĠĠĠĠĠĠ Ġreturn Ġidentity Ġ!= Ġnull Ġ&& Ġidentity Key Ġ== Ġidentity . identity Key ĊĠĠĠ Ġ} Ċ } Ċ