From e0551f04db8e37427b62bf8e7eb45b5e618cd7f5 Mon Sep 17 00:00:00 2001 From: developer33 Date: Thu, 11 Apr 2019 14:42:28 +0200 Subject: [PATCH] Invalid if/else message corrected, ReaderOpenEx in uFCoder.cs changed --- .vs/mifare_plus_c_sharp/v15/.suo | Bin 81408 -> 78336 bytes .../v15/Server/sqlite3/storage.ide | Bin 999424 -> 1011712 bytes .../v15/Server/sqlite3/storage.ide-shm | Bin 32768 -> 32768 bytes .../v15/Server/sqlite3/storage.ide-wal | Bin 4198312 -> 4198312 bytes mifare_plus_c_sharp/Form1.cs | 5061 +++++++++-------- .../bin/Debug/mifare_plus_c_sharp.exe | Bin 194560 -> 195072 bytes .../bin/Debug/mifare_plus_c_sharp.pdb | Bin 138752 -> 138752 bytes .../bin/Release/mifare_plus_c_sharp.exe | Bin 186880 -> 187392 bytes .../bin/Release/mifare_plus_c_sharp.pdb | Bin 126464 -> 126464 bytes .../obj/Debug/mifare_plus_c_sharp.exe | Bin 194560 -> 195072 bytes .../obj/Debug/mifare_plus_c_sharp.pdb | Bin 138752 -> 138752 bytes .../obj/Release/mifare_plus_c_sharp.exe | Bin 186880 -> 187392 bytes .../obj/Release/mifare_plus_c_sharp.pdb | Bin 126464 -> 126464 bytes mifare_plus_c_sharp/uFCoder.cs | 4178 +++++++------- 14 files changed, 4626 insertions(+), 4613 deletions(-) diff --git a/.vs/mifare_plus_c_sharp/v15/.suo b/.vs/mifare_plus_c_sharp/v15/.suo index 9d1b82bebad521ee4739020bc3e2d3b3c8a53c9a..a60b998e87452a2054af798dbd2a7dd529a9c712 100644 GIT binary patch delta 2787 zcmchZe@s(X6vy9r{b7r*$Zrb8wjx5sLZMKV3F9G?ENUV(p#0$!R5WwwTw5L6bXLcH z85U_zMx8FGkIg^KqTn;K%|&Zq3)4l-qRD=^#i?`dM~qI0ib{8Gp_^vYnQiVSpWO5A zJ@3AIzxSSVpZAv1dtTX+haC&G`WTMWavY~121B6`RU8mGolXO<6@$I!7F|9GDY%M1 zrVBffPq^TEV+MK@vviP8?rMTHvsTqydYFkf6sC3KhMQTJitH?6Jds3X96m9e!ZTVnv|F41&$qM%<>hbgE;C z$#^*3peiA&1$SuT$303`DIpSN#8jf3m`1R%DyXjZIj3mYT2l#}H#Ti_Eg7u0j_Sx) z7n5C2tnfLuUD_?fs$V24hxWDfFYIzjQUzfj0a>Aa-p{h5ym^v&>= zvYLgZ?8$5fDUbIj^}!LjKWQZRr*~s_YKebFxel0DBwESaf{im~3heZ-4p!I@{&Xd9 zcq4wgF1%+ff+JnBC!q=WHl;l9#4*sYSd8?jS+HN$;Xr<_;+i%^o?t%(expZymYS7- zPSbR`$5;&hgz|fhDk*Vb{HHp|q&FgGE4-qOL&*ee_-P3Bt@AQ)KBg9%MJrO<{gMJZ^QJp;`-c2!|vfwc&4IxD1F zrQ}jd7G7Gd#>yodWua*`;IA%Ypv?ehr82;>+4B|k93R+|2&S0jb#70+tE#tKs67Ar znr-7S+M3rDOaKw~7JC2;@~RRA4=wmy>8rv^Gz}&dD<}wh*hEpFN~G3+&uM_%PG>v# zqth_WSo0^zs?uT??DBV(JafB2@lE%Z(gRCPoX;7Lmvhar#*$w)l@ES$$QEBOd>>bR zG2G$x6r*I##of8faM!bOn8!zGc0=&d11n(;%Q!Qz=(|SjA)Q+|5}0K@Yn89dgGjm4JMYD2o?@s-gEzOdW;x zkN3&@dS_A>nq~9*O-gL;X~w*xCx(4jMhh(E!!S6jRMV zY>nPTD`Q!!nRtU>R~S3=8>wdDrrk`&Tf`Rn3ovx9^uqoOc!ZB}(X^IvEtF{3AB%zu zJQW330}eIx2et}uJ(_d|rZp>1is9a_JPl;>v7M1-&Kx{Iwzg|&6qxwfOQiEqu>`M? zozfK$pp*~z62QhTVlJ1oU>m}In@*#1wJjiyf+M)lJu#ByWN(ERTI0Z?&_vaDO^Aax z`Qb!1s}9X#IZI*c0*AwzKZ$bKyYRQkNyVh_`J4qRCfM6pGSL8ADW8mq$ks-4*+y(9 qb`TQLPP{XuRt@Yl1HV6s0vf$J-hKb0ax0*f@(9bwU2Vy*5Pk#3C8}@$ delta 3376 zcmeHJdu*H475~olBX;sR51gcK5+}A}hmg97^B_vn(l`&L5d&(6QW&b*rjQO86~Rd> zUK?&&D6mkl&)Pd>**dwbe@xRz@|AcJTS=S#5tT=$38W3Ck!@XgY$~q=m8xLQN$l2a zMe2so_6Jw_<(_-)`R+aboqNx@;nVu?dHvHqr%;kDS5fFs(GfmNBoeG;xqLiWEX=bL z#~(QG-m6f9JH#s%;0dx>Y`Ck!jf1*%7NwT7#^elZ4L8%E8$Z#NJzSdh0e@wsaSmZw znx1zx(72eO60(wWKcT*i;2?|;G6|oOt&Ms+!A-b=;3Sj~c%4*RPGgcIH+u{lNDM`S zWqHjcv=CMiRuei&sjej<^%0g7*gQ9oVjUqs2oib-HxkwpHWS#`7YUX-wk8Lx*p?>q z_&YSl(E_*WUJ}?ZoGB>D|K7h??PII6Flg?-;>3T?a>kWy%rdjX>}C^~-F!ldkqnaA ztrWY=9*?E~%IPduWm=H&f5Fb4V%)SK(ju)=0nU|A*YXevVl_l7 z1}~+K<%^74PVwne!I8VYcVMtDw0>q<4V-@bp@SazpcOn>TRU1d-Zan`8rT?!t%ay- z`tsr?p&aaaw_-+9!*I$%|yP6H}2S=1L|eS~_h3)}*q{;vVy*>zFG# zReHRy>^haR3G>R04UBy0C{*WajN))Dz+&X(n?=xjIYGb5P+#w@ua(ai!_WT%ihD}F zDsP8|PU-0+OcZv4%D0r0W$Gv4RHGhj$-87ix=RzT88C6lN|~r>_fLs6=(Qm&tZLzK z7-CKO*cziYG+hK*(e61T1}0Ta9iG==VB0fT`I{o`=r7v=fB)PQq}>TP@%&D79L?9B z7~84ShMxSsxM=rEd(OmBA$Zx0*bx!?m6(_mnKT>`IC{b){VKdG_gNtnn-Q_c1a5ul zF#2b5waJs$>SDtJ>s~&h9r@>V1`ORkrj6|jz@?T>uGMCtwH~*^fCh8VX6Kbt=?o|# z#KV8r?;-=;U=50h%NZGE`$}s^OrO5n9$!CA;_uDiNnWy5|-!~6!&DId$4Y&b40S>Q81)OAm2`v{Wt?Xu+2zY7A9P1Ig>lTA$swXNI(w( s$xAAJ9CKY7CGZRFr-Xz2LL2WNgh>;$h|4@5$K!NhJn&7JFNAr^=Tovt1ONa4 diff --git a/.vs/mifare_plus_c_sharp/v15/Server/sqlite3/storage.ide b/.vs/mifare_plus_c_sharp/v15/Server/sqlite3/storage.ide index 3902c6a5c49737e7ba59fb180ae21b047f108219..75e67b3d57119fe65a87ff312ba29121b961f41b 100644 GIT binary patch delta 16308 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 JJfSS(|39!tHs=5U delta 15878 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 diff --git a/.vs/mifare_plus_c_sharp/v15/Server/sqlite3/storage.ide-shm b/.vs/mifare_plus_c_sharp/v15/Server/sqlite3/storage.ide-shm index d1c8f9549fffc28617bbebe630ea0a32e2e5d35d..0f3448c7bf222675f0f382fa2ea7cbcffdd08ec2 100644 GIT binary patch literal 32768 zcmeI5b+A=c6vn@A(cSRqZXVqYkM8d7MzOIF?8E{EJFyYF6YLJK0TmS!P_c3C(LJ;0 zc&>OE=FNTAb!OJgdFSrE*SCIa?Q`e-ao5h+o(XqVP$N)$u>gDZe#_=vWxB3g)?(wz z-Q%+|mrfjv#oab!RqdFO7foQCqL}l-e_D&#Jwk_JP_* zYTMMdt9`5%9luGR?QhN}I_6Wg9co{weWmub+Ba(7s_jzSt+q$)d$k|bepGWjyg#RH zf4-uA!uer*E;biS)Mq$8^ykJq2LGl%syFl($J6jO)d|PN5~?qw~(jP z>Y2vH9M$f$I-Pz!7o&?O8jIuYx%m3_wGw6Md_*-nKYqT~>*u?iyZpK_;lA?YLw||# z7W#Dc66eq7F|31-sb>*t@b8nT7XRJ~StruwYTw1^*YNRg(r3x66U|+ev11sw&kod2 zwC2LKeNLkFmWYAV9?tg+eEhB!93#J{Tx{X^1MwHt@9I3vt*`m;JIv{DzFjRuzf*kv zycVb3jSuT7(OwAO*FJVP*X{K%=BQ?0lZmwWwG!nx)b?+=aWN;_3vLgDtbF`VfA}3A zjU%er<<~Rxx_$n`edN}3KKXHh9H4WyThvdYeRiBD2- zRSd>)xI#OB{G8-W8*T*R3FJm`G(<=A#u!Y;;W!a1aT6ZI8~VHOeJIX~Y{bqS!g*ZA z^LZKX;bVN2A9Ei|NJYt%J~B3&-aOSX1aokv_Lta=Ur?B3SdXoEKi}m~oSRJ=;u)se z)7!K+%uY1nQ{2fa(ozN+om5Lv(t4_6DCXiU?MC%$(sTb`6K>beJ5BjCzhqTuB}1(C z(;)p&bVr!C#n^yHk&D&Xn`3zxPv>>q z#BW(c+RAVv6(s2b?Y-KaBe;kwcqKn$X=x?{Qj$<@bjL!Rjcf4|GT4s&Ig7{h9A3)x ze2^copk&FylvEzz&X(H(D2ry8h*NMEwjejFvk%AdaGt^I`3%3KNI9t~?PP+{%9eZ_ z3@3Gvg+;gyFQYvl;)nc|g(O4jNe>w*i!6@;;=8qDZ64NOUykPyJd-!@S?*#jX)hCv zQ@{zxhtg<*&gh5nn1v&;0vF;IJdC%rM>bi4mD!kC9LdEznHTXY-peQX8b2qcj8vB9 zGEl~46VbXDj>Whhub=}T=0_|nJ;j|1U{{ntL6k#t^v5KeihHyld|uXMKThD0Jc~E- zIqqgIsVyC3lF^HzOWD8cp)Gn~1P;LsdOF2c?Hqn5f3yGIV)9i88EApi@R)Wu&&OJv z$fI~R*YSDoVQ#4-9c8lBeGE5ylnw+6qddA`GLFV7Jg(=*l;QwR;?caAMWnuTk||dE z>5yiNA(lV|w8ZInLeG1d%vF4Yd8D&UwTh2rWe?MhKt;5|8F*4pj+(;Ne3N;li%hfX zPq#E%Jh22Sp*03zHjcq+J^w5}YjY|u;eC98Z}EHPle*GXM#yyA54Z@A=m~=3jYMo6 z<;;hd=y`tySclVi3~%Dw%rD(!hGjTsCeu_WN#IgFopmo}TD>R9&4#A~fy!uufmn() zxED|Bd5Z5ycLApwE4dctub)@2LM;IX`gTlgbqTg@k+WslQ~ Yz-4-FYH7CQOdiKu`40DTP8!typTRgF3IG5A literal 32768 zcmeI5b#Plp5XQeR%nS}QGcz+YGcz+YGo!=I%*@P;PMT8EHf^w+?zPcW(b%5IBU^sT z-ppr9Pp8}6-|oHlm-f7#W`Y^TL2SM^tTH!Bza`Gi)j zQ!SnD<>Y*`wi(xD-4Ax-zpMZMm5&ixv_*7WbV_tybW3zsbWe0&^g#4b^hoqrMQ=o|u;IA=_pNt4KnW-T zC7=Y9fD%vwNNt4KnW-T zC7=Y9fD%vwNpERuR)R9|*T710($utR>c8iEO!la<(-L%EcP z&5unjJBawmgBs|B(U^^8*e^XNZc9Ih@J!AEtjSIs!#P~e9lT-bI4zr?VB&Zsw8K#B z#C7Sx5t0d+ie(Cy*771EEqr zKdz9{1t%YBp$q0>1ujZ2n^%a)lq|&B?81566(H|IAOZ5CCOTsb=3qGv-~#SQ->e8s z!Gf&C&K%3RT)~}AtR4X=K0mB4dS+-OMgi18H;lt79Fo3%ZxETOS%h`jjpMn>3F?6h zGA^>ADmr2WW?&C)NO!d`Ov1dZ#`YXZpFsEX1W)rEFY*da|HR-tA|fRUp&oi*0v2Em zj^K*)%zB5YOv_@d&mNq}y}>+&py7KnP$(SZDPG_;m#)3trK<%EUH4dtgj6Vu`k2JE z+^5w1Ny075(D6ccRKrNj#9rK#UaMi5l=)bl9XN_lEE9!4sc_jxk&zlj&;XOUU%B{8 z^|odB#6u2L$0*FgKIy^y65*JP`B{Su0|>-M zCX_)7^v7gumXrFP;V;Bt7M5i*_UBA)((3=1;$|M=1KlIeVAZ*nAW$ByF$mktIiifm?5x0+9L(8V%!gX a&<2CCT~5#?<1+^ePMC8J zs3bGyh}m0xlEW_h?z4OM-QDlI=lp1Q=KgQuTUe@^jGSu!*l>{2QyzwB=+!W?7^lF1DXks z>|jikm}{l^4)4{)UY$$hW*sV#zXW^Nmp9t7*(MRkL@P)O~(>i=!KF zp1fn=A41P9L9DJ>CEw3oSm;*1Y0FaNRhQ1F4pGe8h@>{UCFm9@Dk!K+XgyXz!AL^; zsVFFzN$5hXH+>16Pq3LJbYE*4RKgWcn0UWULH6=oG zz~+FWN8Ta4mF8;;ike8g^Dtk=5_&)8%Thw8V&0|nFqAi!@Sh;xRzh#U{7UI>$TN`e zKVcp%By>ll4QbA3!+tl-g^Vme8b_fVe4Sxiitz#1O?l$UT4ww_eRi$_=TWL^nF%M|xBc@bC_ zST&+_Do_?hM6@xFeu(Kv`DHx12TvxRN7rG5Qu&`ex|m1r6w`U4#G3Llu?|B@1FzuG z={!1#M+>nfr1A@SbUBYc#G^Z7t4QS?*}UI3!I&fb6J=-tPiPX4_Q9r;25!uw+wl_c z;n7wYpH$wFS94iX+8G6^cnSFPGI58;e+I=T6-^wj@X|cXqqTYTha#`HCV4_$%Ds8? z4{RrCDW~!Hbv*uC9{n6?{8iI`(zi)~o<511YbzS?q;Wmsg_*31Pc=5Fs4C|nAstqB zBP|_!E((jUlSI6uf(HoVdPR7b1`51n4Z9%Esba^R<~5B zn#b>e8R8_F^FvxXjH@9nknlB7UMlkjD_JU2fV5P`2x)0oSwC77fP|NFy~zTAJ7?Y!zvyd-F=k^60rJLmyij&kxMB=$+dcZ?>a{^hGzCN3X-G zrn4{_pp4f9_mP&CpdZRhJ8EAny|ihD3xC`tLsgAxFs$tHiXG}%q*mb*C|t>E;anwN zG*@Y8@=<@T5};c2Cb_3ee9qv$nY|MRg^kF`2pv2)eMH>gL0K7tbNXfsiOs`nxS3Z;-u+s^7Hd;6%}^*Z&FhxUf#i1$KL8NYkTgMh=8C$pg zZs6_#MqHtn_MY4$jdm!^3d~GQ+5APV*XiWNL)4b5e9TBntyq<_cEr{WZv<~nC7ozG zcYR?}#MUk~&8Btl;#U1F@8zc!rG}aF8qG)=uxLY@M+NC86jT|8*4K7?L~4D?V=`ub zxLq?(VdBsw2Tq2jw1|J0Q?Yb!?@;wI3;kyIqIXyM{V?zk@{QBN;NtwYV zr+c)o8__M@z--F5h-RZ3U+!~gaOK9b4_-S^xflQ$E*JO<(@p|vifS{ z2^)6`PSjpC&V0MN{QHLj$EjWyQ%65gc$kxWbydQ#0msS}adpsR)cNN9whZWX!Z+C} zW2VlL`EbMCHv8Sj2Sw8sbp8@<m~J?m z*z?Y<@l%9rnlNiFT3n3L-?ew6a;@W`q*gIclT=QEMdgtl@6?-A1Yb?pJaA@UTWedp z(iHuf56+BPtJu*!aOcM7J|ou^?AZ0K$+Zfn125i`*xJR?UJp6WNo<;20q=a~tcd#oEXV$|ygjg>lGH)^ig z`Xr+}Az-?#+1aM&Y{Ex0zNEM3Rq>c!TYXM_)gIo)QzKa~y3dE`p*J+%46xiYi&p#cj8?iDcb4&7F$DEeB!;g<-mvq{wTk@nw)ADl%_lCV9dDoSjURfA6 z!LoMG_egWq41)mmeZqE^j&8s3#-}>m-aWHJzydPgW`j%qa>4ie9d7w)+TU>S2^(^9 z_M4nl{X)9ur(a#{@g$|?Oo+`eY{7Jb*%^lZ%t&~1-^`P#0-FjmU-FPZ)nFBOazz<* zhp0G`+h)M@w{a$qt>NH7J9l!>30@ww^CeMU(B7Q!B4z>5V!J~VCJMZAR9u*FSh3x~ zm$?Wp583%Luc2^&jR(=rgmD&(3o#lD`G@UXnIF(TSH*=)9sx&oIM_44;0JO^(ipfz z*=y%OaH&IM@_rR;w`3ZVotwcr)5e>O-USy+9lS`&31D_Q_>gs%pxsfsCS=1M*e+mP z$>s;J{V2wx_yH=8+PNv|{KD5ER3Ei7gNwsd^vHfSs2--`N@5M6{VoSr(##&l?s9Nb z+TqTi+_+s1W)PcYqergzgN+sAL*9ge-fm3iVmzdj+4(9Nq%sOtkX~kI11TdgzR!Ij zdxT13az6)F&}+#=&=oqklYrR}La%X)AWP`rNixPVGFN?ZP56bvAxr_Fvy+vA`i zUe$kE_0-Y#{<+(KMs@LMXyb)e2fcUT+x9P27YRJo#eLHi`&&*3&5)=ruJcqE8f#YN z7;MsTLe+(at~dk5Q{QWb%!_;~d~=n#q{`eB=1;Q@P-!Mof*4M^G34DnLplqjKb%G= z&{yaqbo5O}XUNs)9-^asdS3}4k|t#kEVaAy(q7(g|XU$ zIt$Z=E8&bFK{O+#r432Ybly~J$FZ0&M#s0#o zJoQ>qnsogft4?(+os`E%POK?vZ)aN+r*8sT)0lpS4Hc26aiKF6S^9;B6+^quePJm) z!up^3JvUjLD4U*mi>D{P6Z(g{-#+Po+}ZS2r|(6{3*AO^{ok3MV5t8khjU5cg)qXa1rh~`Osl~&7~Vfd2wg5R6FFZKh^5XwYFn2bk;S^ z&CRY}T%22V4(@Kzv2e(`>|zwGe)xn|;gpd!(RNWkh^R% zP7AOo)`>F>K0M__*|X)JO1l|lriD#NnsUHx@0O5|E8uFO?ZI?~t`^!&nD#KoLfc+d z|N4P0gL;>ofCCoV&M^DFnUnlg^&fjxh1}DZysGlI2`?<#8a`CG(#b(O+-=@8C$IaZ z*LQ@v$7RFf=iu3wpSlDU?(Sr!p{pl)k@Qf>Ke&I_wZS-`Jr=&OVSectQT?}Ubkm7G z+dNLC(M_SXp{X?Lu58r4d!^k62#=iAlk&#al|=1|IwKU$DK-d~E0*b+{2Mx{!a%NA zmMfNNpO7n-QLiV`SpBCJ%dasXvQaL0if0#Li<_eK?2Rd|z;CC5JWBY7uv**e1KcgmSdEow_Jyw^?d1`_>3Bn-(f=8=L z5DuneN9w*zzLU?>1VOe^L+ zx)12yqNBy9d?}CmQywib^{0w~$LMPK(1vW2C9#L+96i~Pa=>hVVf@!fQI7QPxBF3Zm)Ao20SlA z<=f4ETh0_oG!#_fQ?H9AR>yxo{6euYljQ>A>$qkf`lllcGc zsrf9~uTvjzGd!-%X~n&-k4OMFe^zC6l>8G_E!(z|wY9$g`m)YWO~3pj+g6j7x{^6n-^?$Ok7o~l{DB`>w)vBovom_^QK6r@>@^+It-6?+P&;th11@= z2_z_B*Wk+TN@0q(60%Eo?-_jCYFn*E=ERgeGatu{xZ+^onpI`y7L{+EWc-M8DzeU; zdiwT&TlbczXZntL?z?`=BEuoG4n>}hUjJ}*>g&r9Re1|L9Iwe}ZgxWWiW~K*k>!zb zrbPykAy&~}&66fC-S}eS%WtQZYa(=KJWejnFf@$(`R>8>xM_`seCqdLbbhLS*rB8q zpl7NbAXf~@6+`kpjDNu%1_h(kn`TYfToN~IdecR_!?mQdtX?N0Lage#SqLv1vQkyh z>{+vxpKmwi7zY0+hX>kXHORF%BAo@+gcLU-*W$>vIR8!Xz~B|4z+(~l{@j`jnct86BBr=+-iv;rZZ0wlfLxh&ZhG= zt>!6Ww(6?QJJ!s|N}`Cl!v|%YYjUitV#!_$I{x5~E^p~toT3#dFoPl*C?JEb=^6xO zG_aaA{silhWkvPjrl^l0cT!=50^4HVo0)EWB)@ zgcdOM^!$rMW}ogk^0+>Vzpbwyysslx=3KpJ+Vpy(;4LWeiLV!|r#zhBah}$owDJfP zs{5@MtgkyfknGc<-R5Pqcv9VGz3$5G3tTdH^as8Fxx0#yK(BtB&ra=huTH3Y(>+Ir z?CQeP#2imtqq-rp$z+KprktmViC0=WY3kjRI~&l%%6E!@L_bQ5j!yb7l;qV1ZY|HF1o z(eLe=j0U%BEXCV3fBfFAx&C*yYo0P$zvX zyd$y>A6qBPGH`oI$gU)jMx~+E_PJ-wPYit@L}FYPR^%s}>U7%D=ms>DpPQ zw767Q*gEE;_f=uqr51aXRd#i40P^wB@80dVS{euT7jt`tFV&pzb<#@U8Ku-yf*i9M z**l|lqN50NQeOx1txbk5lfGjJrv6H-cQKO#gN>vcn*t>MngM*1#J z8N~-}y_zwp?fZ8ZwEhyb)o%J?!_%dHsuYzcy@1tn? z6!h7ZF0X)@^v(Q!a6D;1_p&wr)|kEp%vsDJ{n5V7R})J0EA`ZbC`0+Q z&qy&_|6|_{?KtZ2t{3-bO7tv$wr@*NF#kmFtEY8Y7iBtUOFHvXI)WvOMzDtZ@4s>c z6WNW~)w9idGV{_FnhClZfrnkVv}Ft4NT=kaGVQ# zIL_hT{r)x_rwrjZ2mdeOI1SJ5BygPKhnE_H<1B3ejw7AlQ8JXc;s^UE|$J3*0 zs>9wk7gp_PEH^-uL)Sz#Am7TN&y0L4hpw^yZ?|%K3NaF?^4L6jpHK;%Y)o|>&)}i~YbktV$o{1XQcS!_fraP#sefiQJNokX zY0Fj>m6yipQWZ@yPet>*`)Xo6zIPT+Mf0HcNArtS_lzVen)`ee%@UtGHsRMgETYB0 zAFX03RDi+<_-Ys_pTY~MpL7XJWu%55_xWZ=-1za+PUPI2+>qJPbojXY`Le`I61C00 zacx=uOp?YY9zDTbjvm>WbkKT;mtMQ$0cGPmfi$oLat5$roBbCp_)mx(uoZy=s zHHy8i*uu2{^()kvUyMrW?XYR^wbfp9SNfGiCsR+|W0JR|Wa6=FgM|K?s#1uzkFwt7 zCdqm$L@FR7TJ^GCwWDlt+S|N%A7Q=^q1vWy4QQM6KFv3K*!+2DyYZx`kDo>P=GG>+ z|CWK#yD!gAr}e%OP`?9KV3L1*%I^_(=If^XVXKtTS8~elGYRyn8&9=z&cN`;s4ku2 zB&wAPo@ym;w!`iNKJmdK)r!$6j7RnuDSa8$#k;?X7I=1KW61Ji7~7GZs9jmYh)&|8 zlFByVRmK>AwH>Pg?w#0F(sU=x?!-=3+OvmIaD;=cI8#_@$LeaSSrOIusvrAfrT;hp zv59Oml5!NLC$hn$_5_?wWL*e*7CzCd$~my@j8~2G(5^GvNXg{_qo5DjajY45c44() zO=otHcJjq~xkzu%8WqK5X+mfhHk&lMPBUQvS?yV6!M;|U z1%#9_+VD1sZLbXv@Wdlp9{efW(<0eJPFFTksofJs!5*?(bEZYHUV8AXD;rJ9YGGVF zMjo4t#m#*M+mhK~N-^&k1!pQ~4td>J9W6C~adA;scju#6{_qPGLoK!DGJe4q&`rR2 zkgpH-lUWrlwLq~a4vXD?KxH?!F>A;W&`x0;S$jgjFNJks{aFG%Q&@X86N!Qpc9?dy z5)mECE6TlP(a{=9Xq?LGlNTxwlFE7#Gc_2T$~GYZ>aZb|^&)*VU~3v{3~y6eM>0_p z%+j#3k7_}yG!*)x4WrUfC|s8cMUl~Z@HvfbN$%)FP&ykyJPlz|IvYwR7{TduwiP*P z3_9Ie8zq4$QBa4a-C4_`fj(-G)ScBJ1$ZD;ch(9fcW3p;Wph~6o%JDxmXzs9x(F8Z zV26+-4sv_2v&lOvQ0~d*lWH57+LK-CJj;%V&K(xDiGsozdX*ZIc8Uq!p{ejZ23eCa`dKQ(w&Y^ThVHPkCFej6_k`JP@absZ8!okB`;rrV zpm_|NNzV6&O)+d7d6fy@W3V2NW`TQKwgXu(nD**aGB$@kT^8`OE%sIGVK6R&8%VB? zfHx7`V5P&O83k)`f3_ZoV7W-HDJjdN{nHZiBRO3-5X%OTwDI5-#SI~vlOQvW9ZptF z1?y<8Kj}IHW=3;ar0;C_6^*ejm7gLX! zq+&Vk>eETZ8d#cud0x5!E+()(9=e+uStBdkpw9ZU*V_DzSKI>Q{D0$RDtG}Q^mgu>BdDvg+~FlG(P)*vSEa;-p}DWtRwvl-%E;^l;#$Ow*$$y6RV*QOlRyP7zrwKBDT6DTou&jU zweY@<-n$WVMaVj-;>ZL6qfOkIWbmYye0s5is@FsVON6uylxPzz=Cqiup!5qdt))Y> zlyvbmX9~|QbXlNJyqQr@_#Q8-Vb*4W4RZ#z zZAKAGRk*)d5KO{UL9j*O!1M$Q17clY(VlVP?XUx9%uD|fMfaV5gH-m0>#*=~)9#k7=?e7>9!lLvG@ZwZ z*MU-K?Z&x~o4X*`mrWqAgmB&sCpwY)pxhT{j`I$HRa4fLEIR}-P1!bN?Gd=*&V`W= z#};^U#*pd3X)W+$Ibw7Iyd(@W^64bB_rnRyjnlBy4`)%#ITZFFHW#Rj2O*cJw=snH zvnHhaG8B4pU6jCLq# z8>*m9bDWX-K7jn@Y!{^?h=nkx;Vs~`52psreK-xW)_v<+l+N!O1wgoJab38zc;)zPpL&f!2-o0xosOM&cQ zrG4M=U~zcs%UQuPUoMvIsldQ%U(Ss!XBn(LZa8VD0_nkQck)pkel+FMNvbxa`EiZO zL_L`0$Mq%a4dG}Dwh=Kfg%>Swx>;@tZT-1G^34ni{J8|u-U6!WHC_O}LfFQ{(hA%{ zu~nk2At{tiCpk87FqCah=GcK(bIylcvIqAt){dAsKtXey^KEy6AI-V0q*EhE3gDc{ zG&hK8iLJTc9j*j$Eg4U^-x6oX6TBcMkZVbV-cT6G1rS#sxERPq5XGiY5zaceJ>mDL zuv0sK6>R0`I{a~JcxXasYD}wk3bbFPBWsHT64> zn=Mw&g;-c@i&bUT0V-`dd(t8v+BPC#BrE|68{yPsY)2SrhYNw!PO!?3OC&jo@YRm% zM3lO~ViyufW+lNKdt697NrJ=noGrPK05YjUIn)nI8WVeRzdy`$#069SAkc6lp5#y# z1i4|p9%MtN8mx{f!FUDXL7&y%mWDhz_=3! zQ^@{+>{wG+@_}(9Ii_&-1LHxKo5DBhf7TRSKQfJ&k5If-;6*IVplU0|7G(xUKQf+V zv>CK15xA3$W-tn`%m>(1BJd_w=1@_B^W#`^(Ag&NAvxyo;uF(YX&HV-2=noYv4m!I zj21a;4lB1|@M?3oyiMRslq{g6j%i9fE%4B7j3?OwEIwl)CR#xI&x|+OY617R3+%~F z3)uXbvBQJ5FMVe0NfS$Gy91Mpw}i1f1Qw*9B`nz?5Rg%pu#eu)vV^=ZSeR{=Q1XQd zCgqm!`U~SoK3l?|Qh^<@5J2Ep#*PFCApI-yy9%JX6zA+?1)#kXr}cRI6$^V_0R49g z+{hOJEZ!-=XNH5UZ;UT#$HA|if~I6V2i89sGl<)TS`i@!{dS@76AnVZW7-B*ko_G` z-43yWpS!Ro2U~&HZmh}GR?u%Z2EJ_tt$#30m9(rC6l~!2PsSLQ{9w$OFtGZ?n8T$X zj0rOY+EcoV5X-jOnkME&Zdt=-Ay%D=4NU)u4H#epdV4Vb-Zt>!CsrBQfb}oT{An9J zwOe2Y{eLk6QisC7m_{VX7PR&XdXVn6^UX;+vdMOSKN5>=oyrhjNHbz}=Kmx*B-9Rc z7!ph05orwRKA&VfGR>9$S4O$ zJs`03dd}~-)?d@!PZ_?0F8FIhJ0?W6YL^h*GBhDN7T*M{Dod3C2Vj5!Y0o@|Lk2kh z7^}f+1LDXG1Y<+u%glxtLt>3f+JW?P3TDyE11K@X1@14nVu(+E8+G_@NSZT)z|RN+ z&VUpnTr`)!G$Ya!7pzB&h!sX&WrU(C8lYi}S$EZdP-84gmOpqilCDFd^YFXq7=W1`6{fXBwTX5I-JCd8k)2H_@{)H@htf|2WK!eSE~@jNu4 z%!Ig-1WkBjLIQD}*xr`4T3WE*6vuNXEqG*# z<5s8^7?@$L_S1sqW};%Ho1rcNi)BU{F;}6~3|H87P-BK;w~aO!nq&6cYC}_V9Q*od zLoag@f@+BM=A;D*KQYG`wRFJ9f_M>M9f-2PH$e{_7-)g{o}dE@EwC6Hq0EAKFqh%I z1ukoUfTJZw<*EyvEHQ9LU6^Qzfye5C(31EuTi~@NW~T~F1ei%y4}t|ac-!kiF9B9T zq#n!`V5t6ja8Q7;%+rIH0^-UX1~U#rJ%LaTU+J3qkj0^tpFS+-u;^*}aGKsv(uYsz zkLnY9D=g$~h_}K*5(AiIg&oA*0Crp9iy_$n?pa~B^B~ol*l1vb^-=9dt9PB4;Ui;Q zpbS?Ww5T9#vBrhJg(0L_6Kl<;GNCXD$4|!TYY4hF#D&Ze`#`b{1{4}X9~-Qt@30W( zEX3Ie&f4JHGQkLbA)8Dz0#92k$~GfNvc+1w0W)o}q&Wi&k~6u-$YO`7ebN6HM`~MDe<^HSFEu*`>l zKu%q%{&=7H-4|m>`2jg{gHf50s2pV=M;ZLLem{?Hx68)4xmz9IckVsWmGY#J2>CI` z@?(za<10TPM+0kt*2JGX=2-mwJc?wIJznEyjbGhS>FwOz@g{iii0H&p=?1W}axdM; zg7H2m{ahHx5))ushMK;N>dvz>L^Y9sh`xY z@fo#Yye8j>r@QO&jriXi@%6v)-u$6c*HzCWZL#B23D5T+DiQ>tvu#1bs;b#}$gh^1 zwnaOd>=Agq<{k5FsOEY+pi4#9LWUIVwsZW;Di3)0BP(q8^@01&Nq~n{JmBGs6_?)M$Z^*a0S_(cvn;E=(KCmw z9QlV&5VC4wd?0R%J<~C+^ z>tl{og=@S|g(@ujM=(cn<6ik$`|^)4%D)%!H_*x2tfaqj*{_XCjsNe-Nr1E>Ef;B-BVk4ku+MYro?cG8|E2Tsd@)BhE~X|sAZ z^gGUe&HdWqYDes%ujN~`a+}8nY#zPpeN1HYiZEr1gIj-Mhj}Z<0n2f~avU%Z2W&3F z0oTLvUj8+$hjzc(i4q*|iZz{P9{aSaRyeA8{?Pc?QA38>O_JbvUkObNx$lyXh))_{ zUeqY;5nYkKl-r5O?L_{I?L_LM%7>OK9Z5Pp{){j`!Bh&k*|G6N$)&|Z-Ut`=q~|=z zmVf?%;RA;~eV2xv{39QxULU@B`uvtHW4i7athZ3Uh6pa z{#WI2F^WbX`;Dlt;Z=m9(HFj%%WT#$6MY=zTH7Yup7v5`hx-Cj6wMvU@m*;=tfB3p zXKiPC&&3nbWmv=bJumL$bRN`9f;Ft>V-1%Dc(f~joy|$GhW|$87sSTfYKj4mqt4dp z8=Cm$O1^QJ9p|;tupzrx2^fh!Z}qT%{RKTto@S(H;1PZ9((!)b@HHEBsuT_hx5Xnq z(5wo>$j1E3M|Wz!{xXej=~Rjjbu+66$#SZEH|DO-GP>nbCHl&s@J&Xu=Mqq&efYZ9 zkzeZWmu6i-EDwF=W%0%??L2qPCjX_oCpSZ{dRj(pWlOE{1uhoCsu9Wvf~;qcn-D$o zL(Ab+yD+9_ypJoI(Q?Y-zU5b`dsy{YIkIX?laKz==~i!8vVF(xI~1q6ETAh{Xs?gD@kV78jXAd=W_E7!dOQlV>?zv+ZaP@~T zs@wVN;mcuR$DChNSI6;&uNuklmCgeJj&`=MyP6&oAOQi^@IZhAo`+ms)LUh~2n6VL z3R96i92<{4=%`lEb~3Wg$Q1%|g@9Zkz*7i_4TI@clk9mJ-S-c_PZw^rK-MX_##KI1 zZD68mMyCt14)c!9tlT)wuN$&%%2h#fRnUL4D(D=)<96$7Rl3(VR#5`{|Fi2G>1VJ1 z&Qe5lJV`y9sbhPNy@?*FO6UF$<=d_D?biQ_?bi5u7JFBJ&M)n)a5b1dCUl)hQAWN< zNa>rZ3bL=@JVctRC8&(Dnt}pF{8O4!6K=guI+2cT@P@9FqtQBuqD>KFDWXqfKy9R{ z@ID@$%!{x!kDkM#Rzo5`M#!{cR2XeXyw^cD0OJ-YK;~^Siv%jb&)Xy=FA@3lXb~F! zMa;Q|gf2lEqZRSDVK~gQh#rbpDNRkWr1VrCU5!voY1o0dPLa}gcyZ=oVUh15iqr`y zsZb`59?GM~LUANxmuJPxO9gskl%go?Fdb<*mLgwTju}YPx}@dPN7_h2@4@s^15|8ufA*DZI_3BFa2G}p8P2h&Kv;_N5UiuvD#S%-K=Cn{`jc!JD zDYD5D`7yxb?hNO-$hsrOqklnC`ZPSlij)RV=T-a^Y$;J*QMMYhDoyS(CMSI|_F{cW zX>X*ZGOu|uWk^f2y$Rz&niExO0Iv+WNNb`et?VkWIiTp#MH}Oj=IcA=QCiQJFkjND z(m>i$608LCE~QVQyt#z$hqSGP{)}4?1S`&|XLN|Ey1Z*y;Jf4LwqnGm%p1`9AVaBBLL$SG}^bslD1qD2%H%L$A zWug&}-;5WjH;=aA(dIllg#qrQqH!ZrUM5v|w2+svwlqzsKB;KnAIVETlt%|3jla9} zpA;m!;PZY9jmznCkX6q68jc0kCCh}q*+hHRR91@g%Mw#u;g(w-Qfq$a4_&T@o$Izo z`fbwg6liPGke*+8b4rnohXJIXV*FL&1`p~zI33}+oI#7NKG@eYv9wP@)ObJ)`@cKM7ee1 zztlR>O0;j=ah}PUb$L$`a5Q=(hxE%K{r?Q4-|P|p1vjkS=(DFZC$~Ueog8xX|4YbG zJ$$_I?A*=q`TaN2K7c^a-L#QA>$ zq^!{~y220BxsTr9*L~71|K&H^>VMo}=;@j6g3zJvl8-yk@wcAgra*OGmz?)wn~4#^ zbXb-xiDPphG*)Tgkcabh02DzI(TNK73=;oMy;-DLMDO-eV*vyEG>z zD!SSK^cZcHz#*Yk**oDK!(qbwMDtu7raKRcTK;Wa<*cLoqIpnMAEJ2I;;v_N2^94K zABy_He2PcAMO`c;P}F~oddQ5bhw6bv?N2qHb*SHx0%6*v7W5OmJsLO(Z(wi1u~Q=o zL(dj1c;+|Ob^exlrLGiwI#bn*K9#bH{L76JLVmzyL&8{)K&!x{2 z#u+Oj5VVRPd2M<5`?m@5k&YcXRCHT>YJpAbL zE6+7oZfUYanDszY`b60-c#-jVQjW0%9`cWmIs1tE_#NCoIEYx)8<2{7ws{n@vUnra zS2Ltmfz%4sy_qVaG;YzDT|Grg@`lEve@IDApWk{)@)0Ao7lnU1nokq`vr6(?3p8?H zhCW%_o&D5n^s`$Y9~Hl4%Rd_`|7@uIv!U|OhW<034W+0KIxxwmQx?yaKgDK$q*Jzc z{Ih&T(-WCg$M>g)j~b#xmqYYNrzbQ7ou1r5CpCBZDB;t6OsT00e_A4?<V zE_B^3>vY1<4Z7_YmJSx`o^`}2JzbB>{08_=SXlkMXFFj?tz)=i-WT+egMH*+pWgr< zx;U4EedJ&t`l_OMtA9V(C-3ioedx<+;rfb?O3gW!60^M`|BT{eo|Vrdy~Nl_!m4?usBG=Y zQ?}N8if!6TG1-r&Y!%+ip1iU!{Ha9Q`iQS=RhoBqWuqroUQ3j%{~9%e$YPz&#br~Y z8@y@3qxpBmHWAmM#pK>oTf; z>lvjh-%7PW3K7>9?(gukQmA{}R?71VUE|v~e&KE5ilURcXrp2G@ z4?d@{|L`sN#k(4(b3SDE_YOZ>8mF71Lw05Gw65(YEuFK*KH#H7>-w0db$wyc*l6}- z4-c``K8;y6IOIBZ-Q<3M27SoskM{Ue=+2rL8rfvjlOM6*&>iaA~2TqqY!nstSWXx4>XNCx%R ztU%LOCULJD^bh00$-@-b9>%#5E)A-}I5W*>G70;1xX_x7B8|I4Y)dYdJnsoBTXGhf zuf!5)d_sD|>^5vLnb#LCwPE`b)&9^thRq~8nXoB_jU!&!@I8ig)T|MQz`9Tz0`6_u z4&+V_>}$oPlA}W*Hj%Y}pKaM_(qjaSi{J(llhN=df*Y(v@)!kc$Zn0`9_xX6Fej30 zN|eXLxOmnQ@*_E2I1tMQkTny*D~cOJVy8f696OvmoDSB}Tz|5B7R-$1vdES~_!W(@ z-kArPt+`~f1!xQwMV^_4@U1oHO+G9Fk2c&?61$Xo%p^9eKsSM%PHfh}(ge)CA`$fs zEN|r|xR}5;YNIUU#1}In>nqwS$~L(X9a8&d=A?$>T|HB@C0!i$_c+~~&b#jL!NEP6zd74QiG7MTZ8S~` zc)=hJ+EJIIU!xbMcQK=Ow4>@sQ-9T2I7ya80G%N?m zR?|-nZPV6E?RW6ybu>b;Cmd?RDf6QK@r6b$_R~#`Yoj(_mgS`Ha4C=-tn}k2ngqgI zU(O1a`Es%BdcweKU(QZznOGEcPy%HJ+mjnk3e_MznC(vdwctlnE}g8_g)~3TR&%Xb zR0ZF~1~AKy>q}~l;b;rC5$R+OFIv=llm!;h)}IR`!In_q&n1v~0;s0f1y=AYgtg^8 z^r<%B7K**-_b@QS7Lr2QbRx8agQ0A5a?Js}nsYu*`c90jNm!_gk{Q1k;+#qE2^_GElVXxoT{ zkx8APun}?4bdX6NO@xtl_#!bBb1+A%JHskFE|Cbkz*jr26N%~yi(N<{xq>(Zdwe;$ zbc4h8oGsB!2Uk~YC)@5=-&p46Js^+XcjyV}^gbg43LNky_B-Z@y)U zIN-3qydNYrChktx`iu7oXu~LLcF0KY*>On5;PCXEbhY2nFax2aF)`;wY@G=+9l0i? zEE_c3h$mr&K#&{pAdWeZ=|+4=S}t^T;)2M6p|IGAi&L6}W{>I+;>?*qJ9pws)W$=Q zGiRyUMqCLvHpWkcVt3M!ESU@koHUsd z#Bz5Q$AaCls%xt11mX)SxmpR`Lat($fX zUlIzn{Jl!EdTN2PweBlc-n0)!spmYq$@)k8W%e$AZXay21BKqn?ZxHx;`o{tDM;n^ z;#5s6w-?8`n5aMeXYIwC{GBbNdT@64_=U!6B41q*8;Dewz}SxLL~Yw0jOZv2EDtVP zz^jZg0Bbu|1Kc~Ysbs`%nB9q;tn_Ukqu>Y!TXCka(vH>DQnMDXdhoFbIZRh=9-6i? z&Z;t)p2#-Qv=?*K6cpS}!`Vb!c}ARvPk422ec|`|RoNguBPTv9Bco?r#^8bJnHiZm z14gJF6OZ^f{b+X)+I42Fbbe16242D`A7sa|X5iU{)rK{l*+JSXF4rqZdVAKWC@xDA zLc6fpWWY^Y3=7C=&nhEV9V)x9StRQov`=DlNmLD8e_B9D8KVtvli2p!<&V(ll-3CT zaO#PbVh=f8*+`|rXN-cqcom8t{Dx;;aq*=5QnZGoU;a)dd)~mdWOkU+><^5BGZi$4 zyl$+HmRd7$WvJo-9iPSWhhL}|YN-Xt_!qy?rKSZSUmxx#vnpC@L1ItrY=8WM%5H39 zHjyQuox)mbg^9gzzSLWhfL{vh!j4iR&@+X#XSX9!kirhr-l;-FXMl*xVOeyv#u6H* zviigWCm*S}n)MaeGDecD0fSRn7tLr{v|}}4Ln`aUli92VThnmC_ZEYaQ`%sbhD*k` zvW8OBg;r@8MLTg6*mQwQ^fKzCX6a(KJJ714;NeI8Q}k;Og>2pqoZ^|BSv%>p>H@Fp z`}&$|=6}!*ES^+a`Cz8g!3-Ug; zw6^#3ADQEZWfl~i{FZt##r4R|@B5E0esyn)hW(gcS*s^I4H-YS^{4?;`hGd2wY)&c{A*ePq;eH;j6>6r{nXKmk!<9^jg%a+QRdyF&zKZ_wO>p@sS-6P6aR~oJH7GwN>;K_>@4R}bxjj#| ze=TXgVKMfMk4`1i9(CHda^2RG0j;Osgy0$59TZ}3N3Wh((tiBmUT4cHXYm)=}D?b-hjPt3O@zHg)PsQ5E$Yn}X4@~>q)%VVn z>q@5ssd|kS6nZ9=2w;7`ie3Qdn zqpUZKkM3=_-8wy}=$i45@oT#V%pEt+twS==stLKb@$>X;bB0&z`lU=tnA4?whp~%&*8BnLyN{kVA69;}wj{~)xTeR~?<(eN8NwucNq4XjzT*XFbFNx`*@(DZrtPJ|69y=B^d_tp5y z_sSs;etlj3Wk_t-vEQRC9X90kxNUoJr7-bQOotOEUIq2~so!kex0ZKTxoRh6U!1C$ za<9}ZetXKW^}jOyP|9xgp(Z|%v9M{jJ*0inn;B8cV^W%GHC_Hfa6LvN<`^{m;g`U&K&-j_LBQ4LY z<<*y~7iT}Zx_hN=UzJsz1=UZLg;%;oq&|1pe6sca3j3$tXD?I_G4G|gezsQPJOlR= zYpx&PdD_z`bW<$bWP<7;E64fVtqBQ>v(g=AhF0}RH0vy|kDc+Oth#db65|be)-DM< zcf@IQQ+)28m#=LS5|=!tSEKb$`n0Ve5iuSHd8(^R9=DpkqVLNQZ~garPtrM}nW$H# zt(q~~r#3`4!qZoIN&nW1?(9qby1!hZ)nc=}gurJl3#PTwxj)dwuUCHToigL1gX=<+ zr~X`5b0fL*;e_v9Eb7|DcV0*iA6@!B`)Ra_x23`~f1{%4Wlh^3)tjfks^1zXmGQ03 zV|yHo40_;_XXFv?w|UT1<hU*f)a|A%-hJQHg&Ff9JV9-d%K8`4$2vVTWL(>) zZC!EP-^0hj{nD-u7uRjMSM(?}X_95Gg~i4_k9E(FRD0}uTVq~cJJ0RyI{hsCbjZzq z($mwkLz}J`Jgt1wvyxTD9S3`tyfW!#RbAu1V&h7`K4&^C8Js%6wCMk^_Z@IeEPLDR zED%cQH9$h|9i&JT5Gev80v14;fQpKM*h^6Cy^kXH3W9(rv0y>$qR6pfK><4=HdO52 zOg6;ii1(gz?zyk${odr~y36eBWOuV==K24h=UHMSA6&D{?8UO_H%+W=bf2>7nC{Eu z<85+t-#Z&xOC+`rs_}|Cc$)(xjfdyxAKBKr^_pR*uEP0mQ-ZwQ*6v?@coX}|`XcAp z)UA7D_i+5VI3sz)SUOjEs8nzN^_&-73W9i5XW$IAKasY?qabC)Du8|MAkDr)uAo$CrT zC()t4G*FfBM$hwW@NyN6L9BvPwlK|!J#d;dFeT2wOIw&Mq6I!jGaybtxvfkSf(7X^ zfJOMgsuMJGA_h*~it6ORe7tTO8Vu385l7)=8DK#?hRdpH_CN|i8(CmS*uZ#MU`0g2 zg|a}O7!NPY0uA_l8&if@hL`n;-LUU-G&@DDv7`eT;vTgeikCmYob60gphCjwbYMg{ zz)RbiMno7)JVmo0MncvOrUkJS>dOIZq73?+rs=@=LM9DfZbRE%#RaStOA;jDCOP!? zd;GUG&=Q9kr)egHClqDWcac%gT;Y`^54|tYq|+)-5vH$57Eb$W{Sf#4~tQ1>yYa((r`}FhPLC080=_hc7jN2Qe9jYXXL>y_i&z$htygT_Ipy z0qWGT+kmA3z6;RAPf_<79pCNYl@*St>~TIzgbwWfo{$5_wBV*vw0V;jyj;q30utJ=)LR42VqEjfwdik5$L7^L-(SuixAln{B!LH7%Pq> zO3U)&|3$_y#}H`X%w+_Get+8grpVSP4A;{BBYBu7Mk}We+5R$-mxq}ukOaO_H#BDZ zxTM+De=)r9B_lXouJRMJPil;i!u4pA0_=nOQ;PhT~gbMdR{E^JIBd^zb)?N0Gjax706 z^?G>!Wjm*F40a>LcM1QSIZcm;j@k0H1Qj)MYKDML1(%NQm(3oi4OK+tO*{n`d{^^3ubd-ufCe@6M@Y4w*QVWamlT0N6I z_ozL(cJ+;IjY#=Iq8ev$@+r?w%EVzjehr}y?i6C+0(bCm+8Yj_VnGkwDa7Tt4F8SS3w97O)epZr zMV&$sP}l`fsHY~>DcoFiX~D47Vdn%pg@aGCdmXuP>m{#KIE)Lzwff6csO&o?HtD)~ zX#W~x-*rkgK7R^?!vhwfPT{=6THRU-y36u!_a-xmLQM>9w9 zfR?PH3Ri)C-7&|9&AG$U(KZhRQ&qYBB7S#rRmC3LlN0tbsD9C7G2*eXZH68@Z}9w= zIJrbzY`+(kTcWdv{%}pg##58uFyXWI^N%<+yBhz$?H95AzrMbIweLLhG4ImuPsxc_ z_B|TC@u-6oLEuwXh7z4y9B+lBENZWBUMV(n+`7usK5;!F9%SFmKRDD!X6hQ(MeEFF zTseBheQ(@>Cwa$Bj)3yO-GKdqOE5*8|sOh9PQbh7JTB>`a3>zE-biu@ucGb ziH%?Sn?6z7zRR07Pk1@4KAOOQXj3! zjb}GF98MS@vEr!Ljh@TRKEAKIo-p=sh~@3KduW5#6@PV?n>bO2ZPugmz$2yUt4r!U zHf8&rj=g?XrM}g5WcNCsvo*TM37s!0)@w|v-t=D>YG?19F*c}q+|ET~yb8;2Ydx6x zVaCkhI?0HKUvxGr%`M2SzPsrT+ui@>_S?hWD4(wKmEPu-+_A3lq|>8Ci+nCMOT?CU zpIditv^w?4NoFqvzADSpa*u?N{>f7={+V&sWi z*b;Kc8rv^Ab_F><^aJ~9 zMy2!-P14|*?-hTQHnxA`<6t=h8e`vVDp{aqj{&EfhbQnfu-D=-+BnTAi;?q@cvbF3L&RW`F=)~bh}LOypZz4u#7 zKhK!Mo~;t&b2WFJACP?W#*8_ft=)*Nm$XlZDDOX5AlYJaG`d&FlW5v$sD1DF-q$kS z?t1-}NUuCMDpb$FuslwA(fxB%w~0sDc2GgIBRo6|@saaR3U*Bg?@=Jc*Ko1-iD{7l+Zi&IA))eyP6hwPX- zaq^4%RucWMs=3j7pC-g|-RB!H&O2Yw_nT-{t8}2Pcxvh%$1@-0Cj{Hc#wrC3YY!TC zO}2ET&Vex(_HO`pS^~d0eHl^nWSXM?rtI{h*xM%AJryUM95jhsSD;w(c!=|@3r7z6 zwgL84N$0vXzPUOr2R;XANu{W`%N*kLsjVuz_|mb-&&VddpZjXCN`IF{&Iab^hJH6( z=tkF!9eu}~Uh*<~bDDQjPU3HQwvXd_E`nhxsy&GQa7l`)D=`VaY+%?C$QA7_!wEb9 zurZ5f1L`E9;ux9*3=gUQ zTB@-~ZwuW7=te-PB_elToLqx1BX1zm+mcel_!IwbdvxIZk)2HeBu8;24#i-ciocGw zrewRnhY{BEZ$Wzg-xRbkgvDPic43#%`uB8oRP@Xaexpffl*g7mR#3wj7r#-Y+p9=z@Hs>bCHztpIM**PSg`(mIUz>$isn>J4Zs<41PiqVs;b=I1q+RrU z>}}U`@{fGkWIlCj$Cz(_3hTtrJt3^qFnR5SE%yf4qVk_(ozpF51&G~RVbc}XX*Z;% zdx1g^J=DODSm$-Ojegw?GW&IfbzU{o&1+9$g`y3Gu+Fe$<~@veUcH3MyTm&0*zP*} zMW_O-lVffdL&*9ODi!WDQc)P-4CmZFe?O_=8U=9v=nKpRIP;?U7^f?RafXD9 z3f^S0$tPndQ>m@HxPQaL3cddh#>u{GdN3Dwy6?}rmn7jUej_royy8Gsy>4lXcKXb? z1B)JoOsq3jvCL>>SO@0lMXRTO;TB|x{@zH>@LB$Vh z<6m6%Z)C6Ocd|Lfjd6<8#+v-jJpcG~%@ryE-nu~_wW4R|7qrfN{%Njcv%liPN3j~^ zDXLvzoFZ#rku|Ug?fSdWuKwt8Ce$HSn15~7BhF+QRQ?|f|3pkv5z|yO;ycUvavMyO zqT-%Wrga9}8#c~yLnjyGf#D(N{>YnJtB!7{IJG% zn@FMup9PUb55gU}*Tb)s==pc3vrvw3P$HV#4sBAN%rvsZqkf z)TWD!5h`7bpapTMy6gsp7)kJl67#O4AGIESeQh!ym-3n-wTc>$dVt-M_4PxV1;D3C z8?W4b?r?Ak4}5ClB-}7}r$updb(HlM1x_EdHy2$`_=5qaGid4xV8Z1XS;C`uoTZL4 z>TqVAAO%B&I*CxHe~&tmtd$b2a~{S}z6KZ2HN;1=*W?a5-B4&6@m~g?nqzhaxB4C{ zLf?Fj;yQ4Rd-=N&zv*UF^^E)*X#I80ol|6|)9xOc`#|}6_A1WHYhRa&)4oFO?q?w2-Kh5?zy>`*>a8dNKF@j z`elr-oLx~7JcS4KzYu`>bBYdJYvz;~pr9<)9>lQ+pmHTNVW9XD8c*SIIbJS7%P3cqyIhL4ljbdtL-WpM zw!rdSf#oLg@7s=&_`ZBopiNOOC^}&=DF0KG3yLo{Ze(zrlrUJ6Zuz;#NcpJaT(AbT zh@pS~M4gP$TzYF)D9ayA`8urOV8(;9j4~5)$6b$#6vkk%GOwWHBb^IIKX|^eila2C zJWO#cGJG5@AT-pJwf$p^S9q)dsvRA%KWksRmOT&EM$}x4YEu}RiSm`mwwcwklpR1T z&kn%)U)ll8*#WSAumec?!46<2We2c}X9wWTvjecD>;Sso z5w-(3hwe~5mRZ!I8~G*WMJpMMa2T`XIgDN6IgHVH4rBH_hp`bnhq28(hq0xonZ7)+Br0KwQdznlySqC1%e=pX7><>r_ zv{VO{d?38QEgksc17QL>bl~W6rXkQ~LXVGxA#i8H#E+;v2AN-$Bfx(e6Uy&H;?d~O zk4P)Dh6zXPV_Jg`OqjQiX$1^fFyj;91p2Vxw|z`!FoOm4z7h=BcRy1Ta9A*HKdStg z1${oF?^e-;nV$(q;H?Y4?ngqTS-Q}^0tu0B(S>OhXybZa*!v6NEFq^SCZ-Qxd?nQ3 zx-SHS@P)eH2rXFqh0s9ufZ=#~5CvNGuuX0y#N& zSQGhEn##e4n!pP9$UzkbI;&}N(2c>>fKFr}O?IRK%>d@aZ?K#JY>dQk_ zEu{4vDi58tfDK5KhpAe?8_Buv)B-(F<;Pm6ML7kirVZ?YlL8FX28LjW0vx4{M4odM z;2LeD`CI_2wSg^h8NSg54#XE|qJx^URD}I?(8f`UaHbC0c$y;Q=l~a@2)@ukyVD3Y zm}n-Q!de#5VyI#N+snBnv7JE03k25#jnZT0-UFhe(T_uIVT`L3wRu7nvRn-+F+ zFdc%w@#n$}536?!p!bp~ri2-+h5R)yoxFB>%i5PG|AN2f0L{{Z%|(j+_w2Ft~<(viB3SQ_Q8_NWC3_!g?|lu(vf!k3N#` z#%go`dO4Aiz~d0Cv1a*!Rh96T6Y_IyJ_>c6Nqzble$8jcVTdys3|^mrbv7(t;CpJd z9ZMai+p^?VyO1m}8nqi>Lu(fvTfx zaSMVaee3YX>d@Pjl%r4OZ)tl4F0*3|k{E~%P#r3DCk^2(SJDA^*F*X4q#1n{RTIT7 z8*af#_N)Xjt^wY$XY~VdjnK}46%O7t!(cb$D7%nfGxs6PaU%yw$UhMi)52|P!xxS$ zB99+tT1vfAm9rpmZ98wsw&FdFq0(E@5!0~@}*&-7nuZl%E2$rtVB?(2oqdb2J~%I zRTRViO$9D?VGRdw)nQc+(i|irqm>>cQ@}phOdE!}vOGYL4qV{MiUb=G8iVJXb>TN} z(mzXy4mQl z*?LLn;*A+hUA`!aoni_XxUn+iznK$a>bNHQNFRiCzUW8UW(lL+SuFZ~?ty5d(CiIc z7}676u+sLh&K+H_6CGefPtpn0Il>SRR!=1fCqfLzCh#4_g-{l+;(!cA7CKyNlly6HjkJm#kJwY?iGBu zpsiY0%q~pGh(l#(;dE1$sstLNTyce?JXxOd7u*SMIwM*sCVdX(^dfbEiwE4?i?j!K zJR#i+jTA0Yy;jsUH1~p@UaW5NEjdDfkw^23F%_uh%E(s>Rz{cUQHkcd^R7OCz5HcNT zrNhDyvM=z+gr7r56M8eX1v(cBW1vka*$+I(hKG8w;z7+g7&ZWnkiLeZkzM*kINhH$ z3K&d*Fa23r5^`)pOb=%EW@)a_8>Ix72C$rg(hN8~g4BUI0W3vW8AiH;Ju{(wAZrYW zo&(eSk`us-`A{#2H3AeYhKqt&8Gy44ehWgaK3ECUd$VEz2jUjASJ%5 z*1uo;@bv6>KlB&6l)hs(j)xswZCl;8{Ofc+Dhn?*@VxTK*{8a30ymgvqlCT;0Z!%i zxLnV-^=-#^oXS@MoXVJS(^%tG=X~H~+^2WKL)+pSr##$sI-kc_`>)-Q12FmWk>CM; zN}HzI!PxEm4^P?59Q1d%*27$?ORf=E_esY+VW z)PsZ04*uZ#>I|A5qUko8Iw6t=ymCCp>mH%0{cxd7sZZdOkY&nsG2JQ;-|JX#ce>-< zg>NmlINseB5U^fiZsoj=7^j6L1RRRAaZjCJY3txYBc{xoZ;p!E1s(So zIMTw$7V=!`YEM0i?vBdZM52-+`nrg|E~2laXTiEb=s!CIGh((j9;N+SQORxr0`P*5 zz_L3Y8~qNBaw}{bAx@0b|08hJrOlV7pQwC$rW20J6yTS3WG`5LKCX}u;Fsz?DoHw| z&~S^#FMTa&*&$yByw;}Iui)4fxTCZpAsS8pA+9Pbv!M--M)UUoGc5eL$DwlmBmcF! zw*~R>w`^2&i}Hry&`sT5C{S7^@l|=V?p{BNVbE$|m6i78Zq~tg8amsDI z7cnPqaqJeDc8b{z8XDE6cXSsw*GfRlj%qdhWyJP|uZDe48~jA8`wD7}f{iA=%W~1z zJyFLg-Rz9As+t7X4b_Pm#@NuJh02;a`OBO;RrMa8T)pT?@0vKI2Pmr;%w-HMwHh~W z{N1gmt$jOi;Z|R)5W0wh4EXPHx6LfM zX$Qf4d}`4L-xe6Q#IV3)G_|1V8JaLufXh4o#_O{s27WHPN6(ckZ?l@y&GAWO{MEj+ zz-iWf{Z8d>+HO7F!9`PY>2wLs%C8|!I%XAf-5Z~WjNWoyHQ?aPXg8UNYt1r-^YSVh zG%bj!?S7HcYiT=MgHH5+s!CXfC+yjH($&_{*rs-Wze_uc?yPv|6Fp03thRQ+fk%op zlcXOxi68@bNt9I~%Bt|bK$HGie!WnPc3ZS_(8MubT8-lC63P#%Krqw$3~wJNq3kM*Bb2H4>s8 z&T^^jmll_@933nE;I0uS?p{aJIW)aS6Hd1{`!^+=ilQl^Xo@JB^6L^#MbQ*dG)2@k z5_OGm*XU=_6bys#A+G_825$5`3yM+E8-9A_EN5-2T_(01ZsNQEEoG^)$S^Qu~0I3P~`*D*Z!DoMX zJOHt5_6KkiAi>07SQbdm0}n!|q(_+nIO$Ozgbtum9p4S4QXS_<<5Wjeur`KDaNHbA zB{<$5j1wFUK~o%+*7!7@N^9Jegwq<0!Lej2nK67QmCSf*7?sReGlEKHY)i+r7&KdNTo0yoAP4{V>SEtDU1m-s1!!}EGmU@^IR&0F=io^ z!Z>^hmBP4sIhDdVeAVw#7|S4)!bs1fQW)=Upi&s`ZpA5#b|8NjPF!^KQQZBrbVUq< z@qh0HIyd)(?zo0g?FWLazshpV`m+Gn_fuTIHV(!03phk^{Z>|DuAe1Xf0SbQZ97ge z{Mt_lGyK#}@fm&$@a{Cl>$`Rq^ZG0RaRF7f1^O3p9a{iu`OG~H&~%yN>&aXZ=Igz_ zhWUC9U`aj2(lfhFvGf%0QY^h)jhLn92%PRy+`QxHa0R$|(9Mx03)VfMSb2fZFp16u zY=2I1@c`nWe&^z;f<3RlGw@)j2dM~R-U`$16v3hQ-^q6Hm-x|rX5CvEidh#gkC}B=V5Snqr`xGY@#$1FF`v#9+|s02be|X$i!NN7 zV$nq~F^kR$=;&hZoFxd-qZo79`V?ahY5riw9H=#dHohoxS;Lr1iUVb)@QWKO2J|<_ zL^v}r&zhpY9k#*rx1NL@#eU1R=d#}b#{n+$V7UWJM=r??h&#i(exz~4Bf%?*v0S-a zd!*f$e|SFV7;ZjjSBUbT$p^K^_%X(f`8Sku$Dz58Y9lI8(ZhH@pGcqhkY0Vna9VL9 zDk?IDIfh6{=dm$NV6yaqoe8{P2$&$n1hyC=d7wfQSi@wQ0vA*0X#}jnG&4BT2(1q` zhYRq0fjKP1^E2jfI*X+XBrITy5zq%KJ)oR1=nGstVZ1Rg0OekkfZy33aHKA)2UzV5 zi**tG@~t;~ri*@PBR@FU1S$Fa<_Ep>SoUCEFPMqv%l%=i32+2^11Q!0HJY{op+VmJ#R?0Yl9J zBK}6gW#)*5F)a#CGDJ_{`2KLSA!`809soZYvibvwK`_q(c!0&xaH$bWQGXl_j~THH zz{NOdX^GCuy?AtdXusblKsNqcAqghpzYT`K1;*$}?~@EmjnR!`F%;f4Mv2}r!(g-( zQYKnD9L`4)U*KpOEU^McpkV}DWWwqOaz;a0Yb337Gy{5Cqy4&{3Dd37aWluj7*m!f zh{%R{rmVgazEg#j^iH#(rx|*KDb9e!HXsTNoCzz<(0)Fc4I9nS?>1&047Ww+^~3@= z$rgBmu%$55oaF|*mcwFmblh)OKpi{a4GLGmI6HK_n;^`$L)XLNwQ!0BYBz8lY_&uC zDYhP-w_pVT@r^LX9{2+%q=09M&P&=>INy>L0@iJZdJah3No5xdc0k8Dy%0{u^Fu{g z(as9I*aMeYq2Fz28Emv-_0-0fDgP2p2;H{!sq?qJsOVqVaOxe4WrkikwF%Ywxeez) z+1jSvzF%ulB~iwNNbsLaqrrU%kqsw43nCj%8afO3O#Ir6iGOFqDMaYV@ZT?WE6V5^ z+G{?EO*8;aqyC~~I!y%K_J(ZGEG=tKKzLIvs>lCsdIKN%04 z_rWFo$=MPI4*X69UzcJEqNDv%iD827Ag&6|AAmTMEvMl50cf~Oo`>)7oOS^k3`BF; z8rWwbX)a-b6!4W{W?zy4?FNzZaO*&Fw0!I(p}j~9C)HN;&7eb{L1ZQ{zlwK48)k%) zlBiS$-Wx<_0P9;YJenK}BpNYXp$)yO33>P`nhckR_X#mwd_3rbG)vGS8NuurGC-ow zV?xY`;$4Q>E5WBRh?`m6!i5}QSS&i+v2Cz4mK-k;@|qAc!xgn4doZaWC+$idE@HIZ zd`s0o)=E>AlXl~mFZh6w32lhVm0?3HNt2WIpjM){Ledv_Z!l>^suBRo$B`za5dhF7 zju9!^d`mHZTOr9d!633enP@uHi`&@++r2X?A(RwC&G za@FA3M6wq+tqv8ENPP(;28=Yd^OH!O6{8%bVRRBH3l=cor6f`p&Q2ngz-2ACHVFX_ zsyevP4h&+h9zr6nDhrMsLM{QXb)jT3nFE^i;oM|0-+Qqk;L}ObuOgJv+_nD_ zLsWqtu^W!Uvomlpp52Efsz9Ik2J2MOz#&)$epUr;#AxWE#+9FqQ$rfDNPbogI1^Xl zaW$Ze8gEoXRcW$NRviffTgpNobtDk%D+}Y*ksNKLES!$#Y23N0ypz3ym{g=x{}i-) zIaC?EsSfDGYWPSU7!muRtOjr;u0THx^i{9nXbsf35*_AgpaGLD9ad`qOAtwiFExM% z(pC%C1PobwF{vb}WZWXe1%_x3$7-Us&cHlPk*Y2Wjf4}F;aL_M@y$|(?^sCgU=K9X zMbg3bFhUoNZ-EM&rHd{Q8x>fgi^i3)D)5djI{R!GuLtyH(GNCEimNxigDP<37hJ>z zmP9+Z92V&T8KA8S6ZC){-I-s>msjG#FBz^174?AySW2ydvHEC3jw&3ckF&O zW*^D<>(K@C7)~i-+M&l$aS;+b@2LTE-VohDss@xVM!N2cG~kOjgc+#RfSJWeZ|pww zX-6{f#+op*9TkUZ!gcLPu02~5o^K~?!3ItE39mn|2`%3e=17CRcn?x>*Ji-RJ*c%n z2CRCERNSX9U~mc31{5&hWHd)NSz!s&0qAPMyCq0%GE569lrkMbHd0Z0M_5U$NBO{L zKi&~Ku={&L4jj{hn@Z8F7;X8@ut?Vd_-sFQno)G8&UxmcPlOGW{dYqFvzwjeSgJ&vzI%ek(4+nMN21`13<)kv4)z z8v$QAB5eeujljTJdi)!#e)vV-`N{y_U}r^yMG;}K6KWB`?;`m9e-B|%h#j~kF_Bhu z|I}R`J23lik!@mj<~Z}8oZeqj%F~_ZEJRPva{{b!Eg=e_ZuF`=?+xN9Ro}$Xdq*N7B;F7HK4fVfRFYggJGs0u1FaHD)4q4r`rd*s z@<8Oz$-_29{+!?SutolyTtxME{+wpN^XC+DRM^`?Ib5yhVvL;L`+>C^dTdwhMpbJ( zLis6cSA0m7!}f|EU9xt47v|jfJj)^pZ7;;y9X`ylaZQ6>I+wLeu}NI}E~$5>u9MFv zbvtwW!OPeRe`Cv&g?l|}3VR;uesLCYYP-8{$eZ)|k&jKDH>@|y_Mco=JtFC1n(D36 zoIQ1YriWVS=$t$`R?cTnU0NWSyCm`2Fz?4!QLCr!Tvwnui4OIpfvSWzdY)f{m#b(D zQ4j+~ENqAz9JnxqjW2-g|Lq{gcNeLjQ8`-BwZk7?)bH0c8@_j71S)za@?aH3i~mnX zi$R?_4)9qT;JZNZ?ilDXq{Sxi`A$^UCUV>sMF9V?5x}k;x2^GYD|kJRmneDtcK=r# ze|zm0-!~*Gf=@d6?~qLxGJ0lFLFw6!4pw?FF@#k0=ecfai;Ic5c#4V9@$R9Iv?L+< zz3Q0ktl{ZHt@JuKrT*r-%^lzoSO_1Az@qL;5m+AhQUsQsJt+c9mOn*c(F>pmEH?ru z0!w2cCa{>(W%=F)V!bIUi)}DPWyub~R2CDu22}%jGaL)0NG%|YBDJK3VN#0;U58r( z+kzE`V|t4{oyFfqyB|e#85&6uT^2=AM3<%gG10}CZp^P)GXPUwwCSo;34#lY2U6sh z6N4!7OGFGsez_A%kzbq!Q{)%zM2h@kokWpedJUn-FN2dQ@=HbvCciKQT3(WhX)p!? zM?YaWMTjX#;}T*_?~V}T`&dZQ`=ul%M~z9z@=MH4l>WYh^ih~Cqb1O=Wje*1xs*xq zX6R!m-i&=V#hV#1mg3E99!K$JmLjJ!8R%`s(tv$zfD=%ifq64J^kC{FNQjBW&7>GK zJ7!}BjV3*aT7y6shk2Mw!xX4nwE(kf1WObbQ~a9s%PD@%!j+g`qfL*ZT0!;`Jy%mq zn+`}ZZQ9mirj3q3jXUcw=SHw(^?J;{(V`EeT0z%wpN$j`ryt_qU>;8HR?NdOq$l!g z9N11Va-QzQj2vBhJhcWLVPYZX<`@aotu4YV9l;W*63o{zpeOUU@+_m6JNwJI%pGA@ z%m6}q{mdRQLqx8aOY&}x`S!r+WDnZ0Q{B8Jtgc0t+KgqiR8;$2(>VIkCaiGn5%yGr zV&`37mo|-Wi(eQ0Wi7bpnWQy~7-#?4ucbQRoK;SmK^WzV`BX4PSlAWQWFbpyA46;y zdX9-)F-5MJB3I1+f-5FA5f;klJYD?ZO1HOTJhjWqxU-*tUUYRwO@­cR`cjm#9UA2SoJr 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 delta 191004 zcmeFa2Uru$`aYbU5MYy#1VZmkdhe)!6hRRY5F1iO>;h73s1!REK-5uD0mZIVHHwNL zb`k3<76j}C5iHo1ZSXdFFoZ=b71^*-2n0+U;x; zMN>$|_vJ|>771FnFr|263u`X9{C%?|Yma83j2C zHjCrqtoMN`KITD9_K0g&`*2v74OlGkS#xL?{QD|h=k(hTE{S6aoSdP${lvs|jn7_O z(g$uhXn{2WBFkngY^(Ifn=tR{IYYaKXsSk?x$`<(&T_}h>O7?qH|s=kXzGZKU1jZ5 zLd#bstK34Ryn*)4m)RsfszUE=(h?NZ02?l_bzt-ZObNa`&sNAxoJQq@=BsXHvfJyU zpQ^Rv(!LgML>69_Fw9p`wxr7E2~**A*9(PFfvs%^Z5>v9hR3%Pd-5iY! zGf?>L%$CVIoB%)U7E|#qy6$|Y`sUfkYYy*OhJtF%V2BGQ$JuBJo-k$Vx~95tLp=Kq zeP1*u`Z^%9WQZqq<`8)myJuA!k;?HgltOV0UE}g^k2_NEu-Jx^o+aic!g)dNca)}# z5)j4h%pi6VdF7|pQ$%aI52N)d%ACSg*aM~l@m`&YmgXvW=~LfiqM(PIy<1S-!8;5C z30cMA3##)MteY)?BFI=Z39DvqXL@mR2T;l}oek4dTauEJG(|`UqIct>z}&)P2>anl zDOr~cw@nXaS-`T4Q)pDI$;Co2}w&wltac?$61xdV>Yh>Y9)gEoFyShp2T>2Cv zqQSI(Kc_+E{#`9-!Zwh_RN%f= zbxm>YV7J-fCoWmSD7L`}HL}R--SgXYo0WPmz12MV$;`03o;32F{zXlJNxf4!(Puq+mUU)okfm!6Tv8`v*{5@ROMrT`G^OVXh7f*L{v^q30jJ8PZ z=ncuN$n{rbwD%T^4%JOD-gag5qjz)D_YV@;(0_LdjDD})N2&7k-E|rB)o$sT!H)?s z1D{=-elAJ*q>4!ah7KkIhP}y z$Seh-`+ZNp`qsEGE00Ym=n?0r7)6YCkFS|ksfen&6vt<@1(I8X*EYl}yc@{kBv}G6 zmgL(GnHiLEdO({Kv0cDCFy`JKp7_16PxJGlVMz;k;&&cT{7ODqTC{oY$b~%d zJBKTN({yrXjXHH=`oe>uL6c`VA3An?WdEOtUqaIHiQnn!)iGAql^ap`9k@3iH^U6z z-F#dh%#?-ETj^F{gDi9`z->XfEUe#3*8@$mFt-5L#n{k1k8T3|P zAX^TW=Fv^TSvlB9#J`b)O55oAsN3Bw#La<=JY*H2+#=;+(Kfmn$d!ja18T#%<;X%q!@*r*q5|yFjLEHdShF5l@cfFttqffDo!Fy$x zeTr=a)Ky^U9=bK~RDq@(+y=~5fvkMG0!-rI@}NisMx9298&shAUi565Dh%68w*
rw9bf`M4%}4c=qE6gwh84r8!?+?GT|id>4eD@q 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
  • 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

    6UyBOm*L#FZ_t#LHM@&Ni}@@CL>o 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 diff --git a/mifare_plus_c_sharp/Form1.cs b/mifare_plus_c_sharp/Form1.cs index 2f47833..637fc05 100644 --- a/mifare_plus_c_sharp/Form1.cs +++ b/mifare_plus_c_sharp/Form1.cs @@ -1,2519 +1,2519 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; -using uFR; - - - -namespace mifare_plus_c_sharp -{ - - using DL_STATUS = System.UInt32; - - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - - - - public static byte[] StringToByteArray(string hex) - { - return Enumerable.Range(0, hex.Length) - .Where(x => x % 2 == 0) - .Select(x => Convert.ToByte(hex.Substring(x, 2), 16)) - .ToArray(); - } - - private void timer2_Tick(object sender, EventArgs e) - { - DL_STATUS status = 0; - - byte cardtype_val = 0, sak = 0, uid_size = 0; - byte[] uid = new byte[10]; - - status = (UInt32)uFCoder.GetDlogicCardType(out cardtype_val); - - if (status > 0) - { - //toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - txtCardType.Text = uFCoder.status2str((uFR.DL_STATUS)status); - txtCardUID.Text = BitConverter.ToString(uid).Replace("-", ":"); - return; - } - - txtCardType.Text = Enum.GetName(typeof(DLOGIC_CARD_TYPE), cardtype_val); - - status = (UInt32)uFCoder.GetCardIdEx(out sak, uid, out uid_size); - - txtCardUID.Text = BitConverter.ToString(uid).Replace("-", ":"); - - //toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - - - - - private void btnPersonalizeCard_Click(object sender, EventArgs e) - { - DL_STATUS status; - - byte[] master_key = new byte[16]; - byte[] config_key = new byte[16]; - byte[] l2_sw_key = new byte[16]; - byte[] l3_sw_key = new byte[16]; - byte[] l1_auth_key = new byte[16]; - byte[] sel_vc_key = new byte[16]; - byte[] prox_chk_key = new byte[16]; - byte[] vc_poll_enc_key = new byte[16]; - byte[] vc_poll_mac_key = new byte[16]; - byte dl_card_type = 0; - - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "No card in RF field found for Personalization"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - //check if card type S in SL0 - if (!((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL0 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_X_4K_SL0)) - { - txtStatus.Text = "Card is not in security level 0 mode."; - return; - } - - /* if (dl_card_type == DL_MIFARE_PLUS_S_2K_SL0 || dl_card_type == DL_MIFARE_PLUS_S_4K_SL0) - { - } */ - - if (txtPersonalizeCardMasterKey.TextLength != 32) - { - txtStatus.Text = "Master key must be 16 bytes long!"; - return; - } - - if (txtPersonalizeConfigurationKey.TextLength != 32) - { - txtStatus.Text = "Card configuration key must be 16 bytes long!"; - return; - } - - if (txtPersonalizeLevel2Key.TextLength != 32) - { - txtStatus.Text = "Level 2 switch key must be 16 bytes long!"; - return; - } - - if (txtPersonalizeLevel3Key.TextLength != 32) - { - txtStatus.Text = "Level 3 switch key must be 16 bytes long!"; - return; - } - - if (txtPersonalizeLevel1Key.TextLength != 32) - { - txtStatus.Text = "SL1 card authentication key must be 16 bytes long!"; - return; - } - - if ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_X_2K_SL0 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_X_4K_SL0) - { - if (txtPersonalizeSelectVCKey.TextLength != 32) - { - txtStatus.Text = "Select VC key must be 16 bytes long!"; - return; - } - - if (txtPersonalizeProximityCheckKey.TextLength != 32) - { - txtStatus.Text = "Proximity check key must be 16 bytes long!"; - return; - } - } - - if (txtPersonalizeVCENCKey.TextLength != 32) - { - txtStatus.Text = "VC polling ENC key key must be 16 bytes long!"; - return; - } - - if (txtPersonalizeVCMACKey.TextLength != 32) - { - txtStatus.Text = "VC polling MAC key key must be 16 bytes long!"; - return; - } - - - // StringToByteArray(AESkeyTB.Text); - - master_key = StringToByteArray(txtPersonalizeCardMasterKey.Text); - - config_key = StringToByteArray(txtPersonalizeConfigurationKey.Text); - - l1_auth_key = StringToByteArray(txtPersonalizeLevel1Key.Text); - - l2_sw_key = StringToByteArray(txtPersonalizeLevel2Key.Text); - - l3_sw_key = StringToByteArray(txtPersonalizeLevel3Key.Text); - - sel_vc_key = StringToByteArray(txtPersonalizeSelectVCKey.Text); - - prox_chk_key = StringToByteArray(txtPersonalizeProximityCheckKey.Text); - - vc_poll_enc_key = StringToByteArray(txtPersonalizeVCENCKey.Text); - - vc_poll_mac_key = StringToByteArray(txtPersonalizeVCMACKey.Text); - - - status = (UInt32)uFCoder.MFP_PersonalizationMinimal(master_key, config_key, l2_sw_key, l3_sw_key, l1_auth_key, - sel_vc_key, prox_chk_key, vc_poll_enc_key, vc_poll_mac_key); - - if (status > 0) - { - txtStatus.Text = "Card personalization was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Card personalization successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - - private void btnAuthSL1_Click(object sender, EventArgs e) - { - DL_STATUS status; - - byte[] sl1_auth_key = new byte[16]; - - byte key_index = 0; - - if (rbChangeAuthPK.Checked) - { - if (txtAuthSL1AuthKey.TextLength != 32) - { - txtStatus.Text = "SL1 card authentication key must be 16 bytes long"; - return; - } - - sl1_auth_key = StringToByteArray(txtAuthSL1AuthKey.Text); - status = (UInt32)uFCoder.MFP_AesAuthSecurityLevel1_PK(sl1_auth_key); - - if (status > 0) - { - txtStatus.Text = "AES authentication on SL1 was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "AES authentication on SL1 successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - else - { - key_index = Byte.Parse(cbAuthSL1ReaderKeyIndex.Text); - - status = (UInt32)uFCoder.MFP_AesAuthSecurityLevel1(key_index); - - if (status > 0) - { - txtStatus.Text = "AES authentication on SL1 was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "AES authentication on SL1 successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - - } - - private void btnSwitchSL3_Click(object sender, EventArgs e) - { - DL_STATUS status; - - byte[] sl3_sw_key = new byte[16]; - byte key_index = 0; - - if (rbChangeAuthPK.Checked) - { - if (txtSwitchSL3AESkey.TextLength != 32) - { - txtStatus.Text = "Level 3 switch key must be 16 bytes long"; - return; - } - - sl3_sw_key = StringToByteArray(txtSwitchSL3AESkey.Text); - - status = (UInt32)uFCoder.MFP_SwitchToSecurityLevel3_PK(sl3_sw_key); - - if (status > 0) - { - txtStatus.Text = "Switch to SL3 was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Switch to SL3 successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - else - { - key_index = Byte.Parse(cbSwitchSL3ReaderKeyIndex.Text); - - status = (UInt32)uFCoder.MFP_SwitchToSecurityLevel3(key_index); - - if (status > 0) - { - txtStatus.Text = "Switch to SL3 was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Switch to SL3 successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - - } - - private void btnChangeMasterKey_Click(object sender, EventArgs e) - { - DL_STATUS status; - - byte[] old_master_key = new byte[16]; - byte[] new_master_key = new byte[16]; - byte key_index = 0; - - if (rbChangeAuthPK.Checked) - { - if (txtChangeMasterOldKey.TextLength != 32) - { - txtStatus.Text = "Old master key must be 16 bytes long"; - return; - } - - if (txtChangeMasterNewKey.TextLength != 32) - { - txtStatus.Text = "New master key must be 16 bytes long"; - return; - } - - old_master_key = StringToByteArray(txtChangeMasterOldKey.Text); - - new_master_key = StringToByteArray(txtChangeMasterNewKey.Text); - - status = (UInt32)uFCoder.MFP_ChangeMasterKey_PK(old_master_key, new_master_key); - - if (status > 0) - { - txtStatus.Text = "Master key change was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Master key change successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - else - { - if (txtChangeMasterNewKeyRK.TextLength != 32) - { - txtStatus.Text = "New master key must be 16 bytes long"; - return; - } - - new_master_key = StringToByteArray(txtChangeMasterNewKeyRK.Text); - - key_index = Byte.Parse(cbChangeMasterReaderKeyIndex.Text); - - status = (UInt32)uFCoder.MFP_ChangeMasterKey(key_index, new_master_key); - - if (status > 0) - { - txtStatus.Text = "Master key change was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Master key change successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - } - - private void btnChangeConfigurationKey_Click(object sender, EventArgs e) - { - DL_STATUS status; - - byte[] old_config_key = new byte[16]; - byte[] new_config_key = new byte[16]; - byte key_index = 0; - - if (rbChangeAuthPK.Checked) - { - if (txtChangeMasterOldKey.TextLength != 32) - { - txtStatus.Text = "Old configuration key must be 16 bytes long"; - return; - } - - if (txtChangeMasterNewKey.TextLength != 32) - { - txtStatus.Text = "New configuration key must be 16 bytes long"; - return; - } - - old_config_key = StringToByteArray(txtChangeConfigOldKey.Text); - - new_config_key = StringToByteArray(txtChangeConfigNewKey.Text); - - status = (UInt32)uFCoder.MFP_ChangeConfigurationKey_PK(old_config_key, new_config_key); - - if (status > 0) - { - txtStatus.Text = "Configuration key change was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Configuration key change successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - else - { - if (txtChangeConfigNewKeyRK.TextLength != 32) - { - txtStatus.Text = "New configuration key must be 16 bytes long"; - return; - } - - new_config_key = StringToByteArray(txtChangeConfigNewKeyRK.Text); - - key_index = Byte.Parse(cbChangeMasterReaderKeyIndex.Text); - - status = (UInt32)uFCoder.MFP_ChangeConfigurationKey(key_index, new_config_key); - - if (status > 0) - { - txtStatus.Text = "Configuration key change was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Configuration key change successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - } - - private void btnChangeAESSectorKey_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte[] old_sector_key = new byte[16]; - byte[] new_sector_key = new byte[16]; - byte key_index = 0, sector_nr = 0, auth_mode = 0; - - sector_nr = Byte.Parse(cbChangeSectorSectorNumber.Text); - - if (rbChangeSectorKeyA.Checked) - { - auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1A; - } - else if (rbChangeSectorKeyB.Checked) - { - auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1B; - } - else - { - txtStatus.Text = "You should select settings AES KEY A or B"; - return; - } - - if (rbChangeAuthPK.Checked) - { - if (txtChangeSectorOldKey.TextLength != 32) - { - txtStatus.Text = "Old sector key must be 16 bytes long"; - return; - } - - if (txtChangeSectorNewKey.TextLength != 32) - { - txtStatus.Text = "New sector key must be 16 bytes long"; - return; - } - - old_sector_key = StringToByteArray(txtChangeSectorOldKey.Text); - - new_sector_key = StringToByteArray(txtChangeSectorNewKey.Text); - - status = (UInt32)uFCoder.MFP_ChangeSectorKey_PK(sector_nr, auth_mode, old_sector_key, new_sector_key); - - if (status > 0) - { - txtStatus.Text = "Sector key change was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Sector key change successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - - } - else if (rbChangeAuthRK.Checked) - { - if (txtChangeSectorNewKeyRK.TextLength != 32) - { - txtStatus.Text = "New sector key must be 16 bytes long"; - return; - } - - new_sector_key = StringToByteArray(txtChangeConfigNewKeyRK.Text); - - key_index = Byte.Parse(cbChangeSectorKeyReaderIndex.Text); - - status = (UInt32)uFCoder.MFP_ChangeSectorKey(sector_nr, auth_mode, key_index, new_sector_key); - - if (status > 0) - { - txtStatus.Text = "Sector key change was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Sector key change successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - - } - - } - - private void btnFieldConfigurationSet_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte[] config_key = new byte[16]; - byte key_index = 0, rid_use = 0, prox_check_use = 0; - - //Proximity check for X and EV1 card is not implemented yet - prox_check_use = 0; - - //setting usage of random id or uid - if (rbFieldConfigUseRandomID.Checked) - { - rid_use = 1; - } - else if (rbFieldConfigUseUID.Checked) - { - rid_use = 0; - } - - if (rbChangeAuthPK.Checked) - { - - if (txtFieldConfigKey.TextLength != 32) - { - txtStatus.Text = "Field configuration key must be 16 bytes long"; - return; - } - - config_key = StringToByteArray(txtFieldConfigKey.Text); - - status = (UInt32)uFCoder.MFP_FieldConfigurationSet_PK(config_key, rid_use, prox_check_use); - - if (status > 0) - { - txtStatus.Text = "Field configuration set was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Field configuration set successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - - } - else if (rbChangeAuthRK.Checked) - { - key_index = Byte.Parse(cbFieldConfigReaderKeyIndex.Text); - - status = (UInt32)uFCoder.MFP_FieldConfigurationSet(key_index, rid_use, prox_check_use); - - if (status > 0) - { - txtStatus.Text = "Field configuration set was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Field configuration set successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - - } - - private void btnGetCardUID_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte[] vc_enc_key = new byte[16]; - byte[] vc_mac_key = new byte[16]; - byte key_index_enc = 0, key_index_mac = 0, uid_len = 0; - byte[] uid = new byte[10]; - - if (rbChangeAuthPK.Checked) - { - if (txtGetCardUIDENCKey.TextLength != 32) - { - txtStatus.Text = "VC polling ENC key must be 16 bytes long"; - return; - } - - if (txtGetCardUIDMACKey.TextLength != 32) - { - txtStatus.Text = "VC polling MAC key must be 16 bytes long"; - return; - } - - vc_enc_key = StringToByteArray(txtGetCardUIDENCKey.Text); - - vc_mac_key = StringToByteArray(txtGetCardUIDMACKey.Text); - - status = (UInt32)uFCoder.MFP_GetUid_PK(vc_enc_key, vc_mac_key, uid, out uid_len); - - if (status > 0) - { - txtStatus.Text = "Get UID was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - txtStatus.Text = "Get UID was successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - txtUID_Get.Text = BitConverter.ToString(uid).Replace("-", ":"); - - } - else if (rbChangeAuthRK.Checked) - { - key_index_enc = Byte.Parse(cbGetCardUIDENCKeyRK.Text); - - key_index_mac = Byte.Parse(cbGetCardUIDMACKeyRK.Text); - - status = (UInt32)uFCoder.MFP_GetUid(key_index_enc, key_index_mac, uid, out uid_len); - - if (status > 0) - { - txtStatus.Text = "Get UID was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - txtStatus.Text = "Get UID was successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - txtUID_Get.Text = BitConverter.ToString(uid).Replace("-", ":"); - - } - } - - private void btnChangeVCPollingENCKey_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte[] config_key = new byte[16]; - byte[] new_vc_enc_key = new byte[16]; - byte key_index = 0; - - if (rbChangeAuthPK.Checked) - { - if (txtChangeVCPollingENCConfigKey.TextLength != 32) - { - txtStatus.Text = "Card configuration key must be 16 bytes long"; - return; - } - - if (txtChangeVCPollingENCNewKey.TextLength != 32) - { - txtStatus.Text = "New VC polling ENC key must be 16 bytes long"; - return; - } - - config_key = StringToByteArray(txtChangeVCPollingENCConfigKey.Text); - - new_vc_enc_key = StringToByteArray(txtChangeVCPollingENCNewKey.Text); - - status = (UInt32)uFCoder.MFP_ChangeVcPollingEncKey_PK(config_key, new_vc_enc_key); - - if (status > 0) - { - txtStatus.Text = "VC polling ENC key change was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "VC polling ENC key change was successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - - } - else if (rbChangeAuthRK.Checked) - { - key_index = Byte.Parse(cbChangeVCPollingENCReaderKeyIndex.Text); - - if (txtChangeVCPollingENCNewKeyRK.TextLength != 32) - { - txtStatus.Text = "New VC polling ENC key must be 16 bytes long"; - return; - } - - new_vc_enc_key = StringToByteArray(txtChangeVCPollingENCNewKeyRK.Text); - - status = (UInt32)uFCoder.MFP_ChangeVcPollingEncKey(key_index, new_vc_enc_key); - - if (status > 0) - { - txtStatus.Text = "VC polling ENC key change was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "VC polling ENC key change was successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - - } - - } - - private void btnChangeVCPollingMACKey_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte[] config_key = new byte[16]; - byte[] new_vc_mac_key = new byte[16]; - byte key_index = 0; - - if (rbChangeAuthPK.Checked) - { - if (txtChangeVCPollingMACConfigKey.TextLength != 32) - { - txtStatus.Text = "Card configuration key must be 16 bytes long"; - return; - } - - if (txtChangeVCPollingMACNewKey.TextLength != 32) - { - txtStatus.Text = "New VC polling MAC key must be 16 bytes long"; - return; - } - - config_key = StringToByteArray(txtChangeVCPollingMACConfigKey.Text); - - new_vc_mac_key = StringToByteArray(txtChangeVCPollingMACNewKey.Text); - - status = (UInt32)uFCoder.MFP_ChangeVcPollingMacKey_PK(config_key, new_vc_mac_key); - - if (status > 0) - { - txtStatus.Text = "VC polling MAC key change was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "VC polling MAC key change was successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - - } - else if (rbChangeAuthRK.Checked) - { - key_index = Byte.Parse(cbChangeVCPollingMACReaderKeyIndex.Text); - - if (txtChangeVCPollingMACNewKeyRK.TextLength != 32) - { - txtStatus.Text = "New VC polling MAC key must be 16 bytes long"; - return; - } - - new_vc_mac_key = StringToByteArray(txtChangeVCPollingMACNewKeyRK.Text); - - status = (UInt32)uFCoder.MFP_ChangeVcPollingMacKey(key_index, new_vc_mac_key); - - if (status > 0) - { - txtStatus.Text = "VC polling MAC key change was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "VC polling MAC key change was successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - - } - } - - private void btnCrypto1KeyInput_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte[] crypto_key = new byte[6]; - byte key_index = 0; - - if (txtCrypto1Key.TextLength != 12) - { - txtStatus.Text = "Crypto key must be 6 bytes long"; - return; - } - - crypto_key = StringToByteArray(txtCrypto1Key.Text); - - key_index = Byte.Parse(cbCrpytoReaderIndex.Text); - - status = (UInt32)uFCoder.ReaderKeyWrite(crypto_key, key_index); - if (status > 0) - { - txtStatus.Text = "CRYPTO 1 key writing was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "CRYPTO 1 key writing was successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - - - } - - private void btnAesKeyInput_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte[] aes_key = new byte[16]; - byte key_index = 0; - - if (txtAESKey.TextLength != 32) - { - txtStatus.Text = "AES key must be 16 bytes long"; - return; - } - - aes_key = StringToByteArray(txtAESKey.Text); - - key_index = Byte.Parse(cbAESIndex.Text); - - status = (UInt32)uFCoder.uFR_int_DesfireWriteAesKey(key_index, aes_key); - - if (status > 0) - { - txtStatus.Text = "AES key writing was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "AES key writing was successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - - private void btnUnlockReader_Click(object sender, EventArgs e) - { - DL_STATUS status; - String password = ""; - - if (txtUnlockPassword.TextLength != 8) - { - txtStatus.Text = "Password must be 8 characters long"; - return; - } - - password = txtUnlockPassword.Text; - - status = (UInt32)uFCoder.ReaderKeysUnlock(password.ToCharArray()); - - if (status > 0) - { - txtStatus.Text = "Reader unlocking was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Reader unlocking was successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - - - } - - private void btnLockReader_Click(object sender, EventArgs e) - { - DL_STATUS status; - String password = ""; - - if (txtLockPassword.TextLength != 8) - { - txtStatus.Text = "Password must be 8 characters long"; - return; - } - - password = txtLockPassword.Text; - - status = (UInt32)uFCoder.ReaderKeysLock(password.ToCharArray()); - - if (status > 0) - { - txtStatus.Text = "Reader locking was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Reader locking was successful"; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - - private void TabPage6_Click(object sender, EventArgs e) - { - - } - - private void btnBlockReadPK_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte dl_card_type = 0; - byte auth_mode = 0, block_address = 0; - byte[] crypto_key = new byte[6]; - byte[] aes_key = new byte[16]; - byte[] block_data = new byte[16]; - - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - //Using AES or CRYPTO key depending on following check of card type - - if (((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1)) - { - //" (1) - Provided CRYPTO 1 key\n PK" - if (rbBlockReadKeyAPK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; // auth mode check - - } - else if (rbBlockReadKeyBPK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - - if (txtBlockReadKeyPK.TextLength != 12) - { - txtStatus.Text = "This card uses CRYPTO 1 key that should be 6 bytes long"; - return; - } - - crypto_key = StringToByteArray(txtBlockReadKeyPK.Text); - - block_address = Byte.Parse(cbBlockReadBlockNrPK.Text); - - status = (UInt32)uFCoder.BlockRead_PK(block_data, block_address, auth_mode, crypto_key); - - if (status > 0) - { - txtStatus.Text = "Block read was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Block read was successful.\nBlock data: "; - txtStatus.Text += BitConverter.ToString(block_data).Replace("-", ":"); - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - - } - else - { - //" (2) - Provided AES key\n PK" - if (rbBlockReadKeyAPK.Checked) - { - auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1A; // auth mode check - } - else if (rbBlockReadKeyBPK.Checked) - { - auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1B; - } - - if (txtBlockReadKeyPK.TextLength != 32) - { - txtStatus.Text = "This card uses AES key that should be 16 bytes long"; - return; - } - - aes_key = StringToByteArray(txtBlockReadKeyPK.Text); - - block_address = Byte.Parse(cbBlockReadBlockNrPK.Text); - - status = (UInt32)uFCoder.BlockRead_PK(block_data, block_address, auth_mode, aes_key); - - if (status > 0) - { - txtStatus.Text = "Block read was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Block read was successful.\nBlock data: "; - txtStatus.Text += BitConverter.ToString(block_data).Replace("-", ":"); - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - - } - - private void btnBlockReadRK_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte dl_card_type = 0; - byte auth_mode = 0, block_address = 0; - byte crypto_key_nr = 0; - byte aes_key_nr = 0; - byte[] block_data = new byte[16]; - - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - //Using AES or CRYPTO key depending on following check of card type - - if (((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1)) - { - //" (1) - Reader CRYPTO 1 key\n RK" - if (rbBlockReadKeyARK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; // auth mode check - - } - else if (rbBlockReadKeyBRK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - - crypto_key_nr = Byte.Parse(cbBlockReadKeyRK.Text); - - block_address = Byte.Parse(cbBlockReadBlockNrRK.Text); - - status = (UInt32)uFCoder.BlockRead(block_data, block_address, auth_mode, crypto_key_nr); - - if (status > 0) - { - txtStatus.Text = "Block read was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Block read was successful.\nBlock data: "; - txtStatus.Text += BitConverter.ToString(block_data).Replace("-", ":"); - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - - } - else - { - //" (2) - Reader AES key\n RK" - if (rbBlockReadKeyARK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; ; // auth mode check - } - else if (rbBlockReadKeyBRK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - - aes_key_nr = Byte.Parse(cbBlockReadKeyRK.Text); - - block_address = Byte.Parse(cbBlockReadBlockNrRK.Text); - - status = (UInt32)uFCoder.BlockRead(block_data, block_address, auth_mode, aes_key_nr); - - if (status > 0) - { - txtStatus.Text = "Block read was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Block read was successful.\nBlock data: "; - txtStatus.Text += BitConverter.ToString(block_data).Replace("-", ":"); - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - - } - - } - - private void btnBlockReadAKM1_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte dl_card_type = 0; - byte auth_mode = 0, block_address = 0; - byte[] block_data = new byte[16]; - - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - //" (1) - Provided CRYPTO 1 key\n AKM1" - if (rbBlockReadKeyAAKM1.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; // auth mode check - - } - else if (rbBlockReadKeyBAKM1.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - - block_address = Byte.Parse(cbBlockReadBlockNrAKM1.Text); - - status = (UInt32)uFCoder.BlockRead_AKM1(block_data, block_address, auth_mode); - - if (status > 0) - { - txtStatus.Text = "Block read was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Block read was successful.\nBlock data: "; - txtStatus.Text += BitConverter.ToString(block_data).Replace("-", ":"); - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - - private void btnBlockReadAKM2_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte dl_card_type = 0; - byte auth_mode = 0, block_address = 0; - byte[] block_data = new byte[16]; - - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - ////////////////AKM2/////////////////////" - if (rbBlockReadKeyAAKM2.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; // auth mode check - - } - else if (rbBlockReadKeyBAKM2.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - - block_address = Byte.Parse(cbBlockReadBlockNrAKM2.Text); - - status = (UInt32)uFCoder.BlockRead_AKM2(block_data, block_address, auth_mode); - - if (status > 0) - { - txtStatus.Text = "Block read was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Block read was successful.\nBlock data: "; - txtStatus.Text += BitConverter.ToString(block_data).Replace("-", ":"); - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - - } - - - private void btnBlockInSectorReadPK_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte[] block_data = new byte[16]; - byte[] sector_key = new byte[16]; - byte sector_nr = 0, block_nr = 0, auth_mode = 0; - byte dl_card_type = 0; - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - if (((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1)) - { - if (txtBlockInSectorReadKeyPK.TextLength != 12) - { - txtStatus.Text = "This card uses CRYPTO 1 key that should be 6 bytes long"; - return; - } - - sector_key = StringToByteArray(txtBlockInSectorReadKeyPK.Text); - - if (rbBlockInSectorReadKeyAPK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; - - } - else if (rbBlockInSectorReadKeyBPK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - - } - else - { - if (txtBlockInSectorReadKeyPK.TextLength != 32) - { - txtStatus.Text = "This card uses AES key that should be 16 bytes long"; - return; - } - - sector_key = StringToByteArray(txtBlockInSectorReadKeyPK.Text); - - if (rbBlockInSectorReadKeyAPK.Checked) - { - auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1A; - } - else if (rbBlockInSectorReadKeyBPK.Checked) - { - auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1B; - } - } - - sector_nr = Byte.Parse(cbBlockInSectorSectorNrPK.Text); - - block_nr = Byte.Parse(cbBlockInSectorBlockNrPK.Text); - - - status = (UInt32)uFCoder.BlockInSectorRead_PK(block_data, sector_nr, block_nr, auth_mode, sector_key); - - if (status > 0) - { - txtStatus.Text = "Block read was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Block read was successful.\nBlock data: "; - txtStatus.Text += BitConverter.ToString(block_data).Replace("-", ":"); - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - - } - - private void bnBlockInSectorReadRK_Click(object sender, EventArgs e) - { - //RK - DL_STATUS status; - byte[] block_data = new byte[16]; - byte sector_nr = 0, block_nr = 0, auth_mode = 0, key_nr = 0; - byte dl_card_type = 0; - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - - if (rbBlockInSectorReadKeyARK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; - } - else if (rbBlockInSectorReadKeyBRK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - - key_nr = Byte.Parse(cbBlockInSectorReadKeyRK.Text); - - sector_nr = Byte.Parse(cbBlockInSectorSectorNrRK.Text); - - block_nr = Byte.Parse(cbBlockInSectorBlockNrRK.Text); - - status = (UInt32)uFCoder.BlockInSectorRead(block_data, sector_nr, block_nr, auth_mode, key_nr); - - if (status > 0) - { - txtStatus.Text = "Block read was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Block read was successful.\nBlock data: "; - txtStatus.Text += BitConverter.ToString(block_data).Replace("-", ":"); - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - - private void btnBlockInSectoReadAKM1_Click(object sender, EventArgs e) - { - //AKM1 - DL_STATUS status; - byte[] block_data = new byte[16]; - byte sector_nr = 0, block_nr = 0, auth_mode = 0; - byte dl_card_type = 0; - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - if (rbBlockInSectorReadKeyAAKM1.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; - } - else if (rbBlockInSectorReadKeyBAKM1.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - - sector_nr = Byte.Parse(cbBlockInSectorSectorNrAKM1.Text); - - block_nr = Byte.Parse(cbBlockInSectorBlockNrAKM1.Text); - - status = (UInt32)uFCoder.BlockInSectorRead_AKM1(block_data, sector_nr, block_nr, auth_mode); - - if (status > 0) - { - txtStatus.Text = "Block read was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Block read was successful.\nBlock data: "; - txtStatus.Text += BitConverter.ToString(block_data).Replace("-", ":"); - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - - - private void btnBlockInSectorReadAKM2_Click(object sender, EventArgs e) - { - //AKM2 - DL_STATUS status; - byte[] block_data = new byte[16]; - byte sector_nr = 0, block_nr = 0, auth_mode = 0; - byte dl_card_type = 0; - - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - if (rbBlockInSectorReadKeyAAKM2.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; - } - else if (rbBlockInSectorReadKeyBAKM2.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - - sector_nr = Byte.Parse(cbBlockInSectorSectorNrAKM2.Text); - - block_nr = Byte.Parse(cbBlockInSectorBlockNrAKM2.Text); - - status = (UInt32)uFCoder.BlockInSectorRead_AKM2(block_data, sector_nr, block_nr, auth_mode); - - if (status > 0) - { - txtStatus.Text = "Block read was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Block read was successful.\nBlock data: "; - txtStatus.Text += BitConverter.ToString(block_data).Replace("-", ":"); - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - - private void btnLinearReadPK_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte[] linear_data = new byte[3440]; - byte[] sector_key = new byte[16]; - ushort linear_address = 0, linear_length = 0, ret_bytes = 0; - byte dl_card_type = 0, auth_mode = 0; - - - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - - if (((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1)) - { - if (txtLinearReadKeyPK.TextLength != 12) - { - txtStatus.Text = "This card uses CRYPTO 1 key that should be 6 bytes long"; - return; - } - - sector_key = StringToByteArray(txtLinearReadKeyPK.Text); - - if (rbLinearReadKeyAPK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; - - } - else if (rbLinearReadKeyBPK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - } - else - { - if (txtLinearReadKeyPK.TextLength != 32) - { - txtStatus.Text = "This card uses AES key that should be 16 bytes long"; - return; - } - - sector_key = StringToByteArray(txtLinearReadKeyPK.Text); - - if (rbLinearReadKeyAPK.Checked) - { - auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1A; - } - else if (rbLinearReadKeyBPK.Checked) - { - auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1B; - } - } - - linear_address = Convert.ToUInt16(txtLinearAddressPK.Text); - - linear_length = Convert.ToUInt16(txtBytesForReadPK.Text); - - status = (UInt32)uFCoder.LinearRead_PK(linear_data, linear_address, linear_length, out ret_bytes, auth_mode, sector_key); - - if (status > 0) - { - txtStatus.Text = "Linear read was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Linear read was successful.\nBlock data: "; - - byte[] write_data = new byte[ret_bytes]; - - Array.Copy(linear_data, write_data, ret_bytes); - - txtStatus.Text += BitConverter.ToString(write_data).Replace("-", ":"); - - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - - private void btnLinearReadRK_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte[] linear_data = new byte[3440]; - byte sector_key_index = 0; - ushort linear_address = 0, linear_length = 0, ret_bytes = 0; - byte dl_card_type = 0, auth_mode = 0; - - - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - if (rbLinearReadKeyARK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; - - } - else if (rbLinearReadKeyBRK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - - sector_key_index = Byte.Parse(cbLinearReadReaderKeyRK.Text); - - linear_address = Convert.ToUInt16(txtLinearAddressRK.Text); - - linear_length = Convert.ToUInt16(txtBytesForReadRK.Text); - - status = (UInt32)uFCoder.LinearRead(linear_data, linear_address, linear_length, out ret_bytes, auth_mode, sector_key_index); - - if (status > 0) - { - txtStatus.Text = "Linear read was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Linear read was successful.\nBlock data: "; - - byte[] write_data = new byte[ret_bytes]; - - Array.Copy(linear_data, write_data, ret_bytes); - - txtStatus.Text += BitConverter.ToString(write_data).Replace("-", ":"); - - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - - private void btnLinearReadAKM1_Click(object sender, EventArgs e) - { - //AKM1 - - DL_STATUS status; - byte[] linear_data = new byte[3440]; - ushort linear_address = 0, linear_length = 0, ret_bytes = 0; - byte dl_card_type = 0, auth_mode = 0; - - - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - if (rbLinearReadKeyAAKM1.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; - - } - else if (rbLinearReadKeyBAKM1.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - - linear_address = Convert.ToUInt16(txtLinearAddressAKM1.Text); - - linear_length = Convert.ToUInt16(txtBytesForReadAKM1.Text); - - status = (UInt32)uFCoder.LinearRead_AKM1(linear_data, linear_address, linear_length, out ret_bytes, auth_mode); - - if (status > 0) - { - txtStatus.Text = "Linear read was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Linear read was successful.\nBlock data: "; - - byte[] write_data = new byte[ret_bytes]; - - Array.Copy(linear_data, write_data, ret_bytes); - - txtStatus.Text += BitConverter.ToString(write_data).Replace("-", ":"); - - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - - } - - private void btnLinearReadAKM2_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte[] linear_data = new byte[3440]; - ushort linear_address = 0, linear_length = 0, ret_bytes = 0; - byte dl_card_type = 0, auth_mode = 0; - - - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - if (rbLinearReadKeyAAKM2.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; - - } - else if (rbLinearReadKeyBAKM2.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - - linear_address = Convert.ToUInt16(txtLinearAddressAKM2.Text); - - linear_length = Convert.ToUInt16(txtBytesForReadAKM2.Text); - - status = (UInt32)uFCoder.LinearRead_AKM2(linear_data, linear_address, linear_length, out ret_bytes, auth_mode); - - if (status > 0) - { - txtStatus.Text = "Linear read was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Linear read was successful.\nBlock data: "; - - byte[] write_data = new byte[ret_bytes]; - - Array.Copy(linear_data, write_data, ret_bytes); - - txtStatus.Text += BitConverter.ToString(write_data).Replace("-", ":"); - - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - - private void btnBlockWritePK_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte dl_card_type = 0, auth_mode = 0, block_nr = 0; - byte[] sector_key = new byte[16]; - byte[] block_data = new byte[16]; - - - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - if (((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1)) - { - if (txtBlockWriteKeyPK.TextLength != 12) - { - txtStatus.Text = "This card uses CRYPTO 1 key that should be 6 bytes long"; - return; - } - - sector_key = StringToByteArray(txtBlockWriteKeyPK.Text); - - if (rbBlockWriteKeyAPK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; - - } - else if (rbBlockWriteKeyBPK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - } - else - { - if (txtBlockWriteKeyPK.TextLength != 32) - { - txtStatus.Text = "This card uses AES key that should be 16 bytes long"; - return; - } - - sector_key = StringToByteArray(txtBlockWriteKeyPK.Text); - - if (rbBlockWriteKeyAPK.Checked) - { - auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1A; - } - else if (rbBlockWriteKeyBPK.Checked) - { - auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1B; - } - } - - - if (txtBlockData.TextLength > 32 || txtBlockData.TextLength < 1) - { - txtStatus.Text = "Data for Block Write must be max 16 bytes long"; - return; - } - - block_data = StringToByteArray(txtBlockData.Text); - - block_nr = Byte.Parse(cbBlockWriteBlockNrPK.Text); - - - status = (UInt32)uFCoder.BlockWrite_PK(block_data, block_nr, auth_mode, sector_key); - - if (status > 0) - { - txtStatus.Text = "Block write was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Block write was successful. "; - - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - - } - - private void btnBlockWriteRK_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte dl_card_type = 0, auth_mode = 0, block_nr = 0; - byte key_nr = 0; - byte[] block_data = new byte[16]; - - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - if (rbBlockWriteKeyARK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; - - } - else if (rbBlockWriteKeyBRK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - - if (txtBlockData.TextLength > 32 || txtBlockData.TextLength < 1) - { - txtStatus.Text = "Data for Block Write must be max 16 bytes long"; - return; - } - - block_data = StringToByteArray(txtBlockData.Text); - - block_nr = Byte.Parse(cbBlockWriteBlockNrRK.Text); - - key_nr = Byte.Parse(cbBlockWriteKeyIndexRK.Text); - - status = (UInt32)uFCoder.BlockWrite(block_data, block_nr, auth_mode, key_nr); - - if (status > 0) - { - txtStatus.Text = "Block write was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Block write was successful. "; - - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - - } - - private void btnBlockWriteAKM1_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte dl_card_type = 0, auth_mode = 0, block_nr = 0; - - byte[] block_data = new byte[16]; - - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - if (rbBlockWriteKeyAAKM1.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; - - } - else if (rbBlockWriteKeyBAKM1.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - - if (txtBlockData.TextLength > 32 || txtBlockData.TextLength < 1) - { - txtStatus.Text = "Data for Block Write must be max 16 bytes long"; - return; - } - - block_data = StringToByteArray(txtBlockData.Text); - - block_nr = Byte.Parse(cbBlockWriteBlockNrAKM1.Text); - - status = (UInt32)uFCoder.BlockWrite_AKM1(block_data, block_nr, auth_mode); - - if (status > 0) - { - txtStatus.Text = "Block write was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Block write was successful. "; - - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - - private void btnBlockWriteAKM2_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte dl_card_type = 0, auth_mode = 0, block_nr = 0; - - byte[] block_data = new byte[16]; - - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - if (rbBlockWriteKeyAAKM2.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; - - } - else if (rbBlockWriteKeyBAKM2.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - - if (txtBlockData.TextLength > 32 || txtBlockData.TextLength < 1) - { - txtStatus.Text = "Data for Block Write must be max 16 bytes long"; - return; - } - - block_data = StringToByteArray(txtBlockData.Text); - - block_nr = Byte.Parse(cbBlockWriteBlockNrAKM2.Text); - - status = (UInt32)uFCoder.BlockWrite_AKM2(block_data, block_nr, auth_mode); - - if (status > 0) - { - txtStatus.Text = "Block write was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Block write was successful. "; - - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - - private void btnBlockInSectorWritePK_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte dl_card_type = 0, auth_mode = 0, block_nr = 0, sector_nr = 0; - byte[] sector_key = new byte[16]; - byte[] block_data = new byte[16]; - - - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - if (((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1)) - { - if (txtBlockInSectorWriteKeyPK.TextLength != 12) - { - txtStatus.Text = "This card uses CRYPTO 1 key that should be 6 bytes long"; - return; - } - - sector_key = StringToByteArray(txtBlockInSectorWriteKeyPK.Text); - - if (rbBlockInSectorWriteKeyAPK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; - - } - else if (rbBlockInSectorWriteKeyBPK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - } - else - { - if (txtBlockInSectorWriteKeyPK.TextLength != 32) - { - txtStatus.Text = "This card uses AES key that should be 16 bytes long"; - return; - } - - sector_key = StringToByteArray(txtBlockInSectorWriteKeyPK.Text); - - if (rbBlockInSectorWriteKeyAPK.Checked) - { - auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1A; - } - else if (rbBlockInSectorWriteKeyBPK.Checked) - { - auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1B; - } - } - - - if (txtBlockInSectorData.TextLength > 32 || txtBlockInSectorData.TextLength < 1) - { - txtStatus.Text = "Data for Block in sector Write must be max 16 bytes long"; - return; - } - - block_data = StringToByteArray(txtBlockInSectorData.Text); - - block_nr = Byte.Parse(cbBlockInSectorWriteBlockNrPK.Text); - - sector_nr = Byte.Parse(cbBlockInSectorWriteSectorNrPK.Text); - - - status = (UInt32)uFCoder.BlockInSectorWrite_PK(block_data, sector_nr, block_nr, auth_mode, sector_key); - - if (status > 0) - { - txtStatus.Text = "Block in sector write was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Block in sector write was successful. "; - - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - - } - - private void btnBlockInSectorWriteRK_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte dl_card_type = 0, auth_mode = 0, block_nr = 0, sector_nr = 0; - byte key_nr = 0; - byte[] block_data = new byte[16]; - - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - if (rbBlockInSectorWriteKeyARK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; - - } - else if (rbBlockInSectorWriteKeyBRK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - - if (txtBlockInSectorData.TextLength > 32 || txtBlockInSectorData.TextLength < 1) - { - txtStatus.Text = "Data for Block in sector Write must be max 16 bytes long"; - return; - } - - block_data = StringToByteArray(txtBlockInSectorData.Text); - - sector_nr = Byte.Parse(cbBlockInSectorWriteSectorNrRK.Text); - - block_nr = Byte.Parse(cbBlockInSectorWriteBlockNrRK.Text); - - key_nr = Byte.Parse(cbBlockInSectorWriteKeyIndexRK.Text); - - status = (UInt32)uFCoder.BlockInSectorWrite(block_data, sector_nr, block_nr, auth_mode, key_nr); - - if (status > 0) - { - txtStatus.Text = "Block in sector write was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Block in sector write was successful. "; - - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - - } - - private void btnBlockInSectorWriteAKM1_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte dl_card_type = 0, auth_mode = 0, block_nr = 0, sector_nr = 0; - - byte[] block_data = new byte[16]; - - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - if (rbBlockInSectorWriteKeyAAKM1.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; - - } - else if (rbBlockInSectorWriteKeyBAKM1.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - - if (txtBlockInSectorData.TextLength > 32 || txtBlockInSectorData.TextLength < 1) - { - txtStatus.Text = "Data for Block in sector Write must be max 16 bytes long"; - return; - } - - block_data = StringToByteArray(txtBlockInSectorData.Text); - - sector_nr = Byte.Parse(cbBlockInSectorWriteSectorNrAKM1.Text); - - block_nr = Byte.Parse(cbBlockInSectorWriteBlockNrAKM1.Text); - - status = (UInt32)uFCoder.BlockInSectorWrite_AKM1(block_data, sector_nr, block_nr, auth_mode); - - if (status > 0) - { - txtStatus.Text = "Block in sector write was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Block in sector write was successful. "; - - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - - private void btnBlockInSectorWriteAKM2_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte dl_card_type = 0, auth_mode = 0, block_nr = 0, sector_nr = 0; - - byte[] block_data = new byte[16]; - - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - if (rbBlockInSectorWriteKeyAAKM2.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; - - } - else if (rbBlockInSectorWriteKeyBAKM2.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - - if (txtBlockInSectorData.TextLength > 32 || txtBlockInSectorData.TextLength < 1) - { - txtStatus.Text = "Data for Block in sector Write must be max 16 bytes long"; - return; - } - - block_data = StringToByteArray(txtBlockInSectorData.Text); - - sector_nr = Byte.Parse(cbBlockInSectorWriteSectorNrAKM2.Text); - - block_nr = Byte.Parse(cbBlockInSectorWriteBlockNrAKM2.Text); - - status = (UInt32)uFCoder.BlockInSectorWrite_AKM1(block_data, sector_nr, block_nr, auth_mode); - - if (status > 0) - { - txtStatus.Text = "Block in sector write was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Block in sector write was successful. "; - - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - - private void btnLinearWritePK_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte[] linear_data = new byte[3440]; - byte[] sector_key = new byte[16]; - ushort linear_address = 0, linear_length = 0, ret_bytes = 0; - byte dl_card_type = 0, auth_mode = 0; - - - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - - if (((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1)) - { - if (txtLinearWriteKeyPK.TextLength != 12) - { - txtStatus.Text = "This card uses CRYPTO 1 key that should be 6 bytes long"; - return; - } - - sector_key = StringToByteArray(txtLinearWriteKeyPK.Text); - - if (rbLinearWriteKeyAPK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; - - } - else if (rbLinearWriteKeyBPK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - } - else - { - if (txtLinearWriteKeyPK.TextLength != 32) - { - txtStatus.Text = "This card uses AES key that should be 16 bytes long"; - return; - } - - sector_key = StringToByteArray(txtLinearWriteKeyPK.Text); - - if (rbLinearWriteKeyAPK.Checked) - { - auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1A; - } - else if (rbLinearWriteKeyBPK.Checked) - { - auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1B; - } - } - - linear_address = Convert.ToUInt16(txtLinearWriteAddressPK.Text); - - linear_data = StringToByteArray(txtLinearWriteData.Text); - - linear_length = Convert.ToUInt16(linear_data.Length); - - status = (UInt32)uFCoder.LinearWrite_PK(linear_data, linear_address, linear_length, out ret_bytes, auth_mode, sector_key); - - if (status > 0) - { - txtStatus.Text = "Linear write was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Linear write was successful."; - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - - private void btnLinearWriteRK_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte[] linear_data = new byte[3440]; - byte sector_key_index = 0; - ushort linear_address = 0, linear_length = 0, ret_bytes = 0; - byte dl_card_type = 0, auth_mode = 0; - - - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - if (rbLinearWriteKeyARK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; - - } - else if (rbLinearWriteKeyBRK.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - - linear_data = StringToByteArray(txtLinearWriteData.Text); - - sector_key_index = Byte.Parse(cbLinearWriteKeyIndexRK.Text); - - linear_address = Convert.ToUInt16(txtLinearWriteAddressRK.Text); - - linear_length = Convert.ToUInt16(txtLinearWriteData.TextLength); - - status = (UInt32)uFCoder.LinearWrite(linear_data, linear_address, linear_length, out ret_bytes, auth_mode, sector_key_index); - - if (status > 0) - { - txtStatus.Text = "Linear write was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Linear write was successful. "; - - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - - private void btnLinearWriteAKM1_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte[] linear_data = new byte[3440]; - - ushort linear_address = 0, linear_length = 0, ret_bytes = 0; - byte dl_card_type = 0, auth_mode = 0; - - - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - if (rbLinearWriteKeyAAKM1.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; - - } - else if (rbLinearWriteKeyBAKM1.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - - linear_data = StringToByteArray(txtLinearWriteData.Text); - - linear_address = Convert.ToUInt16(txtLinearWriteAddressAKM1.Text); - - linear_length = Convert.ToUInt16(txtLinearWriteData.TextLength); - - status = (UInt32)uFCoder.LinearWrite_AKM1(linear_data, linear_address, linear_length, out ret_bytes, auth_mode); - - if (status > 0) - { - txtStatus.Text = "Linear write was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Linear write was successful. "; - - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); - } - - private void btnLinearWriteAKM2_Click(object sender, EventArgs e) - { - DL_STATUS status; - byte[] linear_data = new byte[3440]; - - ushort linear_address = 0, linear_length = 0, ret_bytes = 0; - byte dl_card_type = 0, auth_mode = 0; - - - status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); - - if (status > 0) - { - txtStatus.Text = "Communication with card failed."; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || - ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) - { - txtStatus.Text = "Card is not in security level 1 or 3 mode"; - return; - } - - if (rbLinearWriteKeyAAKM2.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; - - } - else if (rbLinearWriteKeyBAKM2.Checked) - { - auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; - } - - linear_data = StringToByteArray(txtLinearWriteData.Text); - - linear_address = Convert.ToUInt16(txtLinearWriteAddressAKM2.Text); - - linear_length = Convert.ToUInt16(txtLinearWriteData.TextLength); - - status = (UInt32)uFCoder.LinearWrite_AKM2(linear_data, linear_address, linear_length, out ret_bytes, auth_mode); - - if (status > 0) - { - txtStatus.Text = "Linear write was NOT successful"; - toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - return; - } - - txtStatus.Text = "Linear write was successful. "; - - toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using uFR; + + + +namespace mifare_plus_c_sharp +{ + + using DL_STATUS = System.UInt32; + + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + + + + public static byte[] StringToByteArray(string hex) + { + return Enumerable.Range(0, hex.Length) + .Where(x => x % 2 == 0) + .Select(x => Convert.ToByte(hex.Substring(x, 2), 16)) + .ToArray(); + } + + private void timer2_Tick(object sender, EventArgs e) + { + DL_STATUS status = 0; + + byte cardtype_val = 0, sak = 0, uid_size = 0; + byte[] uid = new byte[10]; + + status = (UInt32)uFCoder.GetDlogicCardType(out cardtype_val); + + if (status > 0) + { + //toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + txtCardType.Text = uFCoder.status2str((uFR.DL_STATUS)status); + txtCardUID.Text = BitConverter.ToString(uid).Replace("-", ":"); + return; + } + + txtCardType.Text = Enum.GetName(typeof(DLOGIC_CARD_TYPE), cardtype_val); + + status = (UInt32)uFCoder.GetCardIdEx(out sak, uid, out uid_size); + + txtCardUID.Text = BitConverter.ToString(uid).Replace("-", ":"); + + //toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + + + + + private void btnPersonalizeCard_Click(object sender, EventArgs e) + { + DL_STATUS status; + + byte[] master_key = new byte[16]; + byte[] config_key = new byte[16]; + byte[] l2_sw_key = new byte[16]; + byte[] l3_sw_key = new byte[16]; + byte[] l1_auth_key = new byte[16]; + byte[] sel_vc_key = new byte[16]; + byte[] prox_chk_key = new byte[16]; + byte[] vc_poll_enc_key = new byte[16]; + byte[] vc_poll_mac_key = new byte[16]; + byte dl_card_type = 0; + + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "No card in RF field found for Personalization"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + //check if card type S in SL0 + if (!((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL0 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_X_4K_SL0)) + { + txtStatus.Text = "Card is not in security level 0 mode."; + return; + } + + /* if (dl_card_type == DL_MIFARE_PLUS_S_2K_SL0 || dl_card_type == DL_MIFARE_PLUS_S_4K_SL0) + { + } */ + + if (txtPersonalizeCardMasterKey.TextLength != 32) + { + txtStatus.Text = "Master key must be 16 bytes long!"; + return; + } + + if (txtPersonalizeConfigurationKey.TextLength != 32) + { + txtStatus.Text = "Card configuration key must be 16 bytes long!"; + return; + } + + if (txtPersonalizeLevel2Key.TextLength != 32) + { + txtStatus.Text = "Level 2 switch key must be 16 bytes long!"; + return; + } + + if (txtPersonalizeLevel3Key.TextLength != 32) + { + txtStatus.Text = "Level 3 switch key must be 16 bytes long!"; + return; + } + + if (txtPersonalizeLevel1Key.TextLength != 32) + { + txtStatus.Text = "SL1 card authentication key must be 16 bytes long!"; + return; + } + + if ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_X_2K_SL0 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_X_4K_SL0) + { + if (txtPersonalizeSelectVCKey.TextLength != 32) + { + txtStatus.Text = "Select VC key must be 16 bytes long!"; + return; + } + + if (txtPersonalizeProximityCheckKey.TextLength != 32) + { + txtStatus.Text = "Proximity check key must be 16 bytes long!"; + return; + } + } + + if (txtPersonalizeVCENCKey.TextLength != 32) + { + txtStatus.Text = "VC polling ENC key key must be 16 bytes long!"; + return; + } + + if (txtPersonalizeVCMACKey.TextLength != 32) + { + txtStatus.Text = "VC polling MAC key key must be 16 bytes long!"; + return; + } + + + // StringToByteArray(AESkeyTB.Text); + + master_key = StringToByteArray(txtPersonalizeCardMasterKey.Text); + + config_key = StringToByteArray(txtPersonalizeConfigurationKey.Text); + + l1_auth_key = StringToByteArray(txtPersonalizeLevel1Key.Text); + + l2_sw_key = StringToByteArray(txtPersonalizeLevel2Key.Text); + + l3_sw_key = StringToByteArray(txtPersonalizeLevel3Key.Text); + + sel_vc_key = StringToByteArray(txtPersonalizeSelectVCKey.Text); + + prox_chk_key = StringToByteArray(txtPersonalizeProximityCheckKey.Text); + + vc_poll_enc_key = StringToByteArray(txtPersonalizeVCENCKey.Text); + + vc_poll_mac_key = StringToByteArray(txtPersonalizeVCMACKey.Text); + + + status = (UInt32)uFCoder.MFP_PersonalizationMinimal(master_key, config_key, l2_sw_key, l3_sw_key, l1_auth_key, + sel_vc_key, prox_chk_key, vc_poll_enc_key, vc_poll_mac_key); + + if (status > 0) + { + txtStatus.Text = "Card personalization was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Card personalization successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + + private void btnAuthSL1_Click(object sender, EventArgs e) + { + DL_STATUS status; + + byte[] sl1_auth_key = new byte[16]; + + byte key_index = 0; + + if (rbChangeAuthPK.Checked) + { + if (txtAuthSL1AuthKey.TextLength != 32) + { + txtStatus.Text = "SL1 card authentication key must be 16 bytes long"; + return; + } + + sl1_auth_key = StringToByteArray(txtAuthSL1AuthKey.Text); + status = (UInt32)uFCoder.MFP_AesAuthSecurityLevel1_PK(sl1_auth_key); + + if (status > 0) + { + txtStatus.Text = "AES authentication on SL1 was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "AES authentication on SL1 successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + else + { + key_index = Byte.Parse(cbAuthSL1ReaderKeyIndex.Text); + + status = (UInt32)uFCoder.MFP_AesAuthSecurityLevel1(key_index); + + if (status > 0) + { + txtStatus.Text = "AES authentication on SL1 was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "AES authentication on SL1 successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + + } + + private void btnSwitchSL3_Click(object sender, EventArgs e) + { + DL_STATUS status; + + byte[] sl3_sw_key = new byte[16]; + byte key_index = 0; + + if (rbChangeAuthPK.Checked) + { + if (txtSwitchSL3AESkey.TextLength != 32) + { + txtStatus.Text = "Level 3 switch key must be 16 bytes long"; + return; + } + + sl3_sw_key = StringToByteArray(txtSwitchSL3AESkey.Text); + + status = (UInt32)uFCoder.MFP_SwitchToSecurityLevel3_PK(sl3_sw_key); + + if (status > 0) + { + txtStatus.Text = "Switch to SL3 was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Switch to SL3 successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + else + { + key_index = Byte.Parse(cbSwitchSL3ReaderKeyIndex.Text); + + status = (UInt32)uFCoder.MFP_SwitchToSecurityLevel3(key_index); + + if (status > 0) + { + txtStatus.Text = "Switch to SL3 was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Switch to SL3 successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + + } + + private void btnChangeMasterKey_Click(object sender, EventArgs e) + { + DL_STATUS status; + + byte[] old_master_key = new byte[16]; + byte[] new_master_key = new byte[16]; + byte key_index = 0; + + if (rbChangeAuthPK.Checked) + { + if (txtChangeMasterOldKey.TextLength != 32) + { + txtStatus.Text = "Old master key must be 16 bytes long"; + return; + } + + if (txtChangeMasterNewKey.TextLength != 32) + { + txtStatus.Text = "New master key must be 16 bytes long"; + return; + } + + old_master_key = StringToByteArray(txtChangeMasterOldKey.Text); + + new_master_key = StringToByteArray(txtChangeMasterNewKey.Text); + + status = (UInt32)uFCoder.MFP_ChangeMasterKey_PK(old_master_key, new_master_key); + + if (status > 0) + { + txtStatus.Text = "Master key change was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Master key change successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + else + { + if (txtChangeMasterNewKeyRK.TextLength != 32) + { + txtStatus.Text = "New master key must be 16 bytes long"; + return; + } + + new_master_key = StringToByteArray(txtChangeMasterNewKeyRK.Text); + + key_index = Byte.Parse(cbChangeMasterReaderKeyIndex.Text); + + status = (UInt32)uFCoder.MFP_ChangeMasterKey(key_index, new_master_key); + + if (status > 0) + { + txtStatus.Text = "Master key change was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Master key change successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + } + + private void btnChangeConfigurationKey_Click(object sender, EventArgs e) + { + DL_STATUS status; + + byte[] old_config_key = new byte[16]; + byte[] new_config_key = new byte[16]; + byte key_index = 0; + + if (rbChangeAuthPK.Checked) + { + if (txtChangeMasterOldKey.TextLength != 32) + { + txtStatus.Text = "Old configuration key must be 16 bytes long"; + return; + } + + if (txtChangeMasterNewKey.TextLength != 32) + { + txtStatus.Text = "New configuration key must be 16 bytes long"; + return; + } + + old_config_key = StringToByteArray(txtChangeConfigOldKey.Text); + + new_config_key = StringToByteArray(txtChangeConfigNewKey.Text); + + status = (UInt32)uFCoder.MFP_ChangeConfigurationKey_PK(old_config_key, new_config_key); + + if (status > 0) + { + txtStatus.Text = "Configuration key change was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Configuration key change successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + else + { + if (txtChangeConfigNewKeyRK.TextLength != 32) + { + txtStatus.Text = "New configuration key must be 16 bytes long"; + return; + } + + new_config_key = StringToByteArray(txtChangeConfigNewKeyRK.Text); + + key_index = Byte.Parse(cbChangeMasterReaderKeyIndex.Text); + + status = (UInt32)uFCoder.MFP_ChangeConfigurationKey(key_index, new_config_key); + + if (status > 0) + { + txtStatus.Text = "Configuration key change was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Configuration key change successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + } + + private void btnChangeAESSectorKey_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte[] old_sector_key = new byte[16]; + byte[] new_sector_key = new byte[16]; + byte key_index = 0, sector_nr = 0, auth_mode = 0; + + sector_nr = Byte.Parse(cbChangeSectorSectorNumber.Text); + + if (rbChangeSectorKeyA.Checked) + { + auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1A; + } + else if (rbChangeSectorKeyB.Checked) + { + auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1B; + } + else + { + txtStatus.Text = "You should select settings AES KEY A or B"; + return; + } + + if (rbChangeAuthPK.Checked) + { + if (txtChangeSectorOldKey.TextLength != 32) + { + txtStatus.Text = "Old sector key must be 16 bytes long"; + return; + } + + if (txtChangeSectorNewKey.TextLength != 32) + { + txtStatus.Text = "New sector key must be 16 bytes long"; + return; + } + + old_sector_key = StringToByteArray(txtChangeSectorOldKey.Text); + + new_sector_key = StringToByteArray(txtChangeSectorNewKey.Text); + + status = (UInt32)uFCoder.MFP_ChangeSectorKey_PK(sector_nr, auth_mode, old_sector_key, new_sector_key); + + if (status > 0) + { + txtStatus.Text = "Sector key change was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Sector key change successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + + } + else if (rbChangeAuthRK.Checked) + { + if (txtChangeSectorNewKeyRK.TextLength != 32) + { + txtStatus.Text = "New sector key must be 16 bytes long"; + return; + } + + new_sector_key = StringToByteArray(txtChangeConfigNewKeyRK.Text); + + key_index = Byte.Parse(cbChangeSectorKeyReaderIndex.Text); + + status = (UInt32)uFCoder.MFP_ChangeSectorKey(sector_nr, auth_mode, key_index, new_sector_key); + + if (status > 0) + { + txtStatus.Text = "Sector key change was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Sector key change successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + + } + + } + + private void btnFieldConfigurationSet_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte[] config_key = new byte[16]; + byte key_index = 0, rid_use = 0, prox_check_use = 0; + + //Proximity check for X and EV1 card is not implemented yet + prox_check_use = 0; + + //setting usage of random id or uid + if (rbFieldConfigUseRandomID.Checked) + { + rid_use = 1; + } + else if (rbFieldConfigUseUID.Checked) + { + rid_use = 0; + } + + if (rbChangeAuthPK.Checked) + { + + if (txtFieldConfigKey.TextLength != 32) + { + txtStatus.Text = "Field configuration key must be 16 bytes long"; + return; + } + + config_key = StringToByteArray(txtFieldConfigKey.Text); + + status = (UInt32)uFCoder.MFP_FieldConfigurationSet_PK(config_key, rid_use, prox_check_use); + + if (status > 0) + { + txtStatus.Text = "Field configuration set was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Field configuration set successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + + } + else if (rbChangeAuthRK.Checked) + { + key_index = Byte.Parse(cbFieldConfigReaderKeyIndex.Text); + + status = (UInt32)uFCoder.MFP_FieldConfigurationSet(key_index, rid_use, prox_check_use); + + if (status > 0) + { + txtStatus.Text = "Field configuration set was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Field configuration set successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + + } + + private void btnGetCardUID_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte[] vc_enc_key = new byte[16]; + byte[] vc_mac_key = new byte[16]; + byte key_index_enc = 0, key_index_mac = 0, uid_len = 0; + byte[] uid = new byte[10]; + + if (rbChangeAuthPK.Checked) + { + if (txtGetCardUIDENCKey.TextLength != 32) + { + txtStatus.Text = "VC polling ENC key must be 16 bytes long"; + return; + } + + if (txtGetCardUIDMACKey.TextLength != 32) + { + txtStatus.Text = "VC polling MAC key must be 16 bytes long"; + return; + } + + vc_enc_key = StringToByteArray(txtGetCardUIDENCKey.Text); + + vc_mac_key = StringToByteArray(txtGetCardUIDMACKey.Text); + + status = (UInt32)uFCoder.MFP_GetUid_PK(vc_enc_key, vc_mac_key, uid, out uid_len); + + if (status > 0) + { + txtStatus.Text = "Get UID was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + txtStatus.Text = "Get UID was successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + txtUID_Get.Text = BitConverter.ToString(uid).Replace("-", ":"); + + } + else if (rbChangeAuthRK.Checked) + { + key_index_enc = Byte.Parse(cbGetCardUIDENCKeyRK.Text); + + key_index_mac = Byte.Parse(cbGetCardUIDMACKeyRK.Text); + + status = (UInt32)uFCoder.MFP_GetUid(key_index_enc, key_index_mac, uid, out uid_len); + + if (status > 0) + { + txtStatus.Text = "Get UID was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + txtStatus.Text = "Get UID was successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + txtUID_Get.Text = BitConverter.ToString(uid).Replace("-", ":"); + + } + } + + private void btnChangeVCPollingENCKey_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte[] config_key = new byte[16]; + byte[] new_vc_enc_key = new byte[16]; + byte key_index = 0; + + if (rbChangeAuthPK.Checked) + { + if (txtChangeVCPollingENCConfigKey.TextLength != 32) + { + txtStatus.Text = "Card configuration key must be 16 bytes long"; + return; + } + + if (txtChangeVCPollingENCNewKey.TextLength != 32) + { + txtStatus.Text = "New VC polling ENC key must be 16 bytes long"; + return; + } + + config_key = StringToByteArray(txtChangeVCPollingENCConfigKey.Text); + + new_vc_enc_key = StringToByteArray(txtChangeVCPollingENCNewKey.Text); + + status = (UInt32)uFCoder.MFP_ChangeVcPollingEncKey_PK(config_key, new_vc_enc_key); + + if (status > 0) + { + txtStatus.Text = "VC polling ENC key change was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "VC polling ENC key change was successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + + } + else if (rbChangeAuthRK.Checked) + { + key_index = Byte.Parse(cbChangeVCPollingENCReaderKeyIndex.Text); + + if (txtChangeVCPollingENCNewKeyRK.TextLength != 32) + { + txtStatus.Text = "New VC polling ENC key must be 16 bytes long"; + return; + } + + new_vc_enc_key = StringToByteArray(txtChangeVCPollingENCNewKeyRK.Text); + + status = (UInt32)uFCoder.MFP_ChangeVcPollingEncKey(key_index, new_vc_enc_key); + + if (status > 0) + { + txtStatus.Text = "VC polling ENC key change was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "VC polling ENC key change was successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + + } + + } + + private void btnChangeVCPollingMACKey_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte[] config_key = new byte[16]; + byte[] new_vc_mac_key = new byte[16]; + byte key_index = 0; + + if (rbChangeAuthPK.Checked) + { + if (txtChangeVCPollingMACConfigKey.TextLength != 32) + { + txtStatus.Text = "Card configuration key must be 16 bytes long"; + return; + } + + if (txtChangeVCPollingMACNewKey.TextLength != 32) + { + txtStatus.Text = "New VC polling MAC key must be 16 bytes long"; + return; + } + + config_key = StringToByteArray(txtChangeVCPollingMACConfigKey.Text); + + new_vc_mac_key = StringToByteArray(txtChangeVCPollingMACNewKey.Text); + + status = (UInt32)uFCoder.MFP_ChangeVcPollingMacKey_PK(config_key, new_vc_mac_key); + + if (status > 0) + { + txtStatus.Text = "VC polling MAC key change was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "VC polling MAC key change was successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + + } + else if (rbChangeAuthRK.Checked) + { + key_index = Byte.Parse(cbChangeVCPollingMACReaderKeyIndex.Text); + + if (txtChangeVCPollingMACNewKeyRK.TextLength != 32) + { + txtStatus.Text = "New VC polling MAC key must be 16 bytes long"; + return; + } + + new_vc_mac_key = StringToByteArray(txtChangeVCPollingMACNewKeyRK.Text); + + status = (UInt32)uFCoder.MFP_ChangeVcPollingMacKey(key_index, new_vc_mac_key); + + if (status > 0) + { + txtStatus.Text = "VC polling MAC key change was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "VC polling MAC key change was successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + + } + } + + private void btnCrypto1KeyInput_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte[] crypto_key = new byte[6]; + byte key_index = 0; + + if (txtCrypto1Key.TextLength != 12) + { + txtStatus.Text = "Crypto key must be 6 bytes long"; + return; + } + + crypto_key = StringToByteArray(txtCrypto1Key.Text); + + key_index = Byte.Parse(cbCrpytoReaderIndex.Text); + + status = (UInt32)uFCoder.ReaderKeyWrite(crypto_key, key_index); + if (status > 0) + { + txtStatus.Text = "CRYPTO 1 key writing was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "CRYPTO 1 key writing was successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + + + } + + private void btnAesKeyInput_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte[] aes_key = new byte[16]; + byte key_index = 0; + + if (txtAESKey.TextLength != 32) + { + txtStatus.Text = "AES key must be 16 bytes long"; + return; + } + + aes_key = StringToByteArray(txtAESKey.Text); + + key_index = Byte.Parse(cbAESIndex.Text); + + status = (UInt32)uFCoder.uFR_int_DesfireWriteAesKey(key_index, aes_key); + + if (status > 0) + { + txtStatus.Text = "AES key writing was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "AES key writing was successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + + private void btnUnlockReader_Click(object sender, EventArgs e) + { + DL_STATUS status; + String password = ""; + + if (txtUnlockPassword.TextLength != 8) + { + txtStatus.Text = "Password must be 8 characters long"; + return; + } + + password = txtUnlockPassword.Text; + + status = (UInt32)uFCoder.ReaderKeysUnlock(password.ToCharArray()); + + if (status > 0) + { + txtStatus.Text = "Reader unlocking was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Reader unlocking was successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + + + } + + private void btnLockReader_Click(object sender, EventArgs e) + { + DL_STATUS status; + String password = ""; + + if (txtLockPassword.TextLength != 8) + { + txtStatus.Text = "Password must be 8 characters long"; + return; + } + + password = txtLockPassword.Text; + + status = (UInt32)uFCoder.ReaderKeysLock(password.ToCharArray()); + + if (status > 0) + { + txtStatus.Text = "Reader locking was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Reader locking was successful"; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + + private void TabPage6_Click(object sender, EventArgs e) + { + + } + + private void btnBlockReadPK_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte dl_card_type = 0; + byte auth_mode = 0, block_address = 0; + byte[] crypto_key = new byte[6]; + byte[] aes_key = new byte[16]; + byte[] block_data = new byte[16]; + + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + //Using AES or CRYPTO key depending on following check of card type + + if (((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1)) + { + //" (1) - Provided CRYPTO 1 key\n PK" + if (rbBlockReadKeyAPK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; // auth mode check + + } + else if (rbBlockReadKeyBPK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + + if (txtBlockReadKeyPK.TextLength != 12) + { + txtStatus.Text = "This card uses CRYPTO 1 key that should be 6 bytes long"; + return; + } + + crypto_key = StringToByteArray(txtBlockReadKeyPK.Text); + + block_address = Byte.Parse(cbBlockReadBlockNrPK.Text); + + status = (UInt32)uFCoder.BlockRead_PK(block_data, block_address, auth_mode, crypto_key); + + if (status > 0) + { + txtStatus.Text = "Block read was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Block read was successful.\nBlock data: "; + txtStatus.Text += BitConverter.ToString(block_data).Replace("-", ":"); + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + + } + else + { + //" (2) - Provided AES key\n PK" + if (rbBlockReadKeyAPK.Checked) + { + auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1A; // auth mode check + } + else if (rbBlockReadKeyBPK.Checked) + { + auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1B; + } + + if (txtBlockReadKeyPK.TextLength != 32) + { + txtStatus.Text = "This card uses AES key that should be 16 bytes long"; + return; + } + + aes_key = StringToByteArray(txtBlockReadKeyPK.Text); + + block_address = Byte.Parse(cbBlockReadBlockNrPK.Text); + + status = (UInt32)uFCoder.BlockRead_PK(block_data, block_address, auth_mode, aes_key); + + if (status > 0) + { + txtStatus.Text = "Block read was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Block read was successful.\nBlock data: "; + txtStatus.Text += BitConverter.ToString(block_data).Replace("-", ":"); + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + + } + + private void btnBlockReadRK_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte dl_card_type = 0; + byte auth_mode = 0, block_address = 0; + byte crypto_key_nr = 0; + byte aes_key_nr = 0; + byte[] block_data = new byte[16]; + + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + //Using AES or CRYPTO key depending on following check of card type + + if (((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1)) + { + //" (1) - Reader CRYPTO 1 key\n RK" + if (rbBlockReadKeyARK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; // auth mode check + + } + else if (rbBlockReadKeyBRK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + + crypto_key_nr = Byte.Parse(cbBlockReadKeyRK.Text); + + block_address = Byte.Parse(cbBlockReadBlockNrRK.Text); + + status = (UInt32)uFCoder.BlockRead(block_data, block_address, auth_mode, crypto_key_nr); + + if (status > 0) + { + txtStatus.Text = "Block read was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Block read was successful.\nBlock data: "; + txtStatus.Text += BitConverter.ToString(block_data).Replace("-", ":"); + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + + } + else + { + //" (2) - Reader AES key\n RK" + if (rbBlockReadKeyARK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; ; // auth mode check + } + else if (rbBlockReadKeyBRK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + + aes_key_nr = Byte.Parse(cbBlockReadKeyRK.Text); + + block_address = Byte.Parse(cbBlockReadBlockNrRK.Text); + + status = (UInt32)uFCoder.BlockRead(block_data, block_address, auth_mode, aes_key_nr); + + if (status > 0) + { + txtStatus.Text = "Block read was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Block read was successful.\nBlock data: "; + txtStatus.Text += BitConverter.ToString(block_data).Replace("-", ":"); + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + + } + + } + + private void btnBlockReadAKM1_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte dl_card_type = 0; + byte auth_mode = 0, block_address = 0; + byte[] block_data = new byte[16]; + + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + //" (1) - Provided CRYPTO 1 key\n AKM1" + if (rbBlockReadKeyAAKM1.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; // auth mode check + + } + else if (rbBlockReadKeyBAKM1.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + + block_address = Byte.Parse(cbBlockReadBlockNrAKM1.Text); + + status = (UInt32)uFCoder.BlockRead_AKM1(block_data, block_address, auth_mode); + + if (status > 0) + { + txtStatus.Text = "Block read was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Block read was successful.\nBlock data: "; + txtStatus.Text += BitConverter.ToString(block_data).Replace("-", ":"); + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + + private void btnBlockReadAKM2_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte dl_card_type = 0; + byte auth_mode = 0, block_address = 0; + byte[] block_data = new byte[16]; + + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + ////////////////AKM2/////////////////////" + if (rbBlockReadKeyAAKM2.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; // auth mode check + + } + else if (rbBlockReadKeyBAKM2.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + + block_address = Byte.Parse(cbBlockReadBlockNrAKM2.Text); + + status = (UInt32)uFCoder.BlockRead_AKM2(block_data, block_address, auth_mode); + + if (status > 0) + { + txtStatus.Text = "Block read was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Block read was successful.\nBlock data: "; + txtStatus.Text += BitConverter.ToString(block_data).Replace("-", ":"); + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + + } + + + private void btnBlockInSectorReadPK_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte[] block_data = new byte[16]; + byte[] sector_key = new byte[16]; + byte sector_nr = 0, block_nr = 0, auth_mode = 0; + byte dl_card_type = 0; + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + if (((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1)) + { + if (txtBlockInSectorReadKeyPK.TextLength != 12) + { + txtStatus.Text = "This card uses CRYPTO 1 key that should be 6 bytes long"; + return; + } + + sector_key = StringToByteArray(txtBlockInSectorReadKeyPK.Text); + + if (rbBlockInSectorReadKeyAPK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; + + } + else if (rbBlockInSectorReadKeyBPK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + + } + else + { + if (txtBlockInSectorReadKeyPK.TextLength != 32) + { + txtStatus.Text = "This card uses AES key that should be 16 bytes long"; + return; + } + + sector_key = StringToByteArray(txtBlockInSectorReadKeyPK.Text); + + if (rbBlockInSectorReadKeyAPK.Checked) + { + auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1A; + } + else if (rbBlockInSectorReadKeyBPK.Checked) + { + auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1B; + } + } + + sector_nr = Byte.Parse(cbBlockInSectorSectorNrPK.Text); + + block_nr = Byte.Parse(cbBlockInSectorBlockNrPK.Text); + + + status = (UInt32)uFCoder.BlockInSectorRead_PK(block_data, sector_nr, block_nr, auth_mode, sector_key); + + if (status > 0) + { + txtStatus.Text = "Block read was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Block read was successful.\nBlock data: "; + txtStatus.Text += BitConverter.ToString(block_data).Replace("-", ":"); + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + + } + + private void bnBlockInSectorReadRK_Click(object sender, EventArgs e) + { + //RK + DL_STATUS status; + byte[] block_data = new byte[16]; + byte sector_nr = 0, block_nr = 0, auth_mode = 0, key_nr = 0; + byte dl_card_type = 0; + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + + if (rbBlockInSectorReadKeyARK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; + } + else if (rbBlockInSectorReadKeyBRK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + + key_nr = Byte.Parse(cbBlockInSectorReadKeyRK.Text); + + sector_nr = Byte.Parse(cbBlockInSectorSectorNrRK.Text); + + block_nr = Byte.Parse(cbBlockInSectorBlockNrRK.Text); + + status = (UInt32)uFCoder.BlockInSectorRead(block_data, sector_nr, block_nr, auth_mode, key_nr); + + if (status > 0) + { + txtStatus.Text = "Block read was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Block read was successful.\nBlock data: "; + txtStatus.Text += BitConverter.ToString(block_data).Replace("-", ":"); + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + + private void btnBlockInSectoReadAKM1_Click(object sender, EventArgs e) + { + //AKM1 + DL_STATUS status; + byte[] block_data = new byte[16]; + byte sector_nr = 0, block_nr = 0, auth_mode = 0; + byte dl_card_type = 0; + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + if (rbBlockInSectorReadKeyAAKM1.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; + } + else if (rbBlockInSectorReadKeyBAKM1.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + + sector_nr = Byte.Parse(cbBlockInSectorSectorNrAKM1.Text); + + block_nr = Byte.Parse(cbBlockInSectorBlockNrAKM1.Text); + + status = (UInt32)uFCoder.BlockInSectorRead_AKM1(block_data, sector_nr, block_nr, auth_mode); + + if (status > 0) + { + txtStatus.Text = "Block read was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Block read was successful.\nBlock data: "; + txtStatus.Text += BitConverter.ToString(block_data).Replace("-", ":"); + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + + + private void btnBlockInSectorReadAKM2_Click(object sender, EventArgs e) + { + //AKM2 + DL_STATUS status; + byte[] block_data = new byte[16]; + byte sector_nr = 0, block_nr = 0, auth_mode = 0; + byte dl_card_type = 0; + + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + if (rbBlockInSectorReadKeyAAKM2.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; + } + else if (rbBlockInSectorReadKeyBAKM2.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + + sector_nr = Byte.Parse(cbBlockInSectorSectorNrAKM2.Text); + + block_nr = Byte.Parse(cbBlockInSectorBlockNrAKM2.Text); + + status = (UInt32)uFCoder.BlockInSectorRead_AKM2(block_data, sector_nr, block_nr, auth_mode); + + if (status > 0) + { + txtStatus.Text = "Block read was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Block read was successful.\nBlock data: "; + txtStatus.Text += BitConverter.ToString(block_data).Replace("-", ":"); + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + + private void btnLinearReadPK_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte[] linear_data = new byte[3440]; + byte[] sector_key = new byte[16]; + ushort linear_address = 0, linear_length = 0, ret_bytes = 0; + byte dl_card_type = 0, auth_mode = 0; + + + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + + if (((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1)) + { + if (txtLinearReadKeyPK.TextLength != 12) + { + txtStatus.Text = "This card uses CRYPTO 1 key that should be 6 bytes long"; + return; + } + + sector_key = StringToByteArray(txtLinearReadKeyPK.Text); + + if (rbLinearReadKeyAPK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; + + } + else if (rbLinearReadKeyBPK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + } + else + { + if (txtLinearReadKeyPK.TextLength != 32) + { + txtStatus.Text = "This card uses AES key that should be 16 bytes long"; + return; + } + + sector_key = StringToByteArray(txtLinearReadKeyPK.Text); + + if (rbLinearReadKeyAPK.Checked) + { + auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1A; + } + else if (rbLinearReadKeyBPK.Checked) + { + auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1B; + } + } + + linear_address = Convert.ToUInt16(txtLinearAddressPK.Text); + + linear_length = Convert.ToUInt16(txtBytesForReadPK.Text); + + status = (UInt32)uFCoder.LinearRead_PK(linear_data, linear_address, linear_length, out ret_bytes, auth_mode, sector_key); + + if (status > 0) + { + txtStatus.Text = "Linear read was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Linear read was successful.\nBlock data: "; + + byte[] write_data = new byte[ret_bytes]; + + Array.Copy(linear_data, write_data, ret_bytes); + + txtStatus.Text += BitConverter.ToString(write_data).Replace("-", ":"); + + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + + private void btnLinearReadRK_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte[] linear_data = new byte[3440]; + byte sector_key_index = 0; + ushort linear_address = 0, linear_length = 0, ret_bytes = 0; + byte dl_card_type = 0, auth_mode = 0; + + + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + if (rbLinearReadKeyARK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; + + } + else if (rbLinearReadKeyBRK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + + sector_key_index = Byte.Parse(cbLinearReadReaderKeyRK.Text); + + linear_address = Convert.ToUInt16(txtLinearAddressRK.Text); + + linear_length = Convert.ToUInt16(txtBytesForReadRK.Text); + + status = (UInt32)uFCoder.LinearRead(linear_data, linear_address, linear_length, out ret_bytes, auth_mode, sector_key_index); + + if (status > 0) + { + txtStatus.Text = "Linear read was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Linear read was successful.\nBlock data: "; + + byte[] write_data = new byte[ret_bytes]; + + Array.Copy(linear_data, write_data, ret_bytes); + + txtStatus.Text += BitConverter.ToString(write_data).Replace("-", ":"); + + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + + private void btnLinearReadAKM1_Click(object sender, EventArgs e) + { + //AKM1 + + DL_STATUS status; + byte[] linear_data = new byte[3440]; + ushort linear_address = 0, linear_length = 0, ret_bytes = 0; + byte dl_card_type = 0, auth_mode = 0; + + + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + if (rbLinearReadKeyAAKM1.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; + + } + else if (rbLinearReadKeyBAKM1.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + + linear_address = Convert.ToUInt16(txtLinearAddressAKM1.Text); + + linear_length = Convert.ToUInt16(txtBytesForReadAKM1.Text); + + status = (UInt32)uFCoder.LinearRead_AKM1(linear_data, linear_address, linear_length, out ret_bytes, auth_mode); + + if (status > 0) + { + txtStatus.Text = "Linear read was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Linear read was successful.\nBlock data: "; + + byte[] write_data = new byte[ret_bytes]; + + Array.Copy(linear_data, write_data, ret_bytes); + + txtStatus.Text += BitConverter.ToString(write_data).Replace("-", ":"); + + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + + } + + private void btnLinearReadAKM2_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte[] linear_data = new byte[3440]; + ushort linear_address = 0, linear_length = 0, ret_bytes = 0; + byte dl_card_type = 0, auth_mode = 0; + + + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + if (rbLinearReadKeyAAKM2.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; + + } + else if (rbLinearReadKeyBAKM2.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + + linear_address = Convert.ToUInt16(txtLinearAddressAKM2.Text); + + linear_length = Convert.ToUInt16(txtBytesForReadAKM2.Text); + + status = (UInt32)uFCoder.LinearRead_AKM2(linear_data, linear_address, linear_length, out ret_bytes, auth_mode); + + if (status > 0) + { + txtStatus.Text = "Linear read was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Linear read was successful.\nBlock data: "; + + byte[] write_data = new byte[ret_bytes]; + + Array.Copy(linear_data, write_data, ret_bytes); + + txtStatus.Text += BitConverter.ToString(write_data).Replace("-", ":"); + + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + + private void btnBlockWritePK_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte dl_card_type = 0, auth_mode = 0, block_nr = 0; + byte[] sector_key = new byte[16]; + byte[] block_data = new byte[16]; + + + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + if (((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1)) + { + if (txtBlockWriteKeyPK.TextLength != 12) + { + txtStatus.Text = "This card uses CRYPTO 1 key that should be 6 bytes long"; + return; + } + + sector_key = StringToByteArray(txtBlockWriteKeyPK.Text); + + if (rbBlockWriteKeyAPK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; + + } + else if (rbBlockWriteKeyBPK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + } + else + { + if (txtBlockWriteKeyPK.TextLength != 32) + { + txtStatus.Text = "This card uses AES key that should be 16 bytes long"; + return; + } + + sector_key = StringToByteArray(txtBlockWriteKeyPK.Text); + + if (rbBlockWriteKeyAPK.Checked) + { + auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1A; + } + else if (rbBlockWriteKeyBPK.Checked) + { + auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1B; + } + } + + + if (txtBlockData.TextLength > 32 || txtBlockData.TextLength < 1) + { + txtStatus.Text = "Data for Block Write must be max 16 bytes long"; + return; + } + + block_data = StringToByteArray(txtBlockData.Text); + + block_nr = Byte.Parse(cbBlockWriteBlockNrPK.Text); + + + status = (UInt32)uFCoder.BlockWrite_PK(block_data, block_nr, auth_mode, sector_key); + + if (status > 0) + { + txtStatus.Text = "Block write was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Block write was successful. "; + + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + + } + + private void btnBlockWriteRK_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte dl_card_type = 0, auth_mode = 0, block_nr = 0; + byte key_nr = 0; + byte[] block_data = new byte[16]; + + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + if (rbBlockWriteKeyARK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; + + } + else if (rbBlockWriteKeyBRK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + + if (txtBlockData.TextLength > 32 || txtBlockData.TextLength < 1) + { + txtStatus.Text = "Data for Block Write must be max 16 bytes long"; + return; + } + + block_data = StringToByteArray(txtBlockData.Text); + + block_nr = Byte.Parse(cbBlockWriteBlockNrRK.Text); + + key_nr = Byte.Parse(cbBlockWriteKeyIndexRK.Text); + + status = (UInt32)uFCoder.BlockWrite(block_data, block_nr, auth_mode, key_nr); + + if (status > 0) + { + txtStatus.Text = "Block write was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Block write was successful. "; + + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + + } + + private void btnBlockWriteAKM1_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte dl_card_type = 0, auth_mode = 0, block_nr = 0; + + byte[] block_data = new byte[16]; + + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + if (rbBlockWriteKeyAAKM1.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; + + } + else if (rbBlockWriteKeyBAKM1.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + + if (txtBlockData.TextLength > 32 || txtBlockData.TextLength < 1) + { + txtStatus.Text = "Data for Block Write must be max 16 bytes long"; + return; + } + + block_data = StringToByteArray(txtBlockData.Text); + + block_nr = Byte.Parse(cbBlockWriteBlockNrAKM1.Text); + + status = (UInt32)uFCoder.BlockWrite_AKM1(block_data, block_nr, auth_mode); + + if (status > 0) + { + txtStatus.Text = "Block write was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Block write was successful. "; + + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + + private void btnBlockWriteAKM2_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte dl_card_type = 0, auth_mode = 0, block_nr = 0; + + byte[] block_data = new byte[16]; + + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + if (rbBlockWriteKeyAAKM2.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; + + } + else if (rbBlockWriteKeyBAKM2.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + + if (txtBlockData.TextLength > 32 || txtBlockData.TextLength < 1) + { + txtStatus.Text = "Data for Block Write must be max 16 bytes long"; + return; + } + + block_data = StringToByteArray(txtBlockData.Text); + + block_nr = Byte.Parse(cbBlockWriteBlockNrAKM2.Text); + + status = (UInt32)uFCoder.BlockWrite_AKM2(block_data, block_nr, auth_mode); + + if (status > 0) + { + txtStatus.Text = "Block write was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Block write was successful. "; + + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + + private void btnBlockInSectorWritePK_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte dl_card_type = 0, auth_mode = 0, block_nr = 0, sector_nr = 0; + byte[] sector_key = new byte[16]; + byte[] block_data = new byte[16]; + + + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + if (((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1)) + { + if (txtBlockInSectorWriteKeyPK.TextLength != 12) + { + txtStatus.Text = "This card uses CRYPTO 1 key that should be 6 bytes long"; + return; + } + + sector_key = StringToByteArray(txtBlockInSectorWriteKeyPK.Text); + + if (rbBlockInSectorWriteKeyAPK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; + + } + else if (rbBlockInSectorWriteKeyBPK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + } + else + { + if (txtBlockInSectorWriteKeyPK.TextLength != 32) + { + txtStatus.Text = "This card uses AES key that should be 16 bytes long"; + return; + } + + sector_key = StringToByteArray(txtBlockInSectorWriteKeyPK.Text); + + if (rbBlockInSectorWriteKeyAPK.Checked) + { + auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1A; + } + else if (rbBlockInSectorWriteKeyBPK.Checked) + { + auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1B; + } + } + + + if (txtBlockInSectorData.TextLength > 32 || txtBlockInSectorData.TextLength < 1) + { + txtStatus.Text = "Data for Block in sector Write must be max 16 bytes long"; + return; + } + + block_data = StringToByteArray(txtBlockInSectorData.Text); + + block_nr = Byte.Parse(cbBlockInSectorWriteBlockNrPK.Text); + + sector_nr = Byte.Parse(cbBlockInSectorWriteSectorNrPK.Text); + + + status = (UInt32)uFCoder.BlockInSectorWrite_PK(block_data, sector_nr, block_nr, auth_mode, sector_key); + + if (status > 0) + { + txtStatus.Text = "Block in sector write was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Block in sector write was successful. "; + + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + + } + + private void btnBlockInSectorWriteRK_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte dl_card_type = 0, auth_mode = 0, block_nr = 0, sector_nr = 0; + byte key_nr = 0; + byte[] block_data = new byte[16]; + + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + if (rbBlockInSectorWriteKeyARK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; + + } + else if (rbBlockInSectorWriteKeyBRK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + + if (txtBlockInSectorData.TextLength > 32 || txtBlockInSectorData.TextLength < 1) + { + txtStatus.Text = "Data for Block in sector Write must be max 16 bytes long"; + return; + } + + block_data = StringToByteArray(txtBlockInSectorData.Text); + + sector_nr = Byte.Parse(cbBlockInSectorWriteSectorNrRK.Text); + + block_nr = Byte.Parse(cbBlockInSectorWriteBlockNrRK.Text); + + key_nr = Byte.Parse(cbBlockInSectorWriteKeyIndexRK.Text); + + status = (UInt32)uFCoder.BlockInSectorWrite(block_data, sector_nr, block_nr, auth_mode, key_nr); + + if (status > 0) + { + txtStatus.Text = "Block in sector write was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Block in sector write was successful. "; + + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + + } + + private void btnBlockInSectorWriteAKM1_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte dl_card_type = 0, auth_mode = 0, block_nr = 0, sector_nr = 0; + + byte[] block_data = new byte[16]; + + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + if (rbBlockInSectorWriteKeyAAKM1.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; + + } + else if (rbBlockInSectorWriteKeyBAKM1.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + + if (txtBlockInSectorData.TextLength > 32 || txtBlockInSectorData.TextLength < 1) + { + txtStatus.Text = "Data for Block in sector Write must be max 16 bytes long"; + return; + } + + block_data = StringToByteArray(txtBlockInSectorData.Text); + + sector_nr = Byte.Parse(cbBlockInSectorWriteSectorNrAKM1.Text); + + block_nr = Byte.Parse(cbBlockInSectorWriteBlockNrAKM1.Text); + + status = (UInt32)uFCoder.BlockInSectorWrite_AKM1(block_data, sector_nr, block_nr, auth_mode); + + if (status > 0) + { + txtStatus.Text = "Block in sector write was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Block in sector write was successful. "; + + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + + private void btnBlockInSectorWriteAKM2_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte dl_card_type = 0, auth_mode = 0, block_nr = 0, sector_nr = 0; + + byte[] block_data = new byte[16]; + + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + if (rbBlockInSectorWriteKeyAAKM2.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; + + } + else if (rbBlockInSectorWriteKeyBAKM2.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + + if (txtBlockInSectorData.TextLength > 32 || txtBlockInSectorData.TextLength < 1) + { + txtStatus.Text = "Data for Block in sector Write must be max 16 bytes long"; + return; + } + + block_data = StringToByteArray(txtBlockInSectorData.Text); + + sector_nr = Byte.Parse(cbBlockInSectorWriteSectorNrAKM2.Text); + + block_nr = Byte.Parse(cbBlockInSectorWriteBlockNrAKM2.Text); + + status = (UInt32)uFCoder.BlockInSectorWrite_AKM1(block_data, sector_nr, block_nr, auth_mode); + + if (status > 0) + { + txtStatus.Text = "Block in sector write was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Block in sector write was successful. "; + + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + + private void btnLinearWritePK_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte[] linear_data = new byte[3440]; + byte[] sector_key = new byte[16]; + ushort linear_address = 0, linear_length = 0, ret_bytes = 0; + byte dl_card_type = 0, auth_mode = 0; + + + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + + if (((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1)) + { + if (txtLinearWriteKeyPK.TextLength != 12) + { + txtStatus.Text = "This card uses CRYPTO 1 key that should be 6 bytes long"; + return; + } + + sector_key = StringToByteArray(txtLinearWriteKeyPK.Text); + + if (rbLinearWriteKeyAPK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; + + } + else if (rbLinearWriteKeyBPK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + } + else + { + if (txtLinearWriteKeyPK.TextLength != 32) + { + txtStatus.Text = "This card uses AES key that should be 16 bytes long"; + return; + } + + sector_key = StringToByteArray(txtLinearWriteKeyPK.Text); + + if (rbLinearWriteKeyAPK.Checked) + { + auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1A; + } + else if (rbLinearWriteKeyBPK.Checked) + { + auth_mode = (byte)MIFARE_PLUS_AES_AUTHENTICATION.MIFARE_PLUS_AES_AUTHENT1B; + } + } + + linear_address = Convert.ToUInt16(txtLinearWriteAddressPK.Text); + + linear_data = StringToByteArray(txtLinearWriteData.Text); + + linear_length = Convert.ToUInt16(linear_data.Length); + + status = (UInt32)uFCoder.LinearWrite_PK(linear_data, linear_address, linear_length, out ret_bytes, auth_mode, sector_key); + + if (status > 0) + { + txtStatus.Text = "Linear write was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Linear write was successful."; + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + + private void btnLinearWriteRK_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte[] linear_data = new byte[3440]; + byte sector_key_index = 0; + ushort linear_address = 0, linear_length = 0, ret_bytes = 0; + byte dl_card_type = 0, auth_mode = 0; + + + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + if (rbLinearWriteKeyARK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; + + } + else if (rbLinearWriteKeyBRK.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + + linear_data = StringToByteArray(txtLinearWriteData.Text); + + sector_key_index = Byte.Parse(cbLinearWriteKeyIndexRK.Text); + + linear_address = Convert.ToUInt16(txtLinearWriteAddressRK.Text); + + linear_length = Convert.ToUInt16(txtLinearWriteData.TextLength); + + status = (UInt32)uFCoder.LinearWrite(linear_data, linear_address, linear_length, out ret_bytes, auth_mode, sector_key_index); + + if (status > 0) + { + txtStatus.Text = "Linear write was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Linear write was successful. "; + + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + + private void btnLinearWriteAKM1_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte[] linear_data = new byte[3440]; + + ushort linear_address = 0, linear_length = 0, ret_bytes = 0; + byte dl_card_type = 0, auth_mode = 0; + + + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + if (rbLinearWriteKeyAAKM1.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; + + } + else if (rbLinearWriteKeyBAKM1.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + + linear_data = StringToByteArray(txtLinearWriteData.Text); + + linear_address = Convert.ToUInt16(txtLinearWriteAddressAKM1.Text); + + linear_length = Convert.ToUInt16(txtLinearWriteData.TextLength); + + status = (UInt32)uFCoder.LinearWrite_AKM1(linear_data, linear_address, linear_length, out ret_bytes, auth_mode); + + if (status > 0) + { + txtStatus.Text = "Linear write was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Linear write was successful. "; + + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); + } + + private void btnLinearWriteAKM2_Click(object sender, EventArgs e) + { + DL_STATUS status; + byte[] linear_data = new byte[3440]; + + ushort linear_address = 0, linear_length = 0, ret_bytes = 0; + byte dl_card_type = 0, auth_mode = 0; + + + status = (UInt32)uFCoder.GetDlogicCardType(out dl_card_type); + + if (status > 0) + { + txtStatus.Text = "Communication with card failed."; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + if (!(((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_4K_SL1 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL1) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_2K_SL3) || + ((DLOGIC_CARD_TYPE)dl_card_type >= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_S_2K_SL3 && (DLOGIC_CARD_TYPE)dl_card_type <= DLOGIC_CARD_TYPE.DL_MIFARE_PLUS_EV1_4K_SL3))) + { + txtStatus.Text = "Card is not in security level 1 or 3 mode"; + return; + } + + if (rbLinearWriteKeyAAKM2.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1A; + + } + else if (rbLinearWriteKeyBAKM2.Checked) + { + auth_mode = (byte)MIFARE_AUTHENTICATION.MIFARE_AUTHENT1B; + } + + linear_data = StringToByteArray(txtLinearWriteData.Text); + + linear_address = Convert.ToUInt16(txtLinearWriteAddressAKM2.Text); + + linear_length = Convert.ToUInt16(txtLinearWriteData.TextLength); + + status = (UInt32)uFCoder.LinearWrite_AKM2(linear_data, linear_address, linear_length, out ret_bytes, auth_mode); + + if (status > 0) + { + txtStatus.Text = "Linear write was NOT successful"; + toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); + return; + } + + txtStatus.Text = "Linear write was successful. "; + + toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); } private void chkAdvanced_CheckedChanged(object sender, EventArgs e) @@ -2539,21 +2539,17 @@ namespace mifare_plus_c_sharp string port_interface = txtPortInterface.Text; string arg = txtArg.Text; - - StringBuilder port_name_build = new StringBuilder(port_name.Length); - port_name_build.Append(port_name); + try { UInt32 reader_type_int = Convert.ToUInt32(reader_type); UInt32 port_interface_int = (UInt32)port_interface[0]; - StringBuilder arg_str = new StringBuilder(arg.Length); - arg_str.Append(arg); - status = (UInt32)uFCoder.ReaderOpenEx(reader_type_int, port_name_build, port_interface_int, arg_str); + status = (UInt32)uFCoder.ReaderOpenEx(reader_type_int, port_name, port_interface_int, arg); if (status > 0) { txtStatus.Text = "ReaderOpenEx was NOT successful."; toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); //return; - } + } else { txtStatus.Text = "ReaderOpenEx was successful. "; @@ -2562,8 +2558,12 @@ namespace mifare_plus_c_sharp uFCoder.ReaderUISignal(1, 1); tmrCardReading.Start(); - - + } + } + catch (Exception er) + { + MessageBox.Show("Invalid Advanced options parameters, please check your input and try again!"); + } } else { DL_STATUS status = 0; @@ -2572,19 +2572,22 @@ namespace mifare_plus_c_sharp if (status > 0) { - txtStatus.Text = "ReaderOpenEx was NOT successful."; + txtStatus.Text = "ReaderOpen was NOT successful."; toolStripStatusLabel1.Text = "Error: " + uFCoder.status2str((uFR.DL_STATUS)status); - } + } else { - txtStatus.Text = "ReaderOpenEx was successful. "; + txtStatus.Text = "ReaderOpen was successful. "; toolStripStatusLabel1.Text = "Success: " + uFCoder.status2str((uFR.DL_STATUS)status); uFCoder.ReaderUISignal(1, 1); tmrCardReading.Start(); + } } + + } - } + } } \ No newline at end of file diff --git a/mifare_plus_c_sharp/bin/Debug/mifare_plus_c_sharp.exe b/mifare_plus_c_sharp/bin/Debug/mifare_plus_c_sharp.exe index 7a66900a297288fd9b249d06f83b2a573dd70b16..8719f12cd8b8fab610c7bb2be1aede7149df8d97 100644 GIT binary patch literal 195072 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 Uu)w23@j(ukt^Xqb|7?MO05}umbN~PV literal 194560 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

    =Z$us7T(dSZ2S}A^V}o^dzW>PU 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 diff --git a/mifare_plus_c_sharp/bin/Debug/mifare_plus_c_sharp.pdb b/mifare_plus_c_sharp/bin/Debug/mifare_plus_c_sharp.pdb index 819ac8ed590edb42d7e8e0c8e4a3b8d3c4400f7f..14def4a024555112d8af1165f885625b7de80b39 100644 GIT binary patch delta 15227 zcmeHud304pw*J|b+)DxpBqU@eqd*cu28IxZKmvpi2!SBjfJ^}b0Ra<0rEMkm25v|o z$WV|HS~Msiw1U9ZAU2}{g34qI58u-#I5oD2(Aaisi@a~2Q#VB4@AZ1q`u+1fYt{K` z*!AsQ)2=#|8^-}3#{r++L+rt0%OYC$Tlh_j!d1tV; zG!W?>Nolrlq}Rv~lLm$}r7-NqpHZVP!XT4{3}1P(dyp(lPGtIrlb2Jqq|O6<*XUv& zvv^A9BYtrpIHOgo+l>?{^HaJ6MmM9q2efD0u9V-By&bZX(SX!w0T`V6I>6mBErk5I z!v1D7VRBG1{fPDy?Z3m z7TKl8E&Cr0!(QA%cFc_SDsEx8?@zBKd9G)a?JDxiC2eNu`& zsz+L?vuGwc>dA489DgQfJUNTWSw+r9a$Xfx_lYH|gsV_gw-VLwi)BxVn#rQJv#9+- zEI%k#Y!`LO#ju5W_O$@Uh3ezITRWQN84GG#;GFxfpPN?yuNiPkzrltoD$F>FVD{JR4w={?I>|0%c%M!hfFfv{>?raP1e%o|Mn! z#QA*^KJ&Z#R0DMo&s6By{p@yx5X=DcbvyW}QNTUl(rZ}tn7b-6w=Y@nZfYF04v z&(DjL=WA^hYEmZ6BF9E@>>$Uh!Wk``Z;K`VVo8Bm8ZN4R#j-1+roCA1ExQhg zx7~m_U&?Uv!4<;el)u0iemK*h%J1P+q72Siek3?DeGv#0kGJ*uYBe5w@A z{=(@NRWYJ!qF8cGxXy{{V{+BNIKP|VUmK#EJNFQU%0CPY6l+6dRbHly8Wc>yGGkB- z-o=9w%y&Dvd{Aq|HVlfy`;|fc)3r(?#iO#69Baw36|E!3`@->qaAt|BmSV}j2-ly* zvSfKrUaTM7ntdNu882;h^AH881Bb|8mgfbCePQy){GM`uUXUCz#7|zzgUcz1l753z zl06;S)HqD|ZhL5W6CN!XK9Z z-{OBZKi>8Y__xYa`Q60UDEWOsrtCf>7%uQ;zeqWyASKk(F~OdWnJOF(Q6--r5@-7h zs?L+AhosRw`CUPRj4kj%&7^|Je_x-P>Q51ih4Yqtt{~3-E$U}Q%eM+r1)yW0xh^q! z9fsz&(|Wx;^~7l5Tq&JH6a4;)TAxRII^;0q-y9k!KL5`UER!X}5^R41!8%zxY#==F zX{5hHx?cWeSemGhk?#&)E_WCD$mvBP@=Re%SyL1wzby2X+l!)P!0?oQp3&p&3@f`k zjb$JA1UU|npQWm!E|SKvHWwfa;|uyuXy4wV)fhd(c$s7@1gIA+&nx@ z9Eq2UM=X~UihN{Qv7an23ZrmYTNEP)6}Oewr?-^Hic+#XBhdXP8tcfhha4A#vrtqO z3fJdi*$PoJRMdVY>gJ1;8RCgEGI2z#Y#8ZHkICU9(!^sOWag-N+0f62B4lx40^V^& zF?i<|MRJP~3mlo>(bGQdxjgL?PMfH*371n;cNNPjR>_8-uW?>ow(5h1F}QSy<; zMg|C^{};3@71ce&vW4yzl50jsQk1#fy)!zci&o`jdW{qsLJyH+sp&YN?XYlm z7FC^vYoVwP5zB7L4r3B*cfj2!hmYwg8dK!rv6*tts9>P&(v zm1pkD6oCIlRSBXhLAYj%>egb}3$o+bcpE|0bvb-&nz)`OA09tI9vSOH(b738R9+tI zBd?A>DR+-c8Q_^(Ii7(jBZnf#3*sbHO#s`Y}u5$K-0lpp4Wdi&$^62 zdCN5uLS)RiKzVFZl=Pk)Aa6_xmgVETW#VK%SvWC3u10*y#3;G@{*-RoPD=OKIfERl z$+3kT`^a&L9DkzPwZi!;QS~d~dRkQX5jFi~n+b7tFBmqXyZmuts2n~aQXu;6WXq++ z%8H5@ij`|B67b$UiQgIHBIV^t-iQ?!#*kg+PKmL#fW}x^GBN+B`%yYhaEm?r(FwMp zHcdG5L{*+})rsoPV%Z1s(!^N1Hw=i$gaKUz;J>Xr&C>x*n_(F}MvhhF*iDYtsWx0V z(?nI8a6K%l+lgf-5Yzy$KnixQVV5j8IP z+o^GWEx;WP$8PTDSKfec`MS&|uTJ$7;eF-rN;k@=k$n@j{YI06Wcz<@Zr(S9tEX^X z6xHRTrnCHJTCATB824vu#<*i(>@z)3?9cwMvlW)c+I_(`uD|@TI8@e_#t1|w&D;jB z;Y0Ueu|>*z%3^ts%GM@&HSJMs;xyA+z*VG*s#M{6NK}6&YT`uAMN#{*Sbj~c*dyv3 zylvc`kzj8LP2cC5nzCoc2#!8r?j165j-Q-R7$%3z@mo9BPX=I=%Q$OvFm-@K4sG(4 z9jxIf^Fe;#$VmCv#FSLe*z1X94G0W_&)g!Mk)kS6xTcEg7NYujQQJd4T^4U|1xrp2 zG%fkCEI}YzG<_op;L17l^LX7rKC6)ok0 z*?|IC{}bltABeO2gE=!_o_Qcu0N$NzIl_)jj&RVt?J{6)N`KuAq{kIL&e z%`H*;mRSCcSg}{Eyexk+H_p}?y0*#9bJN7O0y((iuIKAydcKz{OwT9Zs|b)sDuU%V zz?|{`xe#GWx#|0;6VCQO^E45ZNk8{?&0JkyQKRIL2V?DRpndQ#Iq$)){)2~E)7$*2 zkj@2>GIpppC7K>D(e!wUrpHTc@_32t@oaW1*+lc}B5Qt1if2_d9g1hO$6G^=z4&?* z&J0nNAzX_@b(pA$me^EDSACAi0vWbQ(1pGlHe z7KF>i3+)rxbWgn(QIFdYgfDp39fEqkT(6m)()otLbv*Uh_N%D35^~A99^2lM>#2&> z*r7jIm_Ekim3Z-s0J@(l$+4dtUz0P9oD0c$P*lyOrSFmJfT-@kGEmV~_vkU*qn(lO zd4kZRuga2#CR3I?`cRN980k;s`wtCk%OzYJ-)F`Y1YFK!K0JfUw8kY`?K{Q zdC?K~@eK>S_%xpSOoV&%rb|TMySqGdi)fKMZu3kp968;~x5Nu-bno2OO7Pij*R}}v zd)sf2@AWhu6f(9;dL_tx`FG`BU@hL2FKC8)!|pVJUElrI-c&)C+~2*t!izV^N8gNa zH@uo6u!FhJyoRFv?%M|-Ij+Au_3*P^(0%@OH1(uA<2Yz4-M@Y_U%+{}Uq3b9i#^Mk z*CN~_PX`Nu)xP+AgxhiU2com?$Ipiff!SaGhqd8jF*B{HOy-RDL67s%sZi#=H=^>o zui+>_>T6&z@CNXH;GcnIz+1q1!0TWC=)k-(zCn5c@Gronz;A&Kz`p^X)3^orJ<_iL ze*m5b{s?>@XtXpOp8*K?xnWcq0+BC};RXB>=ncFEv;pxcY1o1IA~RY5dCL0$aiBGP zfjCeZt$^5s41XXNv1ur71dY~63b+y&BiCH$)TSMlUZ61qAs=CmY;`fbbC?m1_yB|%2&o8(2yJ!fU}8IC zA*1~Jg_v&nMmwX-%(ZIfApX;u{zhxV7hT3HWf8)wGVfv~ed0cT@spPu>*%VUq^fMfDyjO7SUQQ%fjE+`$P{%G#me7HHDprStOG2=+yWmtmYkXvdX2f_&M@@&XPp*l%*Vd7sJ* zW=8Jh@{;)_bIltic9saHG}nM@gt*akUHb3J%$n-yRn#lfFs~d!X#zQu$T>BHxGe*8 zTfAX7KRm%b5B#J3yoy^zo!UjAsRt0a_`GgjM^(Ip&Tid3W5P?*{REg8`?ML5p! zL^AtosOJAv^W(y&=?MZqd8yW`DYd;1${P^4oX|g9pM5k7d#mg<6iVLgaz}OvrEbj5 z#usVwle`1qX-?h_f`yl2zyj$z~nn_1KID46TiL`ez$ z6F_d&XQ6lt0vDgsePy1dkZz$W*3rn6 z2;tZcS{_PIKQ!>>il;eg6-e)>uhvma`)eSa01+;}^Zz960@8h&)MIH_E0Yr*XVw)HeA;yqoC3EA{iqdebRMb}fu_E9Kbhrs3eSOq*eJx%ddCG|8iAk89AILck`}?%QPQ0$n)UnV?Ut^ zop$~KapnzI4^rG{gxH_-45{>#H8;Y`%y>`}Iwn}+9O9w7a!fwG}C)p{ev zxA%iFDUjjvq3{XK$I%am(Ma&m+DI{gS_^h;M5m%pn;h=U$qQyZT51hH7z{sk1tO?$ zdm|NMQ^~TPO58@0lrmHFfj3Ct-667QESv z1q(|SKD40gf`#+VURnqHe?VY)kBnz7k~JBp=*j4rGuO0==F|TyRP^_#$S++usC2=! z`LoIw&U(JRlFA)wNz&$|B zA7d{t4Cn@S0KN?D3~U7U1nvV40KN(w0o)H91N=R3D)0c1_jZ3H4 zLFk8&gfPD85WvQqR|lV=$bwU-&-T0pgyS>b2C~;V4dk9W0}KK3$t@gs7U=}wd0;Z| zT_C&RKd86{>L##*9crM6xW{G>vZO-KXsV&)cbi_($i7Ig)- z2X+H?0(Mswo2iq)9F=u==E@H1cv z@N;#0Gj*dnmGLY^4!wn3HtMfHuJtz{Z^UdI8}l8~*iVh`f$_k<13LnL1f~JuDI9%( zhE3H!OI_)dItAKsAvTLP90*@xL;$%jB7tmV6fhLXYFJ%+q$7dRzu09i{au(_5rq*+TkkhNq0SxZ+SYv~4LE#1{u z(Bj(zoc!U_mVX$K+#7|gtPd~%*cWI`^bt+-cnI>bEzR3P5#a;0{6HX2ytN%N|mvmI_ZPZI(FS)*rA}Z@p$i}P!vN5ZHY|I)U&ycl1_9_y{ zUT+3+Z+z3!KIfz(3_*AdVI9JY2*(gUMfd^X9?Z_Z2xAe-5!NBRh;S0& zGJ+3u#Uk`Y7>%$Hp$_3igku3lnsF5o1Log@z+3!SgmQ${2zT&A_@>=#!0PXdP~op; zzev%Q<50#u@C9CsbFmFDcF~xNFAGjzzL5v+|AJoNP=<2>2`DYhg-b3x# zNu4Us>)u+gTkq7>#%R_H+6ung;A$?7x3&CEZB4eu3XOrf_pk++^|orW@-+WW%bWqm zDP3W`Ry!1wV!Eg=IZo!n(qtCoOmN!6KCu0=U=<9*;}=u z3RUqEg~qkh-PB8W8|gW-S=))xf>>p?&K{%1AJ^i;HS0qf+w0y4*JiKO`Ea|Y_M^I9 zfj0l3F0a*A9n`o+>+51QtI{~F32fS~iF!JaRD~|5Mr@UcliYPfSe4u0vUt-%EGAn>*%Anhr$kni%EW#zDf9FIsW7BS)| zM{_^{g&1#BwMWD>0Et-6=)o`j2(-wEbr?=m6I|UA0s7={3VM)5Xo0HQLtXIgvwIH} z#^u1d31N6sEQ*`Xq&cjU%@l@ezn7B9P($`oOqjT9OHMk=>qk}YrCu~dy|R}&smpuu zJCrij&P^-u`M1eUq3z~iJQpD>MOcmS6vB3O-c1AXH}}AoDNPM}nbz4ap$(tf_vD69 zeIxl$JLTI*Ih3h}Hc}t8zmZz0)s2)yS?aY$oK$y6Z(GF0k5>P$V<_1z2w z$_LlG2Vvn16>^9Miy7%^(jmxXsEvnE*j0VZ&`l*DMvd-j_F+X)yE7yRrC>4 z;eAJt>ZR5)z_KH#0EI^Z(^Sz>sF<$SGL))|3^P>3>y+n}k)E!mzK$vx>S=%qe*+!x z>Fd-3N+aGdm5zS{#XVF#L#BF{GkdDG#{gMs)G<)?QuPca>YtCn*r_W1IOVGy$3e94 zI4XX@v6nfPbONz&5QFyQ6Vy*+q^sE{P&GsCIzfGMy7Dy{?;JRB;;$dV7&L1^`GX5e zkq$AEn&qcwrl+T8WZ;ArujNm&yuAESsLFYhd|I1HLyL7+_q|D7b0f5ZJ{=vr058~2qbM(&n&~}sLLn# zsCQ3N$0EMZYbr0{iwdi+`8tlQJ1BhakC-~UV0u%3TV5#PFb zII}Q*9?mW17GU0MS)9$r&??iM_~h}}8P!TPo`Rixr`E)od6$!~#k8H)U0E|ut4wpE z?Vi4=^Ha%hQS>Oj{c7Tzdbgaft~BS!S@Xusn>xq3ul4k~Rjzrb-)+BlYqjw$ijUx% zsV3eTcgy|SsEa5s;(H}ed9RGSZQ;8bGMZiBG;51hX6fvOdE;qIPM{k6HbuA2F*hiy zeA{BIN$Ui~-t5vu)3OCi3wt2Xjc*}}r;c{Y^73E)N>gYOr zSPC=OUXN(9mnu3>A#_CL{sE+qb--7qMf!cmrs$$X!&qS|w|RBu?;p0+)|i4_%!-am zZHn@rM7LXp)~mSpz&QhpXul;FgY}}Lm++aq+~S| zls2fN7csC~)Q1fF)prbMRJ(t|zI|a|?my9U-i;qnfH%2S;AI*ZSThFnvDRNWa-enl zzS7I|oWJh{Q1WwOU*L86jri%mjqJO6gJP*=119Y+pJ#?~6aB=!)j@w@{PKBbcE>ND zXP6Vee4hRCdGGzNi54jn_Xo^8}0E`u-bO=UYMm delta 14713 zcmeHud014(w(njA-GVj>f`E<4q=?9j1E?T~iYTBs z&pn?0u*Jq{wMWZl4{!H)#OIUvk9wn}f75^57`(i>XLQQ;5?&uY%=5s_Cik5;qSMIS ziZpZMAs!tw(Hw~EPlx!*m;?qm7!&B%_04Ly1yH6D^&Nb}~6o&9-!Y>Z^TAa)t0a_W@hov8~U z%}Z~d(CM%x91Nb+Yc)+g+)E)mH!j{U^bxl0!1hU}Bkp-J2cY_63?QK`1N2Kc3UD?} z3?z%}Q2Gd)VBRMwfJ&VslQ;oxC8sh|YtZ!L?K{g+OzWIz3PHJuZ|vN|@3*7q2W3OJ zXO|c%;_+SXn!nOC^G!34?%LMlrde~2PO2k*p<5f%zoFiPH+Jjf=g~ydq}3u}J%DE6 z@o59;E50Z##A6W6=OQh_bOY4I{6Ja*&se|h%?vBL?9xKFOAEfHXB4&IjhP|*N=95;r3P!`Qe!f+ z*_drVtBPk!5AwDdk*2?brw8ww(TREZ@W}36`KuWLd}enGe~{_>C=U-ek7D*Tv+ZM5 z5p3y3jYnoinr?!}D4v&@%0@Nk(|dO1doqLh+dVD(N@g(mLYv$UN)wVUih1ZlQ^+Qm z&B<)Hn0+5x;$V(Btfn&`-z&m&3+ytuqgM}>;j6Rzp_jp~P1b*j-9ffwJ#(yLH6{F| ztO(0(unTW#m`hwcKw>U*{%nJxJ{b9~NfwzHbASltnx(mT@hEo4{o zk-fY5RR{cf!dmj=?jh8YALt#%E3$*VUI7Cxp=Q@*TEbJVQs6N2|!eR?G+v09u<>_oDyB->_;muw$0+jq>K$n1Y- zOAa%~8CLy(x9b~jX@u+{SY>i)i^hZGFWx4 z1P1syw<}K?(6f~i@8J^91~Yplw-1Q2+y}kAt;;fpF!?73_%VCi|Fr8OUOX_$^gX&J z^16XJ2*YPl{sHA={@uVtmK?@^%8TTiGQGgBC_f7Ch{7PQEOEk{^P% z-{27LTM(D&npC;Z!AL1IoFW`>NdbqCn;RJQy!TWRAlgThTeK~fMe7?j9@+Ve{V z%k*)z##nNrUE@$u%QX&Wd&unfnPV!e4q!C{_~OBl=D&l>nrL1)C{V;7AuoP>urEXT zpW-)zRR^(}0)DwD()0lQ{Q1M8Zp=T1FCL_CP5jkC7CyMh%x_ONd&}L9VZ2su9}-4Z zzIjL(pIX$CpPSs2Ogy3}%w*PEY3RV7F8ibz_UTN|ORWb@jg;pT_X=7m`P=FqMT&~?aI{_j&vd~m6!Nye-YUNkHW=aDk~ z-7qX<)zEN$W>{RjlIx*Il340XWn{DI!33iBGkX-PYQr3(nd3)RbDFmw9%cF&f{J*- z@NTRqj(;_Di?=)`m>{DKPkwCRucJjAs>oJPww=u0npL%Aj={`vht*W^t&c^T z{~g?J#q)EIb!C8mlAV=R`7=imb2PG=B|LgWqzS>zT*nJWB(l0hUOl`k-#*I150CJo zP|QIP|3c3-l!ci*p>QbQJTA;6RS)IKBf~&bG%^bB?6D!dexxUI#mMa(8Q0t8Wm%xr zLrMwRIN7$rL}dGvY&U7;3T7Y1stTB6IjjDW)rPX#6Rd7ETegQiGmEXr;cZ7nS_s-D zr>Fq1<0zKnq)~n>IfXAC(VL?AkrAQ%@~D>l#)wmV=jgapC6$s~QgK9CPPR>CbCT@? zvR$XTvCLi|&nJ$hthx=W_2(_dM3@=GP-p)0Sge^bAq?3Cqk8l0W4y4jHk3v28>9Sr z*hn9Kc$_C{l1GN{FZ5gy;)I!(jSizGykT@0e`;*puXmbw>Q9TvwnEq8Fxf6q?cbTb zJF7}%jxtu=jMePoSH_0(q%odse-|i_BH_O+JkezU_cm7|#lr*$8V9NN-TV({hs#P~#3-i=Qmqen*mmvP~IZoVgl^P*{C{K^>Ys>1^K1K{!@ zzI@XJ*&-w3;R$iwU30BgVhZ)4p;SS(E%GE$)q*(+SoMBZ^Ji9D&FY5hC%^>u%x$(} zD~~RYG@Bs*VLC4?PGErh-4F(r&4`+CV%1mB`kf4*Uu z7Z0E6#TS;gk9GcuUk z>!)ttS#iCT`AAJxXZmea{B=kSW3{JP-E(Z&e)dcSTd|ryIV-~C1KqOu=2?j>JCFZ7 zLx#cZnMN3#I`dV2bM|jSkUY=*HVi%z0}*zo@&0qd&CS90+5kR#P6`8Dnx)4--e)#W zqh+2zcLd~9XXC^@(pQgx9dLq@G4Sl{FrGFqF3z=n+(+M1dP0wXJIHp3**mbRaON1N zZ;pTCH|K_%T0rb{?pKz|rsw~^ky<}5-0TafcMJI5d4>A+EAKEewOIYjyJs&feLS1w zsb4*~5;31B>;_%TqG(qOuT^JkZ4O&E;Vf z!;h3Bn3h@i&GKOWLz%@?Ja38?$;;;Y^E2h%zT+p(pEh%{ev5!B0=-ipA6VgS^3qG! z%3J4*pEkR~xTW!yb&uQ@fYtc&ig}tGi%Y31P^u1e|1!u>Rw~sDN(G5c4dlshRwNB~ zO_*HK%$G(}CE4B~+qYy-BzpohQs-q?Q6lJPC%2b`u*Y&i7sY-a+ z{P7s=#rggwf0XO_*YgLqlr6Hiyeyi4ge#SP3rfj@?^rO1iuuC@e&GW~vhB^B zg-;zN@^JbsK1MXk`BCL~Mj6g7Re*5knx)-5sM>k9=5a>x&c4e4L!1YeKhESg)4}Cd z=iq0@Fv@c7XlOy??L4rm1?@Zo2#RCUK=lYi;85KDXY;DHm!Rz2wtMf0f-XZV0L}^>n zUgdso`8)5tKGy?Wi{H#;M9$ZCCNga3&QEtIFe-O?zx9lV+~by=v^sab9mlW_SKWG+J>a$Y(;&qJ>IKkv6XC!7sna-pug zXm!?~e?THK5#AYd*BA(?Qeg!Z36y)@@C+Vz}>)~faib@faiff1HS-jO*I=1 z{~810xKXKjB7-%kH38x>Qu6}hno;uxT7k`g5kMbc3{VP;12#uF9@qky3G@Yy2DSu_ z0R{kP0Rw@{fWg33Kr8SCUA1DO_p}Y^k-< z@{p$Lc|WZ;uoNi)DTWWc9M!u_;_kPS@4Hc&#Rn~<;+G_rkzk`joJBZ<-EzSx{w zF;Bc$PZ46mT1vGtUo=x7B};j7Ood9^cH!4R{$^YYnD;W#bQPs^Is@)g@%gBoIu)GnAxTnKv+HujWL&P8#6wO&;^hWPP0@5a z!B<#iAW1v9cB}xoxba{YazBe8vV(YfHARK?ghpqOWOD~hgPhg>otVK%lDF+M_q2C) zO}paX)y-YQ64uO<#mF@j;uDPKrAV@Qvbe}8O71S*tYqlRY+Jxl>gzI*O=Pbjf0G?7 z)(fAt6y|dV-Fsp~lPuQ%!XnkpVwYm!QVD@af8c%YX9@US@DT5=d!vYN>yIf@|E~n*_Zh-!-0mtuDZ*4$M_T0Jo zbEZt2t#7|?gL^ylk@PN_w&L0bOn%yPlo$8JFRtSnR6C2oJM|F}%OD~_?0AksTFnHv zFOXz&0@i_?$4Gf-&EMwQxr87 zudJsL$@1!a6tjn`Id(~$+rkj_r5vbw>LKyEr$~67B7JT`gatIR{kj+qhWej6nu)sS zDU6zl*9gl2!MJ&29*6g#EC5w#Spl^LAT^~sFvN@1DgY-wo-c>Uv=$cfC%(j zM_>nFtmyI*bzna-G43U@=AHL6x_*3-qijAxS(^1SuoduQpftv(zzE>K0ONpH z#gUgNwbY2Zlu~e=s7r|gO8c|}J}RX>%2G-+P)g|llu}}V zQc6dlloBg;K?*}Ozx@iFCkfS3OfnD-t)&3vp~^=a_h>cnqP`bf9 zU>H!kh4i*^l%wpxl2J0DA);2j&150_6-W0va>Z9u|%kkH1RkmDk}K@(alo z$UB1Y2dNdFDs+%p2T&?l4U`Jj0Hwdy0_Ae41Iis}8Bn^wGeEg}Ee93=SC};WT;Q`P zF96B`JPoWjX_fk?OamIKQLzfR63BsTfvbU=fNOxS1J{DlS>QU9uK^{a>%jFWHv*pr z;(AE0mtQa&P;LX<2ux7*DZm#{mR~3@n#OCkp{n5zz)fhF0Nf0$QuWoqEhs+=d&w;NApV#S+?4()u{nmd(HEOk;Ksm#^fYSGOi^kU} zgneoj&EFtv>!VE!vSUDL=i@+W*ApW94T`F)M|K44Jr}7KX%EsFqz6a=h=l!-CLk?D zsz=(1bPDMXk{5in9a2xE2}lc(RwHdk`Vi?Rk{4vj{V5A+1kysJdZax_*z5eYJIHuJ z?{-K%k;eErBYe-%+P{%kWj*{U4XF&u$f5Q{h?ckreI%}d03G4k5+5qMY=yJ1@yPmk zg-@$Z^dmT+thcM9x=HaJuK1XY{u8zKP)HX5%SrqiFNq_S0`Dk>Sao{+5ykKXCPdO@ zE4pH(sE-oxky0pGG;XJ`k#&lEovLnB-SA5molS%)-%{OgDRzwzA;n~1;YeJk&|A^J zB8qoVVnm%XM|;)np=-EGT$y-h2X(02g(;O>E~-HltMUOw{+8l8TuJ#zv1_H+tpC~mmM8h8`s1nz&k@C^ zK+zvi7^=oKR?)XM`d4Zz6v0`=KwdmbJzFWkqy*I|y$>jiR}Sv26e>{t#wvrgQtf%F z|1RYlC91wb=Z|m7Y{lTL(y%}gn4l1{#sj7}^cZ*H&+_>2KrJQj`57 z^@1D@9yc?iC~H|ID#1rSSyDijo;6-}P@oy(k|e%3I^gAc!XZ~GfHJbbdKd;|3%AMr zO=GgRo5CwgC$z~b?2fn*6RUSoC-M}BcTs)>s_Ugb6pkDMss7gEr7nkMiTK?VOH7Q| zO<}>0D3g_Bkji(scy>3Xi!-~a9UT_8cH_5V6{5Y9o)LST6c9QA(>)VuA<|N$dZZ0V zuOjUcpE)Tbv7w(L__fi&h5d-$(DA-k0@1<1gCiY866SwzL zFG>;#`!JTyV$?pACX4m^(3URF?W07RxX;hZ7~8v_Ix_T*eHU7F6BFOnd#`;L^y%WV ztSlDI4?w^~G2j3yCy8YT@W=7V;?e=ip%M{zkovKbQZeozXp+SGgOn@Q9mHqc&4ZLd zDI)d|I;D!~hp2~`b_n%54^c9d{t^`s+xD<7_OZh#rHNG%px)pK*gRD(D^l)yC-vB%UtL8 za8Z*~DyF}O-bv!k_ozo!GS2Gy#-wRkxRz&HpK0ZD=aiSg3j(!{Sm>_$q^?OxNy+k$ z>XC~6ZAs7X%nuS-C&{b1Uepv>s(9=qr8JFIr1;Ky?BYVZ&;Xp)lBIPrXgCX=S>6bD6#UjqVPmxx6b>nV_@3>s#rjKa)CyZI%xwzWX5olcc$tw-g9=YduWXwjJ zG3IpmfJ^6aU-87BsBQCb1X35zNhJ;0E7zVOoTx?U8Om*XK}FdM7BTw_75c&#uU@r77Ta~h3Bao9zS?5%iLmg+>r zhoF-|;DXUeSm*B;+5K>JBTMC?LDD_MBHd>+%HMBnGP3f=7AkuWf7;w^41GXFTz zLt@ZHYSs2*e3{AbX8FLi+z%nwcu35?OjgrRpn;!U#w4X4CR{hlEMB^p9YWmYjl)N?1Kc>@FAnWjo0trRR7n$ss731&I6ic{{6V~`*8>7iT`hoJI$DW+*x~-JcG}l pSt)wB3A$a diff --git a/mifare_plus_c_sharp/bin/Release/mifare_plus_c_sharp.exe b/mifare_plus_c_sharp/bin/Release/mifare_plus_c_sharp.exe index 2e89d67b9c6a2ee3ff01e162ec94758713699700..5b89fd5533fcb268081172e62624388f5eeb24a4 100644 GIT binary patch literal 187392 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 J%kML=pqnurR> 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 M7LxvZ&wmU21ya=s&;S4c diff --git a/mifare_plus_c_sharp/bin/Release/mifare_plus_c_sharp.pdb b/mifare_plus_c_sharp/bin/Release/mifare_plus_c_sharp.pdb index 3f53e7798450145255b5647f43a8749e5f1310bd..4615d149300866b6cc581b3137891e6b687d7366 100644 GIT binary patch delta 12200 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 Mp(7z*QKZ}d0PezvNB{r; delta 11932 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 Uu)w23@j(ukt^Xqb|7?MO05}umbN~PV literal 194560 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

    =Z$us7T(dSZ2S}A^V}o^dzW>PU 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 diff --git a/mifare_plus_c_sharp/obj/Debug/mifare_plus_c_sharp.pdb b/mifare_plus_c_sharp/obj/Debug/mifare_plus_c_sharp.pdb index 819ac8ed590edb42d7e8e0c8e4a3b8d3c4400f7f..14def4a024555112d8af1165f885625b7de80b39 100644 GIT binary patch delta 15227 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 delta 14713 zcmeHud014(w(njA-GVj>f`E<4q=?9j1E?T~iYTBs z&pn?0u*Jq{wMWZl4{!H)#OIUvk9wn}f75^57`(i>XLQQ;5?&uY%=5s_Cik5;qSMIS ziZpZMAs!tw(Hw~EPlx!*m;?qm7!&B%_04Ly1yH6D^&Nb}~6o&9-!Y>Z^TAa)t0a_W@hov8~U z%}Z~d(CM%x91Nb+Yc)+g+)E)mH!j{U^bxl0!1hU}Bkp-J2cY_63?QK`1N2Kc3UD?} z3?z%}Q2Gd)VBRMwfJ&VslQ;oxC8sh|YtZ!L?K{g+OzWIz3PHJuZ|vN|@3*7q2W3OJ zXO|c%;_+SXn!nOC^G!34?%LMlrde~2PO2k*p<5f%zoFiPH+Jjf=g~ydq}3u}J%DE6 z@o59;E50Z##A6W6=OQh_bOY4I{6Ja*&se|h%?vBL?9xKFOAEfHXB4&IjhP|*N=95;r3P!`Qe!f+ z*_drVtBPk!5AwDdk*2?brw8ww(TREZ@W}36`KuWLd}enGe~{_>C=U-ek7D*Tv+ZM5 z5p3y3jYnoinr?!}D4v&@%0@Nk(|dO1doqLh+dVD(N@g(mLYv$UN)wVUih1ZlQ^+Qm z&B<)Hn0+5x;$V(Btfn&`-z&m&3+ytuqgM}>;j6Rzp_jp~P1b*j-9ffwJ#(yLH6{F| ztO(0(unTW#m`hwcKw>U*{%nJxJ{b9~NfwzHbASltnx(mT@hEo4{o zk-fY5RR{cf!dmj=?jh8YALt#%E3$*VUI7Cxp=Q@*TEbJVQs6N2|!eR?G+v09u<>_oDyB->_;muw$0+jq>K$n1Y- zOAa%~8CLy(x9b~jX@u+{SY>i)i^hZGFWx4 z1P1syw<}K?(6f~i@8J^91~Yplw-1Q2+y}kAt;;fpF!?73_%VCi|Fr8OUOX_$^gX&J z^16XJ2*YPl{sHA={@uVtmK?@^%8TTiGQGgBC_f7Ch{7PQEOEk{^P% z-{27LTM(D&npC;Z!AL1IoFW`>NdbqCn;RJQy!TWRAlgThTeK~fMe7?j9@+Ve{V z%k*)z##nNrUE@$u%QX&Wd&unfnPV!e4q!C{_~OBl=D&l>nrL1)C{V;7AuoP>urEXT zpW-)zRR^(}0)DwD()0lQ{Q1M8Zp=T1FCL_CP5jkC7CyMh%x_ONd&}L9VZ2su9}-4Z zzIjL(pIX$CpPSs2Ogy3}%w*PEY3RV7F8ibz_UTN|ORWb@jg;pT_X=7m`P=FqMT&~?aI{_j&vd~m6!Nye-YUNkHW=aDk~ z-7qX<)zEN$W>{RjlIx*Il340XWn{DI!33iBGkX-PYQr3(nd3)RbDFmw9%cF&f{J*- z@NTRqj(;_Di?=)`m>{DKPkwCRucJjAs>oJPww=u0npL%Aj={`vht*W^t&c^T z{~g?J#q)EIb!C8mlAV=R`7=imb2PG=B|LgWqzS>zT*nJWB(l0hUOl`k-#*I150CJo zP|QIP|3c3-l!ci*p>QbQJTA;6RS)IKBf~&bG%^bB?6D!dexxUI#mMa(8Q0t8Wm%xr zLrMwRIN7$rL}dGvY&U7;3T7Y1stTB6IjjDW)rPX#6Rd7ETegQiGmEXr;cZ7nS_s-D zr>Fq1<0zKnq)~n>IfXAC(VL?AkrAQ%@~D>l#)wmV=jgapC6$s~QgK9CPPR>CbCT@? zvR$XTvCLi|&nJ$hthx=W_2(_dM3@=GP-p)0Sge^bAq?3Cqk8l0W4y4jHk3v28>9Sr z*hn9Kc$_C{l1GN{FZ5gy;)I!(jSizGykT@0e`;*puXmbw>Q9TvwnEq8Fxf6q?cbTb zJF7}%jxtu=jMePoSH_0(q%odse-|i_BH_O+JkezU_cm7|#lr*$8V9NN-TV({hs#P~#3-i=Qmqen*mmvP~IZoVgl^P*{C{K^>Ys>1^K1K{!@ zzI@XJ*&-w3;R$iwU30BgVhZ)4p;SS(E%GE$)q*(+SoMBZ^Ji9D&FY5hC%^>u%x$(} zD~~RYG@Bs*VLC4?PGErh-4F(r&4`+CV%1mB`kf4*Uu z7Z0E6#TS;gk9GcuUk z>!)ttS#iCT`AAJxXZmea{B=kSW3{JP-E(Z&e)dcSTd|ryIV-~C1KqOu=2?j>JCFZ7 zLx#cZnMN3#I`dV2bM|jSkUY=*HVi%z0}*zo@&0qd&CS90+5kR#P6`8Dnx)4--e)#W zqh+2zcLd~9XXC^@(pQgx9dLq@G4Sl{FrGFqF3z=n+(+M1dP0wXJIHp3**mbRaON1N zZ;pTCH|K_%T0rb{?pKz|rsw~^ky<}5-0TafcMJI5d4>A+EAKEewOIYjyJs&feLS1w zsb4*~5;31B>;_%TqG(qOuT^JkZ4O&E;Vf z!;h3Bn3h@i&GKOWLz%@?Ja38?$;;;Y^E2h%zT+p(pEh%{ev5!B0=-ipA6VgS^3qG! z%3J4*pEkR~xTW!yb&uQ@fYtc&ig}tGi%Y31P^u1e|1!u>Rw~sDN(G5c4dlshRwNB~ zO_*HK%$G(}CE4B~+qYy-BzpohQs-q?Q6lJPC%2b`u*Y&i7sY-a+ z{P7s=#rggwf0XO_*YgLqlr6Hiyeyi4ge#SP3rfj@?^rO1iuuC@e&GW~vhB^B zg-;zN@^JbsK1MXk`BCL~Mj6g7Re*5knx)-5sM>k9=5a>x&c4e4L!1YeKhESg)4}Cd z=iq0@Fv@c7XlOy??L4rm1?@Zo2#RCUK=lYi;85KDXY;DHm!Rz2wtMf0f-XZV0L}^>n zUgdso`8)5tKGy?Wi{H#;M9$ZCCNga3&QEtIFe-O?zx9lV+~by=v^sab9mlW_SKWG+J>a$Y(;&qJ>IKkv6XC!7sna-pug zXm!?~e?THK5#AYd*BA(?Qeg!Z36y)@@C+Vz}>)~faib@faiff1HS-jO*I=1 z{~810xKXKjB7-%kH38x>Qu6}hno;uxT7k`g5kMbc3{VP;12#uF9@qky3G@Yy2DSu_ z0R{kP0Rw@{fWg33Kr8SCUA1DO_p}Y^k-< z@{p$Lc|WZ;uoNi)DTWWc9M!u_;_kPS@4Hc&#Rn~<;+G_rkzk`joJBZ<-EzSx{w zF;Bc$PZ46mT1vGtUo=x7B};j7Ood9^cH!4R{$^YYnD;W#bQPs^Is@)g@%gBoIu)GnAxTnKv+HujWL&P8#6wO&;^hWPP0@5a z!B<#iAW1v9cB}xoxba{YazBe8vV(YfHARK?ghpqOWOD~hgPhg>otVK%lDF+M_q2C) zO}paX)y-YQ64uO<#mF@j;uDPKrAV@Qvbe}8O71S*tYqlRY+Jxl>gzI*O=Pbjf0G?7 z)(fAt6y|dV-Fsp~lPuQ%!XnkpVwYm!QVD@af8c%YX9@US@DT5=d!vYN>yIf@|E~n*_Zh-!-0mtuDZ*4$M_T0Jo zbEZt2t#7|?gL^ylk@PN_w&L0bOn%yPlo$8JFRtSnR6C2oJM|F}%OD~_?0AksTFnHv zFOXz&0@i_?$4Gf-&EMwQxr87 zudJsL$@1!a6tjn`Id(~$+rkj_r5vbw>LKyEr$~67B7JT`gatIR{kj+qhWej6nu)sS zDU6zl*9gl2!MJ&29*6g#EC5w#Spl^LAT^~sFvN@1DgY-wo-c>Uv=$cfC%(j zM_>nFtmyI*bzna-G43U@=AHL6x_*3-qijAxS(^1SuoduQpftv(zzE>K0ONpH z#gUgNwbY2Zlu~e=s7r|gO8c|}J}RX>%2G-+P)g|llu}}V zQc6dlloBg;K?*}Ozx@iFCkfS3OfnD-t)&3vp~^=a_h>cnqP`bf9 zU>H!kh4i*^l%wpxl2J0DA);2j&150_6-W0va>Z9u|%kkH1RkmDk}K@(alo z$UB1Y2dNdFDs+%p2T&?l4U`Jj0Hwdy0_Ae41Iis}8Bn^wGeEg}Ee93=SC};WT;Q`P zF96B`JPoWjX_fk?OamIKQLzfR63BsTfvbU=fNOxS1J{DlS>QU9uK^{a>%jFWHv*pr z;(AE0mtQa&P;LX<2ux7*DZm#{mR~3@n#OCkp{n5zz)fhF0Nf0$QuWoqEhs+=d&w;NApV#S+?4()u{nmd(HEOk;Ksm#^fYSGOi^kU} zgneoj&EFtv>!VE!vSUDL=i@+W*ApW94T`F)M|K44Jr}7KX%EsFqz6a=h=l!-CLk?D zsz=(1bPDMXk{5in9a2xE2}lc(RwHdk`Vi?Rk{4vj{V5A+1kysJdZax_*z5eYJIHuJ z?{-K%k;eErBYe-%+P{%kWj*{U4XF&u$f5Q{h?ckreI%}d03G4k5+5qMY=yJ1@yPmk zg-@$Z^dmT+thcM9x=HaJuK1XY{u8zKP)HX5%SrqiFNq_S0`Dk>Sao{+5ykKXCPdO@ zE4pH(sE-oxky0pGG;XJ`k#&lEovLnB-SA5molS%)-%{OgDRzwzA;n~1;YeJk&|A^J zB8qoVVnm%XM|;)np=-EGT$y-h2X(02g(;O>E~-HltMUOw{+8l8TuJ#zv1_H+tpC~mmM8h8`s1nz&k@C^ zK+zvi7^=oKR?)XM`d4Zz6v0`=KwdmbJzFWkqy*I|y$>jiR}Sv26e>{t#wvrgQtf%F z|1RYlC91wb=Z|m7Y{lTL(y%}gn4l1{#sj7}^cZ*H&+_>2KrJQj`57 z^@1D@9yc?iC~H|ID#1rSSyDijo;6-}P@oy(k|e%3I^gAc!XZ~GfHJbbdKd;|3%AMr zO=GgRo5CwgC$z~b?2fn*6RUSoC-M}BcTs)>s_Ugb6pkDMss7gEr7nkMiTK?VOH7Q| zO<}>0D3g_Bkji(scy>3Xi!-~a9UT_8cH_5V6{5Y9o)LST6c9QA(>)VuA<|N$dZZ0V zuOjUcpE)Tbv7w(L__fi&h5d-$(DA-k0@1<1gCiY866SwzL zFG>;#`!JTyV$?pACX4m^(3URF?W07RxX;hZ7~8v_Ix_T*eHU7F6BFOnd#`;L^y%WV ztSlDI4?w^~G2j3yCy8YT@W=7V;?e=ip%M{zkovKbQZeozXp+SGgOn@Q9mHqc&4ZLd zDI)d|I;D!~hp2~`b_n%54^c9d{t^`s+xD<7_OZh#rHNG%px)pK*gRD(D^l)yC-vB%UtL8 za8Z*~DyF}O-bv!k_ozo!GS2Gy#-wRkxRz&HpK0ZD=aiSg3j(!{Sm>_$q^?OxNy+k$ z>XC~6ZAs7X%nuS-C&{b1Uepv>s(9=qr8JFIr1;Ky?BYVZ&;Xp)lBIPrXgCX=S>6bD6#UjqVPmxx6b>nV_@3>s#rjKa)CyZI%xwzWX5olcc$tw-g9=YduWXwjJ zG3IpmfJ^6aU-87BsBQCb1X35zNhJ;0E7zVOoTx?U8Om*XK}FdM7BTw_75c&#uU@r77Ta~h3Bao9zS?5%iLmg+>r zhoF-|;DXUeSm*B;+5K>JBTMC?LDD_MBHd>+%HMBnGP3f=7AkuWf7;w^41GXFTz zLt@ZHYSs2*e3{AbX8FLi+z%nwcu35?OjgrRpn;!U#w4X4CR{hlEMB^p9YWmYjl)N?1Kc>@FAnWjo0trRR7n$ss731&I6ic{{6V~`*8>7iT`hoJI$DW+*x~-JcG}l pSt)wB3A$a diff --git a/mifare_plus_c_sharp/obj/Release/mifare_plus_c_sharp.exe b/mifare_plus_c_sharp/obj/Release/mifare_plus_c_sharp.exe index 2e89d67b9c6a2ee3ff01e162ec94758713699700..5b89fd5533fcb268081172e62624388f5eeb24a4 100644 GIT binary patch literal 187392 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 J%kML=pqnurR> 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 M7LxvZ&wmU21ya=s&;S4c diff --git a/mifare_plus_c_sharp/obj/Release/mifare_plus_c_sharp.pdb b/mifare_plus_c_sharp/obj/Release/mifare_plus_c_sharp.pdb index 3f53e7798450145255b5647f43a8749e5f1310bd..4615d149300866b6cc581b3137891e6b687d7366 100644 GIT binary patch delta 12200 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 Mp(7z*QKZ}d0PezvNB{r; delta 11932 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 8); - lib_build = (ushort)(version >> 16); - - version = ((UInt32)version_major << 24) | ((UInt32)version_minor << 16) | (UInt32)lib_build; - if (version < MIN_UFR_LIB_VERSION) - { - uFR_NotOpenedMessage = "Wrong uFCoder library version.\r\n" - + "You can't work with DL Signer cards.\r\n\r\nUse uFCoder library " - + (MIN_UFR_LIB_VERSION >> 24) + "." + ((MIN_UFR_LIB_VERSION >> 16) & 0xFF) - + "." + (MIN_UFR_LIB_VERSION & 0xFFFF) + " or higher."; - throw new Exception("Wrong uFCoder library version.\r\n" - + "You can't work with DL Signer cards.\r\n\r\nUse uFCoder library " - + (MIN_UFR_LIB_VERSION >> 24) + "." + ((MIN_UFR_LIB_VERSION >> 16) & 0xFF) - + "." + (MIN_UFR_LIB_VERSION & 0xFFFF) + " or higher."); - } - - status = ReaderOpen(); - if (status != (UInt32)uFR.DL_STATUS.UFR_OK) - { - uFR_NotOpenedMessage = "uFR reader not opened.\r\nYou can't work with Desfire cards." - + "\r\n\r\nTry to connect uFR reader and restart application."; - throw new Exception("Can't open uFR reader.\r\nYou will not be able to work with Desfire cards."); - } - - // Check firmware version: - status = GetReaderFirmwareVersion(out version_major, out version_minor); - if (status != (UInt32)uFR.DL_STATUS.UFR_OK) - { - uFCoder.ReaderClose(); - throw new Exception("Can't open uFR reader.\r\nYou will not be able to work with Desfire cards."); - } - status = GetBuildNumber(out fw_build); - if (status != (UInt32)uFR.DL_STATUS.UFR_OK) - { - uFCoder.ReaderClose(); - throw new Exception("Can't open uFR reader.\r\nYou will not be able to work with Desfire cards."); - } - - version = ((UInt32)version_major << 24) | ((UInt32)version_minor << 16) | (UInt32)fw_build; - if (version < MIN_UFR_FW_VERSION) - { - uFCoder.ReaderClose(); - uFR_NotOpenedMessage = "Wrong uFR firmware version.\r\n" - + "You can't work with Desfire cards.\r\n\r\nPlease update firmware to " - + (MIN_UFR_FW_VERSION >> 24) + "." + ((MIN_UFR_FW_VERSION >> 16) & 0xFF) - + "." + (MIN_UFR_FW_VERSION & 0xFFFF) + " or higher."; - throw new Exception("Wrong uFR firmware version.\r\n" - + "Some functions with DESFIRE CARDS will be unavailable.\r\n\r\nPlease update firmware to " - + (MIN_UFR_FW_VERSION >> 24) + "." + ((MIN_UFR_FW_VERSION >> 16) & 0xFF) - + "." + (MIN_UFR_FW_VERSION & 0xFFFF) + " or higher and restart application."); - } - - - } - - //-------------------------------------------------------------------------------------------------- - //-------------------------------------------------------------------------------------------------- - - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderOpen")] - public static extern DL_STATUS ReaderOpen(); - - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderOpenEx")] - public static extern DL_STATUS ReaderOpenEx(UInt32 reader_type, - [MarshalAs(UnmanagedType.LPStr)] - StringBuilder port_name, - UInt32 port_interface, - [MarshalAs(UnmanagedType.LPStr)] - StringBuilder arg); - - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderClose")] - public static extern DL_STATUS ReaderClose(); - - //-------------------------------------------------------------------------------------------------- - - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetReaderType")] - public static extern DL_STATUS GetReaderType(out UInt32 lpulReaderType); - - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetReaderSerialDescription")] - private static extern DL_STATUS getReaderSerialDescription(StringBuilder pSerialDescription); - public static DL_STATUS GetReaderSerialDescription(out string SerialDescription) - { - StringBuilder pSerialDescription = new StringBuilder(7); - DL_STATUS status = DL_STATUS.UFR_OK; - - status = getReaderSerialDescription(pSerialDescription); - if (status == DL_STATUS.UFR_OK) - SerialDescription = pSerialDescription.ToString(); - else - SerialDescription = ""; - return status; - } - - //--------------------------------------------------------------------- - // Card emulation: - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "TagEmulationStart")] - public static extern DL_STATUS TagEmulationStart(); - - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "TagEmulationStop")] - public static extern DL_STATUS TagEmulationStop(); - - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "CombinedModeEmulationStart")] - public static extern DL_STATUS CombinedModeEmulationStart(); - //--------------------------------------------------------------------- - - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetDlogicCardType")] - public static extern DL_STATUS GetDlogicCardType(out byte lpucCardType); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_UpdateAndGetCount")] - public static extern DL_STATUS ReaderList_UpdateAndGetCount(out UInt32 NumberOfDevices); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_GetSerialByIndex")] - public static extern DL_STATUS ReaderList_GetSerialByIndex(Int32 DeviceIndex, out UInt32 lpulSerialNumber); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_GetSerialDesByIndex")] - public static extern DL_STATUS ReaderList_GetSerialDescriptionByIndex(Int32 DeviceIndex, out byte pSerialDescription); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_GetTypeByIndex")] - public static extern DL_STATUS ReaderList_GetTypeByIndex(Int32 DeviceIndex, out UInt32 lpulReaderType); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_GetFTDISerialByIndex")] - private static extern DL_STATUS GetFTDISerialByIndex(UInt32 DeviceIndex, out IntPtr DeviceSerial); - public static DL_STATUS ReaderList_GetFTDISerialByIndex(UInt32 DeviceIndex, out string DeviceSerial) - { - IntPtr ptr; - DL_STATUS status = DL_STATUS.UFR_OK; - - status = GetFTDISerialByIndex(DeviceIndex, out ptr); - DeviceSerial = Marshal.PtrToStringAnsi(ptr); - return status; - } - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_GetFTDIDescriptionByIndex")] - private static extern DL_STATUS GetFTDIDescriptionByIndex(UInt32 DeviceIndex, out IntPtr DeviceDescription); - public static DL_STATUS ReaderList_GetFTDIDescriptionByIndex(UInt32 DeviceIndex, out string DeviceDescription) - { - IntPtr ptr; - DL_STATUS status = DL_STATUS.UFR_OK; - - status = GetFTDIDescriptionByIndex(DeviceIndex, out ptr); - DeviceDescription = Marshal.PtrToStringAnsi(ptr); - return status; - } - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_OpenByIndex")] - public static extern DL_STATUS ReaderList_OpenByIndex(Int32 DeviceIndex, out UFR_HANDLE hndUFR); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetDllVersion")] - public static extern UInt32 GetDllVersion(); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetReaderHardwareVersion")] - public static extern DL_STATUS GetReaderHardwareVersion(out byte version_major, out byte version_minor); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetReaderFirmwareVersion")] - public static extern DL_STATUS GetReaderFirmwareVersion(out byte version_major, out byte version_minor); - - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetBuildNumber")] - public static extern DL_STATUS GetBuildNumber(out byte build); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "SectorTrailerWriteUnsafe_PK")] - public static extern DL_STATUS SectorTrailerWriteUnsafe_PK(byte addressing_mode, byte address, out byte sector_trailer, - byte auth_mode, ref byte key); - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "LinearWrite_PK")] - public static extern DL_STATUS LinearWrite_PK([In] byte[] data, ushort linear_address, ushort length, out ushort bytes_written, - byte auth_mode, [In] byte[] key); - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "EE_Lock")] - private static extern DL_STATUS Linkage_EE_Lock(StringBuilder password, UInt32 locked); - public static DL_STATUS EE_Lock(String password, UInt32 locked) - { - if (password.Length != 8) - return DL_STATUS.UFR_PARAMETERS_ERROR; - - StringBuilder ptr_password = new StringBuilder(password); - return Linkage_EE_Lock(ptr_password, locked); - } - - //-------------------------------------------------------------------------------------------------------------- - - //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderOpen")] - //public static extern DL_STATUS ReaderOpen(); - - //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderClose")] - //public static extern DL_STATUS ReaderClose(); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ReaderReset")] - public static extern DL_STATUS ReaderReset(); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ReaderSoftRestart")] - public static extern DL_STATUS ReaderSoftRestart(); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "UfrEnterSleepMode")] - public static extern DL_STATUS UfrEnterSleepMode(); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "UfrLeaveSleepMode")] - public static extern DL_STATUS UfrLeaveSleepMode(); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "AutoSleepSet")] - public static extern DL_STATUS AutoSleepSet(byte seconds_wait); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "AutoSleepGet")] - public static extern DL_STATUS AutoSleepGet(out byte seconds_wait); - - //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "GetReaderType")] - //public static extern DL_STATUS GetReaderType(out UInt32 get_reader_type); - - //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetReaderSerialDescription")] - //public static extern DL_STATUS GetReaderSerialDescription(out byte pSerialDescription); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "GetReaderSerialNumber")] - public static extern DL_STATUS GetReaderSerialNumber(out UInt32 serial_number); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ReaderKeyWrite")] - public static extern DL_STATUS ReaderKeyWrite([In] byte[] aucKey, byte ucKeyIndex); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ReaderUISignal")] - public static extern DL_STATUS ReaderUISignal(int light_mode, int sound_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ReadUserData")] - public static extern DL_STATUS ReadUserData(out byte aucData); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "WriteUserData")] - public static extern DL_STATUS WriteUserData(out byte aucData); - - //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "GetReaderHardwareVersion")] - //public static extern DL_STATUS GetReaderHardwareVersion(out byte bVerMajor, - // out byte bVerMinor); - //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "GetReaderFirmwareVersion")] - //public static extern DL_STATUS GetReaderFirmwareVersion(out byte bVerMajor, - // out byte bVerMinor); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "SetDisplayData")] - public static extern DL_STATUS SetDisplayData(out byte display_data, byte data_length); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "SetSpeakerFrequency")] - public static extern DL_STATUS SetSpeakerFrequency(short fhz); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "SetDisplayIntensity")] - public static extern DL_STATUS SetDisplayIntensity(Byte intensity); // 0 to 100 [%] - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "GetDisplayIntensity")] - public static extern DL_STATUS GetDisplayIntensity(out Byte intensity); // 0 to 100 [%] - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "GetCardIdEx")] - public static extern DL_STATUS GetCardIdEx(out byte bCardType, - [In, Out] byte[] nfc_uid, // NFC_UID_MAX_LEN = 10 - out byte bUidSize); - - //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetDlogicCardType")] - //public static extern DL_STATUS GetDlogicCardType(out byte lpucCardType); - - //-------------------------------------------------------------------------------------------------------------- - - //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_UpdateAndGetCount")] - //public static extern DL_STATUS ReaderList_UpdateAndGetCount(Int32* NumberOfDevices); - - //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_GetSerialByIndex")] - //public static extern DL_STATUS ReaderList_GetSerialByIndex(Int32 DeviceIndex, UInt32* lpulSerialNumber); - - //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_GetSerialDesByIndex")] - //public static extern DL_STATUS ReaderList_GetSerialDescriptionByIndex(Int32 DeviceIndex, char* pSerialDescription); - - //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_GetTypeByIndex")] - //public static extern DL_STATUS ReaderList_GetTypeByIndex(Int32 DeviceIndex, UInt32* lpulReaderType); - - //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_GetFTDISerialByIndex")] - //public static extern DL_STATUS ReaderList_GetFTDISerialByIndex(Int32 DeviceIndex, char** Device_Serial); - - //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_GetFTDIDescriptionByIndex")] - //public static extern DL_STATUS ReaderList_GetFTDIDescriptionByIndex(Int32 DeviceIndex, char** Device_Description); - - //-------------------------------------------------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearRead")] - public static extern DL_STATUS LinearRead([Out] byte[] aucData, - ushort linear_address, - ushort data_len, - out UInt16 bytes_written, - byte auth_mode, - byte key_index); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearRead_AKM1")] - public static extern DL_STATUS LinearRead_AKM1([Out] byte[] aucData, - ushort linear_address, - ushort data_len, - out UInt16 bytes_written, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearRead_AKM2")] - public static extern DL_STATUS LinearRead_AKM2([Out] byte[] aucData, - ushort linear_address, - ushort data_len, - out UInt16 bytes_written, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearRead_PK")] - public static extern DL_STATUS LinearRead_PK([Out] byte[] aucData, - ushort linear_address, - ushort data_len, - out UInt16 bytes_written, - byte auth_mode, - [In] byte[] pk_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearWrite")] - public static extern DL_STATUS LinearWrite([In] byte[] aucData, - ushort linear_address, - ushort data_len, - out UInt16 bytes_written, - byte auth_mode, - byte key_index); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearWrite_AKM1")] - public static extern DL_STATUS LinearWrite_AKM1([In] byte[] aucData, - ushort linear_address, - ushort data_len, - out UInt16 bytes_written, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearWrite_AKM2")] - public static extern DL_STATUS LinearWrite_AKM2([In] byte[] aucData, - ushort linear_address, - ushort data_len, - out UInt16 bytes_written, - byte auth_mode); - - //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearWrite_PK")] - //public static extern DL_STATUS LinearWrite_PK(out byte aucData, - // ushort linear_address, - // ushort data_len, - // out UInt16 bytes_written, - // byte key_mode, - // out byte pk_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockRead")] - public static extern DL_STATUS BlockRead([Out] byte[] data, - UInt16 block_address, - byte auth_mode, - UInt16 key_index); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockRead_AKM1")] - public static extern DL_STATUS BlockRead_AKM1([Out] byte[] data, - UInt16 block_address, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockRead_AKM2")] - public static extern DL_STATUS BlockRead_AKM2([Out] byte[] data, - UInt16 block_address, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockRead_PK")] - public static extern DL_STATUS BlockRead_PK([Out] byte[] data, - UInt16 block_address, - byte auth_mode, - [In] byte[] pk_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockWrite")] - public static extern DL_STATUS BlockWrite([In] byte[] data, - UInt16 block_address, - byte auth_mode, - byte key_index); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockWrite_AKM1")] - public static extern DL_STATUS BlockWrite_AKM1([In] byte[] data, - UInt16 block_address, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockWrite_AKM2")] - public static extern DL_STATUS BlockWrite_AKM2([In] byte[] data, - UInt16 block_address, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockWrite_PK")] - public static extern DL_STATUS BlockWrite_PK([In] byte[] data, - UInt16 block_address, - byte auth_mode, - [In] byte[] pk_key); - - - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockInSectorRead")] - public static extern DL_STATUS BlockInSectorRead([Out] byte[] data, - byte sector_address, - byte block_in_sector_address, - byte auth_mode, byte key_index); - - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockInSectorRead_AKM1")] - public static extern DL_STATUS BlockInSectorRead_AKM1([Out] byte[] data, - byte sector_address, - byte block_in_sector_address, - byte auth_mode); - - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockInSectorRead_AKM2")] - public static extern DL_STATUS BlockInSectorRead_AKM2([Out] byte[] data, - byte sector_address, - byte block_in_sector_address, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockInSectorRead_PK")] - public static extern DL_STATUS BlockInSectorRead_PK([Out] byte[] data, - byte sector_address, - byte block_in_sector_address, - byte auth_mode, - [In] byte[] pk_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockInSectorWrite")] - public static extern DL_STATUS BlockInSectorWrite([In] byte[] data, - byte sector_address, - byte block_in_sector_address, - byte auth_mode, - byte key_index); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockInSectorWrite_AKM1")] - public static extern DL_STATUS BlockInSectorWrite_AKM1([In] byte[] data, - byte sector_address, - byte block_in_sector_address, - byte auth_mode); - - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockInSectorWrite_AKM2")] - public static extern DL_STATUS BlockInSectorWrite_AKM2([In] byte[] data, - byte sector_address, - byte block_in_sector_address, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockInSectorWrite_PK")] - public static extern DL_STATUS BlockInSectorWrite_PK([In] byte[] data, - byte sector_address, - byte block_in_sector_address, - byte auth_mode, - [In] byte[] pk_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockRead")] - public static extern DL_STATUS ValueBlockRead(out Int32 value, - out byte value_addr, - UInt16 block_address, - byte auth_mode, - byte key_index); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockRead_AKM1")] - public static extern DL_STATUS ValueBlockRead_AKM1(out Int32 value, - out byte value_addr, - UInt16 block_address, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockRead_AKM2")] - public static extern DL_STATUS ValueBlockRead_AKM2(out Int32 value, - out byte value_addr, - UInt16 block_address, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockRead_PK")] - public static extern DL_STATUS ValueBlockRead_PK(out Int32 value, - out byte value_addr, - UInt16 block_address, - byte auth_mode, - out byte pk_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockWrite")] - public static extern DL_STATUS ValueBlockWrite(int value, - byte value_addr, - UInt16 block_address, - byte auth_mode, - byte key_index); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockWrite_AKM1")] - public static extern DL_STATUS ValueBlockWrite_AKM1(int value, - byte value_addr, - UInt16 block_address, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockWrite_AKM2")] - public static extern DL_STATUS ValueBlockWrite_AKM2(int value, - byte value_addr, - UInt16 block_address, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockWrite_PK")] - public static extern DL_STATUS ValueBlockWrite_PK(int value, - byte value_addr, - UInt16 block_address, - byte auth_mode, - out byte pk_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockIncrement")] - public static extern DL_STATUS ValueBlockIncrement(int increment_value, - UInt16 block_address, - byte auth_mode, - byte key_index); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockIncrement_AKM1")] - public static extern DL_STATUS ValueBlockIncrement_AKM1(int increment_value, - UInt16 block_address, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockIncrement_AKM2")] - public static extern DL_STATUS ValueBlockIncrement_AKM2(int increment_value, - UInt16 block_address, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockIncrement_PK")] - public static extern DL_STATUS ValueBlockIncrement_PK(int increment_value, - UInt16 block_address, - byte auth_mode, - out byte pk_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockDecrement")] - public static extern DL_STATUS ValueBlockDecrement(int increment_value, - UInt16 block_address, - byte auth_mode, - byte key_index); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockDecrement_AKM1")] - public static extern DL_STATUS ValueBlockDecrement_AKM1(int increment_value, - UInt16 block_address, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockDecrement_AKM2")] - public static extern DL_STATUS ValueBlockDecrement_AKM2(int increment_value, - UInt16 block_address, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockDecrement_PK")] - public static extern DL_STATUS ValueBlockDecrement_PK(int increment_value, - UInt16 block_address, - byte auth_mode, - out byte pk_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorRead")] - public static extern DL_STATUS ValueBlockInSectorRead(out Int32 value, - out byte value_addr, - byte sector_address, - byte block_in_sector_address, - byte auth_mode, - byte key_index); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorRead_AKM1")] - public static extern DL_STATUS ValueBlockInSectorRead_AKM1(out Int32 value, - out byte value_addr, - byte sector_address, - byte block_in_sector_address, - byte auth_mode); - - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorRead_AKM2")] - public static extern DL_STATUS ValueBlockInSectorRead_AKM2(out Int32 value, - out byte value_addr, - byte sector_address, - byte block_in_sector_address, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorRead_PK")] - public static extern DL_STATUS ValueBlockInSectorRead_PK(out Int32 value, - out byte value_addr, - byte sector_address, - byte block_in_sector_address, - byte auth_mode, - out byte pk_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorWrite")] - public static extern DL_STATUS ValueBlockInSectorWrite(Int32 value, - byte value_addr, - byte sector_address, - byte block_in_sector_address, - byte auth_mode, byte key_index); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorWrite_AKM1")] - public static extern DL_STATUS ValueBlockInSectorWrite_AKM1(Int32 value, - byte value_addr, - byte sector_address, - byte block_in_sector_address, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorWrite_AKM2")] - public static extern DL_STATUS ValueBlockInSectorWrite_AKM2(Int32 value, - byte value_addr, - byte sector_address, - byte block_in_sector_address, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorWrite_PK")] - public static extern DL_STATUS ValueBlockInSectorWrite_PK(Int32 value, - byte value_addr, - byte sector_address, - byte block_in_sector_address, - byte auth_mode, - out byte pk_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorIncrement")] - public static extern DL_STATUS ValueBlockInSectorIncrement(Int32 increment_value, - byte sector_address, - byte block_in_sector_address, - byte auth_mode, - byte key_index); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorIncrement_AKM1")] - public static extern DL_STATUS ValueBlockInSectorIncrement_AKM1(Int32 increment_value, - byte sector_address, - byte block_in_sector_address, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorIncrement_AKM2")] - public static extern DL_STATUS ValueBlockInSectorIncrement_AKM2(Int32 increment_value, - byte sector_address, - byte block_in_sector_address, - byte auth_mode); - - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorIncrement_PK")] - public static extern DL_STATUS ValueBlockInSectorIncrement_PK(Int32 increment_value, - byte sector_address, - byte block_in_sector_address, - byte auth_mode, - out byte pk_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorDecrement")] - public static extern DL_STATUS ValueBlockInSectorDecrement(Int32 decrement_value, - byte sector_address, - byte block_in_sector_address, - byte auth_mode, - byte key_index); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorDecrement_AKM1")] - public static extern DL_STATUS ValueBlockInSectorDecrement_AKM1(Int32 decrement_value, - byte sector_address, - byte block_in_sector_address, - byte auth_mode); - - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorDecrement_AKM2")] - public static extern DL_STATUS ValueBlockInSectorDecrement_AKM2(Int32 decrement_value, - byte sector_address, - byte block_in_sector_address, - byte auth_mode); - - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorDecrement_PK")] - public static extern DL_STATUS ValueBlockInSectorDecrement_PK(Int32 decrement_value, - byte sector_address, - byte block_in_sector_address, - byte auth_mode, - out byte pk_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "SectorTrailerWrite")] - public static extern DL_STATUS SectorTrailerWrite(byte addressing_mode, - byte address, - out byte new_key_A, - byte block0_access_bits, - byte block1_access_bits, - byte block2_access_bits, - byte sector_trailer_access_bits, - byte sector_trailer_byte9, - out byte new_key_B, - byte auth_mode, - byte key_index); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "SectorTrailerWrite_AKM1")] - public static extern DL_STATUS SectorTrailerWrite_AKM1(byte addressing_mode, - byte address, - out byte new_key_A, - byte block0_access_bits, - byte block1_access_bits, - byte block2_access_bits, - byte sector_trailer_access_bits, - byte sector_trailer_byte9, - out byte new_key_B, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "SectorTrailerWrite_AKM2")] - public static extern DL_STATUS SectorTrailerWrite_AKM2(byte addressing_mode, - byte address, - out byte new_key_A, - byte block0_access_bits, - byte block1_access_bits, - byte block2_access_bits, - byte sector_trailer_access_bits, - byte sector_trailer_byte9, - out byte new_key_B, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "SectorTrailerWrite_PK")] - public static extern DL_STATUS SectorTrailerWrite_PK(byte addressing_mode, - byte address, - out byte new_key_A, - byte block0_access_bits, - byte block1_access_bits, - byte block2_access_bits, - byte sector_trailer_access_bits, - byte sector_trailer_byte9, - out byte new_key_B, - byte auth_mode, - out byte pk_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearFormatCard")] - public static extern DL_STATUS LinearFormatCard(out byte new_key_A, - byte blocks_access_bits, - byte sector_trailers_access_bits, - byte sector_trailers_byte9, - out byte new_key_B, - out byte sectors_formatted, - byte auth_mode, - byte key_index); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearFormatCard_AKM1")] - public static extern DL_STATUS LinearFormatCard_AKM1(out byte new_key_A, - byte blocks_access_bits, - byte sector_trailers_access_bits, - byte sector_trailers_byte9, - out byte new_key_B, - out byte sectors_formatted, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearFormatCard_AKM2")] - public static extern DL_STATUS LinearFormatCard_AKM2(out byte new_key_A, - byte blocks_access_bits, - byte sector_trailers_access_bits, - byte sector_trailers_byte9, - out byte new_key_B, - out byte sectors_formatted, - byte auth_mode); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearFormatCard_PK")] - public static extern DL_STATUS LinearFormatCard_PK(out byte new_key_A, - byte blocks_access_bits, - byte sector_trailers_access_bits, - byte sector_trailers_byte9, - out byte new_key_B, - out byte sectors_formatted, - byte auth_mode, - out byte pk_key); - - //---------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "SetISO14443_4_Mode")] - public static extern DL_STATUS SetISO14443_4_Mode(); - - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "s_block_deselect")] - public static extern DL_STATUS s_block_deselect(byte timeout); - //---------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppSelectByAid")] - public static extern DL_STATUS JCAppSelectByAid([In] byte[] aid, byte aid_len, [Out] byte[] selection_response); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppPutPrivateKey")] - public static extern DL_STATUS JCAppPutPrivateKey(byte key_type, byte key_index, - [In] byte[] key, UInt16 key_bit_len, - [In] byte[] key_param, UInt16 key_parm_len); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppGenerateKeyPair")] - public static extern DL_STATUS JCAppGenerateKeyPair(byte key_type, byte key_index, byte key_designator, - UInt16 key_bit_len, [In] byte[] param, UInt16 param_size); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppDeleteRsaKeyPair")] - public static extern DL_STATUS JCAppDeleteRsaKeyPair(byte key_index); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppDeleteEcKeyPair")] - public static extern DL_STATUS JCAppDeleteEcKeyPair(byte key_index); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppSignatureBegin")] - public static extern DL_STATUS JCAppSignatureBegin(byte cipher, byte digest, byte padding, byte key_index, - [In] byte[] chunk, UInt16 chunk_len, - [In] byte[] alg_param, UInt16 alg_parm_len); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppSignatureUpdate")] - public static extern DL_STATUS JCAppSignatureUpdate([In] byte[] chunk, UInt16 chunk_len); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppSignatureEnd")] - private static extern DL_STATUS JCAppSignatureEnd(out UInt16 sig_len); - public static DL_STATUS JCAppSignatureEnd(out byte[] sig) - { - DL_STATUS status; - UInt16 sig_len; - - status = JCAppSignatureEnd(out sig_len); - if (status != DL_STATUS.UFR_OK) - { - sig = null; - return status; - } - - sig = new byte[sig_len]; - return JCAppGetSignature(sig, sig_len); - } - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppGenerateSignature")] - private static extern DL_STATUS JCAppGenerateSignature(byte cipher, byte digest, byte padding, byte key_index, - [In] byte[] plain_data, UInt16 plain_data_len, - out UInt16 sig_len, - [In] byte[] alg_param, UInt16 alg_parm_len); - - public static DL_STATUS JCAppGenerateSignature(byte cipher, byte digest, byte padding, byte key_index, - [In] byte[] plain_data, UInt16 plain_data_len, - out byte[] sig, - [In] byte[] alg_param, UInt16 alg_parm_len) - { - DL_STATUS status; - UInt16 sig_len; - - status = JCAppGenerateSignature(cipher, digest, padding, key_index, plain_data, plain_data_len, out sig_len, alg_param, alg_parm_len); - if (status != DL_STATUS.UFR_OK) - { - sig = null; - return status; - } - - sig = new byte[sig_len]; - return JCAppGetSignature(sig, sig_len); - } - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppGetSignature")] - private static extern DL_STATUS JCAppGetSignature([Out] byte[] sig, UInt16 sig_len); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppPutObj")] - public static extern DL_STATUS JCAppPutObj(byte obj_type, byte obj_index, [In] byte[] obj, UInt16 obj_size, [In] byte[] id, byte id_size); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppPutObjSubject")] - public static extern DL_STATUS JCAppPutObjSubject(byte obj_type, byte obj_index, [In] byte[] subject, byte size); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppInvalidateCert")] - public static extern DL_STATUS JCAppInvalidateCert(byte obj_type, byte obj_index); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppGetObjId")] - private static extern DL_STATUS JCAppGetObjId(byte obj_type, byte obj_index, [Out] byte[] id, out UInt16 id_size); - public static DL_STATUS JCAppGetObjId(byte obj_type, byte obj_index, out byte[] id, out UInt16 size) - { - DL_STATUS status; - - size = 0; - id = null; - status = JCAppGetObjId(obj_type, obj_index, id, out size); - if (status == DL_STATUS.UFR_OK) - { - id = new byte[size]; - status = JCAppGetObjId(obj_type, obj_index, id, out size); - } - return status; - } - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppGetObjSubject")] - private static extern DL_STATUS JCAppGetObjSubject(byte obj_type, byte obj_index, [Out] byte[] subject, out byte subject_size); - public static DL_STATUS JCAppGetObjSubject(byte obj_type, byte obj_index, out byte[] subject, out byte size) - { - DL_STATUS status; - - size = 0; - subject = null; - status = JCAppGetObjSubject(obj_type, obj_index, subject, out size); - if (status == DL_STATUS.UFR_OK) - { - subject = new byte[size]; - status = JCAppGetObjSubject(obj_type, obj_index, subject, out size); - } - return status; - } - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppGetObj")] - private static extern DL_STATUS JCAppGetObj(byte obj_type, byte obj_index, [Out] byte[] obj, UInt16 size); - public static DL_STATUS JCAppGetObj(byte obj_type, byte obj_index, byte[] obj) - { - return JCAppGetObj(obj_type, obj_index, obj, (UInt16) obj.Length); - } - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppGetErrorDescription")] - private static extern IntPtr GetErrorDescription(UInt32 apdu_error_status); - public static string JCAppGetErrorDescription(UInt32 apdu_error_status) - { - IntPtr str_ret = GetErrorDescription(apdu_error_status); - return Marshal.PtrToStringAnsi(str_ret); - } - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppLogin")] - public static extern DL_STATUS JCAppLogin(byte SO, [In] byte[] pin, byte pinSize); - public static DL_STATUS JCAppLogin(bool SO, string pin) - { - if (pin.Length > byte.MaxValue) - return DL_STATUS.UFR_PARAMETERS_ERROR; - - byte[] pin_param = Encoding.ASCII.GetBytes(pin); - return JCAppLogin(SO ? (byte)1 : (byte)0, pin_param, (byte)pin_param.Length); - } - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppGetPinTriesRemaining")] - public static extern DL_STATUS JCAppGetPinTriesRemaining(DL_SECURE_CODE secureCodeType, out UInt16 triesRemaining); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppPinChange")] - public static extern DL_STATUS JCAppPinChange(DL_SECURE_CODE secureCodeType, [In] byte[] newPin, byte newPinSize); - public static DL_STATUS JCAppPinChange(DL_SECURE_CODE secureCodeType, string newPin) - { - if (newPin.Length > byte.MaxValue) - return DL_STATUS.UFR_PARAMETERS_ERROR; - - byte[] newPin_param = Encoding.ASCII.GetBytes(newPin); - return JCAppPinChange(secureCodeType, newPin_param, (byte)newPin_param.Length); - } - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppPinUnblock")] - public static extern DL_STATUS JCAppPinUnblock(byte SO, [In] byte[] puk, byte pukSize); - public static DL_STATUS JCAppPinUnblock(bool SO, string puk) +using System; +using System.Text; + +namespace uFR +{ + using System.Runtime.InteropServices; + using UFR_HANDLE = System.UIntPtr; + + enum CARD_SAK + { + UNKNOWN = 0x00, + MIFARE_CLASSIC_1k = 0x08, + MF1ICS50 = 0x08, + SLE66R35 = 0x88, + MIFARE_CLASSIC_4k = 0x18, + MF1ICS70 = 0x18, + MIFARE_CLASSIC_MINI = 0x09, + MF1ICS20 = 0x09, + } + + enum DLOGIC_CARD_TYPE + { + DL_NO_CARD = 0x00, + DL_MIFARE_ULTRALIGHT = 0x01, + DL_MIFARE_ULTRALIGHT_EV1_11 = 0x02, + DL_MIFARE_ULTRALIGHT_EV1_21 = 0x03, + DL_MIFARE_ULTRALIGHT_C = 0x04, + DL_NTAG_203 = 0x05, + DL_NTAG_210 = 0x06, + DL_NTAG_212 = 0x07, + DL_NTAG_213 = 0x08, + DL_NTAG_215 = 0x09, + DL_NTAG_216 = 0x0A, + DL_MIKRON_MIK640D = 0x0B, + NFC_T2T_GENERIC = 0x0C, + DL_MIFARE_MINI = 0x20, + DL_MIFARE_CLASSIC_1K = 0x21, + DL_MIFARE_CLASSIC_4K = 0x22, + DL_MIFARE_PLUS_S_2K_SL0 = 0x23, + DL_MIFARE_PLUS_S_4K_SL0 = 0x24, + DL_MIFARE_PLUS_X_2K_SL0 = 0x25, + DL_MIFARE_PLUS_X_4K_SL0 = 0x26, + DL_MIFARE_DESFIRE = 0x27, + DL_MIFARE_DESFIRE_EV1_2K = 0x28, + DL_MIFARE_DESFIRE_EV1_4K = 0x29, + DL_MIFARE_DESFIRE_EV1_8K = 0x2A, + DL_MIFARE_DESFIRE_EV2_2K = 0x2B, + DL_MIFARE_DESFIRE_EV2_4K = 0x2C, + DL_MIFARE_DESFIRE_EV2_8K = 0x2D, + DL_MIFARE_PLUS_S_2K_SL1 = 0x2E, + DL_MIFARE_PLUS_X_2K_SL1 = 0x2F, + DL_MIFARE_PLUS_EV1_2K_SL1 = 0x30, + DL_MIFARE_PLUS_X_2K_SL2 = 0x31, + DL_MIFARE_PLUS_S_2K_SL3 = 0x32, + DL_MIFARE_PLUS_X_2K_SL3 = 0x33, + DL_MIFARE_PLUS_EV1_2K_SL3 = 0x34, + DL_MIFARE_PLUS_S_4K_SL1 = 0x35, + DL_MIFARE_PLUS_X_4K_SL1 = 0x36, + DL_MIFARE_PLUS_EV1_4K_SL1 = 0x37, + DL_MIFARE_PLUS_X_4K_SL2 = 0x38, + DL_MIFARE_PLUS_S_4K_SL3 = 0x39, + DL_MIFARE_PLUS_X_4K_SL3 = 0x3A, + DL_MIFARE_PLUS_EV1_4K_SL3 = 0x3B, + DL_UNKNOWN_ISO_14443_4 = 0x40, + DL_GENERIC_ISO14443_4 = 0x40, + DL_GENERIC_ISO14443_4_TYPE_B = 0x41, + DL_GENERIC_ISO14443_3_TYPE_B = 0x42, + DL_IMEI_UID = 0x80 + +} + // MIFARE CLASSIC Authentication Modes: + enum MIFARE_AUTHENTICATION + { + MIFARE_AUTHENT1A = 0x60, + MIFARE_AUTHENT1B = 0x61 + } + + //MIFARE PLUS AES Authentication Modes: + enum MIFARE_PLUS_AES_AUTHENTICATION + { + MIFARE_PLUS_AES_AUTHENT1A = 0x80, + MIFARE_PLUS_AES_AUTHENT1B = 0x81 + } + + // DLJavaCardSignerCardTypes: + enum JCDL_SIGNER_CARDS + { + DLSigner81 = 0xA0, + DLSigner22 = 0xA1, + DLSigner30 = 0xA2, + DLSigner10 = 0xA3, + DLSigner145 = 0xAA + } + // DLJavaCardSignerAlgorithmTypes: + enum JCDL_SIGNER_CIPHERS + { + SIG_CIPHER_RSA = 0, + SIG_CIPHER_ECDSA + }; + enum JCDL_SIGNER_PADDINGS + { + PAD_NULL = 0, + PAD_PKCS1 + }; + enum JCDL_SIGNER_DIGESTS + { + ALG_NULL = 0, + ALG_SHA, + ALG_SHA_256, + ALG_SHA_384, + ALG_SHA_512, + ALG_SHA_224 + }; + enum JCDL_KEY_TYPES + { + TYPE_RSA_PRIVATE = 0, + TYPE_RSA_CRT_PRIVATE, + TYPE_EC_F2M_PRIVATE, + TYPE_EC_FP_PRIVATE + }; + enum JCDS_EC_KEY_DESIGNATOR + { + EC_KEY_DSG_K1 = 0, + EC_KEY_DSG_R1, + EC_KEY_DSG_R2, + EC_KEY_DSG_RFU + } + // API Status Codes Type: + public enum DL_STATUS + { + UFR_OK = 0x00, + + UFR_COMMUNICATION_ERROR = 0x01, + UFR_CHKSUM_ERROR = 0x02, + UFR_READING_ERROR = 0x03, + UFR_WRITING_ERROR = 0x04, + UFR_BUFFER_OVERFLOW = 0x05, + UFR_MAX_ADDRESS_EXCEEDED = 0x06, + UFR_MAX_KEY_INDEX_EXCEEDED = 0x07, + UFR_NO_CARD = 0x08, + UFR_COMMAND_NOT_SUPPORTED = 0x09, + UFR_FORBIDEN_DIRECT_WRITE_IN_SECTOR_TRAILER = 0x0A, + UFR_ADDRESSED_BLOCK_IS_NOT_SECTOR_TRAILER = 0x0B, + UFR_WRONG_ADDRESS_MODE = 0x0C, + UFR_WRONG_ACCESS_BITS_VALUES = 0x0D, + UFR_AUTH_ERROR = 0x0E, + UFR_PARAMETERS_ERROR = 0x0F, + UFR_MAX_SIZE_EXCEEDED = 0x10, + UFR_UNSUPPORTED_CARD_TYPE = 0x11, + + UFR_WRITE_VERIFICATION_ERROR = 0x70, + UFR_BUFFER_SIZE_EXCEEDED = 0x71, + UFR_VALUE_BLOCK_INVALID = 0x72, + UFR_VALUE_BLOCK_ADDR_INVALID = 0x73, + UFR_VALUE_BLOCK_MANIPULATION_ERROR = 0x74, + UFR_WRONG_UI_MODE = 0x75, + UFR_KEYS_LOCKED = 0x76, + UFR_KEYS_UNLOCKED = 0x77, + UFR_WRONG_PASSWORD = 0x78, + UFR_CAN_NOT_LOCK_DEVICE = 0x79, + UFR_CAN_NOT_UNLOCK_DEVICE = 0x7A, + UFR_DEVICE_EEPROM_BUSY = 0x7B, + UFR_RTC_SET_ERROR = 0x7C, + + ANTI_COLLISION_DISABLED = 0x7D, + + UFR_COMMUNICATION_BREAK = 0x50, + UFR_NO_MEMORY_ERROR = 0x51, + UFR_CAN_NOT_OPEN_READER = 0x52, + UFR_READER_NOT_SUPPORTED = 0x53, + UFR_READER_OPENING_ERROR = 0x54, + UFR_READER_PORT_NOT_OPENED = 0x55, + UFR_CANT_CLOSE_READER_PORT = 0x56, + + UFR_TIMEOUT_ERR = 0x90, + + UFR_FT_STATUS_ERROR_1 = 0xA0, + UFR_FT_STATUS_ERROR_2 = 0xA1, + UFR_FT_STATUS_ERROR_3 = 0xA2, + UFR_FT_STATUS_ERROR_4 = 0xA3, + UFR_FT_STATUS_ERROR_5 = 0xA4, + UFR_FT_STATUS_ERROR_6 = 0xA5, + UFR_FT_STATUS_ERROR_7 = 0xA6, + UFR_FT_STATUS_ERROR_8 = 0xA7, + UFR_FT_STATUS_ERROR_9 = 0xA8, + + //NDEF error codes + UFR_WRONG_NDEF_CARD_FORMAT = 0x80, + UFR_NDEF_MESSAGE_NOT_FOUND = 0x81, + UFR_NDEF_UNSUPPORTED_CARD_TYPE = 0x82, + UFR_NDEF_CARD_FORMAT_ERROR = 0x83, + UFR_MAD_NOT_ENABLED = 0x84, + UFR_MAD_VERSION_NOT_SUPPORTED = 0x85, + + + // multiple units - return from the functions with ReaderList_ prefix in name + UFR_DEVICE_WRONG_HANDLE = 0x100, + UFR_DEVICE_INDEX_OUT_OF_BOUND, + UFR_DEVICE_ALREADY_OPENED, + UFR_DEVICE_ALREADY_CLOSED, + UFR_DEVICE_IS_NOT_CONNECTED, + + // Originality Check Error Codes: + UFR_NOT_NXP_GENUINE = 0x200, + UFR_OPEN_SSL_DYNAMIC_LIB_FAILED, + UFR_OPEN_SSL_DYNAMIC_LIB_NOT_FOUND, + + UFR_NOT_IMPLEMENTED = 0x1000, + UFR_COMMAND_FAILED, + + //MIFARE PLUS error codes + UFR_MFP_COMMAND_OVERFLOW = 0xB0, + UFR_MFP_INVALID_MAC = 0xB1, + UFR_MFP_INVALID_BLOCK_NR = 0xB2, + UFR_MFP_NOT_EXIST_BLOCK_NR = 0xB3, + UFR_MFP_COND_OF_USE_ERROR = 0xB4, + UFR_MFP_LENGTH_ERROR = 0xB5, + UFR_MFP_GENERAL_MANIP_ERROR = 0xB6, + UFR_MFP_SWITCH_TO_ISO14443_4_ERROR = 0xB7, + UFR_MFP_ILLEGAL_STATUS_CODE = 0xB8, + UFR_MFP_MULTI_BLOCKS_READ = 0xB9, + + // APDU Error Codes: + UFR_APDU_TRANSCEIVE_ERROR = 0xAE, + UFR_APDU_JC_APP_NOT_SELECTED = 0x6000, + UFR_APDU_JC_APP_BUFF_EMPTY, + UFR_APDU_WRONG_SELECT_RESPONSE, + UFR_APDU_WRONG_KEY_TYPE, + UFR_APDU_WRONG_KEY_SIZE, + UFR_APDU_WRONG_KEY_PARAMS, + UFR_APDU_WRONG_SIGNING_ALGORITHM, + UFR_APDU_PLAIN_TEXT_SIZE_EXCEEDED, + UFR_APDU_UNSUPPORTED_KEY_SIZE, + UFR_APDU_UNSUPPORTED_ALGORITHMS, + UFR_APDU_PKI_OBJECT_NOT_FOUND, + UFR_APDU_SW_TAG = 0x0A0000, + + MAX_UFR_STATUS = 0x7FFFFFFF + }; + + public enum DL_SECURE_CODE + { + USER_PIN = 0, + SO_PIN, + USER_PUK, + SO_PUK + }; + + public enum DESFIRE_CARD_STATUS_CODES + { + READER_ERROR = 2999, + CARD_OPERATION_OK = 3001, + WRONG_KEY_TYPE = 3002, + KEY_AUTH_ERROR = 3003, + CARD_CRYPTO_ERROR = 3004, + READER_CARD_COMM_ERROR = 3005, + PC_READER_COMM_ERROR = 3006, + COMMIT_TRANSACTION_NO_REPLY = 3007, + COMMIT_TRANSACTION_ERROR = 3008, + DESFIRE_CARD_NO_CHANGES = 0x0C0C, + DESFIRE_CARD_OUT_OF_EEPROM_ERROR = 0x0C0E, + DESFIRE_CARD_ILLEGAL_COMMAND_CODE = 0x0C1C, + DESFIRE_CARD_INTEGRITY_ERROR = 0x0C1E, + DESFIRE_CARD_NO_SUCH_KEY = 0x0C40, + DESFIRE_CARD_LENGTH_ERROR = 0x0C7E, + DESFIRE_CARD_PERMISSION_DENIED = 0x0C9D, + DESFIRE_CARD_PARAMETER_ERROR = 0x0C9E, + DESFIRE_CARD_APPLICATION_NOT_FOUND = 0x0CA0, + DESFIRE_CARD_APPL_INTEGRITY_ERROR = 0x0CA1, + DESFIRE_CARD_AUTHENTICATION_ERROR = 0x0CAE, + DESFIRE_CARD_ADDITIONAL_FRAME = 0x0CAF, + DESFIRE_CARD_BOUNDARY_ERROR = 0x0CBE, + DESFIRE_CARD_PICC_INTEGRITY_ERROR = 0x0CC1, + DESFIRE_CARD_COMMAND_ABORTED = 0x0CCA, + DESFIRE_CARD_PICC_DISABLED_ERROR = 0x0CCD, + DESFIRE_CARD_COUNT_ERROR = 0x0CCE, + DESFIRE_CARD_DUPLICATE_ERROR = 0x0CDE, + DESFIRE_CARD_EEPROM_ERROR_DES = 0x0CEE, + DESFIRE_CARD_FILE_NOT_FOUND = 0x0CF0, + DESFIRE_CARD_FILE_INTEGRITY_ERROR = 0x0CF1 + }; + + public enum DESFIRE_KEY_SETTINGS + { + DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_CHANGE_KEY_CHANGE = 0x09, + DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_CHANGE_KEY_CHANGE = 0x0F, + DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_NOT_CHANGE_KEY_CHANGE = 0x01, + DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_NOT_CHANGE_KEY_CHANGE = 0x07, + DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_CHANGE_KEY_NOT_CHANGE = 0x08, + DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_CHANGE_KEY_NOT_CHANGE = 0x0E, + DESFIRE_KEY_SET_CREATE_WITH_AUTH_SET_NOT_CHANGE_KEY_NOT_CHANGE = 0x00, + DESFIRE_KEY_SET_CREATE_WITHOUT_AUTH_SET_NOT_CHANGE_KEY_NOT_CHANGE = 0x06 + }; + + public static class uFCoder + { + public const uint JCAPP_MIN_PIN_LENGTH = 4; + public const uint JCAPP_MAX_PIN_LENGTH = 8; + public const uint JCAPP_PUK_LENGTH = 8; + public const uint SIG_MAX_PLAIN_DATA_LEN = 255; + public const string JCDL_AID_RID_PLUS = "F0 44 4C 6F 67 69 63"; + public const string JCDL_AID_PIX = "00 01"; + public const string JCDL_AID = JCDL_AID_RID_PLUS + JCDL_AID_PIX; + + const UInt32 MIN_UFR_LIB_VERSION = 0x05000003; // bytes from left to right: MSB=MajorVer, MidSB_H=MinorVer, MidSB_L=0, LSB=BuildNum + const UInt32 MIN_UFR_FW_VERSION = 0x05000007; // bytes from left to right: MSB=MajorVer, MidSB_H=MinorVer, MidSB_L=0, LSB=BuildNum + + //... + //... + //... + [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + static extern bool SetDllDirectory(string lpPathName); + +#if WIN64 + const string DLL_PATH = @"..\..\..\ufr-lib\windows\x86_64\"; + const string NAME_DLL = "uFCoder-x86_64.dll"; + +#else + const string DLL_PATH = @"..\..\ufr-lib\windows\x86\"; + const string NAME_DLL = "uFCoder-x86.dll"; +#endif + const string DLL_NAME = DLL_PATH + NAME_DLL; + + public static void uFrOpen() + { + DL_STATUS status; + UInt32 version = 0; + byte version_major; + byte version_minor; + UInt16 lib_build; + byte fw_build; + String uFR_NotOpenedMessage; + + +#if WIN64 + string DllPath = @"lib\windows\x86_64"; // for x64 target + string name = "uFCoder-x86_64.dll"; +#else + string DllPath = @"lib\windows\x86"; // for x86 target + string name = "uFCoder-x86.dll"; +#endif + string dll_name = DllPath + name; + int repeat_cnt = 0; + bool repeat = true; + do + { + DllPath = @"..\" + DllPath; + SetDllDirectory(DllPath); + try + { + version = uFCoder.GetDllVersion(); + repeat = false; + } + catch (System.Exception) + { + ++repeat_cnt; + } + + } while (repeat && repeat_cnt < 3); // relative path upper folders level search + + if (repeat) + throw new Exception("Can't find " + dll_name + ".\r\nYou will not be able to work with DL Signer cards."); + + // Check lib version: + version_major = (byte)version; + version_minor = (byte)(version >> 8); + lib_build = (ushort)(version >> 16); + + version = ((UInt32)version_major << 24) | ((UInt32)version_minor << 16) | (UInt32)lib_build; + if (version < MIN_UFR_LIB_VERSION) + { + uFR_NotOpenedMessage = "Wrong uFCoder library version.\r\n" + + "You can't work with DL Signer cards.\r\n\r\nUse uFCoder library " + + (MIN_UFR_LIB_VERSION >> 24) + "." + ((MIN_UFR_LIB_VERSION >> 16) & 0xFF) + + "." + (MIN_UFR_LIB_VERSION & 0xFFFF) + " or higher."; + throw new Exception("Wrong uFCoder library version.\r\n" + + "You can't work with DL Signer cards.\r\n\r\nUse uFCoder library " + + (MIN_UFR_LIB_VERSION >> 24) + "." + ((MIN_UFR_LIB_VERSION >> 16) & 0xFF) + + "." + (MIN_UFR_LIB_VERSION & 0xFFFF) + " or higher."); + } + + status = ReaderOpen(); + if (status != (UInt32)uFR.DL_STATUS.UFR_OK) + { + uFR_NotOpenedMessage = "uFR reader not opened.\r\nYou can't work with Desfire cards." + + "\r\n\r\nTry to connect uFR reader and restart application."; + throw new Exception("Can't open uFR reader.\r\nYou will not be able to work with Desfire cards."); + } + + // Check firmware version: + status = GetReaderFirmwareVersion(out version_major, out version_minor); + if (status != (UInt32)uFR.DL_STATUS.UFR_OK) + { + uFCoder.ReaderClose(); + throw new Exception("Can't open uFR reader.\r\nYou will not be able to work with Desfire cards."); + } + status = GetBuildNumber(out fw_build); + if (status != (UInt32)uFR.DL_STATUS.UFR_OK) + { + uFCoder.ReaderClose(); + throw new Exception("Can't open uFR reader.\r\nYou will not be able to work with Desfire cards."); + } + + version = ((UInt32)version_major << 24) | ((UInt32)version_minor << 16) | (UInt32)fw_build; + if (version < MIN_UFR_FW_VERSION) + { + uFCoder.ReaderClose(); + uFR_NotOpenedMessage = "Wrong uFR firmware version.\r\n" + + "You can't work with Desfire cards.\r\n\r\nPlease update firmware to " + + (MIN_UFR_FW_VERSION >> 24) + "." + ((MIN_UFR_FW_VERSION >> 16) & 0xFF) + + "." + (MIN_UFR_FW_VERSION & 0xFFFF) + " or higher."; + throw new Exception("Wrong uFR firmware version.\r\n" + + "Some functions with DESFIRE CARDS will be unavailable.\r\n\r\nPlease update firmware to " + + (MIN_UFR_FW_VERSION >> 24) + "." + ((MIN_UFR_FW_VERSION >> 16) & 0xFF) + + "." + (MIN_UFR_FW_VERSION & 0xFFFF) + " or higher and restart application."); + } + + + } + + //-------------------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------------------- + + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderOpen")] + public static extern DL_STATUS ReaderOpen(); + + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderOpenEx")] + private static extern DL_STATUS ReaderOpenEx(UInt32 reader_type, [In] byte[] port_name, UInt32 port_interface, [In] byte[] arg); + public static DL_STATUS ReaderOpenEx(UInt32 reader_type, string port_name, UInt32 port_interface, string arg) { - if (puk.Length > byte.MaxValue) - return DL_STATUS.UFR_PARAMETERS_ERROR; - - byte[] puk_param = Encoding.ASCII.GetBytes(puk); - return JCAppPinUnblock(SO ? (byte)1 : (byte)0, puk_param, (byte)puk_param.Length); - } - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppGetRsaPublicKey")] - private static extern DL_STATUS JCAppGetRsaPublicKey(byte key_index, [Out] byte[] modulus, out UInt16 modulus_size, - [Out] byte[] exponent, out UInt16 exponent_size); - public static DL_STATUS JCAppGetRsaPublicKey(byte key_index, out byte[] modulus, out byte[] exponent) - { - DL_STATUS status; - - UInt16 modulus_size = 0; - UInt16 exponent_size = 0; - modulus = null; - exponent = null; - status = JCAppGetRsaPublicKey(key_index, modulus, out modulus_size, exponent, out exponent_size); - if (status == DL_STATUS.UFR_OK) - { - modulus = new byte[modulus_size]; - exponent = new byte[exponent_size]; - status = JCAppGetRsaPublicKey(key_index, modulus, out modulus_size, exponent, out exponent_size); - } - return status; - } - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppGetEcPublicKey")] - private static extern DL_STATUS JCAppGetEcPublicKey(byte key_index, [Out] byte[] keyW, out UInt16 keyW_size, - [Out] byte[] field, out UInt16 field_size, [Out] byte[] ab, out UInt16 ab_size, - [Out] byte[] g, out UInt16 g_size, [Out] byte[] r, out UInt16 r_size, out UInt16 k, out UInt16 key_size_bits, out UInt16 key_designator); - public static DL_STATUS JCAppGetEcPublicKey(byte key_index, out byte[] keyW, out byte[] field, out byte[] a, out byte[] b, out byte[] g, out byte[] r, - out UInt16 k, out UInt16 key_size_bits, out UInt16 key_designator) - { - DL_STATUS status; - - UInt16 keyW_size = 0; - UInt16 field_size = 0; - UInt16 ab_size = 0; - UInt16 g_size = 0; - UInt16 r_size = 0; - byte[] ab = null; - keyW = field = a = b = g = r = null; - k = key_size_bits = key_designator = 0; - status = JCAppGetEcPublicKey(key_index, keyW, out keyW_size, field, out field_size, ab, out ab_size, g, out g_size, - r, out r_size, out k, out key_size_bits, out key_designator); - if (status == DL_STATUS.UFR_OK) - { - keyW = new byte[keyW_size]; - field = new byte[field_size]; - ab = new byte[ab_size]; - g = new byte[g_size]; - r = new byte[r_size]; - status = JCAppGetEcPublicKey(key_index, keyW, out keyW_size, field, out field_size, ab, out ab_size, g, out g_size, - r, out r_size, out k, out key_size_bits, out key_designator); - - if (keyW_size != (UInt16)(((key_size_bits + 7) / 8) * 2 + 1)) - return DL_STATUS.UFR_APDU_WRONG_KEY_SIZE; - if ((field_size != (UInt16)((key_size_bits + 7) / 8)) && (field_size != 6) && (field_size != 2)) - return DL_STATUS.UFR_APDU_WRONG_KEY_SIZE; - if (ab_size != (UInt16)(((key_size_bits + 7) / 8) * 2)) - return DL_STATUS.UFR_APDU_WRONG_KEY_SIZE; - if (g_size != (UInt16)(((key_size_bits + 7) / 8) * 2 + 1)) - return DL_STATUS.UFR_APDU_WRONG_KEY_SIZE; - if ((r_size != (UInt16)((key_size_bits + 7) / 8)) && (r_size != (UInt16)(((key_size_bits + 7) / 8) + 1))) - return DL_STATUS.UFR_APDU_WRONG_KEY_SIZE; - a = new byte[(key_size_bits + 7) / 8]; - b = new byte[(key_size_bits + 7) / 8]; - Array.Copy(ab, 0, a, 0, (key_size_bits + 7) / 8); - Array.Copy(ab, (key_size_bits + 7) / 8, b, 0, (key_size_bits + 7) / 8); - } - return status; - } - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "UFR_Status2String")] - private static extern IntPtr UFR_Status2String(DL_STATUS status); - public static string status2str(DL_STATUS status) - { - IntPtr str_ret = UFR_Status2String(status); - return Marshal.PtrToStringAnsi(str_ret); - } - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppGetEcKeySizeBits")] - public static extern DL_STATUS JCAppGetEcKeySizeBits(byte key_index, out UInt16 key_size_bits, out UInt16 key_designator); - //---------------------------------------------------------------------- - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "UfrXrcLockOn")] - public static extern DL_STATUS UfrXrcLockOn(UInt16 pulse_duration); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "UfrXrcRelayState")] - public static extern DL_STATUS UfrXrcRelayState(byte state); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "UfrXrcGetIoState")] - public static extern DL_STATUS UfrXrcGetIoState(out byte intercom, out byte dig_in, out byte relay_state); - - //---------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderOpenM")] - public static extern DL_STATUS ReaderOpenM(UFR_HANDLE hndUFR); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderCloseM")] - public static extern DL_STATUS ReaderCloseM(UFR_HANDLE hndUFR); - - //---------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetCardIdExM")] - public static extern DL_STATUS GetCardIdExM(UFR_HANDLE hndUFR, - out byte bCardType, - [Out] byte nfc_uid, // NFC_UID_MAX_LEN = 10 - out byte bUidSize); - - //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetReaderTypeM")] - //public static extern DL_STATUS GetReaderTypeM(UInt32* get_reader_type); - - //---------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "BlockRead_PKM")] - public static extern DL_STATUS BlockRead_PKM(UFR_HANDLE hndUFR, - out byte data, - byte block_address, - byte auth_mode, - ref byte key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "BlockWrite_PKM")] - public static extern DL_STATUS BlockWrite_PKM(UFR_HANDLE hndUFR, - out byte data, - byte block_address, - byte auth_mode, - ref byte key); - //---------------------------------------------------------------------- - - //Desfire - //---------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireWriteAesKey")] - public static extern DL_STATUS uFR_int_DesfireWriteAesKey(byte aes_key_no, - [In] byte[] aes_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_GetDesfireUid")] - public static extern DL_STATUS uFR_int_GetDesfireUid(byte aes_key_nr, - UInt32 aid, - byte aid_key_nr, - [Out] byte[] card_uid, - out byte card_uid_len, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_GetDesfireUid_PK")] - public static extern DL_STATUS uFR_int_GetDesfireUid_PK([In] byte[] aes_key_ext, - UInt32 aid, - byte aid_key_nr, - [Out] byte[] card_uid, - out byte card_uid_len, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireFreeMem")] - public static extern DL_STATUS uFR_int_DesfireFreeMem(out UInt32 free_mem_byte, - out UInt16 card_status, - out UInt16 exec_time); - - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireFormatCard")] - public static extern DL_STATUS uFR_int_DesfireFormatCard(byte aes_key_nr, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireFormatCard_PK")] - public static extern DL_STATUS uFR_int_DesfireFormatCard_PK([In] byte[] aes_key_ext, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireSetConfiguration")] - public static extern DL_STATUS uFR_int_DesfireSetConfiguration(byte aes_key_nr, - byte random_uid, - byte format_disable, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireSetConfiguration_PK")] - public static extern DL_STATUS uFR_int_DesfireSetConfiguration_PK([In] byte[] aes_key_ext, - byte random_uid, - byte format_disable, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireGetKeySettings")] - public static extern DL_STATUS uFR_int_DesfireGetKeySettings(byte aes_key_nr, - UInt32 aid, - out byte settings, - out byte max_key_no, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireGetKeySettings_PK")] - public static extern DL_STATUS uFR_int_DesfireGetKeySettings_PK([In] byte[] aes_key_ext, - UInt32 aid, - out byte settings, - out byte max_key_no, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireChangeKeySettings")] - public static extern DL_STATUS uFR_int_DesfireChangeKeySettings(byte aes_key_nr, - UInt32 aid, - byte settings, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireChangeKeySettings_PK")] - public static extern DL_STATUS uFR_int_DesfireChangeKeySettings_PK([In] byte[] aes_key_ext, - UInt32 aid, - byte settings, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireChangeAesKey")] - public static extern DL_STATUS uFR_int_DesfireChangeAesKey(byte aes_key_nr, - UInt32 aid, - byte aid_key_nr_auth, - [In] byte[] new_aes_key, - byte aid_key_no, - [In] byte[] old_aes_key, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireChangeAesKey_PK")] - public static extern DL_STATUS uFR_int_DesfireChangeAesKey_PK([In] byte[] aes_key_ext, - UInt32 aid, - byte aid_key_nr_auth, - [In] byte[] new_aes_key, - byte aid_key_no, - [In] byte[] old_aes_key, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireCreateAesApplication")] - public static extern DL_STATUS uFR_int_DesfireCreateAesApplication(byte aes_key_nr, - UInt32 aid_nr, - byte setting, - byte max_key_no, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireCreateAesApplication_PK")] - public static extern DL_STATUS uFR_int_DesfireCreateAesApplication_PK([In] byte[] aes_key_ext, - UInt32 aid_nr, - byte setting, - byte max_key_no, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireCreateAesApplication_no_auth")] - public static extern DL_STATUS uFR_int_DesfireCreateAesApplication_no_auth(UInt32 aid_nr, - byte setting, - byte max_key_no, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireDeleteApplication")] - public static extern DL_STATUS uFR_int_DesfireDeleteApplication(byte aes_key_nr, - UInt32 aid_nr, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireDeleteApplication_PK")] - public static extern DL_STATUS uFR_int_DesfireDeleteApplication_PK([In] byte[] aes_key_ext, - UInt32 aid_nr, - out UInt16 card_status, - out UInt16 exec_time); - - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireCreateStdDataFile")] - public static extern DL_STATUS uFR_int_DesfireCreateStdDataFile(byte aes_key_nr, - UInt32 aid, - byte file_id, - UInt32 file_size, - byte read_key_no, - byte write_key_no, - byte read_write_key_no, - byte change_key_no, - byte communication_settings, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireCreateStdDataFile_PK")] - public static extern DL_STATUS uFR_int_DesfireCreateStdDataFile_PK([In] byte[] aes_key_ext, - UInt32 aid, - byte file_id, - UInt32 file_size, - byte read_key_no, - byte write_key_no, - byte read_write_key_no, - byte change_key_no, - byte communication_settings, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireCreateStdDataFile_no_auth")] - public static extern DL_STATUS uFR_int_DesfireCreateStdDataFile_no_auth(UInt32 aid, - byte file_id, - UInt32 file_size, - byte read_key_no, - byte write_key_no, - byte read_write_key_no, - byte change_key_no, - byte communication_settings, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireDeleteFile")] - public static extern DL_STATUS uFR_int_DesfireDeleteFile(byte aes_key_nr, - UInt32 aid, - byte file_id, - out UInt16 card_status, - out UInt16 exec_time); - - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireDeleteFile_PK")] - public static extern DL_STATUS uFR_int_DesfireDeleteFile_PK([In] byte[] aes_key_ext, - UInt32 aid, - byte file_id, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireDeleteFile_no_auth")] - public static extern DL_STATUS uFR_int_DesfireDeleteFile_no_auth(UInt32 aid, - byte file_id, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireReadStdDataFile")] - public static extern DL_STATUS uFR_int_DesfireReadStdDataFile(byte aes_key_nr, - UInt32 aid, - byte aid_key_nr, - byte file_id, - UInt16 offset, - UInt16 data_length, - byte communication_settings, - [Out] byte[] data, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireReadStdDataFile_PK")] - public static extern DL_STATUS uFR_int_DesfireReadStdDataFile_PK([In] byte[] aes_key_ext, - UInt32 aid, - byte aid_key_nr, - byte file_id, - UInt16 offset, - UInt16 data_length, - byte communication_settings, - [Out] byte[] data, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireReadStdDataFile_no_auth")] - public static extern DL_STATUS uFR_int_DesfireReadStdDataFile_no_auth(UInt32 aid, - byte aid_key_nr, - byte file_id, - UInt16 offset, - UInt16 data_length, - byte communication_settings, - [Out] byte[] data, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireWriteStdDataFile")] - public static extern DL_STATUS uFR_int_DesfireWriteStdDataFile(byte aes_key_nr, - UInt32 aid, - byte aid_key_nr, - byte file_id, - UInt16 offset, - UInt16 data_length, - byte communication_settings, - [In] byte[] data, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireWriteStdDataFile_PK")] - public static extern DL_STATUS uFR_int_DesfireWriteStdDataFile_PK([In] byte[] aes_key_ext, - UInt32 aid, - byte aid_key_nr, - byte file_id, - UInt16 offset, - UInt16 data_length, - byte communication_settings, - [In] byte[] data, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireWriteStdDataFile_no_auth")] - public static extern DL_STATUS uFR_int_DesfireWriteStdDataFile_no_auth(UInt32 aid, - byte aid_key_nr, - byte file_id, - UInt16 offset, - UInt16 data_length, - byte communication_settings, - [In] byte[] data, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "DES_to_AES_key_type")] - public static extern DL_STATUS DES_to_AES_key_type(); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "AES_to_DES_key_type")] - public static extern DL_STATUS AES_to_DES_key_type(); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "SetSpeedPermanently")] - public static extern DL_STATUS SetSpeedPermanently(byte tx_speed, byte rx_speed); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetSpeedParameters")] - public static extern DL_STATUS GetSpeedParameters(out byte tx_speed, out byte rx_speed); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireCreateValueFile")] - public static extern DL_STATUS uFR_int_DesfireCreateValueFile(byte aes_key_nr, - UInt32 aid, - byte file_id, - Int32 lower_limit, - Int32 upper_limit, - Int32 value, - byte limited_credit_enabled, - byte read_key_no, - byte write_key_no, - byte read_write_key_no, - byte change_key_no, - byte communication_settings, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireCreateValueFile_PK")] - public static extern DL_STATUS uFR_int_DesfireCreateValueFile_PK([In] byte[] aes_key_ext, - UInt32 aid, - byte file_id, - Int32 lower_limit, - Int32 upper_limit, - Int32 value, - byte limited_credit_enabled, - byte read_key_no, - byte write_key_no, - byte read_write_key_no, - byte change_key_no, - byte communication_settings, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireCreateValueFile_no_auth")] - public static extern DL_STATUS uFR_int_DesfireCreateValueFile_no_auth(UInt32 aid, - byte file_id, - Int32 lower_limit, - Int32 upper_limit, - Int32 value, - byte limited_credit_enabled, - byte read_key_no, - byte write_key_no, - byte read_write_key_no, - byte change_key_no, - byte communication_settings, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireReadValueFile")] - public static extern DL_STATUS uFR_int_DesfireReadValueFile(byte aes_key_nr, - UInt32 aid, - byte aid_key_nr, - byte file_id, - byte communication_settings, - out Int32 value, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireReadValueFile_PK")] - public static extern DL_STATUS uFR_int_DesfireReadValueFile_PK([In] byte[] aes_key_ext, - UInt32 aid, - byte aid_key_nr, - byte file_id, - byte communication_settings, - out Int32 value, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireReadValueFile_no_auth")] - public static extern DL_STATUS uFR_int_DesfireReadValueFile_no_auth(UInt32 aid, - byte aid_key_nr, - byte file_id, - byte communication_settings, - out Int32 value, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireIncreaseValueFile")] - public static extern DL_STATUS uFR_int_DesfireIncreaseValueFile(byte aes_key_nr, - UInt32 aid, - byte aid_key_nr, - byte file_id, - byte communication_settings, - Int32 value, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireIncreaseValueFile_PK")] - public static extern DL_STATUS uFR_int_DesfireIncreaseValueFile_PK([In] byte[] aes_key_ext, - UInt32 aid, - byte aid_key_nr, - byte file_id, - byte communication_settings, - Int32 value, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireIncreaseValueFile_no_auth")] - public static extern DL_STATUS uFR_int_DesfireIncreaseValueFile_no_auth(UInt32 aid, - byte aid_key_nr, - byte file_id, - byte communication_settings, - Int32 value, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireDecreaseValueFile")] - public static extern DL_STATUS uFR_int_DesfireDecreaseValueFile(byte aes_key_nr, - UInt32 aid, - byte aid_key_nr, - byte file_id, - byte communication_settings, - Int32 value, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireDecreaseValueFile_PK")] - public static extern DL_STATUS uFR_int_DesfireDecreaseValueFile_PK([In] byte[] aes_key_ext, - UInt32 aid, - byte aid_key_nr, - byte file_id, - byte communication_settings, - Int32 value, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireDecreaseValueFile_no_auth")] - public static extern DL_STATUS uFR_int_DesfireDecreaseValueFile_no_auth(UInt32 aid, - byte aid_key_nr, - byte file_id, - byte communication_settings, - Int32 value, - out UInt16 card_status, - out UInt16 exec_time); - - //--------------------------------------------------------------------- - - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderKeysLock")] - public static extern DL_STATUS ReaderKeysLock([In] char[] password); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderKeysUnlock")] - public static extern DL_STATUS ReaderKeysUnlock([In] char[] password); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetReaderDescription")] - private static extern IntPtr GetReaderDescription(); - public static string GetDescription() - { - IntPtr str_ret = GetReaderDescription(); - return Marshal.PtrToStringAnsi(str_ret); - } - - //-------------------------------------------- MIFARE PLUS -------------------------------------------------// - - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_PersonalizationMinimal")] - public static extern DL_STATUS MFP_PersonalizationMinimal([In] byte[] master_key, [In] byte[] config_key, [In] byte[] l2_sw_key, [In] byte[] l3_sw_key, - [In] byte[] l1_auth_key, [In] byte[] sel_vc_key, [In] byte[] prox_chk_key, [In] byte[] vc_poll_enc_key, - [In] byte[] vc_poll_mac_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_AesAuthSecurityLevel1_PK")] - public static extern DL_STATUS MFP_AesAuthSecurityLevel1_PK([In] byte[] sl1_auth_key); - - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_AesAuthSecurityLevel1")] - public static extern DL_STATUS MFP_AesAuthSecurityLevel1(byte key_index); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_SwitchToSecurityLevel3_PK")] - public static extern DL_STATUS MFP_SwitchToSecurityLevel3_PK([In] byte[] sl3_auth_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_SwitchToSecurityLevel3")] - public static extern DL_STATUS MFP_SwitchToSecurityLevel3(byte key_index); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_ChangeMasterKey_PK")] - public static extern DL_STATUS MFP_ChangeMasterKey_PK([In] byte[] old_master_key, [In] byte[] new_master_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_ChangeMasterKey")] - public static extern DL_STATUS MFP_ChangeMasterKey(byte key_index, [In] byte[] new_master_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_ChangeConfigurationKey_PK")] - public static extern DL_STATUS MFP_ChangeConfigurationKey_PK([In] byte[] old_config_key, [In] byte[] new_config_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_ChangeConfigurationKey")] - public static extern DL_STATUS MFP_ChangeConfigurationKey(byte key_index, [In] byte[] new_config_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_ChangeSectorKey_PK")] - public static extern DL_STATUS MFP_ChangeSectorKey_PK(byte sector_nr, byte auth_mode, [In] byte[] old_sector_key, [In] byte[] new_sector_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_ChangeSectorKey")] - public static extern DL_STATUS MFP_ChangeSectorKey(byte sector_nr, byte auth_mode, byte key_index, [In] byte[] new_sector_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_FieldConfigurationSet_PK")] - public static extern DL_STATUS MFP_FieldConfigurationSet_PK([In] byte[] configuration_key, byte rid_use, byte prox_check_use); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_FieldConfigurationSet")] - public static extern DL_STATUS MFP_FieldConfigurationSet(byte configuration_key_index, byte rid_use, byte prox_check_use); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_GetUid_PK")] - public static extern DL_STATUS MFP_GetUid_PK([In] byte[] vc_poll_enc_key, [In] byte[] vc_poll_mac_key, [In,Out] byte[] nfc_uid,out byte uid_len); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_GetUid")] - public static extern DL_STATUS MFP_GetUid(byte key_index_vc_poll_enc_key, byte key_index_vc_poll_mac_key, [In, Out] byte[] nfc_uid, out byte uid_len); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_ChangeVcPollingEncKey_PK")] - public static extern DL_STATUS MFP_ChangeVcPollingEncKey_PK([In] byte[] configuration_key, [In] byte[] new_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_ChangeVcPollingEncKey")] - public static extern DL_STATUS MFP_ChangeVcPollingEncKey(byte configuration_key_index, [In] byte[] new_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_ChangeVcPollingMacKey_PK")] - public static extern DL_STATUS MFP_ChangeVcPollingMacKey_PK([In] byte[] configuration_key, [In] byte[] new_key); - - //--------------------------------------------------------------------- - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_ChangeVcPollingMacKey")] - public static extern DL_STATUS MFP_ChangeVcPollingMacKey(byte configuration_key_index, [In] byte[] new_key); - - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "write_ndef_record")] - private static extern DL_STATUS write_ndef_record(byte message_nr, [In] byte[] tnf, [In] byte[] type_record, [In] byte[] type_length, [In] byte[] id, [In] byte[] id_length, [In] byte[] payload, [In] UInt32[] payload_length, out byte[] card_formated); - - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "write_ndef_record_mirroring")] - private static extern DL_STATUS write_ndef_record_mirroring(byte message_nr, [In] byte[] tnf, [In] byte[] type_record, [In] byte[] type_length, [In] byte[] id, [In] byte[] id_length, [In] byte[] payload, [In] UInt32[] payload_length, out byte[] card_formated, int use_uid_ascii_mirror, int use_counter_ascii_mirror, UInt32 payload_mirroring_pos); - - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "write_ndef_recordM")] - private static extern DL_STATUS write_ndef_recordM(UFR_HANDLE hndUFR, byte message_nr, [In] byte[] tnf, [In] byte[] type_record, [In] byte[] type_length, [In] byte[] id, [In] byte[] id_length, [In] byte[] payload, [In] UInt32[] payload_length, out byte[] card_formated); - - [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "write_ndef_record_mirroringM")] - private static extern DL_STATUS write_ndef_record_mirroringM(UFR_HANDLE hndUFR, byte message_nr, [In] byte[] tnf, [In] byte[] type_record, [In] byte[] type_length, [In] byte[] id, [In] byte[] id_length, [In] byte[] payload, [In] UInt32[] payload_length, out byte[] card_formated, int use_uid_ascii_mirror, int use_counter_ascii_mirror, UInt32 payload_mirroring_pos); - } -} + byte[] port_name_p = Encoding.ASCII.GetBytes(port_name); + byte[] port_name_param = new byte[port_name_p.Length + 1]; + Array.Copy(port_name_p, 0, port_name_param, 0, port_name_p.Length); + port_name_param[port_name_p.Length] = 0; + + byte[] arg_p = Encoding.ASCII.GetBytes(arg); + byte[] arg_param = new byte[arg_p.Length + 1]; + Array.Copy(arg_p, 0, arg_param, 0, arg_p.Length); + arg_param[arg_p.Length] = 0; + + return ReaderOpenEx(reader_type, port_name_param, port_interface, arg_param); + } + + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderClose")] + public static extern DL_STATUS ReaderClose(); + + //-------------------------------------------------------------------------------------------------- + + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetReaderType")] + public static extern DL_STATUS GetReaderType(out UInt32 lpulReaderType); + + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetReaderSerialDescription")] + private static extern DL_STATUS getReaderSerialDescription(StringBuilder pSerialDescription); + public static DL_STATUS GetReaderSerialDescription(out string SerialDescription) + { + StringBuilder pSerialDescription = new StringBuilder(7); + DL_STATUS status = DL_STATUS.UFR_OK; + + status = getReaderSerialDescription(pSerialDescription); + if (status == DL_STATUS.UFR_OK) + SerialDescription = pSerialDescription.ToString(); + else + SerialDescription = ""; + return status; + } + + //--------------------------------------------------------------------- + // Card emulation: + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "TagEmulationStart")] + public static extern DL_STATUS TagEmulationStart(); + + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "TagEmulationStop")] + public static extern DL_STATUS TagEmulationStop(); + + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "CombinedModeEmulationStart")] + public static extern DL_STATUS CombinedModeEmulationStart(); + //--------------------------------------------------------------------- + + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetDlogicCardType")] + public static extern DL_STATUS GetDlogicCardType(out byte lpucCardType); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_UpdateAndGetCount")] + public static extern DL_STATUS ReaderList_UpdateAndGetCount(out UInt32 NumberOfDevices); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_GetSerialByIndex")] + public static extern DL_STATUS ReaderList_GetSerialByIndex(Int32 DeviceIndex, out UInt32 lpulSerialNumber); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_GetSerialDesByIndex")] + public static extern DL_STATUS ReaderList_GetSerialDescriptionByIndex(Int32 DeviceIndex, out byte pSerialDescription); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_GetTypeByIndex")] + public static extern DL_STATUS ReaderList_GetTypeByIndex(Int32 DeviceIndex, out UInt32 lpulReaderType); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_GetFTDISerialByIndex")] + private static extern DL_STATUS GetFTDISerialByIndex(UInt32 DeviceIndex, out IntPtr DeviceSerial); + public static DL_STATUS ReaderList_GetFTDISerialByIndex(UInt32 DeviceIndex, out string DeviceSerial) + { + IntPtr ptr; + DL_STATUS status = DL_STATUS.UFR_OK; + + status = GetFTDISerialByIndex(DeviceIndex, out ptr); + DeviceSerial = Marshal.PtrToStringAnsi(ptr); + return status; + } + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_GetFTDIDescriptionByIndex")] + private static extern DL_STATUS GetFTDIDescriptionByIndex(UInt32 DeviceIndex, out IntPtr DeviceDescription); + public static DL_STATUS ReaderList_GetFTDIDescriptionByIndex(UInt32 DeviceIndex, out string DeviceDescription) + { + IntPtr ptr; + DL_STATUS status = DL_STATUS.UFR_OK; + + status = GetFTDIDescriptionByIndex(DeviceIndex, out ptr); + DeviceDescription = Marshal.PtrToStringAnsi(ptr); + return status; + } + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_OpenByIndex")] + public static extern DL_STATUS ReaderList_OpenByIndex(Int32 DeviceIndex, out UFR_HANDLE hndUFR); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetDllVersion")] + public static extern UInt32 GetDllVersion(); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetReaderHardwareVersion")] + public static extern DL_STATUS GetReaderHardwareVersion(out byte version_major, out byte version_minor); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetReaderFirmwareVersion")] + public static extern DL_STATUS GetReaderFirmwareVersion(out byte version_major, out byte version_minor); + + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetBuildNumber")] + public static extern DL_STATUS GetBuildNumber(out byte build); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "SectorTrailerWriteUnsafe_PK")] + public static extern DL_STATUS SectorTrailerWriteUnsafe_PK(byte addressing_mode, byte address, out byte sector_trailer, + byte auth_mode, ref byte key); + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "LinearWrite_PK")] + public static extern DL_STATUS LinearWrite_PK([In] byte[] data, ushort linear_address, ushort length, out ushort bytes_written, + byte auth_mode, [In] byte[] key); + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "EE_Lock")] + private static extern DL_STATUS Linkage_EE_Lock(StringBuilder password, UInt32 locked); + public static DL_STATUS EE_Lock(String password, UInt32 locked) + { + if (password.Length != 8) + return DL_STATUS.UFR_PARAMETERS_ERROR; + + StringBuilder ptr_password = new StringBuilder(password); + return Linkage_EE_Lock(ptr_password, locked); + } + + //-------------------------------------------------------------------------------------------------------------- + + //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderOpen")] + //public static extern DL_STATUS ReaderOpen(); + + //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderClose")] + //public static extern DL_STATUS ReaderClose(); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ReaderReset")] + public static extern DL_STATUS ReaderReset(); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ReaderSoftRestart")] + public static extern DL_STATUS ReaderSoftRestart(); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "UfrEnterSleepMode")] + public static extern DL_STATUS UfrEnterSleepMode(); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "UfrLeaveSleepMode")] + public static extern DL_STATUS UfrLeaveSleepMode(); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "AutoSleepSet")] + public static extern DL_STATUS AutoSleepSet(byte seconds_wait); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "AutoSleepGet")] + public static extern DL_STATUS AutoSleepGet(out byte seconds_wait); + + //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "GetReaderType")] + //public static extern DL_STATUS GetReaderType(out UInt32 get_reader_type); + + //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetReaderSerialDescription")] + //public static extern DL_STATUS GetReaderSerialDescription(out byte pSerialDescription); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "GetReaderSerialNumber")] + public static extern DL_STATUS GetReaderSerialNumber(out UInt32 serial_number); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ReaderKeyWrite")] + public static extern DL_STATUS ReaderKeyWrite([In] byte[] aucKey, byte ucKeyIndex); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ReaderUISignal")] + public static extern DL_STATUS ReaderUISignal(int light_mode, int sound_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ReadUserData")] + public static extern DL_STATUS ReadUserData(out byte aucData); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "WriteUserData")] + public static extern DL_STATUS WriteUserData(out byte aucData); + + //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "GetReaderHardwareVersion")] + //public static extern DL_STATUS GetReaderHardwareVersion(out byte bVerMajor, + // out byte bVerMinor); + //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "GetReaderFirmwareVersion")] + //public static extern DL_STATUS GetReaderFirmwareVersion(out byte bVerMajor, + // out byte bVerMinor); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "SetDisplayData")] + public static extern DL_STATUS SetDisplayData(out byte display_data, byte data_length); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "SetSpeakerFrequency")] + public static extern DL_STATUS SetSpeakerFrequency(short fhz); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "SetDisplayIntensity")] + public static extern DL_STATUS SetDisplayIntensity(Byte intensity); // 0 to 100 [%] + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "GetDisplayIntensity")] + public static extern DL_STATUS GetDisplayIntensity(out Byte intensity); // 0 to 100 [%] + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "GetCardIdEx")] + public static extern DL_STATUS GetCardIdEx(out byte bCardType, + [In, Out] byte[] nfc_uid, // NFC_UID_MAX_LEN = 10 + out byte bUidSize); + + //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetDlogicCardType")] + //public static extern DL_STATUS GetDlogicCardType(out byte lpucCardType); + + //-------------------------------------------------------------------------------------------------------------- + + //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_UpdateAndGetCount")] + //public static extern DL_STATUS ReaderList_UpdateAndGetCount(Int32* NumberOfDevices); + + //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_GetSerialByIndex")] + //public static extern DL_STATUS ReaderList_GetSerialByIndex(Int32 DeviceIndex, UInt32* lpulSerialNumber); + + //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_GetSerialDesByIndex")] + //public static extern DL_STATUS ReaderList_GetSerialDescriptionByIndex(Int32 DeviceIndex, char* pSerialDescription); + + //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_GetTypeByIndex")] + //public static extern DL_STATUS ReaderList_GetTypeByIndex(Int32 DeviceIndex, UInt32* lpulReaderType); + + //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_GetFTDISerialByIndex")] + //public static extern DL_STATUS ReaderList_GetFTDISerialByIndex(Int32 DeviceIndex, char** Device_Serial); + + //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderList_GetFTDIDescriptionByIndex")] + //public static extern DL_STATUS ReaderList_GetFTDIDescriptionByIndex(Int32 DeviceIndex, char** Device_Description); + + //-------------------------------------------------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearRead")] + public static extern DL_STATUS LinearRead([Out] byte[] aucData, + ushort linear_address, + ushort data_len, + out UInt16 bytes_written, + byte auth_mode, + byte key_index); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearRead_AKM1")] + public static extern DL_STATUS LinearRead_AKM1([Out] byte[] aucData, + ushort linear_address, + ushort data_len, + out UInt16 bytes_written, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearRead_AKM2")] + public static extern DL_STATUS LinearRead_AKM2([Out] byte[] aucData, + ushort linear_address, + ushort data_len, + out UInt16 bytes_written, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearRead_PK")] + public static extern DL_STATUS LinearRead_PK([Out] byte[] aucData, + ushort linear_address, + ushort data_len, + out UInt16 bytes_written, + byte auth_mode, + [In] byte[] pk_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearWrite")] + public static extern DL_STATUS LinearWrite([In] byte[] aucData, + ushort linear_address, + ushort data_len, + out UInt16 bytes_written, + byte auth_mode, + byte key_index); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearWrite_AKM1")] + public static extern DL_STATUS LinearWrite_AKM1([In] byte[] aucData, + ushort linear_address, + ushort data_len, + out UInt16 bytes_written, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearWrite_AKM2")] + public static extern DL_STATUS LinearWrite_AKM2([In] byte[] aucData, + ushort linear_address, + ushort data_len, + out UInt16 bytes_written, + byte auth_mode); + + //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearWrite_PK")] + //public static extern DL_STATUS LinearWrite_PK(out byte aucData, + // ushort linear_address, + // ushort data_len, + // out UInt16 bytes_written, + // byte key_mode, + // out byte pk_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockRead")] + public static extern DL_STATUS BlockRead([Out] byte[] data, + UInt16 block_address, + byte auth_mode, + UInt16 key_index); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockRead_AKM1")] + public static extern DL_STATUS BlockRead_AKM1([Out] byte[] data, + UInt16 block_address, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockRead_AKM2")] + public static extern DL_STATUS BlockRead_AKM2([Out] byte[] data, + UInt16 block_address, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockRead_PK")] + public static extern DL_STATUS BlockRead_PK([Out] byte[] data, + UInt16 block_address, + byte auth_mode, + [In] byte[] pk_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockWrite")] + public static extern DL_STATUS BlockWrite([In] byte[] data, + UInt16 block_address, + byte auth_mode, + byte key_index); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockWrite_AKM1")] + public static extern DL_STATUS BlockWrite_AKM1([In] byte[] data, + UInt16 block_address, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockWrite_AKM2")] + public static extern DL_STATUS BlockWrite_AKM2([In] byte[] data, + UInt16 block_address, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockWrite_PK")] + public static extern DL_STATUS BlockWrite_PK([In] byte[] data, + UInt16 block_address, + byte auth_mode, + [In] byte[] pk_key); + + + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockInSectorRead")] + public static extern DL_STATUS BlockInSectorRead([Out] byte[] data, + byte sector_address, + byte block_in_sector_address, + byte auth_mode, byte key_index); + + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockInSectorRead_AKM1")] + public static extern DL_STATUS BlockInSectorRead_AKM1([Out] byte[] data, + byte sector_address, + byte block_in_sector_address, + byte auth_mode); + + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockInSectorRead_AKM2")] + public static extern DL_STATUS BlockInSectorRead_AKM2([Out] byte[] data, + byte sector_address, + byte block_in_sector_address, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockInSectorRead_PK")] + public static extern DL_STATUS BlockInSectorRead_PK([Out] byte[] data, + byte sector_address, + byte block_in_sector_address, + byte auth_mode, + [In] byte[] pk_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockInSectorWrite")] + public static extern DL_STATUS BlockInSectorWrite([In] byte[] data, + byte sector_address, + byte block_in_sector_address, + byte auth_mode, + byte key_index); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockInSectorWrite_AKM1")] + public static extern DL_STATUS BlockInSectorWrite_AKM1([In] byte[] data, + byte sector_address, + byte block_in_sector_address, + byte auth_mode); + + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockInSectorWrite_AKM2")] + public static extern DL_STATUS BlockInSectorWrite_AKM2([In] byte[] data, + byte sector_address, + byte block_in_sector_address, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "BlockInSectorWrite_PK")] + public static extern DL_STATUS BlockInSectorWrite_PK([In] byte[] data, + byte sector_address, + byte block_in_sector_address, + byte auth_mode, + [In] byte[] pk_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockRead")] + public static extern DL_STATUS ValueBlockRead(out Int32 value, + out byte value_addr, + UInt16 block_address, + byte auth_mode, + byte key_index); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockRead_AKM1")] + public static extern DL_STATUS ValueBlockRead_AKM1(out Int32 value, + out byte value_addr, + UInt16 block_address, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockRead_AKM2")] + public static extern DL_STATUS ValueBlockRead_AKM2(out Int32 value, + out byte value_addr, + UInt16 block_address, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockRead_PK")] + public static extern DL_STATUS ValueBlockRead_PK(out Int32 value, + out byte value_addr, + UInt16 block_address, + byte auth_mode, + out byte pk_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockWrite")] + public static extern DL_STATUS ValueBlockWrite(int value, + byte value_addr, + UInt16 block_address, + byte auth_mode, + byte key_index); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockWrite_AKM1")] + public static extern DL_STATUS ValueBlockWrite_AKM1(int value, + byte value_addr, + UInt16 block_address, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockWrite_AKM2")] + public static extern DL_STATUS ValueBlockWrite_AKM2(int value, + byte value_addr, + UInt16 block_address, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockWrite_PK")] + public static extern DL_STATUS ValueBlockWrite_PK(int value, + byte value_addr, + UInt16 block_address, + byte auth_mode, + out byte pk_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockIncrement")] + public static extern DL_STATUS ValueBlockIncrement(int increment_value, + UInt16 block_address, + byte auth_mode, + byte key_index); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockIncrement_AKM1")] + public static extern DL_STATUS ValueBlockIncrement_AKM1(int increment_value, + UInt16 block_address, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockIncrement_AKM2")] + public static extern DL_STATUS ValueBlockIncrement_AKM2(int increment_value, + UInt16 block_address, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockIncrement_PK")] + public static extern DL_STATUS ValueBlockIncrement_PK(int increment_value, + UInt16 block_address, + byte auth_mode, + out byte pk_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockDecrement")] + public static extern DL_STATUS ValueBlockDecrement(int increment_value, + UInt16 block_address, + byte auth_mode, + byte key_index); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockDecrement_AKM1")] + public static extern DL_STATUS ValueBlockDecrement_AKM1(int increment_value, + UInt16 block_address, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockDecrement_AKM2")] + public static extern DL_STATUS ValueBlockDecrement_AKM2(int increment_value, + UInt16 block_address, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockDecrement_PK")] + public static extern DL_STATUS ValueBlockDecrement_PK(int increment_value, + UInt16 block_address, + byte auth_mode, + out byte pk_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorRead")] + public static extern DL_STATUS ValueBlockInSectorRead(out Int32 value, + out byte value_addr, + byte sector_address, + byte block_in_sector_address, + byte auth_mode, + byte key_index); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorRead_AKM1")] + public static extern DL_STATUS ValueBlockInSectorRead_AKM1(out Int32 value, + out byte value_addr, + byte sector_address, + byte block_in_sector_address, + byte auth_mode); + + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorRead_AKM2")] + public static extern DL_STATUS ValueBlockInSectorRead_AKM2(out Int32 value, + out byte value_addr, + byte sector_address, + byte block_in_sector_address, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorRead_PK")] + public static extern DL_STATUS ValueBlockInSectorRead_PK(out Int32 value, + out byte value_addr, + byte sector_address, + byte block_in_sector_address, + byte auth_mode, + out byte pk_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorWrite")] + public static extern DL_STATUS ValueBlockInSectorWrite(Int32 value, + byte value_addr, + byte sector_address, + byte block_in_sector_address, + byte auth_mode, byte key_index); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorWrite_AKM1")] + public static extern DL_STATUS ValueBlockInSectorWrite_AKM1(Int32 value, + byte value_addr, + byte sector_address, + byte block_in_sector_address, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorWrite_AKM2")] + public static extern DL_STATUS ValueBlockInSectorWrite_AKM2(Int32 value, + byte value_addr, + byte sector_address, + byte block_in_sector_address, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorWrite_PK")] + public static extern DL_STATUS ValueBlockInSectorWrite_PK(Int32 value, + byte value_addr, + byte sector_address, + byte block_in_sector_address, + byte auth_mode, + out byte pk_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorIncrement")] + public static extern DL_STATUS ValueBlockInSectorIncrement(Int32 increment_value, + byte sector_address, + byte block_in_sector_address, + byte auth_mode, + byte key_index); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorIncrement_AKM1")] + public static extern DL_STATUS ValueBlockInSectorIncrement_AKM1(Int32 increment_value, + byte sector_address, + byte block_in_sector_address, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorIncrement_AKM2")] + public static extern DL_STATUS ValueBlockInSectorIncrement_AKM2(Int32 increment_value, + byte sector_address, + byte block_in_sector_address, + byte auth_mode); + + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorIncrement_PK")] + public static extern DL_STATUS ValueBlockInSectorIncrement_PK(Int32 increment_value, + byte sector_address, + byte block_in_sector_address, + byte auth_mode, + out byte pk_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorDecrement")] + public static extern DL_STATUS ValueBlockInSectorDecrement(Int32 decrement_value, + byte sector_address, + byte block_in_sector_address, + byte auth_mode, + byte key_index); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorDecrement_AKM1")] + public static extern DL_STATUS ValueBlockInSectorDecrement_AKM1(Int32 decrement_value, + byte sector_address, + byte block_in_sector_address, + byte auth_mode); + + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorDecrement_AKM2")] + public static extern DL_STATUS ValueBlockInSectorDecrement_AKM2(Int32 decrement_value, + byte sector_address, + byte block_in_sector_address, + byte auth_mode); + + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "ValueBlockInSectorDecrement_PK")] + public static extern DL_STATUS ValueBlockInSectorDecrement_PK(Int32 decrement_value, + byte sector_address, + byte block_in_sector_address, + byte auth_mode, + out byte pk_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "SectorTrailerWrite")] + public static extern DL_STATUS SectorTrailerWrite(byte addressing_mode, + byte address, + out byte new_key_A, + byte block0_access_bits, + byte block1_access_bits, + byte block2_access_bits, + byte sector_trailer_access_bits, + byte sector_trailer_byte9, + out byte new_key_B, + byte auth_mode, + byte key_index); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "SectorTrailerWrite_AKM1")] + public static extern DL_STATUS SectorTrailerWrite_AKM1(byte addressing_mode, + byte address, + out byte new_key_A, + byte block0_access_bits, + byte block1_access_bits, + byte block2_access_bits, + byte sector_trailer_access_bits, + byte sector_trailer_byte9, + out byte new_key_B, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "SectorTrailerWrite_AKM2")] + public static extern DL_STATUS SectorTrailerWrite_AKM2(byte addressing_mode, + byte address, + out byte new_key_A, + byte block0_access_bits, + byte block1_access_bits, + byte block2_access_bits, + byte sector_trailer_access_bits, + byte sector_trailer_byte9, + out byte new_key_B, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "SectorTrailerWrite_PK")] + public static extern DL_STATUS SectorTrailerWrite_PK(byte addressing_mode, + byte address, + out byte new_key_A, + byte block0_access_bits, + byte block1_access_bits, + byte block2_access_bits, + byte sector_trailer_access_bits, + byte sector_trailer_byte9, + out byte new_key_B, + byte auth_mode, + out byte pk_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearFormatCard")] + public static extern DL_STATUS LinearFormatCard(out byte new_key_A, + byte blocks_access_bits, + byte sector_trailers_access_bits, + byte sector_trailers_byte9, + out byte new_key_B, + out byte sectors_formatted, + byte auth_mode, + byte key_index); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearFormatCard_AKM1")] + public static extern DL_STATUS LinearFormatCard_AKM1(out byte new_key_A, + byte blocks_access_bits, + byte sector_trailers_access_bits, + byte sector_trailers_byte9, + out byte new_key_B, + out byte sectors_formatted, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearFormatCard_AKM2")] + public static extern DL_STATUS LinearFormatCard_AKM2(out byte new_key_A, + byte blocks_access_bits, + byte sector_trailers_access_bits, + byte sector_trailers_byte9, + out byte new_key_B, + out byte sectors_formatted, + byte auth_mode); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "LinearFormatCard_PK")] + public static extern DL_STATUS LinearFormatCard_PK(out byte new_key_A, + byte blocks_access_bits, + byte sector_trailers_access_bits, + byte sector_trailers_byte9, + out byte new_key_B, + out byte sectors_formatted, + byte auth_mode, + out byte pk_key); + + //---------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "SetISO14443_4_Mode")] + public static extern DL_STATUS SetISO14443_4_Mode(); + + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "s_block_deselect")] + public static extern DL_STATUS s_block_deselect(byte timeout); + //---------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppSelectByAid")] + public static extern DL_STATUS JCAppSelectByAid([In] byte[] aid, byte aid_len, [Out] byte[] selection_response); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppPutPrivateKey")] + public static extern DL_STATUS JCAppPutPrivateKey(byte key_type, byte key_index, + [In] byte[] key, UInt16 key_bit_len, + [In] byte[] key_param, UInt16 key_parm_len); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppGenerateKeyPair")] + public static extern DL_STATUS JCAppGenerateKeyPair(byte key_type, byte key_index, byte key_designator, + UInt16 key_bit_len, [In] byte[] param, UInt16 param_size); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppDeleteRsaKeyPair")] + public static extern DL_STATUS JCAppDeleteRsaKeyPair(byte key_index); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppDeleteEcKeyPair")] + public static extern DL_STATUS JCAppDeleteEcKeyPair(byte key_index); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppSignatureBegin")] + public static extern DL_STATUS JCAppSignatureBegin(byte cipher, byte digest, byte padding, byte key_index, + [In] byte[] chunk, UInt16 chunk_len, + [In] byte[] alg_param, UInt16 alg_parm_len); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppSignatureUpdate")] + public static extern DL_STATUS JCAppSignatureUpdate([In] byte[] chunk, UInt16 chunk_len); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppSignatureEnd")] + private static extern DL_STATUS JCAppSignatureEnd(out UInt16 sig_len); + public static DL_STATUS JCAppSignatureEnd(out byte[] sig) + { + DL_STATUS status; + UInt16 sig_len; + + status = JCAppSignatureEnd(out sig_len); + if (status != DL_STATUS.UFR_OK) + { + sig = null; + return status; + } + + sig = new byte[sig_len]; + return JCAppGetSignature(sig, sig_len); + } + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppGenerateSignature")] + private static extern DL_STATUS JCAppGenerateSignature(byte cipher, byte digest, byte padding, byte key_index, + [In] byte[] plain_data, UInt16 plain_data_len, + out UInt16 sig_len, + [In] byte[] alg_param, UInt16 alg_parm_len); + + public static DL_STATUS JCAppGenerateSignature(byte cipher, byte digest, byte padding, byte key_index, + [In] byte[] plain_data, UInt16 plain_data_len, + out byte[] sig, + [In] byte[] alg_param, UInt16 alg_parm_len) + { + DL_STATUS status; + UInt16 sig_len; + + status = JCAppGenerateSignature(cipher, digest, padding, key_index, plain_data, plain_data_len, out sig_len, alg_param, alg_parm_len); + if (status != DL_STATUS.UFR_OK) + { + sig = null; + return status; + } + + sig = new byte[sig_len]; + return JCAppGetSignature(sig, sig_len); + } + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppGetSignature")] + private static extern DL_STATUS JCAppGetSignature([Out] byte[] sig, UInt16 sig_len); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppPutObj")] + public static extern DL_STATUS JCAppPutObj(byte obj_type, byte obj_index, [In] byte[] obj, UInt16 obj_size, [In] byte[] id, byte id_size); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppPutObjSubject")] + public static extern DL_STATUS JCAppPutObjSubject(byte obj_type, byte obj_index, [In] byte[] subject, byte size); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppInvalidateCert")] + public static extern DL_STATUS JCAppInvalidateCert(byte obj_type, byte obj_index); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppGetObjId")] + private static extern DL_STATUS JCAppGetObjId(byte obj_type, byte obj_index, [Out] byte[] id, out UInt16 id_size); + public static DL_STATUS JCAppGetObjId(byte obj_type, byte obj_index, out byte[] id, out UInt16 size) + { + DL_STATUS status; + + size = 0; + id = null; + status = JCAppGetObjId(obj_type, obj_index, id, out size); + if (status == DL_STATUS.UFR_OK) + { + id = new byte[size]; + status = JCAppGetObjId(obj_type, obj_index, id, out size); + } + return status; + } + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppGetObjSubject")] + private static extern DL_STATUS JCAppGetObjSubject(byte obj_type, byte obj_index, [Out] byte[] subject, out byte subject_size); + public static DL_STATUS JCAppGetObjSubject(byte obj_type, byte obj_index, out byte[] subject, out byte size) + { + DL_STATUS status; + + size = 0; + subject = null; + status = JCAppGetObjSubject(obj_type, obj_index, subject, out size); + if (status == DL_STATUS.UFR_OK) + { + subject = new byte[size]; + status = JCAppGetObjSubject(obj_type, obj_index, subject, out size); + } + return status; + } + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppGetObj")] + private static extern DL_STATUS JCAppGetObj(byte obj_type, byte obj_index, [Out] byte[] obj, UInt16 size); + public static DL_STATUS JCAppGetObj(byte obj_type, byte obj_index, byte[] obj) + { + return JCAppGetObj(obj_type, obj_index, obj, (UInt16) obj.Length); + } + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppGetErrorDescription")] + private static extern IntPtr GetErrorDescription(UInt32 apdu_error_status); + public static string JCAppGetErrorDescription(UInt32 apdu_error_status) + { + IntPtr str_ret = GetErrorDescription(apdu_error_status); + return Marshal.PtrToStringAnsi(str_ret); + } + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppLogin")] + public static extern DL_STATUS JCAppLogin(byte SO, [In] byte[] pin, byte pinSize); + public static DL_STATUS JCAppLogin(bool SO, string pin) + { + if (pin.Length > byte.MaxValue) + return DL_STATUS.UFR_PARAMETERS_ERROR; + + byte[] pin_param = Encoding.ASCII.GetBytes(pin); + return JCAppLogin(SO ? (byte)1 : (byte)0, pin_param, (byte)pin_param.Length); + } + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppGetPinTriesRemaining")] + public static extern DL_STATUS JCAppGetPinTriesRemaining(DL_SECURE_CODE secureCodeType, out UInt16 triesRemaining); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppPinChange")] + public static extern DL_STATUS JCAppPinChange(DL_SECURE_CODE secureCodeType, [In] byte[] newPin, byte newPinSize); + public static DL_STATUS JCAppPinChange(DL_SECURE_CODE secureCodeType, string newPin) + { + if (newPin.Length > byte.MaxValue) + return DL_STATUS.UFR_PARAMETERS_ERROR; + + byte[] newPin_param = Encoding.ASCII.GetBytes(newPin); + return JCAppPinChange(secureCodeType, newPin_param, (byte)newPin_param.Length); + } + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppPinUnblock")] + public static extern DL_STATUS JCAppPinUnblock(byte SO, [In] byte[] puk, byte pukSize); + public static DL_STATUS JCAppPinUnblock(bool SO, string puk) + { + if (puk.Length > byte.MaxValue) + return DL_STATUS.UFR_PARAMETERS_ERROR; + + byte[] puk_param = Encoding.ASCII.GetBytes(puk); + return JCAppPinUnblock(SO ? (byte)1 : (byte)0, puk_param, (byte)puk_param.Length); + } + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppGetRsaPublicKey")] + private static extern DL_STATUS JCAppGetRsaPublicKey(byte key_index, [Out] byte[] modulus, out UInt16 modulus_size, + [Out] byte[] exponent, out UInt16 exponent_size); + public static DL_STATUS JCAppGetRsaPublicKey(byte key_index, out byte[] modulus, out byte[] exponent) + { + DL_STATUS status; + + UInt16 modulus_size = 0; + UInt16 exponent_size = 0; + modulus = null; + exponent = null; + status = JCAppGetRsaPublicKey(key_index, modulus, out modulus_size, exponent, out exponent_size); + if (status == DL_STATUS.UFR_OK) + { + modulus = new byte[modulus_size]; + exponent = new byte[exponent_size]; + status = JCAppGetRsaPublicKey(key_index, modulus, out modulus_size, exponent, out exponent_size); + } + return status; + } + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppGetEcPublicKey")] + private static extern DL_STATUS JCAppGetEcPublicKey(byte key_index, [Out] byte[] keyW, out UInt16 keyW_size, + [Out] byte[] field, out UInt16 field_size, [Out] byte[] ab, out UInt16 ab_size, + [Out] byte[] g, out UInt16 g_size, [Out] byte[] r, out UInt16 r_size, out UInt16 k, out UInt16 key_size_bits, out UInt16 key_designator); + public static DL_STATUS JCAppGetEcPublicKey(byte key_index, out byte[] keyW, out byte[] field, out byte[] a, out byte[] b, out byte[] g, out byte[] r, + out UInt16 k, out UInt16 key_size_bits, out UInt16 key_designator) + { + DL_STATUS status; + + UInt16 keyW_size = 0; + UInt16 field_size = 0; + UInt16 ab_size = 0; + UInt16 g_size = 0; + UInt16 r_size = 0; + byte[] ab = null; + keyW = field = a = b = g = r = null; + k = key_size_bits = key_designator = 0; + status = JCAppGetEcPublicKey(key_index, keyW, out keyW_size, field, out field_size, ab, out ab_size, g, out g_size, + r, out r_size, out k, out key_size_bits, out key_designator); + if (status == DL_STATUS.UFR_OK) + { + keyW = new byte[keyW_size]; + field = new byte[field_size]; + ab = new byte[ab_size]; + g = new byte[g_size]; + r = new byte[r_size]; + status = JCAppGetEcPublicKey(key_index, keyW, out keyW_size, field, out field_size, ab, out ab_size, g, out g_size, + r, out r_size, out k, out key_size_bits, out key_designator); + + if (keyW_size != (UInt16)(((key_size_bits + 7) / 8) * 2 + 1)) + return DL_STATUS.UFR_APDU_WRONG_KEY_SIZE; + if ((field_size != (UInt16)((key_size_bits + 7) / 8)) && (field_size != 6) && (field_size != 2)) + return DL_STATUS.UFR_APDU_WRONG_KEY_SIZE; + if (ab_size != (UInt16)(((key_size_bits + 7) / 8) * 2)) + return DL_STATUS.UFR_APDU_WRONG_KEY_SIZE; + if (g_size != (UInt16)(((key_size_bits + 7) / 8) * 2 + 1)) + return DL_STATUS.UFR_APDU_WRONG_KEY_SIZE; + if ((r_size != (UInt16)((key_size_bits + 7) / 8)) && (r_size != (UInt16)(((key_size_bits + 7) / 8) + 1))) + return DL_STATUS.UFR_APDU_WRONG_KEY_SIZE; + a = new byte[(key_size_bits + 7) / 8]; + b = new byte[(key_size_bits + 7) / 8]; + Array.Copy(ab, 0, a, 0, (key_size_bits + 7) / 8); + Array.Copy(ab, (key_size_bits + 7) / 8, b, 0, (key_size_bits + 7) / 8); + } + return status; + } + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "UFR_Status2String")] + private static extern IntPtr UFR_Status2String(DL_STATUS status); + public static string status2str(DL_STATUS status) + { + IntPtr str_ret = UFR_Status2String(status); + return Marshal.PtrToStringAnsi(str_ret); + } + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "JCAppGetEcKeySizeBits")] + public static extern DL_STATUS JCAppGetEcKeySizeBits(byte key_index, out UInt16 key_size_bits, out UInt16 key_designator); + //---------------------------------------------------------------------- + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "UfrXrcLockOn")] + public static extern DL_STATUS UfrXrcLockOn(UInt16 pulse_duration); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "UfrXrcRelayState")] + public static extern DL_STATUS UfrXrcRelayState(byte state); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "UfrXrcGetIoState")] + public static extern DL_STATUS UfrXrcGetIoState(out byte intercom, out byte dig_in, out byte relay_state); + + //---------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderOpenM")] + public static extern DL_STATUS ReaderOpenM(UFR_HANDLE hndUFR); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderCloseM")] + public static extern DL_STATUS ReaderCloseM(UFR_HANDLE hndUFR); + + //---------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetCardIdExM")] + public static extern DL_STATUS GetCardIdExM(UFR_HANDLE hndUFR, + out byte bCardType, + [Out] byte nfc_uid, // NFC_UID_MAX_LEN = 10 + out byte bUidSize); + + //[DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetReaderTypeM")] + //public static extern DL_STATUS GetReaderTypeM(UInt32* get_reader_type); + + //---------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "BlockRead_PKM")] + public static extern DL_STATUS BlockRead_PKM(UFR_HANDLE hndUFR, + out byte data, + byte block_address, + byte auth_mode, + ref byte key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "BlockWrite_PKM")] + public static extern DL_STATUS BlockWrite_PKM(UFR_HANDLE hndUFR, + out byte data, + byte block_address, + byte auth_mode, + ref byte key); + //---------------------------------------------------------------------- + + //Desfire + //---------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireWriteAesKey")] + public static extern DL_STATUS uFR_int_DesfireWriteAesKey(byte aes_key_no, + [In] byte[] aes_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_GetDesfireUid")] + public static extern DL_STATUS uFR_int_GetDesfireUid(byte aes_key_nr, + UInt32 aid, + byte aid_key_nr, + [Out] byte[] card_uid, + out byte card_uid_len, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_GetDesfireUid_PK")] + public static extern DL_STATUS uFR_int_GetDesfireUid_PK([In] byte[] aes_key_ext, + UInt32 aid, + byte aid_key_nr, + [Out] byte[] card_uid, + out byte card_uid_len, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireFreeMem")] + public static extern DL_STATUS uFR_int_DesfireFreeMem(out UInt32 free_mem_byte, + out UInt16 card_status, + out UInt16 exec_time); + + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireFormatCard")] + public static extern DL_STATUS uFR_int_DesfireFormatCard(byte aes_key_nr, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireFormatCard_PK")] + public static extern DL_STATUS uFR_int_DesfireFormatCard_PK([In] byte[] aes_key_ext, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireSetConfiguration")] + public static extern DL_STATUS uFR_int_DesfireSetConfiguration(byte aes_key_nr, + byte random_uid, + byte format_disable, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireSetConfiguration_PK")] + public static extern DL_STATUS uFR_int_DesfireSetConfiguration_PK([In] byte[] aes_key_ext, + byte random_uid, + byte format_disable, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireGetKeySettings")] + public static extern DL_STATUS uFR_int_DesfireGetKeySettings(byte aes_key_nr, + UInt32 aid, + out byte settings, + out byte max_key_no, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireGetKeySettings_PK")] + public static extern DL_STATUS uFR_int_DesfireGetKeySettings_PK([In] byte[] aes_key_ext, + UInt32 aid, + out byte settings, + out byte max_key_no, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireChangeKeySettings")] + public static extern DL_STATUS uFR_int_DesfireChangeKeySettings(byte aes_key_nr, + UInt32 aid, + byte settings, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireChangeKeySettings_PK")] + public static extern DL_STATUS uFR_int_DesfireChangeKeySettings_PK([In] byte[] aes_key_ext, + UInt32 aid, + byte settings, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireChangeAesKey")] + public static extern DL_STATUS uFR_int_DesfireChangeAesKey(byte aes_key_nr, + UInt32 aid, + byte aid_key_nr_auth, + [In] byte[] new_aes_key, + byte aid_key_no, + [In] byte[] old_aes_key, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireChangeAesKey_PK")] + public static extern DL_STATUS uFR_int_DesfireChangeAesKey_PK([In] byte[] aes_key_ext, + UInt32 aid, + byte aid_key_nr_auth, + [In] byte[] new_aes_key, + byte aid_key_no, + [In] byte[] old_aes_key, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireCreateAesApplication")] + public static extern DL_STATUS uFR_int_DesfireCreateAesApplication(byte aes_key_nr, + UInt32 aid_nr, + byte setting, + byte max_key_no, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireCreateAesApplication_PK")] + public static extern DL_STATUS uFR_int_DesfireCreateAesApplication_PK([In] byte[] aes_key_ext, + UInt32 aid_nr, + byte setting, + byte max_key_no, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireCreateAesApplication_no_auth")] + public static extern DL_STATUS uFR_int_DesfireCreateAesApplication_no_auth(UInt32 aid_nr, + byte setting, + byte max_key_no, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireDeleteApplication")] + public static extern DL_STATUS uFR_int_DesfireDeleteApplication(byte aes_key_nr, + UInt32 aid_nr, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireDeleteApplication_PK")] + public static extern DL_STATUS uFR_int_DesfireDeleteApplication_PK([In] byte[] aes_key_ext, + UInt32 aid_nr, + out UInt16 card_status, + out UInt16 exec_time); + + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireCreateStdDataFile")] + public static extern DL_STATUS uFR_int_DesfireCreateStdDataFile(byte aes_key_nr, + UInt32 aid, + byte file_id, + UInt32 file_size, + byte read_key_no, + byte write_key_no, + byte read_write_key_no, + byte change_key_no, + byte communication_settings, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireCreateStdDataFile_PK")] + public static extern DL_STATUS uFR_int_DesfireCreateStdDataFile_PK([In] byte[] aes_key_ext, + UInt32 aid, + byte file_id, + UInt32 file_size, + byte read_key_no, + byte write_key_no, + byte read_write_key_no, + byte change_key_no, + byte communication_settings, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireCreateStdDataFile_no_auth")] + public static extern DL_STATUS uFR_int_DesfireCreateStdDataFile_no_auth(UInt32 aid, + byte file_id, + UInt32 file_size, + byte read_key_no, + byte write_key_no, + byte read_write_key_no, + byte change_key_no, + byte communication_settings, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireDeleteFile")] + public static extern DL_STATUS uFR_int_DesfireDeleteFile(byte aes_key_nr, + UInt32 aid, + byte file_id, + out UInt16 card_status, + out UInt16 exec_time); + + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireDeleteFile_PK")] + public static extern DL_STATUS uFR_int_DesfireDeleteFile_PK([In] byte[] aes_key_ext, + UInt32 aid, + byte file_id, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireDeleteFile_no_auth")] + public static extern DL_STATUS uFR_int_DesfireDeleteFile_no_auth(UInt32 aid, + byte file_id, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireReadStdDataFile")] + public static extern DL_STATUS uFR_int_DesfireReadStdDataFile(byte aes_key_nr, + UInt32 aid, + byte aid_key_nr, + byte file_id, + UInt16 offset, + UInt16 data_length, + byte communication_settings, + [Out] byte[] data, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireReadStdDataFile_PK")] + public static extern DL_STATUS uFR_int_DesfireReadStdDataFile_PK([In] byte[] aes_key_ext, + UInt32 aid, + byte aid_key_nr, + byte file_id, + UInt16 offset, + UInt16 data_length, + byte communication_settings, + [Out] byte[] data, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireReadStdDataFile_no_auth")] + public static extern DL_STATUS uFR_int_DesfireReadStdDataFile_no_auth(UInt32 aid, + byte aid_key_nr, + byte file_id, + UInt16 offset, + UInt16 data_length, + byte communication_settings, + [Out] byte[] data, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireWriteStdDataFile")] + public static extern DL_STATUS uFR_int_DesfireWriteStdDataFile(byte aes_key_nr, + UInt32 aid, + byte aid_key_nr, + byte file_id, + UInt16 offset, + UInt16 data_length, + byte communication_settings, + [In] byte[] data, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireWriteStdDataFile_PK")] + public static extern DL_STATUS uFR_int_DesfireWriteStdDataFile_PK([In] byte[] aes_key_ext, + UInt32 aid, + byte aid_key_nr, + byte file_id, + UInt16 offset, + UInt16 data_length, + byte communication_settings, + [In] byte[] data, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireWriteStdDataFile_no_auth")] + public static extern DL_STATUS uFR_int_DesfireWriteStdDataFile_no_auth(UInt32 aid, + byte aid_key_nr, + byte file_id, + UInt16 offset, + UInt16 data_length, + byte communication_settings, + [In] byte[] data, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "DES_to_AES_key_type")] + public static extern DL_STATUS DES_to_AES_key_type(); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "AES_to_DES_key_type")] + public static extern DL_STATUS AES_to_DES_key_type(); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "SetSpeedPermanently")] + public static extern DL_STATUS SetSpeedPermanently(byte tx_speed, byte rx_speed); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetSpeedParameters")] + public static extern DL_STATUS GetSpeedParameters(out byte tx_speed, out byte rx_speed); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireCreateValueFile")] + public static extern DL_STATUS uFR_int_DesfireCreateValueFile(byte aes_key_nr, + UInt32 aid, + byte file_id, + Int32 lower_limit, + Int32 upper_limit, + Int32 value, + byte limited_credit_enabled, + byte read_key_no, + byte write_key_no, + byte read_write_key_no, + byte change_key_no, + byte communication_settings, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireCreateValueFile_PK")] + public static extern DL_STATUS uFR_int_DesfireCreateValueFile_PK([In] byte[] aes_key_ext, + UInt32 aid, + byte file_id, + Int32 lower_limit, + Int32 upper_limit, + Int32 value, + byte limited_credit_enabled, + byte read_key_no, + byte write_key_no, + byte read_write_key_no, + byte change_key_no, + byte communication_settings, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireCreateValueFile_no_auth")] + public static extern DL_STATUS uFR_int_DesfireCreateValueFile_no_auth(UInt32 aid, + byte file_id, + Int32 lower_limit, + Int32 upper_limit, + Int32 value, + byte limited_credit_enabled, + byte read_key_no, + byte write_key_no, + byte read_write_key_no, + byte change_key_no, + byte communication_settings, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireReadValueFile")] + public static extern DL_STATUS uFR_int_DesfireReadValueFile(byte aes_key_nr, + UInt32 aid, + byte aid_key_nr, + byte file_id, + byte communication_settings, + out Int32 value, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireReadValueFile_PK")] + public static extern DL_STATUS uFR_int_DesfireReadValueFile_PK([In] byte[] aes_key_ext, + UInt32 aid, + byte aid_key_nr, + byte file_id, + byte communication_settings, + out Int32 value, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireReadValueFile_no_auth")] + public static extern DL_STATUS uFR_int_DesfireReadValueFile_no_auth(UInt32 aid, + byte aid_key_nr, + byte file_id, + byte communication_settings, + out Int32 value, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireIncreaseValueFile")] + public static extern DL_STATUS uFR_int_DesfireIncreaseValueFile(byte aes_key_nr, + UInt32 aid, + byte aid_key_nr, + byte file_id, + byte communication_settings, + Int32 value, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireIncreaseValueFile_PK")] + public static extern DL_STATUS uFR_int_DesfireIncreaseValueFile_PK([In] byte[] aes_key_ext, + UInt32 aid, + byte aid_key_nr, + byte file_id, + byte communication_settings, + Int32 value, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireIncreaseValueFile_no_auth")] + public static extern DL_STATUS uFR_int_DesfireIncreaseValueFile_no_auth(UInt32 aid, + byte aid_key_nr, + byte file_id, + byte communication_settings, + Int32 value, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireDecreaseValueFile")] + public static extern DL_STATUS uFR_int_DesfireDecreaseValueFile(byte aes_key_nr, + UInt32 aid, + byte aid_key_nr, + byte file_id, + byte communication_settings, + Int32 value, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireDecreaseValueFile_PK")] + public static extern DL_STATUS uFR_int_DesfireDecreaseValueFile_PK([In] byte[] aes_key_ext, + UInt32 aid, + byte aid_key_nr, + byte file_id, + byte communication_settings, + Int32 value, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "uFR_int_DesfireDecreaseValueFile_no_auth")] + public static extern DL_STATUS uFR_int_DesfireDecreaseValueFile_no_auth(UInt32 aid, + byte aid_key_nr, + byte file_id, + byte communication_settings, + Int32 value, + out UInt16 card_status, + out UInt16 exec_time); + + //--------------------------------------------------------------------- + + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderKeysLock")] + public static extern DL_STATUS ReaderKeysLock([In] char[] password); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "ReaderKeysUnlock")] + public static extern DL_STATUS ReaderKeysUnlock([In] char[] password); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetReaderDescription")] + private static extern IntPtr GetReaderDescription(); + public static string GetDescription() + { + IntPtr str_ret = GetReaderDescription(); + return Marshal.PtrToStringAnsi(str_ret); + } + + //-------------------------------------------- MIFARE PLUS -------------------------------------------------// + + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_PersonalizationMinimal")] + public static extern DL_STATUS MFP_PersonalizationMinimal([In] byte[] master_key, [In] byte[] config_key, [In] byte[] l2_sw_key, [In] byte[] l3_sw_key, + [In] byte[] l1_auth_key, [In] byte[] sel_vc_key, [In] byte[] prox_chk_key, [In] byte[] vc_poll_enc_key, + [In] byte[] vc_poll_mac_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_AesAuthSecurityLevel1_PK")] + public static extern DL_STATUS MFP_AesAuthSecurityLevel1_PK([In] byte[] sl1_auth_key); + + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_AesAuthSecurityLevel1")] + public static extern DL_STATUS MFP_AesAuthSecurityLevel1(byte key_index); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_SwitchToSecurityLevel3_PK")] + public static extern DL_STATUS MFP_SwitchToSecurityLevel3_PK([In] byte[] sl3_auth_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_SwitchToSecurityLevel3")] + public static extern DL_STATUS MFP_SwitchToSecurityLevel3(byte key_index); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_ChangeMasterKey_PK")] + public static extern DL_STATUS MFP_ChangeMasterKey_PK([In] byte[] old_master_key, [In] byte[] new_master_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_ChangeMasterKey")] + public static extern DL_STATUS MFP_ChangeMasterKey(byte key_index, [In] byte[] new_master_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_ChangeConfigurationKey_PK")] + public static extern DL_STATUS MFP_ChangeConfigurationKey_PK([In] byte[] old_config_key, [In] byte[] new_config_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_ChangeConfigurationKey")] + public static extern DL_STATUS MFP_ChangeConfigurationKey(byte key_index, [In] byte[] new_config_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_ChangeSectorKey_PK")] + public static extern DL_STATUS MFP_ChangeSectorKey_PK(byte sector_nr, byte auth_mode, [In] byte[] old_sector_key, [In] byte[] new_sector_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_ChangeSectorKey")] + public static extern DL_STATUS MFP_ChangeSectorKey(byte sector_nr, byte auth_mode, byte key_index, [In] byte[] new_sector_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_FieldConfigurationSet_PK")] + public static extern DL_STATUS MFP_FieldConfigurationSet_PK([In] byte[] configuration_key, byte rid_use, byte prox_check_use); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_FieldConfigurationSet")] + public static extern DL_STATUS MFP_FieldConfigurationSet(byte configuration_key_index, byte rid_use, byte prox_check_use); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_GetUid_PK")] + public static extern DL_STATUS MFP_GetUid_PK([In] byte[] vc_poll_enc_key, [In] byte[] vc_poll_mac_key, [In,Out] byte[] nfc_uid,out byte uid_len); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_GetUid")] + public static extern DL_STATUS MFP_GetUid(byte key_index_vc_poll_enc_key, byte key_index_vc_poll_mac_key, [In, Out] byte[] nfc_uid, out byte uid_len); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_ChangeVcPollingEncKey_PK")] + public static extern DL_STATUS MFP_ChangeVcPollingEncKey_PK([In] byte[] configuration_key, [In] byte[] new_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_ChangeVcPollingEncKey")] + public static extern DL_STATUS MFP_ChangeVcPollingEncKey(byte configuration_key_index, [In] byte[] new_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_ChangeVcPollingMacKey_PK")] + public static extern DL_STATUS MFP_ChangeVcPollingMacKey_PK([In] byte[] configuration_key, [In] byte[] new_key); + + //--------------------------------------------------------------------- + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, EntryPoint = "MFP_ChangeVcPollingMacKey")] + public static extern DL_STATUS MFP_ChangeVcPollingMacKey(byte configuration_key_index, [In] byte[] new_key); + + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "write_ndef_record")] + private static extern DL_STATUS write_ndef_record(byte message_nr, [In] byte[] tnf, [In] byte[] type_record, [In] byte[] type_length, [In] byte[] id, [In] byte[] id_length, [In] byte[] payload, [In] UInt32[] payload_length, out byte[] card_formated); + + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "write_ndef_record_mirroring")] + private static extern DL_STATUS write_ndef_record_mirroring(byte message_nr, [In] byte[] tnf, [In] byte[] type_record, [In] byte[] type_length, [In] byte[] id, [In] byte[] id_length, [In] byte[] payload, [In] UInt32[] payload_length, out byte[] card_formated, int use_uid_ascii_mirror, int use_counter_ascii_mirror, UInt32 payload_mirroring_pos); + + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "write_ndef_recordM")] + private static extern DL_STATUS write_ndef_recordM(UFR_HANDLE hndUFR, byte message_nr, [In] byte[] tnf, [In] byte[] type_record, [In] byte[] type_length, [In] byte[] id, [In] byte[] id_length, [In] byte[] payload, [In] UInt32[] payload_length, out byte[] card_formated); + + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, EntryPoint = "write_ndef_record_mirroringM")] + private static extern DL_STATUS write_ndef_record_mirroringM(UFR_HANDLE hndUFR, byte message_nr, [In] byte[] tnf, [In] byte[] type_record, [In] byte[] type_length, [In] byte[] id, [In] byte[] id_length, [In] byte[] payload, [In] UInt32[] payload_length, out byte[] card_formated, int use_uid_ascii_mirror, int use_counter_ascii_mirror, UInt32 payload_mirroring_pos); + + } +} -- GitLab