package Ġe hn . tech iop . h cert . kotlin . trust Ċ Ċ import ĠBuffer Ċ import Ġe hn . tech iop . h cert . kotlin . chain . Certificate Repository Ċ import Ġe hn . tech iop . h cert . kotlin . chain . Crypto Service Ċ import Ġe hn . tech iop . h cert . kotlin . chain . Verification Result Ċ import Ġe hn . tech iop . h cert . kotlin . chain . catch Ċ import Ġe hn . tech iop . h cert . kotlin . chain . js Try Ċ import Ġe hn . tech iop . h cert . kotlin . chain . toByteArray Ċ import Ġe hn . tech iop . h cert . kotlin . chain . to Uint 8 Array Ċ import Ġe hn . tech iop . h cert . kotlin . crypto . Co se Ċ import Ġorg . kh ronos . webgl . Uint 8 Array Ċ Ċ actual Ġclass ĠC ose Adapter Ġactual Ġconstructor ( private Ġval Ġinput : ĠByteArray ) Ġ{ ĊĊĠĠĠ Ġval Ġcb or Json Ġ= ĠC bor . Decoder . decode All Sync ( Buffer ( augment ed Input ( input ). to Uint 8 Array ())) ĊĠĠĠ Ġval Ġco se Ġ= Ġcb or Json [ 0 ] Ġas ĠC bor . Tagged ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġval Ġco se Value Ġ= Ġco se . value Ġas ĠArray < Buffer > ĊĠĠĠ Ġval Ġprotected Header Ġ= Ġco se Value [ 0 ] ĊĠĠĠ Ġval Ġprotected Header Cb or Ġ= ĠC bor . Decoder . decode All Sync ( protected Header )[ 0 ]. as Dynamic () ĊĠĠĠ Ġval Ġun protected Header Ġ= Ġco se Value [ 1 ]. as Dynamic () ĊĠĠĠ Ġval Ġcontent Ġ= Ġco se Value [ 2 ] ĊĠĠĠ Ġval Ġsignature Ġ= Ġco se Value [ 3 ] ĊĊĠĠĠ Ġactual Ġfun Ġget Protected Attribute ByteArray ( key : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġ( protected Header Cb or ?. get ( key ) Ġas ĠUint 8 Array ?) ?. toByteArray () ĊĊĠĠĠ Ġactual Ġfun Ġget Un protected Attribute ByteArray ( key : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġ( un protected Header ?. get ( key ) Ġas ĠUint 8 Array ?) ?. toByteArray () ĊĊĠĠĠ Ġactual Ġfun Ġget Protected Attribute Int ( key : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġprotected Header Cb or ?. get ( key ) Ġas ĠInt ? ĊĊĠĠĠ Ġactual Ġfun Ġvalidate ( kid : ĠByteArray , Ġrepository : ĠCertificate Repository ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository . load Trusted Certificates ( kid , ĠVerification Result ()). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjs Try Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC ose . verify Sync ( input , Ġit . publicKey ) Ġ!== Ġundefined ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. catch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result ) Ġreturn Ġtrue Ġ// Ġelse Ġtry Ġnext ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġfun Ġvalidate ( ĊĠĠĠĠĠĠĠ Ġkid : ĠByteArray , ĊĠĠĠĠĠĠĠ Ġrepository : ĠCertificate Repository , ĊĠĠĠĠĠĠĠ Ġverification Result : ĠVerification Result ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository . load Trusted Certificates ( kid , Ġverification Result ). forEach Ġ{ Ġtrusted Cert Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverification Result . set Certificate Data ( trusted Cert ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjs Try Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC ose . verify Sync ( augment ed Input ( input ), Ġtrusted Cert . publicKey ) Ġ!== Ġundefined ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. catch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result ) Ġreturn Ġtrue Ġ// Ġelse Ġtry Ġnext ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġfun Ġvalidate ( ĊĠĠĠĠĠĠĠ Ġkid : ĠByteArray , ĊĠĠĠĠĠĠĠ Ġcrypto Service : ĠCrypto Service , ĊĠĠĠĠĠĠĠ Ġverification Result : ĠVerification Result ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġverification Result . set Certificate Data ( crypto Service . get Certificate ()) ĊĠĠĠĠĠĠĠ Ġval Ġpub Key Ġ= Ġcrypto Service . getC bor Verification Key ( kid , Ġverification Result ) ĊĠĠĠĠĠĠĠ Ġreturn Ġjs Try Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC ose . verify Sync ( augment ed Input ( input ), Ġpub Key ) Ġ!== Ġundefined ĊĠĠĠĠĠĠĠ Ġ}. catch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġfun ĠgetContent () Ġ= Ġcontent . toByteArray () ĊĊĠĠĠ Ġactual Ġfun ĠgetContent Map () Ġ= ĠC wt Helper . from Cb or ( content . toByteArray ()) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInput Ġmay Ġbe Ġmissing ĠCO SE ĠTag Ġ 0 xD 2 Ġ= Ġ 1 8 Ġ= Ġco se - sign 1 . ĊĠĠĠĠ Ġ* ĠBut Ġwe Ġneed Ġthis , Ġto Ġcast Ġthe Ġparsed Ġobject Ġto Ġ[ Cb or . Tagged ]. ĊĠĠĠĠ Ġ* ĠSo Ġwe 'll Ġadd Ġthe ĠTag Ġto Ġthe Ġinput . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIt Ġmay Ġalso Ġbe Ġtagged Ġas Ġa ĠC WT Ġ( 0 xD 8 , Ġ 0 x 3 D ) Ġand Ġa ĠSign 1 Ġ( 0 xD 2 ). ĊĠĠĠĠ Ġ* ĠBut Ġthe Ġlibrary Ġexpects Ġonly Ġone Ġtag . ĊĠĠĠĠ Ġ* ĠSo Ġwe 'll Ġstrip Ġthe ĠC WT Ġtag Ġfrom Ġthe Ġinput . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġaugment ed Input ( input : ĠByteArray ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( input . size Ġ>= Ġ 1 Ġ&& ĠisArray ( input [ 0 ])) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbyte ArrayOf ( 0 xD 2 . to Byte ()) Ġ+ Ġinput ĊĠĠĠĠĠĠĠ Ġif Ġ( input . size Ġ>= Ġ 3 Ġ&& Ġis C wt ( input [ 0 ], Ġinput [ 1 ]) Ġ&& Ġis Sign 1 ( input [ 2 ])) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinput . drop ( 2 ). toByteArray () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġinput ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Sign 1 ( byte : ĠByte ) Ġ= Ġbyte Ġ== Ġ 0 xD 2 . to Byte () ĊĊĠĠĠ Ġprivate Ġfun Ġis C wt ( first Byte : ĠByte , Ġsecond Byte : ĠByte ) Ġ= Ġfirst Byte Ġ== Ġ 0 xD 8 . to Byte () Ġ&& Ġsecond Byte Ġ== Ġ 0 x 3 D . to Byte () ĊĊĠĠĠ Ġprivate Ġfun ĠisArray ( byte : ĠByte ) Ġ= Ġbyte Ġ== Ġ 0 x 8 4 . to Byte () Ċ Ċ } Ċ