package Ġcom . t ange m . crypto Ċ Ċ import Ġcom . squareup . mos hi . Json Class Ċ import Ġcom . t ange m . common . tl v . T lv Encoder Ċ import Ġcom . t ange m . common . tl v . T lv Tag Ċ import Ġjava . io . ByteArray OutputStream Ċ Ċ interface ĠIss uer Data Verifier Ġ{ ĊĠĠĠ Ġfun Ġverify ( issuer PublicKey : ĠByteArray , Ġsignature : ĠByteArray , Ġissuer DataTo Verify : ĠIss uer DataTo Verify ): ĠBoolean Ċ } Ċ Ċ @ Json Class ( generate Adapter Ġ= Ġtrue ) Ċ class ĠIss uer DataTo Verify ( ĊĠĠĠ Ġval Ġcard Id : ĠString , ĊĠĠĠ Ġval Ġissuer Data : ĠByteArray ?, ĊĠĠĠ Ġval Ġissuer Data Counter : ĠInt ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġissuer Extra DataSize : ĠInt ? Ġ= Ġnull Ċ ) Ċ Ċ class ĠDefault Issuer Data Verifier Ġ: ĠIss uer Data Verifier Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġverify ( ĊĠĠĠĠĠĠĠ Ġissuer PublicKey : ĠByteArray , ĊĠĠĠĠĠĠĠ Ġsignature : ĠByteArray , ĊĠĠĠĠĠĠĠ Ġissuer DataTo Verify : ĠIss uer DataTo Verify ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġt lv Encoder Ġ= ĠT lv Encoder () ĊĠĠĠĠĠĠĠ Ġval Ġdata To Verify Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġdata To Verify . write ( tl v Encoder . encode Value ( T lv Tag . Card Id , Ġissuer DataTo Verify . card Id )) ĊĠĠĠĠĠĠĠ Ġissuer DataTo Verify . issuer Data ?. let Ġ{ Ġdata To Verify . write ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġissuer DataTo Verify . issuer Data Counter ?. let Ġ{ Ġcounter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata To Verify . write ( tl v Encoder . encode Value ( T lv Tag . Issuer Data Counter , Ġcounter )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġissuer DataTo Verify . issuer Extra DataSize ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata To Verify . write ( tl v Encoder . encode Value ( T lv Tag . Size , Ġit )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠCrypto Utils . verify ( issuer PublicKey , Ġdata To Verify . toByteArray (), Ġsignature ) ĊĠĠĠ Ġ} Ċ }