package Ġcom . con cord ium . wallet . core . crypto Ċ Ċ import Ġcom . con cord ium . mobile _ wallet _ lib .* Ċ import Ġcom . con cord ium . wallet . data . crypt ol ib .* Ċ import Ġcom . con cord ium . wallet . data . model . Ar s Info Ċ import Ġcom . con cord ium . wallet . data . model . Global Params Ċ import Ġcom . con cord ium . wallet . data . model . Identity Provider Info Ċ import Ġcom . con cord ium . wallet . data . model . Possible Account Ċ import Ġcom . con cord ium . wallet . util . Log Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . reflect . Type Token Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context ĊĊ Ċ class ĠCrypto Library Real ( val Ġgson : ĠGson ) Ġ: ĠCrypto Library Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcreate Id Request And PrivateData ( ĊĠĠĠĠĠĠĠ Ġidentity Provider Info : ĠIdentity Provider Info , ĊĠĠĠĠĠĠĠ Ġar s Info : ĠMap < String , ĠA rs Info >, ĊĠĠĠĠĠĠĠ Ġglobal : ĠGlobal Params ? ĊĠĠĠ Ġ): ĠId Request And PrivateData Output ? Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Obj Ġ= ĠId Request And PrivateData Input ( identity Provider Info , Ġglobal , Ġar s Info ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġgson . toJson ( input Obj ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Wallet Lib () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcreate _ id _ request _ and _ private _ data ( input ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Output Ġ( Code Ġ${ result . result }): Ġ${ result . output }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . result Ġ== ĠCrypto Library . SUCCESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġgson . fromJson ( result . output , ĠId Request And PrivateData Output :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context Ġoutput ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Crypt ol ib Ġfailed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcreate Credential ( credential Input : ĠCreate Credential Input ): ĠCreate Credential Output ? Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġgson . toJson ( credential Input ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Wallet Lib () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcreate _ credential ( input ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Output Ġ( Code Ġ${ result . result }): Ġ${ result . output }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . result Ġ== ĠCrypto Library . SUCCESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġgson . fromJson ( result . output , ĠCreate Credential Output :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context Ġoutput ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Crypt ol ib Ġfailed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcreate Transfer ( create Transfer Input : ĠCreate Transfer Input , Ġtype : ĠInt ): ĠCreate Transfer Output ? Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġgson . toJson ( create Transfer Input ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Input : Ġ$ input ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Wallet Lib () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġinternal Create Transfer ( input , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Output Ġ( Code Ġ${ result . result }): Ġ${ result . output }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . result Ġ== ĠCrypto Library . SUCCESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġgson . fromJson ( result . output , ĠCreate Transfer Output :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context Ġoutput ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Crypt ol ib Ġfailed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinternal Create Transfer ( input : ĠString , Ġtype : ĠInt ): ĠReturn Value Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠCrypto Library . PUBLIC _ TO _ SEC _ TRANSFER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcreate _ pub _ to _ sec _ transfer ( input ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠCrypto Library . SEC _ TO _ PUBLIC _ TRANSFER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcreate _ sec _ to _ pub _ transfer ( input ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠCrypto Library . ENCRYPT ED _ TRANSFER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcreate _ encrypted _ transfer ( input ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Crypto Library . REG ULAR _ TRANSFER ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate _ transfer ( input ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdecrypt Encrypted Amount ( input : ĠDecrypt Amount Input ): ĠString ? Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġgson . toJson ( input ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Input : Ġ$ input ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Wallet Lib () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdecrypt _ encrypted _ amount ( input ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Output Ġ( Code Ġ${ result . result }): Ġ${ result . output }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . result Ġ== ĠCrypto Library . SUCCESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context Ġresult . output ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Crypt ol ib Ġfailed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcombine Encrypted Amount s ( input 1 : ĠString , Ġinput 2 : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġload Wallet Lib () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcombine _ encrypted _ amount s ( gson . toJson ( input 1 ), Ġgson . toJson ( input 2 )) ĊĠĠĠĠĠĠĠ Ġreturn Ġgson . fromJson ( result . output , ĠString :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcheck Account Address ( address : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġload Wallet Lib () ĊĠĠĠĠĠĠĠ Ġreturn Ġcheck _ account _ address ( address ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġgenerate Accounts ( generate Accounts Input : ĠGenerate Accounts Input ): ĠList < Possible Account >? Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġgson . toJson ( generate Accounts Input ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Wallet Lib () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġgenerate _ accounts ( input ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Output Ġ( Code Ġ${ result . result }): Ġ${ result . output }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . result Ġ== ĠCrypto Library . SUCCESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Type Ġ= Ġobject Ġ: ĠType Token < List < Possible Account >>() Ġ{} . type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context Ġgson . fromJson < List < Possible Account >>( result . output , Ġlist Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Crypt ol ib Ġfailed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ }