package Ġorg . did comm x . did comm . demo Ċ Ċ import Ġorg . did comm x . did comm . DID Comm Ċ import Ġorg . did comm x . did comm . message . Message Ċ import Ġorg . did comm x . did comm . model . Pack Encrypted Params Ċ import Ġorg . did comm x . did comm . model . Pack Encrypted Result Ċ import Ġorg . did comm x . did comm . model . Unpack Params Ċ import Ġorg . did comm x . did comm . secret .* Ċ import Ġorg . did comm x . did comm . utils . divide DID Fragment Ċ import Ġorg . did comm x . did comm . utils . toJson Ċ import Ġorg . did comm x . peer did .* Ċ import Ġjava . util .* Ċ Ċ class ĠD ID Comm Demo Helper ( secrets Resolver : ĠSecret Resolver Editable ? Ġ= Ġnull ) Ġ{ ĊĊĠĠĠ Ġdata Ġclass ĠUn pack Result ( ĊĠĠĠĠĠĠĠ Ġval Ġmessage : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġfrom : ĠString ?, ĊĠĠĠĠĠĠĠ Ġval Ġto : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġres : Ġorg . did comm x . did comm . model . Unpack Result ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġresolve Peer DID ( did : ĠString , Ġformat : ĠVerification Material Format Peer DID ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorg . did comm x . peer did . resolve Peer DID ( did , Ġformat ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsecrets Resolver Ġ= Ġsecrets Resolver Ġ?: ĠSecret Resolver Demo () ĊĊĠĠĠ Ġfun Ġcreate Peer DID ( ĊĠĠĠĠĠĠĠ Ġauth Keys Count : ĠInt Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠ Ġagreement Keys Count : ĠInt Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠ Ġservice Endpoint : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġservice Routing Keys : ĠList < String >? Ġ= Ġnull ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ 1 . Ġgenerate Ġkeys Ġin ĠJ WK Ġformat ĊĠĠĠĠĠĠĠ Ġval Ġx 2 5 5 1 9 key Pairs Ġ= Ġ( 1 .. agreement Keys Count ). map Ġ{ Ġgenerate X 2 5 5 1 9 Keys () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġed 2 5 5 1 9 key Pairs Ġ= Ġ( 1 .. auth Keys Count ). map Ġ{ Ġgenerate Ed 2 5 5 1 9 Keys () Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 2 . Ġprepare Ġthe Ġkeys Ġfor Ġpeer ĠD ID Ġlib ĊĠĠĠĠĠĠĠ Ġval Ġauth Public Keys Ġ= Ġed 2 5 5 1 9 key Pairs . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVerification Material Authentication ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat Ġ= ĠVerification Material Format Peer DID . J WK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠVerification MethodType Authentication . JSON _ WEB _ KEY _ 2 0 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġit . public ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġagre em Public Keys Ġ= Ġx 2 5 5 1 9 key Pairs . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVerification Material Agreement ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat Ġ= ĠVerification Material Format Peer DID . J WK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠVerification MethodType Agreement . JSON _ WEB _ KEY _ 2 0 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġit . public ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 3 . Ġgenerate Ġservice ĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= Ġservice Endpoint ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtoJson ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠD ID Comm Service Peer DID ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ" new - id ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠSERVICE _ DID COMM _ MESS AGING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Endpoint Ġ= Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrouting Keys Ġ= Ġservice Routing Keys , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccept Ġ= ĠlistOf (" did comm / v 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). to Dict () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 4 . Ġcall Ġpeer ĠD ID Ġlib ĊĠĠĠĠĠĠĠ Ġ// Ġif Ġwe Ġhave Ġjust Ġone Ġkey Ġ( auth ), Ġthen Ġuse Ġnum alg 0 Ġalgorithm ĊĠĠĠĠĠĠĠ Ġ// Ġotherwise Ġuse Ġnum alg 2 Ġalgorithm ĊĠĠĠĠĠĠĠ Ġval Ġdid Ġ= Ġif Ġ( auth Public Keys . size Ġ== Ġ 1 Ġ&& Ġagre em Public Keys . isEmpty () Ġ&& Ġservice . isNull OrEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Peer DID Num algo 0 ( auth Public Keys [ 0 ]) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Peer DID Num algo 2 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsigning Keys Ġ= Ġauth Public Keys , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencryption Keys Ġ= Ġagre em Public Keys , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Ġ= Ġservice ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 5 . Ġset ĠK IDs Ġas Ġin ĠD ID ĠDOC Ġfor Ġsecrets Ġand Ġstore Ġthe Ġsecret Ġin Ġthe Ġsecrets Ġresolver ĊĠĠĠĠĠĠĠ Ġval Ġdid Doc Ġ= ĠD ID Doc Peer DID . fromJson ( resolve Peer DID ( did , ĠVerification Material Format Peer DID . J WK )) ĊĠĠĠĠĠĠĠ Ġdid Doc . agreement K ids . zip ( x 2 5 5 1 9 key Pairs ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠprivateKey Ġ= Ġit . second . private . to Mutable Map () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprivateKey [" kid "] Ġ= Ġit . first ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecrets Resolver . add Key ( j wk To Secret ( privateKey )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdid Doc . authentication K ids . zip ( ed 2 5 5 1 9 key Pairs ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠprivateKey Ġ= Ġit . second . private . to Mutable Map () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprivateKey [" kid "] Ġ= Ġit . first ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecrets Resolver . add Key ( j wk To Secret ( privateKey )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdid ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpack ( ĊĠĠĠĠĠĠĠ Ġdata : ĠString , ĊĠĠĠĠĠĠĠ Ġto : ĠString , ĊĠĠĠĠĠĠĠ Ġfrom : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġsign From : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġprotect Sender : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ): ĠPack Encrypted Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdid Comm Ġ= ĠD ID Comm ( DID Doc Resolver Peer DID (), Ġsecrets Resolver ) ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠMessage . builder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠUUID . randomUUID (). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġmap Of (" msg " Ġto Ġdata ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" my - protocol / 1 . 0 " ĊĠĠĠĠĠĠĠ Ġ). build () ĊĠĠĠĠĠĠĠ Ġvar Ġbuilder Ġ= ĠPack Encrypted Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. builder ( message , Ġto ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forward ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. protect Sender Id ( protect Sender ) ĊĠĠĠĠĠĠĠ Ġbuilder Ġ= Ġfrom ?. let Ġ{ Ġbuilder . from ( it ) Ġ} Ġ?: Ġbuilder ĊĠĠĠĠĠĠĠ Ġbuilder Ġ= Ġsign From ?. let Ġ{ Ġbuilder . sign From ( it ) Ġ} Ġ?: Ġbuilder ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġbuilder . build () ĊĠĠĠĠĠĠĠ Ġreturn Ġdid Comm . pack Encrypted ( params ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġunpack ( packed Msg : ĠString ): ĠUn pack Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdid Comm Ġ= ĠD ID Comm ( DID Doc Resolver Peer DID (), Ġsecrets Resolver ) ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġdid Comm . unpack ( Unpack Params . Builder ( packed Msg ). build ()) ĊĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġres . message . body [" msg "]. toString () ĊĠĠĠĠĠĠĠ Ġval Ġto Ġ= Ġres . metadata . encrypted To ?. let Ġ{ Ġdivide DID Fragment ( it . first ()). first () Ġ} Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġfrom Ġ= Ġres . metadata . encrypted From ?. let Ġ{ Ġdivide DID Fragment ( it ). first () Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠUn pack Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġmsg , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġ= Ġfrom , Ġto Ġ= Ġto , Ġres Ġ= Ġres ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ