From 74dbdbec98a2dbb53656aeeb8bac86a479225948 Mon Sep 17 00:00:00 2001 From: oepen Date: Tue, 6 Sep 2011 12:45:47 +0000 Subject: [PATCH] Removed vim folding markers git-svn-id: https://vsmartcard.svn.sourceforge.net/svnroot/vsmartcard@526 96b47cad-a561-4643-ad3b-153ac7d7599c --- .../virtualsmartcard/ConstantDefinitions.py | 37 +++++----- .../src/vpicc/virtualsmartcard/SWutils.py | 3 +- .../virtualsmartcard/SmartcardFilesystem.py | 62 ++++++++--------- .../src/vpicc/virtualsmartcard/TLVutils.py | 68 +++++++++---------- .../virtualsmartcard/VirtualSmartcard.py | 30 ++++---- .../src/vpicc/virtualsmartcard/utils.py | 8 +-- 6 files changed, 103 insertions(+), 105 deletions(-) diff --git a/virtualsmartcard/src/vpicc/virtualsmartcard/ConstantDefinitions.py b/virtualsmartcard/src/vpicc/virtualsmartcard/ConstantDefinitions.py index cc746f9..450534f 100644 --- a/virtualsmartcard/src/vpicc/virtualsmartcard/ConstantDefinitions.py +++ b/virtualsmartcard/src/vpicc/virtualsmartcard/ConstantDefinitions.py @@ -19,7 +19,7 @@ MAX_SHORT_LE = 0xff MAX_EXTENDED_LE = 0xffff -# Life cycle status byte {{{ +# Life cycle status byte LCB = {} LCB["NOINFORMATION"] = 0x00 LCB["CREATION"] = 0x01 @@ -27,15 +27,15 @@ LCB["INITIALISATION"] = 0x03 LCB["ACTIVATED"] = 0x05 LCB["DEACTIVATED"] = 0x04 LCB["TERMINATION"] = 0x0C -# }}} -# Channel security attribute {{{ + +# Channel security attribute CS = {} CS["NOTSHAREABLE"] = 0x01 CS["SECURED"] = 0x02 CS["USERAUTHENTICATED"] = 0x03 -# }}} -# Security attribute {{{ -# Security attribute, Access mode byte for DFs/EFs {{{ + +# Security attribute +# Security attribute, Access mode byte for DFs/EFs SA = {} SA["AM_DF_DELETESELF"] = SA["AM_EF_DELETEFILE"] = 0x40 SA["AM_DF_TERMINATEDF"] = SA["AM_EF_TERMINATEFILE"] = 0x20 @@ -44,8 +44,8 @@ SA["AM_DF_DEACTIVATEFILE"] = SA["AM_EF_DEACTIVATEFILE"] = 0x08 SA["AM_DF_CREATEDF"] = SA["AM_EF_WRITEBINARY"] = 0x04 SA["AM_DF_CREATEEF"] = SA["AM_EF_UPDATEBINARY"] = 0x02 SA["AM_DF_DELETECHILD"] = SA["AM_EF_READBINARY"] = 0x01 -# }}} -# Security attribute in compact format, Security condition byte {{{ + +# Security attribute in compact format, Security condition byte SA["CF_SC_NOCONDITION"] = 0x00 SA["CF_SC_NEVER"] = 0xFF SA["__CF_SC_ATLEASTONE"] = 0x80 @@ -59,9 +59,9 @@ SA["CF_SC_ONE_USERAUTHENTICATION"] = SA["__CF_SC_ATLEASTONE"]|SA["__CF_SC_US SA["CF_SC_ALL_SECUREMESSAGING"] = SA["__CF_SC_ALLCONDITIONS"]|SA["__CF_SC_SECUREMESSAGING"] SA["CF_SC_ALL_EXTERNALAUTHENTICATION"] = SA["__CF_SC_ALLCONDITIONS"]|SA["__CF_SC_EXTERNALAUTHENTICATION"] SA["CF_SC_ALL_USERAUTHENTICATION"] = SA["__CF_SC_ALLCONDITIONS"]|SA["__CF_SC_USERAUTHENTICATION"] -# }}} -# }}} -# Data coding byte {{{ + + +# Data coding byte DCB = {} DCB["ONETIMEWRITE"] = 0x00 DCB["PROPRIETARY"] = 0x20 # we use it for XOR @@ -69,8 +69,8 @@ DCB["WRITEOR"] = 0x40 DCB["WRITEAND"] = 0x60 DCB["BERTLV_FFVALID"] = 0x10 DCB["BERTLV_FFINVALID"] = 0x10 -# }}} -# File descriptor byte {{{ + +# File descriptor byte FDB = {} FDB["NOTSHAREABLEFILE"] = 0x00 FDB["SHAREABLEFILE"] = 0x40 @@ -85,18 +85,17 @@ FDB["EFSTRUCTURE_LINEAR_VARIABLE_NOFURTHERINFO"] = 0x04 FDB["EFSTRUCTURE_LINEAR_VARIABLESIMPLETLV"] = 0x05 FDB["EFSTRUCTURE_CYCLIC_NOFURTHERINFO"] = 0x06 FDB["EFSTRUCTURE_CYCLIC_SIMPLETLV"] = 0x07 -# }}} -# File identifier {{{ + +# File identifier FID = {} FID["EFDIR"] = 0x2F00 FID["EFATR"] = 0x2F00 FID["MF"] = 0x3F00 FID["PATHSELECTION"] = 0x3FFF FID["RESERVED"] = 0x3FFF -# }}} + #Secure Messaging constants -#{{{ SM_Class = {} #Basic secure messaging objects @@ -213,7 +212,7 @@ ALGO_MAPPING[0x0B] = "CC" ALGO_MAPPING[0x0C] = "RSA" ALGO_MAPPING[0x0D] = "DSA" -# Recerence control for select command, and record handling commands {{{ +# Recerence control for select command, and record handling commands REF = { "IDENTIFIER_FIRST" : 0x00, "IDENTIFIER_LAST" : 0x01, @@ -226,4 +225,4 @@ REF = { "NUMBER_CONTROL" : 0x07, "REFERENCE_CONTROL" : 0x07, } -# }}} + diff --git a/virtualsmartcard/src/vpicc/virtualsmartcard/SWutils.py b/virtualsmartcard/src/vpicc/virtualsmartcard/SWutils.py index 10ebe11..a4e5788 100644 --- a/virtualsmartcard/src/vpicc/virtualsmartcard/SWutils.py +++ b/virtualsmartcard/src/vpicc/virtualsmartcard/SWutils.py @@ -16,7 +16,7 @@ # You should have received a copy of the GNU General Public License along with # virtualsmartcard. If not, see . # -# Meaning of the interindustry values of SW1-SW2 {{{ +# Meaning of the interindustry values of SW1-SW2 SW = { "NORMAL" : 0x9000, "NORMAL_REST" : 0x6100, @@ -125,7 +125,6 @@ for i in range(0, 0xff): SW_MESSAGES[0x6600 + i] = 'Execution error (Security-related issues)' SW_MESSAGES[0x6C00 + i] = 'Checking error (Wrong Le field; %d available data bytes)' % i -# }}} class SwError(Exception): def __init__(self, sw): diff --git a/virtualsmartcard/src/vpicc/virtualsmartcard/SmartcardFilesystem.py b/virtualsmartcard/src/vpicc/virtualsmartcard/SmartcardFilesystem.py index 06e0b8d..317178a 100644 --- a/virtualsmartcard/src/vpicc/virtualsmartcard/SmartcardFilesystem.py +++ b/virtualsmartcard/src/vpicc/virtualsmartcard/SmartcardFilesystem.py @@ -27,7 +27,7 @@ from virtualsmartcard.TLVutils import * from virtualsmartcard.SWutils import SW, SwError from virtualsmartcard.utils import stringtoint, inttostring -def isEqual(list): # {{{ +def isEqual(list): """Returns True, if all items are equal, otherwise False""" if len(list) > 1: for item in list: @@ -35,9 +35,9 @@ def isEqual(list): # {{{ return False return True -# }}} -def walk(start, path): # {{{ + +def walk(start, path): """Walks a path of fids and returns the last file (EF or DF). start -- DF, where to look for the first fid @@ -54,9 +54,9 @@ def walk(start, path): # {{{ index = index + 2 return start -# }}} -def getfile_byrefdataobj(mf, refdataobjs): # {{{ + +def getfile_byrefdataobj(mf, refdataobjs): """Returns a list of files according to the given list of reference data objects. @@ -97,9 +97,9 @@ def getfile_byrefdataobj(mf, refdataobjs): # {{{ result.append(file) return result -# }}} -def write(old, newlist, offsets, datacoding, maxsize=None): # {{{ + +def write(old, newlist, offsets, datacoding, maxsize=None): """Returns the status bytes and the result of a write operation according to the given data coding. @@ -153,9 +153,9 @@ def write(old, newlist, offsets, datacoding, maxsize=None): # {{{ listindex = listindex + 1 return result -# }}} -def get_indexes(items, reference=REF["IDENTIFIER_FIRST"], index_current=0): # {{{ + +def get_indexes(items, reference=REF["IDENTIFIER_FIRST"], index_current=0): """ Returns all indexes of the list, which are specified by 'reference' and by the current index 'index_current' (-1 for no current item) in the correct @@ -186,9 +186,9 @@ def get_indexes(items, reference=REF["IDENTIFIER_FIRST"], index_current=0): # {{ # Read next occurrence indexes = range(index_current + 1, len(items)) return indexes -# }}} -def prettyprint_anything(indent, thing): # {{{ + +def prettyprint_anything(indent, thing): """ Returns a recursively generated string representation of an object and its attributes. @@ -205,9 +205,9 @@ def prettyprint_anything(indent, thing): # {{{ for item in newvalue: s = s + "\n" + prettyprint_anything(indent + " ", item) return s -# }}} -def make_property(prop, doc): # {{{ + +def make_property(prop, doc): """ Assigns a property to the calling object. This is used to decorate instance variables with docstrings. @@ -217,7 +217,7 @@ def make_property(prop, doc): # {{{ lambda self, value: setattr(self, "_"+prop, value), lambda self: delattr(self, "_"+prop), doc) -# }}} + class File(object): @@ -390,10 +390,10 @@ class File(object): def select(self, *argz, **args): """Only a template, will raise an error.""" raise SwError(SW["ERR_INCOMPATIBLEWITHFILE"]) -# }}} -class DF(File): # {{{ + +class DF(File): """Class for a dedicated file""" data = make_property("data", "unknown") content = make_property("content", "list of files of the DF") @@ -490,10 +490,10 @@ class DF(File): # {{{ def remove(self, file): """Removes 'file' from the content of the DF""" self.content.remove(file) -# }}} -class MF(DF): # {{{ + +class MF(DF): """Class for a master file""" current = make_property("current", "the currently selected file") firstSFT = make_property("firstSFT", "string of length 1. The first software function table from the historical bytes.") @@ -513,7 +513,7 @@ class MF(DF): # {{{ @staticmethod - def makeFirstSoftwareFunctionTable(# {{{ + def makeFirstSoftwareFunctionTable( DFSelectionByFullDFName=True, DFSelectionByPartialDFName=True, DFSelectionByPath=True, DFSelectionByFID=True, DFSelectionByApplication_implicite=True, ShortFIDSupported=True, @@ -549,16 +549,16 @@ class MF(DF): # {{{ if RecordIdentifierSupported: fsft |= 1 return fsft - # }}} + @staticmethod - def makeSecondSoftwareFunctionTable(DCB=DCB["ONETIMEWRITE"]|1): # {{{ + def makeSecondSoftwareFunctionTable(DCB=DCB["ONETIMEWRITE"]|1): """ The second software function table from the historical bytes contains the data coding byte. """ return DCB - # }}} + def currentDF(self): """Returns the current DF.""" @@ -1295,10 +1295,10 @@ class MF(DF): # {{{ # FIXME: free memory of file and remove its content from the security device return SW["NORMAL"], "" -# }}} -class EF(File): # {{{ + +class EF(File): """Template class for an elementary file.""" shortfid = make_property("shortfid", "integer with 1<=shortfid<=30. Short EF identifier.") datacoding = make_property("datacoding", "integer. Data coding byte.") @@ -1323,10 +1323,10 @@ class EF(File): # {{{ simpletlv_data, bertlv_data) self.datacoding = datacoding -# }}} -class TransparentStructureEF(EF): # {{{ + +class TransparentStructureEF(EF): """Class for an elementary file with transparent structure.""" data = make_property("data", "string (encrypted). The file's data.") def __init__(self, parent, fid, filedescriptor=FDB["EFSTRUCTURE_TRANSPARENT"], @@ -1391,10 +1391,10 @@ class TransparentStructureEF(EF): # {{{ data = data[0:erasefrom] + data[eraseto:len(data)] self.setdec('data', data) -# }}} -class Record(object): # {{{ + +class Record(object): data = make_property("data", "string. The record's data.") identifier = make_property("identifier", "integer with 1<= identifier< = 0xfe. The record's identifier.") """Class for a Record of an elementary of record structure""" @@ -1412,10 +1412,10 @@ class Record(object): # {{{ """Returns a string of the object using an prettyprint_anything.""" return prettyprint_anything("", self) __repr__ = __str__ -# }}} -class RecordStructureEF(EF): # {{{ + +class RecordStructureEF(EF): """Class for an elementary file with record structure.""" records = make_property("records", "list of records (encrypted)") maxrecordsize = make_property("maxrecordsize", "integer. maximum length of a record's data.") @@ -1630,4 +1630,4 @@ class RecordStructureEF(EF): # {{{ r.data = "" r.identifier = None return SW["NORMAL"] -# }}} + diff --git a/virtualsmartcard/src/vpicc/virtualsmartcard/TLVutils.py b/virtualsmartcard/src/vpicc/virtualsmartcard/TLVutils.py index daadfb9..43903f9 100644 --- a/virtualsmartcard/src/vpicc/virtualsmartcard/TLVutils.py +++ b/virtualsmartcard/src/vpicc/virtualsmartcard/TLVutils.py @@ -49,7 +49,7 @@ TAG["TAG_LIST"] = 0x5C TAG["HEADER_LIST"] = 0x5D TAG["EXTENDED_HEADER_LIST"] = 0x4D -def tlv_unpack(data): # {{{ +def tlv_unpack(data): ber_class = (ord(data[0]) & 0xC0) >> 6 constructed = (ord(data[0]) & 0x20) != 0 ## 0 = primitive, 0x20 = constructed tag = ord(data[0]) @@ -76,9 +76,9 @@ def tlv_unpack(data): # {{{ rest = data[length:] return ber_class, constructed, tag, length, value, rest -# }}} -def tlv_find_tags(tlv_data, tags, num_results = None): # {{{ + +def tlv_find_tags(tlv_data, tags, num_results = None): """Find (and return) all instances of tags in the given tlv structure (as returned by unpack). If num_results is specified then at most that many results will be returned.""" @@ -99,16 +99,16 @@ def tlv_find_tags(tlv_data, tags, num_results = None): # {{{ find_recursive(tlv_data) return results -# }}} -def tlv_find_tag(tlv_data, tag, num_results = None): # {{{ + +def tlv_find_tag(tlv_data, tag, num_results = None): """Find (and return) all instances of tag in the given tlv structure (as returned by unpack). If num_results is specified then at most that many results will be returned.""" return tlv_find_tags(tlv_data, [tag], num_results) -# }}} -def pack(tlv_data, recalculate_length = False): # {{{ + +def pack(tlv_data, recalculate_length = False): result = [] for data in tlv_data: @@ -143,14 +143,14 @@ def pack(tlv_data, recalculate_length = False): # {{{ result.append(value) return "".join(result) -# }}} -def bertlv_pack(data): # {{{ + +def bertlv_pack(data): """Packs a bertlv list of 3-tuples (tag, length, newvalue) into a string""" return pack(data) -# }}} -def unpack(data, with_marks = None, offset = 0, include_filler=False): # {{{ + +def unpack(data, with_marks = None, offset = 0, include_filler=False): result = [] while len(data) > 0: if ord(data[0]) in (0x00, 0xFF): @@ -185,15 +185,15 @@ def unpack(data, with_marks = None, offset = 0, include_filler=False): # {{{ offset = stop return result -# }}} -def bertlv_unpack(data): # {{{ + +def bertlv_unpack(data): """Unpacks a bertlv coded string into a list of 3-tuples (tag, length, newvalue).""" return unpack(data) -# }}} -def simpletlv_pack(tlv_data, recalculate_length = False): # {{{ + +def simpletlv_pack(tlv_data, recalculate_length = False): result = "" for tag, length, value in tlv_data: @@ -213,9 +213,9 @@ def simpletlv_pack(tlv_data, recalculate_length = False): # {{{ result += chr(tag) + chr(0xff)+chr(length>>8)+chr(length&0xff) + value return result -# }}} -def simpletlv_unpack(data): # {{{ + +def simpletlv_unpack(data): """Unpacks a simpletlv coded string into a list of 3-tuples (tag, length, newvalue).""" result = [] @@ -236,25 +236,25 @@ def simpletlv_unpack(data): # {{{ result.append((tag, length, newvalue)) return result -# }}} -def decodeDiscretionaryDataObjects(tlv_data): # {{{ + +def decodeDiscretionaryDataObjects(tlv_data): datalist = [] for (tag, length, newvalue) in (tlv_find_tags(tlv_data, [TAG["DISCRETIONARY_DATA"], TAG["DISCRETIONARY_TEMPLATE"]])): datalist.append(newvalue) return datalist -# }}} -def decodeOffsetDataObjects(tlv_data): # {{{ + +def decodeOffsetDataObjects(tlv_data): offsets = [] for (tag, length, newvalue) in tlv_find_tag(tlv_data, TAG["OFFSET_DATA"]): offsets.append(stringtoint(newvalue)) return offsets -# }}} -def decodeTagList(tlv_data): # {{{ + +def decodeTagList(tlv_data): taglist = [] for (t, l, data) in tlv_find_tag(tlv_data, TAG["TAG_LIST"]): while data != "": @@ -268,9 +268,9 @@ def decodeTagList(tlv_data): # {{{ data = data[1:] taglist.append((tag, 0)) return taglist -# }}} -def decodeHeaderList(tlv_data): # {{{ + +def decodeHeaderList(tlv_data): headerlist = [] for (t, l, data) in tlv_find_tag(tlv_data, TAG["HEADER_LIST"]): while data != "": @@ -296,22 +296,22 @@ def decodeHeaderList(tlv_data): # {{{ headerlist.append((tag, length)) return headerlist -# }}} -def decodeExtendedHeaderList(tlv_data): # {{{ + +def decodeExtendedHeaderList(tlv_data): # TODO return [] -# }}} -def encodebertlvDatalist(tag, datalist): # {{{ + +def encodebertlvDatalist(tag, datalist): tlvlist = [] for data in datalist: tlvlist.append((tag, len(data), data)) return bertlv_pack(tlvlist) -# }}} -def encodeDiscretionaryDataObjects(datalist): # {{{ + +def encodeDiscretionaryDataObjects(datalist): return encodebertlvDatalist(TAG["DISCRETIONARY_DATA"], datalist) -# }}} -def encodeDataOffsetObjects(datalist): # {{{ + +def encodeDataOffsetObjects(datalist): return encodebertlvDatalist(TAG["OFFSET_DATA"], datalist) -# }}} + diff --git a/virtualsmartcard/src/vpicc/virtualsmartcard/VirtualSmartcard.py b/virtualsmartcard/src/vpicc/virtualsmartcard/VirtualSmartcard.py index 83cd5ff..90effc2 100644 --- a/virtualsmartcard/src/vpicc/virtualsmartcard/VirtualSmartcard.py +++ b/virtualsmartcard/src/vpicc/virtualsmartcard/VirtualSmartcard.py @@ -26,7 +26,7 @@ from virtualsmartcard.CardGenerator import CardGenerator import socket, struct, sys, signal, atexit, smartcard, logging -class SmartcardOS(object): # {{{ +class SmartcardOS(object): """Base class for a smart card OS""" mf = make_property("mf", "master file") @@ -54,9 +54,9 @@ class SmartcardOS(object): # {{{ msg -- the APDU as string of characters """ return "" -# }}} -class Iso7816OS(SmartcardOS): # {{{ + +class Iso7816OS(SmartcardOS): def __init__(self, mf, sam, ins2handler=None, extended_length=False): self.mf = mf self.SAM = sam @@ -120,7 +120,7 @@ class Iso7816OS(SmartcardOS): # {{{ return self.atr @staticmethod - def makeATR(**args): # {{{ + def makeATR(**args): """Calculate Answer to Reset (ATR) and returns the bitstring. - directConvention (bool): Whether to use direct convention or @@ -203,10 +203,10 @@ class Iso7816OS(SmartcardOS): # {{{ atr += "%c" % TCK return atr - # }}} + @staticmethod def makeThirdSoftwareFunctionTable(commandChainging=False, - extendedLe=False, assignLogicalChannel=0, maximumChannels=0): # {{{ + extendedLe=False, assignLogicalChannel=0, maximumChannels=0): """ Returns a byte according to the third software function table from the historical bytes of the card capabilities. @@ -225,7 +225,7 @@ class Iso7816OS(SmartcardOS): # {{{ raise ValueError tsft |= maximumChannels return inttostring(tsft) -# }}} + def formatResult(self, le, data, sw, sm): self.lastCommandOffcut = data[le:] @@ -329,9 +329,9 @@ class Iso7816OS(SmartcardOS): # {{{ answer = self.formatResult(0, result, sw, False) return answer -# }}} + -class CryptoflexOS(Iso7816OS): # {{{ +class CryptoflexOS(Iso7816OS): def __init__(self, mf, sam, ins2handler=None, maxle=MAX_SHORT_LE): Iso7816OS.__init__(self, mf, sam, ins2handler, maxle) self.atr = '\x3B\xE2\x00\x00\x40\x20\x49\x06' @@ -376,9 +376,9 @@ class CryptoflexOS(Iso7816OS): # {{{ r = Iso7816OS.formatResult(self, le, data, sw, False) return r -# }}} -class RelayOS(SmartcardOS): # {{{ + +class RelayOS(SmartcardOS): """ This class implements relaying of a (physical) smartcard. The RelayOS forwards the command APDUs received from the vpcd to the real smartcard via @@ -471,13 +471,13 @@ class RelayOS(SmartcardOS): # {{{ rapdu = rapdu + [sw1, sw2] return "".join([chr(b) for b in rapdu]) -# }}} + # sizeof(int) taken from asizof-package {{{ _Csizeof_short = len(struct.pack('h', 0)) -# }}} + VPCD_CTRL_LEN = 1 @@ -486,7 +486,7 @@ VPCD_CTRL_ON = 1 VPCD_CTRL_RESET = 2 VPCD_CTRL_ATR = 4 -class VirtualICC(object): # {{{ +class VirtualICC(object): """ This class is responsible for maintaining the communication of the virtual PCD and the emulated smartcard. vpicc and vpcd communicate via a socket. @@ -627,4 +627,4 @@ class VirtualICC(object): # {{{ if self.filename != None: self.cardGenerator.setCard(self.os.mf, self.os.SAM) self.cardGenerator.saveCard(self.filename) -# }}} + diff --git a/virtualsmartcard/src/vpicc/virtualsmartcard/utils.py b/virtualsmartcard/src/vpicc/virtualsmartcard/utils.py index 020974f..4a42156 100644 --- a/virtualsmartcard/src/vpicc/virtualsmartcard/utils.py +++ b/virtualsmartcard/src/vpicc/virtualsmartcard/utils.py @@ -19,7 +19,7 @@ import string, binascii from ConstantDefinitions import MAX_SHORT_LE, MAX_EXTENDED_LE -def stringtoint(str): # {{{ +def stringtoint(str): #i = len(str) - 1 #int = 0 #while i >= 0: @@ -29,9 +29,9 @@ def stringtoint(str): # {{{ if str: return int(str.encode('hex'), 16) return 0 -# }}} -def inttostring(i, length=None): # {{{ + +def inttostring(i, length=None): #str = "" #while i > 0: #str = chr(i & 0xff) + str @@ -50,7 +50,7 @@ def inttostring(i, length=None): # {{{ str = chr(0)*(length-l) + str return str -# }}} + _myprintable = " " + string.letters + string.digits + string.punctuation def hexdump(data, indent = 0, short = False, linelen = 16, offset = 0):