aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cards/iso_card.py1
-rwxr-xr-xcyberflex-shell.py7
-rw-r--r--utils.py5
3 files changed, 11 insertions, 2 deletions
diff --git a/cards/iso_card.py b/cards/iso_card.py
index fa6085d..edb8a3e 100644
--- a/cards/iso_card.py
+++ b/cards/iso_card.py
@@ -6,6 +6,7 @@ from utils import C_APDU, R_APDU
class ISO_Card(Card):
DRIVER_NAME = ["ISO"]
COMMAND_GET_RESPONSE = C_APDU(ins=0xc0)
+ COMMAND_CLASS = C_APDU
APDU_VERIFY_PIN = C_APDU(ins=0x20)
diff --git a/cyberflex-shell.py b/cyberflex-shell.py
index 9ff3339..788824e 100755
--- a/cyberflex-shell.py
+++ b/cyberflex-shell.py
@@ -230,10 +230,13 @@ class Cyberflex_Shell(Shell):
self.card.last_delta = None
def do_fancy_apdu(self, *args):
- "Parse and transmit a fancy APDU"
+ "Parse and transmit a fancy command"
apdu = None
try:
- apdu = utils.C_APDU.parse_fancy(*args)
+ if hasattr(self.card.COMMAND_CLASS, "parse_fancy"):
+ apdu = self.card.COMMAND_CLASS.parse_fancy(*args)
+ else:
+ apdu = self.card.COMMAND_CLASS(*args)
except ValueError:
raise NotImplementedError
diff --git a/utils.py b/utils.py
index 0352447..9f0b731 100644
--- a/utils.py
+++ b/utils.py
@@ -228,6 +228,11 @@ class Transmission_Frame(object):
# Stub for implementation in subclasses
# Semantics should be: c=a.append(b) <=> c.data == a.data + b.data and c.status == b.status
append = None
+
+ @classmethod
+ def parse_fancy(cls, *args):
+ argstring = "".join((" ".join(args)).split())
+ return cls(binascii.unhexlify(argstring))
class Command_Frame(Transmission_Frame):
pass