/* * Copyright (c) 2012, Redbilled.fr. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code 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 * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package org.poreid.pcscforjava; /** * Class which supplies all the PCSC defines for the library.<br /> * And some functions to manage it. * * @since 1.6 * @author Matthieu Leromain */ public class PCSCDefines { private PCSCDefines() { // No Constructor static class. } /** * Scard scope for user */ public final static int SCARD_SCOPE_USER = 0x0000; /** * Scard scope for terminal */ public final static int SCARD_SCOPE_TERMINAL = 0x0001; /** * Scard scope for system */ public final static int SCARD_SCOPE_SYSTEM = 0x0002; /** * Scard scope global */ public final static int SCARD_SCOPE_GLOBAL = 0x0003; /** * Share exclusive */ public final static int SCARD_SHARE_EXCLUSIVE = 0x0001; /** * Share shared */ public final static int SCARD_SHARE_SHARED = 0x0002; /** * Share direct (without physical card) */ public final static int SCARD_SHARE_DIRECT = 0x0003; /** * Leave the card in its state */ public final static int SCARD_LEAVE_CARD = 0x0000; /** * Reset the card */ public final static int SCARD_RESET_CARD = 0x0001; /** * Unpower the card */ public final static int SCARD_UNPOWER_CARD = 0x0002; /** * Eject the card */ public final static int SCARD_EJECT_CARD = 0x0003; /** * State of card is unware */ public final static int SCARD_STATE_UNAWARE = 0x0000; /** * State of card is ignore */ public final static int SCARD_STATE_IGNORE = 0x0001; /** * State of card is changed */ public final static int SCARD_STATE_CHANGED = 0x0002; /** * State of card is unknown */ public final static int SCARD_STATE_UNKNOWN = 0x0004; /** * State of card is unavailable */ public final static int SCARD_STATE_UNAVAILABLE = 0x0008; /** * State of card is empty */ public final static int SCARD_STATE_EMPTY = 0x0010; /** * State of card is present */ public final static int SCARD_STATE_PRESENT = 0x0020; /** * State of card is atr match */ public final static int SCARD_STATE_ATRMATCH = 0x0040; /** * State of card is exclusive */ public final static int SCARD_STATE_EXCLUSIVE = 0x0080; /** * State of card is inuse */ public final static int SCARD_STATE_INUSE = 0x0100; /** * State of card is mute */ public final static int SCARD_STATE_MUTE = 0x0200; /** * State of card is unpowered */ public final static int SCARD_STATE_UNPOWERED = 0x0400; /** * Vendor information definitions */ public final static int SCARD_CLASS_VENDOR_INFO = 1; /** * Communication definitions */ public final static int SCARD_CLASS_COMMUNICATIONS = 2; /** * Protocol definitions */ public final static int SCARD_CLASS_PROTOCOL = 3; /** * Power Management definitions */ public final static int SCARD_CLASS_POWER_MGMT = 4; /** * Security Assurance definitions */ public final static int SCARD_CLASS_SECURITY = 5; /** * Mechanical characteristic definitions */ public final static int SCARD_CLASS_MECHANICAL = 6; /** * Vendor specific definitions */ public final static int SCARD_CLASS_VENDOR_DEFINED = 7; /** * Interface Device Protocol options */ public final static int SCARD_CLASS_IFD_PROTOCOL = 8; /** * ICC State specific definitions */ public final static int SCARD_CLASS_ICC_STATE = 9; /** * performace counters */ public final static int SCARD_CLASS_PERF = 0x7ffe; /** * System-specific definitions */ public final static int SCARD_CLASS_SYSTEM = 0x7fff; /** * SCARD_ATTR_VALUE for ATR_STRING */ public final static int SCARD_ATTR_ATR_STRING = SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0303); /** * SCARD_ATTR_VALUE for CHANNEL_ID */ public final static int SCARD_ATTR_CHANNEL_ID = SCARD_ATTR_VALUE(SCARD_CLASS_COMMUNICATIONS, 0x0110); /** * SCARD_ATTR_VALUE for CHARACTERISTICS */ public final static int SCARD_ATTR_CHARACTERISTICS = SCARD_ATTR_VALUE(SCARD_CLASS_MECHANICAL, 0x0150); /** * SCARD_ATTR_VALUE for CURRENT_BWT */ public final static int SCARD_ATTR_CURRENT_BWT = SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0209); /** * SCARD_ATTR_VALUE for CURRENT_CLK */ public final static int SCARD_ATTR_CURRENT_CLK = SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0202); /** * SCARD_ATTR_VALUE for CURRENT_CWT */ public final static int SCARD_ATTR_CURRENT_CWT = SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x020a); /** * SCARD_ATTR_VALUE for CURRENT_D */ public final static int SCARD_ATTR_CURRENT_D = SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0204); /** * SCARD_ATTR_VALUE for CURRENT_EBC_ENCODING */ public final static int SCARD_ATTR_CURRENT_EBC_ENCODING = SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x020b); /** * SCARD_ATTR_VALUE for CURRENT_F */ public final static int SCARD_ATTR_CURRENT_F = SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0203); /** * SCARD_ATTR_VALUE for CURRENT_IFSC */ public final static int SCARD_ATTR_CURRENT_IFSC = SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0207); /** * SCARD_ATTR_VALUE for CURRENT_IFSD */ public final static int SCARD_ATTR_CURRENT_IFSD = SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0208); /** * SCARD_ATTR_VALUE for CURRENT_N */ public final static int SCARD_ATTR_CURRENT_N = SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0205); /** * SCARD_ATTR_VALUE for CURRENT_PROTOCOL_TYPE */ public final static int SCARD_ATTR_CURRENT_PROTOCOL_TYPE = SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0201); /** * SCARD_ATTR_VALUE for CURRENT_W */ public final static int SCARD_ATTR_CURRENT_W = SCARD_ATTR_VALUE(SCARD_CLASS_IFD_PROTOCOL, 0x0206); /** * SCARD_ATTR_VALUE for DEFAULT_CLK */ public final static int SCARD_ATTR_DEFAULT_CLK = SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0121); /** * SCARD_ATTR_VALUE for DEFAULT_DATA_RATE */ public final static int SCARD_ATTR_DEFAULT_DATA_RATE = SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0123); /** * SCARD_ATTR_VALUE for DEVICE_FRIENDLY_NAME */ public final static int SCARD_ATTR_DEVICE_FRIENDLY_NAME = SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0003); /** * SCARD_ATTR_VALUE for DEVICE_IN_USE */ public final static int SCARD_ATTR_DEVICE_IN_USE = SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0002); /** * SCARD_ATTR_VALUE for DEVICE_SYSTEM_NAME */ public final static int SCARD_ATTR_DEVICE_SYSTEM_NAME = SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0004); /** * SCARD_ATTR_VALUE for DEVICE_UNIT */ public final static int SCARD_ATTR_DEVICE_UNIT = SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0001); /** * SCARD_ATTR_VALUE for ICC_INTERFACE_STATUS */ public final static int SCARD_ATTR_ICC_INTERFACE_STATUS = SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0301); /** * SCARD_ATTR_VALUE for ICC_PRESENCE */ public final static int SCARD_ATTR_ICC_PRESENCE = SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0300); /** * SCARD_ATTR_VALUE for ICC_TYPE_PER_ATR */ public final static int SCARD_ATTR_ICC_TYPE_PER_ATR = SCARD_ATTR_VALUE(SCARD_CLASS_ICC_STATE, 0x0304); /** * SCARD_ATTR_VALUE for MAX_CLK */ public final static int SCARD_ATTR_MAX_CLK = SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0122); /** * SCARD_ATTR_VALUE for MAX_DATA_RATE */ public final static int SCARD_ATTR_MAX_DATA_RATE = SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0124); /** * SCARD_ATTR_VALUE for MAX_IFSD */ public final static int SCARD_ATTR_MAX_IFSD = SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0125); /** * SCARD_ATTR_VALUE for POWER_MGMT_SUPPORT */ public final static int SCARD_ATTR_POWER_MGMT_SUPPORT = SCARD_ATTR_VALUE(SCARD_CLASS_POWER_MGMT, 0x0131); /** * SCARD_ATTR_VALUE for PROTOCOL_TYPES */ public final static int SCARD_ATTR_PROTOCOL_TYPES = SCARD_ATTR_VALUE(SCARD_CLASS_PROTOCOL, 0x0120); /** * SCARD_ATTR_VALUE for VENDOR_IFD_SERIAL_NO */ public final static int SCARD_ATTR_VENDOR_IFD_SERIAL_NO = SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0103); /** * SCARD_ATTR_VALUE for VENDOR_IFD_TYPE */ public final static int SCARD_ATTR_VENDOR_IFD_TYPE = SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0101); /** * SCARD_ATTR_VALUE for VENDOR_INFO */ public final static int SCARD_ATTR_VENDOR_IFD_VERSION = SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0102); /** * SCARD_ATTR_VALUE for VENDOR_NAME */ public final static int SCARD_ATTR_VENDOR_NAME = SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0100); /** * SCARD_ATTR_VALUE for ATTR_SUPRESS_T1_IFS_REQUEST */ public final static int SCARD_ATTR_SUPRESS_T1_IFS_REQUEST = SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0007); /** * Returns the SCARD_ATTR_VALUE from a class and a tag. * @param iClass the class. * @param iTag the tag. * @return the SCARD_ATTR_VALUE. */ private static int SCARD_ATTR_VALUE(int iClass, int iTag) { return (iClass << 16) | iTag; } /** * FEATURE_VERIFY_PIN_START */ public final static byte FEATURE_VERIFY_PIN_START = (byte) 0x01; /** * FEATURE_VERIFY_PIN_FINISH */ public final static byte FEATURE_VERIFY_PIN_FINISH = (byte) 0x02; /** * FEATURE_MODIFY_PIN_START */ public final static byte FEATURE_MODIFY_PIN_START = (byte) 0x03; /** * FEATURE_MODIFY_PIN_FINISH */ public final static byte FEATURE_MODIFY_PIN_FINISH = (byte) 0x04; /** * FEATURE_GET_KEY_PRESSED */ public final static byte FEATURE_GET_KEY_PRESSED = (byte) 0x05; /** * FEATURE_VERIFY_PIN_DIRECT */ public final static byte FEATURE_VERIFY_PIN_DIRECT = (byte) 0x06; /** * FEATURE_MODIFY_PIN_DIRECT */ public final static byte FEATURE_MODIFY_PIN_DIRECT = (byte) 0x07; /** * FEATURE_MCT_READER_DIRECT */ public final static byte FEATURE_MCT_READER_DIRECT = (byte) 0x08; /** * FEATURE_MCT_UNIVERSAL */ public final static byte FEATURE_MCT_UNIVERSAL = (byte) 0x09; /** * FEATURE_IFD_PIN_PROPERTIES */ public final static byte FEATURE_IFD_PIN_PROPERTIES = (byte) 0x0A; /** * FEATURE_ABORT */ public final static byte FEATURE_ABORT = (byte) 0x0B; /** * FEATURE_SET_SPE_MESSAGE */ public final static byte FEATURE_SET_SPE_MESSAGE = (byte) 0x0C; /** * FEATURE_VERIFY_PIN_DIRECT_APP_ID */ public final static byte FEATURE_VERIFY_PIN_DIRECT_APP_ID = (byte) 0x0D; /** * FEATURE_MODIFY_PIN_DIRECT_APP_ID */ public final static byte FEATURE_MODIFY_PIN_DIRECT_APP_ID = (byte) 0x0E; /** * FEATURE_WRITE_DISPLAY */ public final static byte FEATURE_WRITE_DISPLAY = (byte) 0x0F; /** * FEATURE_GET_KEY */ public final static byte FEATURE_GET_KEY = (byte) 0x10; /** * FEATURE_IFD_DISPLAY_PROPERTIES */ public final static byte FEATURE_IFD_DISPLAY_PROPERTIES = (byte) 0x11; /** * FEATURE_GET_TLV_PROPERTIES */ public final static byte FEATURE_GET_TLV_PROPERTIES = (byte) 0x12; /** * FEATURE_CCID_ESC_COMMAND */ public final static byte FEATURE_CCID_ESC_COMMAND = (byte) 0x13; /** * Array of FEATURE Strings. */ final static String[] FEATURES = {"VERIFY_PIN_START", "VERIFY_PIN_FINISH", "MODIFY_PIN_START", "MODIFY_PIN_FINISH", "GET_KEY_PRESSED", "VERIFY_PIN_DIRECT", "MODIFY_PIN_DIRECT", "MCT_READER_DIRECT", "MCT_UNIVERSAL", "IFD_PIN_PROPERTIES", "ABORT", "SET_SPE_MESSAGE", "VERIFY_PIN_DIRECT_APP_ID", "MODIFY_PIN_DIRECT_APP_ID", "WRITE_DISPLAY", "GET_KEY", "IFD_DISPLAY_PROPERTIES", "GET_TLV_PROPERTIES", "CCID_ESC_COMMAND"}; /** * IFD_HANDLER: features supported */ final static byte[] IFD_HANDLER = { (byte)0x06, (byte)0x04, (byte)0x01, (byte)0x02, (byte)0x03, (byte)0x06, (byte)0x07, (byte)0x04, (byte)0x01, (byte)0x02, (byte)0x03, (byte)0x07}; /** * bPINOperation for a PIN Verification */ final static byte bPINOperation_PINVerification = (byte)0x00; /** * bPINOperation for a PIN Modification */ final static byte bPINOperation_PINModification = (byte)0x01; /** * Modifies the code for a correct SCARD code. * @param code the code. * @return the SCARD code. */ public static int SCARD_CTL_CODE(int code) { if(System.getProperty("os.name").contains("Windows")) // cf. WinIOCTL.h return (0x31 << 16 | (code) << 2); else // cf. reader.h return 0x42000000 + (code); } }