package de.persosim.simulator.platform; /** * @author slutters * */ public interface Iso7816 { /* * APDU byte offsets as defined in ISO7816-4 */ public static final byte OFFSET_HEADER = (byte) 0; public static final byte OFFSET_CLA = (byte) 0; public static final byte OFFSET_INS = (byte) 1; public static final byte OFFSET_P1 = (byte) 2; public static final byte OFFSET_P2 = (byte) 3; public static final byte OFFSET_LC = (byte) 4; public static final byte OFFSET_LE_ISO_CASE_2 = (byte) 4; public static final byte OFFSET_CDATA_SHORT_LC = (byte) 5; public static final byte OFFSET_CDATA_EXTENDED_LC = (byte) 7; public static final byte APDU_MINIMUM_LENGTH_ISO_CASE1 = 4; public static final byte APDU_MAXIMUM_LENGTH_ISO_CASE1 = 4; public static final byte APDU_MINIMUM_LENGTH_ISO_CASE2 = 5; public static final byte APDU_MAXIMUM_LENGTH_ISO_CASE2 = 7; public static final byte APDU_MINIMUM_LENGTH_ISO_CASE3 = 6; public static final byte APDU_MINIMUM_LENGTH_EXTENDED_ISO_CASE3 = 8; public static final byte APDU_MINIMUM_LENGTH_ISO_CASE4 = 7; public static final byte ISO_FORMAT_INVALID = -2; public static final byte ISO_FORMAT_PROPRIETARY = -1; // public static final byte ISO_FORMAT_INTERINDUSTRY = 1; public static final byte ISO_FORMAT_FIRSTINTERINDUSTRY = 1; public static final byte ISO_FORMAT_FURTHERINTERINDUSTRY = 2; public static final byte ISO_FORMAT_INTERINDUSTRY_RESERVED = 3; public static final byte ISO_CASE_1 = 1; public static final byte ISO_CASE_2 = 2; public static final byte ISO_CASE_3 = 3; public static final byte ISO_CASE_4 = 4; public static final boolean CHAINING_ON = true; public static final boolean CHAINING_OFF = false; /* * APDU CLA byte information */ // public static final byte SM_UNDETERMINED = (byte) 0xFF; // public static final byte SM_NOT_APPLICABLE = (byte) 0xFE; public static final byte SM_OFF_OR_NO_INDICATION = (byte) 0x00; public static final byte SM_PROPRIETARY = (byte) 0x01; public static final byte SM_COMMAND_HEADER_NOT_PROCESSED = (byte) 0x02; public static final byte SM_COMMAND_HEADER_AUTHENTICATED = (byte) 0x03; public static final String SM_OFF_OR_NO_INDICATION_STRING = "No SM or no indication"; public static final String SM_PROPRIETARY_STRING = "Proprietary SM format"; public static final String SM_COMMAND_HEADER_NOT_PROCESSED_STRING = "SM, command header not processed"; public static final String SM_COMMAND_HEADER_AUTHENTICATED_STRING = "SM, command header authenticated"; // public static final byte CH_UNDETERMINED = (byte) 0xFF; // public static final byte CH_NOT_APPLICABLE = (byte) 0xFE; public static final byte CH_DEFAULT = (byte) 0x00; /* * INS instruction bytes in byte order as defined in ISO7816-4 */ public static final byte INS_04_DEACTIVATE_FILE = (byte) 0x04; public static final byte INS_0C_ERASE_RECORD = (byte) 0x0C; public static final byte INS_0E_ERASE_BINARY = (byte) 0x0E; public static final byte INS_0F_ERASE_BINARY = (byte) 0x0F; /*--------------------------------------------------------------------------------*/ public static final byte INS_10_PERFORM_SCQL_OPERATION = (byte) 0x10; public static final byte INS_12_PERFORM_TRANSACTION_OPERATION = (byte) 0x12; public static final byte INS_14_PERFORM_USER_OPERATION = (byte) 0x14; /*--------------------------------------------------------------------------------*/ public static final byte INS_20_VERIFY = (byte) 0x20; public static final byte INS_21_VERIFY = (byte) 0x21; public static final byte INS_22_MANAGE_SECURITY_ENVIRONMENT = (byte) 0x22; public static final byte INS_24_CHANGE_REFERENCE_DATA = (byte) 0x24; public static final byte INS_26_DISABLE_VERIFICATION_REQUIREMENT = (byte) 0x26; public static final byte INS_28_ENABLE_VERIFICATION_REQUIREMENT = (byte) 0x28; public static final byte INS_2A_PERFORM_SECURITY_OPERATION = (byte) 0x2A; public static final byte INS_2C_RESET_RETRY_COUNTER = (byte) 0x2C; /*--------------------------------------------------------------------------------*/ public static final byte INS_44_ACTIVATE_FILE = (byte) 0x44; public static final byte INS_46_GENERATE_ASYMMETRIC_KEY_PAIR = (byte) 0x46; /*--------------------------------------------------------------------------------*/ public static final byte INS_70_MANAGE_CHANNEL = (byte) 0x70; /*--------------------------------------------------------------------------------*/ public static final byte INS_82_EXTERNAL_AUTHENTICATE = (byte) 0x82; public static final byte INS_82_MUTUAL_AUTHENTICATE = (byte) 0x82; public static final byte INS_84_GET_CHALLENGE = (byte) 0x84; public static final byte INS_86_GENERAL_AUTHENTICATE = (byte) 0x86; public static final byte INS_87_GENERAL_AUTHENTICATE = (byte) 0x87; public static final byte INS_88_INTERNAL_AUTHENTICATE = (byte) 0x88; /*--------------------------------------------------------------------------------*/ public static final byte INS_A0_SEARCH_BINARY = (byte) 0xA0; public static final byte INS_A1_SEARCH_BINARY = (byte) 0xA1; public static final byte INS_A2_SEARCH_RECORD = (byte) 0xA2; public static final byte INS_A4_SELECT = (byte) 0xA4; /*--------------------------------------------------------------------------------*/ public static final byte INS_B0_READ_BINARY = (byte) 0xB0; public static final byte INS_B1_READ_BINARY = (byte) 0xB1; public static final byte INS_B2_READ_RECORD = (byte) 0xB2; public static final byte INS_B3_READ_RECORD = (byte) 0xB3; /*--------------------------------------------------------------------------------*/ public static final byte INS_C0_GET_RESPONSE = (byte) 0xC0; public static final byte INS_C2_ENVELOPE = (byte) 0xC2; public static final byte INS_C3_ENVELOPE = (byte) 0xC3; public static final byte INS_CA_GET_DATA = (byte) 0xCA; public static final byte INS_CB_GET_DATA = (byte) 0xCB; /*--------------------------------------------------------------------------------*/ public static final byte INS_D0_WRITE_BINARY = (byte) 0xD0; public static final byte INS_D1_WRITE_BINARY = (byte) 0xD1; public static final byte INS_D2_WRITE_RECORD = (byte) 0xD2; public static final byte INS_D6_UPDATE_BINARY = (byte) 0xD6; public static final byte INS_D7_UPDATE_BINARY = (byte) 0xD7; public static final byte INS_DA_PUT_DATA = (byte) 0xDA; public static final byte INS_DB_PUT_DATA = (byte) 0xDB; public static final byte INS_DC_UPDATE_RECORD = (byte) 0xDC; public static final byte INS_DD_UPDATE_RECORD = (byte) 0xDD; /*--------------------------------------------------------------------------------*/ public static final byte INS_E0_CREATE_FILE = (byte) 0xE0; public static final byte INS_E2_APPEND_RECORD = (byte) 0xE2; public static final byte INS_E4_DELETE_FILE = (byte) 0xE4; public static final byte INS_E6_TERMINATE_DF = (byte) 0xE6; public static final byte INS_E8_TERMINATE_EF = (byte) 0xE8; /*--------------------------------------------------------------------------------*/ public static final byte INS_FE_TERMINATE_CARD_USAGE = (byte) 0xFE; public static final byte INS_FF_INVALID = (byte) 0xFF; /* * Set of _all_ INS byte values defined in ISO7816-4 and represented by the table above. */ public static final byte[] INSTRUCTIONSET = {INS_04_DEACTIVATE_FILE, INS_0C_ERASE_RECORD, INS_0E_ERASE_BINARY, INS_0F_ERASE_BINARY, INS_10_PERFORM_SCQL_OPERATION, INS_12_PERFORM_TRANSACTION_OPERATION, INS_14_PERFORM_USER_OPERATION, INS_20_VERIFY, INS_21_VERIFY, INS_22_MANAGE_SECURITY_ENVIRONMENT, INS_24_CHANGE_REFERENCE_DATA, INS_26_DISABLE_VERIFICATION_REQUIREMENT, INS_28_ENABLE_VERIFICATION_REQUIREMENT, INS_2A_PERFORM_SECURITY_OPERATION, INS_2C_RESET_RETRY_COUNTER, INS_44_ACTIVATE_FILE, INS_46_GENERATE_ASYMMETRIC_KEY_PAIR, INS_70_MANAGE_CHANNEL, INS_82_EXTERNAL_AUTHENTICATE, INS_84_GET_CHALLENGE, INS_86_GENERAL_AUTHENTICATE, INS_87_GENERAL_AUTHENTICATE, INS_88_INTERNAL_AUTHENTICATE, INS_A0_SEARCH_BINARY, INS_A1_SEARCH_BINARY, INS_A2_SEARCH_RECORD, INS_A4_SELECT, INS_B0_READ_BINARY, INS_B1_READ_BINARY, INS_B2_READ_RECORD, INS_B3_READ_RECORD, INS_C0_GET_RESPONSE, INS_C2_ENVELOPE, INS_C3_ENVELOPE, INS_CA_GET_DATA, INS_CB_GET_DATA, INS_D0_WRITE_BINARY, INS_D1_WRITE_BINARY, INS_D2_WRITE_RECORD, INS_D6_UPDATE_BINARY, INS_D7_UPDATE_BINARY, INS_DA_PUT_DATA, INS_DB_PUT_DATA, INS_DC_UPDATE_RECORD, INS_DD_UPDATE_RECORD, INS_E0_CREATE_FILE, INS_E2_APPEND_RECORD, INS_E4_DELETE_FILE, INS_E6_TERMINATE_DF, INS_E8_TERMINATE_EF, INS_FE_TERMINATE_CARD_USAGE, INS_FF_INVALID}; /* * P1 according to ISO7816-4 */ public static final byte P1_SELECT_FILE_MF_DF_EF = (byte) 0x00; public static final byte P1_SELECT_FILE_CHILD_DF = (byte) 0x01; public static final byte P1_SELECT_FILE_EF_UNDER_CURRENT_DF = (byte) 0x02; public static final byte P1_SELECT_FILE_PARENT_DF = (byte) 0x03; public static final byte P1_SELECT_FILE_DF_BY_NAME = (byte) 0x04; public static final byte P1_SELECT_FILE_BY_PATH_FROM_MF = (byte) 0x08; public static final byte P1_SELECT_FILE_BY_PATH_FROM_DF = (byte) 0x09; // P1 for {@link #INS_2C_RESET_RETRY_COUNTER} public static final byte P1_RESET_RETRY_COUNTER_NEW_DATA = (byte) 0x02; public static final byte P1_RESET_RETRY_COUNTER_ABSENT_DATA = (byte) 0x03; /* * P2 according to ISO7816-4 */ public static final byte P2_SELECT_OCCURRENCE_MASK = 0b00000011; public static final byte P2_SELECT_OCCURRENCE_FIRST = (byte) 0b0000; public static final byte P2_SELECT_OCCURRENCE_LAST = (byte) 0b0001; public static final byte P2_SELECT_OCCURRENCE_NEXT = (byte) 0b0010; public static final byte P2_SELECT_OCCURRENCE_PREVIOUS = (byte) 0b0011; public static final byte P2_SELECT_FCI_MASK = 0b00001100; public static final byte P2_SELECT_FCI_TEMPLATE = (byte) 0b0000; public static final byte P2_SELECT_FCP_TEMPLATE = (byte) 0b0100; public static final byte P2_SELECT_FMD_TEMPLATE = (byte) 0b1000; public static final byte P2_SELECT_NO_OR_PROPRIETARY = (byte) 0b1100; /* * SW1-SW2 according to ISO7816-4 */ /* Normal processing */ public static final short SW_9000_NO_ERROR = (short) 0x9000; /*--------------------------------------------------------------------------------*/ public static final short SW_6100_BYTES_REMAINING = (short) 0x6100; /*--------------------------------------------------------------------------------*/ /* Warning processing */ public static final short SW_6200_WARNING_STATE_UNCHANGED = (short) 0x6200; public static final short SW_6282_END_OF_FILE_REACHED_BEFORE_READING_NE_BYTES = (short) 0x6282; public static final short SW_6283_SELECTED_FILE_DEACTIVATED = (short) 0x6283; public static final short SW_6285_SELECTED_FILE_TERMINATED = (short) 0x6285; /*--------------------------------------------------------------------------------*/ public static final short SW_6300_AUTHENTICATION_FAILED = (short) 0x6300; public static final short SW_63C0_COUNTER_IS_0 = (short) 0x63C0; public static final short SW_63C1_COUNTER_IS_1 = (short) 0x63C1; public static final short SW_63C2_COUNTER_IS_2 = (short) 0x63C2; public static final short SW_63C3_COUNTER_IS_3 = (short) 0x63C3; /*--------------------------------------------------------------------------------*/ /* Execution error */ public static final short SW_6400_EXECUTION_ERROR = (short) 0x6400; /*--------------------------------------------------------------------------------*/ /* Checking error */ public static final short SW_6700_WRONG_LENGTH = (short) 0x6700; /*--------------------------------------------------------------------------------*/ public static final short SW_6800_FUNCTION_IN_CLA_NOT_SUPPORTED = (short) 0x6800; public static final short SW_6881_LOGICAL_CHANNEL_NOT_SUPPORTED = (short) 0x6881; public static final short SW_6882_SECURE_MESSAGING_NOT_SUPPORTED = (short) 0x6882; public static final short SW_6883_LAST_COMMAND_EXPECTED = (short) 0x6883; public static final short SW_6884_COMMAND_CHAINING_NOT_SUPPORTED = (short) 0x6884; /*--------------------------------------------------------------------------------*/ public static final short SW_6900_COMMAND_NOT_ALLOWED = (short) 0x6900; public static final short SW_6982_SECURITY_STATUS_NOT_SATISFIED = (short) 0x6982; public static final short SW_6983_FILE_INVALID = (short) 0x6983; public static final short SW_6984_REFERENCE_DATA_NOT_USABLE = (short) 0x6984; public static final short SW_6985_CONDITIONS_OF_USE_NOT_SATISFIED = (short) 0x6985; public static final short SW_6986_COMMAND_NOT_ALLOWED_NO_EF = (short) 0x6986; public static final short SW_6987_EXPECTED_SM_DATA_OBJECTS_MISSING = (short) 0x6987; public static final short SW_6988_INCORRECT_SM_DATA_OBJECTS = (short) 0x6988; public static final short SW_6999_APPLET_SELECT_FAILED = (short) 0x6999; /*--------------------------------------------------------------------------------*/ public static final short SW_6A00_WRONG_PARAMETERS_P1P2 = (short) 0x6A00; public static final short SW_6A80_WRONG_DATA = (short) 0x6A80; public static final short SW_6A81_FUNC_NOT_SUPPORTED = (short) 0x6A81; public static final short SW_6A82_FILE_NOT_FOUND = (short) 0x6A82; public static final short SW_6A83_RECORD_NOT_FOUND = (short) 0x6A83; public static final short SW_6A84_FILE_FULL = (short) 0x6A84; public static final short SW_6A85_NC_INCONSISTENT_WITH_TLV_STRUCTURE = (short) 0x6A85; public static final short SW_6A86_INCORRECT_PARAMETERS_P1P2 = (short) 0x6A86; public static final short SW_6A88_REFERENCE_DATA_NOT_FOUND = (short) 0x6A88; /*--------------------------------------------------------------------------------*/ public static final short SW_6B00_WRONG_P1P2 = (short) 0x6B00; /*--------------------------------------------------------------------------------*/ public static final short SW_6C00_CORRECT_LENGTH = (short) 0x6C00; /*--------------------------------------------------------------------------------*/ public static final short SW_6D00_INS_NOT_SUPPORTED = (short) 0x6D00; /*--------------------------------------------------------------------------------*/ public static final short SW_6E00_CLA_NOT_SUPPORTED = (short) 0x6E00; /*--------------------------------------------------------------------------------*/ public static final short SW_6F00_UNKNOWN = (short) 0x6F00; public static final short SW_6FFF_IMPLEMENTATION_ERROR = (short) 0x6FFF; // proprietary public static final int MINIMUM_SHORT_FILE_IDENTIFIER = 1; public static final int MAXIMUM_SHORT_FILE_IDENTIFIER = 30; public static final byte TAG_FILE_CONTROL_INFORMATION_TEMPLATE = 0x6F; public static final byte TAG_FILE_CONTROL_PARAMETERS_TEMPLATE = 0x62; public static final byte TAG_FILE_MANAGEMENT_DATA_TEMPLATE = 0x64; }