)gBddlZddlZddlmZddlmZddlmZddlm Z m Z m Z ddl m Z ddlmZddlmZmZmZdd lmZmZmZdd lmZdd lmZGd d eZdS)N)Optional)CardConnection) CardRequest)NoCardExceptionCardRequestTimeoutExceptionCardConnectionException)readers)ExclusiveConnectCardConnection)h2ii2hHexstr) NoCardError ProtocolError ReaderError) LinkBaseTpdu)ResTupleceZdZdZdZejdfdejffd ZdZdd e e d e fd Z d Z defdZdZdZdedefdZdefdZedejfdZxZS) PcscSimLinkz# pySim: PCSC reader transport link.zPC/SCr)pcsc_devoptsc 8tjdi|d|_t}|j:|j}|t |krt d|z|||_n_tj|j }|D]%}| |j r ||_n&|jst d|j z|j |_ t|ddst|j |_ dSdS)NzNo reader found for number %dz%No matching reader found for regex %s pcsc_sharedF)super__init___readerr rlenrrecompile pcsc_regexsearchnamecreateConnection_congetattrr )selfrkwargsr reader_numbercrereader __class__s B/home/jenkins/workspace/simtester-sanitize/pySim/transport/pcsc.pyrzPcscSimLink.__init__)s)""6""" II = $ MMA&&!"AM"QRRR]+DLL*T_--C  ::fk**#)DLE< ]!"IDO"[\\\L1133 t]E22 B6tyAADIII B BcJ |jdS#YdSxYwNr$ disconnectr&s r-__del__zPcscSimLink.__del__As1  I " " " " "  DDs"NFtimeout newcardonlyct|jg||} |n!#t$r}t |d}~wwxYw|dS)N)r r5r6)rr waitforcardrrconnect)r&r5r6crexcs r- wait_for_cardzPcscSimLink.wait_for_cardHsx $,!(kCCC ) NN    * ) ) )--S ( ) s/ A AA cL ||j|j}||tjzr"tj}|dn@|tjzr"tj}|dntd|j|dS#t$r}t|d}~wt$r}t|d}~wwxYw)NrzUnsupported card protocol) r2r$r9 getProtocolr T0_protocolset_tpdu_format T1_protocolrrrrr)r&supported_protocolsprotocolr;s r-r9zPcscSimLink.connectQs) ) OO    I     "&)"7"7"9"9  OO   #n&@@ ?*6$$Q''''%(BB ?)5$$Q''''!"=>>> I  h ' ' ' ' '& + + +//s * ) ) )--S ( )s$C%C)) D#3D D#DD#returncNt|jSr0)r r$getATRr3s r-get_atrzPcscSimLink.get_atris49##%%&&&r.c8|jdSr0r1r3s r-r2zPcscSimLink.disconnectls r.cV||dS)Nr>)r2r9r3s r- _reset_cardzPcscSimLink._reset_cardos$  qr.tpduc|jt|\}}}||g}t|t|fSr0)r$transmitr r )r&rLdatasw1sw2sws r- send_tpduzPcscSimLink.send_tpdutsE++CII66c33Z4yy#b''!!r.cd|jzS)NzPCSC[%s])rr3s r-__str__zPcscSimLink.__str__{sT\**r. arg_parserc  |dd}|ddd|}|ddtd d dd |d tdddd dS)Nz PC/SC ReaderaUse a PC/SC card reader to talk to the SIM card. PC/SC is a standard API for how applications access smart card readers, and is available on a variety of operating systems, such as Microsoft Windows, MacOS X and Linux. Most vendors of smart card readers provide drivers that offer a PC/SC interface, if not even a generic USB CCID driver is used. You can use a tool like ``pcsc_scan -r`` to obtain a list of readers available on your system. z --pcsc-shared store_truez6Open PC/SC reaer in SHARED access (default: EXCLUSIVE))actionhelpz-pz --pcsc-devicerPCSCz,Number of PC/SC reader to use for SIM access)typedestmetavardefaultrZz --pcsc-regexr REGEXz1Regex matching PC/SC reader to use for SIM access)add_argument_group add_argumentadd_mutually_exclusive_groupintstr)rV pcsc_group dev_groups r-argparse_add_reader_argsz$PcscSimLink.argparse_add_reader_args~s22> :;;  %]  _ _ _;;== t_3ZY_im$R  T T T~ClT[ei$W  Y Y Y Y Yr.)NF)__name__ __module__ __qualname____doc__r"argparse Namespacerr4rrdboolr<r9r rHr2rKrrSrerU staticmethodArgumentParserrh __classcell__)r,s@r-rr%sd-- D2D(2Da2P2P2PBBX/BBBBBB0Xc])))0''''' "f"""""+++++ YX-D Y Y Y\ Y Y Y Y Yr.r)rmrtypingrsmartcard.CardConnectionrsmartcard.CardRequestrsmartcard.Exceptionsrrrsmartcard.Systemr (smartcard.ExclusiveConnectCardConnectionr osmocom.utilsr r r pySim.exceptionsrrrpySim.transportr pySim.utilsrrrr.r-r}s9( 333333------ffffffffff$$$$$$SSSSSS**********DDDDDDDDDD(((((( gYgYgYgYgY,gYgYgYgYgYr.