API change: more information in the APPLICATIONS dictionary
git-svn-id: svn+ssh://localhost/home/henryk/svn/cyberflex-shell/trunk@161 f711b948-2313-0410-aaa9-d29f33439f0b
This commit is contained in:
parent
b4a825c461
commit
07de9a478d
|
@ -299,7 +299,7 @@ class Cyberflex_Card(Java_Card):
|
||||||
|
|
||||||
APPLICATIONS = dict(Java_Card.APPLICATIONS)
|
APPLICATIONS = dict(Java_Card.APPLICATIONS)
|
||||||
APPLICATIONS.update( {
|
APPLICATIONS.update( {
|
||||||
"card_manager": DEFAULT_CARD_MANAGER_AID
|
DEFAULT_CARD_MANAGER_AID: ("card_manager", ),
|
||||||
} )
|
} )
|
||||||
|
|
||||||
COMMANDS = dict(Java_Card.COMMANDS)
|
COMMANDS = dict(Java_Card.COMMANDS)
|
||||||
|
|
|
@ -29,6 +29,23 @@ class Card:
|
||||||
}
|
}
|
||||||
## For the format of this dictionary of dictionaries see TLV_utils.tags
|
## For the format of this dictionary of dictionaries see TLV_utils.tags
|
||||||
TLV_OBJECTS = {}
|
TLV_OBJECTS = {}
|
||||||
|
|
||||||
|
## Format: "AID (binary)": ("name", [optional: description, {more information}])
|
||||||
|
APPLICATIONS = {
|
||||||
|
## The following are from 0341a.pdf: BSI-DSZ-CC-0341-2006
|
||||||
|
"\xD2\x76\x00\x00\x66\x01": ("DF_SIG", "Signature application", {"fid": "\xAB\x00"}),
|
||||||
|
"\xD2\x76\x00\x00\x25\x5A\x41\x02": ("ZA_MF_NEU", "Zusatzanwendungen", {"fid": "\xA7\x00"}),
|
||||||
|
"\xD2\x76\x00\x00\x25\x45\x43\x02\x00": ("DF_EC_CASH_NEU", "ec-Cash", {"fid": "\xA1\x00"}),
|
||||||
|
"\xD2\x76\x00\x00\x25\x45\x50\x02\x00": ("DF_BOERSE_NEU", "Geldkarte", {"fid": "\xA2\x00"}),
|
||||||
|
"\xD2\x76\x00\x00\x25\x47\x41\x01\x00": ("DF_GA_MAESTRO", "GA-Maestro", {"fid": "\xAC\x00"}),
|
||||||
|
"\xD2\x76\x00\x00\x25\x54\x44\x01\x00": ("DF_TAN", "TAN-Anwendung", {"fid": "\xAC\x02"}),
|
||||||
|
"\xD2\x76\x00\x00\x25\x4D\x01\x02\x00": ("DF_MARKTPLATZ_NEU", "Marktplatz", {"fid": "\xB0\x01"}),
|
||||||
|
"\xD2\x76\x00\x00\x25\x46\x53\x02\x00": ("DF_FAHRSCHEIN_NEU", "Fahrschein", {"fid": "\xB0\x00"}),
|
||||||
|
"\xD2\x76\x00\x00\x25\x48\x42\x02\x00": ("DF_BANKING_20" , "HBCI", {"fid": "\xA6\x00"}),
|
||||||
|
"\xD2\x76\x00\x00\x25\x4E\x50\x01\x00": ("DF_NOTEPAD", "Notepad", {"fid": "\xA6\x10"}),
|
||||||
|
}
|
||||||
|
APPLICATIONS["\xA0\x00\x00\x00\x59\x50\x41\x43\x45\x01\x00"] = APPLICATIONS["\xD2\x76\x00\x00\x25\x45\x50\x02\x00"]
|
||||||
|
APPLICATIONS["\xA0\x00\x00\x00\x04\x30\x60"] = APPLICATIONS["\xD2\x76\x00\x00\x25\x47\x41\x01\x00"]
|
||||||
|
|
||||||
def __init__(self, card = None, reader = None):
|
def __init__(self, card = None, reader = None):
|
||||||
if card is None:
|
if card is None:
|
||||||
|
@ -74,10 +91,24 @@ class Card:
|
||||||
end = lastlen
|
end = lastlen
|
||||||
print TLV_utils.decode(self.last_result.data[start:end], tags=self.TLV_OBJECTS)
|
print TLV_utils.decode(self.last_result.data[start:end], tags=self.TLV_OBJECTS)
|
||||||
|
|
||||||
|
_SHOW_APPLICATIONS_FORMAT_STRING = "%(aid)-50s %(name)-20s %(description)-30s"
|
||||||
|
def cmd_show_applications(self):
|
||||||
|
"Show the list of known (by the shell) applications"
|
||||||
|
print self._SHOW_APPLICATIONS_FORMAT_STRING % {"aid": "AID", "name": "Name", "description": "Description"}
|
||||||
|
foo = self.APPLICATIONS.items()
|
||||||
|
foo.sort()
|
||||||
|
for aid, info in foo:
|
||||||
|
print self._SHOW_APPLICATIONS_FORMAT_STRING % {
|
||||||
|
"aid": utils.hexdump(aid, short=True),
|
||||||
|
"name": info[0],
|
||||||
|
"description": len(info) > 1 and info[1] or ""
|
||||||
|
}
|
||||||
|
|
||||||
COMMANDS = {
|
COMMANDS = {
|
||||||
"reset": cmd_reset,
|
"reset": cmd_reset,
|
||||||
"verify": cmd_verify,
|
"verify": cmd_verify,
|
||||||
"parse_tlv": cmd_parsetlv,
|
"parse_tlv": cmd_parsetlv,
|
||||||
|
"show_applications": cmd_show_applications,
|
||||||
}
|
}
|
||||||
|
|
||||||
def _real_send(self, apdu):
|
def _real_send(self, apdu):
|
||||||
|
|
|
@ -6,7 +6,7 @@ class Java_Card(Card):
|
||||||
APDU_SELECT_APPLICATION = C_APDU(ins=0xa4,p1=0x04)
|
APDU_SELECT_APPLICATION = C_APDU(ins=0xa4,p1=0x04)
|
||||||
DRIVER_NAME = "Generic Java"
|
DRIVER_NAME = "Generic Java"
|
||||||
APPLICATIONS = {
|
APPLICATIONS = {
|
||||||
"muscle": "\xa0\x00\x00\x00\x01\x01"
|
"\xa0\x00\x00\x00\x01\x01": ("muscle", "MUSCLE applet")
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, card = None):
|
def __init__(self, card = None):
|
||||||
|
@ -22,8 +22,9 @@ class Java_Card(Card):
|
||||||
"""Select an application on the card.
|
"""Select an application on the card.
|
||||||
application can be given either as hexadezimal aid or by symbolic name (if known)."""
|
application can be given either as hexadezimal aid or by symbolic name (if known)."""
|
||||||
|
|
||||||
if self.APPLICATIONS.has_key(application):
|
s = [a for a,b in self.APPLICATIONS.items() if b[0].lower() == application.lower()]
|
||||||
aid = self.APPLICATIONS[application]
|
if len(s) > 0:
|
||||||
|
aid = s[0]
|
||||||
else:
|
else:
|
||||||
aid = binascii.a2b_hex("".join(application.split()))
|
aid = binascii.a2b_hex("".join(application.split()))
|
||||||
result = self.select_application(aid)
|
result = self.select_application(aid)
|
||||||
|
|
|
@ -15,6 +15,10 @@ class SECCOS_Card(ISO_7816_4_Card):
|
||||||
("3BFF1800FF8131FE45656311086602800011........0620..", None),
|
("3BFF1800FF8131FE45656311086602800011........0620..", None),
|
||||||
("3BFF9600FF8131FE4565631901500280000F........5012..", None),
|
("3BFF9600FF8131FE4565631901500280000F........5012..", None),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
APPLICATIONS = {
|
||||||
|
"\x52\x4F\x4F\x54": ("MF", "Master File ZKA-Chipkarte"),
|
||||||
|
}
|
||||||
|
|
||||||
def decode_sfi_path(value):
|
def decode_sfi_path(value):
|
||||||
return " SFI: 0x%02x, path: %s" % (ord(value[0]) >> 3, utils.hexdump(value[1:], short=True))
|
return " SFI: 0x%02x, path: %s" % (ord(value[0]) >> 3, utils.hexdump(value[1:], short=True))
|
||||||
|
|
Loading…
Reference in New Issue