-Bugfix: The Le of the Command APDU was used when sending out an error R_APDU

-Enhancement: Using correct effective Le for R_APDUs


git-svn-id: https://vsmartcard.svn.sourceforge.net/svnroot/vsmartcard@435 96b47cad-a561-4643-ad3b-153ac7d7599c
This commit is contained in:
oepen
2011-07-26 09:46:49 +00:00
parent a98c1f84e7
commit 3447849133

View File

@@ -218,14 +218,7 @@ class Iso7816OS(SmartcardOS): # {{{
# }}}
def formatResult(self, le, data, sw, sm):
if le == None:
count = 0
elif le == 0:
count = self.maxle
else:
count = le
self.lastCommandOffcut = data[count:]
self.lastCommandOffcut = data[le:]
l = len(self.lastCommandOffcut)
if l == 0:
self.lastCommandSW = SW["NORMAL"]
@@ -233,7 +226,7 @@ class Iso7816OS(SmartcardOS): # {{{
self.lastCommandSW = sw
sw = SW["NORMAL_REST"] + min(0xff, l)
result = data[:count]
result = data[:le]
if sm:
sw, result = self.SAM.protect_result(sw,result)
@@ -307,15 +300,15 @@ class Iso7816OS(SmartcardOS): # {{{
raise SwError("ERR_SECMESSNOTSUPPORTED")
sw, result = self.ins2handler.get(c.ins, notImplemented)(c.p1, c.p2, c.data)
if SM_STATUS == "Standard SM":
answer = self.formatResult(c.le, result, sw, True)
answer = self.formatResult(c.effective_Le, result, sw, True)
else:
answer = self.formatResult(c.le, result, sw, False)
answer = self.formatResult(c.effective_Le, result, sw, False)
except SwError, e:
print e.message
#traceback.print_exception(*sys.exc_info())
sw = e.sw
result = ""
answer = self.formatResult(c.le, result, sw, False)
answer = self.formatResult(0, result, sw, False)
return answer
# }}}