admin.name = AustrianECard admin.model = Various admin.description = Austrian ECard (Gesundheitskarte) admin.supplier = Niki W. Waibel admin.version = 0.17 admin.type = smartcard --StartWords-- noID onException AustrianECard tokenType setprop "Trying " tokenType getprop concat msg "VERSION 0.17" msg atr.atr getprop # DEBUG " DBG: you should see the ATR on the stack" msg showstack # END DEBUG # check the ATR length dup hexlength 16 hexequals noID jmpIfFalse # DEBUG " DBG: ATR LENGTH OK" msg showstack # END DEBUG dup 3bbd18008131fe45805102670414b10101020081053d hexequals AustrianECard2005 jmpIfTrue # DEBUG " DBG: ATR (" swap concat ") NOT OK" swap concat msg showstack # END DEBUG false noID jmpifFalse AustrianECard2005:: # drop atr from the stack drop # DEBUG " DBG: ATR matches AustrianECard2005" msg " DBG: stack should be empty by now" msg showstack # END DEBUG 00A40000023f00 00 exchangeAPDU # DEBUG "Stack dump immediately after >select mf 3f00<" msg showstack # END DEBUG badCard jmpIfFalse 9000 hexequals noID jmpIfFalse drop noID jmpIfFalse drop 00A40200022f02 00 exchangeAPDU # DEBUG "Stack dump immediately after >select ef 2f02<" msg showstack # END DEBUG badCard jmpIfFalse 9000 hexequals noID jmpIfFalse drop noID jmpIfFalse drop 00B00000 00 exchangeAPDU # DEBUG "Stack dump immediately after >readbinary<" msg showstack # END DEBUG badCard jmpIfFalse 9000 hexequals noID jmpIfFalse drop noID jmpIfFalse # DEBUG "Stack dump immediately after removing status" msg showstack # END DEBUG # log sun ray uniq identifier dup " Token ID: " swap concat tokenType getprop " Token Type: " swap concat concat "Identified " swap concat msg # return the tokenType and Token ID tokenType getprop returnID # # This card isn't a card that we could identify # so just return and let the next config file (if any) # have a shot at the card. # noID:: "Unable to determine ID for " tokenType getprop concat msg return # # an error occurred while accessing the card # badCard:: "Error accessing " tokenType getprop concat msg return --EndWords--