package Ġcom . t ange m . t ange m _ demo . ui Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Dialog Ċ import Ġcom . t ange m . T ange m Sdk Ċ import Ġcom . t ange m . commands . Pin Type Ċ import Ġcom . t ange m . commands . Set Pin Command Ċ import Ġcom . t ange m . commands . Write Issuer Extra Data Command Ċ import Ġcom . t ange m . commands . common . card . Card Ċ import Ġcom . t ange m . commands . file . File Data Ċ import Ġcom . t ange m . commands . file . File Data Signature Ċ import Ġcom . t ange m . commands . file . File Settings Change Ċ import Ġcom . t ange m . commands . wallet . Create Wallet Response Ċ import Ġcom . t ange m . commands . wallet . Purge Wallet Response Ċ import Ġcom . t ange m . commands . wallet . Wallet Config Ċ import Ġcom . t ange m . commands . wallet . Wallet Index Ċ import Ġcom . t ange m . common . Completion Result Ċ import Ġcom . t ange m . common . extensions . calculate Sha 2 5 6 Ċ import Ġcom . t ange m . common . extensions . guard Ċ import Ġcom . t ange m . common . extensions . hex ToBytes Ċ import Ġcom . t ange m . common . extensions . toByteArray Ċ import Ġcom . t ange m . common . files . File Hash Helper Ċ import Ġcom . t ange m . crypto . Crypto Utils Ċ import Ġcom . t ange m . crypto . sign Ċ import Ġcom . t ange m . t ange m _ demo . R Ċ import Ġcom . t ange m . t ange m _ demo . Utils Ċ import Ġcom . t ange m . t ange m _ demo . post Ui Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠAnt on ĠZ hil enk ov Ġon Ġ 2 3 / 1 2 / 2 0 2 0 . Ċ Ġ*/ Ċ abstract Ġclass ĠBase Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprotected Ġlateinit Ġvar Ġsdk : ĠT ange m Sdk ĊĊĠĠĠ Ġprotected Ġvar Ġcard : ĠCard ? Ġ= Ġnull ĊĊĠĠĠ Ġprotected Ġvar Ġint Wallet Index Ġ= Ġ- 1 ĊĊĠĠĠ Ġprotected Ġvar Ġselected Wallet PubKey : ĠByteArray ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( int Wallet Index Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" Scan Ġthe Ġcard Ġbefore Ġtrying Ġto Ġuse Ġthe Ġmethod ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcard ?. wallet ( Wallet Index . Index ( int Wallet Index )) ?. publicKey . guard Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" PublicKey Ġwith Ġthe Ġselected Ġindex : Ġ$ int Wallet Index Ġnot Ġfound ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġvar Ġb sh Dlg : ĠBottom Sheet Dialog ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġsdk Ġ= Ġinit Sdk () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( get Layout Id (), Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġscan Card ( update Only Card : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsdk . scan Card Ġ{ Ġif Ġ( update Only Card ) Ġset Card ( it ) Ġelse Ġhandle Result ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġsign ( hashes : ĠArray < ByteArray >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠpublicKey Ġ= Ġselected Wallet PubKey Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġsdk . sign ( hashes , ĠpublicKey , Ġcard ?. card Id ) Ġ{ Ġhandle Result ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġcreate Wallet ( wallet Config : ĠWallet Config ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsdk . create Wallet ( wallet Config , Ġcard ?. card Id ) Ġ{ Ġhandle Result ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġpurge Wallet () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠpublicKey Ġ= Ġselected Wallet PubKey Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġsdk . purge Wallet ( Wallet Index . PublicKey ( publicKey ), Ġcard ?. card Id ) Ġ{ Ġhandle Result ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġread Issuer Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġsdk . read Issuer Data ( card ?. card Id ) Ġ{ Ġhandle Result ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġwrite Issuer Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcard Id Ġ= Ġcard ?. card Id ĊĠĠĠĠĠĠĠ Ġif Ġ( card Id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" Card Id Ġrequired . ĠScan Ġyour Ġcard Ġbefore Ġproceed ing ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġissuer Data Ġ= ĠUtils . random String ( Utils . random Int ( 1 5 , Ġ 3 0 )). toByteArray () ĊĠĠĠĠĠĠĠ Ġval Ġcounter Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġissuer PrivateKey Ġ= ĠUtils . issuer (). data KeyPair . privateKey ĊĠĠĠĠĠĠĠ Ġval Ġsigned Issuer Data Ġ= Ġ( card Id . hex ToBytes () Ġ+ Ġissuer Data Ġ+ Ġcounter . toByteArray ( 4 )). sign ( issuer PrivateKey ) ĊĊĠĠĠĠĠĠĠ Ġsdk . write Issuer Data ( card Id , Ġissuer Data , Ġsigned Issuer Data , Ġcounter ) Ġ{ Ġhandle Result ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Deprecated (" Deprecated Ġin Ġthe ĠT ange m Sdk ") ĊĠĠĠ Ġprotected Ġfun Ġread Issuer Extra Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġsdk . read Issuer Extra Data ( card ?. card Id ) Ġ{ Ġhandle Result ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Deprecated (" Deprecated Ġin Ġthe ĠT ange m Sdk ") ĊĠĠĠ Ġprotected Ġfun Ġwrite Issuer Extra Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcard Id Ġ= Ġcard ?. card Id ĊĠĠĠĠĠĠĠ Ġif Ġ( card Id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" Card Id Ġrequired . ĠScan Ġyour Ġcard Ġbefore Ġproceed ing ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcounter Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġissuer Data Ġ= ĠCrypto Utils . generate Random Bytes ( Write Issuer Extra Data Command . SINGLE _ WRITE _ SIZE Ġ* Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġsignatures Ġ= ĠFile Hash Helper . prepare Hashes ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcard Id , Ġissuer Data , Ġcounter , ĠUtils . issuer (). data KeyPair . privateKey ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġsdk . write Issuer Extra Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcard Id , Ġissuer Data , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsignatures . starting Signature !! , Ġsignatures . final izing Signature !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounter ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġhandle Result ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġverify () Ġ{ ĊĠĠĠĠĠĠĠ Ġsdk . verify ( false ) Ġ{ Ġhandle Result ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġread UserData () Ġ{ ĊĠĠĠĠĠĠĠ Ġsdk . read UserData ( card ?. card Id ) Ġ{ Ġhandle Result ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġwrite UserData () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserData Ġ= Ġ" Some Ġof Ġuser Ġdata Ġ${ Utils . random String ( 2 0 )} ". toByteArray () ĊĠĠĠĠĠĠĠ Ġval Ġcounter Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġsdk . write UserData ( card ?. card Id , ĠuserData , Ġcounter ) Ġ{ Ġhandle Result ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġwrite User Protected Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Protected Data Ġ= Ġ" Some Ġof Ġuser Ġprotected Ġdata Ġ${ Utils . random String ( 2 0 )} ". toByteArray () ĊĠĠĠĠĠĠĠ Ġval Ġcounter Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġsdk . write User Protected Data ( card ?. card Id , Ġuser Protected Data , Ġcounter ) Ġ{ Ġhandle Result ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġset Pin 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġsdk . start Session With Runnable ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSet Pin Command ( Pin Type . Pin 1 , Ġnull , Ġsdk . config . default Pin 2 . calculate Sha 2 5 6 ()), Ġcard ?. card Id ) Ġ{ Ġhandle Result ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġset Pin 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġsdk . start Session With Runnable ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSet Pin Command ( Pin Type . Pin 2 , Ġsdk . config . default Pin 1 . calculate Sha 2 5 6 (), Ġnull ), Ġcard ?. card Id ) Ġ{ Ġhandle Result ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġread Files ( read Private Files : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsdk . read Files ( read Private Files ) Ġ{ Ġhandle Result ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġwrite Files Signed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcard Id Ġ= Ġcard ?. card Id ĊĠĠĠĠĠĠĠ Ġif Ġ( card Id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" Card Id Ġrequired . ĠScan Ġyour Ġcard Ġbefore Ġproceed ing ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġprepare Signed Data ( card Id ) ĊĠĠĠĠĠĠĠ Ġsdk . write Files ( listOf ( file )) Ġ{ Ġhandle Result ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġwrite Files With Pass Code () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġissuer Data Ġ= ĠCrypto Utils . generate Random Bytes ( Write Issuer Extra Data Command . SINGLE _ WRITE _ SIZE Ġ* Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġfiles Ġ= ĠlistOf ( File Data . Data Protected By Pass code ( issuer Data ), ĠFile Data . Data Protected By Pass code ( issuer Data )) ĊĠĠĠĠĠĠĠ Ġsdk . write Files ( files ) Ġ{ Ġhandle Result ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġdelete Files ( indices : ĠList < Int >? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsdk . delete Files ( indices ) Ġ{ Ġhandle Result ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġchange Files Settings ( change : ĠFile Settings Change ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsdk . change Files Settings ( listOf ( change )) Ġ{ Ġhandle Result ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Result ( result : ĠCompletion Result <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Card ( result ) ĊĠĠĠĠĠĠĠ Ġpost Ui Ġ{ Ġhandle Command Result ( result ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Card ( completion Result : ĠCompletion Result <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( completion Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCompletion Result . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( completion Result . data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCard Ġ-> Ġcard Ġ= Ġcompletion Result . data Ġas ĠCard ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCreate Wallet Response , Ġis ĠPur ge Wallet Response Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscan Card ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCompletion Result . Failure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġshow Dialog ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdlg Ġ= Ġb sh Dlg Ġ?: ĠBottom Sheet Dialog ( require Activity ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( dlg . is Showing ) Ġdlg . hide () ĊĊĠĠĠĠĠĠĠ Ġdlg . set ContentView ( R . layout . bottom _ sheet _ response _ layout ) ĊĠĠĠĠĠĠĠ Ġval Ġtv Ġ= Ġdlg . findViewById < TextView >( R . id . tv Response ) Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġtv . text Ġ= Ġmessage ĊĠĠĠĠĠĠĠ Ġdlg . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġshow Toast ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity ?. let Ġ{ ĠToast . makeText ( it , Ġmessage , ĠToast . LENGTH _ LONG ). show () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġprepare Hashes To Sign (): ĠArray < ByteArray > Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠlistOf Data Ġ= ĠMutable List ( 1 0 ) Ġ{ ĠUtils . random String ( 2 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠlistOf Hashes Ġ= ĠlistOf Data . map Ġ{ Ġit . toByteArray () Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf Hashes . to Typed Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġprepare Signed Data ( card Id : ĠString ): ĠFile Data . Data Protected By Signature Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcounter Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġissuer Data Ġ= ĠCrypto Utils . generate Random Bytes ( Write Issuer Extra Data Command . SINGLE _ WRITE _ SIZE Ġ* Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġsignatures Ġ= ĠFile Hash Helper . prepare Hashes ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcard Id , Ġissuer Data , Ġcounter , ĠUtils . issuer (). data KeyPair . privateKey ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn ĠFile Data . Data Protected By Signature ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġissuer Data , Ġcounter , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Data Signature ( signatures . starting Signature !! , Ġsignatures . final izing Signature !! ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUtils . issuer (). data KeyPair . publicKey ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġget Layout Id (): ĠInt ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġinit Sdk (): ĠT ange m Sdk ĊĠĠĠ Ġabstract Ġfun Ġhandle Command Result ( result : ĠCompletion Result <* >) Ċ }