Statistics
| Branch: | Revision:

m2u-upass-core / src / my / com / upass / vasco / TokenControllerImpl.java @ 38:3d22253b0fbc

History | View | Annotate | Download (6.64 KB)

1
package my.com.upass.vasco;
2

    
3
import java.util.HashMap;
4

    
5
import org.apache.log4j.Logger;
6

    
7
import com.vasco.utils.AAL2Wrap;
8
//import com.vasco.utils.Digipass;
9
import com.vasco.utils.DigipassInfo;
10
import com.vasco.utils.KernelParms;
11

    
12
import my.com.upass.Constants;
13
import my.com.upass.TokenBean;
14

    
15
public class TokenControllerImpl implements TokenController {
16

    
17
        private static final Logger logger = Logger.getLogger (TokenController.class);
18
        private AAL2Wrap wrapper = new AAL2Wrap();
19
        private KernelParms parms = new KernelParms(100,24,0,0,1,3,0,0,0,6,0,100,0,0,0x7FFFFF,0,0,0,0);
20
        
21
        private byte[] blob;
22
        private TokenBean tb;
23

    
24

    
25
        public TokenControllerImpl(TokenBean tokenBean) {
26
                this.tb = tokenBean;
27
                setBlob();
28
        }
29
        
30
        /**
31
         * <Method description>
32
         *
33
         * @param tokenBean
34
         *
35
         * @see my.com.upass.vasco.TokenController_#setObject(my.com.upass.TokenBean)
36
         */
37
        public void setObject(TokenBean tokenBean) {
38
                this.tb = tokenBean;
39
        }
40

    
41
        /**
42
         * <Method description>
43
         *
44
         * @return
45
         *
46
         * @see my.com.upass.vasco.TokenController_#getUpdatedObject()
47
         */
48
        public TokenBean getUpdatedObject() {
49
                return tb;
50
        }
51
        
52
        private void setBlob() {
53
                this.blob = tb.getVdpCipherText();
54
        }
55
        
56
        public byte[] getUpdatedBlob() {
57
                return this.blob;
58
        }
59
        
60
    /**
61
         * <Method description>
62
         *
63
         * @return
64
         *
65
         * @see my.com.upass.vasco.TokenController_#getRetCode()
66
         */
67
    public int getRetCode() {
68
            return wrapper.getRetCode();
69
    }
70
    
71
    /**
72
         * <Method description>
73
         *
74
         * @return
75
         *
76
         * @see my.com.upass.vasco.TokenController_#getLastError()
77
         */
78
    public String getLastError() {
79
            return wrapper.getLastError();
80
    }
81
        
82
        ///////////////////////////////////////////////////////////////////////
83
        // Public   
84
        ///////////////////////////////////////////////////////////////////////
85

    
86
    public HashMap<String,String> getTokenBlobInfo() {
87
                HashMap<String,String>  map = new HashMap<String,String>();
88
                DigipassInfo di =  wrapper.AAL2GetTokenInfo(this.blob, this.parms);
89
                
90
                map.put("TOKEN_MODEL", di.getInfo(DigipassInfo.TOKEN_MODEL) );
91
                map.put("USE_COUNT",  di.getInfo(DigipassInfo.USE_COUNT));
92
                map.put("ERROR_COUNT",  di.getInfo(DigipassInfo.ERROR_COUNT));
93
                map.put("LAST_TIME_USED", di.getInfo(DigipassInfo.LAST_TIME_USED) );
94
                map.put("CODE_WORD", di.getInfo(DigipassInfo.CODE_WORD));
95
                map.put("TRIPLE_DES", di.getInfo(DigipassInfo.TRIPLE_DES));
96
                map.put("MAX_INPUT_FIELDS", di.getInfo(DigipassInfo.MAX_INPUT_FIELDS));
97
                map.put("RESPONSE_LENGTH", di.getInfo(DigipassInfo.RESPONSE_LENGTH));
98
                map.put("RESPONSE_TYPE", di.getInfo(DigipassInfo.RESPONSE_TYPE));
99
                map.put("RESPONSE_CHECKSUM", di.getInfo(DigipassInfo.RESPONSE_CHECKSUM));
100
                map.put("TIME_STEP_USED", di.getInfo(DigipassInfo.TIME_STEP_USED));
101
                                
102
                return map;
103
    }
104
    
105
        public void dispTokenInfo() {
106
                
107
                DigipassInfo di = wrapper.AAL2GetTokenInfo(this.blob, this.parms);
108
                
109
                System.out.println("--Info----------------------------------------------");
110
                System.out.println("TOKEN_MODEL......." + di.getInfo(DigipassInfo.TOKEN_MODEL));
111
                System.out.println("USE_COUNT........." + di.getInfo(DigipassInfo.USE_COUNT));
112
                System.out.println("ERR_COUNT........." + di.getInfo(DigipassInfo.ERROR_COUNT));
113
                System.out.println("LAST_TIME_USED...." + di.getInfo(DigipassInfo.LAST_TIME_USED));
114
                System.out.println("CODE_WORD........." + di.getInfo(DigipassInfo.CODE_WORD));
115
                System.out.println("TRIPLE_DES........" + di.getInfo(DigipassInfo.TRIPLE_DES));
116
                System.out.println("MAX_INPUT_FIELDS.." + di.getInfo(DigipassInfo.MAX_INPUT_FIELDS));
117
                System.out.println("RESPONSE_LENGTH..." + di.getInfo(DigipassInfo.RESPONSE_LENGTH));
118
                System.out.println("RESPONSE_TYPE....." + di.getInfo(DigipassInfo.RESPONSE_TYPE));
119
                System.out.println("RESPONSE_CHECKSUM." + di.getInfo(DigipassInfo.RESPONSE_CHECKSUM));
120
                System.out.println("TIME_STEP_USED...." + di.getInfo(DigipassInfo.TIME_STEP_USED));
121
                System.out.println("----------------------------------------------------");
122
        }
123
        
124
        private void updateTokenObject() {
125
                
126
                DigipassInfo di = wrapper.AAL2GetTokenInfo(this.blob, this.parms);
127
                
128
                tb.setVdpModel( di.getInfo(DigipassInfo.TOKEN_MODEL) );                
129
                tb.setVdpCipherText( this.blob );
130
                
131
                //System.out.println("Use=" + Integer.parseInt( di.getInfo(DigipassInfo.USE_COUNT)) + 
132
                //                " Error=" + Integer.parseInt( di.getInfo(DigipassInfo.ERROR_COUNT)));
133
                
134
                tb.setVuseCount(Integer.parseInt( di.getInfo(DigipassInfo.USE_COUNT)) );
135
                tb.setVerrorCount(Integer.parseInt( di.getInfo(DigipassInfo.ERROR_COUNT)) );
136
                
137
                //System.out.println("u="+tb.getVUseCount() + "e="+tb.getVErrorCount());
138
        }
139
        
140
        
141
        public int verifyToken(String otp, String userAlias, String pin) throws Exception
142
        {
143
                return verifyToken(otp);
144
        }
145
        
146
        /**
147
         * <Method description>
148
         *
149
         * @param password
150
         * @return
151
         *
152
         * @see my.com.upass.vasco.TokenController_#verifyToken(java.lang.String)
153
         */
154
        public int verifyToken(String password) {
155

    
156
                int rc = wrapper.AAL2VerifyPassword(this.blob, this.parms, password, null);
157
                
158
                updateTokenObject();
159
                if (rc == 0) {
160
                        
161
                        return Constants.ERR_SUCCESS;
162
                }
163
                else {
164
                        
165
                        /*
166
                         * KernelParms:
167
                         * IThreshold - Number of successive Identification errors that will cause Server-side locking of 
168
                         * the DIGIPASS. When the specified number is reached, AAL2Wrap.AAL2VerifyPassword() 
169
                         * returns an error code 202. E.g. 3 validations have failed for one DIGIPASS, 
170
                         * so its error count is 3. If IThreshold is set to 3, 
171
                         * further calls to AAL2Wrap.AAL2VerifyPassword() will return 202.
172
                         */
173
                        
174
                        //System.out.println("rc=" + rc + " Error=" + this.getLastError());
175
                        //err=1,Validation Failed; err=201,Code Replay Attempt ;err=202,Identification Error Threshold Reached
176
                        switch(rc) {
177
                        case 1 :         return Constants.ERR_INVALID_CREDENTIAL;
178
                        case 201:         return Constants.ERR_REUSED_PASSWD;
179
                        case 202:         return Constants.ERR_EXCEED_MAX_TRIES;
180
                        default:        return Constants.ERR_UNKNOWN;
181
                        }//end case
182
                }
183

    
184
        }
185
        
186
        /**
187
         * <Method description>
188
         *
189
         * @return
190
         *
191
         * @see my.com.upass.vasco.TokenController_#resetToken()
192
         */
193
        public int resetToken() {
194
                int rc = wrapper.AAL2ResetTokenInfo(this.blob, this.parms);
195
                updateTokenObject();
196
                
197
                if (rc == 0) {
198
                        return Constants.ERR_SUCCESS;
199
                }
200
                else {
201
                        logger.info("rc=" + rc + " Error=" + this.getLastError());
202
                        
203
                        switch(rc) {
204
                        case 1 :         return Constants.ERR_INVALID_CREDENTIAL;
205
                        case 201:         return Constants.ERR_REUSED_PASSWD;
206
                        default:        return Constants.ERR_UNKNOWN;
207
                        }//end case
208
                        
209
                }
210
        }
211

    
212
        public int syncToken(String userAlias, String otp1, String otp2) {
213
                // TODO Auto-generated method stub
214
                return 0;
215
        }
216

    
217
        
218
}