/** * This file is part of CardApplet-MMPP which is card applet implementation * of M Remote-SE Mobile PayP for SimplyTapp cloud platform. * Copyright 2014 SimplyTapp, Inc. * * CardApplet-MMPP 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. * * CardApplet-MMPP 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 CardApplet-MMPP. If not, see <http://www.gnu.org/licenses/>. */ package com.st.mmpp; /** * Define constants. * * @author SimplyTapp, Inc. * @version 1.0 */ interface Constants { // CLA for supported commands. static final byte CLA_PROPRIETARY = (byte) 0x80; static final byte CLA_PROPRIETARY_SECURE = (byte) 0x84; // CLA/INS for supported commands. // GP Commands static final short CLA_INS_INITIALIZE_UPDATE = (short) 0x8050; static final short CLA_INS_SET_STATUS = (short) 0x80F0; static final short CLA_INS_STORE_DATA = (short) 0x80E2; static final short CLA_INS_EXTERNAL_AUTHENTICATE = (short) 0x8482; static final short CLA_INS_SET_STATUS_SECURED = (short) 0x84F0; static final short CLA_INS_STORE_DATA_SECURED = (short) 0x84E2; // Card Agent Commands static final short CLA_INS_GET_CARD_PROFILE = (short) 0x8080; static final short CLA_INS_GET_PTP_SUK = (short) 0x8082; static final short CLA_INS_GET_MOBILE_KEY = (short) 0x8084; static final short CLA_INS_INITIALIZE_MOBILE_PIN = (short) 0x80A0; // Issuer Command static final short CLA_INS_SEND_AGENT_NOTIFICATON = (short) 0x8090; // Response status words. static final short SW_WARNING_SELECTED_FILE_INVALIDATED = (short) 0x6283; // DGI values. static final short DGI_DES_KEYS = (short) 0x8000; static final short DGI_ICC_PRIV_KEY_CRT_CONSTANT_PQ = (short) 0x8201; // q-1 mod p static final short DGI_ICC_PRIV_KEY_CRT_CONSTANT_DQ1 = (short) 0x8202; // d mod (q-1) static final short DGI_ICC_PRIV_KEY_CRT_CONSTANT_DP1 = (short) 0x8203; // d mod (p-1) static final short DGI_ICC_PRIV_KEY_CRT_CONSTANT_Q = (short) 0x8204; // q static final short DGI_ICC_PRIV_KEY_CRT_CONSTANT_P = (short) 0x8205; // p static final short DGI_SELECT_RESPONSE_DATA = (short) 0x9102; static final short DGI_DATA = (short) 0xA002; static final short DGI_MAGSTRIPE_CVM_DATA = (short) 0xA003; static final short DGI_PUBLIC_KEY_MODULUS_LENGTH = (short) 0xA004; static final short DGI_ICC_DYNAMIC_NUMBER_MASTER_KEY = (short) 0xA006; static final short DGI_LIMITS = (short) 0xA007; static final short DGI_APPLICATION_LIFE_CYCLE_DATA = (short) 0xA009; static final short DGI_CARD_LAYOUT_DESCRIPTION_PART_1 = (short) 0xA026; static final short DGI_CARD_LAYOUT_DESCRIPTION_PART_2 = (short) 0xA027; static final short DGI_CARD_LAYOUT_DESCRIPTION_PART_3 = (short) 0xA028; static final short DGI_IVCVC3 = (short) 0xB003; static final short DGI_GPO_RESPONSE_DATA_PAYMENT = (short) 0xB005; static final short DGI_PIN_IVCVC3 = (short) 0xB007; // 1-byte tags. static final byte TAG_FCI_TEMPLATE = (byte) 0x6F; static final byte TAG_READ_RECORD_RESPONSE_MESSAGE_TEMPLATE = (byte) 0x70; static final byte TAG_RESPONSE_MESSAGE_TEMPLATE = (byte) 0x77; static final byte TAG_AIP_MANAGEMENT = (byte) 0x82; static final byte TAG_DF_NAME = (byte) 0x84; static final byte TAG_AFL_MANAGEMENT = (byte) 0x94; static final byte TAG_COUNTERS = (byte) 0xC6; static final byte TAG_CDOL1_RELATED_DATA_LENGTH = (byte) 0xC7; static final byte TAG_CRM_COUNTRY_CODE = (byte) 0xC8; static final byte TAG_ACCUMULATOR_1_CURRENCY_CODE = (byte) 0xC9; static final byte TAG_ACCUMULATOR_1_LOWER_LIMIT = (byte) 0xCA; static final byte TAG_ACCUMULATOR_1_UPPER_LIMIT = (byte) 0xCB; static final byte TAG_ACCUMULATOR_1_CURRENCY_CONVERSION_TABLE = (byte) 0xD1; static final byte TAG_ADDITIONAL_CHECK_TABLE = (byte) 0xD3; static final byte TAG_APPLICATION_CONTROL_MANAGEMENT = (byte) 0xD5; static final byte TAG_APPLICATION_CONTROL_PAYMENT = (byte) 0xD7; static final byte TAG_AIP_PAYMENT = (byte) 0xD8; static final byte TAG_AFL_PAYMENT = (byte) 0xD9; static final byte TAG_IVCVC3_TRACK1 = (byte) 0xDC; static final byte TAG_IVCVC3_TRACK2 = (byte) 0xDD; // 2-byte 0x9FXX tags. static final short TAG_ISSUER_APPLICATION_DATA = (short) 0x9F10; static final short TAG_COUNTER_1_LOWER_LIMIT = (short) 0x9F14; static final short TAG_PIN_TRY_COUNTER = (short) 0x9F17; static final short TAG_COUNTER_1_UPPER_LIMIT = (short) 0x9F23; static final short TAG_APPLICATION_CRYPTOGRAM = (short) 0x9F26; static final short TAG_CRYPTOGRAM_INFO_DATA = (short) 0x9F27; static final short TAG_APPLICATION_TRANSACTION_COUNTER = (short) 0x9F36; static final short TAG_SIGNED_DYNAMIC_APPLICATION_DATA = (short) 0x9F4B; static final short TAG_LOG_FORMAT = (short) 0x9F4F; static final short TAG_OFFLINE_ACCUMULATOR_BALANCE_1 = (short) 0x9F50; static final short TAG_OFFLINE_ACCUMULATOR_BALANCE_2 = (short) 0x9F58; static final short TAG_OFFLINE_COUNTER_BALANCE_2 = (short) 0x9F59; static final short TAG_CVC3_TRACK1 = (short) 0x9F60; static final short TAG_CVC3_TRACK2 = (short) 0x9F61; static final short TAG_OFFLINE_COUNTER_BALANCE_1 = (short) 0x9F7A; static final short TAG_APPLICATION_LIFE_CYCLE_DATA = (short) 0x9F7E; // 2-byte 0xDFXX tags. static final short TAG_SECURITY_LIMITS = (short) 0xDF01; static final short TAG_SECURITY_LIMITS_STATUS = (short) 0xDF02; static final short TAG_ACCUMULATOR_1_CONTROL_MANAGEMENT = (short) 0xDF11; static final short TAG_ACCUMULATOR_1_CONTROL_PAYMENT = (short) 0xDF12; static final short TAG_ACCUMULATOR_2_AMOUNT = (short) 0xDF13; static final short TAG_ACCUMULATOR_2_CONTROL_MANAGEMENT = (short) 0xDF14; static final short TAG_ACCUMULATOR_2_CONTROL_PAYMENT = (short) 0xDF15; static final short TAG_ACCUMULATOR_2_CURRENCY_CODE = (short) 0xDF16; static final short TAG_ACCUMULATOR_2_CURRENCY_CONVERSION_TABLE = (short) 0xDF17; static final short TAG_ACCUMULATOR_2_LOWER_LIMIT = (short) 0xDF18; static final short TAG_ACCUMULATOR_2_UPPER_LIMIT = (short) 0xDF19; static final short TAG_COUNTER_1_CONTROL_MANAGEMENT = (short) 0xDF1A; static final short TAG_COUNTER_1_CONTROL_PAYMENT = (short) 0xDF1B; static final short TAG_COUNTER_1_NUMBER = (short) 0xDF1C; static final short TAG_COUNTER_2_CONTROL_MANAGEMENT = (short) 0xDF1D; static final short TAG_COUNTER_2_CONTROL_PAYMENT = (short) 0xDF1E; static final short TAG_COUNTER_2_LOWER_LIMIT = (short) 0xDF1F; static final short TAG_COUNTER_2_NUMBER = (short) 0xDF20; static final short TAG_COUNTER_2_UPPER_LIMIT = (short) 0xDF21; static final short TAG_ACCUMULATOR_1_AMOUNT = (short) 0xDF3B; static final short TAG_PIN_IVCVC3_TRACK1 = (short) 0xDF43; static final short TAG_PIN_IVCVC3_TRACK2 = (short) 0xDF44; static final short TAG_CIAC_DECLINE_ON_ONLINE_CAPABLE_PAYMENT = (short) 0xDF45; static final short TAG_CIAC_GO_ONLINE_PAYMENT = (short) 0xDF46; static final short TAG_CARD_LAYOUT_DESCRIPTION = (short) 0xDF47; static final short TAG_MCHIP_CVM_CARDHOLDER_OPTIONS = (short) 0xDF48; static final short TAG_DATA_ENVELOPE = (short) 0xDF49; static final short TAG_DUAL_TAP_RESET_TIMEOUT = (short) 0xDF4A; static final short TAG_POS_CARDHOLDER_INTERACTION_INFO = (short) 0xDF4B; static final short TAG_PWD = (short) 0xDF4C; static final short TAG_CVM_RESET_TIMEOUT = (short) 0xDF4D; static final short TAG_PPMS_TRANSACTION_DETAILS = (short) 0xDF4E; static final short TAG_CIAC_DECLINE_ON_PPMS = (short) 0xDF4F; static final short TAG_SECURITY_WORD = (short) 0xDF50; static final short TAG_MOBILE_CARDHOLDER_INTERACTION_INFO = (short) 0xDF51; static final short TAG_TRANSACTION_CONTEXT = (short) 0xDF52; static final short TAG_SWITCH_MODE_INFO = (short) 0xDF53; static final short TAG_ACK_RESET_TIMEOUT = (short) 0xDF55; static final short TAG_MCHIP_CVM_ISSUER_OPTIONS = (short) 0xDF56; static final short TAG_WCOTA = (short) 0xDF57; static final short TAG_WCOTN = (short) 0xDF58; static final short TAG_CIAC_DECLINE_ON_ARQC_MANAGEMENT = (short) 0xDF59; static final short TAG_CIAC_DECLINE_ON_OFFLINE_ONLY_MANAGEMENT = (short) 0xDF5A; static final short TAG_CIAC_DECLINE_ON_ONLINE_CAPABLE_MANAGEMENT = (short) 0xDF5B; static final short TAG_CIAC_GO_ONLINE_MANAGEMENT = (short) 0xDF5C; static final short TAG_CIAC_DECLINE_ON_ARQC_PAYMENT = (short) 0xDF5D; static final short TAG_CIAC_DECLINE_ON_OFFLINE_ONLY_PAYMENT = (short) 0xDF5E; static final short TAG_OFFLINE_CHANGE_PIN_REQUIRED = (short) 0xDF5F; static final short TAG_MAGSTRIPE_CVM_CARDHOLDER_OPTIONS = (short) 0xDF60; static final short TAG_MAGSTRIPE_CVM_ISSUER_OPTIONS = (short) 0xDF61; // Application is being personalized. static final byte APP_STATE_PERSO = (byte) 0xFF; // Application is not currently selected. static final byte APP_STATE_IDLE = (byte) 0x00; // Application states after personalization: // Application is selected. static final byte APP_STATE_SELECTED = (byte) 0x01; // Transaction is initiated. static final byte APP_STATE_INITIATED = (byte) 0x02; // Application expects a connection with the issuer. static final byte APP_STATE_ONLINE = (byte) 0x03; // Application is ready to accept a script command. static final byte APP_STATE_SCRIPT = (byte) 0x04; // Modes of operation. static final byte MODE_MANAGEMENT = (byte) 0x55; static final byte MODE_PAYMENT = (byte) 0xCC; // Rejected, Conditions Not Satisfied identifiers. static final byte RCNS1 = (byte) 0x01; static final byte RCNS2 = (byte) 0x02; // Accumulator/Counter identifiers. static final byte ID1 = (byte) 0x01; static final byte ID2 = (byte) 0x02; static final byte MAX_SFI_RECORDS = (byte) 16; static final byte SFI_TRANSACTION_LOG_FILE = (byte) 0x0B; /*** Start of data-specific definitions. ***/ // Previous Transaction History bit definitions. static final byte PREVIOUS_TRANSACTION_HISTORY_BIT_APP_DISABLED = (byte) 0x20; static final byte PREVIOUS_TRANSACTION_HISTORY_BIT_APP_BLOCKED = (byte) 0x10; static final byte PREVIOUS_TRANSACTION_HISTORY_BIT_GO_ONLINE_NEXT_TRANSACTION = (byte) 0x08; static final byte PREVIOUS_TRANSACTION_HISTORY_BIT_ISSUER_AUTH_FAILED = (byte) 0x04; static final byte PREVIOUS_TRANSACTION_HISTORY_BIT_SCRIPT_RECEIVED = (byte) 0x02; static final byte PREVIOUS_TRANSACTION_HISTORY_BIT_SCRIPT_FAILED = (byte) 0x01; /*** End of data-specific definitions. ***/ /*** Start of data location definitions. ***/ // 'persistentByteBuffer' constants. // PBB (persistent byte buffer) static final byte PBB_OFFSET_CTR_AC = (byte) 0; static final byte PBB_OFFSET_ACCUMULATOR_1_AMOUNT = (byte) (PBB_OFFSET_CTR_AC + 2); // 2 static final byte PBB_OFFSET_ACCUMULATOR_2_AMOUNT = (byte) (PBB_OFFSET_ACCUMULATOR_1_AMOUNT + 6); // 8 static final byte PBB_OFFSET_COUNTER_1_NUMBER = (byte) (PBB_OFFSET_ACCUMULATOR_2_AMOUNT + 6); // 14 static final byte PBB_OFFSET_COUNTER_2_NUMBER = (byte) (PBB_OFFSET_COUNTER_1_NUMBER + 1); // 15 // Counters is concatenation of: // - Application Transaction Counter 2 // - Global MAC in Script Counter 3 // - CFDC For Confidentiality Session Key 1 // - CFDC for AC Session Key 1 // - CFDC for Integrity Session Key 1 // - Bad Cryptogram Counter 2 static final byte PBB_OFFSET_COUNTERS = (byte) (PBB_OFFSET_COUNTER_2_NUMBER + 1); // 16 static final byte PBB_OFFSET_APPLICATION_TRANSACTION_COUNTER = PBB_OFFSET_COUNTERS; // 16 static final byte PBB_OFFSET_GLOBAL_MAC_IN_SCRIPT_COUNTER = (byte) (PBB_OFFSET_APPLICATION_TRANSACTION_COUNTER + 2); // 18 static final byte PBB_OFFSET_CFDC_FOR_CONFIDENTIALITY_SK = (byte) (PBB_OFFSET_GLOBAL_MAC_IN_SCRIPT_COUNTER + 3); // 21 static final byte PBB_OFFSET_CFDC_FOR_AC_SK = (byte) (PBB_OFFSET_CFDC_FOR_CONFIDENTIALITY_SK + 1); // 22 static final byte PBB_OFFSET_CFDC_FOR_INTEGRITY_SK = (byte) (PBB_OFFSET_CFDC_FOR_AC_SK + 1); // 23 static final byte PBB_OFFSET_BAD_CRYPTOGRAM_COUNTER = (byte) (PBB_OFFSET_CFDC_FOR_INTEGRITY_SK + 1); // 24 static final byte PBB_OFFSET_POS_CARDHOLDER_INTERACTION_INFO_BYTE_1 = (byte) (PBB_OFFSET_COUNTERS + 10); // 26 static final byte PBB_OFFSET_POS_CARDHOLDER_INTERACTION_INFO_BYTE_2 = (byte) (PBB_OFFSET_POS_CARDHOLDER_INTERACTION_INFO_BYTE_1 + 1); // 27 static final byte PBB_OFFSET_POS_CARDHOLDER_INTERACTION_INFO_BYTE_3 = (byte) (PBB_OFFSET_POS_CARDHOLDER_INTERACTION_INFO_BYTE_2 + 1); // 28 static final byte PBB_OFFSET_PPMS_TRANSACTION_DETAILS = (byte) (PBB_OFFSET_POS_CARDHOLDER_INTERACTION_INFO_BYTE_1 + 3); // 29 static final byte PBB_OFFSET_PPMS_TRANSACTION_DETAILS_VERSION_NUMBER = PBB_OFFSET_PPMS_TRANSACTION_DETAILS; // 29 static final byte PBB_OFFSET_PPMS_TRANSACTION_DETAILS_ATC = (byte) (PBB_OFFSET_PPMS_TRANSACTION_DETAILS_VERSION_NUMBER + 1); // 30 static final byte PBB_OFFSET_PPMS_TRANSACTION_DETAILS_CID = (byte) (PBB_OFFSET_PPMS_TRANSACTION_DETAILS_ATC + 2); // 32 static final byte PBB_OFFSET_PPMS_TRANSACTION_DETAILS_CVR_BYTE_1 = (byte) (PBB_OFFSET_PPMS_TRANSACTION_DETAILS_CID + 1); // 33 static final byte PBB_OFFSET_PPMS_TRANSACTION_DETAILS_CVR_BYTE_2 = (byte) (PBB_OFFSET_PPMS_TRANSACTION_DETAILS_CVR_BYTE_1 + 1); // 34 static final byte PBB_OFFSET_PPMS_TRANSACTION_DETAILS_CVR_BYTE_3 = (byte) (PBB_OFFSET_PPMS_TRANSACTION_DETAILS_CVR_BYTE_2 + 1); // 35 static final byte PBB_OFFSET_SCRIPT_COUNTER = (byte) (PBB_OFFSET_PPMS_TRANSACTION_DETAILS + 7); // 36 static final byte PBB_OFFSET_SECURITY_LIMITS_STATUS = (byte) (PBB_OFFSET_SCRIPT_COUNTER + 1); // 37 static final byte PBB_OFFSET_CTR_SMI = (byte) (PBB_OFFSET_SECURITY_LIMITS_STATUS + 1); // 38 // Errata 6 // Add PUK Try Counter with length 2 bytes in persistent data objects. static final byte PBB_OFFSET_PUK_TRY_COUNTER = (byte) (PBB_OFFSET_CTR_SMI + 2); // 40 static final byte PBB_OFFSET_CDA_TRANSACTION_FLAG_RECOVERY = (byte) (PBB_OFFSET_PUK_TRY_COUNTER + 2); // 42 static final byte PBB_OFFSET_APPLICATION_CRYPTOGRAM_RECOVERY = (byte) (PBB_OFFSET_CDA_TRANSACTION_FLAG_RECOVERY + 1); // 43 static final byte PBB_OFFSET_APPLICATION_TRANSACTION_COUNTER_RECOVERY = (byte) (PBB_OFFSET_APPLICATION_CRYPTOGRAM_RECOVERY + 8); // 51 static final byte PBB_OFFSET_ISSUER_APPLICATION_DATA_RECOVERY_LENGTH = (byte) (PBB_OFFSET_APPLICATION_TRANSACTION_COUNTER_RECOVERY + 2); // 53 static final byte PBB_OFFSET_ISSUER_APPLICATION_DATA_RECOVERY = (byte) (PBB_OFFSET_ISSUER_APPLICATION_DATA_RECOVERY_LENGTH + 1); // 54 static final byte PBB_OFFSET_CRYPTOGRAM_INFO_DATA_RECOVERY = (byte) (PBB_OFFSET_ISSUER_APPLICATION_DATA_RECOVERY + 26); // 80 static final byte PBB_OFFSET_UNPREDICTABLE_NUMBER_RECOVERY = (byte) (PBB_OFFSET_CRYPTOGRAM_INFO_DATA_RECOVERY + 1); // 81 static final byte PBB_OFFSET_HASH_RESULT_RECOVERY = (byte) (PBB_OFFSET_UNPREDICTABLE_NUMBER_RECOVERY + 4); // 85 static final byte PBB_OFFSET_POS_CARDHOLDER_INTERACTION_INFO_RECOVERY = (byte) (PBB_OFFSET_HASH_RESULT_RECOVERY + 20); // 105 static final byte SIZE_PBB = (byte) (PBB_OFFSET_POS_CARDHOLDER_INTERACTION_INFO_RECOVERY + 3); // 108 // 'personalizedPersistentByteBuffer' constants. // PPBB (personalized persistent byte buffer) // TODO: Re-order data elements as defined in DGI 'A002'. static final byte PPBB_OFFSET_ACCUMULATOR_1_CURRENCY_CODE = (byte) 0; static final byte PPBB_OFFSET_ACCUMULATOR_1_CURRENCY_CONVERSION_TABLE = (byte) (PPBB_OFFSET_ACCUMULATOR_1_CURRENCY_CODE + 2); // 2 static final byte PPBB_OFFSET_ACCUMULATOR_1_LOWER_LIMIT = (byte) (PPBB_OFFSET_ACCUMULATOR_1_CURRENCY_CONVERSION_TABLE + 25); // 27 static final byte PPBB_OFFSET_ACCUMULATOR_1_UPPER_LIMIT = (byte) (PPBB_OFFSET_ACCUMULATOR_1_LOWER_LIMIT + 6); // 33 static final byte PPBB_OFFSET_ACCUMULATOR_2_CURRENCY_CODE = (byte) (PPBB_OFFSET_ACCUMULATOR_1_UPPER_LIMIT + 6); // 39 static final byte PPBB_OFFSET_ACCUMULATOR_2_CURRENCY_CONVERSION_TABLE = (byte) (PPBB_OFFSET_ACCUMULATOR_2_CURRENCY_CODE + 2); // 41 static final byte PPBB_OFFSET_ACCUMULATOR_2_LOWER_LIMIT = (byte) (PPBB_OFFSET_ACCUMULATOR_2_CURRENCY_CONVERSION_TABLE + 25); // 66 static final byte PPBB_OFFSET_ACCUMULATOR_2_UPPER_LIMIT = (byte) (PPBB_OFFSET_ACCUMULATOR_2_LOWER_LIMIT + 6); // 72 static final byte PPBB_OFFSET_ADDITIONAL_CHECK_TABLE_POSITION_IN_CDOL1_RELATED_DATA = (byte) (PPBB_OFFSET_ACCUMULATOR_2_UPPER_LIMIT + 6); // 78 static final byte PPBB_OFFSET_ADDITIONAL_CHECK_TABLE_LENGTH_IN_CDOL1_RELATED_DATA = (byte) (PPBB_OFFSET_ADDITIONAL_CHECK_TABLE_POSITION_IN_CDOL1_RELATED_DATA + 1); // 79 static final byte PPBB_OFFSET_ADDITIONAL_CHECK_TABLE_NUMBER_OF_ENTRIES = (byte) (PPBB_OFFSET_ADDITIONAL_CHECK_TABLE_LENGTH_IN_CDOL1_RELATED_DATA + 1); // 80 static final byte PPBB_OFFSET_ADDITIONAL_CHECK_TABLE_ENTRIES_BIT_MASK = (byte) (PPBB_OFFSET_ADDITIONAL_CHECK_TABLE_NUMBER_OF_ENTRIES + 1); // 81 static final byte PPBB_OFFSET_CDOL1_RELATED_DATA_LENGTH = (byte) (PPBB_OFFSET_ADDITIONAL_CHECK_TABLE_POSITION_IN_CDOL1_RELATED_DATA + 18); // 96 static final byte PPBB_OFFSET_COUNTER_1_LOWER_LIMIT = (byte) (PPBB_OFFSET_CDOL1_RELATED_DATA_LENGTH + 1); // 97 static final byte PPBB_OFFSET_COUNTER_1_UPPER_LIMIT = (byte) (PPBB_OFFSET_COUNTER_1_LOWER_LIMIT + 1); // 98 static final byte PPBB_OFFSET_COUNTER_2_LOWER_LIMIT = (byte) (PPBB_OFFSET_COUNTER_1_UPPER_LIMIT + 1); // 99 static final byte PPBB_OFFSET_COUNTER_2_UPPER_LIMIT = (byte) (PPBB_OFFSET_COUNTER_2_LOWER_LIMIT + 1); // 100 static final byte PPBB_OFFSET_CRM_COUNTRY_CODE = (byte) (PPBB_OFFSET_COUNTER_2_UPPER_LIMIT + 1); // 101 static final byte PPBB_OFFSET_KEY_DERIVATION_INDEX = (byte) (PPBB_OFFSET_CRM_COUNTRY_CODE + 2); // 103 static final byte PPBB_OFFSET_MCHIP_CVM_CARDHOLDER_OPTIONS = (byte) (PPBB_OFFSET_KEY_DERIVATION_INDEX + 1); // 104 static final byte PPBB_OFFSET_MCHIP_CVM_ISSUER_OPTIONS = (byte) (PPBB_OFFSET_MCHIP_CVM_CARDHOLDER_OPTIONS + 1); // 105 static final byte PPBB_OFFSET_CVM_RESET_TIMEOUT = (byte) (PPBB_OFFSET_MCHIP_CVM_ISSUER_OPTIONS + 1); // 106 static final byte PPBB_OFFSET_ACK_RESET_TIMEOUT = (byte) (PPBB_OFFSET_CVM_RESET_TIMEOUT + 2); // 108 static final byte PPBB_OFFSET_DUAL_TAP_RESET_TIMEOUT = (byte) (PPBB_OFFSET_ACK_RESET_TIMEOUT + 2); // 110 static final byte PPBB_OFFSET_OFFLINE_CHANGE_PIN_REQUIRED = (byte) (PPBB_OFFSET_DUAL_TAP_RESET_TIMEOUT + 2); // 112 static final byte PPBB_OFFSET_MAGSTRIPE_CVM_CARDHOLDER_OPTIONS = (byte) (PPBB_OFFSET_OFFLINE_CHANGE_PIN_REQUIRED + 1); // 113 static final byte PPBB_OFFSET_MAGSTRIPE_CVM_ISSUER_OPTIONS = (byte) (PPBB_OFFSET_MAGSTRIPE_CVM_CARDHOLDER_OPTIONS + 1); // 114 static final byte PPBB_OFFSET_CIAC_DECLINE_ON_PPMS = (byte) (PPBB_OFFSET_MAGSTRIPE_CVM_ISSUER_OPTIONS + 1); // 115 static final byte PPBB_OFFSET_ICC_PUB_KEY_MODULUS_LENGTH = (byte) (PPBB_OFFSET_CIAC_DECLINE_ON_PPMS + 2); // 117 static final byte PPBB_OFFSET_ICC_PIN_ENC_PUB_KEY_MODULUS_LENGTH = (byte) (PPBB_OFFSET_ICC_PUB_KEY_MODULUS_LENGTH + 1); // 118 static final byte PPBB_OFFSET_PREVIOUS_TRANSACTION_HISTORY = (byte) (PPBB_OFFSET_ICC_PIN_ENC_PUB_KEY_MODULUS_LENGTH + 1); // 119 static final byte PPBB_OFFSET_APPLICATION_TRANSACTION_COUNTER_LIMIT = (byte) (PPBB_OFFSET_PREVIOUS_TRANSACTION_HISTORY + 1); // 120 static final byte PPBB_OFFSET_LIM_AC = (byte) (PPBB_OFFSET_APPLICATION_TRANSACTION_COUNTER_LIMIT + 2); // 122 static final byte PPBB_OFFSET_LIM_SMI = (byte) (PPBB_OFFSET_LIM_AC + 2); // 124 static final byte PPBB_OFFSET_BAD_CRYPTOGRAM_LIMIT = (byte) (PPBB_OFFSET_LIM_SMI + 2); // 126 // > 127 static final short PPBB_OFFSET_IVCVC3_TRACK1 = (short) (PPBB_OFFSET_BAD_CRYPTOGRAM_LIMIT + 2); // 128 static final short PPBB_OFFSET_IVCVC3_TRACK2 = (short) (PPBB_OFFSET_IVCVC3_TRACK1 + 2); // 130 static final short PPBB_OFFSET_PIN_IVCVC3_TRACK1 = (short) (PPBB_OFFSET_IVCVC3_TRACK2 + 2); // 132 static final short PPBB_OFFSET_PIN_IVCVC3_TRACK2 = (short) (PPBB_OFFSET_PIN_IVCVC3_TRACK1 + 2); // 134 static final short PPBB_OFFSET_PIN_TRY_COUNTER = (short) (PPBB_OFFSET_PIN_IVCVC3_TRACK2 + 2); // 136 static final short PPBB_OFFSET_PIN_TRY_LIMIT = (short) (PPBB_OFFSET_PIN_TRY_COUNTER + 1); // 137 static final short PPBB_OFFSET_APPLICATION_LIFE_CYCLE_DATA = (short) (PPBB_OFFSET_PIN_TRY_LIMIT + 1); // 138 static final short PPBB_OFFSET_PWD = (short) (PPBB_OFFSET_APPLICATION_LIFE_CYCLE_DATA + 48); // 186 static final short PPBB_OFFSET_PUK = (short) (PPBB_OFFSET_PWD + 16); // 202 static final short PPBB_OFFSET_REFERENCE_PIN = (short) (PPBB_OFFSET_PUK + 8); // 210 // Errata 3 // TODO: Remove Security Limits, the three limits that make it already exist. static final short PPBB_OFFSET_SECURITY_LIMITS = (short) (PPBB_OFFSET_REFERENCE_PIN + 8); // 218 static final short PPBB_OFFSET_SECURITY_WORD = (short) (PPBB_OFFSET_SECURITY_LIMITS + 6); // 224 static final short PPBB_OFFSET_SWITCH_MODE_INFO = (short) (PPBB_OFFSET_SECURITY_WORD + 16); // 240 static final short PPBB_OFFSET_WCOTA = (short) (PPBB_OFFSET_SWITCH_MODE_INFO + 20); // 260 static final short PPBB_OFFSET_WCOTN = (short) (PPBB_OFFSET_WCOTA + 6); // 266 static final short PPBB_OFFSET_DATA_ENVELOPE_LENGTH = (short) (PPBB_OFFSET_WCOTN + 1); // 267 static final short PPBB_OFFSET_DATA_ENVELOPE = (short) (PPBB_OFFSET_DATA_ENVELOPE_LENGTH + 1); // 268 static final short SIZE_PPBB = (short) (PPBB_OFFSET_DATA_ENVELOPE + 32); // 300 // 'transientByteBuffer' constants. // TBB (transient byte buffer) static final byte TBB_OFFSET_STATE = (byte) 0; // 'transientByteBuffer' constants used after personalization. static final byte TBB_OFFSET_ACTIVE_MODE_FLAG = (byte) (TBB_OFFSET_STATE + 1); // 1 // TODO: Remove TBB_OFFSET_GET_CHALLENGE_FLAG. static final byte TBB_OFFSET_GET_CHALLENGE_FLAG = (byte) (TBB_OFFSET_ACTIVE_MODE_FLAG + 1); // 2 static final byte TBB_OFFSET_CVR_BYTE_1 = (byte) (TBB_OFFSET_GET_CHALLENGE_FLAG + 1); // 3 static final byte TBB_OFFSET_CVR_BYTE_2 = (byte) (TBB_OFFSET_CVR_BYTE_1 + 1); // 4 static final byte TBB_OFFSET_CVR_BYTE_3 = (byte) (TBB_OFFSET_CVR_BYTE_2 + 1); // 5 static final byte TBB_OFFSET_CVR_BYTE_4 = (byte) (TBB_OFFSET_CVR_BYTE_3 + 1); // 6 static final byte TBB_OFFSET_CVR_BYTE_5 = (byte) (TBB_OFFSET_CVR_BYTE_4 + 1); // 7 static final byte TBB_OFFSET_CVR_BYTE_6 = (byte) (TBB_OFFSET_CVR_BYTE_5 + 1); // 8 static final byte TBB_OFFSET_FIRST_AC = (byte) (TBB_OFFSET_CVR_BYTE_1 + 6); // 9 static final byte TBB_OFFSET_ICC_DYNAMIC_NUMBER = (byte) (TBB_OFFSET_FIRST_AC + 8); // 17 static final byte TBB_OFFSET_ICC_UNPREDICTABLE_NUMBER = (byte) (TBB_OFFSET_ICC_DYNAMIC_NUMBER + 8); // 25 static final byte TBB_OFFSET_OFFLINE_CHANGE_PIN_STATUS = (byte) (TBB_OFFSET_ICC_UNPREDICTABLE_NUMBER + 8); // 33 static final byte TBB_OFFSET_RAND = (byte) (TBB_OFFSET_OFFLINE_CHANGE_PIN_STATUS + 1); // 34 static final byte TBB_OFFSET_RECOVER_AC_PERFORMED_FLAG = (byte) (TBB_OFFSET_RAND + 8); // 42 static final byte TBB_OFFSET_SMC_CSK_KEY_PRESENT_FLAG = (byte) (TBB_OFFSET_RECOVER_AC_PERFORMED_FLAG + 1); // 43 static final byte TBB_OFFSET_SMI_CSK_KEY_PRESENT_FLAG = (byte) (TBB_OFFSET_SMC_CSK_KEY_PRESENT_FLAG + 1); // 44 // CDOL 1 Related Data length is stored at PPBB_OFFSET_CDOL1_RELATED_DATA_LENGTH. // NOTE: Maximum CDOL1 Related Data length is 53 as the minimum. It can be 180 - 45 = 135 bytes. Report as 128. /* PDOL Data[1] CDOL1 Related Data := Transaction Related Data Amount, Authorized (Numeric) := Transaction Related Data[1 : 6] Amount, Other (Numeric) := Transaction Related Data[7 : 12] Terminal Country Code := Transaction Related Data[13 : 14] Terminal Verification Results := Transaction Related Data[15 : 19] Transaction Currency Code := Transaction Related Data[20 : 21] Transaction Date := Transaction Related Data[22 : 24] Transaction Type := Transaction Related Data[25] Unpredictable Number := Transaction Related Data[26 : 29] Terminal Type := Transaction Related Data[30] Data Authentication Code := Transaction Related Data[31 : 32] ICC Dynamic Number (Terminal) := Transaction Related Data[33 : 40] CVM Results := Transaction Related Data[41 : 43] CDOL1 Extension := Transaction Related Data[44 : CDOL 1 Related Data Length] Note: CDOL1 Extension may be empty */ static final byte TBB_OFFSET_PDOL_DATA = (byte) (TBB_OFFSET_SMI_CSK_KEY_PRESENT_FLAG + 1); // 45 static final byte TBB_OFFSET_CDOL1_RELATED_DATA = (byte) (TBB_OFFSET_PDOL_DATA + 1); // 46 static final byte TBB_OFFSET_AMOUNT_AUTHORIZED = TBB_OFFSET_CDOL1_RELATED_DATA; // 47 static final byte TBB_OFFSET_AMOUNT_OTHER = (byte) (TBB_OFFSET_AMOUNT_AUTHORIZED + 6); // 52 static final byte TBB_OFFSET_TERMINAL_COUNTRY_CODE = (byte) (TBB_OFFSET_AMOUNT_OTHER + 6); // 58 static final byte TBB_OFFSET_TVR = (byte) (TBB_OFFSET_TERMINAL_COUNTRY_CODE + 2); // 60 (not required by spec) static final byte TBB_OFFSET_TRANSACTION_CURRENCY_CODE = (byte) (TBB_OFFSET_TVR + 5); // 65 static final byte TBB_OFFSET_TRANSACTION_DATE = (byte) (TBB_OFFSET_TRANSACTION_CURRENCY_CODE + 2); // 67 static final byte TBB_OFFSET_TRANSACTION_TYPE = (byte) (TBB_OFFSET_TRANSACTION_DATE + 3); // 70 static final byte TBB_OFFSET_UNPREDICTABLE_NUMBER = (byte) (TBB_OFFSET_TRANSACTION_TYPE + 1); // 71 (not required by spec) static final byte TBB_OFFSET_TERMINAL_TYPE = (byte) (TBB_OFFSET_UNPREDICTABLE_NUMBER + 4); // 75 (not required by spec) static final byte TBB_OFFSET_DATA_AUTHENTICATION_CODE = (byte) (TBB_OFFSET_TERMINAL_TYPE + 1); // 76 static final byte TBB_OFFSET_ICC_DYNAMIC_NUMBER_TERMINAL = (byte) (TBB_OFFSET_DATA_AUTHENTICATION_CODE + 2); // 78 (not required by spec) static final byte TBB_OFFSET_CVM_RESULTS = (byte) (TBB_OFFSET_ICC_DYNAMIC_NUMBER_TERMINAL + 8); // 86 (not required by spec) static final byte TBB_OFFSET_CDOL1_EXTENSION = (byte) (TBB_OFFSET_CVM_RESULTS + 3); // 89 (not required by spec) static final short TBB_OFFSET_SCRATCH = (short) 180; // 'transientByteBuffer' constants used during personalization. static final byte TBB_OFFSET_SEQUENCE_NUMBER = (byte) (TBB_OFFSET_STATE + 1); // 1 static final byte TBB_OFFSET_FULL_DGI_LENGTH = (byte) (TBB_OFFSET_SEQUENCE_NUMBER + 1); // 2 static final byte TBB_OFFSET_PREV_PARTIAL_DGI_LENGTH = (byte) (TBB_OFFSET_FULL_DGI_LENGTH + 1); // 3 static final byte TBB_OFFSET_PREV_PARTIAL_DGI_DATA = (byte) (TBB_OFFSET_PREV_PARTIAL_DGI_LENGTH + 1); // 4 static final short SIZE_TBB = (short) 272; /*** End of data location definitions. ***/ }