perform multiple GET RESPONSE cycles if more data is available
So far we implemented only one round of "Send the APDU, get SW=61xx, call GET RESPONSE". This permitted us to receive only data up to 256 bytes. Let's extend that to doing multiple rounds, concatenating the result. This allows us to obtain arbitrary-length data from the card. See Annex C.1 of ETSI TS 102 221 for examples showing multiple 61xx iterations. Change-Id: Ib17da655aa0b0eb203c29dc92690c81bd1300778 Closes: OS#6287
This commit is contained in:
@@ -137,11 +137,12 @@ class LinkBase(abc.ABC):
|
||||
# xx is the number of response bytes available.
|
||||
# See also:
|
||||
if (sw is not None):
|
||||
if ((sw[0:2] == '9f') or (sw[0:2] == '61')):
|
||||
while ((sw[0:2] == '9f') or (sw[0:2] == '61')):
|
||||
# SW1=9F: 3GPP TS 51.011 9.4.1, Responses to commands which are correctly executed
|
||||
# SW1=61: ISO/IEC 7816-4, Table 5 — General meaning of the interindustry values of SW1-SW2
|
||||
pdu_gr = pdu[0:2] + 'c00000' + sw[2:4]
|
||||
data, sw = self.send_apdu_raw(pdu_gr)
|
||||
d, sw = self.send_apdu_raw(pdu_gr)
|
||||
data += d
|
||||
if sw[0:2] == '6c':
|
||||
# SW1=6C: ETSI TS 102 221 Table 7.1: Procedure byte coding
|
||||
pdu_gr = pdu[0:8] + sw[2:4]
|
||||
|
||||
Reference in New Issue
Block a user