source: branches/2.2.0.1/security/ExpressoCert/src/br/gov/serpro/cert/Token.java @ 4198

Revision 4198, 3.3 KB checked in by rafaelraymundo, 13 years ago (diff)

Ticket #1813 - Problema com mais de um driver de token configurado.

Line 
1/*
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
4 */
5
6package br.gov.serpro.cert;
7
8import br.gov.serpro.setup.Setup;
9import java.io.ByteArrayInputStream;
10import java.io.File;
11import java.security.Provider;
12import java.security.ProviderException;
13import java.security.Security;
14
15//TODO: Deal with wildcards for environments variables.
16
17/**
18 *
19 * @author esa
20 */
21class Token{
22
23    private final Setup setup;
24    private String name;
25    private String libraryPath;
26    private Provider tokenProvider;
27    private boolean registered = false;
28
29    private Token(final Setup setup) {
30        this.setup = setup;
31    }
32
33    Token(String name, String libraryPath, final Setup setup){
34        this(setup);
35        this.setName(name);
36        this.setLibraryPath(libraryPath);
37    }
38
39    public boolean isRegistered() {
40        return this.registered;
41    }
42
43    public void setLibraryPath(String libraryPath) {
44        this.libraryPath = libraryPath;
45    }
46
47    public void setName(String name) {
48        this.name = name;
49    }
50
51    public String getName() {
52        return this.name;
53    }
54
55    public String getProviderName(){
56        return this.tokenProvider.getName();
57    }
58
59    protected void registerToken(long slot){
60
61        String tokenConfiguration = new String("name = " + name + "_" + slot + "\n" +
62            "library = " + libraryPath + "\nslot = " + slot +
63            "\ndisabledMechanisms = {\n" + "CKM_SHA1_RSA_PKCS\n}");
64
65        try{
66            this.registered = false;
67            if (libraryExists()){
68                Provider pkcs11Provider = new sun.security.pkcs11.SunPKCS11(new ByteArrayInputStream(tokenConfiguration.getBytes()));
69                this.tokenProvider = pkcs11Provider;
70                if (setup.getParameter("debug").equalsIgnoreCase("true")) {
71                    System.out.println("Adding provider: "+pkcs11Provider.getName());
72                    System.out.println("Provider info: " + pkcs11Provider.getInfo());
73                    System.out.println("Provider services:");
74                    for (Provider.Service service : pkcs11Provider.getServices()){
75                        System.out.println("\t"+service.toString());
76                    }
77                }
78                Security.addProvider(pkcs11Provider);
79                this.setName(this.tokenProvider.getName());
80                this.registered = true;
81            }
82        }
83        catch (ProviderException e){
84            if (setup.getParameter("debug").equalsIgnoreCase("true")) {
85                e.printStackTrace();
86                System.out.println("Não foi possível inicializar o seguinte token: " + tokenConfiguration);
87            }
88        }
89    }
90
91    protected void unregisterToken(){
92        Security.removeProvider(this.tokenProvider.getName());
93    }
94
95    public boolean libraryExists(){
96
97        File libraryFile = new File(libraryPath);
98        if (libraryFile.exists()){
99            if (setup.getParameter("debug").equalsIgnoreCase("true")) {
100                System.out.println("Arquivo " + libraryPath + " existe.");
101            }
102            return true;
103        }
104       
105        if (setup.getParameter("debug").equalsIgnoreCase("true")) {
106            System.out.println("Biblioteca do Token/SmartCard " + name + " não foi encontrada: " + libraryPath);
107        }
108       
109        return false;
110    }
111   
112}
Note: See TracBrowser for help on using the repository browser.