introduce SwMatchError exception

This allows callers further up the stack to catch the exception and
interpret it in some way (like decoding the number of remaining tries
in case of authentication errors)

Change-Id: Ia59962978745aef7038f750fa23f8dfc820645f4
This commit is contained in:
Harald Welte 2021-01-21 14:10:43 +01:00
parent 79b5ba4bdf
commit e79cc8069a
2 changed files with 13 additions and 1 deletions

View File

@ -5,6 +5,7 @@
#
# Copyright (C) 2009-2010 Sylvain Munaut <tnt@246tNt.com>
# Copyright (C) 2021 Harald Welte <laforge@osmocom.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -36,3 +37,12 @@ class ProtocolError(Exception):
class ReaderError(Exception):
pass
class SwMatchError(Exception):
"""Raised when an operation specifies an expected SW but the actual SW from
the card doesn't match."""
def __init__(self, sw_actual, sw_expected):
self.sw_actual = sw_actual
self.sw_expected = sw_expected
def __str__(self):
return "SW match failed! Expected %s and got %s." % (self.sw_expected, self.sw_actual)

View File

@ -3,6 +3,8 @@
""" pySim: PCSC reader transport link base
"""
from pySim.exceptions import *
#
# Copyright (C) 2009-2010 Sylvain Munaut <tnt@246tNt.com>
#
@ -100,5 +102,5 @@ class LinkBase(object):
sw_masked = sw_masked + rv[1][i].lower()
if sw.lower() != sw_masked:
raise RuntimeError("SW match failed! Expected %s and got %s." % (sw.lower(), rv[1]))
raise SwMatchError(rv[1], sw.lower())
return rv