Some more commands

git-svn-id: svn+ssh://localhost/home/henryk/svn/cyberflex-shell/trunk@16 f711b948-2313-0410-aaa9-d29f33439f0b
This commit is contained in:
henryk 2005-09-29 15:31:57 +00:00
parent 268ce82792
commit 6337b3ef58
2 changed files with 46 additions and 2 deletions

View File

@ -184,6 +184,44 @@ class Cyberflex_Card(Java_Card):
def cmd_secure(self, *args):
self.open_secure_channel()
def cmd_setkey(self, *args):
if len(args) != 2:
raise TypeError, "Need exactly two arguments: keyset index and key"
arg1 = args[0].strip().lower()
try:
arg1int = int(arg1,0)
except:
arg1int = None
pass
if len(args[1]) != 16:
arg2 = binascii.a2b_hex("".join(args[1].split()))
else:
arg2 = args[1]
if len(arg2) != 16:
raise TypeError, "Need either exactly 16 binary bytes or 16 hexadezimal bytes for the key argument."
if arg1int == 0 or arg1 == "all":
all = True
else:
all = False
if all or arg1int == KEY_AUTH or arg1 in("auth","enc"):
self.keyset[KEY_AUTH] = arg2
if all or arg1int == KEY_MAC or arg1 == "mac":
self.keyset[KEY_MAC] = arg2
if all or arg1int == KEY_KEK or arg1 == "kek":
self.keyset[KEY_KEK] = arg2
def cmd_printkeyset(self, *args):
print "ENC,AUTH:", utils.hexdump(self.keyset[KEY_AUTH], short=True)
print "MAC: ", utils.hexdump(self.keyset[KEY_MAC], short=True)
print "KEK: ", utils.hexdump(self.keyset[KEY_KEK], short=True)
def cmd_resetkeyset(self, *args):
self.keyset = dict(DEFAULT_KEYSET)
_secname = {SECURE_CHANNEL_NONE: "",
SECURE_CHANNEL_CLEAR: " [clear]",
SECURE_CHANNEL_MAC: " [MAC]",
@ -198,7 +236,13 @@ class Cyberflex_Card(Java_Card):
"status": (cmd_status, "status [reference_control]",
"""Execute a GetStatus command and return the result."""),
"open_secure_channel": (cmd_secure, "open_secure_channel",
"""Open a secure channel with the default parameters (FIXME).""")
"""Open a secure channel with the default parameters (FIXME)."""),
"set_key": (cmd_setkey, "set_key key_index key",
"""Set a key in the current keyset. key_index should be one of 0, all, 1, enc, auth, 2, mac, 3, kek."""),
"print_keyset": (cmd_printkeyset, "print_keyset",
"""Print the current keyset."""),
"reset_keyset": (cmd_resetkeyset, "reset_keyset",
"""Reset the keyset to the default keyset for this card.""")
} )
if __name__ == "__main__":

View File

@ -7,7 +7,7 @@ class Card:
SW_OK = '\x90\x00'
ATRS = []
DRIVER_NAME = "Generic"
COMMANDS = []
COMMANDS = {}
def __init__(self, card = None):
if card is None: