1 /*
2 * Copyright (c) 2005, 2014, 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.*;
29
30 import javax.smartcardio.*;
31
32 /**
33 * Provider object for PC/SC.
34 *
35 * @since 1.6
36 * @author Andreas Sterbenz
37 */
38 public final class SunPCSC extends Provider {
39
40 private static final long serialVersionUID = 6168388284028876579L;
41
42 public SunPCSC() {
43 super("SunPCSC", 1.9d, "Sun PC/SC provider");
44 AccessController.doPrivileged(new PrivilegedAction<Void>() {
45 public Void run() {
46 put("TerminalFactory.PC/SC", "sun.security.smartcardio.SunPCSC$Factory");
47 return null;
48 }
49 });
50 }
51
52 public static final class Factory extends TerminalFactorySpi {
53 public Factory(Object obj) throws PCSCException {
54 if (obj != null) {
55 throw new IllegalArgumentException
56 ("SunPCSC factory does not use parameters");
57 }
58 // make sure PCSC is available and that we can obtain a context
59 PCSC.checkAvailable();
60 PCSCTerminals.initContext();
61 }
62 /**
63 * Returns the available readers.
64 * This must be a new object for each call.
65 */
66 protected CardTerminals engineTerminals() {
|
1 /*
2 * Copyright (c) 2005, 2015, 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.*;
29
30 import javax.smartcardio.*;
31
32 /**
33 * Provider object for PC/SC.
34 *
35 * @since 1.6
36 * @author Andreas Sterbenz
37 */
38 public final class SunPCSC extends Provider {
39
40 private static final long serialVersionUID = 6168388284028876579L;
41
42 private static final class ProviderService extends Provider.Service {
43
44 ProviderService(Provider p, String type, String algo, String cn) {
45 super(p, type, algo, cn, null, null);
46 }
47
48 @Override
49 public Object newInstance(Object ctrParamObj)
50 throws NoSuchAlgorithmException {
51 String type = getType();
52 String algo = getAlgorithm();
53 try {
54 if (type.equals("TerminalFactory") &&
55 algo.equals("PC/SC")) {
56 return new SunPCSC.Factory(ctrParamObj);
57 }
58 } catch (Exception ex) {
59 throw new NoSuchAlgorithmException("Error constructing " +
60 type + " for " + algo + " using SunPCSC", ex);
61 }
62 throw new ProviderException("No impl for " + algo +
63 " " + type);
64 }
65 }
66
67 public SunPCSC() {
68 super("SunPCSC", 1.9d, "Sun PC/SC provider");
69
70 final Provider p = this;
71 AccessController.doPrivileged(new PrivilegedAction<Void>() {
72 public Void run() {
73 putService(new ProviderService(p, "TerminalFactory",
74 "PC/SC", "sun.security.smartcardio.SunPCSC$Factory"));
75 return null;
76 }
77 });
78 }
79
80 public static final class Factory extends TerminalFactorySpi {
81 public Factory(Object obj) throws PCSCException {
82 if (obj != null) {
83 throw new IllegalArgumentException
84 ("SunPCSC factory does not use parameters");
85 }
86 // make sure PCSC is available and that we can obtain a context
87 PCSC.checkAvailable();
88 PCSCTerminals.initContext();
89 }
90 /**
91 * Returns the available readers.
92 * This must be a new object for each call.
93 */
94 protected CardTerminals engineTerminals() {
|