/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠGoogle ĠLLC Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ */ Ċ Ċ package Ġcom . ul . ims . g mdl . cb or data . security Ċ Ċ import Ġandroid . util . Log Ċ import Ġco . n st ant .` in `. cb or . Cb or Builder Ċ import Ġco . n st ant .` in `. cb or . Cb or Decoder Ċ import Ġco . n st ant .` in `. cb or . Cb or Encoder Ċ import Ġco . n st ant .` in `. cb or . Cb or Exception Ċ import Ġco . n st ant .` in `. cb or . model . Array Ċ import Ġco . n st ant .` in `. cb or . model . Map Ċ import Ġco . n st ant .` in `. cb or . model . Unicode String Ċ import Ġcom . ul . ims . g mdl . cb or data . generic . Abstract Cb or Structure Ċ import Ġcom . ul . ims . g mdl . cb or data . response . Issuer Signed Item Ċ import Ġjava . io . ByteArray InputStream Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . Serializable Ċ Ċ class ĠIss uer Name Spaces Ġprivate Ġconstructor ĊĠĠĠ Ġ( val Ġname Spaces : ĠMutable Map < String , ĠMutable List < Issuer Signed Item >>) ĊĠĠĠ Ġ: ĠSerializable , ĠAbstract Cb or Structure () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLOG _ TAG Ġ= Ġ" Issuer Name Spaces " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠBuilder { ĊĠĠĠĠĠĠĠ Ġprivate Ġvar ĠlistOf Issuer Signed Items : ĠMutable List < Issuer Signed Item > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġprivate Ġvar ĠlistOf Name Spaces : ĠMutable Map < String , ĠMutable List < Issuer Signed Item >> Ġ= Ġmutable Map Of () ĊĊĠĠĠĠĠĠĠ Ġfun Ġdecode ( data : ĠByteArray ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= ĠByteArrayInputStream ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Items Ġ= ĠC bor Decoder ( stream ). decode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Items . size Ġ> Ġ 0 Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstructure Items : ĠMap ? Ġ= Ġdata Items [ 0 ] Ġas ? ĠMap ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstructure Items ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . keys . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecode Name Spaces ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠC bor Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( java Class . simple Name , ": Ġ$ ex ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Namespace ( namespace Ġ: ĠString , Ġissuer Signed Items Ġ: ĠMutable List < Issuer Signed Item >) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Name Spaces . put ( namespace , Ġissuer Signed Items . to Mutable List ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdecode Name Spaces ( name Spaces : ĠMap ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Spaces . keys . forEach Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġas ĠUnicode String ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠarrayOf Issuer Signed Items Ġ= Ġname Spaces . get ( i ) Ġas ĠArray ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf Issuer Signed Items . data Items . forEach Ġ{ Ġj Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis i Ġ= ĠIss uer Signed Item . Builder (). decode ( j Ġas ĠMap ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Issuer Signed Items . add ( isi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Name Spaces [ i . string ] Ġ= ĠlistOf Issuer Signed Items ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠC bor Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( LOG _ TAG , Ġex . message . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild () Ġ: ĠIss uer Name Spaces Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠIss uer Name Spaces ( listOf Name Spaces ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġencode (): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠC bor Builder () ĊĠĠĠĠĠĠĠ Ġval Ġstructure Map Ġ= Ġbuilder . add Map () ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġname Spaces . forEach Ġ{ Ġ( ns , Ġl ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġis i Arr Ġ= ĠArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis i Arr Ġ= Ġis i Arr . add ( to Data Item ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstructure Map . put ( Unicode String ( ns ), Ġis i Arr ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠC bor Encoder ( output Stream ). encode ( builder . build ()) ĊĠĠĠĠĠĠĠ Ġreturn ĠoutputStream . toByteArray () ĊĠĠĠ Ġ} Ċ }