package Ġorg . did comm x . peer did Ċ Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġcom . google . gson . Json Deserializer Ċ import Ġorg . did comm x . peer did . core . did Doc FromJson Ċ Ċ data Ġclass ĠD ID Doc Peer DID ( ĊĠĠĠ Ġval Ġdid : ĠString , ĊĠĠĠ Ġval Ġauthentication : ĠList < Verification Method Peer DID >, ĊĠĠĠ Ġval Ġkey Agreement : ĠList < Verification Method Peer DID > Ġ= Ġempty List (), ĊĠĠĠ Ġval Ġservice : ĠList < Service >? Ġ= Ġnull Ċ ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġinstance Ġof ĠD ID Doc Peer DID Ġfrom Ġthe Ġgiven ĠD ID ĠDoc ĠJSON . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġvalue ĠD ID ĠDoc ĠJSON ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ throws ĠMal formed Peer DID DO c Exception Ġif Ġthe Ġinput ĠD ID ĠDoc ĠJSON Ġis Ġnot Ġa Ġvalid Ġpeer did ĠD ID ĠDoc ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġ[ DID Doc Peer DID ] Ġinstance ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Json ( value : ĠJSON ): ĠD ID Doc Peer DID Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġde serializer Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson Deserializer Ġ{ Ġjson , ĠtypeOf T , Ġcontext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠjsonObject Ġ= Ġjson ?. as JsonObject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Invalid ĠJSON ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdid Doc FromJson ( jsonObject ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGson Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register Type Adapter ( DID Doc Peer DID :: class . java , Ġde serializer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fromJson ( value , ĠD ID Doc Peer DID :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMal formed Peer DID DO c Exception ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġauthentication K ids Ġget () Ġ= Ġauthentication . map Ġ{ Ġit . id Ġ} ĊĠĠĠ Ġval Ġagreement K ids Ġget () Ġ= Ġkey Agreement . map Ġ{ Ġit . id Ġ} ĊĊĠĠĠ Ġfun Ġto Dict (): ĠMap < String , ĠAny > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġmutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" id " Ġto Ġdid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" authentication " Ġto Ġauthentication . map Ġ{ Ġit . to Dict () Ġ}, ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( key Agreement . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres [" key Agreement "] Ġ= Ġkey Agreement . map Ġ{ Ġit . to Dict () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġservice ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres [" service "] Ġ= Ġservice . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠOther Service Ġ-> Ġit . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠD ID Comm Service Peer DID Ġ-> Ġit . to Dict () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠtoJson () Ġ= ĊĠĠĠĠĠĠĠ ĠGson Builder (). set Pretty Print ing (). disable Html Esc aping (). create (). toJson ( to Dict ()) Ċ } Ċ Ċ data Ġclass ĠVerification Method Peer DID ( ĊĠĠĠ Ġval Ġid : ĠString , ĊĠĠĠ Ġval Ġcontroller : ĠString , ĊĠĠĠ Ġval Ġver Material : ĠVerification Material < out ĠVerification MethodType > Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġfun ĠpublicKey Field () Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( ver Material . format ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVerification Material Format Peer DID . BASE 5 8 Ġ-> ĠPublicKey Field . BASE 5 8 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVerification Material Format Peer DID . J WK Ġ-> ĠPublicKey Field . J WK ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVerification Material Format Peer DID . MULTI BASE Ġ-> ĠPublicKey Field . MULTI BASE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġto Dict () Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠ Ġ" id " Ġto Ġid , ĊĠĠĠĠĠĠĠ Ġ" type " Ġto Ġver Material . type . value , ĊĠĠĠĠĠĠĠ Ġ" controller " Ġto Ġcontroller , ĊĠĠĠĠĠĠĠ ĠpublicKey Field (). value Ġto Ġver Material . value , ĊĠĠĠ Ġ) Ċ } Ċ Ċ sealed Ġinterface ĠService Ċ Ċ data Ġclass ĠOther Service ( val Ġdata : ĠMap < String , ĠAny >) Ġ: ĠService Ċ Ċ data Ġclass ĠD ID Comm Service Peer DID ( ĊĠĠĠ Ġval Ġid : ĠString , ĊĠĠĠ Ġval Ġtype : ĠString , ĊĠĠĠ Ġval Ġservice Endpoint : ĠString ?, ĊĠĠĠ Ġval Ġrouting Keys : ĠList < String > ?, ĊĠĠĠ Ġval Ġaccept : ĠList < String >? Ċ ) Ġ: ĠService Ġ{ ĊĊĠĠĠ Ġfun Ġto Dict (): ĠMutable Map < String , ĠAny > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġmutable Map Of < String , ĠAny >( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSERVICE _ ID Ġto Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSERVICE _ TYPE Ġto Ġtype , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġservice Endpoint ?. let Ġ{ Ġres [ SERVICE _ ENDPOINT ] Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġrouting Keys ?. let Ġ{ Ġres [ SERVICE _ ROUT ING _ KEYS ] Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġaccept ?. let Ġ{ Ġres [ SERVICE _ ACCEPT ] Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠPublicKey Field ( val Ġvalue : ĠString ) Ġ{ ĊĠĠĠ ĠBASE 5 8 (" publicKey Base 5 8 "), ĊĠĠĠ ĠMULTI BASE (" publicKey Mult ibase "), ĊĠĠĠ ĠJ WK (" publicKey J wk "); Ċ } Ċ Ċ const Ġval ĠSERVICE _ ID Ġ= Ġ" id " Ċ const Ġval ĠSERVICE _ TYPE Ġ= Ġ" type " Ċ const Ġval ĠSERVICE _ ENDPOINT Ġ= Ġ" service Endpoint " Ċ const Ġval ĠSERVICE _ DID COMM _ MESS AGING Ġ= Ġ" DID Comm Messaging " Ċ const Ġval ĠSERVICE _ ROUT ING _ KEYS Ġ= Ġ" routing Keys " Ċ const Ġval ĠSERVICE _ ACCEPT Ġ= Ġ" accept " Ċ