git-svn-id: https://vsmartcard.svn.sourceforge.net/svnroot/vsmartcard@103 96b47cad-a561-4643-ad3b-153ac7d7599c
134 lines
7.4 KiB
Python
134 lines
7.4 KiB
Python
#
|
|
# Copyright (C) 2009 Frank Morgner
|
|
#
|
|
# This file is part of virtualsmartcard.
|
|
#
|
|
# virtualsmartcard is free software: you can redistribute it and/or modify it
|
|
# under the terms of the GNU General Public License as published by the Free
|
|
# Software Foundation, either version 3 of the License, or (at your option) any
|
|
# later version.
|
|
#
|
|
# virtualsmartcard is distributed in the hope that it will be useful, but
|
|
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
# more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License along with
|
|
# virtualsmartcard. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
# Meaning of the interindustry values of SW1-SW2 {{{
|
|
SW = {
|
|
"NORMAL" : 0x9000,
|
|
"NORMAL_REST" : 0x6100,
|
|
"WARN_NOINFO62" : 0x6200,
|
|
"WARN_DATACORRUPTED" : 0x6281,
|
|
"WARN_EOFBEFORENEREAD" : 0x6282,
|
|
"WARN_DEACTIVATED" : 0x6283,
|
|
"WARN_FCIFORMATTING" : 0x6284,
|
|
"WARN_TERMINATIONSTATE" : 0x6285,
|
|
"WARN_NOINPUTSENSOR" : 0x6286,
|
|
"WARN_NOINFO63" : 0x6300,
|
|
"WARN_FILEFILLED" : 0x6381,
|
|
"ERR_EXECUTION" : 0x6400,
|
|
"ERR_RESPONSEREQUIRED" : 0x6401,
|
|
"ERR_NOINFO65" : 0x6500,
|
|
"ERR_MEMFAILURE" : 0x6581,
|
|
"ERR_WRONGLENGTH" : 0x6700,
|
|
"ERR_NOINFO68" : 0x6800,
|
|
"ERR_CHANNELNOTSUPPORTED" : 0x6881,
|
|
"ERR_SECMESSNOTSUPPORTED" : 0x6882,
|
|
"ERR_LASTCMDEXPECTED" : 0x6883,
|
|
"ERR_CHAININGNOTSUPPORTED" : 0x6884,
|
|
"ERR_NOINFO69" : 0x6900,
|
|
"ERR_INCOMPATIBLEWITHFILE" : 0x6981,
|
|
"ERR_SECSTATUS" : 0x6982,
|
|
"ERR_AUTHBLOCKED" : 0x6983,
|
|
"ERR_REFNOTUSABLE" : 0x6984,
|
|
"ERR_CONDITIONNOTSATISFIED" : 0x6985,
|
|
"ERR_NOCURRENTEF" : 0x6986,
|
|
"ERR_SECMESSOBJECTSMISSING" : 0x6987,
|
|
"ERR_SECMESSOBJECTSINCORRECT" : 0x6988,
|
|
"ERR_NOINFO6A" : 0x6A00,
|
|
"ERR_INCORRECTPARAMETERS" : 0x6A80,
|
|
"ERR_NOTSUPPORTED" : 0x6A81,
|
|
"ERR_FILENOTFOUND" : 0x6A82,
|
|
"ERR_RECORDNOTFOUND" : 0x6A83,
|
|
"ERR_NOTENOUGHMEMORY" : 0x6A84,
|
|
"ERR_NCINCONSISTENTWITHTLV" : 0x6A85,
|
|
"ERR_INCORRECTP1P2" : 0x6A86,
|
|
"ERR_NCINCONSISTENTP1P2" : 0x6A87,
|
|
"ERR_DATANOTFOUND" : 0x6A88,
|
|
"ERR_FILEEXISTS" : 0x6A89,
|
|
"ERR_DFNAMEEXISTS" : 0x6A8A,
|
|
"ERR_OFFSETOUTOFFILE" : 0x6B00,
|
|
"ERR_INSNOTSUPPORTED" : 0x6D00,
|
|
}
|
|
|
|
SW_MESSAGES = {
|
|
0x9000 : 'Normal processing (No further qualification)',
|
|
|
|
0x6200 : 'Warning processing (State of non-volatile memory is unchanged): No information given',
|
|
0x6281 : 'Warning processing (State of non-volatile memory is unchanged): Part of returned data may be corrupted',
|
|
0x6282 : 'Warning processing (State of non-volatile memory is unchanged): End of file or record reached before reading Ne bytes',
|
|
0x6283 : 'Warning processing (State of non-volatile memory is unchanged): Selected file deactivated',
|
|
0x6284 : 'Warning processing (State of non-volatile memory is unchanged): File control information not formatted according to 5.3.3',
|
|
0x6285 : 'Warning processing (State of non-volatile memory is unchanged): Selected file in termination state',
|
|
0x6286 : 'Warning processing (State of non-volatile memory is unchanged): No input data available from a sensor on the card',
|
|
|
|
0x6300 : 'Warning processing (State of non-volatile memory has changed): No information given',
|
|
0x6381 : 'Warning processing (State of non-volatile memory has changed): File filled up by the last write',
|
|
|
|
0x6400 : 'Execution error (State of non-volatile memory is unchanged): Execution error',
|
|
0x6401 : 'Execution error (State of non-volatile memory is unchanged): Immediate response required by the card',
|
|
|
|
0x6500 : 'Execution error (State of non-volatile memory has changed): No information given',
|
|
0x6581 : 'Execution error (State of non-volatile memory has changed): Memory failure',
|
|
|
|
0x6700 : 'Checking error: Wrong length; no further indication',
|
|
|
|
0x6800 : 'Checking error (Functions in CLA not supported): No information given',
|
|
0x6881 : 'Checking error (Functions in CLA not supported): Logical channel not supported',
|
|
0x6882 : 'Checking error (Functions in CLA not supported): Secure messaging not supported',
|
|
0x6883 : 'Checking error (Functions in CLA not supported): Last command of the chain expected',
|
|
0x6884 : 'Checking error (Functions in CLA not supported): Command chaining not supported',
|
|
|
|
0x6900 : 'Checking error (Command not allowed): No information given',
|
|
0x6981 : 'Checking error (Command not allowed): Command incompatible with file structure',
|
|
0x6982 : 'Checking error (Command not allowed): Security status not satisfied',
|
|
0x6983 : 'Checking error (Command not allowed): Authentication method blocked',
|
|
0x6984 : 'Checking error (Command not allowed): Reference data not usable',
|
|
0x6985 : 'Checking error (Command not allowed): Conditions of use not satisfied',
|
|
0x6986 : 'Checking error (Command not allowed): Command not allowed (no current EF)',
|
|
0x6987 : 'Checking error (Command not allowed): Expected secure messaging data objects missing',
|
|
0x6988 : 'Checking error (Command not allowed): Incorrect secure messaging data objects',
|
|
|
|
0x6A00 : 'Checking error (Wrong parameters P1-P2): No information given',
|
|
0x6A80 : 'Checking error (Wrong parameters P1-P2): Incorrect parameters in the command data field',
|
|
0x6A81 : 'Checking error (Wrong parameters P1-P2): Function not supported',
|
|
0x6A82 : 'Checking error (Wrong parameters P1-P2): File or application not found',
|
|
0x6A83 : 'Checking error (Wrong parameters P1-P2): Record not found',
|
|
0x6A84 : 'Checking error (Wrong parameters P1-P2): Not enough memory space in the file',
|
|
0x6A85 : 'Checking error (Wrong parameters P1-P2): Nc inconsistent with TLV structure',
|
|
0x6A86 : 'Checking error (Wrong parameters P1-P2): Incorrect parameters P1-P2',
|
|
0x6A87 : 'Checking error (Wrong parameters P1-P2): Nc inconsistent with parameters P1-P2',
|
|
0x6A88 : 'Checking error (Wrong parameters P1-P2): Referenced data or reference data not found (exact meaning depending on the command)',
|
|
0x6A89 : 'Checking error (Wrong parameters P1-P2): File already exists',
|
|
0x6A8A : 'Checking error (Wrong parameters P1-P2): DF name already exists',
|
|
|
|
0x6B00 : 'Checking error (Wrong parameters P1-P2): Wrong parameters (offset outside the EF)',
|
|
0x6D00 : 'Checking error (Instruction code not supported or invalid)',
|
|
0x6E00 : 'Checking error (Class not supported)',
|
|
0x6F00 : 'Checking error (No precise diagnosis)',
|
|
}
|
|
for i in range(0, 0xff):
|
|
SW_MESSAGES[0x6100 + i] = 'Normal Processing (%d data bytes still available)' % i
|
|
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):
|
|
self.sw = sw
|
|
self.message = SW_MESSAGES[sw]
|