Ignore:
Timestamp:
05/03/11 15:58:45 (13 years ago)
Author:
rafaelraymundo
Message:

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2.0.1/security/ExpressoCert/src/br/gov/serpro/cert/TokenCollection.java

    r1174 r4198  
    77 
    88import br.gov.serpro.setup.Setup; 
     9import java.io.IOException; 
    910import java.util.HashMap; 
     11import java.util.logging.Level; 
     12import java.util.logging.Logger; 
     13import sun.security.pkcs11.wrapper.CK_C_INITIALIZE_ARGS; 
     14import sun.security.pkcs11.wrapper.CK_TOKEN_INFO; 
     15import sun.security.pkcs11.wrapper.PKCS11; 
     16import sun.security.pkcs11.wrapper.PKCS11Exception; 
     17import static sun.security.pkcs11.wrapper.PKCS11Constants.*; 
    1018 
    1119/** 
     
    3644         
    3745        String[] tokensArray = tokens.split(","); 
    38         for (String tokenString : tokensArray){ 
    39             if (tokenString != null && tokenString.length() > 0){ 
    40                 String[] tokenArray = tokenString.split(";"); 
     46        for (int i = 0; i < tokensArray.length; i++){ 
     47            if (tokensArray[i] != null && tokensArray[i].length() > 0){ 
     48                String[] tokenArray = tokensArray[i].split(";"); 
    4149                Token token = new Token(tokenArray[0], tokenArray[1], this.setup); 
    42                 token.registerToken(); 
    43                 if (token.isRegistered()){ 
    44                     this.put(token.getName(), token); 
     50 
     51                // Aqui testar se existe token inserido em algum slot para determinado driver. 
     52                // Pega sempre o primeiro slot registrado com a lib tokenArray[1] 
     53                // TODO: Deixar o usuário escolher o token que vai usar; 
     54                if (setup.getParameter("debug").equalsIgnoreCase("true")) { 
     55                    System.out.println("Getting slots from " + tokenArray[1]); 
     56                } 
     57                try { 
     58                    long[] slots = getSlotsWithTokens(tokenArray[1]); 
     59                    if (slots.length > 0){ 
     60                        token.registerToken(slots[0]); 
     61                        if (token.isRegistered()){ 
     62                            this.put(token.getName(), token); 
     63                        } 
     64                    } 
     65                } catch (IOException iex){ 
     66                    continue; 
    4567                } 
    4668            } 
     
    4870    } 
    4971 
     72    public long[] getSlotsWithTokens(String libraryPath) throws IOException{ 
     73        CK_C_INITIALIZE_ARGS initArgs = new CK_C_INITIALIZE_ARGS(); 
     74        String functionList = "C_GetFunctionList"; 
     75 
     76        initArgs.flags = CKF_OS_LOCKING_OK; 
     77        PKCS11 tmpPKCS11 = null; 
     78        long[] slotList = null; 
     79        try { 
     80            try { 
     81                tmpPKCS11 = PKCS11.getInstance(libraryPath, functionList, initArgs, false); 
     82            } catch (IOException ex) { 
     83                if (setup.getParameter("debug").equalsIgnoreCase("true")) { 
     84                    Logger.getLogger(TokenCollection.class.getName()).log(Level.SEVERE, null, ex); 
     85                } 
     86                throw ex; 
     87            } 
     88        } catch (PKCS11Exception e) { 
     89            try { 
     90                initArgs = null; 
     91                tmpPKCS11 = PKCS11.getInstance(libraryPath, functionList, initArgs, true); 
     92            } catch (IOException ex) { 
     93                if (setup.getParameter("debug").equalsIgnoreCase("true")) { 
     94                    Logger.getLogger(TokenCollection.class.getName()).log(Level.SEVERE, null, ex); 
     95                } 
     96            } catch (PKCS11Exception ex) { 
     97                if (setup.getParameter("debug").equalsIgnoreCase("true")) { 
     98                    Logger.getLogger(TokenCollection.class.getName()).log(Level.SEVERE, null, ex); 
     99                } 
     100            } 
     101        } 
     102 
     103        try { 
     104            slotList = tmpPKCS11.C_GetSlotList(true); 
     105 
     106            for (long slot : slotList){ 
     107                CK_TOKEN_INFO tokenInfo = tmpPKCS11.C_GetTokenInfo(slot); 
     108                if (setup.getParameter("debug").equalsIgnoreCase("true")) { 
     109                    System.out.println("slot: "+slot+"\nmanufacturerID: " 
     110                            + String.valueOf(tokenInfo.manufacturerID) + "\nmodel: " 
     111                            + String.valueOf(tokenInfo.model)); 
     112                } 
     113            } 
     114        } catch (PKCS11Exception ex) { 
     115            if (setup.getParameter("debug").equalsIgnoreCase("true")) { 
     116                Logger.getLogger(TokenCollection.class.getName()).log(Level.SEVERE, null, ex); 
     117            } 
     118        } catch (Throwable t) { 
     119            if (setup.getParameter("debug").equalsIgnoreCase("true")) { 
     120                Logger.getLogger(TokenCollection.class.getName()).log(Level.SEVERE, null, t); 
     121            } 
     122        } 
     123 
     124        return slotList; 
     125 
     126    } 
    50127} 
Note: See TracChangeset for help on using the changeset viewer.