From a31e9a9a68bca3f9b70fc046aec6751cbb0d9335 Mon Sep 17 00:00:00 2001 From: Philipp Maier Date: Thu, 11 Mar 2021 13:46:32 +0100 Subject: [PATCH] commands: better exception string for authentication failures At the moment we use the send_apdu_checksw() method to send the APDU for ADM authentication. This method only checks if the command returns with sw = 9000. If not it raises an exception that the sw is not as expected. The user may think that this is a problem with thr reader, pcscd or pySim in the first place and may try multiple times until the card is permanently locked. A better execption string that also displays the tries which are left may be helpful. Change-Id: Icf428831094f8c1045eefaa8cb2b92e6a36b0c13 Related: OS#4963 --- pySim/commands.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pySim/commands.py b/pySim/commands.py index 2fb10411..9aed5882 100644 --- a/pySim/commands.py +++ b/pySim/commands.py @@ -205,4 +205,7 @@ class SimCardCommands(object): def verify_chv(self, chv_no, code): fc = rpad(b2h(code), 16) - return self._tp.send_apdu_checksw(self.cla_byte + '2000' + ('%02X' % chv_no) + '08' + fc) + data, sw = self._tp.send_apdu(self.cla_byte + '2000' + ('%02X' % chv_no) + '08' + fc) + if (sw != '9000'): + raise RuntimeError('Failed to authenticate with ADM key %s, %i tries left.' % (code, int(sw[3]))) + return (data,sw)