From 6bf7ca9b3f86629e2fc538e7884c9dac1f0bb872 Mon Sep 17 00:00:00 2001 From: oepen Date: Sun, 11 Dec 2011 16:56:15 +0000 Subject: [PATCH] Partial conversion to python 3 git-svn-id: https://vsmartcard.svn.sourceforge.net/svnroot/vsmartcard@667 96b47cad-a561-4643-ad3b-153ac7d7599c --- .../vpicc/virtualsmartcard/CardGenerator.py | 6 +- .../src/vpicc/virtualsmartcard/CryptoUtils.py | 20 ++--- .../src/vpicc/virtualsmartcard/SEutils.py | 2 +- .../virtualsmartcard/SmartcardFilesystem.py | 6 +- .../vpicc/virtualsmartcard/SmartcardSAM.py | 26 +++---- .../virtualsmartcard/VirtualSmartcard.py | 26 +++---- .../src/vpicc/virtualsmartcard/cards/nPA.py | 2 +- .../src/vpicc/virtualsmartcard/utils.py | 74 +++++++++---------- 8 files changed, 81 insertions(+), 81 deletions(-) diff --git a/virtualsmartcard/src/vpicc/virtualsmartcard/CardGenerator.py b/virtualsmartcard/src/vpicc/virtualsmartcard/CardGenerator.py index 097912a..a966dee 100644 --- a/virtualsmartcard/src/vpicc/virtualsmartcard/CardGenerator.py +++ b/virtualsmartcard/src/vpicc/virtualsmartcard/CardGenerator.py @@ -204,13 +204,13 @@ class CardGenerator(object): passwd1 = getpass.getpass("Please enter your password:") passwd2 = getpass.getpass("Please retype your password:") if (passwd1 != passwd2): - raise ValueError, "Passwords did not match. Will now exit" + raise ValueError("Passwords did not match. Will now exit") else: self.password = passwd1 if self.mf == None or self.sam == None: - raise ValueError, "Card Generator wasn't set up properly" +\ - "(missing MF or SAM)." + raise ValueError("Card Generator wasn't set up properly" +\ + "(missing MF or SAM).") mf_string = dumps(self.mf) sam_string = dumps(self.sam) diff --git a/virtualsmartcard/src/vpicc/virtualsmartcard/CryptoUtils.py b/virtualsmartcard/src/vpicc/virtualsmartcard/CryptoUtils.py index 5a1de69..0aef3f5 100644 --- a/virtualsmartcard/src/vpicc/virtualsmartcard/CryptoUtils.py +++ b/virtualsmartcard/src/vpicc/virtualsmartcard/CryptoUtils.py @@ -42,17 +42,17 @@ def get_cipher(cipherspec, key, iv = None): cipherparts = cipherspec.split("-") if len(cipherparts) > 2: - raise ValueError, 'cipherspec must be of the form "cipher-mode" or "cipher"' + raise ValueError('cipherspec must be of the form "cipher-mode" or "cipher"') elif len(cipherparts) == 1: cipherparts[1] = "ecb" c_class = globals().get(cipherparts[0].upper(), None) if c_class is None: - raise ValueError, "Cipher '%s' not known, must be one of %s" % (cipherparts[0], ", ".join([e.lower() for e in dir() if e.isupper()])) + raise ValueError("Cipher '%s' not known, must be one of %s" % (cipherparts[0], ", ".join([e.lower() for e in dir() if e.isupper()]))) mode = getattr(c_class, "MODE_" + cipherparts[1].upper(), None) if mode is None: - raise ValueError, "Mode '%s' not known, must be one of %s" % (cipherparts[1], ", ".join([e.split("_")[1].lower() for e in dir(c_class) if e.startswith("MODE_")])) + raise ValueError("Mode '%s' not known, must be one of %s" % (cipherparts[1], ", ".join([e.split("_")[1].lower() for e in dir(c_class) if e.startswith("MODE_")]))) cipher = None if iv is None: @@ -66,7 +66,7 @@ def get_cipher_keylen(cipherspec): cipherparts = cipherspec.split("-") if len(cipherparts) > 2: - raise ValueError, 'cipherspec must be of the form "cipher-mode" or "cipher"' + raise ValueError('cipherspec must be of the form "cipher-mode" or "cipher"') cipher = cipherparts[0].upper() #cipher = globals().get(cipherparts[0].upper(), None) @@ -78,13 +78,13 @@ def get_cipher_keylen(cipherspec): elif cipher == "DES3": return 16 else: - raise ValueError, "Unsupported Encryption Algorithm: " + cipher + raise ValueError("Unsupported Encryption Algorithm: " + cipher) def get_cipher_blocklen(cipherspec): cipherparts = cipherspec.split("-") if len(cipherparts) > 2: - raise ValueError, 'cipherspec must be of the form "cipher-mode" or "cipher"' + raise ValueError('cipherspec must be of the form "cipher-mode" or "cipher"') cipher = globals().get(cipherparts[0].upper(), None) return cipher.block_size @@ -137,7 +137,7 @@ def crypto_checksum(algo, key, data, iv=None, ssc=None): """ if algo not in ("HMAC", "MAC", "CC"): - raise ValueError, "Unknown Algorithm %s" % algo + raise ValueError("Unknown Algorithm %s" % algo) if algo == "MAC": checksum = calculate_MAC(key, data, iv) @@ -189,7 +189,7 @@ def hash(hashmethod, data): def operation_on_string(string1, string2, op): if len(string1) != len(string2): - raise ValueError, "string1 and string2 must be of equal length" + raise ValueError("string1 and string2 must be of equal length") result = [] for i in range(len(string1)): result.append(chr(op(ord(string1[i]), ord(string2[i])))) @@ -236,7 +236,7 @@ def read_protected_string(string, password, cipherspec=None): salt = string[7:match.end() - 1] hmac = string[len(string) - hmac_length:] else: - raise ValueError, "Wrong string format" + raise ValueError("Wrong string format") #Derive key pbk = crypt(password, salt) @@ -247,7 +247,7 @@ def read_protected_string(string, password, cipherspec=None): checksum = crypto_checksum("HMAC", key, crypted) if checksum != hmac: logging.error("Found HMAC %s expected %s" % (str(hmac), str(checksum))) - raise ValueError, "Failed to authenticate data. Wrong password?" + raise ValueError("Failed to authenticate data. Wrong password?") #Decrypt data if cipherspec == None: diff --git a/virtualsmartcard/src/vpicc/virtualsmartcard/SEutils.py b/virtualsmartcard/src/vpicc/virtualsmartcard/SEutils.py index a795c36..a97ae99 100644 --- a/virtualsmartcard/src/vpicc/virtualsmartcard/SEutils.py +++ b/virtualsmartcard/src/vpicc/virtualsmartcard/SEutils.py @@ -45,7 +45,7 @@ class ControlReferenceTemplate: if tag not in (CRT_TEMPLATE["AT"], CRT_TEMPLATE["HT"], CRT_TEMPLATE["KAT"], CRT_TEMPLATE["CCT"], CRT_TEMPLATE["DST"], CRT_TEMPLATE["CT"]): - raise ValueError, "Unknown control reference tag." + raise ValueError("Unknown control reference tag.") else: self.type = tag diff --git a/virtualsmartcard/src/vpicc/virtualsmartcard/SmartcardFilesystem.py b/virtualsmartcard/src/vpicc/virtualsmartcard/SmartcardFilesystem.py index 82b8228..dd67a4b 100644 --- a/virtualsmartcard/src/vpicc/virtualsmartcard/SmartcardFilesystem.py +++ b/virtualsmartcard/src/vpicc/virtualsmartcard/SmartcardFilesystem.py @@ -249,11 +249,11 @@ class File(object): self.SAM = SAM if simpletlv_data: if not isinstance(simpletlv_data, list): - raise ValueError, "must be a list of (tag, length, value)-tuples" + raise TypeError("must be a list of (tag, length, value)-tuples") self.setdec('simpletlv_data', simpletlv_data) if bertlv_data: if not isinstance(bertlv_data, list): - raise ValueError, "must be a list of (tag, length, value)-tuples" + raise TypeError("must be a list of (tag, length, value)-tuples") self.setdec('bertlv_data', bertlv_data) def decrypt(self, path, data): @@ -1474,7 +1474,7 @@ class RecordStructureEF(EF): See EF for more. """ if not isinstance(records, list): - raise TypeError, "must be a list of Records" + raise TypeError("must be a list of Records") EF.__init__(self, parent, fid, filedescriptor, lifecycle, simpletlv_data, bertlv_data, datacoding, shortfid) diff --git a/virtualsmartcard/src/vpicc/virtualsmartcard/SmartcardSAM.py b/virtualsmartcard/src/vpicc/virtualsmartcard/SmartcardSAM.py index ad22daf..1925dff 100644 --- a/virtualsmartcard/src/vpicc/virtualsmartcard/SmartcardSAM.py +++ b/virtualsmartcard/src/vpicc/virtualsmartcard/SmartcardSAM.py @@ -74,8 +74,8 @@ class SAM(object): self.cardSecret = urandom(keylen) else: if len(cardSecret) != keylen: - raise ValueError, "cardSecret has the wrong key length for: " +\ - get_referenced_cipher(self.cipher) + raise ValueError("cardSecret has the wrong key length for: " +\ + get_referenced_cipher(self.cipher)) else: self.cardSecret = cardSecret @@ -357,25 +357,25 @@ if __name__ == "__main__": MyCard = SAM("1234", "1234567890") try: - print MyCard.verify(0x00, 0x00, "5678") - except SwError, e: - print e.message + print(MyCard.verify(0x00, 0x00, "5678")) + except SwError as e: + print(e.message) - print "Counter = " + str(MyCard.counter) - print MyCard.verify(0x00, 0x00, "1234") - print "Counter = " + str(MyCard.counter) + print("Counter = " + str(MyCard.counter)) + print(MyCard.verify(0x00, 0x00, "1234")) + print("Counter = " + str(MyCard.counter)) sw, challenge = MyCard.get_challenge(0x00, 0x00, "") - print "Before encryption: " + challenge + print("Before encryption: " + challenge) padded = vsCrypto.append_padding("DES3-ECB", challenge) sw, result_data = MyCard.internal_authenticate(0x00, 0x00, padded) - print "Internal Authenticate status code: %x" % sw + print("Internal Authenticate status code: %x" % sw) try: sw, res = MyCard.external_authenticate(0x00, 0x00, result_data) - except SwError, e: - print e.message + except SwError as e: + print(e.message) sw = e.sw - print "Decryption Status code: %x" % sw + print("Decryption Status code: %x" % sw) #SE = Security_Environment(None) #testvektor = "foobar" diff --git a/virtualsmartcard/src/vpicc/virtualsmartcard/VirtualSmartcard.py b/virtualsmartcard/src/vpicc/virtualsmartcard/VirtualSmartcard.py index f3dfbff..9d3ec76 100644 --- a/virtualsmartcard/src/vpicc/virtualsmartcard/VirtualSmartcard.py +++ b/virtualsmartcard/src/vpicc/virtualsmartcard/VirtualSmartcard.py @@ -271,7 +271,7 @@ class Iso7816OS(SmartcardOS): try: c = C_APDU(msg) - except ValueError, e: + except ValueError as e: logging.warning(str(e)) return self.formatResult(False, 0, "", SW["ERR_INCORRECTPARAMETERS"], False) @@ -332,7 +332,7 @@ class Iso7816OS(SmartcardOS): answer = self.formatResult(Iso7816OS.seekable(c.ins), c.effective_Le, result, sw, True) else: answer = self.formatResult(Iso7816OS.seekable(c.ins), c.effective_Le, result, sw, False) - except SwError, e: + except SwError as e: logging.info(e.message) #traceback.print_exception(*sys.exc_info()) sw = e.sw @@ -353,14 +353,14 @@ class CryptoflexOS(Iso7816OS): try: c = C_APDU(msg) - except ValueError, e: + except ValueError as e: logging.debug("Failed to parse APDU %s", msg) return self.formatResult(False, 0, 0, "", SW["ERR_INCORRECTPARAMETERS"]) try: sw, result = self.ins2handler.get(c.ins, notImplemented)(c.p1, c.p2, c.data) #print type(result) - except SwError, e: + except SwError as e: logging.info(e.message) #traceback.print_exception(*sys.exc_info()) sw = e.sw @@ -415,7 +415,7 @@ class RelayOS(SmartcardOS): self.reader = readers[readernum] try: self.session = smartcard.Session(self.reader) - except smartcard.Exceptions.CardConnectionException, e: + except smartcard.Exceptions.CardConnectionException as e: logging.error("Error connecting to card: %s", e.message) sys.exit() @@ -429,7 +429,7 @@ class RelayOS(SmartcardOS): """ try: self.session.close() - except smartcard.Exceptions.CardConnectionException, e: + except smartcard.Exceptions.CardConnectionException as e: logging.warning("Error disconnecting from card: %s", e.message) def getATR(self): @@ -437,13 +437,13 @@ class RelayOS(SmartcardOS): # In this case we must try to reconnect (and then get the ATR). try: atr = self.session.getATR() - except smartcard.Exceptions.CardConnectionException, e: + except smartcard.Exceptions.CardConnectionException as e: try: # Try to reconnect to the card self.session.close() self.session = smartcard.Session(self.reader) atr = self.session.getATR() - except smartcard.Exceptions.CardConnectionException, e: + except smartcard.Exceptions.CardConnectionException as e: logging.error("Error getting ATR: %s", e.message) sys.exit() @@ -456,10 +456,10 @@ class RelayOS(SmartcardOS): # must try to reconnect (and power the card). try: self.session.getATR() - except smartcard.Exceptions.CardConnectionException, e: + except smartcard.Exceptions.CardConnectionException as e: try: self.session = smartcard.Session(self.reader) - except smartcard.Exceptions.CardConnectionException, e: + except smartcard.Exceptions.CardConnectionException as e: logging.error("Error connecting to card: %s", e.message) sys.exit() @@ -468,7 +468,7 @@ class RelayOS(SmartcardOS): # disconnect, which should implicitly power down the card. try: self.session.close() - except smartcard.Exceptions.CardConnectionException, e: + except smartcard.Exceptions.CardConnectionException as e: logging.error("Error disconnecting from card: %s", str(e)) sys.exit() @@ -478,7 +478,7 @@ class RelayOS(SmartcardOS): try: rapdu, sw1, sw2 = self.session.sendCommandAPDU(apdu) - except smartcard.Exceptions.CardConnectionException, e: + except smartcard.Exceptions.CardConnectionException as e: logging.error("Error transmitting APDU: %s", str(e)) sys.exit() @@ -574,7 +574,7 @@ class VirtualICC(object): try: self.sock = self.connectToPort(host, port) self.sock.settimeout(None) - except socket.error, e: + except socket.error as e: logging.error("Failed to open socket: %s", str(e)) logging.error("Is pcscd running at %s? Is vpcd loaded? Is a firewall blocking port %u?", host, port) diff --git a/virtualsmartcard/src/vpicc/virtualsmartcard/cards/nPA.py b/virtualsmartcard/src/vpicc/virtualsmartcard/cards/nPA.py index d0cf1b2..124402c 100644 --- a/virtualsmartcard/src/vpicc/virtualsmartcard/cards/nPA.py +++ b/virtualsmartcard/src/vpicc/virtualsmartcard/cards/nPA.py @@ -29,7 +29,7 @@ class nPA_AT_CRT(ControlReferenceTemplate): def parse_SE_config(self, config): try: ControlReferenceTemplate.parse_SE_config(self, config) - except SwError, e: + except SwError as e: structure = unpack(config) for tlv in structure: tag, length, value = tlv diff --git a/virtualsmartcard/src/vpicc/virtualsmartcard/utils.py b/virtualsmartcard/src/vpicc/virtualsmartcard/utils.py index c5c6ad0..2d22dab 100644 --- a/virtualsmartcard/src/vpicc/virtualsmartcard/utils.py +++ b/virtualsmartcard/src/vpicc/virtualsmartcard/utils.py @@ -45,7 +45,7 @@ def inttostring(i, length=None): if length: l = len(str) if l > length: - raise ValueError, "i too big for the specified stringlength" + raise ValueError("i too big for the specified stringlength") else: str = chr(0)*(length-l) + str @@ -122,10 +122,10 @@ def parse_status(data): lifecycle = ord(segment[1+lgth]) privileges = ord(segment[1+lgth+1]) - print "aid length: %i (%x)" % (lgth, lgth) - print "aid: %s" % hexdump(aid, indent = 18, short=True) - print "life cycle state: %x (%s)" % (lifecycle, LIFE_CYCLES.get(lifecycle, "unknown or invalid state")) - print "privileges: %x (%s)\n" % (privileges, parse_privileges(privileges)) + print("aid length: %i (%x)" % (lgth, lgth)) + print("aid: %s" % hexdump(aid, indent = 18, short=True)) + print("life cycle state: %x (%s)" % (lifecycle, LIFE_CYCLES.get(lifecycle, "unknown or invalid state"))) + print("privileges: %x (%s)\n" % (privileges, parse_privileges(privileges))) pos = 0 while pos < len(data): @@ -185,7 +185,7 @@ class APDU(object): if t == str: initbuff[index] = ord(value) elif t != int: - raise TypeError, "APDU must consist of ints or one-byte strings, not %s (index %s)" % (t, index) + raise TypeError("APDU must consist of ints or one-byte strings, not %s (index %s)" % (t, index)) self.parse( initbuff ) @@ -201,7 +201,7 @@ class APDU(object): elif isinstance(value, list): self._data = "".join([chr(int(e)) for e in value]) else: - raise ValueError, "'data' attribute can only be a str or a list of int, not %s" % type(value) + raise ValueError("'data' attribute can only be a str or a list of int, not %s" % type(value)) self.Lc = len(value) def _deldata(self): del self._data; self.data = "" @@ -216,7 +216,7 @@ class APDU(object): elif isinstance(value, str): setattr(self, "_"+name, ord(value)) else: - raise ValueError, "'%s' attribute can only be a byte, that is: int or str, not %s" % (name, type(value)) + raise ValueError("'%s' attribute can only be a byte, that is: int or str, not %s" % (name, type(value))) def _format_parts(self, fields): "utility function to be used in __str__ and __repr__" @@ -271,7 +271,7 @@ class C_APDU(APDU): self.Le = (apdu[-2]<<8) + apdu[-1] self.data = apdu[7:-3] else: - raise ValueError, "Invalid Lc value. Is %s, should be %s or %s" % (self.Lc, + raise ValueError("Invalid Lc value. Is %s, should be %s or %s" % (self.Lc,) 7 + self.Lc, 7 + self.Lc + 3) else: # short apdu if len(apdu) == 5: # case 2 short apdu @@ -285,8 +285,8 @@ class C_APDU(APDU): self.data = apdu[5:-1] self.Le = apdu[-1] else: - raise ValueError, "Invalid Lc value. Is %s, should be %s or %s" % (self.Lc, - 5 + self.Lc, 5 + self.Lc + 1) + raise ValueError("Invalid Lc value. Is %s, should be %s or %s" % (self.Lc, + 5 + self.Lc, 5 + self.Lc + 1)) CLA = _make_byte_property("CLA"); cla = CLA INS = _make_byte_property("INS"); ins = INS @@ -355,7 +355,7 @@ class R_APDU(APDU): def _getsw(self): return chr(self.SW1) + chr(self.SW2) def _setsw(self, value): if len(value) != 2: - raise ValueError, "SW must be exactly two bytes" + raise ValueError("SW must be exactly two bytes") self.SW1 = value[0] self.SW2 = value[1] @@ -385,39 +385,39 @@ if __name__ == "__main__": c = C_APDU((1, 2, 3), cla = 0x23, data = "hallo") # case 3 d = C_APDU(1, 2, 3, 4, 2, 4, 6, 0) # case 4 - print - print a - print b - print c - print d - print - print repr(a) - print repr(b) - print repr(c) - print repr(d) + print() + print(a) + print(b) + print(c) + print(d) + print() + print(repr(a)) + print(repr(b)) + print(repr(c)) + print(repr(d)) - print + print() for i in a, b, c, d: - print hexdump(i.render()) + print(hexdump(i.render())) - print + print() e = R_APDU(0x90, 0) f = R_APDU("foo\x67\x00") - print - print e - print f - print - print repr(e) - print repr(f) + print() + print(e) + print(f) + print() + print(repr(e)) + print(repr(f)) - print + print() for i in e, f: - print hexdump(i.render()) + print(hexdump(i.render())) g = C_APDU(0x00, 0xb0, 0x9c, 0x00, 0x00, 0x00, 0x00) #case 2 extended length - print - print g - print repr(g) - print hexdump(g.render()) + print() + print(g) + print(repr(g)) + print(hexdump(g.render()))