Showing the changes to java/pkg/sun/security/smartcardio/PCSC.java (1 of 18352 files). Show all
Unified · Split
| @@ -0,0 +1,189 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. | ||
| 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | ||
| 4 | * | ||
| 5 | * This code is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License version 2 only, as | ||
| 7 | * published by the Free Software Foundation. Oracle designates this | ||
| 8 | * particular file as subject to the "Classpath" exception as provided | ||
| 9 | * by Oracle in the LICENSE file that accompanied this code. | ||
| 10 | * | ||
| 11 | * This code is distributed in the hope that it will be useful, but WITHOUT | ||
| 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
| 14 | * version 2 for more details (a copy is included in the LICENSE file that | ||
| 15 | * accompanied this code). | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License version | ||
| 18 | * 2 along with this work; if not, write to the Free Software Foundation, | ||
| 19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 20 | * | ||
| 21 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | ||
| 22 | * or visit www.oracle.com if you need additional information or have any | ||
| 23 | * questions. | ||
| 24 | */ | ||
| 25 | |||
| 26 | package sun.security.smartcardio; | ||
| 27 | |||
| 28 | import java.security.AccessController; | ||
| 29 | |||
| 30 | import sun.security.action.LoadLibraryAction; | ||
| 31 | |||
| 32 | /** | ||
| 33 | * Access to native PC/SC functions and definition of PC/SC constants. | ||
| 34 | * Initialization and platform specific PC/SC constants are handled in | ||
| 35 | * the platform specific superclass. | ||
| 36 | * | ||
| 37 | * @since 1.6 | ||
| 38 | * @author Andreas Sterbenz | ||
| 39 | */ | ||
| 40 | final class PCSC extends PlatformPCSC { | ||
| 41 | |||
| 42 | private PCSC() { | ||
| 43 | // no instantiation | ||
| 44 | } | ||
| 45 | |||
| 46 | static void checkAvailable() throws RuntimeException { | ||
| 47 | if (initException != null) { | ||
| 48 | throw new UnsupportedOperationException | ||
| 49 | ("PC/SC not available on this platform", initException); | ||
| 50 | } | ||
| 51 | } | ||
| 52 | |||
| 53 | // returns SCARDCONTEXT (contextId) | ||
| 54 | static native long SCardEstablishContext | ||
| 55 | (int scope) | ||
| 56 | throws PCSCException; | ||
| 57 | |||
| 58 | static native String[] SCardListReaders | ||
| 59 | (long contextId) | ||
| 60 | throws PCSCException; | ||
| 61 | |||
| 62 | // returns SCARDHANDLE (cardId) | ||
| 63 | static native long SCardConnect | ||
| 64 | (long contextId, String readerName, int shareMode, int preferredProtocols) | ||
| 65 | throws PCSCException; | ||
| 66 | |||
| 67 | static native byte[] SCardTransmit | ||
| 68 | (long cardId, int protocol, byte[] buf, int ofs, int len) | ||
| 69 | throws PCSCException; | ||
| 70 | |||
| 71 | // returns the ATR of the card, updates status[] with reader state and protocol | ||
| 72 | static native byte[] SCardStatus | ||
| 73 | (long cardId, byte[] status) | ||
| 74 | throws PCSCException; | ||
| 75 | |||
| 76 | static native void SCardDisconnect | ||
| 77 | (long cardId, int disposition) | ||
| 78 | throws PCSCException; | ||
| 79 | |||
| 80 | // returns dwEventState[] of the same size and order as readerNames[] | ||
| 81 | static native int[] SCardGetStatusChange | ||
| 82 | (long contextId, long timeout, int[] currentState, String[] readerNames) | ||
| 83 | throws PCSCException; | ||
| 84 | |||
| 85 | static native void SCardBeginTransaction | ||
| 86 | (long cardId) | ||
| 87 | throws PCSCException; | ||
| 88 | |||
| 89 | static native void SCardEndTransaction | ||
| 90 | (long cardId, int disposition) | ||
| 91 | throws PCSCException; | ||
| 92 | |||
| 93 | static native byte[] SCardControl | ||
| 94 | (long cardId, int controlCode, byte[] sendBuffer) | ||
| 95 | throws PCSCException; | ||
| 96 | |||
| 97 | // PCSC success/error/failure/warning codes | ||
| 98 | final static int SCARD_S_SUCCESS = 0x00000000; | ||
| 99 | final static int SCARD_E_CANCELLED = 0x80100002; | ||
| 100 | final static int SCARD_E_CANT_DISPOSE = 0x8010000E; | ||
| 101 | final static int SCARD_E_INSUFFICIENT_BUFFER = 0x80100008; | ||
| 102 | final static int SCARD_E_INVALID_ATR = 0x80100015; | ||
| 103 | final static int SCARD_E_INVALID_HANDLE = 0x80100003; | ||
| 104 | final static int SCARD_E_INVALID_PARAMETER = 0x80100004; | ||
| 105 | final static int SCARD_E_INVALID_TARGET = 0x80100005; | ||
| 106 | final static int SCARD_E_INVALID_VALUE = 0x80100011; | ||
| 107 | final static int SCARD_E_NO_MEMORY = 0x80100006; | ||
| 108 | final static int SCARD_F_COMM_ERROR = 0x80100013; | ||
| 109 | final static int SCARD_F_INTERNAL_ERROR = 0x80100001; | ||
| 110 | final static int SCARD_F_UNKNOWN_ERROR = 0x80100014; | ||
| 111 | final static int SCARD_F_WAITED_TOO_LONG = 0x80100007; | ||
| 112 | final static int SCARD_E_UNKNOWN_READER = 0x80100009; | ||
| 113 | final static int SCARD_E_TIMEOUT = 0x8010000A; | ||
| 114 | final static int SCARD_E_SHARING_VIOLATION = 0x8010000B; | ||
| 115 | final static int SCARD_E_NO_SMARTCARD = 0x8010000C; | ||
| 116 | final static int SCARD_E_UNKNOWN_CARD = 0x8010000D; | ||
| 117 | final static int SCARD_E_PROTO_MISMATCH = 0x8010000F; | ||
| 118 | final static int SCARD_E_NOT_READY = 0x80100010; | ||
| 119 | final static int SCARD_E_SYSTEM_CANCELLED = 0x80100012; | ||
| 120 | final static int SCARD_E_NOT_TRANSACTED = 0x80100016; | ||
| 121 | final static int SCARD_E_READER_UNAVAILABLE = 0x80100017; | ||
| 122 | |||
| 123 | final static int SCARD_W_UNSUPPORTED_CARD = 0x80100065; | ||
| 124 | final static int SCARD_W_UNRESPONSIVE_CARD = 0x80100066; | ||
| 125 | final static int SCARD_W_UNPOWERED_CARD = 0x80100067; | ||
| 126 | final static int SCARD_W_RESET_CARD = 0x80100068; | ||
| 127 | final static int SCARD_W_REMOVED_CARD = 0x80100069; | ||
| 128 | final static int SCARD_W_INSERTED_CARD = 0x8010006A; | ||
| 129 | |||
| 130 | final static int SCARD_E_UNSUPPORTED_FEATURE = 0x8010001F; | ||
| 131 | final static int SCARD_E_PCI_TOO_SMALL = 0x80100019; | ||
| 132 | final static int SCARD_E_READER_UNSUPPORTED = 0x8010001A; | ||
| 133 | final static int SCARD_E_DUPLICATE_READER = 0x8010001B; | ||
| 134 | final static int SCARD_E_CARD_UNSUPPORTED = 0x8010001C; | ||
| 135 | final static int SCARD_E_NO_SERVICE = 0x8010001D; | ||
| 136 | final static int SCARD_E_SERVICE_STOPPED = 0x8010001E; | ||
| 137 | |||
| 138 | // MS undocumented | ||
| 139 | final static int SCARD_E_NO_READERS_AVAILABLE = 0x8010002E; | ||
| 140 | // std. Windows invalid handle return code, used instead of SCARD code | ||
| 141 | final static int WINDOWS_ERROR_INVALID_HANDLE = 6; | ||
| 142 | final static int WINDOWS_ERROR_INVALID_PARAMETER = 87; | ||
| 143 | |||
| 144 | // | ||
| 145 | final static int SCARD_SCOPE_USER = 0x0000; | ||
| 146 | final static int SCARD_SCOPE_TERMINAL = 0x0001; | ||
| 147 | final static int SCARD_SCOPE_SYSTEM = 0x0002; | ||
| 148 | final static int SCARD_SCOPE_GLOBAL = 0x0003; | ||
| 149 | |||
| 150 | final static int SCARD_SHARE_EXCLUSIVE = 0x0001; | ||
| 151 | final static int SCARD_SHARE_SHARED = 0x0002; | ||
| 152 | final static int SCARD_SHARE_DIRECT = 0x0003; | ||
| 153 | |||
| 154 | final static int SCARD_LEAVE_CARD = 0x0000; | ||
| 155 | final static int SCARD_RESET_CARD = 0x0001; | ||
| 156 | final static int SCARD_UNPOWER_CARD = 0x0002; | ||
| 157 | final static int SCARD_EJECT_CARD = 0x0003; | ||
| 158 | |||
| 159 | final static int SCARD_STATE_UNAWARE = 0x0000; | ||
| 160 | final static int SCARD_STATE_IGNORE = 0x0001; | ||
| 161 | final static int SCARD_STATE_CHANGED = 0x0002; | ||
| 162 | final static int SCARD_STATE_UNKNOWN = 0x0004; | ||
| 163 | final static int SCARD_STATE_UNAVAILABLE = 0x0008; | ||
| 164 | final static int SCARD_STATE_EMPTY = 0x0010; | ||
| 165 | final static int SCARD_STATE_PRESENT = 0x0020; | ||
| 166 | final static int SCARD_STATE_ATRMATCH = 0x0040; | ||
| 167 | final static int SCARD_STATE_EXCLUSIVE = 0x0080; | ||
| 168 | final static int SCARD_STATE_INUSE = 0x0100; | ||
| 169 | final static int SCARD_STATE_MUTE = 0x0200; | ||
| 170 | final static int SCARD_STATE_UNPOWERED = 0x0400; | ||
| 171 | |||
| 172 | final static int TIMEOUT_INFINITE = 0xffffffff; | ||
| 173 | |||
| 174 | private final static char[] hexDigits = "0123456789abcdef".toCharArray(); | ||
| 175 | |||
| 176 | public static String toString(byte[] b) { | ||
| 177 | StringBuffer sb = new StringBuffer(b.length * 3); | ||
| 178 | for (int i = 0; i < b.length; i++) { | ||
| 179 | int k = b[i] & 0xff; | ||
| 180 | if (i != 0) { | ||
| 181 | sb.append(':'); | ||
| 182 | } | ||
| 183 | sb.append(hexDigits[k >>> 4]); | ||
| 184 | sb.append(hexDigits[k & 0xf]); | ||
| 185 | } | ||
| 186 | return sb.toString(); | ||
| 187 | } | ||
| 188 | |||
| 189 | } | ||