| 1 | //----------------------------------------------------------------------------- |
| 2 | // Copyright (C) 2017 Merlok |
| 3 | // |
| 4 | // This code is licensed to you under the terms of the GNU GPL, version 2 or, |
| 5 | // at your option, any later version. See the LICENSE.txt file for the text of |
| 6 | // the license. |
| 7 | //----------------------------------------------------------------------------- |
| 8 | // APDU status bytes information |
| 9 | //----------------------------------------------------------------------------- |
| 10 | |
| 11 | #include "apduinfo.h" |
| 12 | |
| 13 | const APDUCode APDUCodeTable[] = { |
| 14 | // ID Type Description |
| 15 | {"XXXX", APDUCODE_TYPE_NONE, ""}, // blank string |
| 16 | {"6---", APDUCODE_TYPE_ERROR, "Class not supported."}, |
| 17 | {"61--", APDUCODE_TYPE_INFO, "Response bytes still available"}, |
| 18 | {"61XX", APDUCODE_TYPE_INFO, "Command successfully executed; 'XX' bytes of data are available and can be requested using GET RESPONSE."}, |
| 19 | {"62--", APDUCODE_TYPE_WARNING, "State of non-volatile memory unchanged"}, |
| 20 | {"6200", APDUCODE_TYPE_WARNING, "No information given (NV-Ram not changed)"}, |
| 21 | {"6201", APDUCODE_TYPE_WARNING, "NV-Ram not changed 1."}, |
| 22 | {"6281", APDUCODE_TYPE_WARNING, "Part of returned data may be corrupted"}, |
| 23 | {"6282", APDUCODE_TYPE_WARNING, "End of file/record reached before reading Le bytes"}, |
| 24 | {"6283", APDUCODE_TYPE_WARNING, "Selected file invalidated"}, |
| 25 | {"6284", APDUCODE_TYPE_WARNING, "Selected file is not valid. FCI not formated according to ISO"}, |
| 26 | {"6285", APDUCODE_TYPE_WARNING, "No input data available from a sensor on the card. No Purse Engine enslaved for R3bc"}, |
| 27 | {"62A2", APDUCODE_TYPE_WARNING, "Wrong R-MAC"}, |
| 28 | {"62A4", APDUCODE_TYPE_WARNING, "Card locked (during reset( ))"}, |
| 29 | {"62CX", APDUCODE_TYPE_WARNING, "Counter with value x (command dependent)"}, |
| 30 | {"62F1", APDUCODE_TYPE_WARNING, "Wrong C-MAC"}, |
| 31 | {"62F3", APDUCODE_TYPE_WARNING, "Internal reset"}, |
| 32 | {"62F5", APDUCODE_TYPE_WARNING, "Default agent locked"}, |
| 33 | {"62F7", APDUCODE_TYPE_WARNING, "Cardholder locked"}, |
| 34 | {"62F8", APDUCODE_TYPE_WARNING, "Basement is current agent"}, |
| 35 | {"62F9", APDUCODE_TYPE_WARNING, "CALC Key Set not unblocked"}, |
| 36 | {"62FX", APDUCODE_TYPE_WARNING, "-"}, |
| 37 | {"62XX", APDUCODE_TYPE_WARNING, "RFU"}, |
| 38 | {"63--", APDUCODE_TYPE_WARNING, "State of non-volatile memory changed"}, |
| 39 | {"6300", APDUCODE_TYPE_WARNING, "No information given (NV-Ram changed)"}, |
| 40 | {"6381", APDUCODE_TYPE_WARNING, "File filled up by the last write. Loading/updating is not allowed."}, |
| 41 | {"6382", APDUCODE_TYPE_WARNING, "Card key not supported."}, |
| 42 | {"6383", APDUCODE_TYPE_WARNING, "Reader key not supported."}, |
| 43 | {"6384", APDUCODE_TYPE_WARNING, "Plaintext transmission not supported."}, |
| 44 | {"6385", APDUCODE_TYPE_WARNING, "Secured transmission not supported."}, |
| 45 | {"6386", APDUCODE_TYPE_WARNING, "Volatile memory is not available."}, |
| 46 | {"6387", APDUCODE_TYPE_WARNING, "Non-volatile memory is not available."}, |
| 47 | {"6388", APDUCODE_TYPE_WARNING, "Key number not valid."}, |
| 48 | {"6389", APDUCODE_TYPE_WARNING, "Key length is not correct."}, |
| 49 | {"63C0", APDUCODE_TYPE_WARNING, "Verify fail, no try left."}, |
| 50 | {"63C1", APDUCODE_TYPE_WARNING, "Verify fail, 1 try left."}, |
| 51 | {"63C2", APDUCODE_TYPE_WARNING, "Verify fail, 2 tries left."}, |
| 52 | {"63C3", APDUCODE_TYPE_WARNING, "Verify fail, 3 tries left."}, |
| 53 | {"63CX", APDUCODE_TYPE_WARNING, "The counter has reached the value 'x' (0 = x = 15) (command dependent)."}, |
| 54 | {"63F1", APDUCODE_TYPE_WARNING, "More data expected."}, |
| 55 | {"63F2", APDUCODE_TYPE_WARNING, "More data expected and proactive command pending."}, |
| 56 | {"63FX", APDUCODE_TYPE_WARNING, "-"}, |
| 57 | {"63XX", APDUCODE_TYPE_WARNING, "RFU"}, |
| 58 | {"64--", APDUCODE_TYPE_ERROR, "State of non-volatile memory unchanged"}, |
| 59 | {"6400", APDUCODE_TYPE_ERROR, "No information given (NV-Ram not changed)"}, |
| 60 | {"6401", APDUCODE_TYPE_ERROR, "Command timeout. Immediate response required by the card."}, |
| 61 | {"64XX", APDUCODE_TYPE_ERROR, "RFU"}, |
| 62 | {"65--", APDUCODE_TYPE_ERROR, "State of non-volatile memory changed"}, |
| 63 | {"6500", APDUCODE_TYPE_ERROR, "No information given"}, |
| 64 | {"6501", APDUCODE_TYPE_ERROR, "Write error. Memory failure. There have been problems in writing or reading the EEPROM. Other hardware problems may also bring this error."}, |
| 65 | {"6581", APDUCODE_TYPE_ERROR, "Memory failure"}, |
| 66 | {"65FX", APDUCODE_TYPE_ERROR, "-"}, |
| 67 | {"65XX", APDUCODE_TYPE_ERROR, "RFU"}, |
| 68 | {"66--", APDUCODE_TYPE_SECURITY, " "}, |
| 69 | {"6600", APDUCODE_TYPE_SECURITY, "Error while receiving (timeout)"}, |
| 70 | {"6601", APDUCODE_TYPE_SECURITY, "Error while receiving (character parity error)"}, |
| 71 | {"6602", APDUCODE_TYPE_SECURITY, "Wrong checksum"}, |
| 72 | {"6603", APDUCODE_TYPE_SECURITY, "The current DF file without FCI"}, |
| 73 | {"6604", APDUCODE_TYPE_SECURITY, "No SF or KF under the current DF"}, |
| 74 | {"6669", APDUCODE_TYPE_SECURITY, "Incorrect Encryption/Decryption Padding"}, |
| 75 | {"66XX", APDUCODE_TYPE_SECURITY, "-"}, |
| 76 | {"67--", APDUCODE_TYPE_ERROR, " "}, |
| 77 | {"6700", APDUCODE_TYPE_ERROR, "Wrong length"}, |
| 78 | {"67XX", APDUCODE_TYPE_ERROR, "length incorrect (procedure)(ISO 7816-3)"}, |
| 79 | {"68--", APDUCODE_TYPE_ERROR, "Functions in CLA not supported"}, |
| 80 | {"6800", APDUCODE_TYPE_ERROR, "No information given (The request function is not supported by the card)"}, |
| 81 | {"6881", APDUCODE_TYPE_ERROR, "Logical channel not supported"}, |
| 82 | {"6882", APDUCODE_TYPE_ERROR, "Secure messaging not supported"}, |
| 83 | {"6883", APDUCODE_TYPE_ERROR, "Last command of the chain expected"}, |
| 84 | {"6884", APDUCODE_TYPE_ERROR, "Command chaining not supported"}, |
| 85 | {"68FX", APDUCODE_TYPE_ERROR, "-"}, |
| 86 | {"68XX", APDUCODE_TYPE_ERROR, "RFU"}, |
| 87 | {"69--", APDUCODE_TYPE_ERROR, "Command not allowed"}, |
| 88 | {"6900", APDUCODE_TYPE_ERROR, "No information given (Command not allowed)"}, |
| 89 | {"6901", APDUCODE_TYPE_ERROR, "Command not accepted (inactive state)"}, |
| 90 | {"6981", APDUCODE_TYPE_ERROR, "Command incompatible with file structure"}, |
| 91 | {"6982", APDUCODE_TYPE_ERROR, "Security condition not satisfied."}, |
| 92 | {"6983", APDUCODE_TYPE_ERROR, "Authentication method blocked"}, |
| 93 | {"6984", APDUCODE_TYPE_ERROR, "Referenced data reversibly blocked (invalidated)"}, |
| 94 | {"6985", APDUCODE_TYPE_ERROR, "Conditions of use not satisfied."}, |
| 95 | {"6986", APDUCODE_TYPE_ERROR, "Command not allowed (no current EF)"}, |
| 96 | {"6987", APDUCODE_TYPE_ERROR, "Expected secure messaging (SM) object missing"}, |
| 97 | {"6988", APDUCODE_TYPE_ERROR, "Incorrect secure messaging (SM) data object"}, |
| 98 | {"698D", APDUCODE_TYPE_NONE, "Reserved"}, |
| 99 | {"6996", APDUCODE_TYPE_ERROR, "Data must be updated again"}, |
| 100 | {"69E1", APDUCODE_TYPE_ERROR, "POL1 of the currently Enabled Profile prevents this action."}, |
| 101 | {"69F0", APDUCODE_TYPE_ERROR, "Permission Denied"}, |
| 102 | {"69F1", APDUCODE_TYPE_ERROR, "Permission Denied - Missing Privilege"}, |
| 103 | {"69FX", APDUCODE_TYPE_ERROR, "-"}, |
| 104 | {"69XX", APDUCODE_TYPE_ERROR, "RFU"}, |
| 105 | {"6A--", APDUCODE_TYPE_ERROR, "Wrong parameter(s) P1-P2"}, |
| 106 | {"6A00", APDUCODE_TYPE_ERROR, "No information given (Bytes P1 and/or P2 are incorrect)"}, |
| 107 | {"6A80", APDUCODE_TYPE_ERROR, "The parameters in the data field are incorrect."}, |
| 108 | {"6A81", APDUCODE_TYPE_ERROR, "Function not supported"}, |
| 109 | {"6A82", APDUCODE_TYPE_ERROR, "File not found"}, |
| 110 | {"6A83", APDUCODE_TYPE_ERROR, "Record not found"}, |
| 111 | {"6A84", APDUCODE_TYPE_ERROR, "There is insufficient memory space in record or file"}, |
| 112 | {"6A85", APDUCODE_TYPE_ERROR, "Lc inconsistent with TLV structure"}, |
| 113 | {"6A86", APDUCODE_TYPE_ERROR, "Incorrect P1 or P2 parameter."}, |
| 114 | {"6A87", APDUCODE_TYPE_ERROR, "Lc inconsistent with P1-P2"}, |
| 115 | {"6A88", APDUCODE_TYPE_ERROR, "Referenced data not found"}, |
| 116 | {"6A89", APDUCODE_TYPE_ERROR, "File already exists"}, |
| 117 | {"6A8A", APDUCODE_TYPE_ERROR, "DF name already exists."}, |
| 118 | {"6AF0", APDUCODE_TYPE_ERROR, "Wrong parameter value"}, |
| 119 | {"6AFX", APDUCODE_TYPE_ERROR, "-"}, |
| 120 | {"6AXX", APDUCODE_TYPE_ERROR, "RFU"}, |
| 121 | {"6B--", APDUCODE_TYPE_ERROR, " "}, |
| 122 | {"6B00", APDUCODE_TYPE_ERROR, "Wrong parameter(s) P1-P2"}, |
| 123 | {"6BXX", APDUCODE_TYPE_ERROR, "Reference incorrect (procedure byte), (ISO 7816-3)"}, |
| 124 | {"6C--", APDUCODE_TYPE_ERROR, "Wrong length Le"}, |
| 125 | {"6C00", APDUCODE_TYPE_ERROR, "Incorrect P3 length."}, |
| 126 | {"6CXX", APDUCODE_TYPE_ERROR, "Bad length value in Le; 'xx' is the correct exact Le"}, |
| 127 | {"6D--", APDUCODE_TYPE_ERROR, " "}, |
| 128 | {"6D00", APDUCODE_TYPE_ERROR, "Instruction code not supported or invalid"}, |
| 129 | {"6DXX", APDUCODE_TYPE_ERROR, "Instruction code not programmed or invalid (procedure byte), (ISO 7816-3)"}, |
| 130 | {"6E--", APDUCODE_TYPE_ERROR, " "}, |
| 131 | {"6E00", APDUCODE_TYPE_ERROR, "Class not supported"}, |
| 132 | {"6EXX", APDUCODE_TYPE_ERROR, "Instruction class not supported (procedure byte), (ISO 7816-3)"}, |
| 133 | {"6F--", APDUCODE_TYPE_ERROR, "Internal exception"}, |
| 134 | {"6F00", APDUCODE_TYPE_ERROR, "Command aborted - more exact diagnosis not possible (e.g., operating system error)."}, |
| 135 |